diff options
Diffstat (limited to 'deskutils/gnotime/files/patch-lib::qof::qofsql.c')
-rw-r--r-- | deskutils/gnotime/files/patch-lib::qof::qofsql.c | 323 |
1 files changed, 323 insertions, 0 deletions
diff --git a/deskutils/gnotime/files/patch-lib::qof::qofsql.c b/deskutils/gnotime/files/patch-lib::qof::qofsql.c new file mode 100644 index 000000000000..32bc566645bb --- /dev/null +++ b/deskutils/gnotime/files/patch-lib::qof::qofsql.c @@ -0,0 +1,323 @@ +--- lib/qof/qofsql.c.orig Sun May 23 16:58:28 2004 ++++ lib/qof/qofsql.c Thu Jul 8 00:11:24 2004 +@@ -133,8 +133,9 @@ + if (('\'' == str[0]) || + ('\"' == str[0])) + { ++ size_t len; + str ++; +- size_t len = strlen(str); ++ len = strlen(str); + str[len-1] = 0; + } + return str; +@@ -146,6 +147,15 @@ + char tmpbuff[128]; + GSList *param_list; + QofQueryPredData *pred_data = NULL; ++ sql_field_item * sparam; ++ char * qparam_name; ++ sql_field_item * svalue; ++ char * qvalue_name; ++ QofQueryCompare qop; ++ char *table_name; ++ char *param_name; ++ QofType param_type; ++ QofQuery *qq; + + if (NULL == cond) + { +@@ -161,14 +171,14 @@ + PWARN("missing left paramter"); + return NULL; + } +- sql_field_item * sparam = cond->d.pair.left->item; ++ sparam = cond->d.pair.left->item; + if (SQL_name != sparam->type) + { + PWARN("we support only paramter names at this time (parsed %d)", + sparam->type); + return NULL; + } +- char * qparam_name = sparam->d.name->data; ++ qparam_name = sparam->d.name->data; + if (NULL == qparam_name) + { + PWARN ("missing paramter name"); +@@ -183,13 +193,13 @@ + PWARN ("missing right paramter"); + return NULL; + } +- sql_field_item * svalue = cond->d.pair.right->item; ++ svalue = cond->d.pair.right->item; + if (SQL_name != svalue->type) + { + PWARN("we support only simple values (parsed as %d)", svalue->type); + return NULL; + } +- char * qvalue_name = svalue->d.name->data; ++ qvalue_name = svalue->d.name->data; + if (NULL == qvalue_name) + { + PWARN("missing value"); +@@ -202,16 +212,18 @@ + * If it is, look up the value. */ + if (0 == strncasecmp (qvalue_name, "kvp://", 6)) + { ++ KvpValue *kv; ++ KvpValueType kvt; + if (NULL == query->kvp_join) + { + PWARN ("missing kvp frame"); + return NULL; + } +- KvpValue *kv = kvp_frame_get_value (query->kvp_join, qvalue_name+5); ++ kv = kvp_frame_get_value (query->kvp_join, qvalue_name+5); + /* If there's no value, its not an error; + * we just don't do this predicate */ + if (!kv) return NULL; +- KvpValueType kvt = kvp_value_get_type (kv); ++ kvt = kvp_value_get_type (kv); + + tmpbuff[0] = 0x0; + qvalue_name = tmpbuff; +@@ -251,7 +263,6 @@ + param_list = qof_query_build_param_list (qparam_name, NULL); + + /* Get the where-term comparison operator */ +- QofQueryCompare qop; + switch (cond->op) + { + case SQL_eq: qop = QOF_COMPARE_EQUAL; break; +@@ -270,8 +281,6 @@ + /* OK, need to know the type of the thing being matched + * in order to build the correct predicate. Get the type + * from the object parameters. */ +- char *table_name; +- char *param_name; + get_table_and_param (qparam_name, &table_name, ¶m_name); + if (NULL == table_name) + { +@@ -290,7 +299,7 @@ + return NULL; + } + +- QofType param_type = qof_class_get_parameter_type (table_name, param_name); ++ param_type = qof_class_get_parameter_type (table_name, param_name); + if (!param_type) + { + PWARN ("The parameter \'%s\' on object \'%s\' is not known", +@@ -319,7 +328,7 @@ + } + else if (!strcmp (param_type, QOF_TYPE_INT64)) + { +- gint64 ival = atoll (qvalue_name); ++ gint64 ival = strtoll (qvalue_name, (char **)NULL, 10); + pred_data = qof_query_int64_predicate (qop, ival); + } + else if (!strcmp (param_type, QOF_TYPE_DOUBLE)) +@@ -337,16 +346,17 @@ + // XXX FIXME: this doesn't handle time strings, only date strings + // XXX should also see if we need to do a day-compare or time-compare. + /* work around highly bogus locale setting */ ++ time_t exact; ++ int rc; ++ Timespec ts; + qof_date_format_set(QOF_DATE_FORMAT_US); + +- time_t exact; +- int rc = qof_scan_date_secs (qvalue_name, &exact); ++ rc = qof_scan_date_secs (qvalue_name, &exact); + if (0 == rc) + { + PWARN ("unable to parse date: %s", qvalue_name); + return NULL; + } +- Timespec ts; + ts.tv_sec = exact; + ts.tv_nsec = 0; + pred_data = qof_query_date_predicate (qop, QOF_DATE_MATCH_DAY, ts); +@@ -367,7 +377,9 @@ + else if (!strcmp (param_type, QOF_TYPE_GUID)) + { + GUID guid; ++ QofGuidMatch gm; + gboolean rc = string_to_guid (qvalue_name, &guid); ++ GList *guid_list; + if (0 == rc) + { + PWARN ("unable to parse guid: %s", qvalue_name); +@@ -377,9 +389,9 @@ + // XXX less, than greater than don't make sense, + // should check for those bad conditions + +- QofGuidMatch gm = QOF_GUID_MATCH_ANY; ++ gm = QOF_GUID_MATCH_ANY; + if (QOF_COMPARE_NEQ == qop) gm = QOF_GUID_MATCH_NONE; +- GList *guid_list = g_list_append (NULL, &guid); ++ guid_list = g_list_append (NULL, &guid); + pred_data = qof_query_guid_predicate (gm, guid_list); + + g_list_free (guid_list); +@@ -390,11 +402,15 @@ + * /some/path/string:value + */ + char *sep = strchr (qvalue_name, ':'); ++ char * path; ++ char * str; ++ char * p; ++ KvpValue *kval = NULL; ++ int len; + if (!sep) return NULL; + *sep = 0; +- char * path = qvalue_name; +- char * str = sep +1; +- char * p; ++ path = qvalue_name; ++ str = sep +1; + /* If str has only digits, we know its a plain number. + * If its numbers and a decimal point, assume a float + * If its numbers and a slash, assume numeric +@@ -402,8 +418,7 @@ + * If it looks like an iso date ... + * else assume its a string. + */ +- KvpValue *kval = NULL; +- int len = strlen (str); ++ len = strlen (str); + if ((32 == len) && (32 == strspn (str, "0123456789abcdef"))) + { + GUID guid; +@@ -413,7 +428,7 @@ + else + if (len == strspn (str, "0123456789")) + { +- kval = kvp_value_new_gint64 (atoll(str)); ++ kval = kvp_value_new_gint64 (strtoll(str, (char **)NULL, 10)); + } + else + if ((p=strchr (str, '.')) && +@@ -455,7 +470,7 @@ + return NULL; + } + +- QofQuery *qq = qof_query_create(); ++ qq = qof_query_create(); + qof_query_add_term (qq, param_list, pred_data, QOF_QUERY_FIRST_TERM); + return qq; + } +@@ -471,9 +486,10 @@ + { + QofQuery *qleft = handle_where (query, swear->d.pair.left); + QofQuery *qright = handle_where (query, swear->d.pair.right); ++ QofQueryOp qop; ++ QofQuery * qq; + if (NULL == qleft) return qright; + if (NULL == qright) return qleft; +- QofQueryOp qop; + switch (swear->d.pair.op) + { + case SQL_and: qop = QOF_QUERY_AND; break; +@@ -484,7 +500,7 @@ + qof_query_destroy (qright); + return NULL; + } +- QofQuery * qq = qof_query_merge (qleft, qright, qop); ++ qq = qof_query_merge (qleft, qright, qop); + qof_query_destroy (qleft); + qof_query_destroy (qright); + return qq; +@@ -511,11 +527,11 @@ + static void + handle_sort_order (QofSqlQuery *query, GList *sorder_list) + { +- if (!sorder_list) return; +- + GSList *qsp[3]; + gboolean direction[3]; + int i; ++ if (!sorder_list) return; ++ + + for (i=0; i<3; i++) + { +@@ -524,14 +540,15 @@ + + if (sorder_list) + { ++ char * qparam_name = NULL; ++ GList *n; + sql_order_field *sorder = sorder_list->data; + + /* Set the sort direction */ + if (SQL_asc == sorder->order_type) direction[i] = TRUE; + + /* Find the paramter name */ +- char * qparam_name = NULL; +- GList *n = sorder->name; ++ n = sorder->name; + if (n) + { + qparam_name = n->data; +@@ -559,6 +576,9 @@ + void + qof_sql_query_parse (QofSqlQuery *query, const char *str) + { ++ GList *tables; ++ sql_select_statement *sss; ++ sql_where * swear; + if (!query) return; + + /* Delete old query, if any */ +@@ -590,14 +610,14 @@ + * user wrote "SELECT * FROM tableA, tableB WHERE ..." + * then we don't have a single unique table-name. + */ +- GList *tables = sql_statement_get_tables (query->parse_result); ++ tables = sql_statement_get_tables (query->parse_result); + if (1 == g_list_length (tables)) + { + query->single_global_tablename = tables->data; + } + +- sql_select_statement *sss = query->parse_result->statement; +- sql_where * swear = sss->where; ++ sss = query->parse_result->statement; ++ swear = sss->where; + if (swear) + { + /* Walk over the where terms, turn them into QOF predicates */ +@@ -626,6 +646,7 @@ + qof_sql_query_run (QofSqlQuery *query, const char *str) + { + GList *node; ++ GList *results; + + if (!query) return NULL; + +@@ -635,7 +656,7 @@ + qof_query_set_book (query->qof_query, query->book); + + // qof_query_print (query->qof_query); +- GList *results = qof_query_run (query->qof_query); ++ results = qof_query_run (query->qof_query); + + return results; + } +@@ -644,6 +665,7 @@ + qof_sql_query_rerun (QofSqlQuery *query) + { + GList *node; ++ GList *results; + + if (!query) return NULL; + +@@ -652,7 +674,7 @@ + qof_query_set_book (query->qof_query, query->book); + + // qof_query_print (query->qof_query); +- GList *results = qof_query_run (query->qof_query); ++ results = qof_query_run (query->qof_query); + + return results; + } |