[darwinbuild-changes] [722] branches/PR-7489777/darwinup
source_changes at macosforge.org
source_changes at macosforge.org
Wed Feb 24 10:50:59 PST 2010
Revision: 722
http://trac.macosforge.org/projects/darwinbuild/changeset/722
Author: wsiegrist at apple.com
Date: 2010-02-24 10:50:56 -0800 (Wed, 24 Feb 2010)
Log Message:
-----------
Convert __where_va_columns to a function
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-02-24 18:29:52 UTC (rev 721)
+++ branches/PR-7489777/darwinup/Table.cpp 2010-02-24 18:50:56 UTC (rev 722)
@@ -174,46 +174,14 @@
used = strlcat(query, text, size); \
}
-#define __where_va_columns \
- char tmpstr[256]; \
- char tmp_op = '='; \
- char op = '='; \
- char not_op = ' '; \
- int len; \
- for (uint32_t i=0; i < count; i++) { \
- Column* col = va_arg(args, Column*); \
- tmp_op = va_arg(args, int); \
- if (tmp_op == '!') { \
- not_op = tmp_op; \
- } else { \
- op = tmp_op; \
- } \
- va_arg(args, void*); \
- if (col->type() == SQLITE_BLOB) va_arg(args, uint32_t); \
- len = snprintf(tmpstr, 256, " AND %s%c%c?", col->name(), not_op, op); \
- if (len >= 255) { \
- fprintf(stderr, "Error: column name is too big (limit: 248): %s\n", col->name()); \
- return NULL; \
- } \
- used = strlcat(query, tmpstr, 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, tmpstr, size); \
- } \
- }
-
#define __prepare_stmt \
- int res = sqlite3_prepare_v2(db, query, size, &stmt, NULL); \
- free(query); \
- if (res != SQLITE_OK) { \
- fprintf(stderr, "Error: unable to prepare statement: %s\n", sqlite3_errmsg(db)); \
- return NULL; \
- }
+ int res = sqlite3_prepare_v2(db, query, size, &stmt, 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;
@@ -276,7 +244,7 @@
strlcpy(query, "SELECT count(*) FROM ", size);
__check_and_cat(m_name);
__check_and_cat(" WHERE 1");
- __where_va_columns;
+ this->where_va_columns(count, query, size, &used, args);
strlcat(query, ";", size);
__prepare_stmt;
@@ -290,7 +258,7 @@
__check_and_cat(" FROM ");
__check_and_cat(m_name);
__check_and_cat(" WHERE 1");
- __where_va_columns;
+ this->where_va_columns(count, query, size, &used, args);
strlcat(query, ";", size);
__prepare_stmt;
@@ -302,7 +270,7 @@
strlcpy(query, "SELECT * FROM ", size);
__check_and_cat(m_name);
__check_and_cat(" WHERE 1");
- __where_va_columns;
+ this->where_va_columns(count, query, size, &used, args);
strlcat(query, ";", size);
__prepare_stmt;
@@ -315,7 +283,7 @@
strlcpy(query, "SELECT * FROM ", size);
__check_and_cat(m_name);
__check_and_cat(" WHERE 1");
- __where_va_columns;
+ 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"));
@@ -333,7 +301,7 @@
__check_and_cat(" SET ");
__check_and_cat(value_column->name());
__check_and_cat("=? WHERE 1");
- __where_va_columns;
+ this->where_va_columns(count, query, size, &used, args);
strlcat(query, ";", size);
__prepare_stmt;
@@ -490,13 +458,51 @@
strlcpy(query, "DELETE FROM ", size);
__check_and_cat(m_name);
__check_and_cat(" WHERE 1");
- __where_va_columns;
+ this->where_va_columns(count, query, size, &used, args);
strlcat(query, ";", size);
__prepare_stmt;
return stmt;
}
+int Table::where_va_columns(uint32_t count, char* query, size_t size,
+ size_t* used, va_list args) {
+ char tmpstr[256];
+ char tmp_op = '=';
+ char op = '=';
+ char not_op = ' ';
+ int len;
+ for (uint32_t i=0; i < count; i++) {
+ Column* col = va_arg(args, Column*);
+ tmp_op = va_arg(args, int);
+ if (tmp_op == '!') {
+ not_op = tmp_op;
+ } else {
+ op = tmp_op;
+ }
+ va_arg(args, void*);
+ if (col->type() == SQLITE_BLOB) va_arg(args, uint32_t);
+ len = snprintf(tmpstr, 256, " AND %s%c%c?", col->name(), not_op, op);
+ if (len >= 255) {
+ fprintf(stderr, "Error: column name is too big (limit: 248): %s\n",
+ col->name());
+ return NULL;
+ }
+ *used = strlcat(query, tmpstr, size);
+ if (*used >= size-1) {
+ size *= 4;
+ query = (char*)realloc(query, size);
+ if (!query) {
+ fprintf(stderr, "Error: ran out of memory!\n");
+ return -1;
+ }
+ *used = strlcat(query, tmpstr, size);
+ }
+ }
+
+ return 0;
+}
+
const Column** Table::columns() {
return (const Column**)m_columns;
}
Modified: branches/PR-7489777/darwinup/Table.h
===================================================================
--- branches/PR-7489777/darwinup/Table.h 2010-02-24 18:29:52 UTC (rev 721)
+++ branches/PR-7489777/darwinup/Table.h 2010-02-24 18:50:56 UTC (rev 722)
@@ -88,6 +88,8 @@
protected:
+ int where_va_columns(uint32_t count, char* query, size_t size,
+ size_t* used, va_list args);
const Column** columns();
uint32_t column_count();
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20100224/305afd9b/attachment-0001.html>
More information about the darwinbuild-changes
mailing list