mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 21:31:04 +00:00
Bug 386366 - Add convenience method for getting the database schema version, patch by Shawn Wilsher <sdwilsh@mozilla.com>, r=sspitzer
This commit is contained in:
parent
1612e09b5a
commit
6e71e3b302
@ -22,6 +22,7 @@
|
||||
* Contributor(s):
|
||||
* Vladimir Vukicevic <vladimir.vukicevic@oracle.com>
|
||||
* Brett Wilson <brettw@gmail.com>
|
||||
* Shawn Wilsher <me@shawnwilsher.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
@ -50,7 +51,7 @@ interface nsIFile;
|
||||
* creating prepared statements, executing SQL, and examining database
|
||||
* errors.
|
||||
*/
|
||||
[scriptable, uuid(77015f88-bfc2-4669-b1c3-cc19fb07cd4e)]
|
||||
[scriptable, uuid(0b3d9b17-6c07-4c39-9ee6-314f9fbc56a6)]
|
||||
interface mozIStorageConnection : nsISupports {
|
||||
/*
|
||||
* Initialization and status
|
||||
@ -84,6 +85,12 @@ interface mozIStorageConnection : nsISupports {
|
||||
*/
|
||||
readonly attribute AUTF8String lastErrorString;
|
||||
|
||||
/**
|
||||
* The schema version of the database. This should not be used until the
|
||||
* database is ready. The schema will be reported as zero if it is not set.
|
||||
*/
|
||||
attribute long schemaVersion;
|
||||
|
||||
/*
|
||||
* Statement creation
|
||||
*/
|
||||
|
@ -217,6 +217,35 @@ mozStorageConnection::GetLastErrorString(nsACString& aLastErrorString)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozStorageConnection::GetSchemaVersion(PRInt32 *version)
|
||||
{
|
||||
NS_ASSERTION(mDBConn, "Connection not initialized");
|
||||
|
||||
nsCOMPtr<mozIStorageStatement> stmt;
|
||||
nsresult rv = CreateStatement(NS_LITERAL_CSTRING(
|
||||
"PRAGMA user_version"), getter_AddRefs(stmt));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
*version = 0;
|
||||
PRBool hasResult;
|
||||
if (NS_SUCCEEDED(stmt->ExecuteStep(&hasResult)) && hasResult)
|
||||
*version = stmt->AsInt32(0);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
mozStorageConnection::SetSchemaVersion(PRInt32 aVersion)
|
||||
{
|
||||
NS_ASSERTION(mDBConn, "Connection not initialized");
|
||||
|
||||
nsCAutoString stmt(NS_LITERAL_CSTRING("PRAGMA user_version = "));
|
||||
stmt.AppendInt(aVersion);
|
||||
|
||||
return ExecuteSimpleSQL(stmt);
|
||||
}
|
||||
|
||||
/**
|
||||
** Statements & Queries
|
||||
**/
|
||||
|
@ -142,13 +142,44 @@ function test_rollbackTransaction_no_transaction()
|
||||
}
|
||||
}
|
||||
|
||||
function test_get_schemaVersion_not_set()
|
||||
{
|
||||
do_check_eq(0, getOpenedDatabase().schemaVersion);
|
||||
}
|
||||
|
||||
function test_set_schemaVersion()
|
||||
{
|
||||
var msc = getOpenedDatabase();
|
||||
const version = 1;
|
||||
msc.schemaVersion = version;
|
||||
do_check_eq(version, msc.schemaVersion);
|
||||
}
|
||||
|
||||
function test_set_schemaVersion_same()
|
||||
{
|
||||
var msc = getOpenedDatabase();
|
||||
const version = 1;
|
||||
msc.schemaVersion = version; // should still work ok
|
||||
do_check_eq(version, msc.schemaVersion);
|
||||
}
|
||||
|
||||
function test_set_schemaVersion_negative()
|
||||
{
|
||||
var msc = getOpenedDatabase();
|
||||
const version = -1;
|
||||
msc.schemaVersion = version;
|
||||
do_check_eq(version, msc.schemaVersion);
|
||||
}
|
||||
|
||||
var tests = [test_connectionReady, test_databaseFile,
|
||||
test_tableExists_not_created, test_indexExists_not_created,
|
||||
test_createTable_not_created, test_indexExists_created,
|
||||
test_createTable_already_created, test_lastInsertRowID,
|
||||
test_transactionInProgress_no, test_transactionInProgress_yes,
|
||||
test_commitTransaction_no_transaction,
|
||||
test_rollbackTransaction_no_transaction];
|
||||
test_rollbackTransaction_no_transaction,
|
||||
test_get_schemaVersion_not_set, test_set_schemaVersion,
|
||||
test_set_schemaVersion_same, test_set_schemaVersion_negative];
|
||||
|
||||
function run_test()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user