Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Side by Side Diff: third_party/sqlite/src/test/e_expr.test

Issue 901033002: Import SQLite 3.8.7.4. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Chromium changes to support SQLite 3.8.7.4. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # 2010 July 16 1 # 2010 July 16
2 # 2 #
3 # The author disclaims copyright to this source code. In place of 3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing: 4 # a legal notice, here is a blessing:
5 # 5 #
6 # May you do good and not evil. 6 # May you do good and not evil.
7 # May you find forgiveness for yourself and forgive others. 7 # May you find forgiveness for yourself and forgive others.
8 # May you share freely, never taking more than you give. 8 # May you share freely, never taking more than you give.
9 # 9 #
10 #*********************************************************************** 10 #***********************************************************************
11 # 11 #
12 # This file implements tests to verify that the "testable statements" in 12 # This file implements tests to verify that the "testable statements" in
13 # the lang_expr.html document are correct. 13 # the lang_expr.html document are correct.
14 # 14 #
15 15
16 set testdir [file dirname $argv0] 16 set testdir [file dirname $argv0]
17 source $testdir/tester.tcl 17 source $testdir/tester.tcl
18 source $testdir/malloc_common.tcl 18 source $testdir/malloc_common.tcl
19 19
20 ifcapable !compound {
21 finish_test
22 return
23 }
20 24
21 proc do_expr_test {tn expr type value} { 25 proc do_expr_test {tn expr type value} {
22 uplevel do_execsql_test $tn [list "SELECT typeof($expr), $expr"] [ 26 uplevel do_execsql_test $tn [list "SELECT typeof($expr), $expr"] [
23 list [list $type $value] 27 list [list $type $value]
24 ] 28 ]
25 } 29 }
26 30
27 proc do_qexpr_test {tn expr value} { 31 proc do_qexpr_test {tn expr value} {
28 uplevel do_execsql_test $tn [list "SELECT quote($expr)"] [list $value] 32 uplevel do_execsql_test $tn [list "SELECT quote($expr)"] [list $value]
29 } 33 }
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 set out 359 set out
356 } 360 }
357 proc reverse_collate {zLeft zRight} { 361 proc reverse_collate {zLeft zRight} {
358 string compare [reverse_str $zLeft] [reverse_str $zRight] 362 string compare [reverse_str $zLeft] [reverse_str $zRight]
359 } 363 }
360 db collate reverse reverse_collate 364 db collate reverse reverse_collate
361 365
362 # EVIDENCE-OF: R-59577-33471 The COLLATE operator is a unary postfix 366 # EVIDENCE-OF: R-59577-33471 The COLLATE operator is a unary postfix
363 # operator that assigns a collating sequence to an expression. 367 # operator that assigns a collating sequence to an expression.
364 # 368 #
365 # EVIDENCE-OF: R-23441-22541 The COLLATE operator has a higher 369 # EVIDENCE-OF: R-36231-30731 The COLLATE operator has a higher
366 # precedence (binds more tightly) than any prefix unary operator or any 370 # precedence (binds more tightly) than any binary operator and any unary
367 # binary operator. 371 # prefix operator except "~".
368 # 372 #
369 do_execsql_test e_expr-9.1 { SELECT 'abcd' < 'bbbb' COLLATE reverse } 0 373 do_execsql_test e_expr-9.1 { SELECT 'abcd' < 'bbbb' COLLATE reverse } 0
370 do_execsql_test e_expr-9.2 { SELECT ('abcd' < 'bbbb') COLLATE reverse } 1 374 do_execsql_test e_expr-9.2 { SELECT ('abcd' < 'bbbb') COLLATE reverse } 1
371 do_execsql_test e_expr-9.3 { SELECT 'abcd' <= 'bbbb' COLLATE reverse } 0 375 do_execsql_test e_expr-9.3 { SELECT 'abcd' <= 'bbbb' COLLATE reverse } 0
372 do_execsql_test e_expr-9.4 { SELECT ('abcd' <= 'bbbb') COLLATE reverse } 1 376 do_execsql_test e_expr-9.4 { SELECT ('abcd' <= 'bbbb') COLLATE reverse } 1
373 377
374 do_execsql_test e_expr-9.5 { SELECT 'abcd' > 'bbbb' COLLATE reverse } 1 378 do_execsql_test e_expr-9.5 { SELECT 'abcd' > 'bbbb' COLLATE reverse } 1
375 do_execsql_test e_expr-9.6 { SELECT ('abcd' > 'bbbb') COLLATE reverse } 0 379 do_execsql_test e_expr-9.6 { SELECT ('abcd' > 'bbbb') COLLATE reverse } 0
376 do_execsql_test e_expr-9.7 { SELECT 'abcd' >= 'bbbb' COLLATE reverse } 1 380 do_execsql_test e_expr-9.7 { SELECT 'abcd' >= 'bbbb' COLLATE reverse } 1
377 do_execsql_test e_expr-9.8 { SELECT ('abcd' >= 'bbbb') COLLATE reverse } 0 381 do_execsql_test e_expr-9.8 { SELECT ('abcd' >= 'bbbb') COLLATE reverse } 0
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 # 443 #
440 do_execsql_test e_expr-10.3.1 { SELECT 'is not' } {{is not}} 444 do_execsql_test e_expr-10.3.1 { SELECT 'is not' } {{is not}}
441 do_execsql_test e_expr-10.3.2 { SELECT typeof('is not') } {text} 445 do_execsql_test e_expr-10.3.2 { SELECT typeof('is not') } {text}
442 do_execsql_test e_expr-10.3.3 { SELECT 'isn''t' } {isn't} 446 do_execsql_test e_expr-10.3.3 { SELECT 'isn''t' } {isn't}
443 do_execsql_test e_expr-10.3.4 { SELECT typeof('isn''t') } {text} 447 do_execsql_test e_expr-10.3.4 { SELECT typeof('isn''t') } {text}
444 448
445 # EVIDENCE-OF: R-09593-03321 BLOB literals are string literals 449 # EVIDENCE-OF: R-09593-03321 BLOB literals are string literals
446 # containing hexadecimal data and preceded by a single "x" or "X" 450 # containing hexadecimal data and preceded by a single "x" or "X"
447 # character. 451 # character.
448 # 452 #
449 # EVIDENCE-OF: R-39344-59787 For example: X'53514C697465' 453 # EVIDENCE-OF: R-19836-11244 Example: X'53514C697465'
450 # 454 #
451 do_execsql_test e_expr-10.4.1 { SELECT typeof(X'0123456789ABCDEF') } blob 455 do_execsql_test e_expr-10.4.1 { SELECT typeof(X'0123456789ABCDEF') } blob
452 do_execsql_test e_expr-10.4.2 { SELECT typeof(x'0123456789ABCDEF') } blob 456 do_execsql_test e_expr-10.4.2 { SELECT typeof(x'0123456789ABCDEF') } blob
453 do_execsql_test e_expr-10.4.3 { SELECT typeof(X'0123456789abcdef') } blob 457 do_execsql_test e_expr-10.4.3 { SELECT typeof(X'0123456789abcdef') } blob
454 do_execsql_test e_expr-10.4.4 { SELECT typeof(x'0123456789abcdef') } blob 458 do_execsql_test e_expr-10.4.4 { SELECT typeof(x'0123456789abcdef') } blob
455 do_execsql_test e_expr-10.4.5 { SELECT typeof(X'53514C697465') } blob 459 do_execsql_test e_expr-10.4.5 { SELECT typeof(X'53514C697465') } blob
456 460
457 # EVIDENCE-OF: R-23914-51476 A literal value can also be the token 461 # EVIDENCE-OF: R-23914-51476 A literal value can also be the token
458 # "NULL". 462 # "NULL".
459 # 463 #
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 list [sqlite3_column_type $stmt 0] \ 624 list [sqlite3_column_type $stmt 0] \
621 [sqlite3_column_type $stmt 1] \ 625 [sqlite3_column_type $stmt 1] \
622 [sqlite3_column_type $stmt 2] \ 626 [sqlite3_column_type $stmt 2] \
623 [sqlite3_column_type $stmt 3] 627 [sqlite3_column_type $stmt 3]
624 } {NULL NULL NULL NULL} 628 } {NULL NULL NULL NULL}
625 do_test e_expr-11.7.1 { sqlite3_finalize $stmt } SQLITE_OK 629 do_test e_expr-11.7.1 { sqlite3_finalize $stmt } SQLITE_OK
626 630
627 #------------------------------------------------------------------------- 631 #-------------------------------------------------------------------------
628 # "Test" the syntax diagrams in lang_expr.html. 632 # "Test" the syntax diagrams in lang_expr.html.
629 # 633 #
630 # EVIDENCE-OF: R-62067-43884 -- syntax diagram signed-number 634 # -- syntax diagram signed-number
631 # 635 #
632 do_execsql_test e_expr-12.1.1 { SELECT 0, +0, -0 } {0 0 0} 636 do_execsql_test e_expr-12.1.1 { SELECT 0, +0, -0 } {0 0 0}
633 do_execsql_test e_expr-12.1.2 { SELECT 1, +1, -1 } {1 1 -1} 637 do_execsql_test e_expr-12.1.2 { SELECT 1, +1, -1 } {1 1 -1}
634 do_execsql_test e_expr-12.1.3 { SELECT 2, +2, -2 } {2 2 -2} 638 do_execsql_test e_expr-12.1.3 { SELECT 2, +2, -2 } {2 2 -2}
635 do_execsql_test e_expr-12.1.4 { 639 do_execsql_test e_expr-12.1.4 {
636 SELECT 1.4, +1.4, -1.4 640 SELECT 1.4, +1.4, -1.4
637 } {1.4 1.4 -1.4} 641 } {1.4 1.4 -1.4}
638 do_execsql_test e_expr-12.1.5 { 642 do_execsql_test e_expr-12.1.5 {
639 SELECT 1.5e+5, +1.5e+5, -1.5e+5 643 SELECT 1.5e+5, +1.5e+5, -1.5e+5
640 } {150000.0 150000.0 -150000.0} 644 } {150000.0 150000.0 -150000.0}
641 do_execsql_test e_expr-12.1.6 { 645 do_execsql_test e_expr-12.1.6 {
642 SELECT 0.0001, +0.0001, -0.0001 646 SELECT 0.0001, +0.0001, -0.0001
643 } {0.0001 0.0001 -0.0001} 647 } {0.0001 0.0001 -0.0001}
644 648
645 # EVIDENCE-OF: R-21258-25489 -- syntax diagram literal-value 649 # -- syntax diagram literal-value
646 # 650 #
647 set sqlite_current_time 1 651 set sqlite_current_time 1
648 do_execsql_test e_expr-12.2.1 {SELECT 123} {123} 652 do_execsql_test e_expr-12.2.1 {SELECT 123} {123}
649 do_execsql_test e_expr-12.2.2 {SELECT 123.4e05} {12340000.0} 653 do_execsql_test e_expr-12.2.2 {SELECT 123.4e05} {12340000.0}
650 do_execsql_test e_expr-12.2.3 {SELECT 'abcde'} {abcde} 654 do_execsql_test e_expr-12.2.3 {SELECT 'abcde'} {abcde}
651 do_execsql_test e_expr-12.2.4 {SELECT X'414243'} {ABC} 655 do_execsql_test e_expr-12.2.4 {SELECT X'414243'} {ABC}
652 do_execsql_test e_expr-12.2.5 {SELECT NULL} {{}} 656 do_execsql_test e_expr-12.2.5 {SELECT NULL} {{}}
653 do_execsql_test e_expr-12.2.6 {SELECT CURRENT_TIME} {00:00:01} 657 do_execsql_test e_expr-12.2.6 {SELECT CURRENT_TIME} {00:00:01}
654 do_execsql_test e_expr-12.2.7 {SELECT CURRENT_DATE} {1970-01-01} 658 do_execsql_test e_expr-12.2.7 {SELECT CURRENT_DATE} {1970-01-01}
655 do_execsql_test e_expr-12.2.8 {SELECT CURRENT_TIMESTAMP} {{1970-01-01 00:00:01}} 659 do_execsql_test e_expr-12.2.8 {SELECT CURRENT_TIMESTAMP} {{1970-01-01 00:00:01}}
656 set sqlite_current_time 0 660 set sqlite_current_time 0
657 661
658 # EVIDENCE-OF: R-57598-59332 -- syntax diagram expr 662 # -- syntax diagram expr
659 # 663 #
660 file delete -force test.db2 664 forcedelete test.db2
661 execsql { 665 execsql {
662 ATTACH 'test.db2' AS dbname; 666 ATTACH 'test.db2' AS dbname;
663 CREATE TABLE dbname.tblname(cname); 667 CREATE TABLE dbname.tblname(cname);
664 } 668 }
665 669
666 proc glob {args} {return 1} 670 proc glob {args} {return 1}
667 db function glob glob 671 db function glob glob
668 db function match glob 672 db function match glob
669 db function regexp glob 673 db function regexp glob
670 674
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 809
806 set x 0 810 set x 0
807 foreach e $elist { 811 foreach e $elist {
808 incr x 812 incr x
809 do_test e_expr-12.3.$tn.$x { 813 do_test e_expr-12.3.$tn.$x {
810 set rc [catch { execsql "SELECT $e FROM tblname" } msg] 814 set rc [catch { execsql "SELECT $e FROM tblname" } msg]
811 } {0} 815 } {0}
812 } 816 }
813 } 817 }
814 818
815 # EVIDENCE-OF: R-49462-56079 -- syntax diagram raise-function 819 # -- syntax diagram raise-function
816 # 820 #
817 foreach {tn raiseexpr} { 821 foreach {tn raiseexpr} {
818 1 "RAISE(IGNORE)" 822 1 "RAISE(IGNORE)"
819 2 "RAISE(ROLLBACK, 'error message')" 823 2 "RAISE(ROLLBACK, 'error message')"
820 3 "RAISE(ABORT, 'error message')" 824 3 "RAISE(ABORT, 'error message')"
821 4 "RAISE(FAIL, 'error message')" 825 4 "RAISE(FAIL, 'error message')"
822 } { 826 } {
823 do_execsql_test e_expr-12.4.$tn " 827 do_execsql_test e_expr-12.4.$tn "
824 CREATE TRIGGER dbname.tr$tn BEFORE DELETE ON tblname BEGIN 828 CREATE TRIGGER dbname.tr$tn BEFORE DELETE ON tblname BEGIN
825 SELECT $raiseexpr ; 829 SELECT $raiseexpr ;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1070 SELECT regexp('abc', 'def') 1074 SELECT regexp('abc', 'def')
1071 } {1 {no such function: regexp}} 1075 } {1 {no such function: regexp}}
1072 do_catchsql_test e_expr-18.1.2 { 1076 do_catchsql_test e_expr-18.1.2 {
1073 SELECT 'abc' REGEXP 'def' 1077 SELECT 'abc' REGEXP 'def'
1074 } {1 {no such function: REGEXP}} 1078 } {1 {no such function: REGEXP}}
1075 } 1079 }
1076 1080
1077 # EVIDENCE-OF: R-33693-50180 The REGEXP operator is a special syntax for 1081 # EVIDENCE-OF: R-33693-50180 The REGEXP operator is a special syntax for
1078 # the regexp() user function. 1082 # the regexp() user function.
1079 # 1083 #
1080 # EVIDENCE-OF: R-57289-13578 If a application-defined SQL function named 1084 # EVIDENCE-OF: R-65524-61849 If an application-defined SQL function
1081 # "regexp" is added at run-time, that function will be called in order 1085 # named "regexp" is added at run-time, then the "X REGEXP Y" operator
1082 # to implement the REGEXP operator. 1086 # will be implemented as a call to "regexp(Y,X)".
1083 # 1087 #
1084 proc regexpfunc {args} { 1088 proc regexpfunc {args} {
1085 eval lappend ::regexpargs $args 1089 eval lappend ::regexpargs $args
1086 return 1 1090 return 1
1087 } 1091 }
1088 db func regexp -argcount 2 regexpfunc 1092 db func regexp -argcount 2 regexpfunc
1089 set ::regexpargs [list] 1093 set ::regexpargs [list]
1090 do_execsql_test e_expr-18.2.1 { SELECT 'abc' REGEXP 'def' } 1 1094 do_execsql_test e_expr-18.2.1 { SELECT 'abc' REGEXP 'def' } 1
1091 do_test e_expr-18.2.2 { set regexpargs } {def abc} 1095 do_test e_expr-18.2.2 { set regexpargs } {def abc}
1092 set ::regexpargs [list] 1096 set ::regexpargs [list]
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1283 # 1287 #
1284 proc rev {str} { 1288 proc rev {str} {
1285 set ret "" 1289 set ret ""
1286 set chars [split $str] 1290 set chars [split $str]
1287 for {set i [expr [llength $chars]-1]} {$i>=0} {incr i -1} { 1291 for {set i [expr [llength $chars]-1]} {$i>=0} {incr i -1} {
1288 append ret [lindex $chars $i] 1292 append ret [lindex $chars $i]
1289 } 1293 }
1290 set ret 1294 set ret
1291 } 1295 }
1292 proc reverse {lhs rhs} { 1296 proc reverse {lhs rhs} {
1293 string compare [rev $lhs] [ref $rhs] 1297 string compare [rev $lhs] [rev $rhs]
1294 } 1298 }
1295 db collate reverse reverse 1299 db collate reverse reverse
1296 do_execsql_test e_expr-23.1.1 { 1300 do_execsql_test e_expr-23.1.1 {
1297 CREATE TABLE t1( 1301 CREATE TABLE t1(
1298 a TEXT COLLATE NOCASE, 1302 a TEXT COLLATE NOCASE,
1299 b COLLATE REVERSE, 1303 b COLLATE REVERSE,
1300 c INTEGER, 1304 c INTEGER,
1301 d BLOB 1305 d BLOB
1302 ); 1306 );
1303 INSERT INTO t1 VALUES('abc', 'cba', 55, 34.5); 1307 INSERT INTO t1 VALUES('abc', 'cba', 55, 34.5);
1304 } {} 1308 } {}
1305 do_execsql_test e_expr-23.1.2 { 1309 do_execsql_test e_expr-23.1.2 {
1306 SELECT CASE a WHEN 'xyz' THEN 'A' WHEN 'AbC' THEN 'B' END FROM t1 1310 SELECT CASE a WHEN 'xyz' THEN 'A' WHEN 'AbC' THEN 'B' END FROM t1
1307 } {B} 1311 } {B}
1308 do_execsql_test e_expr-23.1.3 { 1312 do_execsql_test e_expr-23.1.3 {
1309 SELECT CASE 'AbC' WHEN 'abc' THEN 'A' WHEN a THEN 'B' END FROM t1 1313 SELECT CASE 'AbC' WHEN 'abc' THEN 'A' WHEN a THEN 'B' END FROM t1
1310 } {B} 1314 } {B}
1311 do_execsql_test e_expr-23.1.4 { 1315 do_execsql_test e_expr-23.1.4 {
1312 SELECT CASE a WHEN b THEN 'A' ELSE 'B' END FROM t1 1316 SELECT CASE a WHEN b THEN 'A' ELSE 'B' END FROM t1
1313 } {B} 1317 } {B}
1314 do_execsql_test e_expr-23.1.5 { 1318 do_execsql_test e_expr-23.1.5 {
1315 SELECT CASE b WHEN a THEN 'A' ELSE 'B' END FROM t1 1319 SELECT CASE b WHEN a THEN 'A' ELSE 'B' END FROM t1
1316 } {A} 1320 } {B}
1317 do_execsql_test e_expr-23.1.6 { 1321 do_execsql_test e_expr-23.1.6 {
1318 SELECT CASE 55 WHEN '55' THEN 'A' ELSE 'B' END 1322 SELECT CASE 55 WHEN '55' THEN 'A' ELSE 'B' END
1319 } {B} 1323 } {B}
1320 do_execsql_test e_expr-23.1.7 { 1324 do_execsql_test e_expr-23.1.7 {
1321 SELECT CASE c WHEN '55' THEN 'A' ELSE 'B' END FROM t1 1325 SELECT CASE c WHEN '55' THEN 'A' ELSE 'B' END FROM t1
1322 } {A} 1326 } {A}
1323 do_execsql_test e_expr-23.1.8 { 1327 do_execsql_test e_expr-23.1.8 {
1324 SELECT CASE '34.5' WHEN d THEN 'A' ELSE 'B' END FROM t1 1328 SELECT CASE '34.5' WHEN d THEN 'A' ELSE 'B' END FROM t1
1325 } {B} 1329 } {B}
1326 do_execsql_test e_expr-23.1.9 { 1330 do_execsql_test e_expr-23.1.9 {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1396 WHEN ceval(x)=w2 THEN r2 1400 WHEN ceval(x)=w2 THEN r2
1397 ELSE r3 END 1401 ELSE r3 END
1398 FROM t2 1402 FROM t2
1399 } {R1 R2 R3} 1403 } {R1 R2 R3}
1400 do_test e_expr-26.1.6 { set ::evalcount } {5} 1404 do_test e_expr-26.1.6 { set ::evalcount } {5}
1401 1405
1402 1406
1403 #------------------------------------------------------------------------- 1407 #-------------------------------------------------------------------------
1404 # Test statements related to CAST expressions. 1408 # Test statements related to CAST expressions.
1405 # 1409 #
1406 # EVIDENCE-OF: R-65079-31758 Application of a CAST expression is 1410 # EVIDENCE-OF: R-20854-17109 A CAST conversion is similar to the
1407 # different to application of a column affinity, as with a CAST 1411 # conversion that takes place when a column affinity is applied to a
1408 # expression the storage class conversion is forced even if it is lossy 1412 # value except that with the CAST operator the conversion always takes
1409 # and irrreversible. 1413 # place even if the conversion lossy and irreversible, whereas column
1414 # affinity only changes the data type of a value if the change is
1415 # lossless and reversible.
1410 # 1416 #
1411 do_execsql_test e_expr-27.1.1 { 1417 do_execsql_test e_expr-27.1.1 {
1412 CREATE TABLE t3(a TEXT, b REAL, c INTEGER); 1418 CREATE TABLE t3(a TEXT, b REAL, c INTEGER);
1413 INSERT INTO t3 VALUES(X'555655', '1.23abc', 4.5); 1419 INSERT INTO t3 VALUES(X'555655', '1.23abc', 4.5);
1414 SELECT typeof(a), a, typeof(b), b, typeof(c), c FROM t3; 1420 SELECT typeof(a), a, typeof(b), b, typeof(c), c FROM t3;
1415 } {blob UVU text 1.23abc real 4.5} 1421 } {blob UVU text 1.23abc real 4.5}
1416 do_execsql_test e_expr-27.1.2 { 1422 do_execsql_test e_expr-27.1.2 {
1417 SELECT 1423 SELECT
1418 typeof(CAST(X'555655' as TEXT)), CAST(X'555655' as TEXT), 1424 typeof(CAST(X'555655' as TEXT)), CAST(X'555655' as TEXT),
1419 typeof(CAST('1.23abc' as REAL)), CAST('1.23abc' as REAL), 1425 typeof(CAST('1.23abc' as REAL)), CAST('1.23abc' as REAL),
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1583 do_expr_test e_expr-30.3.3 { CAST(' -2.12e-01ABC' AS INT) } integer -2 1589 do_expr_test e_expr-30.3.3 { CAST(' -2.12e-01ABC' AS INT) } integer -2
1584 do_expr_test e_expr-30.3.4 { CAST(' 1 2 3 4' AS INT) } integer 1 1590 do_expr_test e_expr-30.3.4 { CAST(' 1 2 3 4' AS INT) } integer 1
1585 1591
1586 # EVIDENCE-OF: R-43164-44276 If there is no prefix that can be 1592 # EVIDENCE-OF: R-43164-44276 If there is no prefix that can be
1587 # interpreted as an integer number, the result of the conversion is 0. 1593 # interpreted as an integer number, the result of the conversion is 0.
1588 # 1594 #
1589 do_expr_test e_expr-30.4.1 { CAST('' AS INTEGER) } integer 0 1595 do_expr_test e_expr-30.4.1 { CAST('' AS INTEGER) } integer 0
1590 do_expr_test e_expr-30.4.2 { CAST('not a number' AS INTEGER) } integer 0 1596 do_expr_test e_expr-30.4.2 { CAST('not a number' AS INTEGER) } integer 0
1591 do_expr_test e_expr-30.4.3 { CAST('XXI' AS INTEGER) } integer 0 1597 do_expr_test e_expr-30.4.3 { CAST('XXI' AS INTEGER) } integer 0
1592 1598
1593 # EVIDENCE-OF: R-00741-38776 A cast of a REAL value into an INTEGER will 1599 # EVIDENCE-OF: R-08980-53124 The CAST operator understands decimal
1594 # truncate the fractional part of the REAL. 1600 # integers only &mdash; conversion of hexadecimal integers stops at
1601 # the "x" in the "0x" prefix of the hexadecimal integer string and thus
1602 # result of the CAST is always zero.
1603 do_expr_test e_expr-30.5.1 { CAST('0x1234' AS INTEGER) } integer 0
1604 do_expr_test e_expr-30.5.2 { CAST('0X1234' AS INTEGER) } integer 0
1605
1606 # EVIDENCE-OF: R-02752-50091 A cast of a REAL value into an INTEGER
1607 # results in the integer between the REAL value and zero that is closest
1608 # to the REAL value.
1595 # 1609 #
1596 do_expr_test e_expr-31.1.1 { CAST(3.14159 AS INTEGER) } integer 3 1610 do_expr_test e_expr-31.1.1 { CAST(3.14159 AS INTEGER) } integer 3
1597 do_expr_test e_expr-31.1.2 { CAST(1.99999 AS INTEGER) } integer 1 1611 do_expr_test e_expr-31.1.2 { CAST(1.99999 AS INTEGER) } integer 1
1598 do_expr_test e_expr-31.1.3 { CAST(-1.99999 AS INTEGER) } integer -1 1612 do_expr_test e_expr-31.1.3 { CAST(-1.99999 AS INTEGER) } integer -1
1599 do_expr_test e_expr-31.1.4 { CAST(-0.99999 AS INTEGER) } integer 0 1613 do_expr_test e_expr-31.1.4 { CAST(-0.99999 AS INTEGER) } integer 0
1600 1614
1601 # EVIDENCE-OF: R-06126-36021 If an REAL is too large to be represented 1615 # EVIDENCE-OF: R-51517-40824 If a REAL is greater than the greatest
1602 # as an INTEGER then the result of the cast is the largest negative 1616 # possible signed integer (+9223372036854775807) then the result is the
1603 # integer: -9223372036854775808. 1617 # greatest possible signed integer and if the REAL is less than the
1618 # least possible signed integer (-9223372036854775808) then the result
1619 # is the least possible signed integer.
1604 # 1620 #
1605 do_expr_test e_expr-31.2.1 { CAST(2e+50 AS INT) } integer -9223372036854775808 1621 do_expr_test e_expr-31.2.1 { CAST(2e+50 AS INT) } integer 9223372036854775807
1606 do_expr_test e_expr-31.2.2 { CAST(-2e+50 AS INT) } integer -9223372036854775808 1622 do_expr_test e_expr-31.2.2 { CAST(-2e+50 AS INT) } integer -9223372036854775808
1607 do_expr_test e_expr-31.2.3 { 1623 do_expr_test e_expr-31.2.3 {
1608 CAST(-9223372036854775809.0 AS INT) 1624 CAST(-9223372036854775809.0 AS INT)
1609 } integer -9223372036854775808 1625 } integer -9223372036854775808
1610 do_expr_test e_expr-31.2.4 { 1626 do_expr_test e_expr-31.2.4 {
1611 CAST(9223372036854775809.0 AS INT) 1627 CAST(9223372036854775809.0 AS INT)
1612 } integer -9223372036854775808 1628 } integer 9223372036854775807
1613 1629
1614 1630
1615 # EVIDENCE-OF: R-09295-61337 Casting a TEXT or BLOB value into NUMERIC 1631 # EVIDENCE-OF: R-09295-61337 Casting a TEXT or BLOB value into NUMERIC
1616 # first does a forced conversion into REAL but then further converts the 1632 # first does a forced conversion into REAL but then further converts the
1617 # result into INTEGER if and only if the conversion from REAL to INTEGER 1633 # result into INTEGER if and only if the conversion from REAL to INTEGER
1618 # is lossless and reversible. 1634 # is lossless and reversible.
1619 # 1635 #
1620 do_expr_test e_expr-32.1.1 { CAST('45' AS NUMERIC) } integer 45 1636 do_expr_test e_expr-32.1.1 { CAST('45' AS NUMERIC) } integer 45
1621 do_expr_test e_expr-32.1.2 { CAST('45.0' AS NUMERIC) } integer 45 1637 do_expr_test e_expr-32.1.2 { CAST('45.0' AS NUMERIC) } integer 45
1622 do_expr_test e_expr-32.1.3 { CAST('45.2' AS NUMERIC) } real 45.2 1638 do_expr_test e_expr-32.1.3 { CAST('45.2' AS NUMERIC) } real 45.2
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1668 } 1684 }
1669 db1 close 1685 db1 close
1670 db2 close 1686 db2 close
1671 db3 close 1687 db3 close
1672 } 1688 }
1673 1689
1674 #------------------------------------------------------------------------- 1690 #-------------------------------------------------------------------------
1675 # Test statements related to the EXISTS and NOT EXISTS operators. 1691 # Test statements related to the EXISTS and NOT EXISTS operators.
1676 # 1692 #
1677 catch { db close } 1693 catch { db close }
1678 file delete -force test.db 1694 forcedelete test.db
1679 sqlite3 db test.db 1695 sqlite3 db test.db
1680 1696
1681 do_execsql_test e_expr-34.1 { 1697 do_execsql_test e_expr-34.1 {
1682 CREATE TABLE t1(a, b); 1698 CREATE TABLE t1(a, b);
1683 INSERT INTO t1 VALUES(1, 2); 1699 INSERT INTO t1 VALUES(1, 2);
1684 INSERT INTO t1 VALUES(NULL, 2); 1700 INSERT INTO t1 VALUES(NULL, 2);
1685 INSERT INTO t1 VALUES(1, NULL); 1701 INSERT INTO t1 VALUES(1, NULL);
1686 INSERT INTO t1 VALUES(NULL, NULL); 1702 INSERT INTO t1 VALUES(NULL, NULL);
1687 } {} 1703 } {}
1688 1704
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1749 set res [db one "SELECT $e1"] 1765 set res [db one "SELECT $e1"]
1750 do_expr_test e_expr-34.5.${tn}a $e1 integer $res 1766 do_expr_test e_expr-34.5.${tn}a $e1 integer $res
1751 do_expr_test e_expr-34.5.${tn}b $e2 integer $res 1767 do_expr_test e_expr-34.5.${tn}b $e2 integer $res
1752 } 1768 }
1753 1769
1754 #------------------------------------------------------------------------- 1770 #-------------------------------------------------------------------------
1755 # Test statements related to scalar sub-queries. 1771 # Test statements related to scalar sub-queries.
1756 # 1772 #
1757 1773
1758 catch { db close } 1774 catch { db close }
1759 file delete -force test.db 1775 forcedelete test.db
1760 sqlite3 db test.db 1776 sqlite3 db test.db
1761 do_test e_expr-35.0 { 1777 do_test e_expr-35.0 {
1762 execsql { 1778 execsql {
1763 CREATE TABLE t2(a, b); 1779 CREATE TABLE t2(a, b);
1764 INSERT INTO t2 VALUES('one', 'two'); 1780 INSERT INTO t2 VALUES('one', 'two');
1765 INSERT INTO t2 VALUES('three', NULL); 1781 INSERT INTO t2 VALUES('three', NULL);
1766 INSERT INTO t2 VALUES(4, 5.0); 1782 INSERT INTO t2 VALUES(4, 5.0);
1767 } 1783 }
1768 } {} 1784 } {}
1769 1785
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1836 # EVIDENCE-OF: R-25492-41572 If the SELECT yields no rows, then the 1852 # EVIDENCE-OF: R-25492-41572 If the SELECT yields no rows, then the
1837 # value of the expression is NULL. 1853 # value of the expression is NULL.
1838 # 1854 #
1839 foreach {tn expr} { 1855 foreach {tn expr} {
1840 1 { ( SELECT x FROM t4 WHERE x>3 ORDER BY x ) } 1856 1 { ( SELECT x FROM t4 WHERE x>3 ORDER BY x ) }
1841 2 { ( SELECT x FROM t4 WHERE y<'one' ORDER BY y ) } 1857 2 { ( SELECT x FROM t4 WHERE y<'one' ORDER BY y ) }
1842 } { 1858 } {
1843 do_expr_test e_expr-36.4.$tn $expr null {} 1859 do_expr_test e_expr-36.4.$tn $expr null {}
1844 } 1860 }
1845 1861
1862 # EVIDENCE-OF: R-62477-06476 For example, the values NULL, 0.0, 0,
1863 # 'english' and '0' are all considered to be false.
1864 #
1865 do_execsql_test e_expr-37.1 {
1866 SELECT CASE WHEN NULL THEN 'true' ELSE 'false' END;
1867 } {false}
1868 do_execsql_test e_expr-37.2 {
1869 SELECT CASE WHEN 0.0 THEN 'true' ELSE 'false' END;
1870 } {false}
1871 do_execsql_test e_expr-37.3 {
1872 SELECT CASE WHEN 0 THEN 'true' ELSE 'false' END;
1873 } {false}
1874 do_execsql_test e_expr-37.4 {
1875 SELECT CASE WHEN 'engligh' THEN 'true' ELSE 'false' END;
1876 } {false}
1877 do_execsql_test e_expr-37.5 {
1878 SELECT CASE WHEN '0' THEN 'true' ELSE 'false' END;
1879 } {false}
1880
1881 # EVIDENCE-OF: R-55532-10108 Values 1, 1.0, 0.1, -0.1 and '1english' are
1882 # considered to be true.
1883 #
1884 do_execsql_test e_expr-37.6 {
1885 SELECT CASE WHEN 1 THEN 'true' ELSE 'false' END;
1886 } {true}
1887 do_execsql_test e_expr-37.7 {
1888 SELECT CASE WHEN 1.0 THEN 'true' ELSE 'false' END;
1889 } {true}
1890 do_execsql_test e_expr-37.8 {
1891 SELECT CASE WHEN 0.1 THEN 'true' ELSE 'false' END;
1892 } {true}
1893 do_execsql_test e_expr-37.9 {
1894 SELECT CASE WHEN -0.1 THEN 'true' ELSE 'false' END;
1895 } {true}
1896 do_execsql_test e_expr-37.10 {
1897 SELECT CASE WHEN '1english' THEN 'true' ELSE 'false' END;
1898 } {true}
1899
1846 1900
1847 finish_test 1901 finish_test
1848
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698