[darwinbuild-changes] [748] branches/PR-7593824

source_changes at macosforge.org source_changes at macosforge.org
Mon Mar 8 16:14:45 PST 2010


Revision: 748
          http://trac.macosforge.org/projects/darwinbuild/changeset/748
Author:   wsiegrist at apple.com
Date:     2010-03-08 16:14:45 -0800 (Mon, 08 Mar 2010)
Log Message:
-----------
Start of schema versioning/upgrade support

Modified Paths:
--------------
    branches/PR-7593824/darwinup/DB.cpp
    branches/PR-7593824/darwinup/Database.cpp
    branches/PR-7593824/darwinup/Database.h

Property Changed:
----------------
    branches/PR-7593824/
    branches/PR-7593824/darwinbuild/darwinbuild.in
    branches/PR-7593824/darwinbuild/darwinmaster.in
    branches/PR-7593824/darwinbuild/installXcode.in
    branches/PR-7593824/darwinbuild/packageRoots.in
    branches/PR-7593824/darwinbuild/thinPackages.in


Property changes on: branches/PR-7593824
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/PR-4841388:399-419
/branches/PR-6358021:442-443
/branches/PR-6392966:423-427
/branches/PR-6398060:433-434
/branches/PR-6493844:460-461
/branches/PR-6497694:466-468,471
/branches/PR-6634286:632-650
/branches/PR-6688645:479-490
/branches/PR-6722857:495-499
/branches/PR-6729491:655-664
/branches/PR-7250612:635-650
/branches/PR-7341154:682-694
/branches/PR-7431723:660-664
/branches/PR-7461534:650-664
/branches/PR-7482850:670-671
/branches/PR-7489777:676-731
/branches/PR-7529688:692-694
/branches/PR-7598640:703-731
/trunk:432-434,740-741
   + /branches/PR-4841388:399-419
/branches/PR-6358021:442-443
/branches/PR-6392966:423-427
/branches/PR-6398060:433-434
/branches/PR-6493844:460-461
/branches/PR-6497694:466-468,471
/branches/PR-6634286:632-650
/branches/PR-6688645:479-490
/branches/PR-6722857:495-499
/branches/PR-6729491:655-664
/branches/PR-7250612:635-650
/branches/PR-7341154:682-694
/branches/PR-7431723:660-664
/branches/PR-7461534:650-664
/branches/PR-7482850:670-671
/branches/PR-7489777:676-731
/branches/PR-7529688:692-694
/branches/PR-7598640:703-731
/trunk:432-434,740-742


Property changes on: branches/PR-7593824/darwinbuild/darwinbuild.in
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/PR-4841388/darwinbuild/darwinbuild:399-419
/branches/PR-6358021/darwinbuild/darwinbuild:442-443
/branches/PR-6392966/darwinbuild/darwinbuild:423-427
/branches/PR-6398060/darwinbuild/darwinbuild:433-434
/branches/PR-6493844/darwinbuild/darwinbuild.in:460-461
/branches/PR-6497694/darwinbuild/darwinbuild.in:466-468,471
/branches/PR-6634286/darwinbuild/darwinbuild.in:632-650
/branches/PR-6688645/darwinbuild/darwinbuild.in:479-490
/branches/PR-6722857/darwinbuild/darwinbuild.in:495-499
/branches/PR-6729491/darwinbuild/darwinbuild.in:655-664
/branches/PR-7250612/darwinbuild/darwinbuild.in:635-650
/branches/PR-7341154/darwinbuild/darwinbuild.in:682-694
/branches/PR-7431723/darwinbuild/darwinbuild.in:660-664
/branches/PR-7461534/darwinbuild/darwinbuild.in:650-664
/branches/PR-7489777/darwinbuild/darwinbuild.in:676-731
/branches/PR-7529688/darwinbuild/darwinbuild.in:692-694
/branches/PR-7598640/darwinbuild/darwinbuild.in:703-731
/trunk/darwinbuild/darwinbuild:432-434
/trunk/darwinbuild/darwinbuild.in:740-741
   + /branches/PR-4841388/darwinbuild/darwinbuild:399-419
