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

source_changes at macosforge.org source_changes at macosforge.org
Mon Mar 8 17:49:18 PST 2010


Revision: 750
          http://trac.macosforge.org/projects/darwinbuild/changeset/750
Author:   wsiegrist at apple.com
Date:     2010-03-08 17:49:18 -0800 (Mon, 08 Mar 2010)
Log Message:
-----------
Creating from scratch works, and not needing to upgrade works. Test suite passes.

Modified Paths:
--------------
    branches/PR-7593824/darwinup/Database.cpp
    branches/PR-7593824/darwinup/Database.h
    branches/PR-7593824/darwinup/Table.cpp
    branches/PR-7593824/darwinup/Utils.h
    branches/PR-7593824/testing/darwinup/run-tests.sh

Modified: branches/PR-7593824/darwinup/Database.cpp
===================================================================
--- branches/PR-7593824/darwinup/Database.cpp	2010-03-09 00:20:00 UTC (rev 749)
+++ branches/PR-7593824/darwinup/Database.cpp	2010-03-09 01:49:18 UTC (rev 750)
@@ -36,7 +36,7 @@
  * sqlite3_trace callback for debugging
  */
 void dbtrace(void* context, const char* sql) {
-	fprintf(stderr, "SQL: %s\n", sql);
+	fprintf(stderr, "[SQL] %s\n", sql);
 }
 
 Database::Database() {
@@ -95,6 +95,11 @@
 	return DB_OK;
 }
 
+int Database::post_table_creation() {
+	// clients can implement this
+	return DB_OK;
+}
+
 const char* Database::path() {
 	return m_path;
 }
@@ -139,16 +144,19 @@
 	} else {
 		// not empty, but upgrade schema if needed
 		uint32_t version = this->get_schema_version();
+		IF_DEBUG("Connected to db and found version = %u \n", version);
 		if (version < this->m_schema_version) {
+			IF_DEBUG("Upgrading schema from %u to %u \n", version, this->m_schema_version);
 			assert(this->upgrade_schema(version) == 0);
-			this->set_schema_version(this->m_schema_version);
 		}
 		if (version > this->m_schema_version) {
 			fprintf(stderr, "Error: this client is too old!\n");
 			return DB_ERROR;
 		}
-	}	
+	}
 	
+	this->set_schema_version(this->m_schema_version);
+	
 	return res;	
 }
 
@@ -647,6 +655,8 @@
 			return res;
 		}
 	}
+	if (res == DB_OK) res = this->initial_data();
+	if (res == DB_OK) res = this->post_table_creation();
 	return res;
 }
 
@@ -716,33 +726,38 @@
 	return DB_OK;
 }
 
