Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add further test cases. Fix an assert() in pager.c. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
8e65c0e3dac400f6a0ec3b7494fba62c |
User & Date: | dan 2010-06-30 10:36:19.000 |
Context
2010-07-01
| ||
15:09 | Add pager test cases. Change a condition in pager.c to NEVER(). (check-in: a8f6341d3b user: dan tags: trunk) | |
2010-06-30
| ||
10:36 | Add further test cases. Fix an assert() in pager.c. (check-in: 8e65c0e3da user: dan tags: trunk) | |
04:36 | Do not call pager_open_journal() from within PagerBegin() if the connection is in exclusive-access mode. It will be called from within PagerWrite() just as it is for non-exclusive mode anyway. (check-in: cdf2c5c2dd user: dan tags: trunk) | |
Changes
Changes to src/pager.c.
︙ | ︙ | |||
5287 5288 5289 5290 5291 5292 5293 | ** to the database file. So there is no need to zero the journal ** header. Since the pager is in exclusive mode, there is no need ** to drop any locks either. */ if( pPager->dbModified==0 && pPager->exclusiveMode && pPager->journalMode==PAGER_JOURNALMODE_PERSIST ){ | | | 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 | ** to the database file. So there is no need to zero the journal ** header. Since the pager is in exclusive mode, there is no need ** to drop any locks either. */ if( pPager->dbModified==0 && pPager->exclusiveMode && pPager->journalMode==PAGER_JOURNALMODE_PERSIST ){ assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) || !pPager->journalOff ); return SQLITE_OK; } PAGERTRACE(("COMMIT %d\n", PAGERID(pPager))); assert( pPager->state==PAGER_SYNCED || MEMDB || !pPager->dbModified ); rc = pager_end_transaction(pPager, pPager->setMaster); return pager_error(pPager, rc); |
︙ | ︙ |
Added test/notify3.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | # 2010 June 30 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is testing the sqlite3_unlock_notify() API. # set testdir [file dirname $argv0] source $testdir/tester.tcl set esc [sqlite3_enable_shared_cache 1] sqlite3 db test.db file delete -force test.db2 test.db2-journal test.db2-wal sqlite3 db2 test.db2 do_test notify3-1.1 { execsql { CREATE TABLE t1(a, b); INSERT INTO t1 VALUES('t1 A', 't1 B'); } } {} do_test notify3-1.2 { execsql { CREATE TABLE t2(a, b); INSERT INTO t2 VALUES('t2 A', 't2 B'); } db2 } {} do_test notify3-1.3 { execsql { BEGIN EXCLUSIVE; INSERT INTO t2 VALUES('t2 C', 't2 D'); } db2 } {} do_test notify3-1.4 { catchsql { ATTACH 'test.db2' AS aux } } {0 {}} do_test notify3-1.5 { catchsql { SELECT * FROM t2 } } {1 {database schema is locked: aux}} do_test notify3-1.6 { list [sqlite3_errcode db] [sqlite3_extended_errcode db] } {SQLITE_LOCKED SQLITE_LOCKED_SHAREDCACHE} do_test notify3-1.7 { sqlite3_extended_result_codes db 1 catch { set ::stmt [sqlite3_prepare_v2 db "SELECT * FROM t2" -1 tail] } msg set msg } {(262) database schema is locked: aux} do_test notify3-1.8 { set ::when 1 db unlock_notify { set ::res $::when } set ::when 2 execsql { COMMIT } db2 set ::res } {2} do_test notify3-1.9 { catchsql { SELECT * FROM t2 } } {0 {{t2 A} {t2 B} {t2 C} {t2 D}}} sqlite3_enable_shared_cache $esc finish_test |
Changes to test/pager1.test.
︙ | ︙ | |||
277 278 279 280 281 282 283 284 285 286 287 288 289 290 | 10 { PRAGMA synchronous = NORMAL } { } 11 { PRAGMA synchronous = OFF } { } 12 { PRAGMA synchronous = FULL ; PRAGMA fullfsync = 1 } { } 13 { PRAGMA synchronous = FULL } { testvfs tv -default 1 tv devchar sequential } } { do_test pager1-3.$tn.1 { eval $tcl faultsim_delete_and_reopen db func a_string a_string execsql $sql execsql { | > > | 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | 10 { PRAGMA synchronous = NORMAL } { } 11 { PRAGMA synchronous = OFF } { } 12 { PRAGMA synchronous = FULL ; PRAGMA fullfsync = 1 } { } 13 { PRAGMA synchronous = FULL } { testvfs tv -default 1 tv devchar sequential } 14 { PRAGMA locking_mode = EXCLUSIVE } { } } { do_test pager1-3.$tn.1 { eval $tcl faultsim_delete_and_reopen db func a_string a_string execsql $sql execsql { |
︙ | ︙ | |||
1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 | ma, mb, mc, md, me, mf, mg, mh, mi, mj, mk, ml, mm, mn ); INSERT INTO t1(aa) VALUES( a_string(100000) ); INSERT INTO t2(aa) VALUES( a_string(100000) ); VACUUM; } } {} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 | ma, mb, mc, md, me, mf, mg, mh, mi, mj, mk, ml, mm, mn ); INSERT INTO t1(aa) VALUES( a_string(100000) ); INSERT INTO t2(aa) VALUES( a_string(100000) ); VACUUM; } } {} #------------------------------------------------------------------------- # Test a couple of special cases that come up while committing # transactions: # # pager1-20.1.*: Committing an in-memory database transaction when the # database has not been modified at all. # # pager1-20.2.*: As above, but with a normal db in exclusive-locking mode. # # pager1-20.3.*: Committing a transaction in WAL mode where the database has # been modified, but all dirty pages have been flushed to # disk before the commit. # do_test pager1-20.1.1 { catch {db close} sqlite3 db :memory: execsql { CREATE TABLE one(two, three); INSERT INTO one VALUES('a', 'b'); } } {} do_test pager1-20.1.2 { execsql { BEGIN EXCLUSIVE; COMMIT; } } {} do_test pager1-20.2.1 { faultsim_delete_and_reopen execsql { PRAGMA locking_mode = exclusive; PRAGMA journal_mode = persist; CREATE TABLE one(two, three); INSERT INTO one VALUES('a', 'b'); } } {exclusive persist} do_test pager1-20.2.2 { execsql { BEGIN EXCLUSIVE; COMMIT; } } {} do_test pager1-20.3.1 { faultsim_delete_and_reopen db func a_string a_string execsql { PRAGMA cache_size = 10; PRAGMA journal_mode = wal; BEGIN; CREATE TABLE t1(x); CREATE TABLE t2(y); INSERT INTO t1 VALUES(a_string(800)); INSERT INTO t1 SELECT a_string(800) FROM t1; /* 2 */ INSERT INTO t1 SELECT a_string(800) FROM t1; /* 4 */ INSERT INTO t1 SELECT a_string(800) FROM t1; /* 8 */ INSERT INTO t1 SELECT a_string(800) FROM t1; /* 16 */ INSERT INTO t1 SELECT a_string(800) FROM t1; /* 32 */ COMMIT; } } {wal} do_test pager1-20.3.2 { proc recursive_select {id} { db eval {SELECT rowid, x FROM t1 WHERE rowid = ($id-1)} { recursive_select $rowid } } execsql { BEGIN; INSERT INTO t2 VALUES('xxxx'); } recursive_select 32 execsql COMMIT } {} finish_test |
Changes to test/pagerfault.test.
︙ | ︙ | |||
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 | do_faultsim_test pagerfault-13 -prep { faultsim_restore_and_reopen } -body { execsql { CREATE TABLE xx(a, b) } } -test { faultsim_test_result {0 {}} } #--------------------------------------------------------------------------- # Test fault injection into a small backup operation. # do_test pagerfault-14-pre1 { faultsim_delete_and_reopen db func a_string a_string; execsql { PRAGMA journal_mode = PERSIST; ATTACH 'test.db2' AS two; BEGIN; CREATE TABLE t1(x, y UNIQUE); CREATE TABLE two.t2(x, y UNIQUE); INSERT INTO t1 VALUES(a_string(333), a_string(444)); INSERT INTO t2 VALUES(a_string(333), a_string(444)); COMMIT; } faultsim_save_and_close } {} | > > > > | > > > > > > > > > > > > > > | 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 | do_faultsim_test pagerfault-13 -prep { faultsim_restore_and_reopen } -body { execsql { CREATE TABLE xx(a, b) } } -test { faultsim_test_result {0 {}} } } #--------------------------------------------------------------------------- # Test fault injection into a small backup operation. # do_test pagerfault-14-pre1 { faultsim_delete_and_reopen db func a_string a_string; execsql { PRAGMA journal_mode = PERSIST; ATTACH 'test.db2' AS two; BEGIN; CREATE TABLE t1(x, y UNIQUE); CREATE TABLE two.t2(x, y UNIQUE); INSERT INTO t1 VALUES(a_string(333), a_string(444)); INSERT INTO t2 VALUES(a_string(333), a_string(444)); COMMIT; } faultsim_save_and_close } {} do_faultsim_test pagerfault-14a -prep { faultsim_restore_and_reopen } -body { if {[catch {db backup test.db2} msg]} { error [regsub {.*: } $msg {}] } } -test { faultsim_test_result {0 {}} {1 {}} {1 {SQL logic error or missing database}} } do_faultsim_test pagerfault-14b -prep { faultsim_restore_and_reopen sqlite3 db2 "" db2 eval { PRAGMA page_size = 4096; CREATE TABLE xx(a) } } -body { sqlite3_backup B db2 main db main B step 200 set rc [B finish] if {[string match SQLITE_IOERR_* $rc]} {set rc SQLITE_IOERR} if {$rc != "SQLITE_OK"} { error [sqlite3_test_errstr $rc] } set {} {} } -test { faultsim_test_result {0 {}} } do_test pagerfault-15-pre1 { faultsim_delete_and_reopen db func a_string a_string; execsql { BEGIN; |
︙ | ︙ | |||
663 664 665 666 667 668 669 | } } } -test { faultsim_test_result {0 {}} faultsim_integrity_check } | < | 681 682 683 684 685 686 687 688 689 690 691 692 693 694 | } } } -test { faultsim_test_result {0 {}} faultsim_integrity_check } do_test pagerfault-16-pre1 { faultsim_delete_and_reopen execsql { CREATE TABLE t1(x, y UNIQUE) } faultsim_save_and_close } {} do_faultsim_test pagerfault-16 -prep { |
︙ | ︙ |