100
100
if (r1->value.string && *r1->value.string)
101
g_string_append_printf(string, "%s%s", r1->value.string, ((argc>1) && (i != argc-1)) ? " AND ":"");
101
g_string_append_printf (string, "%s%s", r1->value.string, ((argc > 1) && (i != argc - 1)) ? " AND ":"");
102
102
camel_sexp_result_free (f, r1);
104
g_string_append(string, " )");
104
g_string_append (string, " )");
105
105
r = camel_sexp_result_new (f, CAMEL_SEXP_RES_STRING);
107
107
if (strlen (string->str) == 4)
108
r->value.string = g_strdup("");
108
r->value.string = g_strdup ("");
110
110
r->value.string = string->str;
111
111
g_string_free (string, FALSE);
133
133
camel_sexp_result_free (f, r1);
136
g_string_append_printf(string, "%s%s", r1->value.string, ((argc>1) && (i != argc-1)) ? " OR ":"");
136
g_string_append_printf (string, "%s%s", r1->value.string, ((argc > 1) && (i != argc - 1)) ? " OR ":"");
137
137
camel_sexp_result_free (f, r1);
139
g_string_append(string, " )");
139
g_string_append (string, " )");
141
141
r = camel_sexp_result_new (f, CAMEL_SEXP_RES_STRING);
142
142
r->value.string = string->str;
161
161
if (g_strcmp0 (r1->value.string, "( (usertags LIKE '%completed-on 0%' AND usertags LIKE '%completed-on%') )") == 0)
162
162
r->value.string = g_strdup ("( (not (usertags LIKE '%completed-on 0%')) AND usertags LIKE '%completed-on%' )");
164
r->value.string = g_strdup_printf ("(NOT (%s))",
164
r->value.string = g_strdup_printf (
165
"(NOT (%s))", r1->value.string);
167
167
camel_sexp_result_free (f, r1);
181
181
r = camel_sexp_result_new (f, CAMEL_SEXP_RES_STRING);
184
GString *str = g_string_new("( ");
184
GString *str = g_string_new ("( ");
185
185
r1 = camel_sexp_term_eval (f, argv[0]);
186
186
r2 = camel_sexp_term_eval (f, argv[1]);
188
188
if (r1->type == CAMEL_SEXP_RES_INT)
189
g_string_append_printf(str, "%d", r1->value.number);
189
g_string_append_printf (str, "%d", r1->value.number);
190
190
else if (r1->type == CAMEL_SEXP_RES_TIME)
191
g_string_append_printf(str, "%ld", r1->value.time);
191
g_string_append_printf (str, "%ld", r1->value.time);
192
192
else if (r1->type == CAMEL_SEXP_RES_STRING)
193
g_string_append_printf(str, "%s", r1->value.string);
193
g_string_append_printf (str, "%s", r1->value.string);
195
if (!strstr(str->str, "completed-on") && !strstr(str->str, "follow-up")) {
195
if (!strstr (str->str, "completed-on") && !strstr (str->str, "follow-up")) {
196
196
gboolean ut = FALSE;
198
if (strstr(str->str, "usertags"))
198
if (strstr (str->str, "usertags"))
201
g_string_append_printf(str, " LIKE ");
201
g_string_append_printf (str, " LIKE ");
203
g_string_append_printf(str, " = ");
203
g_string_append_printf (str, " = ");
204
204
if (r2->type == CAMEL_SEXP_RES_INT)
205
g_string_append_printf(str, "%d", r2->value.number);
205
g_string_append_printf (str, "%d", r2->value.number);
206
206
if (r2->type == CAMEL_SEXP_RES_BOOL)
207
g_string_append_printf(str, "%d", r2->value.boolean);
207
g_string_append_printf (str, "%d", r2->value.boolean);
208
208
else if (r2->type == CAMEL_SEXP_RES_TIME)
209
g_string_append_printf(str, "%ld", r2->value.time);
209
g_string_append_printf (str, "%ld", r2->value.time);
210
210
else if (r2->type == CAMEL_SEXP_RES_STRING) {
211
gchar *tmp = g_strdup_printf("%c%s%c", ut ? '%':' ', r2->value.string, ut?'%':' ');
211
gchar *tmp = g_strdup_printf ("%c%s%c", ut ? '%':' ', r2->value.string, ut ? '%':' ');
212
212
gchar *safe = get_db_safe_string (tmp);
213
g_string_append_printf(str, "%s", safe);
213
g_string_append_printf (str, "%s", safe);
237
237
r = camel_sexp_result_new (f, CAMEL_SEXP_RES_STRING);
240
GString *str = g_string_new("( ");
240
GString *str = g_string_new ("( ");
241
241
r1 = camel_sexp_term_eval (f, argv[0]);
242
242
r2 = camel_sexp_term_eval (f, argv[1]);
244
244
if (r1->type == CAMEL_SEXP_RES_INT)
245
g_string_append_printf(str, "%d", r1->value.number);
245
g_string_append_printf (str, "%d", r1->value.number);
246
246
else if (r1->type == CAMEL_SEXP_RES_TIME)
247
g_string_append_printf(str, "%ld", r1->value.time);
247
g_string_append_printf (str, "%ld", r1->value.time);
248
248
else if (r1->type == CAMEL_SEXP_RES_STRING)
249
g_string_append_printf(str, "%s", r1->value.string);
249
g_string_append_printf (str, "%s", r1->value.string);
251
g_string_append_printf(str, " < ");
251
g_string_append_printf (str, " < ");
252
252
if (r2->type == CAMEL_SEXP_RES_INT)
253
g_string_append_printf(str, "%d", r2->value.number);
253
g_string_append_printf (str, "%d", r2->value.number);
254
254
if (r2->type == CAMEL_SEXP_RES_BOOL)
255
g_string_append_printf(str, "%d", r2->value.boolean);
255
g_string_append_printf (str, "%d", r2->value.boolean);
256
256
else if (r2->type == CAMEL_SEXP_RES_TIME)
257
g_string_append_printf(str, "%ld", r2->value.time);
257
g_string_append_printf (str, "%ld", r2->value.time);
258
258
else if (r2->type == CAMEL_SEXP_RES_STRING)
259
g_string_append_printf(str, "%s", r2->value.string);
259
g_string_append_printf (str, "%s", r2->value.string);
260
260
camel_sexp_result_free (f, r1);
261
261
camel_sexp_result_free (f, r2);
262
262
g_string_append (str, " )");
279
279
r = camel_sexp_result_new (f, CAMEL_SEXP_RES_STRING);
282
GString *str = g_string_new("( ");
282
GString *str = g_string_new ("( ");
283
283
r1 = camel_sexp_term_eval (f, argv[0]);
284
284
r2 = camel_sexp_term_eval (f, argv[1]);
286
286
if (r1->type == CAMEL_SEXP_RES_INT)
287
g_string_append_printf(str, "%d", r1->value.number);
287
g_string_append_printf (str, "%d", r1->value.number);
288
288
else if (r1->type == CAMEL_SEXP_RES_TIME)
289
g_string_append_printf(str, "%ld", r1->value.time);
289
g_string_append_printf (str, "%ld", r1->value.time);
290
290
else if (r1->type == CAMEL_SEXP_RES_STRING)
291
g_string_append_printf(str, "%s", r1->value.string);
291
g_string_append_printf (str, "%s", r1->value.string);
293
g_string_append_printf(str, " > ");
293
g_string_append_printf (str, " > ");
294
294
if (r2->type == CAMEL_SEXP_RES_INT)
295
g_string_append_printf(str, "%d", r2->value.number);
295
g_string_append_printf (str, "%d", r2->value.number);
296
296
if (r2->type == CAMEL_SEXP_RES_BOOL)
297
g_string_append_printf(str, "%d", r2->value.boolean);
297
g_string_append_printf (str, "%d", r2->value.boolean);
298
298
else if (r2->type == CAMEL_SEXP_RES_TIME)
299
g_string_append_printf(str, "%ld", r2->value.time);
299
g_string_append_printf (str, "%ld", r2->value.time);
300
300
else if (r2->type == CAMEL_SEXP_RES_STRING)
301
g_string_append_printf(str, "%s", r2->value.string);
301
g_string_append_printf (str, "%s", r2->value.string);
302
302
camel_sexp_result_free (f, r1);
303
303
camel_sexp_result_free (f, r2);
304
304
g_string_append (str, " )");
343
343
GString *str = g_string_new ("( ");
345
d(printf("executing match-threads: %d", argc));
345
d (printf ("executing match-threads: %d", argc));
347
347
for (i = 1; i < argc; i++) {
348
348
r = camel_sexp_term_eval (f, argv[i]);
349
g_string_append_printf(str, "%s%s", r->value.string, ((argc>1) && (i != argc-1)) ? " AND ":"");
349
g_string_append_printf (str, "%s%s", r->value.string, ((argc > 1) && (i != argc - 1)) ? " AND ":"");
350
350
camel_sexp_result_free (f, r);
497
497
CamelSExpResult *r;
499
d(printf("executing user-tag: %d", argc));
499
d (printf ("executing user-tag: %d", argc));
501
501
r = camel_sexp_result_new (f, CAMEL_SEXP_RES_STRING);
502
502
/* Hacks no otherway to fix these really :( */
503
503
if (g_strcmp0 (argv[0]->value.string, "completed-on") == 0)
504
r->value.string = g_strdup_printf("(usertags LIKE '%ccompleted-on 0%c' AND usertags LIKE '%ccompleted-on%c')", '%', '%', '%', '%');
504
r->value.string = g_strdup_printf ("(usertags LIKE '%ccompleted-on 0%c' AND usertags LIKE '%ccompleted-on%c')", '%', '%', '%', '%');
505
505
else if (g_strcmp0 (argv[0]->value.string, "follow-up") == 0)
506
r->value.string = g_strdup_printf("usertags NOT LIKE '%cfollow-up%c'", '%', '%');
506
r->value.string = g_strdup_printf ("usertags NOT LIKE '%cfollow-up%c'", '%', '%');
508
r->value.string = g_strdup("usertags");
508
r->value.string = g_strdup ("usertags");
519
519
CamelSExpResult *r;
520
520
gchar *tstr, *qstr;
522
d(printf("executing user-flag: %d", argc));
522
d (printf ("executing user-flag: %d", argc));
524
524
r = camel_sexp_result_new (f, CAMEL_SEXP_RES_STRING);
527
527
r->value.string = g_strdup ("(0)");
529
tstr = g_strdup_printf("%s", argv[0]->value.string);
529
tstr = g_strdup_printf ("%s", argv[0]->value.string);
530
530
qstr = get_db_safe_string (tstr);
532
r->value.string = g_strdup_printf("(labels MATCH %s)", qstr);
532
r->value.string = g_strdup_printf ("(labels MATCH %s)", qstr);
678
678
{ "and", (CamelSExpFunc) func_and, 1 },
679
679
{ "or", (CamelSExpFunc) func_or, 1},
680
680
{ "not", (CamelSExpFunc) func_not, 1},
681
{ "=", (CamelSExpFunc)eval_eq, 1},
682
{ ">", (CamelSExpFunc)eval_gt, 1},
683
{ "<", (CamelSExpFunc)eval_lt, 1},
681
{ "=", (CamelSExpFunc) eval_eq, 1},
682
{ ">", (CamelSExpFunc) eval_gt, 1},
683
{ "<", (CamelSExpFunc) eval_lt, 1},
685
{ "match-all", (CamelSExpFunc)match_all, 1 },
686
{ "match-threads", (CamelSExpFunc)match_threads, 1 },
685
{ "match-all", (CamelSExpFunc) match_all, 1 },
686
{ "match-threads", (CamelSExpFunc) match_threads, 1 },
687
687
/* { "body-contains", body_contains}, */ /* We don't store body on the db. */
688
688
{ "header-contains", header_contains, 0},
689
689
{ "header-has-words", header_has_words, 0},
724
724
camel_sexp_add_ifunction (sexp, 0, symbols[i].name,
725
725
(CamelSExpIFunc) symbols[i].func, NULL);
727
camel_sexp_add_function (sexp, 0, symbols[i].name,
728
symbols[i].func, NULL);
727
camel_sexp_add_function (
728
sexp, 0, symbols[i].name,
729
symbols[i].func, NULL);
731
732
camel_sexp_input_text (sexp, sql, strlen (sql));
869
870
for (i = 0; i < G_N_ELEMENTS (txt); i++) {
870
871
gchar *sql = NULL;
871
printf("Q: %s\n\"%c\"\n", txt[i], 40);
872
printf ("Q: %s\n\"%c\"\n", txt[i], 40);
872
873
sql = camel_sexp_to_sql_sexp (txt[i]);
873
printf("A: %s\n\n\n", sql);
874
printf ("A: %s\n\n\n", sql);