-int Database::get_information_value(const char* variable, char** value) {
+int Database::initial_data() {
+	// load our initial config data
+	return this->insert(m_information_table, "schema_version", "0");
+}
+
+int Database::get_information_value(const char* variable, char*** value) {
 	return this->get_value("get_information_value",
 						   (void**)value,
 						   this->m_information_table,
-						   this->m_information_table->column(1), // value
+						   this->m_information_table->column(2), // value
 						   1,
-						   this->m_information_table->column(0), // variable
+						   this->m_information_table->column(1), // variable
 						   '=', variable);
 }
 
 int Database::update_information_value(const char* variable, const char* value) {
 	return this->update_value("update_information_value",
 							  this->m_information_table,
-							  this->m_information_table->column(1), // value
-							  (void**)value, 
+							  this->m_information_table->column(2), // value
+							  (void**)&value, 
 							  1,
-							  this->m_information_table->column(0), // variable
+							  this->m_information_table->column(1), // variable
 							  '=', variable);
 }
 
 uint32_t Database::get_schema_version() {
-	char* vertxt;
-	int res = DB_OK;
+	int res = SQLITE_OK;
+	char** vertxt = NULL;
 	res = this->get_information_value("schema_version", &vertxt);
-	if (FOUND(res)) {
-		uint32_t version = (uint32_t)strtoul(vertxt, NULL, 10);
-		free(vertxt);
+	if (res == SQLITE_ROW) {
+		uint32_t version = (uint32_t)strtoul(*vertxt, NULL, 10);
+		free(*vertxt);
 		return version;
 	} else {
 		// lack of information table/value means we are 
@@ -820,7 +835,7 @@
 			*used = current - output;
 		}
 	}
-	
+
 	return res;
 }
 

Modified: branches/PR-7593824/darwinup/Database.h
===================================================================
--- branches/PR-7593824/darwinup/Database.h	2010-03-09 00:20:00 UTC (rev 749)
+++ branches/PR-7593824/darwinup/Database.h	2010-03-09 01:49:18 UTC (rev 750)
@@ -106,6 +106,10 @@
 	 */
 	virtual int  init_schema();
 	
+	// called after tables are created so clients can load
+	// initial sets of data
+	virtual int  post_table_creation();
+	
 	const char*  path();
 	const char*  error();
 	int          connect();
@@ -180,10 +184,10 @@
 	
 	int   upgrade_schema(uint32_t version);
 	int   upgrade_internal_schema(uint32_t version);
-	
 	int   init_internal_schema();
-	
-	int   get_information_value(const char* variable, char** value);
+	int   initial_data();
+
+	int   get_information_value(const char* variable, char*** value);
 	int   update_information_value(const char* variable, const char* value);
 	
 	// get and set version info in actual database

Modified: branches/PR-7593824/darwinup/Table.cpp
===================================================================
--- branches/PR-7593824/darwinup/Table.cpp	2010-03-09 00:20:00 UTC (rev 749)
+++ branches/PR-7593824/darwinup/Table.cpp	2010-03-09 01:49:18 UTC (rev 750)
@@ -194,7 +194,7 @@
 	bool comma = false;  // flag we set to start adding commas
 	
 	// calculate the length of the sql statement
-	size_t size = 27 + 5*m_column_count;
+	size_t size = 28 + 5*m_column_count + strlen(m_name);
 	for (i=0; i<m_column_count; i++) {
 		size += strlen(m_columns[i]->name());
 	}
@@ -246,7 +246,7 @@
 	bool comma = false;  // flag we set to start adding commas
 	
 	// calculate the length of the sql statement
-	size_t size = 27 + 5*m_column_count;
+	size_t size = 28 + 5*m_column_count + strlen(m_name);
 	for (i=0; i<m_column_count; i++) {
 		size += strlen(m_columns[i]->name());
 	}
@@ -278,6 +278,8 @@
 	}
 	strlcat(m_insert_sql, ");", size);
 	
