Bug 1431149 - Add an optional schema name argument to `OpenedConnection#{get, set}SchemaVersion`. r?mak draft
authorKit Cambridge <kit@yakshaving.ninja>
Wed, 17 Jan 2018 09:13:47 -0800
changeset 721656 0975c4162715ef3d483fca89d1751e338d039110
parent 720975 9be7249e74fd7f6d9163b59d3386ed01038197a0
child 746404 19ad680f6323dd5df3b15fe5a4034abbe87f489c
push id95913
push userbmo:kit@mozilla.com
push dateWed, 17 Jan 2018 17:17:49 +0000
reviewersmak
bugs1431149
milestone59.0a1
Bug 1431149 - Add an optional schema name argument to `OpenedConnection#{get, set}SchemaVersion`. r?mak MozReview-Commit-ID: 8Uk1Vuqc1lc
toolkit/modules/Sqlite.jsm
toolkit/modules/tests/xpcshell/test_sqlite.js
--- a/toolkit/modules/Sqlite.jsm
+++ b/toolkit/modules/Sqlite.jsm
@@ -1166,34 +1166,34 @@ OpenedConnection.prototype = Object.free
 
   /**
    * The integer schema version of the database.
    *
    * This is 0 if not schema version has been set.
    *
    * @return Promise<int>
    */
-  getSchemaVersion() {
-    return this.execute("PRAGMA user_version").then(
+  getSchemaVersion(schemaName = "main") {
+    return this.execute(`PRAGMA ${schemaName}.user_version`).then(
       function onSuccess(result) {
         if (result == null) {
           return 0;
         }
         return JSON.stringify(result[0].getInt32(0));
       }
     );
   },
 
-  setSchemaVersion(value) {
+  setSchemaVersion(value, schemaName = "main") {
     if (!Number.isInteger(value)) {
       // Guarding against accidental SQLi
       throw new TypeError("Schema version must be an integer. Got " + value);
     }
     this._connectionData.ensureOpen();
-    return this.execute("PRAGMA user_version = " + value);
+    return this.execute(`PRAGMA ${schemaName}.user_version = ${value}`);
   },
 
   /**
    * Close the database connection.
    *
    * This must be performed when you are finished with the database.
    *
    * Closing the database connection has the side effect of forcefully
--- a/toolkit/modules/tests/xpcshell/test_sqlite.js
+++ b/toolkit/modules/tests/xpcshell/test_sqlite.js
@@ -127,16 +127,35 @@ add_task(async function test_schema_vers
       success = true;
     }
     Assert.ok(success);
 
     version = await db.getSchemaVersion();
     Assert.equal(version, 14);
   }
 
+  await db.execute("ATTACH :memory AS attached");
+
+  let attachedVersion = await db.getSchemaVersion("attached");
+  Assert.equal(attachedVersion, 0,
+    "Should return 0 for initial attached schema version");
+
+  await db.setSchemaVersion(3, "attached");
+  attachedVersion = await db.getSchemaVersion("attached");
+  Assert.equal(attachedVersion, 3, "Should set attached schema version");
+
+  version = await db.getSchemaVersion();
+  Assert.equal(version, 14,
+    "Setting attached schema version should not change main schema version");
+
+  await db.setSchemaVersion(15);
+  attachedVersion = await db.getSchemaVersion("attached");
+  Assert.equal(attachedVersion, 3,
+    "Setting main schema version should not change attached schema version");
+
   await db.close();
 });
 
 add_task(async function test_simple_insert() {
   let c = await getDummyDatabase("simple_insert");
 
   let result = await c.execute("INSERT INTO dirs VALUES (NULL, 'foo')");
   Assert.ok(Array.isArray(result));