IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 13, 2005, 12:09:46 PM (21 years ago)
Author:
jhoblitt
Message:

rework string handling to take advantage of the improved psStringAppend() & psStringPrepend()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/archive/psdb/psDB.c

    r3207 r3208  
    88 *  @author Joshua Hoblitt
    99 *
    10  *  @version $Revision: 1.19 $ $Name: not supported by cvs2svn $
    11  *  @date $Date: 2005-02-13 19:55:53 $
     10 *  @version $Revision: 1.20 $ $Name: not supported by cvs2svn $
     11 *  @date $Date: 2005-02-13 22:09:46 $
    1212 *
    1313 *  Copyright 2005 Joshua Hoblitt, University of Hawaii
     
    5252static char    *psDBIntToString(psU64 n);
    5353static ssize_t  psStringAppend(char **dest, const char *format, ...);
    54 static ssize_t psStringPrepend(char **dest, const char *format, ...);
     54static ssize_t  psStringPrepend(char **dest, const char *format, ...);
    5555
    5656// database utility functions
     
    111111bool psDBCreate(psDB *dbh, const char *dbname)
    112112{
    113     char            *query;
     113    char            *query = NULL;
    114114    bool            status;
    115115   
    116     // init query with a psMemBlock
    117     query = psStringCopy("CREATE DATABASE ");
    118 
    119     psStringAppend(&query, dbname);
     116    psStringAppend(&query, "CREATE DATABASE %s", dbname);
    120117
    121118    // the MySQL C API notes that mysql_create_db() is deprecated
     
    140137bool psDBDrop(psDB *dbh, const char *dbname)
    141138{
    142     char            *query;
     139    char            *query = NULL;
    143140    bool            status;
    144141   
    145     // init query with a psMemBlock
    146     query = psStringCopy("DROP DATABASE ");
    147 
    148     psStringAppend(&query, dbname);
     142    psStringAppend(&query, "DROP DATABASE %s", dbname);
    149143   
    150144    // the MySQL C API notes that mysql_drop_db() is deprecated
     
    175169bool psDBDropTable(psDB *dbh, const char *tableName)
    176170{
    177     char            *query;
     171    char            *query = NULL;
    178172    bool            status;
    179173
    180     // init query with a psMemBlock
    181     query = psStringCopy("DROP TABLE ");
    182 
    183     psStringAppend(&query, tableName);
     174    psStringAppend(&query, "DROP TABLE %s", tableName);
    184175
    185176    status = psDBRunQuery(dbh, query);
     
    779770static char *psDBGenerateUpdateRowSQL(const char *tableName, psMetadata *where, psMetadata *values)
    780771{
    781     char            *query;
    782     char            *string;
     772    char            *query = NULL;
     773    char            *setSQL;
     774    char            *whereSQL;
    783775
    784776    if ((!values) || (!where)) {
     
    786778    }
    787779
    788     // init query with a psMemBlock
    789     query = psStringCopy("UPDATE ");
    790     psStringAppend(&query, tableName);
    791 
    792     string = psDBGenerateSetSQL(values);
    793     if (!string) {
     780    setSQL = psDBGenerateSetSQL(values);
     781    if (!setSQL) {
    794782        return NULL;
    795783    }
    796     psStringAppend(&query, " ");
    797     psStringAppend(&query, string);
    798     psFree(string);
    799 
    800     string = psDBGenerateWhereSQL(where);
    801     if (!string) {
     784
     785    whereSQL = psDBGenerateWhereSQL(where);
     786    if (!whereSQL) {
    802787        return NULL;
    803788    }
    804     psStringAppend(&query, " ");
    805     psStringAppend(&query, string);
    806     psFree(string);
     789
     790    psStringAppend(&query, "UPDATE %s %s %s", tableName, setSQL, whereSQL);
     791    psFree(setSQL);
     792    psFree(whereSQL);
    807793
    808794    return query;
     
    811797static char *psDBGenerateInsertRowSQL(const char *tableName, psMetadata *row)
    812798{
    813     char            *query;
     799    char            *query = NULL;
    814800    psListIterator  *cursor;
    815801    psMetadataItem  *item;
    816802
    817     // init query with a psMemBlock
    818     query = psStringCopy("INSERT INTO ");
    819     psStringAppend(&query, tableName);
    820     psStringAppend(&query, " (");
     803    psStringAppend(&query, "INSERT INTO %s (", tableName);
    821804
    822805    cursor = psListIteratorAlloc(row->list, 0);
     
    857840static char *psDBGenerateWhereSQL(psMetadata *where)
    858841{
    859     char            *query;
     842    char            *query = NULL;
    860843    psListIterator  *cursor;
    861844    psMetadataItem  *item;
     
    865848    }
    866849
    867     // init query with a psMemBlock
    868850    query = psStringCopy("WHERE ");
    869851
     
    875857        if (item->type == PS_META_STR) {
    876858            // + column name + _ + like + _ + ' + value + '
    877             psStringAppend(&query, item->name);
    878859            if (*(char *)item->data.V == '\0') {
    879                 psStringAppend(&query, " IS NULL");
     860                psStringAppend(&query, "%s IS NULL", item->name);
    880861            } else {
    881                 psStringAppend(&query, " LIKE '");
    882                 psStringAppend(&query, item->data.V);
    883                 psStringAppend(&query, "'");
     862                psStringAppend(&query, "%s LIKE '%s'", item->name, item->data.V);
    884863            }
    885864        } else {
     
    904883static char *psDBGenerateSetSQL(psMetadata *set)
    905884{
    906     char            *query;
     885    char            *query = NULL;
    907886    psListIterator  *cursor;
    908887    psMetadataItem  *item;
    909888
    910     // init query with a psMemBlock
     889    if (!set) {
     890        return NULL;
     891    }
     892
    911893    query = psStringCopy("SET ");
    912894
     
    916898    while ((item = psListGetNext(cursor))) {
    917899        // + column name + _ + = + _ + ?
    918         psStringAppend(&query, item->name);
    919         psStringAppend(&query, " = ?");
     900        psStringAppend(&query, "%s = ?", item->name);
    920901
    921902        // + ", " after every column declaration except the last one
     
    932913static char *psDBGenerateCreateTableSQL(const char *tableName, psMetadata *table)
    933914{
     915    char            *query = NULL;      // complete query
    934916    psMetadataItem  *item;              // column description
    935917    psListIterator  *cursor;            // column iterator
    936918    psHash          *colType;           // type lookup table
    937     char            *query;             // complete query
    938919    char            *key;               // hash tmp variable
    939920    char            *value;             // hash tmp variable
    940921
    941     // init query with a psMemBlock
    942     query = psStringCopy("CREATE TABLE");
     922    if (!table) {
     923        return NULL;
     924    }
    943925
    944926    // + _ + tableName + _ + (
    945     psStringAppend(&query, " ");
    946     psStringAppend(&query, tableName);
    947     psStringAppend(&query, " (");
     927    psStringAppend(&query, "CREATE TABLE %s (", tableName);
    948928
    949929    colType = psDBGetPSToSQLTable();
     
    953933    // find column name and type
    954934    while ((item = psListGetNext(cursor))) {
    955         // + column name + _
    956         psStringAppend(&query, item->name);
    957         psStringAppend(&query, " ");
    958 
    959935        if (item->type == PS_META_PRIMITIVE) {
    960936            // lookup SQL column type
     
    963939            psFree(key);
    964940
    965             // + column type
    966             psStringAppend(&query, value);
     941            // + column name + _ + column type
     942            psStringAppend(&query, "%s %s", item->name, value);
    967943        } else if ((item->type == PS_META_STR) && (item->pType == PS_TYPE_PTR)) {
    968             // + varchar( + length + )
    969             psStringAppend(&query, "varchar(");
    970             psStringAppend(&query, item->data.V);
    971             psStringAppend(&query, ")");
     944            // + column name + _ + varchar( + length + )
     945            psStringAppend(&query, "%s VARCHAR(%s)", item->name, item->data.V);
    972946        } else {
    973947            // error, invalid type
     948            psFree(query);
     949            psFree(cursor);
     950
    974951            return NULL;
    975952        }
     
    988965    while ((item = psListGetNext(cursor))) {
    989966        if ((strncmp(item->comment, "Primary Key", strlen("Primary Key"))) == 0) {
    990             psStringAppend(&query, ", PRIMARY KEY(");
    991             psStringAppend(&query, item->name);
    992             psStringAppend(&query, ")");
     967            psStringAppend(&query, ", PRIMARY KEY(%s)", item->name);
    993968        } else if ((strncmp(item->comment, "Key", strlen("Key"))) == 0) {
    994             psStringAppend(&query, ", KEY(");
    995             psStringAppend(&query, item->name);
    996             psStringAppend(&query, ")");
     969            psStringAppend(&query, ", KEY(%s)", item->name);
    997970        }
    998971    }
     
    1008981static char *psDBGenerateSelectColumnSQL(const char *tableName, const char *col, const psU64 limit)
    1009982{
    1010     char            *query;
     983    char            *query = NULL;
    1011984    char            *limitString;
    1012985
    1013     // init query with a psMemBlock
    1014     query = psStringCopy("SELECT ");
    1015     psStringAppend(&query, col);
    1016     psStringAppend(&query, " FROM ");
    1017     psStringAppend(&query, tableName);
     986    psStringAppend(&query, "SELECT %s FROM %s", col, tableName);
    1018987
    1019988    // treat limit == 0 as "no limit"
    1020989    if (limit) {
    1021         psStringAppend(&query, " LIMIT ");
    1022990        limitString = psDBIntToString(limit);
    1023         psStringAppend(&query, limitString);
     991        psStringAppend(&query, " LIMIT %s", limitString);
    1024992        psFree(limitString);
    1025993    }
     
    1030998static char *psDBGenerateSelectRowsSQL(const char *tableName, psMetadata *where)
    1031999{
    1032     char            *query;
    1033     char            *string;
    1034 
    1035     // init query with a psMemBlock
    1036     query = psStringCopy("SELECT * FROM ");
    1037     psStringAppend(&query, tableName);
     1000    char            *query = NULL;
     1001    char            *whereSQL;
     1002
     1003    psStringAppend(&query, "SELECT * FROM %s", tableName);
    10381004
    10391005    // select everything if where is NULL
    10401006    if (where) {
    1041         psStringAppend(&query, " ");
    1042 
    1043         string = psDBGenerateWhereSQL(where);
    1044         if (!string) {
     1007        whereSQL = psDBGenerateWhereSQL(where);
     1008        if (!whereSQL) {
    10451009            psFree(query);
    10461010
    10471011            return NULL;
    10481012        }
    1049         psStringAppend(&query, string);
    1050         psFree(string);
     1013        psStringAppend(&query, " %s", whereSQL);
     1014        psFree(whereSQL);
    10511015    }
    10521016
Note: See TracChangeset for help on using the changeset viewer.