Changeset 3208 for trunk/archive/psdb/psDB.c
- Timestamp:
- Feb 13, 2005, 12:09:46 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/archive/psdb/psDB.c (modified) (19 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/archive/psdb/psDB.c
r3207 r3208 8 8 * @author Joshua Hoblitt 9 9 * 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 $ 12 12 * 13 13 * Copyright 2005 Joshua Hoblitt, University of Hawaii … … 52 52 static char *psDBIntToString(psU64 n); 53 53 static ssize_t psStringAppend(char **dest, const char *format, ...); 54 static ssize_t psStringPrepend(char **dest, const char *format, ...);54 static ssize_t psStringPrepend(char **dest, const char *format, ...); 55 55 56 56 // database utility functions … … 111 111 bool psDBCreate(psDB *dbh, const char *dbname) 112 112 { 113 char *query ;113 char *query = NULL; 114 114 bool status; 115 115 116 // init query with a psMemBlock 117 query = psStringCopy("CREATE DATABASE "); 118 119 psStringAppend(&query, dbname); 116 psStringAppend(&query, "CREATE DATABASE %s", dbname); 120 117 121 118 // the MySQL C API notes that mysql_create_db() is deprecated … … 140 137 bool psDBDrop(psDB *dbh, const char *dbname) 141 138 { 142 char *query ;139 char *query = NULL; 143 140 bool status; 144 141 145 // init query with a psMemBlock 146 query = psStringCopy("DROP DATABASE "); 147 148 psStringAppend(&query, dbname); 142 psStringAppend(&query, "DROP DATABASE %s", dbname); 149 143 150 144 // the MySQL C API notes that mysql_drop_db() is deprecated … … 175 169 bool psDBDropTable(psDB *dbh, const char *tableName) 176 170 { 177 char *query ;171 char *query = NULL; 178 172 bool status; 179 173 180 // init query with a psMemBlock 181 query = psStringCopy("DROP TABLE "); 182 183 psStringAppend(&query, tableName); 174 psStringAppend(&query, "DROP TABLE %s", tableName); 184 175 185 176 status = psDBRunQuery(dbh, query); … … 779 770 static char *psDBGenerateUpdateRowSQL(const char *tableName, psMetadata *where, psMetadata *values) 780 771 { 781 char *query; 782 char *string; 772 char *query = NULL; 773 char *setSQL; 774 char *whereSQL; 783 775 784 776 if ((!values) || (!where)) { … … 786 778 } 787 779 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) { 794 782 return NULL; 795 783 } 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) { 802 787 return NULL; 803 788 } 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); 807 793 808 794 return query; … … 811 797 static char *psDBGenerateInsertRowSQL(const char *tableName, psMetadata *row) 812 798 { 813 char *query ;799 char *query = NULL; 814 800 psListIterator *cursor; 815 801 psMetadataItem *item; 816 802 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); 821 804 822 805 cursor = psListIteratorAlloc(row->list, 0); … … 857 840 static char *psDBGenerateWhereSQL(psMetadata *where) 858 841 { 859 char *query ;842 char *query = NULL; 860 843 psListIterator *cursor; 861 844 psMetadataItem *item; … … 865 848 } 866 849 867 // init query with a psMemBlock868 850 query = psStringCopy("WHERE "); 869 851 … … 875 857 if (item->type == PS_META_STR) { 876 858 // + column name + _ + like + _ + ' + value + ' 877 psStringAppend(&query, item->name);878 859 if (*(char *)item->data.V == '\0') { 879 psStringAppend(&query, " IS NULL");860 psStringAppend(&query, "%s IS NULL", item->name); 880 861 } 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); 884 863 } 885 864 } else { … … 904 883 static char *psDBGenerateSetSQL(psMetadata *set) 905 884 { 906 char *query ;885 char *query = NULL; 907 886 psListIterator *cursor; 908 887 psMetadataItem *item; 909 888 910 // init query with a psMemBlock 889 if (!set) { 890 return NULL; 891 } 892 911 893 query = psStringCopy("SET "); 912 894 … … 916 898 while ((item = psListGetNext(cursor))) { 917 899 // + column name + _ + = + _ + ? 918 psStringAppend(&query, item->name); 919 psStringAppend(&query, " = ?"); 900 psStringAppend(&query, "%s = ?", item->name); 920 901 921 902 // + ", " after every column declaration except the last one … … 932 913 static char *psDBGenerateCreateTableSQL(const char *tableName, psMetadata *table) 933 914 { 915 char *query = NULL; // complete query 934 916 psMetadataItem *item; // column description 935 917 psListIterator *cursor; // column iterator 936 918 psHash *colType; // type lookup table 937 char *query; // complete query938 919 char *key; // hash tmp variable 939 920 char *value; // hash tmp variable 940 921 941 // init query with a psMemBlock 942 query = psStringCopy("CREATE TABLE"); 922 if (!table) { 923 return NULL; 924 } 943 925 944 926 // + _ + tableName + _ + ( 945 psStringAppend(&query, " "); 946 psStringAppend(&query, tableName); 947 psStringAppend(&query, " ("); 927 psStringAppend(&query, "CREATE TABLE %s (", tableName); 948 928 949 929 colType = psDBGetPSToSQLTable(); … … 953 933 // find column name and type 954 934 while ((item = psListGetNext(cursor))) { 955 // + column name + _956 psStringAppend(&query, item->name);957 psStringAppend(&query, " ");958 959 935 if (item->type == PS_META_PRIMITIVE) { 960 936 // lookup SQL column type … … 963 939 psFree(key); 964 940 965 // + column type966 psStringAppend(&query, value);941 // + column name + _ + column type 942 psStringAppend(&query, "%s %s", item->name, value); 967 943 } 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); 972 946 } else { 973 947 // error, invalid type 948 psFree(query); 949 psFree(cursor); 950 974 951 return NULL; 975 952 } … … 988 965 while ((item = psListGetNext(cursor))) { 989 966 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); 993 968 } 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); 997 970 } 998 971 } … … 1008 981 static char *psDBGenerateSelectColumnSQL(const char *tableName, const char *col, const psU64 limit) 1009 982 { 1010 char *query ;983 char *query = NULL; 1011 984 char *limitString; 1012 985 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); 1018 987 1019 988 // treat limit == 0 as "no limit" 1020 989 if (limit) { 1021 psStringAppend(&query, " LIMIT ");1022 990 limitString = psDBIntToString(limit); 1023 psStringAppend(&query, limitString);991 psStringAppend(&query, " LIMIT %s", limitString); 1024 992 psFree(limitString); 1025 993 } … … 1030 998 static char *psDBGenerateSelectRowsSQL(const char *tableName, psMetadata *where) 1031 999 { 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); 1038 1004 1039 1005 // select everything if where is NULL 1040 1006 if (where) { 1041 psStringAppend(&query, " "); 1042 1043 string = psDBGenerateWhereSQL(where); 1044 if (!string) { 1007 whereSQL = psDBGenerateWhereSQL(where); 1008 if (!whereSQL) { 1045 1009 psFree(query); 1046 1010 1047 1011 return NULL; 1048 1012 } 1049 psStringAppend(&query, string);1050 psFree( string);1013 psStringAppend(&query, " %s", whereSQL); 1014 psFree(whereSQL); 1051 1015 } 1052 1016
Note:
See TracChangeset
for help on using the changeset viewer.
