- C Merge\ssupport\sfor\slarge\sfiles\son\sAndroid\sfrom\strunk.
- D 2014-09-08T15:04:24.810
-C Correctly\shandle\san\sORDER\sBY\sclause\son\san\souter\squery\swhen\sapplying\nthe\scompound-subquery\sflattening\soptimization.\s\sTicket\s[89398880bcfff].\nAlso\sadd\sthe\sSQLITE_ENABLE_SELECTTRACE\soption\sfor\sadditional\sdebugging\nand\sanalysis\sinformation\sabout\sselect\sstatement\sprocessing.
-D 2014-09-21T22:31:52.593
++C Merge\sall\srecent\strunk\schanges\sinto\sthe\ssessions\sbranch.
++D 2014-09-21T22:49:20.257
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
-F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
+F Makefile.in dd5f245aa8c741bc65845747203c8ce2f3fb6c83
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
-F Makefile.msc e31dee24038965fb6269d6d61073fd6b7e331dec
+F Makefile.msc 35808af7f8d999176ed5b38fb482a87a129ee3e1
F Makefile.vxworks 034289efa9d591b04b1a73598623119c306cbba0
F README.md 64f270c43c38c46de749e419c22f0ae2f4499fe8
F VERSION 53a0b870e7f16d3b06623c31d233a304c163a6af
F ext/rtree/sqlite3rtree.h 83349d519fe5f518b3ea025d18dd1fe51b1684bd
F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de
F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
+F ext/session/changeset.c 4ccbaa4531944c24584bf6a61ba3a39c62b6267a
+F ext/session/session1.test 3733d71eb9a99b14d51fa5219d5b8a82407c3be8
+F ext/session/session2.test 99ca0da7ddb617d42bafd83adccf99f18ae0384b
+F ext/session/session3.test a7a9ce59b8d1e49e2cc23d81421ac485be0eea01
+F ext/session/session4.test a6ed685da7a5293c5d6f99855bcf41dbc352ca84
+F ext/session/session5.test 8fdfaf9dba28a2f1c6b89b06168bdab1fef2d478
+F ext/session/session6.test 443789bc2fca12e4f7075cf692c60b8a2bea1a26
+F ext/session/session8.test 7d35947ad329b8966f095d34f9617a9eff52dc65
+F ext/session/session9.test 776e46785c29c11cda01f5205d0f1e8f8f9a46bf
+F ext/session/sessionA.test eb05c13e4ef1ca8046a3a6dbf2d5f6f5b04a11d4
+F ext/session/sessionB.test 276267cd7fc37c2e2dd03f1e2ed9ada336a8bdb4
+F ext/session/session_common.tcl 1539d8973b2aea0025c133eb0cc4c89fcef541a5
+F ext/session/sessionfault.test e7965159a73d385c1a4af12d82c3a039ebdd71a6
+F ext/session/sqlite3session.c 4c7689bd8286147f7d9bf5d4b6ca5e7e7ee588ab
+F ext/session/sqlite3session.h 66c14a2f6193c47773770307636e88c43db6f839
+F ext/session/test_session.c a252fb669d3a1b3552ee7b87fe610debc0afeb7b
+ F ext/userauth/sqlite3userauth.h 19cb6f0e31316d0ee4afdfb7a85ef9da3333a220
+ F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
+ F ext/userauth/userauth.c 5fa3bdb492f481bbc1709fc83c91ebd13460c69e
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
- F main.mk 4dfbd8fbc91ee5732554b31a205960241c4fc059
-F main.mk bbc8b6000ed143a1a8d31d3b4995c359a3188fa1
++F main.mk 7711bc77822814799b853271ee19ac79e98bfb4b
F mkopcodec.awk c2ff431854d702cdd2d779c9c0d1f58fa16fa4ea
F mkopcodeh.awk c6b3fa301db6ef7ac916b14c60868aeaec1337b5
F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
F src/backup.c a31809c65623cc41849b94d368917f8bb66e6a7e
F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
F src/btmutex.c 49ca66250c7dfa844a4d4cb8272b87420d27d3a5
- F src/btree.c b1c1cd1cc3ae2e433a23b9a6c9ab53805707d8cd
+ F src/btree.c 6aa61c0e3d20d1d1acc8fb33d8f0ebd675305d3c
F src/btree.h a79aa6a71e7f1055f01052b7f821bd1c2dce95c8
F src/btreeInt.h e0ecb5dba292722039a7540beb3fc448103273cc
- F src/build.c 8cb237719c185eec7bd8449b2e747491ded11932
+ F src/build.c 8dbca25988045fbf2a33c9631c42706fa6449e60
F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0
F src/complete.c 535183afb3c75628b78ce82612931ac7cdf26f14
- F src/ctime.c 0231df905e2c4abba4483ee18ffc05adc321df2a
+ F src/ctime.c 16cd19215d9fd849ee2b7509b092f2e0bbd6a958
F src/date.c 57a7f9ba9f6b4d5268f5e411739066a611f99036
-F src/delete.c fae81cc2eb14b75267d4f47d3cfc9ae02aae726f
+F src/delete.c de3d07d6602b90ae6e8bdebeb7b3265bb846377f
- F src/expr.c 441a7e24e2f7bea9475778fa8acce9e8a69ca8f0
+ F src/expr.c 4f101c8ddc6d5a22303c88278069f5261562a9a8
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
F src/fkey.c da985ae673efef2c712caef825a5d2edb087ead7
- F src/func.c 0517037766e18eff7dce298e6b3a8e6311df75ec
+ F src/func.c 1629ccdd8ef3f19d7accc9d9287190489469ff81
F src/global.c 5110fa12e09729b84eee0191c984ec4008e21937
F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
- F src/insert.c 92e955206fadb4d1184161d00894b32c90879e86
-F src/insert.c 5b9243a33726008cc4132897d2be371db12a13be
++F src/insert.c 4f6df86bbed2d7b59e4601730407876825dd7b71
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
- F src/legacy.c 87c92f4a08e2f70220e3b22a9c3b2482d36a134a
- F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b
- F src/loadext.c 31c2122b7dd05a179049bbf163fd4839f181cbab
- F src/main.c faf3629e61ba31912b474316c02f173878ddd566
- 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 1010acfb69ccd62e34e3b83664537450225c74e2
+ F src/malloc.c 5bb99ee1e08ad58e457063cf79ce521db0e24195
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
F src/mem1.c faf615aafd8be74a71494dfa027c113ea5c6615f
F src/mem2.c dce31758da87ec2cfa52ba4c5df1aed6e07d8e8f
F src/os.h 3e57a24e2794a94d3cf2342c6d9a884888cd96bf
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
- F src/os_unix.c addd023b26c623fec4dedc110fc4370a65b4768c
+ F src/os_unix.c 9096a1b1449182e67e759f59994eee04113bc587
F src/os_win.c 0a4042ef35f322e86fa01f6c8884c5e645b911e7
F src/os_win.h 09e751b20bbc107ffbd46e13555dc73576d88e21
- F src/pager.c 31da9594ad4c3b5851bb6fe1a95c33835ab7ddce
+ F src/pager.c caab007743821d96752597c9cfd7351654697b06
F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
- F src/parse.y 22d6a074e5f5a7258947a1dc55a9bf946b765dd0
- F src/pcache.c 2048affdb09a04478b5fc6e64cb1083078d369be
+ F src/parse.y b98772da2bb5415970085b707203f92569400aa8
+ F src/pcache.c 4121a0571c18581ee9f82f086d5e2030051ebd6a
F src/pcache.h 9b559127b83f84ff76d735c8262f04853be0c59a
F src/pcache1.c dab8ab930d4a73b99768d881185994f34b80ecaa
- F src/pragma.c 14bcdb504128a476cce5bbc086d5226c5e46c225
- F src/prepare.c 3842c1dfc0b053458e3adcf9f6efc48e03e3fe3d
- F src/printf.c e74925089a85e3c9f0e315595f41c139d3d118c2
+ F src/pragma.c 3f3e959390a10c0131676f0e307acce372777e0f
+ F src/prepare.c 6ef0cf2f9274982988ed6b7cab1be23147e94196
+ F src/printf.c 3a47f526b173813d9a7f4e7044007771ba68cde1
F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece
- F src/resolve.c 0d1621e45fffe4b4396477cf46e41a84b0145ffb
+ F src/resolve.c a3466128b52a86c466e47ac1a19e2174f7b5cf89
F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
- F src/select.c b4457526cee73c0b69fad42f799f619b1d5a8a8a
- F src/shell.c ec6d5f630ed617dc80cbc35d9e45fe47f07923db
- F src/sqlite.h.in 70de5c9e5ac117363db78d144c7e6f1f65d007a1
+ F src/select.c a83ed8bc2a31c131e3addb6f0488b68334085e7b
-F src/shell.c dad23987c34faddb061a339da3e92e05ccc6935e
-F src/sqlite.h.in 8b018219ce988913e5977d5de9ab4beb33be23b6
++F src/shell.c 85aae71dcc9bd6df28047b95ab631eb0ac91401f
++F src/sqlite.h.in 1af072be5ed8902c8c12b5b105487d0efedd00b4
F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
- F src/sqlite3ext.h 1f40357fb9b12a80c5a3b2b109fd249b009213d4
- F src/sqliteInt.h 4d6c5c87324c2b6218c01a0895c0d298fffb5aff
+ F src/sqlite3ext.h 17d487c3c91b0b8c584a32fbeb393f6f795eea7d
-F src/sqliteInt.h 5ecde2191721a94cdce0d5248e26a373e0b17a70
++F src/sqliteInt.h 35f074ded974804602e3ed89576a74c9b7255c93
F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158
- F src/table.c 4e28a53e66bad8d014a510ef0205f5497c712b08
- F src/tclsqlite.c 9d0073dda76ab2508c8fde50950f4556fe2fdafb
- F src/test1.c 22bfe1ce9f2f3746d682093a475ec0a33e0e55d8
+ F src/table.c 2e99ef7ef16187e17033d9398dc962ce22dab5cb
-F src/tclsqlite.c c67d310c833046cccc192125d64ad422ab882684
++F src/tclsqlite.c 684c317b85f4729de12909bfad80d3f5500357cf
+ F src/test1.c 523cd70ded28db71af9a30ec184cbe0957de9575
F src/test2.c 98049e51a17dc62606a99a9eb95ee477f9996712
F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c
F src/test4.c 9b32d22f5f150abe23c1830e2057c4037c45b3df
F src/test_autoext.c dea8a01a7153b9adc97bd26161e4226329546e12
F src/test_backup.c 3875e899222b651e18b662f86e0e50daa946344e
F src/test_btree.c 2e9978eca99a9a4bfa8cae949efb00886860a64f
- F src/test_config.c a65043d01ad3bd2dfe9a3aa7e39a9935b069f6aa
-F src/test_config.c 6f721f0337b96d58e81ff69bba101113c8168c2b
++F src/test_config.c 5a2a9a580f9c2dfd2ffd52966fd361f2148909d1
F src/test_demovfs.c 69b2085076654ebc18014cbc6386f04409c959a9
F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
F src/test_fs.c ced436e3d4b8e4681328409b8081051ce614e28f
F src/test_vfstrace.c bab9594adc976cbe696ff3970728830b4c5ed698
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
F src/threads.c 22dded4283dc4b25422f6444cdcb8d6b1ea0b5ff
- F src/tokenize.c 722872c816887fd66931333c59570ebd9622a95f
+ F src/tokenize.c 3df63041994f55afeb168b463ec836e8f1c50e7c
F src/trigger.c 25571661fdeae8c7f975ff40ffec205520a3f92f
-F src/update.c 729f6f18fc27740591d085e1172cebe311144bf0
+F src/update.c b9e5295d3a78e96b7c2978c4f9d224d06880f031
- F src/utf.c 77abb5e6d27f3d236e50f7c8fff1d00e15262359
+ F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
F src/util.c 4006c01772bd8d8ac4306d523bbcee41d3e392d8
F src/vacuum.c 59f03f92bcff57faa6a8ca256eb29ccddfb0614a
- F src/vdbe.c 16b7d573a683e70a1e502332c5f90dd48fa34736
- F src/vdbe.h ca3b6df299adce6e2f499c57e42ae54f142ae823
- F src/vdbeInt.h 0dec00acd7e490a456a0ebaa6f478de94da7b52d
- F src/vdbeapi.c d63985095b5d24b522fc206c547df1683a4e73ee
- F src/vdbeaux.c 264284931ecd079076ab40a71522570107b8e723
-F src/vdbe.c de1af1795bebdad20c23e82bafa2f531e9893198
-F src/vdbe.h 09f5b4e3719fa454f252322b1cdab5cf1f361327
-F src/vdbeInt.h f177bed1ec8d4eb5c7089f012aeb95f374745735
-F src/vdbeapi.c e9e33b59834e3edc8790209765e069874c269d9d
-F src/vdbeaux.c a05adc3c96abdaf3db14768ddd63132fc9678060
-F src/vdbeblob.c 848238dc73e93e48432991bb5651bf87d865eca4
-F src/vdbemem.c 1e105dacf5190fc85a8ec2107c0dcc1884e75099
++F src/vdbe.c 5e6d4ef36cfff2bacb4d11eccc99bd55c76692f5
++F src/vdbe.h d61daeffed696e21630759de9e135ee298ad9573
++F src/vdbeInt.h 0e6e8d18199cef7dd5e9fa5de8490f60806259f0
++F src/vdbeapi.c cdded67e36d2a20f6d1c7d56f008a646557d2bf0
++F src/vdbeaux.c 07b0045d0f34d0ad70c1c42ff75246a7e64e4e87
+F src/vdbeblob.c d65b01f439df63911ac3d7a9a85c15503965f2c3
- F src/vdbemem.c dc36ea9fe26c25550c50085f388167086ef7d73a
- F src/vdbesort.c ab39574ec6e0c6213bd2a5c09cca9f9f8ba98450
- F src/vdbetrace.c 16d39c1ef7d1f4a3a7464bea3b7b4bdd7849c415
++F src/vdbemem.c 5096fe50a1bd12bc2294a8b27ca6e6d1b15ef607
+ F src/vdbesort.c 5c1bacf90578d22b630fbf6ed98ccf60d83435ef
+ F src/vdbetrace.c 4f29b04edb0cec3d5fcd9b566d9f0e75c8984362
F src/vtab.c 019dbfd0406a7447c990e1f7bd1dfcdb8895697f
F src/wal.c 10e7de7ce90865a68153f001a61f1d985cd17983
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
- P d4cce2c71e64ab7b6a65a81b88b69445ed859351 ad7063aa1a0db32cdbe71815545b2edca57d3bcc
- R 4a5cc1720b7ac28a8c5dae667ce4d5c3
-P 59e2c9df02d7e988c5ad44c560ead1e5288b12e7 9683e001ed38b41979220eef0bdfcb54df5f3191
-R df45958fe8f93552efb788581c98f0f7
-T +closed 9683e001ed38b41979220eef0bdfcb54df5f3191
++P c2885c6bb24cc55178467e57e77bf71df58b3b13 d5880abd63c83c88e135257373afa0a3fd88297e
++R 9d7f30c83131a55806d3c1dd053387df
U drh
- Z 6dac05eb8bc8db62f0a6dc6a2d623660
-Z d861c46be738b6f104b52fa4441ce204
++Z c53e54ee2e290caf615c330d235d140a
}
}else
-
+ #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_SELECTTRACE)
+ if( c=='s' && n==11 && strncmp(azArg[0], "selecttrace", n)==0 ){
+ extern int sqlite3SelectTrace;
+ sqlite3SelectTrace = nArg>=2 ? booleanValue(azArg[1]) : 0xff;
+ }else
+ #endif
+
+#if defined(SQLITE_ENABLE_SESSION)
+ if( c=='s' && strncmp(azArg[0],"session",n)==0 && n>=3 ){
+ OpenSession *pSession = &p->aSession[0];
+ char **azCmd = &azArg[1];
+ int iSes = 0;
+ int nCmd = nArg - 1;
+ int i;
+ if( nArg<=1 ) goto session_syntax_error;
+ open_db(p, 0);
+ if( nArg>=3 ){
+ for(iSes=0; iSes<p->nSession; iSes++){
+ if( strcmp(p->aSession[iSes].zName, azArg[1])==0 ) break;
+ }
+ if( iSes<p->nSession ){
+ pSession = &p->aSession[iSes];
+ azCmd++;
+ nCmd--;
+ }else{
+ pSession = &p->aSession[0];
+ iSes = 0;
+ }
+ }
+
+ /* .session attach TABLE
+ ** Invoke the sqlite3session_attach() interface to attach a particular
+ ** table so that it is never filtered.
+ */
+ if( strcmp(azCmd[0],"attach")==0 ){
+ if( nCmd!=2 ) goto session_syntax_error;
+ if( pSession->p==0 ){
+ session_not_open:
+ fprintf(stderr, "ERROR: No sessions are open\n");
+ }else{
+ rc = sqlite3session_attach(pSession->p, azCmd[1]);
+ if( rc ){
+ fprintf(stderr, "ERROR: sqlite3session_attach() returns %d\n", rc);
+ rc = 0;
+ }
+ }
+ }else
+
+ /* .session changeset FILE
+ ** .session patchset FILE
+ ** Write a changeset or patchset into a file. The file is overwritten.
+ */
+ if( strcmp(azCmd[0],"changeset")==0 || strcmp(azCmd[0],"patchset")==0 ){
+ FILE *out = 0;
+ if( nCmd!=2 ) goto session_syntax_error;
+ if( pSession->p==0 ) goto session_not_open;
+ out = fopen(azCmd[1], "wb");
+ if( out==0 ){
+ fprintf(stderr, "ERROR: cannot open \"%s\" for writing\n", azCmd[1]);
+ }else{
+ int szChng;
+ void *pChng;
+ if( azCmd[0][0]=='c' ){
+ rc = sqlite3session_changeset(pSession->p, &szChng, &pChng);
+ }else{
+ rc = sqlite3session_patchset(pSession->p, &szChng, &pChng);
+ }
+ if( rc ){
+ printf("Error: error code %d\n", rc);
+ rc = 0;
+ }
+ if( pChng
+ && fwrite(pChng, szChng, 1, out)!=1 ){
+ fprintf(stderr, "ERROR: Failed to write entire %d-byte output\n",
+ szChng);
+ }
+ sqlite3_free(pChng);
+ fclose(out);
+ }
+ }else
+
+ /* .session close
+ ** Close the identified session
+ */
+ if( strcmp(azCmd[0], "close")==0 ){
+ if( nCmd!=1 ) goto session_syntax_error;
+ if( p->nSession ){
+ session_close(pSession);
+ p->aSession[iSes] = p->aSession[--p->nSession];
+ }
+ }else
+
+ /* .session enable ?BOOLEAN?
+ ** Query or set the enable flag
+ */
+ if( strcmp(azCmd[0], "enable")==0 ){
+ int ii;
+ if( nCmd>2 ) goto session_syntax_error;
+ ii = nCmd==1 ? -1 : booleanValue(azCmd[1]);
+ if( p->nSession ){
+ ii = sqlite3session_enable(pSession->p, ii);
+ fprintf(p->out, "session %s enable flag = %d\n", pSession->zName, ii);
+ }
+ }else
+
+ /* .session filter GLOB ....
+ ** Set a list of GLOB patterns of table names to be excluded.
+ */
+ if( strcmp(azCmd[0], "filter")==0 ){
+ int ii, nByte;
+ if( nCmd<2 ) goto session_syntax_error;
+ if( p->nSession ){
+ for(ii=0; ii<pSession->nFilter; ii++){
+ sqlite3_free(pSession->azFilter[ii]);
+ }
+ sqlite3_free(pSession->azFilter);
+ nByte = sizeof(pSession->azFilter[0])*(nCmd-1);
+ pSession->azFilter = sqlite3_malloc( nByte );
+ if( pSession->azFilter==0 ){
+ fprintf(stderr, "Error: out or memory\n");
+ exit(1);
+ }
+ for(ii=1; ii<nCmd; ii++){
+ pSession->azFilter[ii-1] = sqlite3_mprintf("%s", azCmd[ii]);
+ }
+ pSession->nFilter = ii-1;
+ }
+ }else
+
+ /* .session indirect ?BOOLEAN?
+ ** Query or set the indirect flag
+ */
+ if( strcmp(azCmd[0], "indirect")==0 ){
+ int ii;
+ if( nCmd>2 ) goto session_syntax_error;
+ ii = nCmd==1 ? -1 : booleanValue(azCmd[1]);
+ if( p->nSession ){
+ ii = sqlite3session_indirect(pSession->p, ii);
+ fprintf(p->out, "session %s indirect flag = %d\n", pSession->zName,ii);
+ }
+ }else
+
+ /* .session isempty
+ ** Determine if the session is empty
+ */
+ if( strcmp(azCmd[0], "isempty")==0 ){
+ int ii;
+ if( nCmd!=1 ) goto session_syntax_error;
+ if( p->nSession ){
+ ii = sqlite3session_isempty(pSession->p);
+ fprintf(p->out, "session %s isempty flag = %d\n", pSession->zName, ii);
+ }
+ }else
+
+ /* .session list
+ ** List all currently open sessions
+ */
+ if( strcmp(azCmd[0],"list")==0 ){
+ for(i=0; i<p->nSession; i++){
+ fprintf(p->out, "%d %s\n", i, p->aSession[i].zName);
+ }
+ }else
+
+ /* .session open DB NAME
+ ** Open a new session called NAME on the attached database DB.
+ ** DB is normally "main".
+ */
+ if( strcmp(azCmd[0],"open")==0 ){
+ char *zName;
+ if( nCmd!=3 ) goto session_syntax_error;
+ zName = azCmd[2];
+ if( zName[0]==0 ) goto session_syntax_error;
+ for(i=0; i<p->nSession; i++){
+ if( strcmp(p->aSession[i].zName,zName)==0 ){
+ fprintf(stderr, "Session \"%s\" already exists\n", zName);
+ goto meta_command_exit;
+ }
+ }
+ if( p->nSession>=ArraySize(p->aSession) ){
+ fprintf(stderr, "Maximum of %d sessions\n", ArraySize(p->aSession));
+ goto meta_command_exit;
+ }
+ pSession = &p->aSession[p->nSession];
+ rc = sqlite3session_create(p->db, azCmd[1], &pSession->p);
+ if( rc ){
+ fprintf(stderr, "Cannot open session: error code=%d\n", rc);
+ rc = 0;
+ goto meta_command_exit;
+ }
+ pSession->nFilter = 0;
+ sqlite3session_table_filter(pSession->p, session_filter, pSession);
+ p->nSession++;
+ pSession->zName = sqlite3_mprintf("%s", zName);
+ }else
+ /* If no command name matches, show a syntax error */
+ session_syntax_error:
+ session_help(p);
+ }else
+#endif
#ifdef SQLITE_DEBUG
/* Undocumented commands for internal testing. Subject to change