Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(84)

Unified Diff: gears/third_party/sqlite_google/src/btree.c

Issue 924: sqlite3 pragma get/set user_version implemented (Closed) SVN Base: http://google-gears.googlecode.com/svn/contrib/dimitri.glazkov/database2/gears/
Patch Set: Simplified by removing transaction-creating, just report misuse now Created 4 months, 1 week ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side by-side-diff with in-line comments
Download patch
Index: gears/third_party/sqlite_google/src/btree.c
===================================================================
--- gears/third_party/sqlite_google/src/btree.c (revision 1753)
+++ gears/third_party/sqlite_google/src/btree.c (working copy)
@@ -29,6 +29,12 @@
*/
static const char zPoisonHeader[] = "SQLite poison 3";
+/*
+** The user cookie position in the database meta information
+** (see prepare.c#215), incremented by one, because first position is actually
+** the number of free pages in Btree (see vdbe.c#2521)
+*/
+static const int kUserCookie = 6;
/*
** Set this global variable to 1 to enable tracing using the TRACE
@@ -6422,3 +6428,32 @@
}
#endif
+
+int sqlite3_get_user_version(sqlite3 *sqlite, int *user_version) {
+ Btree *bt;
+
+ if( sqlite == NULL ) return SQLITE_ERROR;
+ if( sqlite->nDb<1 ) return SQLITE_ERROR;
+
+ /* Grab main database. */
+ bt = sqlite->aDb[0].pBt;
+ /* Because sqlite3BtreeGetMeta sets a table read lock, it is safe to use
+ ** without explicit read transaction. Besides, it is very unlikely we will
+ ** ever call this outside of a transaction.
+ */
+ return sqlite3BtreeGetMeta(bt, kUserCookie, (u32 *)user_version);
+}
+
+int sqlite3_set_user_version(sqlite3 *sqlite, int user_version) {
+ Btree *bt;
+
+ if( sqlite == NULL ) return SQLITE_ERROR;
+ if( sqlite->nDb<1 ) return SQLITE_ERROR;
+
+ bt = sqlite->aDb[0].pBt;
+
+ /* If called outside of a transaction, report misuse. */
+ if( bt->inTrans != TRANS_WRITE ) return SQLITE_MISUSE;
+
+ return sqlite3BtreeUpdateMeta(bt, kUserCookie, (u32)user_version);
+}

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld r338