/branches/PR-6358021/darwinbuild/darwinbuild:442-443
/branches/PR-6392966/darwinbuild/darwinbuild:423-427
/branches/PR-6398060/darwinbuild/darwinbuild:433-434
/branches/PR-6493844/darwinbuild/darwinbuild.in:460-461
/branches/PR-6497694/darwinbuild/darwinbuild.in:466-468,471
/branches/PR-6634286/darwinbuild/darwinbuild.in:632-650
/branches/PR-6688645/darwinbuild/darwinbuild.in:479-490
/branches/PR-6722857/darwinbuild/darwinbuild.in:495-499
/branches/PR-6729491/darwinbuild/darwinbuild.in:655-664
/branches/PR-7250612/darwinbuild/darwinbuild.in:635-650
/branches/PR-7341154/darwinbuild/darwinbuild.in:682-694
/branches/PR-7431723/darwinbuild/darwinbuild.in:660-664
/branches/PR-7461534/darwinbuild/darwinbuild.in:650-664
/branches/PR-7489777/darwinbuild/darwinbuild.in:676-731
/branches/PR-7529688/darwinbuild/darwinbuild.in:692-694
/branches/PR-7598640/darwinbuild/darwinbuild.in:703-731
/trunk/darwinbuild/darwinbuild:432-434
/trunk/darwinbuild/darwinbuild.in:740-742


Property changes on: branches/PR-7593824/darwinbuild/darwinmaster.in
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/PR-4841388/darwinbuild/darwinmaster.sh:399-419
/branches/PR-6358021/darwinbuild/darwinmaster.sh:442-443
/branches/PR-6392966/darwinbuild/darwinmaster.sh:423-427
/branches/PR-6398060/darwinbuild/darwinmaster.sh:433-434
/branches/PR-6493844/darwinbuild/darwinmaster.sh.in:460-461
/branches/PR-6497694/darwinbuild/darwinmaster.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/darwinmaster.in:632-650
/branches/PR-6688645/darwinbuild/darwinmaster.sh.in:479-490
/branches/PR-6722857/darwinbuild/darwinmaster.sh.in:495-499
/branches/PR-6729491/darwinbuild/darwinmaster.in:655-664
/branches/PR-7250612/darwinbuild/darwinmaster.in:635-650
/branches/PR-7341154/darwinbuild/darwinmaster.in:682-694
/branches/PR-7431723/darwinbuild/darwinmaster.in:660-664
/branches/PR-7461534/darwinbuild/darwinmaster.in:650-664
/branches/PR-7489777/darwinbuild/darwinmaster.in:676-731
/branches/PR-7529688/darwinbuild/darwinmaster.in:692-694
/branches/PR-7598640/darwinbuild/darwinmaster.in:703-731
/trunk/darwinbuild/darwinmaster.in:740-741
/trunk/darwinbuild/darwinmaster.sh:432-434
   + /branches/PR-4841388/darwinbuild/darwinmaster.sh:399-419
/branches/PR-6358021/darwinbuild/darwinmaster.sh:442-443
/branches/PR-6392966/darwinbuild/darwinmaster.sh:423-427
/branches/PR-6398060/darwinbuild/darwinmaster.sh:433-434
/branches/PR-6493844/darwinbuild/darwinmaster.sh.in:460-461
/branches/PR-6497694/darwinbuild/darwinmaster.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/darwinmaster.in:632-650
/branches/PR-6688645/darwinbuild/darwinmaster.sh.in:479-490
/branches/PR-6722857/darwinbuild/darwinmaster.sh.in:495-499
/branches/PR-6729491/darwinbuild/darwinmaster.in:655-664
/branches/PR-7250612/darwinbuild/darwinmaster.in:635-650
/branches/PR-7341154/darwinbuild/darwinmaster.in:682-694
/branches/PR-7431723/darwinbuild/darwinmaster.in:660-664
/branches/PR-7461534/darwinbuild/darwinmaster.in:650-664
/branches/PR-7489777/darwinbuild/darwinmaster.in:676-731
/branches/PR-7529688/darwinbuild/darwinmaster.in:692-694
/branches/PR-7598640/darwinbuild/darwinmaster.in:703-731
/trunk/darwinbuild/darwinmaster.in:740-742
/trunk/darwinbuild/darwinmaster.sh:432-434


