| OLD | NEW |
| 1 # 2006 November 08 | 1 # 2006 November 08 |
| 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 #*********************************************************************** |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 set db2 [sqlite3_open /bogus/path/test.db {}] | 162 set db2 [sqlite3_open /bogus/path/test.db {}] |
| 163 } | 163 } |
| 164 sqlite3_errcode $db2 | 164 sqlite3_errcode $db2 |
| 165 } {SQLITE_CANTOPEN} | 165 } {SQLITE_CANTOPEN} |
| 166 do_test capi3c-3.4 { | 166 do_test capi3c-3.4 { |
| 167 sqlite3_errmsg $db2 | 167 sqlite3_errmsg $db2 |
| 168 } {unable to open database file} | 168 } {unable to open database file} |
| 169 do_test capi3c-3.5 { | 169 do_test capi3c-3.5 { |
| 170 sqlite3_close $db2 | 170 sqlite3_close $db2 |
| 171 } {SQLITE_OK} | 171 } {SQLITE_OK} |
| 172 do_test capi3c-3.6.1-misuse { | 172 if {[clang_sanitize_address]==0} { |
| 173 sqlite3_close $db2 | 173 do_test capi3c-3.6.1-misuse { |
| 174 } {SQLITE_MISUSE} | 174 sqlite3_close $db2 |
| 175 do_test capi3c-3.6.2-misuse { | 175 } {SQLITE_MISUSE} |
| 176 sqlite3_errmsg $db2 | 176 do_test capi3c-3.6.2-misuse { |
| 177 } {library routine called out of sequence} | 177 sqlite3_errmsg $db2 |
| 178 ifcapable {utf16} { | |
| 179 do_test capi3c-3.6.3-misuse { | |
| 180 utf8 [sqlite3_errmsg16 $db2] | |
| 181 } {library routine called out of sequence} | 178 } {library routine called out of sequence} |
| 179 ifcapable {utf16} { |
| 180 do_test capi3c-3.6.3-misuse { |
| 181 utf8 [sqlite3_errmsg16 $db2] |
| 182 } {library routine called out of sequence} |
| 183 } |
| 182 } | 184 } |
| 183 | 185 |
| 184 # rename sqlite3_open "" | 186 # rename sqlite3_open "" |
| 185 # rename sqlite3_open_old sqlite3_open | 187 # rename sqlite3_open_old sqlite3_open |
| 186 | 188 |
| 187 ifcapable {utf16} { | 189 ifcapable {utf16} { |
| 188 do_test capi3c-4.1 { | 190 do_test capi3c-4.1 { |
| 189 set db2 [sqlite3_open16 [utf16 test.db] {}] | 191 set db2 [sqlite3_open16 [utf16 test.db] {}] |
| 190 sqlite3_errcode $db2 | 192 sqlite3_errcode $db2 |
| 191 } {SQLITE_OK} | 193 } {SQLITE_OK} |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 db cache flush | 622 db cache flush |
| 621 sqlite3_close $DB | 623 sqlite3_close $DB |
| 622 } {SQLITE_BUSY} | 624 } {SQLITE_BUSY} |
| 623 do_test capi3c-6.2 { | 625 do_test capi3c-6.2 { |
| 624 sqlite3_step $STMT | 626 sqlite3_step $STMT |
| 625 } {SQLITE_ROW} | 627 } {SQLITE_ROW} |
| 626 check_data $STMT capi3c-6.3 {INTEGER} {1} {1.0} {1} | 628 check_data $STMT capi3c-6.3 {INTEGER} {1} {1.0} {1} |
| 627 do_test capi3c-6.3 { | 629 do_test capi3c-6.3 { |
| 628 sqlite3_finalize $STMT | 630 sqlite3_finalize $STMT |
| 629 } {SQLITE_OK} | 631 } {SQLITE_OK} |
| 630 do_test capi3c-6.4 { | 632 if {[clang_sanitize_address]==0} { |
| 631 db cache flush | 633 do_test capi3c-6.4 { |
| 632 sqlite3_close $DB | 634 db cache flush |
| 633 } {SQLITE_OK} | 635 sqlite3_close $DB |
| 634 do_test capi3c-6.99-misuse { | 636 } {SQLITE_OK} |
| 637 do_test capi3c-6.99-misuse { |
| 638 db close |
| 639 } {} |
| 640 } else { |
| 635 db close | 641 db close |
| 636 } {} | 642 } |
| 637 | 643 |
| 638 # This procedure sets the value of the file-format in file 'test.db' | 644 # This procedure sets the value of the file-format in file 'test.db' |
| 639 # to $newval. Also, the schema cookie is incremented. | 645 # to $newval. Also, the schema cookie is incremented. |
| 640 # | 646 # |
| 641 proc set_file_format {newval} { | 647 proc set_file_format {newval} { |
| 642 hexio_write test.db 44 [hexio_render_int32 $newval] | 648 hexio_write test.db 44 [hexio_render_int32 $newval] |
| 643 set schemacookie [hexio_get_int [hexio_read test.db 40 4]] | 649 set schemacookie [hexio_get_int [hexio_read test.db 40 4]] |
| 644 incr schemacookie | 650 incr schemacookie |
| 645 hexio_write test.db 40 [hexio_render_int32 $schemacookie] | 651 hexio_write test.db 40 [hexio_render_int32 $schemacookie] |
| 646 return {} | 652 return {} |
| (...skipping 16 matching lines...) Expand all Loading... |
| 663 SELECT * FROM sqlite_master; | 669 SELECT * FROM sqlite_master; |
| 664 } | 670 } |
| 665 } {1 {unsupported file format}} | 671 } {1 {unsupported file format}} |
| 666 db close | 672 db close |
| 667 } | 673 } |
| 668 | 674 |
| 669 if {![sqlite3 -has-codec]} { | 675 if {![sqlite3 -has-codec]} { |
| 670 # Now test that the library correctly handles bogus entries in the | 676 # Now test that the library correctly handles bogus entries in the |
| 671 # sqlite_master table (schema corruption). | 677 # sqlite_master table (schema corruption). |
| 672 do_test capi3c-8.1 { | 678 do_test capi3c-8.1 { |
| 673 file delete -force test.db test.db-journal | 679 forcedelete test.db test.db-journal |
| 674 sqlite3 db test.db | 680 sqlite3 db test.db |
| 675 execsql { | 681 execsql { |
| 676 CREATE TABLE t1(a); | 682 CREATE TABLE t1(a); |
| 677 } | 683 } |
| 678 db close | 684 db close |
| 679 } {} | 685 } {} |
| 680 do_test capi3c-8.2 { | 686 do_test capi3c-8.2 { |
| 681 sqlite3 db test.db | 687 sqlite3 db test.db |
| 682 execsql { | 688 execsql { |
| 683 PRAGMA writable_schema=ON; | 689 PRAGMA writable_schema=ON; |
| 684 INSERT INTO sqlite_master VALUES(NULL,NULL,NULL,NULL,NULL); | 690 INSERT INTO sqlite_master VALUES(NULL,NULL,NULL,NULL,NULL); |
| 685 } | 691 } |
| 686 db close | 692 db close |
| 687 } {} | 693 } {} |
| 688 do_test capi3c-8.3 { | 694 do_test capi3c-8.3 { |
| 689 catch { sqlite3 db test.db } | 695 catch { sqlite3 db test.db } |
| 690 catchsql { | 696 catchsql { |
| 691 SELECT * FROM sqlite_master; | 697 SELECT * FROM sqlite_master; |
| 692 } | 698 } |
| 693 } {1 {malformed database schema (?)}} | 699 } {1 {malformed database schema (?)}} |
| 694 do_test capi3c-8.4 { | 700 do_test capi3c-8.4 { |
| 695 # Build a 5-field row record. The first field is a string 'table', and | 701 # Build a 5-field row record. The first field is a string 'table', and |
| 696 # subsequent fields are all NULL. | 702 # subsequent fields are all NULL. |
| 697 db close | 703 db close |
| 698 file delete -force test.db test.db-journal | 704 forcedelete test.db test.db-journal |
| 699 sqlite3 db test.db | 705 sqlite3 db test.db |
| 700 execsql { | 706 execsql { |
| 701 CREATE TABLE t1(a); | 707 CREATE TABLE t1(a); |
| 702 PRAGMA writable_schema=ON; | 708 PRAGMA writable_schema=ON; |
| 703 INSERT INTO sqlite_master VALUES('table',NULL,NULL,NULL,NULL); | 709 INSERT INTO sqlite_master VALUES('table',NULL,NULL,NULL,NULL); |
| 704 } | 710 } |
| 705 db close | 711 db close |
| 706 } {}; | 712 } {}; |
| 707 do_test capi3c-8.5 { | 713 do_test capi3c-8.5 { |
| 708 catch { sqlite3 db test.db } | 714 catch { sqlite3 db test.db } |
| 709 catchsql { | 715 catchsql { |
| 710 SELECT * FROM sqlite_master; | 716 SELECT * FROM sqlite_master; |
| 711 } | 717 } |
| 712 } {1 {malformed database schema (?)}} | 718 } {1 {malformed database schema (?)}} |
| 713 db close | 719 db close |
| 714 } | 720 } |
| 715 file delete -force test.db | 721 forcedelete test.db |
| 716 file delete -force test.db-journal | 722 forcedelete test.db-journal |
| 717 | 723 |
| 718 | 724 |
| 719 # Test the english language string equivalents for sqlite error codes | 725 # Test the english language string equivalents for sqlite error codes |
| 720 set code2english [list \ | 726 set code2english [list \ |
| 721 SQLITE_OK {not an error} \ | 727 SQLITE_OK {not an error} \ |
| 722 SQLITE_ERROR {SQL logic error or missing database} \ | 728 SQLITE_ERROR {SQL logic error or missing database} \ |
| 723 SQLITE_PERM {access permission denied} \ | 729 SQLITE_PERM {access permission denied} \ |
| 724 SQLITE_ABORT {callback requested query abort} \ | 730 SQLITE_ABORT {callback requested query abort} \ |
| 725 SQLITE_BUSY {database is locked} \ | 731 SQLITE_BUSY {database is locked} \ |
| 726 SQLITE_LOCKED {database table is locked} \ | 732 SQLITE_LOCKED {database table is locked} \ |
| (...skipping 17 matching lines...) Expand all Loading... |
| 744 unknownerror {unknown error} \ | 750 unknownerror {unknown error} \ |
| 745 ] | 751 ] |
| 746 | 752 |
| 747 set test_number 1 | 753 set test_number 1 |
| 748 foreach {code english} $code2english { | 754 foreach {code english} $code2english { |
| 749 do_test capi3c-9.$test_number "sqlite3_test_errstr $code" $english | 755 do_test capi3c-9.$test_number "sqlite3_test_errstr $code" $english |
| 750 incr test_number | 756 incr test_number |
| 751 } | 757 } |
| 752 | 758 |
| 753 # Test the error message when a "real" out of memory occurs. | 759 # Test the error message when a "real" out of memory occurs. |
| 760 if { [permutation] != "nofaultsim" } { |
| 754 ifcapable memdebug { | 761 ifcapable memdebug { |
| 755 do_test capi3c-10-1 { | 762 do_test capi3c-10-1 { |
| 756 sqlite3 db test.db | 763 sqlite3 db test.db |
| 757 set DB [sqlite3_connection_pointer db] | 764 set DB [sqlite3_connection_pointer db] |
| 758 sqlite3_memdebug_fail 0 | 765 sqlite3_memdebug_fail 0 |
| 759 catchsql { | 766 catchsql { |
| 760 select * from sqlite_master; | 767 select * from sqlite_master; |
| 761 } | 768 } |
| 762 } {1 {out of memory}} | 769 } {1 {out of memory}} |
| 763 do_test capi3c-10-2 { | 770 do_test capi3c-10-2 { |
| 764 sqlite3_errmsg $::DB | 771 sqlite3_errmsg $::DB |
| 765 } {out of memory} | 772 } {out of memory} |
| 766 ifcapable {utf16} { | 773 ifcapable {utf16} { |
| 767 do_test capi3c-10-3 { | 774 do_test capi3c-10-3 { |
| 768 utf8 [sqlite3_errmsg16 $::DB] | 775 utf8 [sqlite3_errmsg16 $::DB] |
| 769 } {out of memory} | 776 } {out of memory} |
| 770 } | 777 } |
| 771 db close | 778 db close |
| 772 sqlite3_memdebug_fail -1 | 779 sqlite3_memdebug_fail -1 |
| 773 } | 780 } |
| 781 } |
| 774 | 782 |
| 775 # The following tests - capi3c-11.* - test that a COMMIT or ROLLBACK | 783 # The following tests - capi3c-11.* - test that a COMMIT or ROLLBACK |
| 776 # statement issued while there are still outstanding VMs that are part of | 784 # statement issued while there are still outstanding VMs that are part of |
| 777 # the transaction fails. | 785 # the transaction fails. |
| 778 sqlite3 db test.db | 786 sqlite3 db test.db |
| 779 set DB [sqlite3_connection_pointer db] | 787 set DB [sqlite3_connection_pointer db] |
| 780 sqlite_register_test_function $DB func | 788 sqlite_register_test_function $DB func |
| 781 do_test capi3c-11.1 { | 789 do_test capi3c-11.1 { |
| 782 execsql { | 790 execsql { |
| 783 BEGIN; | 791 BEGIN; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 842 set STMT [sqlite3_prepare_v2 $DB "SELECT a FROM t2" -1 TAIL] | 850 set STMT [sqlite3_prepare_v2 $DB "SELECT a FROM t2" -1 TAIL] |
| 843 sqlite3_step $STMT | 851 sqlite3_step $STMT |
| 844 } {SQLITE_ROW} | 852 } {SQLITE_ROW} |
| 845 do_test capi3c-11.9.1 { | 853 do_test capi3c-11.9.1 { |
| 846 sqlite3_get_autocommit $DB | 854 sqlite3_get_autocommit $DB |
| 847 } 0 | 855 } 0 |
| 848 do_test capi3c-11.9.2 { | 856 do_test capi3c-11.9.2 { |
| 849 catchsql { | 857 catchsql { |
| 850 ROLLBACK; | 858 ROLLBACK; |
| 851 } | 859 } |
| 852 } {1 {cannot rollback transaction - SQL statements in progress}} | 860 } {0 {}} |
| 853 do_test capi3c-11.9.3 { | 861 do_test capi3c-11.9.3 { |
| 854 sqlite3_get_autocommit $DB | 862 sqlite3_get_autocommit $DB |
| 855 } 0 | 863 } 1 |
| 856 do_test capi3c-11.10 { | 864 do_test capi3c-11.10 { |
| 857 sqlite3_step $STMT | 865 sqlite3_step $STMT |
| 858 } {SQLITE_ROW} | 866 } {SQLITE_ROW} |
| 867 ifcapable !autoreset { |
| 868 # If SQLITE_OMIT_AUTORESET is defined, then the statement must be |
| 869 # reset() before it can be passed to step() again. |
| 870 do_test capi3-11.11a { sqlite3_step $STMT } {SQLITE_MISUSE} |
| 871 do_test capi3-11.11b { sqlite3_reset $STMT } {SQLITE_ABORT} |
| 872 } |
| 859 do_test capi3c-11.11 { | 873 do_test capi3c-11.11 { |
| 860 sqlite3_step $STMT | 874 sqlite3_step $STMT |
| 861 } {SQLITE_ROW} | 875 } {SQLITE_DONE} |
| 862 do_test capi3c-11.12 { | 876 do_test capi3c-11.12 { |
| 863 sqlite3_step $STMT | 877 sqlite3_step $STMT |
| 864 } {SQLITE_DONE} | 878 sqlite3_step $STMT |
| 879 } {SQLITE_ROW} |
| 865 do_test capi3c-11.13 { | 880 do_test capi3c-11.13 { |
| 866 sqlite3_finalize $STMT | 881 sqlite3_finalize $STMT |
| 867 } {SQLITE_OK} | 882 } {SQLITE_OK} |
| 868 do_test capi3c-11.14 { | 883 do_test capi3c-11.14 { |
| 869 execsql { | 884 execsql { |
| 870 SELECT a FROM t2; | 885 SELECT a FROM t2; |
| 871 } | 886 } |
| 872 } {1 2 3} | 887 } {1 2} |
| 873 do_test capi3c-11.14.1 { | 888 do_test capi3c-11.14.1 { |
| 874 sqlite3_get_autocommit $DB | 889 sqlite3_get_autocommit $DB |
| 875 } 0 | 890 } 1 |
| 876 do_test capi3c-11.15 { | 891 do_test capi3c-11.15 { |
| 877 catchsql { | 892 catchsql { |
| 878 ROLLBACK; | 893 ROLLBACK; |
| 879 } | 894 } |
| 880 } {0 {}} | 895 } {1 {cannot rollback - no transaction is active}} |
| 881 do_test capi3c-11.15.1 { | 896 do_test capi3c-11.15.1 { |
| 882 sqlite3_get_autocommit $DB | 897 sqlite3_get_autocommit $DB |
| 883 } 1 | 898 } 1 |
| 884 do_test capi3c-11.16 { | 899 do_test capi3c-11.16 { |
| 885 execsql { | 900 execsql { |
| 886 SELECT a FROM t2; | 901 SELECT a FROM t2; |
| 887 } | 902 } |
| 888 } {1 2} | 903 } {1 2} |
| 889 | 904 |
| 890 # Sanity check on the definition of 'outstanding VM'. This means any VM | 905 # Sanity check on the definition of 'outstanding VM'. This means any VM |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1354 decltype { | 1369 decltype { |
| 1355 SELECT (SELECT x FROM (SELECT c AS x)) | 1370 SELECT (SELECT x FROM (SELECT c AS x)) |
| 1356 FROM (SELECT * FROM t5 ORDER BY c LIMIT 1) ORDER BY b | 1371 FROM (SELECT * FROM t5 ORDER BY c LIMIT 1) ORDER BY b |
| 1357 } | 1372 } |
| 1358 } {DATETIME} | 1373 } {DATETIME} |
| 1359 do_test capi3c-24.3 { | 1374 do_test capi3c-24.3 { |
| 1360 decltype {SELECT (SELECT x FROM (SELECT t5.a AS x)) FROM t5} | 1375 decltype {SELECT (SELECT x FROM (SELECT t5.a AS x)) FROM t5} |
| 1361 } {INTEGER} | 1376 } {INTEGER} |
| 1362 | 1377 |
| 1363 finish_test | 1378 finish_test |
| OLD | NEW |