-C Fix\sa\sbug\sin\sfts4\sto\sdo\swith\smatchinfo\sand\sdeferred\stokens.
-D 2011-03-23T17:10:44
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+C Increase\sthe\supper\sbound\son\sSQLITE_MAX_ATTACHED\sfrom\s30\sto\s62.
+D 2011-03-23T18:22:34.232
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 27701a1653595a1f2187dc61c8117e00a6c1d50f
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F src/btree.c 43302cc4f3de6479b90fa6bb271b65d86333d00e
F src/btree.h e2f2cd9933bf30724f53ffa12c4c5a3a864bbd6e
F src/btreeInt.h 20f73dc93b1eeb83afd7259fbc6bd7dcf2df7fe4
-F src/build.c 3b86c8efc0cbe716d82c510463f448b9cdee0619
+F src/build.c 821d4b3c6b1da068a4eb1e9c8c414b75612d34c2
F src/callback.c 5069f224882cbdccd559f591271d28d7f37745bc
F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
F src/ctime.c 52ff72f966cee3087e0138a3ec69371c22be3c01
F src/legacy.c a199d7683d60cef73089e892409113e69c23a99f
F src/lempar.c 7f026423f4d71d989e719a743f98a1cbd4e6d99e
F src/loadext.c 8af9fcc75708d60b88636ccba38b4a7b3c155c3e
-F src/main.c 6d10370bfc2235b7d6cf78510b20c94c00123357
+F src/main.c 3679460ba5ee8f842e32def2117d5bd2260cdbf0
F src/malloc.c 92d59a007d7a42857d4e9454aa25b6b703286be1
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
F src/mem1.c 00bd8265c81abb665c48fea1e0c234eb3b922206
F src/shell.c 9dc0b4bb59290c0a35256d278cab0f314987ad6a
F src/sqlite.h.in 9d85096265a53db6c9d452eb478d5ced15308275
F src/sqlite3ext.h c90bd5507099f62043832d73f6425d8d5c5da754
-F src/sqliteInt.h 1de0edab31cc9e5c2f3540e08e8b97926f84bfeb
+F src/sqliteInt.h f8f1d00a22c98fd3f2fbc94da74eeb880879f89f
F src/sqliteLimit.h a17dcd3fb775d63b64a43a55c54cb282f9726f44
F src/status.c 4997380fbb915426fef9e500b4872e79c99267fc
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
F src/vacuum.c 924bd1bcee2dfb05376f79845bd3b4cec7b54b2f
F src/vdbe.c 8430780c643bf67d4b5da27f24d6ad39804fdaf4
F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2
-F src/vdbeInt.h 6e6f28e9bccc6c703dca1372fd661c57b5c15fb0
+F src/vdbeInt.h e1c6254641168507d25b46affb6dfb53c782f553
F src/vdbeapi.c a09ad9164cafc505250d5dd6b69660c960f1308c
-F src/vdbeaux.c 00439455c80ff7b37d7f2e5be5c0cf02de732a42
+F src/vdbeaux.c cfd3f3ac674691ba1166ceb9a2698b0d00b2ef91
F src/vdbeblob.c c3ccb7c8732858c680f442932e66ad06bb036562
F src/vdbemem.c 0498796b6ffbe45e32960d6a1f5adfb6e419883b
F src/vdbetrace.c 3ba13bc32bdf16d2bdea523245fd16736bed67b5
F test/async3.test 93edaa9122f498e56ea98c36c72abc407f4fb11e
F test/async4.test 1787e3952128aa10238bf39945126de7ca23685a
F test/async5.test f3592d79c84d6e83a5f50d3fd500445f7d97dfdf
-F test/attach.test f2b4ac6931f45695082b9f02be959c9c262e4f4d
+F test/attach.test 2bb09073d7d5499127db00f50780766dcea913e1
F test/attach2.test a295d2d7061adcee5884ef4a93c7c96a82765437
F test/attach3.test bd9830bc3a0d22ed1310c9bff6896927937017dc
F test/attachmalloc.test 1d5b821a676f7bf0b00d87cc106b78966789ba57
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 1ed5e361ca7bfa9226fec265704394e0f228f0c5
-R 2f8b1c68ec4ce4809965697dec333ba6
-U dan
-Z 998dcc0bc86840532e7dbf16c79e79d3
+P 30d42dc66f19ef5cc5b27d6273eadf56619a3ce8
+R 53e5c0654506b9d27fce0da478ef2182
+U drh
+Z af69b516e428dca392e47d50225e2cb4
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFNijptoxKgR168RlERAqbvAJ9dZZGQfzqQkUsnDColXnPTvyc73wCdHwqj
+BdLhxD0af4MbaUFMS6jVKTQ=
+=BE7n
+-----END PGP SIGNATURE-----
-30d42dc66f19ef5cc5b27d6273eadf56619a3ce8
\ No newline at end of file
+7aaf8772274422f5020fad9eea490e195170720f
\ No newline at end of file
** on each used database.
*/
if( pParse->cookieGoto>0 ){
- u32 mask;
+ tAttachMask mask;
int iDb;
sqlite3VdbeJumpHere(v, pParse->cookieGoto-1);
for(iDb=0, mask=1; iDb<db->nDb; mask<<=1, iDb++){
}
if( iDb>=0 ){
sqlite3 *db = pToplevel->db;
- int mask;
+ tAttachMask mask;
assert( iDb<db->nDb );
assert( db->aDb[iDb].pBt!=0 || iDb==1 );
assert( iDb<SQLITE_MAX_ATTACHED+2 );
- mask = 1<<iDb;
+ mask = ((tAttachMask)1)<<iDb;
if( (pToplevel->cookieMask & mask)==0 ){
pToplevel->cookieMask |= mask;
pToplevel->cookieValue[iDb] = db->aDb[iDb].pSchema->schema_cookie;
void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){
Parse *pToplevel = sqlite3ParseToplevel(pParse);
sqlite3CodeVerifySchema(pParse, iDb);
- pToplevel->writeMask |= 1<<iDb;
+ pToplevel->writeMask |= ((tAttachMask)1)<<iDb;
pToplevel->isMultiWrite |= setStatement;
}
#if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>1000
# error SQLITE_MAX_FUNCTION_ARG must be between 0 and 1000
#endif
-#if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>30
-# error SQLITE_MAX_ATTACHED must be between 0 and 30
+#if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>62
+# error SQLITE_MAX_ATTACHED must be between 0 and 62
#endif
#if SQLITE_MAX_LIKE_PATTERN_LENGTH<1
# error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1
TriggerPrg *pNext; /* Next entry in Parse.pTriggerPrg list */
};
+/* Datatype for the bitmask of all attached databases */
+#if SQLITE_MAX_ATTACHED>30
+ typedef sqlite3_uint64 tAttachMask;
+#else
+ typedef unsigned int tAttachMask;
+#endif
+
/*
** An SQL parser context. A copy of this structure is passed through
** the parser and down into all the parser action routine in order to
int iReg; /* Reg with value of this column. 0 means none. */
int lru; /* Least recently used entry has the smallest value */
} aColCache[SQLITE_N_COLCACHE]; /* One for each column cache entry */
- u32 writeMask; /* Start a write transaction on these databases */
- u32 cookieMask; /* Bitmask of schema verified databases */
+ tAttachMask writeMask; /* Start a write transaction on these databases */
+ tAttachMask cookieMask; /* Bitmask of schema verified databases */
u8 isMultiWrite; /* True if statement may affect/insert multiple rows */
u8 mayAbort; /* True if statement may throw an ABORT exception */
int cookieGoto; /* Address of OP_Goto to cookie verifier subroutine */
u8 readOnly; /* True for read-only statements */
u8 isPrepareV2; /* True if prepared with prepare_v2() */
int nChange; /* Number of db changes made since last reset */
- int btreeMask; /* Bitmask of db->aDb[] entries referenced */
+ tAttachMask btreeMask; /* Bitmask of db->aDb[] entries referenced */
int iStatement; /* Statement number (or 0 if has not opened stmt) */
int aCounter[3]; /* Counters used by sqlite3_stmt_status() */
BtreeMutexArray aMutex; /* An array of Btree used here and needing locks */
** in order (and released in reverse order) to avoid deadlocks.
*/
void sqlite3VdbeUsesBtree(Vdbe *p, int i){
- int mask;
- assert( i>=0 && i<p->db->nDb && i<sizeof(u32)*8 );
+ tAttachMask mask;
+ assert( i>=0 && i<p->db->nDb && i<sizeof(tAttachMask)*8 );
assert( i<(int)sizeof(p->btreeMask)*8 );
mask = ((u32)1)<<i;
if( (p->btreeMask & mask)==0 ){
ATTACH 'test.db' as db11;
}
} {0 {}}
-do_test attach-1.19 {
- catchsql {
- ATTACH 'test.db' as db12;
- }
-} {1 {too many attached databases - max 10}}
-do_test attach-1.19.1 {
- db errorcode
-} {1}
+if {$SQLITE_MAX_ATTACHED==10} {
+ do_test attach-1.19 {
+ catchsql {
+ ATTACH 'test.db' as db12;
+ }
+ } {1 {too many attached databases - max 10}}
+ do_test attach-1.19.1 {
+ db errorcode
+ } {1}
+}
do_test attach-1.20.1 {
execsql {
DETACH db5;
ATTACH 'test.db' as db12;
}
} {0 {}}
-do_test attach-1.22 {
- catchsql {
- ATTACH 'test.db' as db13;
- }
-} {1 {too many attached databases - max 10}}
-do_test attach-1.22.1 {
- db errorcode
-} {1}
+if {$SQLITE_MAX_ATTACHED==10} {
+ do_test attach-1.22 {
+ catchsql {
+ ATTACH 'test.db' as db13;
+ }
+ } {1 {too many attached databases - max 10}}
+ do_test attach-1.22.1 {
+ db errorcode
+ } {1}
+}
do_test attach-1.23 {
catchsql {
DETACH "db14";