Property changes on: branches/PR-7593824/darwinbuild/installXcode.in
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/PR-4841388/darwinbuild/installXcode:399-419
/branches/PR-6358021/darwinbuild/installXcode:442-443
/branches/PR-6392966/darwinbuild/installXcode:423-427
/branches/PR-6398060/darwinbuild/installXcode:433-434
/branches/PR-6493844/darwinbuild/installXcode.in:460-461
/branches/PR-6497694/darwinbuild/installXcode.in:466-468,471
/branches/PR-6634286/darwinbuild/installXcode.in:632-650
/branches/PR-6688645/darwinbuild/installXcode.in:479-490
/branches/PR-6722857/darwinbuild/installXcode.in:495-499
/branches/PR-6729491/darwinbuild/installXcode.in:655-664
/branches/PR-7250612/darwinbuild/installXcode.in:635-650
/branches/PR-7341154/darwinbuild/installXcode.in:682-694
/branches/PR-7431723/darwinbuild/installXcode.in:660-664
/branches/PR-7461534/darwinbuild/installXcode.in:650-664
/branches/PR-7489777/darwinbuild/installXcode.in:676-731
/branches/PR-7529688/darwinbuild/installXcode.in:692-694
/branches/PR-7598640/darwinbuild/installXcode.in:703-731
/trunk/darwinbuild/installXcode:432-434
/trunk/darwinbuild/installXcode.in:740-741
   + /branches/PR-4841388/darwinbuild/installXcode:399-419
/branches/PR-6358021/darwinbuild/installXcode:442-443
/branches/PR-6392966/darwinbuild/installXcode:423-427
/branches/PR-6398060/darwinbuild/installXcode:433-434
/branches/PR-6493844/darwinbuild/installXcode.in:460-461
/branches/PR-6497694/darwinbuild/installXcode.in:466-468,471
/branches/PR-6634286/darwinbuild/installXcode.in:632-650
/branches/PR-6688645/darwinbuild/installXcode.in:479-490
/branches/PR-6722857/darwinbuild/installXcode.in:495-499
/branches/PR-6729491/darwinbuild/installXcode.in:655-664
/branches/PR-7250612/darwinbuild/installXcode.in:635-650
/branches/PR-7341154/darwinbuild/installXcode.in:682-694
/branches/PR-7431723/darwinbuild/installXcode.in:660-664
/branches/PR-7461534/darwinbuild/installXcode.in:650-664
/branches/PR-7489777/darwinbuild/installXcode.in:676-731
/branches/PR-7529688/darwinbuild/installXcode.in:692-694
/branches/PR-7598640/darwinbuild/installXcode.in:703-731
/trunk/darwinbuild/installXcode:432-434
/trunk/darwinbuild/installXcode.in:740-742


Property changes on: branches/PR-7593824/darwinbuild/packageRoots.in
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/PR-4841388/darwinbuild/packageRoots.sh:399-419
/branches/PR-6358021/darwinbuild/packageRoots.sh:442-443
/branches/PR-6392966/darwinbuild/packageRoots.sh:423-427
/branches/PR-6398060/darwinbuild/packageRoots.sh:433-434
/branches/PR-6493844/darwinbuild/packageRoots.sh.in:460-461
/branches/PR-6497694/darwinbuild/packageRoots.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/packageRoots.in:632-650
/branches/PR-6688645/darwinbuild/packageRoots.sh.in:479-490
/branches/PR-6722857/darwinbuild/packageRoots.sh.in:495-499
/branches/PR-6729491/darwinbuild/packageRoots.in:655-664
/branches/PR-7250612/darwinbuild/packageRoots.in:635-650
/branches/PR-7341154/darwinbuild/packageRoots.in:682-694
/branches/PR-7431723/darwinbuild/packageRoots.in:660-664
/branches/PR-7461534/darwinbuild/packageRoots.in:650-664
/branches/PR-7489777/darwinbuild/packageRoots.in:676-731
/branches/PR-7529688/darwinbuild/packageRoots.in:692-694
/branches/PR-7598640/darwinbuild/packageRoots.in:703-731
/trunk/darwinbuild/packageRoots.in:740-741
/trunk/darwinbuild/packageRoots.sh:432-434
   + /branches/PR-4841388/darwinbuild/packageRoots.sh:399-419
/branches/PR-6358021/darwinbuild/packageRoots.sh:442-443
/branches/PR-6392966/darwinbuild/packageRoots.sh:423-427
/branches/PR-6398060/darwinbuild/packageRoots.sh:433-434
/branches/PR-6493844/darwinbuild/packageRoots.sh.in:460-461
/branches/PR-6497694/darwinbuild/packageRoots.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/packageRoots.in:632-650
/branches/PR-6688645/darwinbuild/packageRoots.sh.in:479-490
/branches/PR-6722857/darwinbuild/packageRoots.sh.in:495-499
/branches/PR-6729491/darwinbuild/packageRoots.in:655-664
/branches/PR-7250612/darwinbuild/packageRoots.in:635-650
/branches/PR-7341154/darwinbuild/packageRoots.in:682-694
/branches/PR-7431723/darwinbuild/packageRoots.in:660-664
/branches/PR-7461534/darwinbuild/packageRoots.in:650-664
/branches/PR-7489777/darwinbuild/packageRoots.in:676-731
/branches/PR-7529688/darwinbuild/packageRoots.in:692-694
/branches/PR-7598640/darwinbuild/packageRoots.in:703-731
/trunk/darwinbuild/packageRoots.in:740-742
/trunk/darwinbuild/packageRoots.sh:432-434


