[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