gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/loadext2.test (about) 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 17 set testdir [file dirname $argv0] 18 source $testdir/tester.tcl 19 20 # Only run these tests if the approriate APIs are defined 21 # in the system under test. 22 # 23 ifcapable !load_ext { 24 finish_test 25 return 26 } 27 if {[info command sqlite3_auto_extension_sqr]==""} { 28 finish_test 29 return 30 } 31 32 33 # None of the extension are loaded by default. 34 # 35 do_test loadext2-1.1 { 36 catchsql { 37 SELECT sqr(2) 38 } 39 } {1 {no such function: sqr}} 40 do_test loadext2-1.2 { 41 catchsql { 42 SELECT cube(2) 43 } 44 } {1 {no such function: cube}} 45 46 # Extensions loaders not currently registered 47 # 48 do_test loadext2-1.2.1 { 49 sqlite3_cancel_auto_extension_sqr 50 } {0} 51 do_test loadext2-1.2.2 { 52 sqlite3_cancel_auto_extension_sqr 53 } {0} 54 do_test loadext2-1.2.3 { 55 sqlite3_cancel_auto_extension_sqr 56 } {0} 57 58 59 # Register auto-loaders. Still functions do not exist. 60 # 61 do_test loadext2-1.3 { 62 sqlite3_auto_extension_sqr 63 sqlite3_auto_extension_cube 64 catchsql { 65 SELECT sqr(2) 66 } 67 } {1 {no such function: sqr}} 68 do_test loadext2-1.4 { 69 catchsql { 70 SELECT cube(2) 71 } 72 } {1 {no such function: cube}} 73 74 75 # Functions do exist in a new database connection 76 # 77 do_test loadext2-1.5 { 78 sqlite3 db test.db 79 catchsql { 80 SELECT sqr(2) 81 } 82 } {0 4.0} 83 do_test loadext2-1.6 { 84 catchsql { 85 SELECT cube(2) 86 } 87 } {0 8.0} 88 89 90 # Reset extension auto loading. Existing extensions still exist. 91 # 92 do_test loadext2-1.7.1 { 93 sqlite3_cancel_auto_extension_sqr 94 } {1} 95 do_test loadext2-1.7.2 { 96 sqlite3_cancel_auto_extension_sqr 97 } {0} 98 do_test loadext2-1.7.3 { 99 sqlite3_cancel_auto_extension_cube 100 } {1} 101 do_test loadext2-1.7.4 { 102 sqlite3_cancel_auto_extension_cube 103 } {0} 104 do_test loadext2-1.7.5 { 105 catchsql { 106 SELECT sqr(2) 107 } 108 } {0 4.0} 109 do_test loadext2-1.8 { 110 catchsql { 111 SELECT cube(2) 112 } 113 } {0 8.0} 114 115 116 # Register only the sqr() function. 117 # 118 do_test loadext2-1.9 { 119 sqlite3_auto_extension_sqr 120 sqlite3 db test.db 121 catchsql { 122 SELECT sqr(2) 123 } 124 } {0 4.0} 125 do_test loadext2-1.10 { 126 catchsql { 127 SELECT cube(2) 128 } 129 } {1 {no such function: cube}} 130 131 # Register only the cube() function. 132 # 133 do_test loadext2-1.11 { 134 sqlite3_reset_auto_extension 135 sqlite3_auto_extension_cube 136 sqlite3 db test.db 137 catchsql { 138 SELECT sqr(2) 139 } 140 } {1 {no such function: sqr}} 141 do_test loadext2-1.12 { 142 catchsql { 143 SELECT cube(2) 144 } 145 } {0 8.0} 146 147 # Register a broken entry point. 148 # 149 do_test loadext2-1.13 { 150 sqlite3_auto_extension_broken 151 set rc [catch {sqlite3 db test.db} errmsg] 152 lappend rc $errmsg 153 } {1 {automatic extension loading failed: broken autoext!}} 154 do_test loadext2-1.14 { 155 catchsql { 156 SELECT sqr(2) 157 } 158 } {1 {no such function: sqr}} 159 do_test loadext2-1.15 { 160 catchsql { 161 SELECT cube(2) 162 } 163 } {0 8.0} 164 165 166 sqlite3_reset_auto_extension 167 autoinstall_test_functions 168 finish_test