Property changes on: branches/PR-7593824/darwinbuild/thinPackages.in
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/PR-4841388/darwinbuild/thinPackages.sh:399-419
/branches/PR-6358021/darwinbuild/thinPackages.sh:442-443
/branches/PR-6392966/darwinbuild/thinPackages.sh:423-427
/branches/PR-6398060/darwinbuild/thinPackages.sh:433-434
/branches/PR-6493844/darwinbuild/thinPackages.sh.in:460-461
/branches/PR-6497694/darwinbuild/thinPackages.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/thinPackages.in:632-650
/branches/PR-6688645/darwinbuild/thinPackages.sh.in:479-490
/branches/PR-6722857/darwinbuild/thinPackages.sh.in:495-499
/branches/PR-6729491/darwinbuild/thinPackages.in:655-664
/branches/PR-7250612/darwinbuild/thinPackages.in:635-650
/branches/PR-7341154/darwinbuild/thinPackages.in:682-694
/branches/PR-7431723/darwinbuild/thinPackages.in:660-664
/branches/PR-7461534/darwinbuild/thinPackages.in:650-664
/branches/PR-7489777/darwinbuild/thinPackages.in:676-731
/branches/PR-7529688/darwinbuild/thinPackages.in:692-694
/branches/PR-7598640/darwinbuild/thinPackages.in:703-731
/trunk/darwinbuild/thinPackages.in:740-741
/trunk/darwinbuild/thinPackages.sh:432-434
   + /branches/PR-4841388/darwinbuild/thinPackages.sh:399-419
/branches/PR-6358021/darwinbuild/thinPackages.sh:442-443
/branches/PR-6392966/darwinbuild/thinPackages.sh:423-427
/branches/PR-6398060/darwinbuild/thinPackages.sh:433-434
/branches/PR-6493844/darwinbuild/thinPackages.sh.in:460-461
/branches/PR-6497694/darwinbuild/thinPackages.sh.in:466-468,471
/branches/PR-6634286/darwinbuild/thinPackages.in:632-650
/branches/PR-6688645/darwinbuild/thinPackages.sh.in:479-490
/branches/PR-6722857/darwinbuild/thinPackages.sh.in:495-499
/branches/PR-6729491/darwinbuild/thinPackages.in:655-664
/branches/PR-7250612/darwinbuild/thinPackages.in:635-650
/branches/PR-7341154/darwinbuild/thinPackages.in:682-694
/branches/PR-7431723/darwinbuild/thinPackages.in:660-664
/branches/PR-7461534/darwinbuild/thinPackages.in:650-664
/branches/PR-7489777/darwinbuild/thinPackages.in:676-731
/branches/PR-7529688/darwinbuild/thinPackages.in:692-694
/branches/PR-7598640/darwinbuild/thinPackages.in:703-731
/trunk/darwinbuild/thinPackages.in:740-742
/trunk/darwinbuild/thinPackages.sh:432-434

Modified: branches/PR-7593824/darwinup/DB.cpp
===================================================================
--- branches/PR-7593824/darwinup/DB.cpp	2010-03-09 00:14:18 UTC (rev 747)
+++ branches/PR-7593824/darwinup/DB.cpp	2010-03-09 00:14:45 UTC (rev 748)
@@ -34,6 +34,7 @@
 
 
 DarwinupDatabase::DarwinupDatabase(const char* path) : Database(path) {
+	m_schema_version = 1;
 	this->connect();
 }
 
@@ -41,7 +42,7 @@
 	// parent automatically deallocates schema objects
 }
 
