Index: third_party/sqlite/src/test/capi3.test |
diff --git a/third_party/sqlite/src/test/capi3.test b/third_party/sqlite/src/test/capi3.test |
index cc1461a7eefd2a63183bee297f1419570938697a..9f3d6f6916448ffc7a4f4e0e5b7260e9e3a22a5d 100644 |
--- a/third_party/sqlite/src/test/capi3.test |
+++ b/third_party/sqlite/src/test/capi3.test |
@@ -16,6 +16,7 @@ |
set testdir [file dirname $argv0] |
source $testdir/tester.tcl |
+set ::testprefix capi3 |
# Do not use a codec for tests in this file, as the database file is |
# manipulated directly using tcl scripts (using the [hexio_write] command). |
@@ -179,16 +180,18 @@ do_test capi3-3.4 { |
do_test capi3-3.5 { |
sqlite3_close $db2 |
} {SQLITE_OK} |
-do_test capi3-3.6.1-misuse { |
- sqlite3_close $db2 |
-} {SQLITE_MISUSE} |
-do_test capi3-3.6.2-misuse { |
- sqlite3_errmsg $db2 |
-} {library routine called out of sequence} |
-ifcapable {utf16} { |
- do_test capi3-3.6.3-misuse { |
- utf8 [sqlite3_errmsg16 $db2] |
+if {[clang_sanitize_address]==0} { |
+ do_test capi3-3.6.1-misuse { |
+ sqlite3_close $db2 |
+ } {SQLITE_MISUSE} |
+ do_test capi3-3.6.2-misuse { |
+ sqlite3_errmsg $db2 |
} {library routine called out of sequence} |
+ ifcapable {utf16} { |
+ do_test capi3-3.6.3-misuse { |
+ utf8 [sqlite3_errmsg16 $db2] |
+ } {library routine called out of sequence} |
+ } |
} |
do_test capi3-3.7 { |
@@ -649,17 +652,24 @@ do_test capi3-6.1 { |
db cache flush |
sqlite3_close $DB |
} {SQLITE_BUSY} |
+ |
+# 6.2 and 6.3 used to return SQLITE_ERROR and SQLITE_SCHEMA, respectively. |
+# But since attempting to close a connection no longer resets the internal |
+# schema and expires all statements, this is no longer the case. |
do_test capi3-6.2 { |
sqlite3_step $STMT |
-} {SQLITE_ERROR} |
+} {SQLITE_ROW} |
#check_data $STMT capi3-6.3 {INTEGER} {1} {1.0} {1} |
do_test capi3-6.3 { |
sqlite3_finalize $STMT |
-} {SQLITE_SCHEMA} |
-do_test capi3-6.4-misuse { |
- db cache flush |
- sqlite3_close $DB |
} {SQLITE_OK} |
+ |
+if {[clang_sanitize_address]==0} { |
+ do_test capi3-6.4-misuse { |
+ db cache flush |
+ sqlite3_close $DB |
+ } {SQLITE_OK} |
+} |
db close |
# This procedure sets the value of the file-format in file 'test.db' |
@@ -697,7 +707,7 @@ if {![sqlite3 -has-codec]} { |
# Now test that the library correctly handles bogus entries in the |
# sqlite_master table (schema corruption). |
do_test capi3-8.1 { |
- file delete -force test.db test.db-journal |
+ forcedelete test.db test.db-journal |
sqlite3 db test.db |
execsql { |
CREATE TABLE t1(a); |
@@ -722,7 +732,7 @@ if {![sqlite3 -has-codec]} { |
# Build a 5-field row record. The first field is a string 'table', and |
# subsequent fields are all NULL. |
db close |
- file delete -force test.db test.db-journal |
+ forcedelete test.db test.db-journal |
sqlite3 db test.db |
execsql { |
CREATE TABLE t1(a); |
@@ -739,8 +749,8 @@ if {![sqlite3 -has-codec]} { |
} {1 {malformed database schema (?)}} |
db close |
} |
-file delete -force test.db |
-file delete -force test.db-journal |
+forcedelete test.db |
+forcedelete test.db-journal |
# Test the english language string equivalents for sqlite error codes |
@@ -778,6 +788,7 @@ foreach {code english} $code2english { |
} |
# Test the error message when a "real" out of memory occurs. |
+if { [permutation] != "nofaultsim" } { |
ifcapable memdebug { |
do_test capi3-10-1 { |
sqlite3 db test.db |
@@ -816,6 +827,7 @@ ifcapable memdebug { |
db close |
sqlite3_memdebug_fail -1 |
} |
+} |
# The following tests - capi3-11.* - test that a COMMIT or ROLLBACK |
# statement issued while there are still outstanding VMs that are part of |
@@ -894,19 +906,26 @@ do_test capi3-11.9.2 { |
catchsql { |
ROLLBACK; |
} |
-} {1 {cannot rollback transaction - SQL statements in progress}} |
+} {0 {}} |
do_test capi3-11.9.3 { |
sqlite3_get_autocommit $DB |
-} 0 |
+} 1 |
do_test capi3-11.10 { |
sqlite3_step $STMT |
} {SQLITE_ROW} |
+ifcapable !autoreset { |
+ # If SQLITE_OMIT_AUTORESET is defined, then the statement must be |
+ # reset() before it can be passed to step() again. |
+ do_test capi3-11.11a { sqlite3_step $STMT } {SQLITE_MISUSE} |
+ do_test capi3-11.11b { sqlite3_reset $STMT } {SQLITE_ABORT} |
+} |
do_test capi3-11.11 { |
sqlite3_step $STMT |
-} {SQLITE_ROW} |
+} {SQLITE_DONE} |
do_test capi3-11.12 { |
sqlite3_step $STMT |
-} {SQLITE_DONE} |
+ sqlite3_step $STMT |
+} {SQLITE_ROW} |
do_test capi3-11.13 { |
sqlite3_finalize $STMT |
} {SQLITE_OK} |
@@ -914,15 +933,15 @@ do_test capi3-11.14 { |
execsql { |
SELECT a FROM t2; |
} |
-} {1 2 3} |
+} {1 2} |
do_test capi3-11.14.1 { |
sqlite3_get_autocommit $DB |
-} 0 |
+} 1 |
do_test capi3-11.15 { |
catchsql { |
ROLLBACK; |
} |
-} {0 {}} |
+} {1 {cannot rollback - no transaction is active}} |
do_test capi3-11.15.1 { |
sqlite3_get_autocommit $DB |
} 1 |
@@ -1046,11 +1065,13 @@ if {[llength [info commands sqlite3_sleep]]>0} { |
} |
# Ticket #1219: Make sure binding APIs can handle a NULL pointer. |
-# |
-do_test capi3-14.1-misuse { |
- set rc [catch {sqlite3_bind_text 0 1 hello 5} msg] |
- lappend rc $msg |
-} {1 SQLITE_MISUSE} |
+# |
+if {[clang_sanitize_address]==0} { |
+ do_test capi3-14.1-misuse { |
+ set rc [catch {sqlite3_bind_text 0 1 hello 5} msg] |
+ lappend rc $msg |
+ } {1 SQLITE_MISUSE} |
+} |
# Ticket #1650: Honor the nBytes parameter to sqlite3_prepare. |
# |
@@ -1201,6 +1222,23 @@ do_test capi3-19.1 { |
sqlite3_prepare_tkt3134 db |
} {} |
+# Test that calling sqlite3_column_blob() on a TEXT value does not change |
+# the return type of subsequent calls to sqlite3_column_type(). |
+# |
+do_execsql_test 20.1 { |
+ CREATE TABLE t4(x); |
+ INSERT INTO t4 VALUES('abcdefghij'); |
+} |
+do_test 20.2 { |
+ set stmt [sqlite3_prepare db "SELECT * FROM t4" -1 dummy] |
+ sqlite3_step $stmt |
+} {SQLITE_ROW} |
+do_test 20.3 { sqlite3_column_type $stmt 0 } {TEXT} |
+do_test 20.4 { sqlite3_column_blob $stmt 0 } {abcdefghij} |
+do_test 20.5 { sqlite3_column_type $stmt 0 } {TEXT} |
+do_test 20.6 { sqlite3_finalize $stmt } SQLITE_OK |
+ |
+ |
# Tests of the interface when no VFS is registered. |
# |
if {![info exists tester_do_binarylog]} { |