diff --git a/ext/icu/README.txt b/ext/icu/README.txt index 5c995ccb4a..c5cadb57d1 100644 --- a/ext/icu/README.txt +++ b/ext/icu/README.txt @@ -139,7 +139,7 @@ SQLite. Documentation follows. 3.2 The SQLITE_MAX_LIKE_PATTERN_LENGTH Macro Passing very long patterns to the built-in SQLite LIKE operator can - cause a stack overflow. To curb this problem, SQLite defines the + cause excessive CPU usage. To curb this problem, SQLite defines the SQLITE_MAX_LIKE_PATTERN_LENGTH macro as the maximum length of a pattern in bytes (irrespective of encoding). The default value is defined in internal header file "limits.h". @@ -167,4 +167,3 @@ SQLite. Documentation follows. malicious users may execute arbitrary SQL (i.e. gears), they should be prevented from invoking the icu_load_collation() function, possibly using the authorisation callback. - diff --git a/manifest b/manifest index 7e17c9af8d..8c0289ea3a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\strunk\schanges\sinto\sexperimental\sbranch. -D 2010-07-28T18:35:50 +C Merge\sfurther\strunk\schanges\sinto\sexperimental\sbranch. +D 2010-07-30T07:26:51 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in ec08dc838fd8110fe24c92e5130bcd91cbb1ff2e F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -74,7 +74,7 @@ F ext/fts3/fts3_tokenizer.h 13ffd9fcb397fec32a05ef5cd9e0fa659bf3dbd3 F ext/fts3/fts3_tokenizer1.c b6d86d1d750787db5c168c73da4e87670ed890a1 F ext/fts3/fts3_write.c 4b21a0c6f2772b261f14e3a2e80e1e3e849268b0 F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100 -F ext/icu/README.txt 3b130aa66e7a681136f6add198b076a2f90d1e33 +F ext/icu/README.txt bf8461d8cdc6b8f514c080e4e10dc3b2bbdfefa9 F ext/icu/icu.c 850e9a36567bbcce6bd85a4b68243cad8e3c2de2 F ext/icu/sqliteicu.h 728867a802baa5a96de7495e9689a8e01715ef37 F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761 @@ -116,7 +116,7 @@ F src/btmutex.c 96a12f50f7a17475155971a241d85ec5171573ff F src/btree.c ed454f53f7bf7fb89c7a89f93fa93c5cd35e7aae F src/btree.h dd83041eda10c17daf023257c1fc883b5f71f85a F src/btreeInt.h b0c87f6725b06a0aa194a6d25d54b16ce9d6e291 -F src/build.c d4593392b8bf0753dd16f494628823f6f39ee7fb +F src/build.c 0018d49629fc4807100c988dd191dd95e185bb38 F src/callback.c da3c38d0ef5d7f04fae371e519bda61aa9cb1704 F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac F src/ctime.c 4f3aadad62c6c9f0d4e5a96718516ac4e3c598df @@ -124,7 +124,7 @@ F src/date.c 5dd8448a0bfea8d31fb14cff487d0c06ff8c8b20 F src/delete.c 7ed8a8c8b5f748ece92df173d7e0f7810c899ebd F src/expr.c a0fd9c5e248229851077de92f2e9346f2c43ed46 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb -F src/fkey.c cacfe3e24b311e4e089a9c470bdb73196af6f729 +F src/fkey.c 58bbf52c6ddd3f64ca40a3230f9e548a83a5cb16 F src/func.c 75dc1fd91e5692cadb80d257bab68d7343060467 F src/global.c 02335177cf6946fe5525c6f0755cf181140debf3 F src/hash.c 458488dcc159c301b8e7686280ab209f1fb915af @@ -156,7 +156,7 @@ F src/os_common.h a8f95b81eca8a1ab8593d23e94f8a35f35d4078f F src/os_os2.c 72d0b2e562952a2464308c4ce5f7913ac10bef3e F src/os_unix.c ae5ca8a6031380708f3fec7be325233d49944914 F src/os_win.c 51cb62f76262d961ea4249489383d714501315a7 -F src/pager.c 4cf634d80958f69fa3882624067423cd7547d976 +F src/pager.c 65efcf8cc70de5facf4375dbd78a99ceb3d19d6e F src/pager.h 879fdde5a102d2f21a3135d6f647530b21c2796c F src/parse.y 12b7ebd61ea54f0e1b1083ff69cc2c8ce9353d58 F src/pcache.c 1e9aa2dbc0845b52e1b51cc39753b6d1e041cb07 @@ -170,7 +170,7 @@ F src/resolve.c 1c0f32b64f8e3f555fe1f732f9d6f501a7f05706 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 F src/select.c 74fef1334bec27e606ef0b19e5c41cd0a639e69c F src/shell.c 8517fc1f9c59ae4007e6cc8b9af91ab231ea2056 -F src/sqlite.h.in 77af8becd95ddd5149448fa667b20845da98072d +F src/sqlite.h.in 372baf01f7f58b18dfa85e13b55985f2edd6ebc8 F src/sqlite3ext.h 69dfb8116af51b84a029cddb3b35062354270c89 F src/sqliteInt.h a9be6badc6cd6a3c1ae54475a98661cf351ecad5 F src/sqliteLimit.h 196e2f83c3b444c4548fc1874f52f84fdbda40f3 @@ -221,7 +221,7 @@ F src/vacuum.c 241a8386727c1497eba4955933356dfba6ff8c9f F src/vdbe.c cefff41564b68a412e65e6a1013ec1b1c1ece6c4 F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2 F src/vdbeInt.h ffd68c4d4229227a5089bec53a1c635146177abc -F src/vdbeapi.c dc3138f10afbc95ed3c21dd25abb154504b1db9d +F src/vdbeapi.c d0f4407e465f261780ad725c1caece7d66a6aa35 F src/vdbeaux.c 77442ab4233858cf603910429033fbbd997ecdef F src/vdbeblob.c 258a6010ba7a82b72b327fb24c55790655689256 F src/vdbemem.c 5e579abf6532001dfbee0e640dc34eae897a9807 @@ -330,7 +330,7 @@ F test/createtab.test 199cf68f44e5d9e87a0b8afc7130fdeb4def3272 F test/cse.test 277350a26264495e86b1785f34d2d0c8600e021c F test/ctime.test 7bd009071e242aac4f18521581536b652b789a47 F test/date.test 6354b883f922c38046a8efbad187cc95df6da023 -F test/dbstatus.test ce26cd49a3746ca7ae0e5802ef0b2a9edbf71b29 +F test/dbstatus.test f3c88a3f8d15716e6ae73567a78ee96420c294a3 F test/default.test 6faf23ccb300114924353007795aa9a8ec0aa9dc F test/delete.test f7629d9eb245dfca170169cc5c7a735dec34aeb4 F test/delete2.test 3a03f2cca1f9a67ec469915cb8babd6485db43fa @@ -355,7 +355,7 @@ F test/fallocate.test 0594314eb04268f7d0779d054fa850a36a5ae8bc F test/filectrl.test 97003734290887566e01dded09dc9e99cb937e9e F test/filefmt.test 5d271bf467e6557fe7499dcc8203069c9dc5825e F test/fkey1.test 01c7de578e11747e720c2d9aeef27f239853c4da -F test/fkey2.test 098c06c139a79f690301a43511cd1f6420ae5433 +F test/fkey2.test e028cd80aa0bd38541c99214e3ba2dfccadffe6f F test/fkey3.test 42f88d6048d8dc079e2a8cf7baad1cc1483a7620 F test/fkey_malloc.test a5ede29bd2f6e56dea78c3d43fb86dd696c068c8 F test/format4.test 1f0cac8ff3895e9359ed87e41aaabee982a812eb @@ -432,7 +432,7 @@ F test/fuzz3.test aec64345184d1662bd30e6a17851ff659d596dc5 F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b F test/fuzz_malloc.test dd7001ac86d09c154a7dff064f4739c60e2b312c F test/hook.test f04c3412463f8ec117c1c704c74ca0f627ce733a -F test/icu.test 1fc0ff9a3bafc80abf679b11afc0f8a3ce995abd +F test/icu.test 70df4faca133254c042d02ae342c0a141f2663f4 F test/in.test d49419c6df515852f477fa513f3317181d46bc92 F test/in2.test 5d4c61d17493c832f7d2d32bef785119e87bde75 F test/in3.test 3cbf58c87f4052cee3a58b37b6389777505aa0c0 @@ -840,7 +840,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 0714aeccd82d82686c074c1bb74ea794b7bfa3a3 ae89777e7f8bae2cdd3407395ea84c1b39577c4b -R 929440acfba750114000a8118fc5b2ef +P aa81900153a2762cb2ad41e6710c1f1e7dc8b41e 451d965742cc219db709939b4ba1da2f2343dbce +R ed3ad896c2cd90b3c1af9b65becc7431 U dan -Z 1bb342ebf679301c7cb8840574e16573 +Z 9e7bcf251287b29d791a1cd12b29e0e0 diff --git a/manifest.uuid b/manifest.uuid index 1b72985d5b..57955c6cf0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -aa81900153a2762cb2ad41e6710c1f1e7dc8b41e \ No newline at end of file +fb847d70407b0f0e548919b7554f62bc1dab8a6c \ No newline at end of file diff --git a/src/build.c b/src/build.c index 1281af67e5..636b8a6942 100644 --- a/src/build.c +++ b/src/build.c @@ -513,7 +513,9 @@ void sqlite3DeleteTable(sqlite3 *db, Table *pTable){ #ifndef SQLITE_OMIT_CHECK sqlite3ExprDelete(db, pTable->pCheck); #endif +#ifndef SQLITE_OMIT_VIRTUALTABLE sqlite3VtabClear(db, pTable); +#endif sqlite3DbFree(db, pTable); } diff --git a/src/fkey.c b/src/fkey.c index 399e35005a..f0ad40d837 100644 --- a/src/fkey.c +++ b/src/fkey.c @@ -500,7 +500,8 @@ static void fkScanChildren( if( pIdx ){ Column *pCol; iCol = pIdx->aiColumn[i]; - pCol = &pIdx->pTable->aCol[iCol]; + pCol = &pTab->aCol[iCol]; + if( pTab->iPKey==iCol ) iCol = -1; pLeft->iTable = regData+iCol+1; pLeft->affinity = pCol->affinity; pLeft->pColl = sqlite3LocateCollSeq(pParse, pCol->zColl); diff --git a/src/pager.c b/src/pager.c index 3f82d7fd80..de3547a897 100644 --- a/src/pager.c +++ b/src/pager.c @@ -332,7 +332,7 @@ struct PagerSavepoint { struct Pager { sqlite3_vfs *pVfs; /* OS functions to use for IO */ u8 exclusiveMode; /* Boolean. True if locking_mode==EXCLUSIVE */ - u8 journalMode; /* On of the PAGER_JOURNALMODE_* values */ + u8 journalMode; /* One of the PAGER_JOURNALMODE_* values */ u8 useJournal; /* Use a rollback journal on this file */ u8 noReadlock; /* Do not bother to obtain readlocks */ u8 noSync; /* Do not sync the journal if true */ @@ -5152,7 +5152,7 @@ int sqlite3PagerCommitPhaseOne( ); if( !zMaster && isOpen(pPager->jfd) && pPager->journalOff==jrnlBufferSize(pPager) - && pPager->dbSize>=pPager->dbFileSize + && pPager->dbSize>=pPager->dbOrigSize && (0==(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty) ){ /* Update the db file change counter via the direct-write method. The @@ -5418,7 +5418,7 @@ int sqlite3PagerMemUsed(Pager *pPager){ + 5*sizeof(void*); return perPageSize*sqlite3PcachePagecount(pPager->pPCache) + sqlite3MallocSize(pPager) - + (pPager->pTmpSpace ? pPager->pageSize : 0); + + pPager->pageSize; } /* diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 41518edf0e..7764d2a86c 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -2180,7 +2180,13 @@ int sqlite3_set_authorizer( ** ^The callback function registered by sqlite3_profile() is invoked ** as each SQL statement finishes. ^The profile callback contains ** the original statement text and an estimate of wall-clock time -** of how long that statement took to run. +** of how long that statement took to run. ^The profile callback +** time is in units of nanoseconds, however the current implementation +** is only capable of millisecond resolution so the six least significant +** digits in the time are meaningless. Future versions of SQLite +** might provide greater resolution on the profiler callback. The +** sqlite3_profile() function is considered experimental and is +** subject to change in future versions of SQLite. */ void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*); SQLITE_EXPERIMENTAL void *sqlite3_profile(sqlite3*, diff --git a/src/vdbeapi.c b/src/vdbeapi.c index 2f5aaa36d1..afb4a1b6e6 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -398,7 +398,7 @@ static int sqlite3Step(Vdbe *p){ if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){ sqlite3_int64 iNow; sqlite3OsCurrentTimeInt64(db->pVfs, &iNow); - db->xProfile(db->pProfileArg, p->zSql, iNow - p->startTime); + db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000); } #endif diff --git a/test/dbstatus.test b/test/dbstatus.test index 634d3f5ffa..46291b1ce5 100644 --- a/test/dbstatus.test +++ b/test/dbstatus.test @@ -33,7 +33,7 @@ do_test dbstatus-1.1 { set sz2 [lindex [sqlite3_db_status db SQLITE_DBSTATUS_CACHE_USED 0] 1] set ::PAGESZ [expr {$sz2-$sz1}] set ::BASESZ [expr {$sz1-$::PAGESZ}] - expr {$::PAGESZ>1024 && $::PAGESZ<1200} + expr {$::PAGESZ>1024 && $::PAGESZ<1300} } {1} do_test dbstatus-1.2 { db eval { diff --git a/test/fkey2.test b/test/fkey2.test index c530e9f74d..07c47e4b49 100644 --- a/test/fkey2.test +++ b/test/fkey2.test @@ -1936,5 +1936,50 @@ do_test fkey2-dd08e5.1.6 { } } {1 {foreign key constraint failed}} +#------------------------------------------------------------------------- +# Verify that ticket ce7c133ea6cc9ccdc1a60d80441f80b6180f5eba +# fixed. +# +do_test fkey2-ce7c13.1.1 { + execsql { + CREATE TABLE tce71(a INTEGER PRIMARY KEY, b); + CREATE UNIQUE INDEX ice71 ON tce71(a,b); + INSERT INTO tce71 VALUES(100,200); + CREATE TABLE tce72(w, x, y, FOREIGN KEY(x,y) REFERENCES tce71(a,b)); + INSERT INTO tce72 VALUES(300,100,200); + UPDATE tce71 set b = 200 where a = 100; + SELECT * FROM tce71, tce72; + } +} {100 200 300 100 200} +do_test fkey2-ce7c13.1.2 { + catchsql { + UPDATE tce71 set b = 201 where a = 100; + } +} {1 {foreign key constraint failed}} +do_test fkey2-ce7c13.1.3 { + catchsql { + UPDATE tce71 set a = 101 where a = 100; + } +} {1 {foreign key constraint failed}} +do_test fkey2-ce7c13.1.4 { + execsql { + CREATE TABLE tce73(a INTEGER PRIMARY KEY, b, UNIQUE(a,b)); + INSERT INTO tce73 VALUES(100,200); + CREATE TABLE tce74(w, x, y, FOREIGN KEY(x,y) REFERENCES tce73(a,b)); + INSERT INTO tce74 VALUES(300,100,200); + UPDATE tce73 set b = 200 where a = 100; + SELECT * FROM tce73, tce74; + } +} {100 200 300 100 200} +do_test fkey2-ce7c13.1.5 { + catchsql { + UPDATE tce73 set b = 201 where a = 100; + } +} {1 {foreign key constraint failed}} +do_test fkey2-ce7c13.1.6 { + catchsql { + UPDATE tce73 set a = 101 where a = 100; + } +} {1 {foreign key constraint failed}} finish_test diff --git a/test/icu.test b/test/icu.test index 46596e4c9a..73cb9b913e 100644 --- a/test/icu.test +++ b/test/icu.test @@ -114,4 +114,23 @@ do_test icu-4.3 { } } {apricot cherry chokecherry yamot peach plum} +#------------------------------------------------------------------------- +# Test that it is not possible to call the ICU regex() function with +# anything other than exactly two arguments. See also: +# +# http://src.chromium.org/viewvc/chrome/trunk/src/third_party/sqlite/icu-regexp.patch?revision=34807&view=markup +# +do_catchsql_test icu-5.1 { SELECT regexp('a[abc]c.*', 'abc') } {0 1} +do_catchsql_test icu-5.2 { + SELECT regexp('a[abc]c.*') +} {1 {wrong number of arguments to function regexp()}} +do_catchsql_test icu-5.3 { + SELECT regexp('a[abc]c.*', 'abc', 'c') +} {1 {wrong number of arguments to function regexp()}} +do_catchsql_test icu-5.4 { + SELECT 'abc' REGEXP 'a[abc]c.*' +} {0 1} +do_catchsql_test icu-5.4 { SELECT 'abc' REGEXP } {1 {near " ": syntax error}} +do_catchsql_test icu-5.5 { SELECT 'abc' REGEXP, 1 } {1 {near ",": syntax error}} + finish_test