-void DarwinupDatabase::init_schema() {
+int DarwinupDatabase::init_schema() {	
 	this->m_archives_table = new Table("archives");
 	ADD_PK(m_archives_table, "serial");
 	ADD_INDEX(m_archives_table, "uuid", TYPE_BLOB, true); 
@@ -49,6 +50,7 @@
 	ADD_INTEGER(m_archives_table, "date_added");
 	ADD_INTEGER(m_archives_table, "active");
 	ADD_INTEGER(m_archives_table, "info");	
+	ADD_TEXT(m_archives_table, "osbuild");
 	assert(this->add_table(this->m_archives_table)==0);
 	
 	this->m_files_table = new Table("files");
@@ -65,8 +67,19 @@
 	assert(this->m_files_table->set_custom_create("CREATE UNIQUE INDEX files_archive_path " 
 												  "ON files (archive, path);") == 0);
 	assert(this->add_table(this->m_files_table)==0);
+	
+	return 0;
 }
 
+int DarwinupDatabase::upgrade_schema(uint32_t fromversion) {
+
+	if (fromversion < 1) {
+		this->sql_once("ALTER TABLE archives ADD COLUMN osbuild TEXT");
+	}
+	
+	return 0;
+}
+
 int DarwinupDatabase::activate_archive(uint64_t serial) {
 	uint64_t active = 1;
 	return this->set_archive_active(serial, &active);

Modified: branches/PR-7593824/darwinup/Database.cpp
===================================================================
--- branches/PR-7593824/darwinup/Database.cpp	2010-03-09 00:14:18 UTC (rev 747)
+++ branches/PR-7593824/darwinup/Database.cpp	2010-03-09 00:14:45 UTC (rev 748)
@@ -40,6 +40,7 @@
 }
 
 Database::Database() {
+	m_schema_version = 0;
 	m_table_max = 2;
 	m_table_count = 0;
 	m_tables = (Table**)malloc(sizeof(Table*) * m_table_max);
@@ -51,6 +52,7 @@
 }
 
 Database::Database(const char* path) {
+	m_schema_version = 0;
 	m_table_max = 2;
 	m_table_count = 0;
 	m_tables = (Table**)malloc(sizeof(Table*) * m_table_max);
@@ -81,10 +83,14 @@
 }
 
 
-void Database::init_schema() {
+int Database::init_schema() {
 	// do nothing... children should implement this
 }
 
+int Database::upgrade_schema(uint32_t fromversion) {
+	// do nothing... children should implement this
+}
+
 const char* Database::path() {
 	return m_path;
 }
@@ -94,12 +100,19 @@
 }
 
 int Database::connect() {
+	int res = DB_OK;
+	
 	if (!m_path) {
 		fprintf(stderr, "Error: need to specify a path to Database.\n");
 		return -1;
 	}
-	int res = SQLITE_OK;
-	this->init_schema();
+
+	res = this->pre_connect();
+	if (res) {
+		fprintf(stderr, "Error: pre-connection failed.\n");
+		return res;
+	}
+	
 	res = sqlite3_open(m_path, &m_db);
 	if (res) {
 		sqlite3_close(m_db);
@@ -108,28 +121,56 @@
 				m_path);
 		return res;
 	}
+	
+	res = this->post_connect();
+	if (res) {
+		fprintf(stderr, "Error: post-connection failed.\n");
+		return res;
+	}
+	
+	return res;	
+}
 
+int Database::pre_connect() {	
+	int res = DB_OK;
+	res = this->init_internal_schema();
+	res = this->init_schema();
+	return res;
+}
+
+int Database::post_connect() {
+	int res = DB_OK
+	
+	// prepare transaction statements
+	if (res == DB_OK) 
+		res = sqlite3_prepare_v2(m_db, "BEGIN TRANSACTION", 18,
+								 &m_begin_transaction, NULL);
+	if (res == DB_OK) 
+		res = sqlite3_prepare_v2(m_db, "ROLLBACK TRANSACTION", 21,
+								 &m_rollback_transaction, NULL);
+	if (res == DB_OK) 
+		res = sqlite3_prepare_v2(m_db, "COMMIT TRANSACTION", 19,
+								 &m_commit_transaction, NULL);	
+
+	// debug settings
 	extern uint32_t verbosity;
 	if (verbosity & VERBOSE_SQL) {
 		sqlite3_trace(m_db, dbtrace, NULL);
 	}
 	
 	if (this->is_empty()) {
+		// create schema since it is empty
 		assert(this->create_tables() == 0);
+	} else {
+		// not empty, but upgrade schema if needed
+		version = this->get_schema_version();
+		if (version < this->m_schema_version) {
+			assert(this->upgrade_schema(version) == 0);
+			this->set_schema_version(this->m_schema_version);
+		}
 	}
 	
-	// prepare transaction statements
-	if (res == SQLITE_OK) 
-		res = sqlite3_prepare_v2(m_db, "BEGIN TRANSACTION", 18,
-								 &m_begin_transaction, NULL);
-	if (res == SQLITE_OK) 
-		res = sqlite3_prepare_v2(m_db, "ROLLBACK TRANSACTION", 21,
-								 &m_rollback_transaction, NULL);
-	if (res == SQLITE_OK) 
-		res = sqlite3_prepare_v2(m_db, "COMMIT TRANSACTION", 19,
-								 &m_commit_transaction, NULL);
-	
-	return res;	
+	return res;
 }
 
 int Database::connect(const char* path) {
@@ -589,6 +630,56 @@
 	return res;
 }
 
