summaryrefslogtreecommitdiffstats
path: root/third_party/sqlite/test/capi3c.test
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/sqlite/test/capi3c.test')
-rw-r--r--third_party/sqlite/test/capi3c.test165
1 files changed, 111 insertions, 54 deletions
diff --git a/third_party/sqlite/test/capi3c.test b/third_party/sqlite/test/capi3c.test
index cf1a6a9..1bcc437 100644
--- a/third_party/sqlite/test/capi3c.test
+++ b/third_party/sqlite/test/capi3c.test
@@ -13,7 +13,7 @@
# This is a copy of the capi3.test file that has been adapted to
# test the new sqlite3_prepare_v2 interface.
#
-# $Id: capi3c.test,v 1.19 2008/05/05 16:56:35 drh Exp $
+# $Id: capi3c.test,v 1.23 2009/07/22 07:27:57 danielk1977 Exp $
#
set testdir [file dirname $argv0]
@@ -63,9 +63,12 @@ do_test capi3c-1.1 {
sqlite3_finalize $STMT
set TAIL
} {}
-do_test capi3c-1.2 {
+do_test capi3c-1.2.1 {
sqlite3_errcode $DB
} {SQLITE_OK}
+do_test capi3c-1.2.2 {
+ sqlite3_extended_errcode $DB
+} {SQLITE_OK}
do_test capi3c-1.3 {
sqlite3_errmsg $DB
} {not an error}
@@ -81,9 +84,12 @@ do_test capi3c-1.5 {
set STMT [sqlite3_prepare_v2 $DB $sql -1 TAIL]
}
} {1}
-do_test capi3c-1.6 {
+do_test capi3c-1.6.1 {
sqlite3_errcode $DB
} {SQLITE_ERROR}
+do_test capi3c-1.6.2 {
+ sqlite3_extended_errcode $DB
+} {SQLITE_ERROR}
do_test capi3c-1.7 {
sqlite3_errmsg $DB
} {no such column: namex}
@@ -108,9 +114,12 @@ ifcapable {utf16} {
set STMT [sqlite3_prepare16_v2 $DB $sql -1 TAIL]
}
} {1}
- do_test capi3c-2.4 {
+ do_test capi3c-2.4.1 {
sqlite3_errcode $DB
} {SQLITE_ERROR}
+ do_test capi3c-2.4.2 {
+ sqlite3_extended_errcode $DB
+ } {SQLITE_ERROR}
do_test capi3c-2.5 {
sqlite3_errmsg $DB
} {no such column: namex}
@@ -779,14 +788,25 @@ do_test capi3c-11.2 {
set STMT [sqlite3_prepare_v2 $DB "SELECT func(b, a) FROM t1" -1 TAIL]
sqlite3_step $STMT
} {SQLITE_ROW}
-do_test capi3c-11.3 {
+
+# As of 3.6.5 a COMMIT is OK during while a query is still running -
+# as long as it is a read-only query and not an incremental BLOB write.
+#
+do_test capi3-11.3.1 {
catchsql {
COMMIT;
}
-} {1 {cannot commit transaction - SQL statements in progress}}
-do_test capi3c-11.3.1 {
+} {0 {}}
+do_test capi3-11.3.2 {
+ sqlite3_extended_errcode $DB
+} {SQLITE_OK}
+do_test capi3-11.3.3 {
sqlite3_get_autocommit $DB
-} 0
+} 1
+do_test capi3-11.3.4 {
+ db eval {PRAGMA lock_status}
+} {main shared temp closed}
+
do_test capi3c-11.4 {
sqlite3_step $STMT
} {SQLITE_ERROR}
@@ -798,15 +818,7 @@ do_test capi3c-11.6 {
SELECT * FROM t1;
}
} {0 {1 int 2 notatype}}
-do_test capi3c-11.6.1 {
- sqlite3_get_autocommit $DB
-} 0
do_test capi3c-11.7 {
- catchsql {
- COMMIT;
- }
-} {0 {}}
-do_test capi3c-11.7.1 {
sqlite3_get_autocommit $DB
} 1
do_test capi3c-11.8 {
@@ -893,13 +905,13 @@ do_test capi3c-11.20 {
BEGIN;
COMMIT;
}
-} {1 {cannot commit transaction - SQL statements in progress}}
+} {0 {}}
do_test capi3c-11.20 {
sqlite3_reset $STMT
catchsql {
COMMIT;
}
-} {0 {}}
+} {1 {cannot commit - no transaction is active}}
do_test capi3c-11.21 {
sqlite3_finalize $STMT
} {SQLITE_OK}
@@ -1168,15 +1180,19 @@ do_test capi3c-19.4 {
do_test capi3c-19.4.1 {
sqlite3_errmsg $DB
} {no such table: t3}
-do_test capi3c-19.4.2 {
- sqlite3_expired $STMT
-} 1
+ifcapable deprecated {
+ do_test capi3c-19.4.2 {
+ sqlite3_expired $STMT
+ } 1
+}
do_test capi3c-19.4.3 {
sqlite3_errmsg $DB
} {no such table: t3}
-do_test capi3c-19.4.4 {
- sqlite3_expired 0
-} 1
+ifcapable deprecated {
+ do_test capi3c-19.4.4 {
+ sqlite3_expired 0
+ } 1
+}
do_test capi3c-19.5 {
sqlite3_reset $STMT
db eval {
@@ -1185,9 +1201,11 @@ do_test capi3c-19.5 {
}
sqlite3_step $STMT
} SQLITE_ROW
-do_test capi3c-19.5.2 {
- sqlite3_expired $STMT
-} 0
+ifcapable deprecated {
+ do_test capi3c-19.5.2 {
+ sqlite3_expired $STMT
+ } 0
+}
do_test capi3c-19.6 {
sqlite3_column_int $STMT 1
} 2
@@ -1225,7 +1243,7 @@ ifcapable progress {
sqlite3_step $STMT
} {SQLITE_INTERRUPT}
do_test capi3c-21.2 {
- sqlite3_errcode $DB
+ sqlite3_extended_errcode $DB
} {SQLITE_INTERRUPT}
do_test capi3c-21.3 {
sqlite3_finalize $STMT
@@ -1244,6 +1262,9 @@ ifcapable progress {
do_test capi3c-21.7 {
sqlite3_errcode $DB
} {SQLITE_INTERRUPT}
+ do_test capi3c-21.8 {
+ sqlite3_extended_errcode $DB
+ } {SQLITE_INTERRUPT}
}
# Make sure sqlite3_result_error_code() returns the correct error code.
@@ -1271,31 +1292,67 @@ sqlite3_finalize $STMT
# conversion (or vice versa) on one column does not change the value of
# the second.
#
-do_test capi3c-23.1 {
- set STMT [sqlite3_prepare_v2 db {SELECT b,b,b,b FROM t1} -1 TAIL]
- sqlite3_step $STMT
-} {SQLITE_ROW}
-do_test capi3c-23.2 {
- sqlite3_column_text16 $STMT 0
- sqlite3_column_text $STMT 1
-} {one}
-do_test capi3c-23.3 {
- sqlite3_column_text16 $STMT 2
- sqlite3_column_text $STMT 3
-} {one}
-sqlite3_finalize $STMT
-do_test capi3c-23.4 {
- set STMT [sqlite3_prepare_v2 db {SELECT b||'x',b,b,b FROM t1} -1 TAIL]
- sqlite3_step $STMT
-} {SQLITE_ROW}
-do_test capi3c-23.5 {
- sqlite3_column_text16 $STMT 0
- sqlite3_column_text $STMT 1
-} {one}
-do_test capi3c-23.6 {
- sqlite3_column_text16 $STMT 2
- sqlite3_column_text $STMT 3
-} {one}
-sqlite3_finalize $STMT
+ifcapable utf16 {
+ do_test capi3c-23.1 {
+ set STMT [sqlite3_prepare_v2 db {SELECT b,b,b,b FROM t1} -1 TAIL]
+ sqlite3_step $STMT
+ } {SQLITE_ROW}
+ do_test capi3c-23.2 {
+ sqlite3_column_text16 $STMT 0
+ sqlite3_column_text $STMT 1
+ } {one}
+ do_test capi3c-23.3 {
+ sqlite3_column_text16 $STMT 2
+ sqlite3_column_text $STMT 3
+ } {one}
+ sqlite3_finalize $STMT
+ do_test capi3c-23.4 {
+ set STMT [sqlite3_prepare_v2 db {SELECT b||'x',b,b,b FROM t1} -1 TAIL]
+ sqlite3_step $STMT
+ } {SQLITE_ROW}
+ do_test capi3c-23.5 {
+ sqlite3_column_text16 $STMT 0
+ sqlite3_column_text $STMT 1
+ } {one}
+ do_test capi3c-23.6 {
+ sqlite3_column_text16 $STMT 2
+ sqlite3_column_text $STMT 3
+ } {one}
+ sqlite3_finalize $STMT
+}
+
+# Test decltype on some SELECT statements that contain sub-selects.
+#
+proc decltype {zSql} {
+ set ret [list]
+ set STMT [sqlite3_prepare_v2 db $zSql -1 TAIL]
+ for {set i 0} {$i < [sqlite3_column_count $STMT]} {incr i} {
+ lappend ret [sqlite3_column_decltype $STMT $i]
+ }
+ sqlite3_finalize $STMT
+ return $ret
+}
+do_test capi3c-24.1 {
+ execsql { CREATE TABLE t5(a INTEGER, b STRING, c DATETIME) }
+ decltype {SELECT * FROM t5}
+} {INTEGER STRING DATETIME}
+do_test capi3c-24.2 {
+ decltype {SELECT (SELECT c) FROM t5}
+} {DATETIME}
+do_test capi3c-24.3 {
+ decltype {SELECT (SELECT * FROM (SELECT c)) FROM t5}
+} {DATETIME}
+do_test capi3c-24.4 {
+ decltype {SELECT * FROM (SELECT * FROM t5 ORDER BY c LIMIT 1) ORDER BY b}
+} {INTEGER STRING DATETIME}
+do_test capi3c-24.5 {
+ decltype {
+ SELECT (SELECT x FROM (SELECT c AS x))
+ FROM (SELECT * FROM t5 ORDER BY c LIMIT 1) ORDER BY b
+ }
+} {DATETIME}
+do_test capi3c-24.3 {
+ decltype {SELECT (SELECT x FROM (SELECT t5.a AS x)) FROM t5}
+} {INTEGER}
finish_test