aboutsummaryrefslogtreecommitdiff
path: root/deskutils/gnotime/files/patch-lib::qof::qofsql.c
diff options
context:
space:
mode:
Diffstat (limited to 'deskutils/gnotime/files/patch-lib::qof::qofsql.c')
-rw-r--r--deskutils/gnotime/files/patch-lib::qof::qofsql.c323
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, &param_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;
+ }