+	IF_SQL("insert sql: %s \n", m_insert_sql);
+	
 	// prepare
 	int res = sqlite3_prepare_v2(db, m_insert_sql, strlen(m_insert_sql), &m_prepared_insert, NULL);
 	if (res != SQLITE_OK) {

Modified: branches/PR-7593824/darwinup/Utils.h
===================================================================
--- branches/PR-7593824/darwinup/Utils.h	2010-03-09 00:20:00 UTC (rev 749)
+++ branches/PR-7593824/darwinup/Utils.h	2010-03-09 01:49:18 UTC (rev 750)
@@ -45,7 +45,7 @@
 const uint32_t VERBOSE_SQL      = 0x4;
 
 #define IF_DEBUG(...) do { extern uint32_t verbosity; if (verbosity & VERBOSE_DEBUG) fprintf(stderr, "DEBUG: " __VA_ARGS__); } while (0)
-#define IF_SQL(...) do { extern uint32_t verbosity; if (verbosity & VERBOSE_SQL) fprintf(stderr, "SQL: " __VA_ARGS__); } while (0)
+#define IF_SQL(...) do { extern uint32_t verbosity; if (verbosity & VERBOSE_SQL) fprintf(stderr, "DEBUG: " __VA_ARGS__); } while (0)
 
 int fts_compare(const FTSENT **a, const FTSENT **b);
 int ftsent_filename(FTSENT* ent, char* filename, size_t bufsiz);

Modified: branches/PR-7593824/testing/darwinup/run-tests.sh
===================================================================
--- branches/PR-7593824/testing/darwinup/run-tests.sh	2010-03-09 00:20:00 UTC (rev 749)
+++ branches/PR-7593824/testing/darwinup/run-tests.sh	2010-03-09 01:49:18 UTC (rev 750)
@@ -44,22 +44,22 @@
 for R in $ROOTS;
 do
 	echo "INFO: Installing $R ...";
-	darwinup -vv -p $DEST install $PREFIX/$R
-	UUID=$(darwinup -p $DEST list | head -3 | tail -1 | awk '{print $1}')
+	darwinup -vvv -p $DEST install $PREFIX/$R
+	UUID=$(darwinup -vvv -p $DEST list | head -3 | tail -1 | awk '{print $1}')
 	echo "INFO: Uninstalling $R ...";
-	darwinup -vv -p $DEST uninstall $UUID
+	darwinup -vvv -p $DEST uninstall $UUID
 	echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 	$DIFF $ORIG $DEST 2>&1
 done
 
 echo "========== TEST: Multiple argument test ==========";
-darwinup -vv -p $DEST install $PREFIX/root{,2,3}
-LINES=$(darwinup -p $DEST list | wc -l)
+darwinup -vvv -p $DEST install $PREFIX/root{,2,3}
+LINES=$(darwinup -vvv -p $DEST list | wc -l)
 if [ $LINES -lt 5 ]; then
 	echo "Failed multiple argument test."
 	exit 1;
 fi
-darwinup -vv -p $DEST uninstall all
+darwinup -vvv -p $DEST uninstall all
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 
@@ -68,13 +68,13 @@
 for R in $ROOTS;
 do
 	echo "INFO: Installing $R ...";
-	darwinup -vv -p $DEST install $PREFIX/$R
+	darwinup -vvv -p $DEST install $PREFIX/$R
 done
 for R in $ROOTS;
 do
-	UUID=$(darwinup -p $DEST list | head -3 | tail -1 | awk '{print $1}')
+	UUID=$(darwinup -vvv -p $DEST list | head -3 | tail -1 | awk '{print $1}')
 	echo "INFO: Uninstalling $UUID ...";
-	darwinup -vv -p $DEST uninstall $UUID
+	darwinup -vvv -p $DEST uninstall $UUID
 done	
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
@@ -83,13 +83,13 @@
 for R in $ROOTS;
 do
         echo "INFO: Installing $R ...";
-        darwinup -vv -p $DEST install $PREFIX/$R
+        darwinup -vvv -p $DEST install $PREFIX/$R
 done
 for R in $ROOTS;
 do
-        UUID=$(darwinup -p $DEST list | grep $R$ | awk '{print $1}')
+        UUID=$(darwinup -vvv -p $DEST list | grep $R$ | awk '{print $1}')
         echo "INFO: Uninstalling $UUID ...";
-        darwinup -vv -p $DEST uninstall $UUID
+        darwinup -vvv -p $DEST uninstall $UUID
 done
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
@@ -98,13 +98,13 @@
 for R in $ROOTS;
 do
         echo "INFO: Installing $R ...";
-        darwinup -vv -p $DEST install $PREFIX/$R
+        darwinup -vvv -p $DEST install $PREFIX/$R
 done
 for R in root2 root3 root;
 do
-        UUID=$(darwinup -p $DEST list | grep $R$ | awk '{print $1}')
+        UUID=$(darwinup -vvv -p $DEST list | grep $R$ | awk '{print $1}')
         echo "INFO: Uninstalling $UUID ...";
-        darwinup -vv -p $DEST uninstall $UUID
+        darwinup -vvv -p $DEST uninstall $UUID
 done
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
@@ -113,45 +113,45 @@
 for R in root3 root2 root;
 do
         echo "INFO: Installing $R ...";
-        darwinup -vv -p $DEST install $PREFIX/$R
+        darwinup -vvv -p $DEST install $PREFIX/$R
 done
 for R in root3 root2 root;
 do
-        UUID=$(darwinup -p $DEST list | grep $R$ | awk '{print $1}')
+        UUID=$(darwinup -vvv -p $DEST list | grep $R$ | awk '{print $1}')
         echo "INFO: Uninstalling $UUID ...";
-        darwinup -vv -p $DEST uninstall $UUID
+        darwinup -vvv -p $DEST uninstall $UUID
 done
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 
 echo "========== TEST: trying large roots ==========";
 echo "INFO: installing 300files";
-darwinup -vv -p $DEST install $PREFIX/300files.tbz2
-darwinup -vv -p $DEST uninstall 300files.tbz2
+darwinup -vvv -p $DEST install $PREFIX/300files.tbz2
+darwinup -vvv -p $DEST uninstall 300files.tbz2
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 echo "INFO: installing 300dir";
-darwinup -vv -p $DEST install $PREFIX/300dirs.tbz2
-darwinup -vv -p $DEST uninstall 300dirs.tbz2
+darwinup -vvv -p $DEST install $PREFIX/300dirs.tbz2
+darwinup -vvv -p $DEST uninstall 300dirs.tbz2
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 echo "INFO: installing both 300files and 300dirs";
-darwinup -vv -p $DEST install $PREFIX/300dirs.tbz2
-darwinup -vv -p $DEST install $PREFIX/300files.tbz2
-darwinup -vv -p $DEST uninstall 300dirs.tbz2
-darwinup -vv -p $DEST uninstall 300files.tbz2
+darwinup -vvv -p $DEST install $PREFIX/300dirs.tbz2
+darwinup -vvv -p $DEST install $PREFIX/300files.tbz2
+darwinup -vvv -p $DEST uninstall 300dirs.tbz2
+darwinup -vvv -p $DEST uninstall 300files.tbz2
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 
 echo "========== TEST: Try uninstalling with user data in rollback =========="
 echo "INFO: Installing root5 ...";
-darwinup -vv -p $DEST install $PREFIX/root5
-darwinup -vv -p $DEST install $PREFIX/root6
+darwinup -vvv -p $DEST install $PREFIX/root5
+darwinup -vvv -p $DEST install $PREFIX/root6
 echo "modification" >> $DEST/d/file
-darwinup -vv -p $DEST install $PREFIX/root7
-darwinup -vv -p $DEST uninstall root6
-darwinup -vv -p $DEST uninstall root5
-darwinup -vv -p $DEST uninstall root7
+darwinup -vvv -p $DEST install $PREFIX/root7
+darwinup -vvv -p $DEST uninstall root6
+darwinup -vvv -p $DEST uninstall root5
+darwinup -vvv -p $DEST uninstall root7
 stat $DEST/d/file
 rm $DEST/d/file
 rmdir $DEST/d
@@ -159,32 +159,32 @@
 $DIFF $ORIG $DEST 2>&1
 
 echo "========== TEST: Deep rollback while saving user data =========="
-darwinup -vv -p $DEST install $PREFIX/deep-rollback.cpgz
+darwinup -vvv -p $DEST install $PREFIX/deep-rollback.cpgz
 echo "modified" >> $DEST/d1/d2/d3/d4/d5/d6/file
-darwinup -vv -p $DEST install $PREFIX/deep-rollback.cpgz
-darwinup -vv -p $DEST uninstall newest
-darwinup -vv -p $DEST uninstall newest
+darwinup -vvv -p $DEST install $PREFIX/deep-rollback.cpgz
+darwinup -vvv -p $DEST uninstall newest
+darwinup -vvv -p $DEST uninstall newest
 stat $DEST/d1/d2/d3/d4/d5/d6/file
 rm $DEST/d1/d2/d3/d4/d5/d6/file
 rm -rf $DEST/d1
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 
-darwinup -vv -p $DEST install $PREFIX/deep-rollback.cpgz
-darwinup -vv -p $DEST install $PREFIX/deep-rollback-2.xar
-darwinup -vv -p $DEST uninstall all
+darwinup -vvv -p $DEST install $PREFIX/deep-rollback.cpgz
+darwinup -vvv -p $DEST install $PREFIX/deep-rollback-2.xar
+darwinup -vvv -p $DEST uninstall all
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 
 
 echo "========== TEST: Testing broken symlink handling =========="
-darwinup -vv -p $DEST install $PREFIX/symlinks
-darwinup -vv -p $DEST uninstall symlinks
+darwinup -vvv -p $DEST install $PREFIX/symlinks
+darwinup -vvv -p $DEST uninstall symlinks
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
-darwinup -vv -p $DEST install $PREFIX/symlink_update
+darwinup -vvv -p $DEST install $PREFIX/symlink_update
 stat -L $DEST/broken
-darwinup -vv -p $DEST uninstall newest
+darwinup -vvv -p $DEST uninstall newest
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
 
@@ -194,7 +194,7 @@
 #
 set +e
 echo "========== TEST: Trying a root that will fail due to object change =========="
-darwinup -vv -p $DEST install $PREFIX/root4
+darwinup -vvv -p $DEST install $PREFIX/root4
 if [ $? -ne 1 ]; then exit 1; fi
 echo "DIFF: diffing original test files to dest (should be no diffs) ..."
 $DIFF $ORIG $DEST 2>&1
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20100308/d95e1852/attachment-0001.html>


More information about the darwinbuild-changes mailing list