xref: /sqlite-3.40.0/test/loadext2.test (revision 425e27db)
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