Index: /trunk/archive/psdb/psDB.c
===================================================================
--- /trunk/archive/psdb/psDB.c	(revision 3207)
+++ /trunk/archive/psdb/psDB.c	(revision 3208)
@@ -8,6 +8,6 @@
  *  @author Joshua Hoblitt
  *
- *  @version $Revision: 1.19 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-02-13 19:55:53 $
+ *  @version $Revision: 1.20 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-02-13 22:09:46 $
  *
  *  Copyright 2005 Joshua Hoblitt, University of Hawaii
@@ -52,5 +52,5 @@
 static char    *psDBIntToString(psU64 n);
 static ssize_t  psStringAppend(char **dest, const char *format, ...);
-static ssize_t psStringPrepend(char **dest, const char *format, ...);
+static ssize_t  psStringPrepend(char **dest, const char *format, ...);
 
 // database utility functions
@@ -111,11 +111,8 @@
 bool psDBCreate(psDB *dbh, const char *dbname)
 {
-    char            *query;
+    char            *query = NULL;
     bool            status;
     
-    // init query with a psMemBlock
-    query = psStringCopy("CREATE DATABASE ");
-
-    psStringAppend(&query, dbname);
+    psStringAppend(&query, "CREATE DATABASE %s", dbname);
 
     // the MySQL C API notes that mysql_create_db() is deprecated
@@ -140,11 +137,8 @@
 bool psDBDrop(psDB *dbh, const char *dbname)
 {
-    char            *query;
+    char            *query = NULL;
     bool            status;
     
-    // init query with a psMemBlock
-    query = psStringCopy("DROP DATABASE ");
-
-    psStringAppend(&query, dbname);
+    psStringAppend(&query, "DROP DATABASE %s", dbname);
     
     // the MySQL C API notes that mysql_drop_db() is deprecated
@@ -175,11 +169,8 @@
 bool psDBDropTable(psDB *dbh, const char *tableName)
 {
-    char            *query;
+    char            *query = NULL;
     bool            status;
 
-    // init query with a psMemBlock
-    query = psStringCopy("DROP TABLE ");
-
-    psStringAppend(&query, tableName);
+    psStringAppend(&query, "DROP TABLE %s", tableName);
 
     status = psDBRunQuery(dbh, query);
@@ -779,6 +770,7 @@
 static char *psDBGenerateUpdateRowSQL(const char *tableName, psMetadata *where, psMetadata *values)
 {
-    char            *query;
-    char            *string;
+    char            *query = NULL;
+    char            *setSQL;
+    char            *whereSQL;
 
     if ((!values) || (!where)) {
@@ -786,23 +778,17 @@
     }
 
-    // init query with a psMemBlock
-    query = psStringCopy("UPDATE ");
-    psStringAppend(&query, tableName);
-
-    string = psDBGenerateSetSQL(values);
-    if (!string) {
+    setSQL = psDBGenerateSetSQL(values);
+    if (!setSQL) {
         return NULL;
     }
-    psStringAppend(&query, " ");
-    psStringAppend(&query, string);
-    psFree(string);
-
-    string = psDBGenerateWhereSQL(where);
-    if (!string) {
+
+    whereSQL = psDBGenerateWhereSQL(where);
+    if (!whereSQL) {
         return NULL;
     }
-    psStringAppend(&query, " ");
-    psStringAppend(&query, string);
-    psFree(string);
+
+    psStringAppend(&query, "UPDATE %s %s %s", tableName, setSQL, whereSQL);
+    psFree(setSQL);
+    psFree(whereSQL);
 
     return query;
@@ -811,12 +797,9 @@
 static char *psDBGenerateInsertRowSQL(const char *tableName, psMetadata *row)
 {
-    char            *query;
+    char            *query = NULL;
     psListIterator  *cursor;
     psMetadataItem  *item;
 
-    // init query with a psMemBlock
-    query = psStringCopy("INSERT INTO ");
-    psStringAppend(&query, tableName);
-    psStringAppend(&query, " (");
+    psStringAppend(&query, "INSERT INTO %s (", tableName);
 
     cursor = psListIteratorAlloc(row->list, 0);
@@ -857,5 +840,5 @@
 static char *psDBGenerateWhereSQL(psMetadata *where)
 {
-    char            *query;
+    char            *query = NULL;
     psListIterator  *cursor;
     psMetadataItem  *item;
@@ -865,5 +848,4 @@
     }
 
-    // init query with a psMemBlock
     query = psStringCopy("WHERE ");
 
@@ -875,11 +857,8 @@
         if (item->type == PS_META_STR) {
             // + column name + _ + like + _ + ' + value + '
-            psStringAppend(&query, item->name);
             if (*(char *)item->data.V == '\0') {
-                psStringAppend(&query, " IS NULL");
+                psStringAppend(&query, "%s IS NULL", item->name);
             } else {
-                psStringAppend(&query, " LIKE '");
-                psStringAppend(&query, item->data.V);
-                psStringAppend(&query, "'");
+                psStringAppend(&query, "%s LIKE '%s'", item->name, item->data.V);
             }
         } else {
@@ -904,9 +883,12 @@
 static char *psDBGenerateSetSQL(psMetadata *set)
 {
-    char            *query;
+    char            *query = NULL;
     psListIterator  *cursor;
     psMetadataItem  *item;
 
-    // init query with a psMemBlock
+    if (!set) {
+        return NULL;
+    }
+
     query = psStringCopy("SET ");
 
@@ -916,6 +898,5 @@
     while ((item = psListGetNext(cursor))) {
         // + column name + _ + = + _ + ?
-        psStringAppend(&query, item->name);
-        psStringAppend(&query, " = ?");
+        psStringAppend(&query, "%s = ?", item->name);
 
         // + ", " after every column declaration except the last one
@@ -932,18 +913,17 @@
 static char *psDBGenerateCreateTableSQL(const char *tableName, psMetadata *table)
 {
+    char            *query = NULL;      // complete query
     psMetadataItem  *item;              // column description
     psListIterator  *cursor;            // column iterator
     psHash          *colType;           // type lookup table
-    char            *query;             // complete query
     char            *key;               // hash tmp variable
     char            *value;             // hash tmp variable
 
-    // init query with a psMemBlock
-    query = psStringCopy("CREATE TABLE");
+    if (!table) {
+        return NULL;
+    }
 
     // + _ + tableName + _ + (
-    psStringAppend(&query, " ");
-    psStringAppend(&query, tableName);
-    psStringAppend(&query, " (");
+    psStringAppend(&query, "CREATE TABLE %s (", tableName);
 
     colType = psDBGetPSToSQLTable();
@@ -953,8 +933,4 @@
     // find column name and type
     while ((item = psListGetNext(cursor))) {
-        // + column name + _
-        psStringAppend(&query, item->name);
-        psStringAppend(&query, " ");
-
         if (item->type == PS_META_PRIMITIVE) {
             // lookup SQL column type
@@ -963,13 +939,14 @@
             psFree(key);
 
-            // + column type
-            psStringAppend(&query, value);
+            // + column name + _ + column type
+            psStringAppend(&query, "%s %s", item->name, value);
         } else if ((item->type == PS_META_STR) && (item->pType == PS_TYPE_PTR)) {
-            // + varchar( + length + )
-            psStringAppend(&query, "varchar(");
-            psStringAppend(&query, item->data.V);
-            psStringAppend(&query, ")");
+            // + column name + _ + varchar( + length + )
+            psStringAppend(&query, "%s VARCHAR(%s)", item->name, item->data.V);
         } else {
             // error, invalid type
+            psFree(query);
+            psFree(cursor);
+
             return NULL;
         }
@@ -988,11 +965,7 @@
     while ((item = psListGetNext(cursor))) {
         if ((strncmp(item->comment, "Primary Key", strlen("Primary Key"))) == 0) {
-            psStringAppend(&query, ", PRIMARY KEY(");
-            psStringAppend(&query, item->name);
-            psStringAppend(&query, ")");
+            psStringAppend(&query, ", PRIMARY KEY(%s)", item->name);
         } else if ((strncmp(item->comment, "Key", strlen("Key"))) == 0) {
-            psStringAppend(&query, ", KEY(");
-            psStringAppend(&query, item->name);
-            psStringAppend(&query, ")");
+            psStringAppend(&query, ", KEY(%s)", item->name);
         }
     }
@@ -1008,18 +981,13 @@
 static char *psDBGenerateSelectColumnSQL(const char *tableName, const char *col, const psU64 limit)
 {
-    char            *query;
+    char            *query = NULL;
     char            *limitString;
 
-    // init query with a psMemBlock
-    query = psStringCopy("SELECT ");
-    psStringAppend(&query, col);
-    psStringAppend(&query, " FROM ");
-    psStringAppend(&query, tableName);
+    psStringAppend(&query, "SELECT %s FROM %s", col, tableName);
 
     // treat limit == 0 as "no limit"
     if (limit) {
-        psStringAppend(&query, " LIMIT ");
         limitString = psDBIntToString(limit);
-        psStringAppend(&query, limitString);
+        psStringAppend(&query, " LIMIT %s", limitString);
         psFree(limitString);
     }
@@ -1030,23 +998,19 @@
 static char *psDBGenerateSelectRowsSQL(const char *tableName, psMetadata *where)
 {
-    char            *query;
-    char            *string;
-
-    // init query with a psMemBlock
-    query = psStringCopy("SELECT * FROM ");
-    psStringAppend(&query, tableName);
+    char            *query = NULL;
+    char            *whereSQL;
+
+    psStringAppend(&query, "SELECT * FROM %s", tableName);
 
     // select everything if where is NULL
     if (where) {
-        psStringAppend(&query, " ");
-
-        string = psDBGenerateWhereSQL(where);
-        if (!string) {
+        whereSQL = psDBGenerateWhereSQL(where);
+        if (!whereSQL) {
             psFree(query);
 
             return NULL;
         }
-        psStringAppend(&query, string);
-        psFree(string);
+        psStringAppend(&query, " %s", whereSQL);
+        psFree(whereSQL);
     }
 
