[darwinbuild-changes] [726] branches/PR-7489777/darwinup
source_changes at macosforge.org
source_changes at macosforge.org
Mon Mar 1 15:17:01 PST 2010
Revision: 726
http://trac.macosforge.org/projects/darwinbuild/changeset/726
Author: wsiegrist at apple.com
Date: 2010-03-01 15:16:58 -0800 (Mon, 01 Mar 2010)
Log Message:
-----------
Reorganize order of functions to group by caching/return behavior.
Modified Paths:
--------------
branches/PR-7489777/darwinup/Table.cpp
branches/PR-7489777/darwinup/Table.h
Modified: branches/PR-7489777/darwinup/Table.cpp
===================================================================
--- branches/PR-7489777/darwinup/Table.cpp 2010-03-01 21:28:59 UTC (rev 725)
+++ branches/PR-7489777/darwinup/Table.cpp 2010-03-01 23:16:58 UTC (rev 726)
@@ -155,33 +155,6 @@
return 0;
}
-#define __alloc_stmt_query \
- size_t size = 256; \
- size_t used = 0; \
- char* query = (char*)malloc(size); \
- sqlite3_stmt** pps = (sqlite3_stmt**)malloc(sizeof(sqlite3_stmt*));
-
-#define __check_and_cat(text) \
- used = strlcat(query, text, size); \
- if (used >= size-1) { \
- size *= 4; \
- query = (char*)realloc(query, size); \
- if (!query) { \
- fprintf(stderr, "Error: ran out of memory!\n"); \
- return NULL; \
- } \
- used = strlcat(query, text, size); \
- }
-
-#define __prepare_stmt \
- int res = sqlite3_prepare_v2(db, query, size, pps, NULL); \
- free(query); \
- if (res != SQLITE_OK) { \
- fprintf(stderr, "Error: unable to prepare statement: %s\n", \
- sqlite3_errmsg(db)); \
- return NULL; \
- }
-
sqlite3_stmt* Table::create(sqlite3* db) {
size_t size = 0;
if (!m_create_sql) {
@@ -218,7 +191,7 @@
}
}
}
-
+
sqlite3_stmt* stmt = (sqlite3_stmt*)malloc(sizeof(sqlite3_stmt*));
int res = sqlite3_prepare_v2(db, m_create_sql, size, &stmt, NULL); \
if (res != SQLITE_OK) { \
@@ -244,75 +217,6 @@
return stmt;
}
-sqlite3_stmt** Table::count(sqlite3* db, uint32_t count, va_list args) {
- __alloc_stmt_query;
- strlcpy(query, "SELECT count(*) FROM ", size);
- __check_and_cat(m_name);
- __check_and_cat(" WHERE 1");
- this->where_va_columns(count, query, size, &used, args);
- strlcat(query, ";", size);
- __prepare_stmt;
-
- return pps;
-}
-
-sqlite3_stmt** Table::get_column(sqlite3* db, Column* value_column, uint32_t count, va_list args) {
- __alloc_stmt_query;
- strlcpy(query, "SELECT ", size);
- __check_and_cat(value_column->name());
- __check_and_cat(" FROM ");
- __check_and_cat(m_name);
- __check_and_cat(" WHERE 1");
- this->where_va_columns(count, query, size, &used, args);
- strlcat(query, ";", size);
- __prepare_stmt;
-
- return pps;
-}
-
-sqlite3_stmt** Table::get_row(sqlite3* db, uint32_t count, va_list args) {
- __alloc_stmt_query;
- strlcpy(query, "SELECT * FROM ", size);
- __check_and_cat(m_name);
- __check_and_cat(" WHERE 1");
- this->where_va_columns(count, query, size, &used, args);
- strlcat(query, ";", size);
- __prepare_stmt;
-
- return pps;
-}
-
-sqlite3_stmt** Table::get_row_ordered(sqlite3* db, Column* order_by, int order,
- uint32_t count, va_list args) {
- __alloc_stmt_query;
- strlcpy(query, "SELECT * FROM ", size);
- __check_and_cat(m_name);
- __check_and_cat(" WHERE 1");
- this->where_va_columns(count, query, size, &used, args);
- __check_and_cat(" ORDER BY ");
- __check_and_cat(order_by->name());
- __check_and_cat((order == ORDER_BY_DESC ? " DESC" : " ASC"));
- strlcat(query, ";", size);
- __prepare_stmt;
-
- return pps;
-}
-
-
-sqlite3_stmt** Table::update_value(sqlite3* db, Column* value_column, uint32_t count, va_list args) {
- __alloc_stmt_query;
- strlcpy(query, "UPDATE ", size);
- __check_and_cat(m_name);
- __check_and_cat(" SET ");
- __check_and_cat(value_column->name());
- __check_and_cat("=? WHERE 1");
- this->where_va_columns(count, query, size, &used, args);
- strlcat(query, ";", size);
- __prepare_stmt;
-
- return pps;
-}
-
/**
* Prepare and cache the update statement.
* Assumes table only has 1 primary key
@@ -357,7 +261,7 @@
}
}
strlcat(m_update_sql, ";", size);
-
+
// prepare
int res = sqlite3_prepare_v2(db, m_update_sql, strlen(m_update_sql), &m_prepared_update, NULL);
if (res != SQLITE_OK) {
@@ -373,7 +277,7 @@
if (m_prepared_insert) {
return m_prepared_insert;
}
-
+
uint32_t i = 0;
bool comma = false; // flag we set to start adding commas
@@ -409,7 +313,7 @@
}
}
strlcat(m_insert_sql, ");", size);
-
+
// prepare
int res = sqlite3_prepare_v2(db, m_insert_sql, strlen(m_insert_sql), &m_prepared_insert, NULL);
if (res != SQLITE_OK) {
@@ -422,7 +326,7 @@
sqlite3_stmt* Table::del(sqlite3* db) {
// we only need to prepare once, return if we already have it
if (m_prepared_delete) return m_prepared_delete;
-
+
uint32_t i = 0;
// generate the sql query
@@ -458,6 +362,101 @@
}
+#define __alloc_stmt_query \
+ size_t size = 256; \
+ size_t used = 0; \
+ char* query = (char*)malloc(size); \
+ sqlite3_stmt** pps = (sqlite3_stmt**)malloc(sizeof(sqlite3_stmt*));
+
+#define __check_and_cat(text) \
+ used = strlcat(query, text, size); \
+ if (used >= size-1) { \
+ size *= 4; \
+ query = (char*)realloc(query, size); \
+ if (!query) { \
+ fprintf(stderr, "Error: ran out of memory!\n"); \
+ return NULL; \
+ } \
+ used = strlcat(query, text, size); \
+ }
+
+#define __prepare_stmt \
+ int res = sqlite3_prepare_v2(db, query, size, pps, NULL); \
+ free(query); \
+ if (res != SQLITE_OK) { \
+ fprintf(stderr, "Error: unable to prepare statement: %s\n", \
+ sqlite3_errmsg(db)); \
+ return NULL; \
+ }
+
+sqlite3_stmt** Table::count(sqlite3* db, uint32_t count, va_list args) {
+ __alloc_stmt_query;
+ strlcpy(query, "SELECT count(*) FROM ", size);
+ __check_and_cat(m_name);
+ __check_and_cat(" WHERE 1");
+ this->where_va_columns(count, query, size, &used, args);
+ strlcat(query, ";", size);
+ __prepare_stmt;
+
+ return pps;
+}
+
+sqlite3_stmt** Table::get_column(sqlite3* db, Column* value_column, uint32_t count, va_list args) {
+ __alloc_stmt_query;
+ strlcpy(query, "SELECT ", size);
+ __check_and_cat(value_column->name());
+ __check_and_cat(" FROM ");
+ __check_and_cat(m_name);
+ __check_and_cat(" WHERE 1");
+ this->where_va_columns(count, query, size, &used, args);
+ strlcat(query, ";", size);
+ __prepare_stmt;
+
+ return pps;
+}
+
+sqlite3_stmt** Table::get_row(sqlite3* db, uint32_t count, va_list args) {
+ __alloc_stmt_query;
+ strlcpy(query, "SELECT * FROM ", size);
+ __check_and_cat(m_name);
+ __check_and_cat(" WHERE 1");
+ this->where_va_columns(count, query, size, &used, args);
+ strlcat(query, ";", size);
+ __prepare_stmt;
+
+ return pps;
+}
+
+sqlite3_stmt** Table::get_row_ordered(sqlite3* db, Column* order_by, int order,
+ uint32_t count, va_list args) {
+ __alloc_stmt_query;
+ strlcpy(query, "SELECT * FROM ", size);
+ __check_and_cat(m_name);
+ __check_and_cat(" WHERE 1");
+ this->where_va_columns(count, query, size, &used, args);
+ __check_and_cat(" ORDER BY ");
+ __check_and_cat(order_by->name());
+ __check_and_cat((order == ORDER_BY_DESC ? " DESC" : " ASC"));
+ strlcat(query, ";", size);
+ __prepare_stmt;
+
+ return pps;
+}
+
+sqlite3_stmt** Table::update_value(sqlite3* db, Column* value_column, uint32_t count, va_list args) {
+ __alloc_stmt_query;
+ strlcpy(query, "UPDATE ", size);
+ __check_and_cat(m_name);
+ __check_and_cat(" SET ");
+ __check_and_cat(value_column->name());
+ __check_and_cat("=? WHERE 1");
+ this->where_va_columns(count, query, size, &used, args);
+ strlcat(query, ";", size);
+ __prepare_stmt;
+
+ return pps;
+}
+
sqlite3_stmt** Table::del(sqlite3* db, uint32_t count, va_list args) {
__alloc_stmt_query;
strlcpy(query, "DELETE FROM ", size);
Modified: branches/PR-7489777/darwinup/Table.h
===================================================================
--- branches/PR-7489777/darwinup/Table.h 2010-03-01 21:28:59 UTC (rev 725)
+++ branches/PR-7489777/darwinup/Table.h 2010-03-01 23:16:58 UTC (rev 726)
@@ -58,7 +58,16 @@
int free_result(uint8_t* result);
/**
- * sql statement generators
+ * sql statement generators (cached on Table)
+ */
+ sqlite3_stmt* create(sqlite3* db);
+ sqlite3_stmt* count(sqlite3* db);
+ sqlite3_stmt* update(sqlite3* db);
+ sqlite3_stmt* insert(sqlite3* db);
+ sqlite3_stmt* del(sqlite3* db);
+
+ /**
+ * sql statement generators (cached by Database & libcache)
*
* - order is either ORDER_BY_ASC or ORDER_BY_DESC
* - count parameters should be the number of items in the va_list
@@ -71,8 +80,6 @@
* instead
*
*/
- sqlite3_stmt* create(sqlite3* db);
- sqlite3_stmt* count(sqlite3* db);
sqlite3_stmt** count(sqlite3* db, uint32_t count, va_list args);
sqlite3_stmt** get_column(sqlite3* db, Column* value_column,
uint32_t count, va_list args);
@@ -81,9 +88,6 @@
uint32_t count, va_list args);
sqlite3_stmt** update_value(sqlite3* db, Column* value_column,
uint32_t count, va_list args);
- sqlite3_stmt* update(sqlite3* db);
- sqlite3_stmt* insert(sqlite3* db);
- sqlite3_stmt* del(sqlite3* db);
sqlite3_stmt** del(sqlite3* db, uint32_t count, va_list args);
protected:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20100301/9be27857/attachment.html>
More information about the darwinbuild-changes
mailing list