11409be69Sdrh# 2006 August 23 21409be69Sdrh# 31409be69Sdrh# The author disclaims copyright to this source code. In place of 41409be69Sdrh# a legal notice, here is a blessing: 51409be69Sdrh# 61409be69Sdrh# May you do good and not evil. 71409be69Sdrh# May you find forgiveness for yourself and forgive others. 81409be69Sdrh# May you share freely, never taking more than you give. 91409be69Sdrh# 101409be69Sdrh#*********************************************************************** 111409be69Sdrh# This file implements regression tests for SQLite library. The 121409be69Sdrh# focus of this script is automatic extension loading and the 131409be69Sdrh# sqlite3_auto_extension() API. 141409be69Sdrh# 15984bfaa4Sdrh# $Id: loadext2.test,v 1.3 2008/03/19 16:08:54 drh Exp $ 161409be69Sdrh 171409be69Sdrhset testdir [file dirname $argv0] 181409be69Sdrhsource $testdir/tester.tcl 191409be69Sdrh 201409be69Sdrh# Only run these tests if the approriate APIs are defined 211409be69Sdrh# in the system under test. 221409be69Sdrh# 231e9daa6aSdrhifcapable !load_ext { 241e9daa6aSdrh finish_test 251e9daa6aSdrh return 261e9daa6aSdrh} 271409be69Sdrhif {[info command sqlite3_auto_extension_sqr]==""} { 281409be69Sdrh finish_test 291409be69Sdrh return 301409be69Sdrh} 311409be69Sdrh 321409be69Sdrh 331409be69Sdrh# None of the extension are loaded by default. 341409be69Sdrh# 351409be69Sdrhdo_test loadext2-1.1 { 361409be69Sdrh catchsql { 371409be69Sdrh SELECT sqr(2) 381409be69Sdrh } 391409be69Sdrh} {1 {no such function: sqr}} 401409be69Sdrhdo_test loadext2-1.2 { 411409be69Sdrh catchsql { 421409be69Sdrh SELECT cube(2) 431409be69Sdrh } 441409be69Sdrh} {1 {no such function: cube}} 451409be69Sdrh 46*425e27dbSdrh# Extensions loaders not currently registered 47*425e27dbSdrh# 48*425e27dbSdrhdo_test loadext2-1.2.1 { 49*425e27dbSdrh sqlite3_cancel_auto_extension_sqr 50*425e27dbSdrh} {0} 51*425e27dbSdrhdo_test loadext2-1.2.2 { 52*425e27dbSdrh sqlite3_cancel_auto_extension_sqr 53*425e27dbSdrh} {0} 54*425e27dbSdrhdo_test loadext2-1.2.3 { 55*425e27dbSdrh sqlite3_cancel_auto_extension_sqr 56*425e27dbSdrh} {0} 57*425e27dbSdrh 58*425e27dbSdrh 591409be69Sdrh# Register auto-loaders. Still functions do not exist. 601409be69Sdrh# 611409be69Sdrhdo_test loadext2-1.3 { 621409be69Sdrh sqlite3_auto_extension_sqr 631409be69Sdrh sqlite3_auto_extension_cube 641409be69Sdrh catchsql { 651409be69Sdrh SELECT sqr(2) 661409be69Sdrh } 671409be69Sdrh} {1 {no such function: sqr}} 681409be69Sdrhdo_test loadext2-1.4 { 691409be69Sdrh catchsql { 701409be69Sdrh SELECT cube(2) 711409be69Sdrh } 721409be69Sdrh} {1 {no such function: cube}} 731409be69Sdrh 741409be69Sdrh 751409be69Sdrh# Functions do exist in a new database connection 761409be69Sdrh# 771409be69Sdrhdo_test loadext2-1.5 { 781409be69Sdrh sqlite3 db test.db 791409be69Sdrh catchsql { 801409be69Sdrh SELECT sqr(2) 811409be69Sdrh } 821409be69Sdrh} {0 4.0} 831409be69Sdrhdo_test loadext2-1.6 { 841409be69Sdrh catchsql { 851409be69Sdrh SELECT cube(2) 861409be69Sdrh } 871409be69Sdrh} {0 8.0} 881409be69Sdrh 891409be69Sdrh 901409be69Sdrh# Reset extension auto loading. Existing extensions still exist. 911409be69Sdrh# 92*425e27dbSdrhdo_test loadext2-1.7.1 { 93*425e27dbSdrh sqlite3_cancel_auto_extension_sqr 94*425e27dbSdrh} {1} 95*425e27dbSdrhdo_test loadext2-1.7.2 { 96*425e27dbSdrh sqlite3_cancel_auto_extension_sqr 97*425e27dbSdrh} {0} 98*425e27dbSdrhdo_test loadext2-1.7.3 { 99*425e27dbSdrh sqlite3_cancel_auto_extension_cube 100*425e27dbSdrh} {1} 101*425e27dbSdrhdo_test loadext2-1.7.4 { 102*425e27dbSdrh sqlite3_cancel_auto_extension_cube 103*425e27dbSdrh} {0} 104*425e27dbSdrhdo_test loadext2-1.7.5 { 1051409be69Sdrh catchsql { 1061409be69Sdrh SELECT sqr(2) 1071409be69Sdrh } 1081409be69Sdrh} {0 4.0} 1091409be69Sdrhdo_test loadext2-1.8 { 1101409be69Sdrh catchsql { 1111409be69Sdrh SELECT cube(2) 1121409be69Sdrh } 1131409be69Sdrh} {0 8.0} 1141409be69Sdrh 1151409be69Sdrh 1161409be69Sdrh# Register only the sqr() function. 1171409be69Sdrh# 1181409be69Sdrhdo_test loadext2-1.9 { 1191409be69Sdrh sqlite3_auto_extension_sqr 1201409be69Sdrh sqlite3 db test.db 1211409be69Sdrh catchsql { 1221409be69Sdrh SELECT sqr(2) 1231409be69Sdrh } 1241409be69Sdrh} {0 4.0} 1251409be69Sdrhdo_test loadext2-1.10 { 1261409be69Sdrh catchsql { 1271409be69Sdrh SELECT cube(2) 1281409be69Sdrh } 1291409be69Sdrh} {1 {no such function: cube}} 1301409be69Sdrh 1311409be69Sdrh# Register only the cube() function. 1321409be69Sdrh# 1331409be69Sdrhdo_test loadext2-1.11 { 1341409be69Sdrh sqlite3_reset_auto_extension 1351409be69Sdrh sqlite3_auto_extension_cube 1361409be69Sdrh sqlite3 db test.db 1371409be69Sdrh catchsql { 1381409be69Sdrh SELECT sqr(2) 1391409be69Sdrh } 1401409be69Sdrh} {1 {no such function: sqr}} 1411409be69Sdrhdo_test loadext2-1.12 { 1421409be69Sdrh catchsql { 1431409be69Sdrh SELECT cube(2) 1441409be69Sdrh } 1451409be69Sdrh} {0 8.0} 1461409be69Sdrh 1471409be69Sdrh# Register a broken entry point. 1481409be69Sdrh# 1491409be69Sdrhdo_test loadext2-1.13 { 1501409be69Sdrh sqlite3_auto_extension_broken 1511409be69Sdrh set rc [catch {sqlite3 db test.db} errmsg] 1521409be69Sdrh lappend rc $errmsg 1531409be69Sdrh} {1 {automatic extension loading failed: broken autoext!}} 1541409be69Sdrhdo_test loadext2-1.14 { 1551409be69Sdrh catchsql { 1561409be69Sdrh SELECT sqr(2) 1571409be69Sdrh } 1581409be69Sdrh} {1 {no such function: sqr}} 1591409be69Sdrhdo_test loadext2-1.15 { 1601409be69Sdrh catchsql { 1611409be69Sdrh SELECT cube(2) 1621409be69Sdrh } 1631409be69Sdrh} {0 8.0} 1641409be69Sdrh 1651409be69Sdrh 1661409be69Sdrhsqlite3_reset_auto_extension 167984bfaa4Sdrhautoinstall_test_functions 1681409be69Sdrhfinish_test 169