+int Database::init_internal_schema() {
+	this->m_information_table = new Table("database_information");
+	ADD_PK(m_information_table, "id");
+	ADD_INDEX(m_information_table, "variable", TYPE_TEXT, true);
+	ADD_TEXT(m_information_table, "value");
+	assert(this->add_table(this->m_information_table)==0);
+}
+
+int Database::get_information_value(char* variable, char** value) {
+	return this->get_value("get_information_value",
+						   value,
+						   this->m_information_table,
+						   this->m_information_table->columns(1), // value
+						   1,
+						   this->m_information_table->columns(0), // variable
+						   '=', variable);
+}
+
+uint32_t Database::get_schema_version() {
+	char* vertxt;
+	int res = DB_OK;
+	res = this->get_information_value("schema_version", &vertxt);
+	if (FOUND(res)) {
+		uint32_t version = (uint32_t)strtoul(vertxt, NULL, 10);
+		free(vertxt);
+		return version;
+	} else {
+		// lack of information table/value means we are 
+		//  upgrading an old database
+		return 0;
+	}
+}
+
+int Database::update_information_value(char* variable, char* value) {
+	return this->update_value("update_information_value",
+							  this->m_information_table,
+							  this->m_information_table->columns(1), // value
+							  value, 
+							  1,
+							  this->m_information_table->columns(0), // variable
+							  '=', variable);
+}
+
+int Database::set_schema_version(uint32_t version) {
+	int res = DB_OK;
+	res = this->update_information_value("schema_version", &version);
+	return res;
+}
+
+
 size_t Database::store_column(sqlite3_stmt* stmt, int column, uint8_t* output) {
 	size_t used;
 	int type = sqlite3_column_type(stmt, column);

Modified: branches/PR-7593824/darwinup/Database.h
===================================================================
--- branches/PR-7593824/darwinup/Database.h	2010-03-09 00:14:18 UTC (rev 747)
+++ branches/PR-7593824/darwinup/Database.h	2010-03-09 00:14:45 UTC (rev 748)
@@ -98,7 +98,12 @@
 	 * should use Table::add_column() or the ADD_*
 	 * macros in their init_schema() to define their schema
 	 */
-	virtual void init_schema();
+	virtual int init_schema();
+	/**
+	 * upgrade_schema should execute sql statements needed to
+	 * upgrade from fromversion to the current version
+	 */
+	virtual int upgrade_schema(uint32_t fromversion);
 	
 	const char*  path();
 	const char*  error();
@@ -168,17 +173,24 @@
 	
 protected:
 
+	// pre- and post- connection work
+	int   pre_connect();
+	int   post_connect();
+	
 	// execute query with printf-style format, does not cache statement
-	int sql_once(const char* fmt, ...);
+	int   sql_once(const char* fmt, ...);
 	// cache statement with name, execute query with printf-style format
-	int sql(const char* name, const char* fmt, ...);
-	int execute(sqlite3_stmt* stmt);
+	int   sql(const char* name, const char* fmt, ...);
+	int   execute(sqlite3_stmt* stmt);
 	
-	int  add_table(Table*);
+	int   add_table(Table*);
 	
 	// test if database has had its tables created
 	bool  is_empty();
+	// create tables for the client
 	int   create_tables();
+	// create tables for ourselves
+	int   create_internal_tables();
 
 	// bind all table columns from va_list
 	int   bind_all_columns(sqlite3_stmt* stmt, Table* table, va_list args);
@@ -201,7 +213,11 @@
 	
 	char*            m_path;
 	sqlite3*         m_db;
-
+	
+	uint32_t         m_schema_version;
+	Table*           m_information_table;
+	sqlite3_stmt     m_get_information_value;
+	
 	Table**          m_tables;
 	uint32_t         m_table_count;
 	uint32_t         m_table_max;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20100308/79cfb17b/attachment-0001.html>


More information about the darwinbuild-changes mailing list