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 17set testdir [file dirname $argv0] 18source $testdir/tester.tcl 19 20# Only run these tests if the approriate APIs are defined 21# in the system under test. 22# 23ifcapable !load_ext { 24 finish_test 25 return 26} 27if {[info command sqlite3_auto_extension_sqr]==""} { 28 finish_test 29 return 30} 31 32 33# None of the extension are loaded by default. 34# 35do_test loadext2-1.1 { 36 catchsql { 37 SELECT sqr(2) 38 } 39} {1 {no such function: sqr}} 40do_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# 48do_test loadext2-1.2.1 { 49 sqlite3_cancel_auto_extension_sqr 50} {0} 51do_test loadext2-1.2.2 { 52 sqlite3_cancel_auto_extension_sqr 53} {0} 54do_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# 61do_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}} 68do_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# 77do_test loadext2-1.5 { 78 sqlite3 db test.db 79 catchsql { 80 SELECT sqr(2) 81 } 82} {0 4.0} 83do_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# 92do_test loadext2-1.7.1 { 93 sqlite3_cancel_auto_extension_sqr 94} {1} 95do_test loadext2-1.7.2 { 96 sqlite3_cancel_auto_extension_sqr 97} {0} 98do_test loadext2-1.7.3 { 99 sqlite3_cancel_auto_extension_cube 100} {1} 101do_test loadext2-1.7.4 { 102 sqlite3_cancel_auto_extension_cube 103} {0} 104do_test loadext2-1.7.5 { 105 catchsql { 106 SELECT sqr(2) 107 } 108} {0 4.0} 109do_test loadext2-1.8 { 110 catchsql { 111 SELECT cube(2) 112 } 113} {0 8.0} 114 115 116# Register only the sqr() function. 117# 118do_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} 125do_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# 133do_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}} 141do_test loadext2-1.12 { 142 catchsql { 143 SELECT cube(2) 144 } 145} {0 8.0} 146 147# Register a broken entry point. 148# 149do_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!}} 154do_test loadext2-1.14 { 155 catchsql { 156 SELECT sqr(2) 157 } 158} {1 {no such function: sqr}} 159do_test loadext2-1.15 { 160 catchsql { 161 SELECT cube(2) 162 } 163} {0 8.0} 164 165 166sqlite3_reset_auto_extension 167autoinstall_test_functions 168finish_test 169