time_t t;
struct tm *tmp;
char buf1[64];
+ bstring q = NULL, search = NULL, replace = NULL;
for (p = spotlight_sparql_map; p->ssm_spotlight_attr; p++) {
if (strcmp(p->ssm_spotlight_attr, attr) == 0) {
result = talloc_asprintf(ssp_slq, "?obj %s '%s'", p->ssm_sparql_attr, val);
break;
case ssmt_num:
- result = talloc_asprintf(ssp_slq, "?obj %s ?%c FILTER(?%c %c '%s')",
+ result = talloc_asprintf(ssp_slq, "?obj %s ?%c FILTER(?%c %c%c '%s')",
p->ssm_sparql_attr,
sparqlvar,
sparqlvar,
op,
+ op == '!' ? '=' : ' ', /* append '=' to '!' */
val);
sparqlvar++;
break;
case ssmt_str:
+ q = bformat("^%s$", val);
+ search = bfromcstr("*");
+ replace = bfromcstr(".*");
+ bfindreplace(q, search, replace, 0);
result = talloc_asprintf(ssp_slq, "?obj %s ?%c FILTER(regex(?%c, '%s'))",
p->ssm_sparql_attr,
sparqlvar,
sparqlvar,
- val);
+ bdata(q));
sparqlvar++;
break;
case ssmt_fts:
}
EC_CLEANUP:
+ if (q)
+ bdestroy(q);
+ if (search)
+ bdestroy(search);
+ if (replace)
+ bdestroy(replace);
return result;
}