blob: 69f0b8da138d0295393058b3a4946eadec62add6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
--- src/btree.h
+++ src/btree.h
@@ -121,6 +121,14 @@
int sqlite3BtreeNewDb(Btree *p);
/*
+ * BEGIN Berkeley DB specific function forward declarations.
+ */
+int sqlite3BtreeHandleCacheFixup(Btree *, int);
+/*
+ * END Berkeley DB specific function forward declarations.
+ */
+
+/*
** The second parameter to sqlite3BtreeGetMeta or sqlite3BtreeUpdateMeta
** should be one of the following values. The integer values are assigned
** to constants so that the offset of the corresponding field in an
--- src/vdbe.c
+++ src/vdbe.c
@@ -3122,12 +3122,14 @@
case OP_VerifyCookie: {
int iMeta;
int iGen;
+ int iSchemaUpdated;
Btree *pBt;
assert( pOp->p1>=0 && pOp->p1<db->nDb );
assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
assert( p->bIsReader );
+ iSchemaUpdated = 0;
pBt = db->aDb[pOp->p1].pBt;
if( pBt ){
sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&iMeta);
@@ -3156,12 +3158,14 @@
** a v-table method.
*/
if( db->aDb[pOp->p1].pSchema->schema_cookie!=iMeta ){
+ iSchemaUpdated = 1;
sqlite3ResetOneSchema(db, pOp->p1);
}
p->expired = 1;
rc = SQLITE_SCHEMA;
}
+ sqlite3BtreeHandleCacheFixup(pBt, iSchemaUpdated);
break;
}
|