loadext2.test 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. # 2006 August 23
  2. #
  3. # The author disclaims copyright to this source code. In place of
  4. # a legal notice, here is a blessing:
  5. #
  6. # May you do good and not evil.
  7. # May you find forgiveness for yourself and forgive others.
  8. # May you share freely, never taking more than you give.
  9. #
  10. #***********************************************************************
  11. # This file implements regression tests for SQLite library. The
  12. # focus of this script is automatic extension loading and the
  13. # sqlite3_auto_extension() API.
  14. #
  15. # $Id: loadext2.test,v 1.3 2008/03/19 16:08:54 drh Exp $
  16. set testdir [file dirname $argv0]
  17. source $testdir/tester.tcl
  18. # Only run these tests if the approriate APIs are defined
  19. # in the system under test.
  20. #
  21. ifcapable !load_ext {
  22. finish_test
  23. return
  24. }
  25. if {[info command sqlite3_auto_extension_sqr]==""} {
  26. finish_test
  27. return
  28. }
  29. # None of the extension are loaded by default.
  30. #
  31. do_test loadext2-1.1 {
  32. catchsql {
  33. SELECT sqr(2)
  34. }
  35. } {1 {no such function: sqr}}
  36. do_test loadext2-1.2 {
  37. catchsql {
  38. SELECT cube(2)
  39. }
  40. } {1 {no such function: cube}}
  41. # Extensions loaders not currently registered
  42. #
  43. do_test loadext2-1.2.1 {
  44. sqlite3_cancel_auto_extension_sqr
  45. } {0}
  46. do_test loadext2-1.2.2 {
  47. sqlite3_cancel_auto_extension_sqr
  48. } {0}
  49. do_test loadext2-1.2.3 {
  50. sqlite3_cancel_auto_extension_sqr
  51. } {0}
  52. # Register auto-loaders. Still functions do not exist.
  53. #
  54. do_test loadext2-1.3 {
  55. sqlite3_auto_extension_sqr
  56. sqlite3_auto_extension_cube
  57. catchsql {
  58. SELECT sqr(2)
  59. }
  60. } {1 {no such function: sqr}}
  61. do_test loadext2-1.4 {
  62. catchsql {
  63. SELECT cube(2)
  64. }
  65. } {1 {no such function: cube}}
  66. # Functions do exist in a new database connection
  67. #
  68. do_test loadext2-1.5 {
  69. sqlite3 db test.db
  70. catchsql {
  71. SELECT sqr(2)
  72. }
  73. } {0 4.0}
  74. do_test loadext2-1.6 {
  75. catchsql {
  76. SELECT cube(2)
  77. }
  78. } {0 8.0}
  79. # Reset extension auto loading. Existing extensions still exist.
  80. #
  81. do_test loadext2-1.7.1 {
  82. sqlite3_cancel_auto_extension_sqr
  83. } {1}
  84. do_test loadext2-1.7.2 {
  85. sqlite3_cancel_auto_extension_sqr
  86. } {0}
  87. do_test loadext2-1.7.3 {
  88. sqlite3_cancel_auto_extension_cube
  89. } {1}
  90. do_test loadext2-1.7.4 {
  91. sqlite3_cancel_auto_extension_cube
  92. } {0}
  93. do_test loadext2-1.7.5 {
  94. catchsql {
  95. SELECT sqr(2)
  96. }
  97. } {0 4.0}
  98. do_test loadext2-1.8 {
  99. catchsql {
  100. SELECT cube(2)
  101. }
  102. } {0 8.0}
  103. # Register only the sqr() function.
  104. #
  105. do_test loadext2-1.9 {
  106. sqlite3_auto_extension_sqr
  107. sqlite3 db test.db
  108. catchsql {
  109. SELECT sqr(2)
  110. }
  111. } {0 4.0}
  112. do_test loadext2-1.10 {
  113. catchsql {
  114. SELECT cube(2)
  115. }
  116. } {1 {no such function: cube}}
  117. # Register only the cube() function.
  118. #
  119. do_test loadext2-1.11 {
  120. sqlite3_reset_auto_extension
  121. sqlite3_auto_extension_cube
  122. sqlite3 db test.db
  123. catchsql {
  124. SELECT sqr(2)
  125. }
  126. } {1 {no such function: sqr}}
  127. do_test loadext2-1.12 {
  128. catchsql {
  129. SELECT cube(2)
  130. }
  131. } {0 8.0}
  132. # Register a broken entry point.
  133. #
  134. do_test loadext2-1.13 {
  135. sqlite3_auto_extension_broken
  136. set rc [catch {sqlite3 db test.db} errmsg]
  137. lappend rc $errmsg
  138. } {1 {automatic extension loading failed: broken autoext!}}
  139. do_test loadext2-1.14 {
  140. catchsql {
  141. SELECT sqr(2)
  142. }
  143. } {1 {no such function: sqr}}
  144. do_test loadext2-1.15 {
  145. catchsql {
  146. SELECT cube(2)
  147. }
  148. } {0 8.0}
  149. sqlite3_reset_auto_extension
  150. autoinstall_test_functions
  151. finish_test