-C Cherrypick\s[ec37ad6d08]\sinto\sthis\sbranch.\sWith\sthis\spatch,\sif\nSQLITE_SHARED_MAPPING\sis\sdefined\sat\sbuild-time\sSQLite\swill\suse\sa\ssingle\smemory\nmapping\sfor\smultiple\sconnections\sto\sthe\ssame\sdatabase\sfile\swithin\sa\ssingle\nprocess.
-D 2017-09-22T11:09:09.656
+C Allow\s"BEGIN\sCONCURRENT"\stransactions\sto\smodify\sthe\stemp\sschema.
+D 2017-11-06T10:04:45.041
F Makefile.in 4bc36d913c2e3e2d326d588d72f618ac9788b2fd4b7efda61102611a6495c3ff
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 6033b51b6aea702ea059f6ab2d47b1d3cef648695f787247dd4fb395fe60673f
F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5
F src/util.c 5168013cfd937a695d23cce8c67cb07a3dda242d4cb812530ba1148b88e0f159
F src/vacuum.c 07eec96f821c7dcbdca2fadffc6e38ea2c24bf409fcb15fe9fb3ac444d632dfe
-F src/vdbe.c 96467c73f53c3cb2b3ad7a73c69d59fb43966d772a7fc70114dde14cf3876dd0
+F src/vdbe.c 8b7313c7012c627a0f6579b0c1d3a42f48ffd187e4beb6a0face21092d728ac0
F src/vdbe.h d50cadf12bcf9fb99117ef392ce1ea283aa429270481426b6e8b0280c101fd97
F src/vdbeInt.h 1fe00770144c12c4913128f35262d11527ef3284561baaab59b947a41c08d0d9
F src/vdbeapi.c 9c670ca0dcc1cd86373aa353b747b26fe531ca5cd4331690c611d1f03842e2a1
F test/colmeta.test 2c765ea61ee37bc43bbe6d6047f89004e6508eb1
F test/colname.test c47639d26cbeba6977457e5ef2c2c55c5b6c889478dd7eb0ed858ba894e7fa93
F test/concfault.test 500f17c3fcfe7705114422bcc6ddd3c740001a43
-F test/concurrent.test a801cd60c370f0ed851657c9576b102f9ab1dd846c6a88e6ae45939a8deeda7c
+F test/concurrent.test 86661967a680670127a62a819e60dc93c2d3d49043ac95b26dfa70d3e60dbde5
F test/concurrent2.test 9dfbeb0a323733fe1d13443371734bb94a674dbf777f464365475903873111f8
F test/concurrent3.test f4af1cf1220908c6dd5694923621c19e999b78cd997e2646285f08a52bcb4170
F test/concurrent4.test e0b12cd467137e50259df3b4f837507e82aaa07c35941c88664dc8ed1d089c44
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 307b802e8627c93a51e4c54851a4fab33db5061bb80e3d327ce53b127d6d511b
-Q +ec37ad6d08362f4c9faad9b629c0fa23f5864ff6ad7f4cbed93a25d5f7b815d8
-R a7069c27bdffb405c8574ad991612563
+P c7a5880d6d898299b4c9414b7702cfa450aa5f7bf4ec8f417b94d2a7b6558264
+R 202ef8632fda2b1b9ef7af4f1e374f95
U dan
-Z 9a1235c2d010c6dd3774c97b07deb6f2
+Z d758dc3efdc3027768a35f11fc7171bf
-c7a5880d6d898299b4c9414b7702cfa450aa5f7bf4ec8f417b94d2a7b6558264
\ No newline at end of file
+0fb6d91cea347384fc081ce4c79582b365801dd4f56f5bf2ed40922bbfca0344
\ No newline at end of file
rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, pOp->p3);
if( pOp->p2==BTREE_SCHEMA_VERSION ){
/* When the schema cookie changes, record the new cookie internally */
- assert( db->bConcurrent==0 );
+ assert( pOp->p1==1 || db->bConcurrent==0 );
pDb->pSchema->schema_cookie = pOp->p3;
db->mDbFlags |= DBFLAG_SchemaChange;
}else if( pOp->p2==BTREE_FILE_FORMAT ){
case OP_TableLock: {
u8 isWriteLock = (u8)pOp->p3;
#ifndef SQLITE_OMIT_CONCURRENT
- if( isWriteLock && db->bConcurrent && pOp->p2==1 ){
+ if( isWriteLock && db->bConcurrent && pOp->p2==1 && pOp->p1!=1 ){
rc = SQLITE_ERROR;
sqlite3VdbeError(p,
"cannot modify database schema within CONCURRENT transaction");
2 { DROP TABLE t1 }
3 { CREATE INDEX i1 ON t1(a) }
4 { CREATE VIEW v1 AS SELECT * FROM t1 }
- 5 { CREATE TEMP TABLE xx(a, b) }
} {
- do_catchsql_test 1.7.$tn.1 "
+ do_catchsql_test 1.7.0.$tn.1 "
BEGIN CONCURRENT;
$sql
" {1 {cannot modify database schema within CONCURRENT transaction}}
- do_execsql_test 1.7.$tn.2 {
+ do_execsql_test 1.7.0.$tn.2 {
SELECT sql FROM sqlite_master;
SELECT sql FROM sqlite_temp_master;
} {{CREATE TABLE t1(a, b)}}
- do_execsql_test 1.7.$tn.3 COMMIT
+ do_execsql_test 1.7.0.$tn.3 COMMIT
+}
+
+# Except the temp db schema.
+foreach {tn sql} {
+ 1 { CREATE TEMP TABLE xx(a, b) }
+ 2 { DROP TABLE xx }
+ 3 { CREATE TEMP TABLE yy(a, b) }
+ 4 { CREATE VIEW temp.v1 AS SELECT * FROM t1 }
+ 5 { CREATE INDEX yyi1 ON yy(a); }
+ 6 { CREATE TABLE temp.zz(a, b) }
+} {
+ do_catchsql_test 1.7.1.$tn.1 "
+ BEGIN CONCURRENT;
+ $sql
+ " {0 {}}
+
+ do_execsql_test 1.7.1.$tn.2 COMMIT
+}
+
+
+do_execsql_test 1.7.1.x {
+ SELECT sql FROM sqlite_master;
+ SELECT sql FROM sqlite_temp_master;
+} {
+ {CREATE TABLE t1(a, b)}
+ {CREATE TABLE yy(a, b)}
+ {CREATE VIEW v1 AS SELECT * FROM t1}
+ {CREATE INDEX yyi1 ON yy(a)}
+ {CREATE TABLE zz(a, b)}
}
#-------------------------------------------------------------------------