| OLD | NEW |
| 1 # 2003 January 29 | 1 # 2003 January 29 |
| 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 # This file implements regression tests for SQLite library. The | 11 # This file implements regression tests for SQLite library. The |
| 12 # focus of this script testing the callback-free C/C++ API. | 12 # focus of this script testing the callback-free C/C++ API. |
| 13 # | 13 # |
| 14 # $Id: capi3.test,v 1.70 2009/01/09 02:49:32 drh Exp $ | 14 # $Id: capi3.test,v 1.70 2009/01/09 02:49:32 drh Exp $ |
| 15 # | 15 # |
| 16 | 16 |
| 17 set testdir [file dirname $argv0] | 17 set testdir [file dirname $argv0] |
| 18 source $testdir/tester.tcl | 18 source $testdir/tester.tcl |
| 19 | 19 |
| 20 # Do not use a codec for tests in this file, as the database file is |
| 21 # manipulated directly using tcl scripts (using the [hexio_write] command). |
| 22 # |
| 23 do_not_use_codec |
| 24 |
| 20 # Return the UTF-16 representation of the supplied UTF-8 string $str. | 25 # Return the UTF-16 representation of the supplied UTF-8 string $str. |
| 21 # If $nt is true, append two 0x00 bytes as a nul terminator. | 26 # If $nt is true, append two 0x00 bytes as a nul terminator. |
| 22 proc utf16 {str {nt 1}} { | 27 proc utf16 {str {nt 1}} { |
| 23 set r [encoding convertto unicode $str] | 28 set r [encoding convertto unicode $str] |
| 24 if {$nt} { | 29 if {$nt} { |
| 25 append r "\x00\x00" | 30 append r "\x00\x00" |
| 26 } | 31 } |
| 27 return $r | 32 return $r |
| 28 } | 33 } |
| 29 | 34 |
| (...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 628 sqlite3_finalize $STMT | 633 sqlite3_finalize $STMT |
| 629 } SQLITE_OK | 634 } SQLITE_OK |
| 630 | 635 |
| 631 | 636 |
| 632 set ::ENC [execsql {pragma encoding}] | 637 set ::ENC [execsql {pragma encoding}] |
| 633 db close | 638 db close |
| 634 | 639 |
| 635 do_test capi3-6.0 { | 640 do_test capi3-6.0 { |
| 636 sqlite3 db test.db | 641 sqlite3 db test.db |
| 637 set DB [sqlite3_connection_pointer db] | 642 set DB [sqlite3_connection_pointer db] |
| 638 sqlite3_key $DB xyzzy | 643 if {[sqlite3 -has-codec]==0} { sqlite3_key $DB xyzzy } |
| 639 set sql {SELECT a FROM t1 order by rowid} | 644 set sql {SELECT a FROM t1 order by rowid} |
| 640 set STMT [sqlite3_prepare $DB $sql -1 TAIL] | 645 set STMT [sqlite3_prepare $DB $sql -1 TAIL] |
| 641 expr 0 | 646 expr 0 |
| 642 } {0} | 647 } {0} |
| 643 do_test capi3-6.1 { | 648 do_test capi3-6.1 { |
| 644 db cache flush | 649 db cache flush |
| 645 sqlite3_close $DB | 650 sqlite3_close $DB |
| 646 } {SQLITE_BUSY} | 651 } {SQLITE_BUSY} |
| 647 do_test capi3-6.2 { | 652 do_test capi3-6.2 { |
| 648 sqlite3_step $STMT | 653 sqlite3_step $STMT |
| 649 } {SQLITE_ROW} | 654 } {SQLITE_ERROR} |
| 650 check_data $STMT capi3-6.3 {INTEGER} {1} {1.0} {1} | 655 #check_data $STMT capi3-6.3 {INTEGER} {1} {1.0} {1} |
| 651 do_test capi3-6.3 { | 656 do_test capi3-6.3 { |
| 652 sqlite3_finalize $STMT | 657 sqlite3_finalize $STMT |
| 653 } {SQLITE_OK} | 658 } {SQLITE_SCHEMA} |
| 654 do_test capi3-6.4-misuse { | 659 do_test capi3-6.4-misuse { |
| 655 db cache flush | 660 db cache flush |
| 656 sqlite3_close $DB | 661 sqlite3_close $DB |
| 657 } {SQLITE_OK} | 662 } {SQLITE_OK} |
| 658 db close | 663 db close |
| 659 | 664 |
| 660 # This procedure sets the value of the file-format in file 'test.db' | 665 # This procedure sets the value of the file-format in file 'test.db' |
| 661 # to $newval. Also, the schema cookie is incremented. | 666 # to $newval. Also, the schema cookie is incremented. |
| 662 # | 667 # |
| 663 proc set_file_format {newval} { | 668 proc set_file_format {newval} { |
| 664 hexio_write test.db 44 [hexio_render_int32 $newval] | 669 hexio_write test.db 44 [hexio_render_int32 $newval] |
| 665 set schemacookie [hexio_get_int [hexio_read test.db 40 4]] | 670 set schemacookie [hexio_get_int [hexio_read test.db 40 4]] |
| 666 incr schemacookie | 671 incr schemacookie |
| 667 hexio_write test.db 40 [hexio_render_int32 $schemacookie] | 672 hexio_write test.db 40 [hexio_render_int32 $schemacookie] |
| 668 return {} | 673 return {} |
| 669 } | 674 } |
| 670 | 675 |
| 671 # This procedure returns the value of the file-format in file 'test.db'. | 676 # This procedure returns the value of the file-format in file 'test.db'. |
| 672 # | 677 # |
| 673 proc get_file_format {{fname test.db}} { | 678 proc get_file_format {{fname test.db}} { |
| 674 return [hexio_get_int [hexio_read $fname 44 4]] | 679 return [hexio_get_int [hexio_read $fname 44 4]] |
| 675 } | 680 } |
| 676 | 681 |
| 677 if {![sqlite3 -has-codec]} { | 682 if {![sqlite3 -has-codec]} { |
| 678 # Test what happens when the library encounters a newer file format. | 683 # Test what happens when the library encounters a newer file format. |
| 679 do_test capi3-7.1 { | 684 do_test capi3-7.1 { |
| 680 set_file_format 5 | 685 set_file_format 5 |
| 681 } {} | 686 } {} |
| 682 do_test capi3-7.2 { | 687 do_test capi3-7.2 { |
| 683 sqlite3 db test.db | 688 catch { sqlite3 db test.db } |
| 684 catchsql { | 689 catchsql { |
| 685 SELECT * FROM sqlite_master; | 690 SELECT * FROM sqlite_master; |
| 686 } | 691 } |
| 687 } {1 {unsupported file format}} | 692 } {1 {unsupported file format}} |
| 688 db close | 693 db close |
| 689 } | 694 } |
| 690 | 695 |
| 691 if {![sqlite3 -has-codec]} { | 696 if {![sqlite3 -has-codec]} { |
| 692 # Now test that the library correctly handles bogus entries in the | 697 # Now test that the library correctly handles bogus entries in the |
| 693 # sqlite_master table (schema corruption). | 698 # sqlite_master table (schema corruption). |
| 694 do_test capi3-8.1 { | 699 do_test capi3-8.1 { |
| 695 file delete -force test.db test.db-journal | 700 file delete -force test.db test.db-journal |
| 696 sqlite3 db test.db | 701 sqlite3 db test.db |
| 697 execsql { | 702 execsql { |
| 698 CREATE TABLE t1(a); | 703 CREATE TABLE t1(a); |
| 699 } | 704 } |
| 700 db close | 705 db close |
| 701 } {} | 706 } {} |
| 702 do_test capi3-8.2 { | 707 do_test capi3-8.2 { |
| 703 sqlite3 db test.db | 708 sqlite3 db test.db |
| 704 execsql { | 709 execsql { |
| 705 PRAGMA writable_schema=ON; | 710 PRAGMA writable_schema=ON; |
| 706 INSERT INTO sqlite_master VALUES(NULL,NULL,NULL,NULL,NULL); | 711 INSERT INTO sqlite_master VALUES(NULL,NULL,NULL,NULL,NULL); |
| 707 } | 712 } |
| 708 db close | 713 db close |
| 709 } {} | 714 } {} |
| 710 do_test capi3-8.3 { | 715 do_test capi3-8.3 { |
| 711 sqlite3 db test.db | 716 catch { sqlite3 db test.db } |
| 712 catchsql { | 717 catchsql { |
| 713 SELECT * FROM sqlite_master; | 718 SELECT * FROM sqlite_master; |
| 714 } | 719 } |
| 715 } {1 {malformed database schema (?)}} | 720 } {1 {malformed database schema (?)}} |
| 716 do_test capi3-8.4 { | 721 do_test capi3-8.4 { |
| 717 # Build a 5-field row record. The first field is a string 'table', and | 722 # Build a 5-field row record. The first field is a string 'table', and |
| 718 # subsequent fields are all NULL. | 723 # subsequent fields are all NULL. |
| 719 db close | 724 db close |
| 720 file delete -force test.db test.db-journal | 725 file delete -force test.db test.db-journal |
| 721 sqlite3 db test.db | 726 sqlite3 db test.db |
| 722 execsql { | 727 execsql { |
| 723 CREATE TABLE t1(a); | 728 CREATE TABLE t1(a); |
| 724 PRAGMA writable_schema=ON; | 729 PRAGMA writable_schema=ON; |
| 725 INSERT INTO sqlite_master VALUES('table',NULL,NULL,NULL,NULL); | 730 INSERT INTO sqlite_master VALUES('table',NULL,NULL,NULL,NULL); |
| 726 } | 731 } |
| 727 db close | 732 db close |
| 728 } {}; | 733 } {}; |
| 729 do_test capi3-8.5 { | 734 do_test capi3-8.5 { |
| 730 sqlite3 db test.db | 735 catch { sqlite3 db test.db } |
| 731 catchsql { | 736 catchsql { |
| 732 SELECT * FROM sqlite_master; | 737 SELECT * FROM sqlite_master; |
| 733 } | 738 } |
| 734 } {1 {malformed database schema (?)}} | 739 } {1 {malformed database schema (?)}} |
| 735 db close | 740 db close |
| 736 } | 741 } |
| 737 file delete -force test.db | 742 file delete -force test.db |
| 738 file delete -force test.db-journal | 743 file delete -force test.db-journal |
| 739 | 744 |
| 740 | 745 |
| (...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1201 if {![info exists tester_do_binarylog]} { | 1206 if {![info exists tester_do_binarylog]} { |
| 1202 db close | 1207 db close |
| 1203 vfs_unregister_all | 1208 vfs_unregister_all |
| 1204 do_test capi3-20.1 { | 1209 do_test capi3-20.1 { |
| 1205 sqlite3_sleep 100 | 1210 sqlite3_sleep 100 |
| 1206 } {0} | 1211 } {0} |
| 1207 vfs_reregister_all | 1212 vfs_reregister_all |
| 1208 } | 1213 } |
| 1209 | 1214 |
| 1210 finish_test | 1215 finish_test |
| OLD | NEW |