File: 30_handle_cache.patch

package info (click to toggle)
db5.3 5.3.28%2Bdfsg2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 158,500 kB
  • sloc: ansic: 448,411; java: 111,824; tcl: 80,544; sh: 44,264; cs: 33,697; cpp: 21,604; perl: 14,557; xml: 10,799; makefile: 4,077; javascript: 1,998; yacc: 1,003; awk: 965; sql: 801; erlang: 342; python: 216; php: 24; asm: 14
file content (48 lines) | stat: -rw-r--r-- 1,231 bytes parent folder | download | duplicates (7)
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
--- src/btree.h
+++ src/btree.h
@@ -94,6 +94,14 @@ int sqlite3BtreeCopyFile(Btree *, Btree 
 
 int sqlite3BtreeIncrVacuum(Btree *);
 
+/*
+ * BEGIN Berkeley DB specific btree APIs.
+ */
+int sqlite3BtreeHandleCacheUpdate(Btree *p, int schema_changed);
+/*
+ * END Berkeley DB specific btree APIs.
+ */
+
 /* The flags parameter to sqlite3BtreeCreateTable can be the bitwise OR
 ** of the flags shown below.
 **
--- src/vdbe.c
+++ src/vdbe.c
@@ -2929,11 +2929,13 @@ case OP_SetCookie: {       /* in3 */
 case OP_VerifyCookie: {
   int iMeta;
   int iGen;
+  int iSchemaChanged;
   Btree *pBt;
 
   assert( pOp->p1>=0 && pOp->p1<db->nDb );
   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
   assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
+  iSchemaChanged = 0;
   pBt = db->aDb[pOp->p1].pBt;
   if( pBt ){
     sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&iMeta);
@@ -2962,12 +2964,14 @@ case OP_VerifyCookie: {
     ** a v-table method.
     */
     if( db->aDb[pOp->p1].pSchema->schema_cookie!=iMeta ){
+      iSchemaChanged = 1;
       sqlite3ResetInternalSchema(db, pOp->p1);
     }
 
     p->expired = 1;
     rc = SQLITE_SCHEMA;
   }
+  sqlite3BtreeHandleCacheUpdate(pBt, iSchemaChanged);
   break;
 }