From: dan Date: Mon, 15 Sep 2014 15:34:31 +0000 (+0000) Subject: Merge latest trunk changes with this branch. X-Git-Tag: version-3.8.11~252^2~103 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4a80e6742921478b369a9537302bc586c79d812;p=thirdparty%2Fsqlite.git Merge latest trunk changes with this branch. FossilOrigin-Name: 55b8011d5b455927f5b92a3cb911fd909fb0edab --- d4a80e6742921478b369a9537302bc586c79d812 diff --cc manifest index ad2d06197d,7e35806fec..84eb7631bb --- a/manifest +++ b/manifest @@@ -1,5 -1,5 +1,5 @@@ - C Have\ssqlite3ota.c\suse\sgrave\saccents\sinstead\sof\sdouble-quotes\sto\senclose\sidentifiers\sin\sgenerated\sSQL.\sTo\savoid\shaving\sthe\sSQL\sengine\ssubstitute\sa\sliteral\sstring\sif\sa\scolumn\sreference\scannot\sbe\sresolved. - D 2014-09-15T15:22:32.496 -C Remove\sthe\sEXPENSIVE_ASSERTS\sin\spcache.c\shaving\sto\sdo\swith\sthe\spSynced\sfield\nof\sthe\sPcache\sobject,\sas\sthey\sare\sincorrect,\sas\srevealed\sby\srecent\spcache\nenhancements. -D 2014-09-15T14:59:12.274 ++C Merge\slatest\strunk\schanges\swith\sthis\sbranch. ++D 2014-09-15T15:34:31.844 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@@ -153,7 -150,7 +156,7 @@@ F ext/userauth/userauth.c 5fa3bdb492f48 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60 - F main.mk ed2e37f6cd016ecc614165b3392bdbf89a129b4a -F main.mk bbc8b6000ed143a1a8d31d3b4995c359a3188fa1 ++F main.mk 8e4a294f77e23b2d19e2ac8f5a8761d260bfa4af F mkopcodec.awk c2ff431854d702cdd2d779c9c0d1f58fa16fa4ea F mkopcodeh.awk c6b3fa301db6ef7ac916b14c60868aeaec1337b5 F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83 @@@ -167,79 -164,79 +170,79 @@@ F spec.template 86a4a43b99ebb3e75e6b9a7 F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 3d8b83c91651f53472ca17599dae3457b8b89494 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a - F src/alter.c b00900877f766f116f9e16116f1ccacdc21d82f1 - F src/analyze.c f00f06e6ef66c61b41f154889fe7caf5ed55a0ce - F src/attach.c 3801129015ef59d76bf23c95ef9b0069d18a0c52 - F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34 + F src/alter.c ba266a779bc7ce10e52e59e7d3dc79fa342e8fdb + F src/analyze.c 79383a54fee3b7f1fb03dd4c8c8115583f506de5 + F src/attach.c f4e94df2d1826feda65eb0939f7f6f5f923a0ad9 + F src/auth.c d8abcde53426275dab6243b441256fcd8ccbebb2 F src/backup.c a31809c65623cc41849b94d368917f8bb66e6a7e F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb - F src/btmutex.c ec9d3f1295dafeb278c3830211cc5584132468f4 - F src/btree.c 9cb1989073502a9d2f18fbb0e7df8ad89dda2dcf + F src/btmutex.c 49ca66250c7dfa844a4d4cb8272b87420d27d3a5 -F src/btree.c e4916b441bb036897cc69df275a2df3fea4d53b6 ++F src/btree.c 3957262c61e865833021af435b6b6daf3a0829be F src/btree.h a79aa6a71e7f1055f01052b7f821bd1c2dce95c8 - F src/btreeInt.h cf180d86b2e9e418f638d65baa425c4c69c0e0e3 - F src/build.c c26b233dcdb1e2c8f468d49236c266f9f3de96d8 - F src/callback.c b97d0695ffcf6a8710ee445ffe56ee387d4d8a6f - F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac - F src/ctime.c 0231df905e2c4abba4483ee18ffc05adc321df2a - F src/date.c 593c744b2623971e45affd0bde347631bdfa4625 - F src/delete.c 3c2a375c0329247d01222170ae19ad8a52ecbf9a - F src/expr.c e1691ab0fe6be7247ef073b0038fb8ecd9944fad + F src/btreeInt.h e0ecb5dba292722039a7540beb3fc448103273cc + F src/build.c 047d7e1d2d89fa55134fa1d6b669c9c2983c0d11 + F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0 + F src/complete.c 535183afb3c75628b78ce82612931ac7cdf26f14 + F src/ctime.c 16cd19215d9fd849ee2b7509b092f2e0bbd6a958 + F src/date.c 57a7f9ba9f6b4d5268f5e411739066a611f99036 -F src/delete.c fae81cc2eb14b75267d4f47d3cfc9ae02aae726f ++F src/delete.c df9e2f273675ebf8d7f229e7668ba941bdc7021a + F src/expr.c 19392d98e089640c3336e65b4254cc337efef7d1 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb - F src/fkey.c 8d81a780ad78d16ec9082585758a8f1d6bf02ca3 - F src/func.c bbb724b74ed96ca42675a7274646a71dd52bcda7 - F src/global.c 1e4bd956dc2f608f87d2a929abc4a20db65f30e4 + F src/fkey.c da985ae673efef2c712caef825a5d2edb087ead7 + F src/func.c 5d498933f6168dff80941c873805fe04dc2b766d + F src/global.c 5110fa12e09729b84eee0191c984ec4008e21937 F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5 F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094 F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08 - F src/insert.c 62b0ceab1720dc74ed1fbcf953224132245704d8 -F src/insert.c 0b073fade178d9dbd990bbb32b4438e50b884a06 ++F src/insert.c 25e63641927530eee0487c5a8bbf6e5414c4c753 F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d - F src/legacy.c 87c92f4a08e2f70220e3b22a9c3b2482d36a134a - F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b - F src/loadext.c 31c2122b7dd05a179049bbf163fd4839f181cbab - F src/main.c c9802dc99c019fbba516202300d56be2c478fa93 - F src/malloc.c 954de5f998c23237e04474a3f2159bf483bba65a + F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e + F src/lempar.c 7274c97d24bb46631e504332ccd3bd1b37841770 + F src/loadext.c de741e66e5ddc1598d904d7289239696e40ed994 -F src/main.c d15621461fb0c52675eba2b650492ed1beef69ab ++F src/main.c 6b9fd1867a5575db2119f850302a883e7684009c + F src/malloc.c cc015821ba267ad5c91dc8761d0498a3fc3ce6ce F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 - F src/mem1.c c0c990fcaddff810ea277b4fb5d9138603dd5d4b + F src/mem1.c faf615aafd8be74a71494dfa027c113ea5c6615f F src/mem2.c dce31758da87ec2cfa52ba4c5df1aed6e07d8e8f F src/mem3.c 61c9d47b792908c532ca3a62b999cf21795c6534 - F src/mem5.c 74670012946c4adc8a6ad84d03acc80959c3e529 - F src/memjournal.c 0683aac6cab6ec2b5374c0db37c0deb2436a3785 + F src/mem5.c 61eeb90134f9a5be6c2e68d8daae7628b25953fb + F src/memjournal.c 3eb2c0b51adbd869cb6a44780323f05fa904dc85 F src/mutex.c 84a073c9a23a8d7bdd2ea832522d1730df18812c - F src/mutex.h 5bc526e19dccc412b7ff04642f6fdad3fdfdabea + F src/mutex.h 779d588e3b7756ec3ecf7d78cde1d84aba414f85 F src/mutex_noop.c f3f09fd7a2eb4287cfc799753ffc30380e7b71a1 F src/mutex_unix.c 1b10d5413dfc794364a8adf3eb3a192926b43fa3 F src/mutex_w32.c 06bfff9a3a83b53389a51a967643db3967032e1e F src/notify.c 9711a7575036f0d3040ba61bc6e217f13a9888e7 F src/os.c 1b147e4cf7cc39e618115c14a086aed44bc91ace - F src/os.h 60d419395e32a8029fa380a80a3da2e9030f635e + F src/os.h 3e57a24e2794a94d3cf2342c6d9a884888cd96bf F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa - F src/os_unix.c 8525ca79457c5b4673a5fda2774ee39fe155f40f - F src/os_win.c 2aa8aa7780d7cf03e912d2088ab2ec5c32f33dc5 + F src/os_unix.c addd023b26c623fec4dedc110fc4370a65b4768c + F src/os_win.c 0a4042ef35f322e86fa01f6c8884c5e645b911e7 F src/os_win.h 09e751b20bbc107ffbd46e13555dc73576d88e21 - F src/pager.c 9611de7c00ea3cfe35295d88ebda1a096b71b41d -F src/pager.c c6c809987f0c6a4e27634099d062d425527de173 -F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428 ++F src/pager.c b7c625fc92e86fea1971b8a630009eab3ff18997 +F src/pager.h 6a08df06b7edc3684375c0fab40602c695a044f2 F src/parse.y 22d6a074e5f5a7258947a1dc55a9bf946b765dd0 - F src/pcache.c 3b3791297e8977002e56b4a9b8916f2039abad9b + F src/pcache.c 4121a0571c18581ee9f82f086d5e2030051ebd6a F src/pcache.h 9b559127b83f84ff76d735c8262f04853be0c59a - F src/pcache1.c c5af6403a55178c9d1c09e4f77b0f9c88822762c - F src/pragma.c e1b8049c059ccab0afc2a483ff2e0dd599fcb124 - F src/prepare.c 314961aa6650cc860394cb2f31931cf2de93baa8 - F src/printf.c 00986c86ddfffefc2fd3c73667ff51b3b9709c74 + F src/pcache1.c dab8ab930d4a73b99768d881185994f34b80ecaa -F src/pragma.c 3f3e959390a10c0131676f0e307acce372777e0f -F src/prepare.c 6ef0cf2f9274982988ed6b7cab1be23147e94196 ++F src/pragma.c 5dba6b386cbfe0b094350b7d6c99fd410958f22d ++F src/prepare.c 905c3c601ccadd22bb70b63cd48392f7126c9807 + F src/printf.c e74925089a85e3c9f0e315595f41c139d3d118c2 F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece - F src/resolve.c 0ea356d32a5e884add23d1b9b4e8736681dd5697 - F src/rowset.c a9c9aae3234b44a6d7c6f5a3cadf90dce1e627be - F src/select.c 89e569b263535662f54b537eb9118b2c554ae7aa - F src/shell.c 713cef4d73c05fc8e12f4960072329d767a05d50 - F src/sqlite.h.in 578c42cb3899ee6ad93a0cccff4eb47e1e9a2c80 + F src/resolve.c a3466128b52a86c466e47ac1a19e2174f7b5cf89 + F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e + F src/select.c 0cd6706fd52ae5db229e9041094db6ec27195335 + F src/shell.c c00220cdd7f2027780bc25b78376c16dc24e4b7d -F src/sqlite.h.in 8b018219ce988913e5977d5de9ab4beb33be23b6 ++F src/sqlite.h.in 5bcaca9d5a8403fda0c8677de4c527907b317f1d F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad - F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc - F src/sqliteInt.h 7c090825333d91ca392c2479a9e835e7b6a5eb12 + F src/sqlite3ext.h 17d487c3c91b0b8c584a32fbeb393f6f795eea7d -F src/sqliteInt.h 0803e900eb1882f7dd88e86ddcddd2d1b27c8d86 ++F src/sqliteInt.h 3210f8bd040d1c6d8b1616325b15dd3ff749e48f F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158 - F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e - F src/tclsqlite.c 29357f2be7b0d00e8ea900eaf727e0c5ffeaa660 - F src/test1.c e9a0e5804b078532e69e69ec14c8326bf2cfc318 + F src/table.c 218ae2ba022881846741dfc8351aefdf129e0377 -F src/tclsqlite.c c67d310c833046cccc192125d64ad422ab882684 -F src/test1.c 523cd70ded28db71af9a30ec184cbe0957de9575 ++F src/tclsqlite.c ac7d1672f69c9d69defeb022f656d04f5cefd198 ++F src/test1.c 75655557ebc7138e1d745313635b6b100c90c151 F src/test2.c 98049e51a17dc62606a99a9eb95ee477f9996712 F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c F src/test4.c 9b32d22f5f150abe23c1830e2057c4037c45b3df @@@ -285,30 -282,30 +288,30 @@@ F src/test_vfs.c f84075a388527892ff1849 F src/test_vfstrace.c bab9594adc976cbe696ff3970728830b4c5ed698 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 22dded4283dc4b25422f6444cdcb8d6b1ea0b5ff - F src/tokenize.c ae45399d6252b4d736af43bee1576ce7bff86aec - F src/trigger.c 4bddd12803275aa98f1c7ce0118fceb02b2167f6 - F src/update.c ea336ce7b8b3fc5e316ba8f082e6445babf81059 + F src/tokenize.c 3df63041994f55afeb168b463ec836e8f1c50e7c + F src/trigger.c 25571661fdeae8c7f975ff40ffec205520a3f92f + F src/update.c 729f6f18fc27740591d085e1172cebe311144bf0 F src/utf.c 77abb5e6d27f3d236e50f7c8fff1d00e15262359 - F src/util.c 068dcd26354a3898ccc64ad5c4bdb95a7a15d33a - F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179 - F src/vdbe.c 90db7ad740b6d3f7ab446e6244dbc17ce495cca6 + F src/util.c 4006c01772bd8d8ac4306d523bbcee41d3e392d8 + F src/vacuum.c 59f03f92bcff57faa6a8ca256eb29ccddfb0614a + F src/vdbe.c 9a45dcbcc967fc0cb9248c75ba245d1d47de3e78 F src/vdbe.h c63fad052c9e7388d551e556e119c0bcf6bebdf8 - F src/vdbeInt.h cdc8e421f85beb1ac9b4669ec5beadab6faa15e0 - F src/vdbeapi.c 09677a53dd8c71bcd670b0bd073bb9aefa02b441 - F src/vdbeaux.c cef5d34a64ae3a65b56d96d3fd663246ec8e1c36 + F src/vdbeInt.h b4843c35c3ba533b69d4250f550b5bacf2fb013d + F src/vdbeapi.c 06b712d4772b318b69cd37a416deb1ff0426aa8c + F src/vdbeaux.c 91fd1e0c54a765838dc61fcf79f31acce035ce38 -F src/vdbeblob.c 848238dc73e93e48432991bb5651bf87d865eca4 +F src/vdbeblob.c a8e2c3baa3e7081347c4677185a631bfc43de043 - F src/vdbemem.c 921d5468a68ac06f369810992e84ca22cc730a62 - F src/vdbesort.c 7c45bfcd823f30d172bbbc1b9f51ef4402fbfe8d - F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767 + F src/vdbemem.c dc36ea9fe26c25550c50085f388167086ef7d73a -F src/vdbesort.c ab39574ec6e0c6213bd2a5c09cca9f9f8ba98450 ++F src/vdbesort.c 36ac09004c2ca57486ba3d1f4ac5d0d62257b136 + F src/vdbetrace.c 16d39c1ef7d1f4a3a7464bea3b7b4bdd7849c415 F src/vtab.c 019dbfd0406a7447c990e1f7bd1dfcdb8895697f - F src/wal.c 93b4fcb56a98f435a2cb66024bb2b12d66d1ff53 -F src/wal.c 10e7de7ce90865a68153f001a61f1d985cd17983 -F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4 ++F src/wal.c 6f5ff51117293e7b2c75ad21834f51115e59ea96 +F src/wal.h 237bc4484f7c289f094ecb6efb2b6c02005484e1 - F src/walker.c 11edb74d587bc87b33ca96a5173e3ec1b8389e45 - F src/where.c d9eae96b2cbbe4842eac3ee156ccd1b933d802c4 - F src/whereInt.h 923820bee9726033a501a08d2fc69b9c1ee4feb3 + F src/walker.c c253b95b4ee44b21c406e2a1052636c31ea27804 + F src/where.c 839b5e1db2507e221ad1c308f148a8519ed750be + F src/whereInt.h 124d970450955a6982e174b07c320ae6d62a595c F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 - F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6 + F test/aggnested.test b35b4cd69fc913f90d39a575e171e1116c3a4bb7 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87 F test/all.test 6ff7b43c2b4b905c74dc4a813d201d0fa64c5783 F test/alter.test 547dc2d292644301ac9a7dda22b319b74f9c08d2 @@@ -1199,7 -1197,7 +1203,7 @@@ F tool/vdbe_profile.tcl 67746953071a9f8 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f - P 473a72d7009a22ea514a98ee8869e7e7bca14cf5 - R 6e8944bfcc8da0bf6b98d50ae7beb161 -P 0bdf1a086b3946722f4d4b328e25917f61c14713 -R 6604c3404d8f943a6eb10e6ee4c1398f -U drh -Z 9f457bfb74de1e07b081e001cb58874a ++P 79f2418429aa05c56069c56d51b4d72f662a6970 69a64560777f85b47349b4b2aab01dc99298592e ++R 10cbf38158f2f089e176ffb2e809ade0 +U dan - Z 793743aae527be1bb170d7639993b8ad ++Z c612131a6abb7d1e449d4f88a8b72de0 diff --cc manifest.uuid index b4f504617c,0cb3407f29..69d84cda00 --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - 79f2418429aa05c56069c56d51b4d72f662a6970 -69a64560777f85b47349b4b2aab01dc99298592e ++55b8011d5b455927f5b92a3cb911fd909fb0edab diff --cc src/test1.c index d75f268deb,62b575989d..abeb15e8fc --- a/src/test1.c +++ b/src/test1.c @@@ -6497,70 -6497,132 +6497,196 @@@ static int sorter_test_sort4_helper } +/* +** tclcmd: sqlite3_transaction_save DB +*/ +static int testTransactionSave( + void * clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *CONST objv[] +){ + void *pState; + int nState; + sqlite3 *db; + int rc; + + if( objc!=2 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DB"); + return TCL_ERROR; + } + if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR; + + rc = sqlite3_transaction_save(db, &pState, &nState); + if( rc==SQLITE_OK ){ + Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(pState, nState)); + }else{ + Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3ErrName(rc), -1)); + return TCL_ERROR; + } + + sqlite3_free(pState); + return TCL_OK; +} + +/* +** tclcmd: sqlite3_transaction_restore DB BLOB +*/ +static int testTransactionRestore( + void * clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *CONST objv[] +){ + void *pState; + int nState; + sqlite3 *db; + int rc; + + if( objc!=3 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DB BLOB"); + return TCL_ERROR; + } + if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR; + pState = (void*)Tcl_GetByteArrayFromObj(objv[2], &nState); + + rc = sqlite3_transaction_restore(db, pState, nState); + if( rc==SQLITE_OK ){ + Tcl_ResetResult(interp); + }else{ + Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3ErrName(rc), -1)); + return TCL_ERROR; + } + + return TCL_OK; +} + + #ifdef SQLITE_USER_AUTHENTICATION + #include "sqlite3userauth.h" + /* + ** tclcmd: sqlite3_user_authenticate DB USERNAME PASSWORD + */ + static int test_user_authenticate( + ClientData clientData, /* Unused */ + Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ + int objc, /* Number of arguments */ + Tcl_Obj *CONST objv[] /* Command arguments */ + ){ + char *zUser = 0; + char *zPasswd = 0; + int nPasswd = 0; + sqlite3 *db; + int rc; + + if( objc!=4 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DB USERNAME PASSWORD"); + return TCL_ERROR; + } + if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ){ + return TCL_ERROR; + } + zUser = Tcl_GetString(objv[2]); + zPasswd = Tcl_GetStringFromObj(objv[3], &nPasswd); + rc = sqlite3_user_authenticate(db, zUser, zPasswd, nPasswd); + Tcl_SetResult(interp, (char *)t1ErrorName(rc), TCL_STATIC); + return TCL_OK; + } + #endif /* SQLITE_USER_AUTHENTICATION */ + + #ifdef SQLITE_USER_AUTHENTICATION + /* + ** tclcmd: sqlite3_user_add DB USERNAME PASSWORD ISADMIN + */ + static int test_user_add( + ClientData clientData, /* Unused */ + Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ + int objc, /* Number of arguments */ + Tcl_Obj *CONST objv[] /* Command arguments */ + ){ + char *zUser = 0; + char *zPasswd = 0; + int nPasswd = 0; + int isAdmin = 0; + sqlite3 *db; + int rc; + + if( objc!=5 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DB USERNAME PASSWORD ISADMIN"); + return TCL_ERROR; + } + if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ){ + return TCL_ERROR; + } + zUser = Tcl_GetString(objv[2]); + zPasswd = Tcl_GetStringFromObj(objv[3], &nPasswd); + Tcl_GetBooleanFromObj(interp, objv[4], &isAdmin); + rc = sqlite3_user_add(db, zUser, zPasswd, nPasswd, isAdmin); + Tcl_SetResult(interp, (char *)t1ErrorName(rc), TCL_STATIC); + return TCL_OK; + } + #endif /* SQLITE_USER_AUTHENTICATION */ + + #ifdef SQLITE_USER_AUTHENTICATION + /* + ** tclcmd: sqlite3_user_change DB USERNAME PASSWORD ISADMIN + */ + static int test_user_change( + ClientData clientData, /* Unused */ + Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ + int objc, /* Number of arguments */ + Tcl_Obj *CONST objv[] /* Command arguments */ + ){ + char *zUser = 0; + char *zPasswd = 0; + int nPasswd = 0; + int isAdmin = 0; + sqlite3 *db; + int rc; + + if( objc!=5 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DB USERNAME PASSWORD ISADMIN"); + return TCL_ERROR; + } + if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ){ + return TCL_ERROR; + } + zUser = Tcl_GetString(objv[2]); + zPasswd = Tcl_GetStringFromObj(objv[3], &nPasswd); + Tcl_GetBooleanFromObj(interp, objv[4], &isAdmin); + rc = sqlite3_user_change(db, zUser, zPasswd, nPasswd, isAdmin); + Tcl_SetResult(interp, (char *)t1ErrorName(rc), TCL_STATIC); + return TCL_OK; + } + #endif /* SQLITE_USER_AUTHENTICATION */ + + #ifdef SQLITE_USER_AUTHENTICATION + /* + ** tclcmd: sqlite3_user_delete DB USERNAME + */ + static int test_user_delete( + ClientData clientData, /* Unused */ + Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ + int objc, /* Number of arguments */ + Tcl_Obj *CONST objv[] /* Command arguments */ + ){ + char *zUser = 0; + sqlite3 *db; + int rc; + + if( objc!=3 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DB USERNAME"); + return TCL_ERROR; + } + if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ){ + return TCL_ERROR; + } + zUser = Tcl_GetString(objv[2]); + rc = sqlite3_user_delete(db, zUser); + Tcl_SetResult(interp, (char *)t1ErrorName(rc), TCL_STATIC); + return TCL_OK; + } + #endif /* SQLITE_USER_AUTHENTICATION */ + /* ** Register commands with the TCL interpreter. */ @@@ -6798,9 -6860,14 +6924,16 @@@ int Sqlitetest1_Init(Tcl_Interp *interp { "load_static_extension", tclLoadStaticExtensionCmd }, { "sorter_test_fakeheap", sorter_test_fakeheap }, { "sorter_test_sort4_helper", sorter_test_sort4_helper }, + { "sqlite3_transaction_save", testTransactionSave }, + { "sqlite3_transaction_restore", testTransactionRestore }, + #ifdef SQLITE_USER_AUTHENTICATION + { "sqlite3_user_authenticate", test_user_authenticate, 0 }, + { "sqlite3_user_add", test_user_add, 0 }, + { "sqlite3_user_change", test_user_change, 0 }, + { "sqlite3_user_delete", test_user_delete, 0 }, + #endif - }; ++ static int bitmask_size = sizeof(Bitmask)*8; int i; extern int sqlite3_sync_count, sqlite3_fullsync_count;