[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