Add test cases to e_expr.test.
FossilOrigin-Name: d8bbab78fa56b076dfafb36daa7d6ef0b07f9a44
This commit is contained in:
parent
98530cac13
commit
c7d6156d8e
12
manifest
12
manifest
@ -1,5 +1,5 @@
|
||||
C Test\sthat\sit\sis\spossible\sto\sdrop\sa\strigger\swhile\sthere\sare\sactive\sstatements\sbelonging\sto\sthe\ssame\sconnection.
|
||||
D 2010-08-14T05:04:48
|
||||
C Add\stest\scases\sto\se_expr.test.
|
||||
D 2010-08-14T12:25:18
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in ec08dc838fd8110fe24c92e5130bcd91cbb1ff2e
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
@ -340,7 +340,7 @@ F test/descidx2.test 9f1a0c83fd57f8667c82310ca21b30a350888b5d
|
||||
F test/descidx3.test fe720e8b37d59f4cef808b0bf4e1b391c2e56b6f
|
||||
F test/diskfull.test 0cede7ef9d8f415d9d3944005c76be7589bb5ebb
|
||||
F test/distinctagg.test 1a6ef9c87a58669438fc771450d7a72577417376
|
||||
F test/e_expr.test f9ff41e5419bb861807072bf195abb85d4670021
|
||||
F test/e_expr.test 946c72cd0866396458b022736cfc445164d814fe
|
||||
F test/e_fkey.test 6721a741c6499b3ab7e5385923233343c8f1ad05
|
||||
F test/e_fts3.test 75bb0aee26384ef586165e21018a17f7cd843469
|
||||
F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea
|
||||
@ -843,7 +843,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||
P 3fd1059e25a8d0cccbb30fc55b03d172bd9eb9b7
|
||||
R b423d9d4abd338dea421815e4c26cfb8
|
||||
P d4ec61e2547200aa92a26c1f270682ed67edc241
|
||||
R e84bb46a139cdce66b3551c38c0d1297
|
||||
U dan
|
||||
Z aec16a7277de53c01dc058787ce2fa53
|
||||
Z bd338cd57dbe432375897c27c0c4e355
|
||||
|
@ -1 +1 @@
|
||||
d4ec61e2547200aa92a26c1f270682ed67edc241
|
||||
d8bbab78fa56b076dfafb36daa7d6ef0b07f9a44
|
151
test/e_expr.test
151
test/e_expr.test
@ -446,7 +446,158 @@ do_execsql_test e_expr-10.4.5 { SELECT typeof(X'53514C697465') } blob
|
||||
|
||||
# EVIDENCE-OF: R-23914-51476 A literal value can also be the token
|
||||
# "NULL".
|
||||
#
|
||||
do_execsql_test e_expr-10.5.1 { SELECT NULL } {{}}
|
||||
do_execsql_test e_expr-10.5.2 { SELECT typeof(NULL) } {null}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test statements related to bound parameters
|
||||
#
|
||||
|
||||
proc parameter_test {tn sql params result} {
|
||||
set stmt [sqlite3_prepare_v2 db $sql -1]
|
||||
|
||||
foreach {number name} $params {
|
||||
set nm [sqlite3_bind_parameter_name $stmt $number]
|
||||
do_test $tn.name.$number [list set {} $nm] $name
|
||||
sqlite3_bind_int $stmt $number [expr -1 * $number]
|
||||
}
|
||||
|
||||
sqlite3_step $stmt
|
||||
|
||||
set res [list]
|
||||
for {set i 0} {$i < [sqlite3_column_count $stmt]} {incr i} {
|
||||
lappend res [sqlite3_column_text $stmt $i]
|
||||
}
|
||||
|
||||
set rc [sqlite3_finalize $stmt]
|
||||
do_test $tn.rc [list set {} $rc] SQLITE_OK
|
||||
do_test $tn.res [list set {} $res] $result
|
||||
}
|
||||
|
||||
# EVIDENCE-OF: R-33509-39458 A question mark followed by a number NNN
|
||||
# holds a spot for the NNN-th parameter. NNN must be between 1 and
|
||||
# SQLITE_MAX_VARIABLE_NUMBER.
|
||||
#
|
||||
set mvn $SQLITE_MAX_VARIABLE_NUMBER
|
||||
parameter_test e_expr-11.1 "
|
||||
SELECT ?1, ?123, ?$SQLITE_MAX_VARIABLE_NUMBER, ?123, ?4
|
||||
" "1 ?1 123 ?123 $mvn ?$mvn 4 ?4" "-1 -123 -$mvn -123 -4"
|
||||
|
||||
set errmsg "variable number must be between ?1 and ?$SQLITE_MAX_VARIABLE_NUMBER"
|
||||
foreach {tn param_number} [list \
|
||||
2 0 \
|
||||
3 [expr $SQLITE_MAX_VARIABLE_NUMBER+1] \
|
||||
4 [expr $SQLITE_MAX_VARIABLE_NUMBER+2] \
|
||||
5 12345678903456789034567890234567890 \
|
||||
6 2147483648 \
|
||||
7 2147483649 \
|
||||
8 4294967296 \
|
||||
9 4294967297 \
|
||||
10 9223372036854775808 \
|
||||
11 9223372036854775809 \
|
||||
12 18446744073709551616 \
|
||||
13 18446744073709551617 \
|
||||
] {
|
||||
do_catchsql_test e_expr-11.1.$tn "SELECT ?$param_number" [list 1 $errmsg]
|
||||
}
|
||||
|
||||
# EVIDENCE-OF: R-33670-36097 A question mark that is not followed by a
|
||||
# number creates a parameter with a number one greater than the largest
|
||||
# parameter number already assigned.
|
||||
#
|
||||
# EVIDENCE-OF: R-42938-07030 If this means the parameter number is
|
||||
# greater than SQLITE_MAX_VARIABLE_NUMBER, it is an error.
|
||||
#
|
||||
parameter_test e_expr-11.2.1 "SELECT ?" {1 {}} -1
|
||||
parameter_test e_expr-11.2.2 "SELECT ?, ?" {1 {} 2 {}} {-1 -2}
|
||||
parameter_test e_expr-11.2.3 "SELECT ?5, ?" {5 ?5 6 {}} {-5 -6}
|
||||
parameter_test e_expr-11.2.4 "SELECT ?, ?5" {1 {} 5 ?5} {-1 -5}
|
||||
parameter_test e_expr-11.2.5 "SELECT ?, ?456, ?" {
|
||||
1 {} 456 ?456 457 {}
|
||||
} {-1 -456 -457}
|
||||
parameter_test e_expr-11.2.5 "SELECT ?, ?456, ?4, ?" {
|
||||
1 {} 456 ?456 4 ?4 457 {}
|
||||
} {-1 -456 -4 -457}
|
||||
foreach {tn sql} [list \
|
||||
1 "SELECT ?$mvn, ?" \
|
||||
2 "SELECT ?[expr $mvn-5], ?, ?, ?, ?, ?, ?" \
|
||||
3 "SELECT ?[expr $mvn], ?5, ?6, ?" \
|
||||
] {
|
||||
do_catchsql_test e_expr-11.3.$tn $sql [list 1 {too many SQL variables}]
|
||||
}
|
||||
|
||||
# EVIDENCE-OF: R-11620-22743 A colon followed by an identifier name
|
||||
# holds a spot for a named parameter with the name :AAAA.
|
||||
#
|
||||
# Identifiers in SQLite consist of alphanumeric, '_' and '$' characters,
|
||||
# and any UTF characters with codepoints larger than 127 (non-ASCII
|
||||
# characters).
|
||||
#
|
||||
parameter_test e_expr-11.2.1 {SELECT :AAAA} {1 :AAAA} -1
|
||||
parameter_test e_expr-11.2.2 {SELECT :123} {1 :123} -1
|
||||
parameter_test e_expr-11.2.3 {SELECT :__} {1 :__} -1
|
||||
parameter_test e_expr-11.2.4 {SELECT :_$_} {1 :_$_} -1
|
||||
parameter_test e_expr-11.2.5 "
|
||||
SELECT :\u0e40\u0e2d\u0e28\u0e02\u0e39\u0e40\u0e2d\u0e25
|
||||
" "1 :\u0e40\u0e2d\u0e28\u0e02\u0e39\u0e40\u0e2d\u0e25" -1
|
||||
parameter_test e_expr-11.2.6 "SELECT :\u0080" "1 :\u0080" -1
|
||||
|
||||
# EVIDENCE-OF: R-49783-61279 An "at" sign works exactly like a colon,
|
||||
# except that the name of the parameter created is @AAAA.
|
||||
#
|
||||
parameter_test e_expr-11.3.1 {SELECT @AAAA} {1 @AAAA} -1
|
||||
parameter_test e_expr-11.3.2 {SELECT @123} {1 @123} -1
|
||||
parameter_test e_expr-11.3.3 {SELECT @__} {1 @__} -1
|
||||
parameter_test e_expr-11.3.4 {SELECT @_$_} {1 @_$_} -1
|
||||
parameter_test e_expr-11.3.5 "
|
||||
SELECT @\u0e40\u0e2d\u0e28\u0e02\u0e39\u0e40\u0e2d\u0e25
|
||||
" "1 @\u0e40\u0e2d\u0e28\u0e02\u0e39\u0e40\u0e2d\u0e25" -1
|
||||
parameter_test e_expr-11.3.6 "SELECT @\u0080" "1 @\u0080" -1
|
||||
|
||||
# EVIDENCE-OF: R-62610-51329 A dollar-sign followed by an identifier
|
||||
# name also holds a spot for a named parameter with the name $AAAA.
|
||||
#
|
||||
# EVIDENCE-OF: R-55025-21042 The identifier name in this case can
|
||||
# include one or more occurrences of "::" and a suffix enclosed in
|
||||
# "(...)" containing any text at all.
|
||||
#
|
||||
# Note: Looks like an identifier cannot consist entirely of "::"
|
||||
# characters or just a suffix. Also, the other named variable characters
|
||||
# (: and @) work the same way internally. Why not just document it that way?
|
||||
#
|
||||
parameter_test e_expr-11.4.1 {SELECT $AAAA} {1 $AAAA} -1
|
||||
parameter_test e_expr-11.4.2 {SELECT $123} {1 $123} -1
|
||||
parameter_test e_expr-11.4.3 {SELECT $__} {1 $__} -1
|
||||
parameter_test e_expr-11.4.4 {SELECT $_$_} {1 $_$_} -1
|
||||
parameter_test e_expr-11.4.5 "
|
||||
SELECT \$\u0e40\u0e2d\u0e28\u0e02\u0e39\u0e40\u0e2d\u0e25
|
||||
" "1 \$\u0e40\u0e2d\u0e28\u0e02\u0e39\u0e40\u0e2d\u0e25" -1
|
||||
parameter_test e_expr-11.4.6 "SELECT \$\u0080" "1 \$\u0080" -1
|
||||
|
||||
parameter_test e_expr-11.5.1 {SELECT $::::a(++--++)} {1 $::::a(++--++)} -1
|
||||
parameter_test e_expr-11.5.2 {SELECT $::a()} {1 $::a()} -1
|
||||
parameter_test e_expr-11.5.3 {SELECT $::1(::#$)} {1 $::1(::#$)} -1
|
||||
|
||||
# EVIDENCE-OF: R-11370-04520 Named parameters are also numbered. The
|
||||
# number assigned is one greater than the largest parameter number
|
||||
# already assigned.
|
||||
#
|
||||
# EVIDENCE-OF: R-42620-22184 If this means the parameter would be
|
||||
# assigned a number greater than SQLITE_MAX_VARIABLE_NUMBER, it is an
|
||||
# error.
|
||||
#
|
||||
parameter_test e_expr-11.6.1 "SELECT ?, @abc" {1 {} 2 @abc} {-1 -2}
|
||||
parameter_test e_expr-11.6.2 "SELECT ?123, :a1" {123 ?123 124 :a1} {-123 -124}
|
||||
parameter_test e_expr-11.6.3 {SELECT $a, ?8, ?, $b, ?2, $c} {
|
||||
1 $a 8 ?8 9 {} 10 $b 2 ?2 11 $c
|
||||
} {-1 -8 -9 -10 -2 -11}
|
||||
foreach {tn sql} [list \
|
||||
1 "SELECT ?$mvn, \$::a" \
|
||||
2 "SELECT ?$mvn, ?4, @a1" \
|
||||
3 "SELECT ?[expr $mvn-2], :bag, @123, \$x" \
|
||||
] {
|
||||
do_catchsql_test e_expr-11.7.$tn $sql [list 1 {too many SQL variables}]
|
||||
}
|
||||
|
||||
finish_test
|
||||
|
Loading…
x
Reference in New Issue
Block a user