-/* $Id: cqltransform.c,v 1.29 2007-10-31 21:58:07 adam Exp $
+/* $Id: cqltransform.c,v 1.32 2008-01-06 19:34:34 adam Exp $
Copyright (C) 1995-2007, Index Data ApS
Index Data Aps
{
if (!res)
res = cql_lookup_property(ct, category, prefix, eval);
+ /* we have some aliases for some relations unfortunately.. */
+ if (!res && !prefix && !strcmp(category, "relation"))
+ {
+ if (!strcmp(val, "=="))
+ res = cql_lookup_property(ct, category, prefix, "exact");
+ if (!strcmp(val, "="))
+ res = cql_lookup_property(ct, category, prefix, "eq");
+ if (!strcmp(val, "<="))
+ res = cql_lookup_property(ct, category, prefix, "le");
+ if (!strcmp(val, ">="))
+ res = cql_lookup_property(ct, category, prefix, "ge");
+ }
if (!res)
res = cql_lookup_property(ct, category, prefix, "*");
}
for (i = 0; i<length; i++)
{
/* pr(int) each character */
- char buf[3];
- const char *cp;
+ /* we do not need to deal with \-sequences because the
+ CQL and PQF terms have same \-format, bug #1988 */
+ char buf[2];
- buf[1] = term[i];
- buf[2] = 0;
- /* do we have to escape this char? */
- if (buf[1] == '"')
- {
- buf[0] = '\\';
- cp = buf;
- }
- else
- cp = buf+1;
- (*pr)(cp, client_data);
+ buf[0] = term[i];
+ buf[1] = '\0';
+ (*pr)(buf, client_data);
}
(*pr)("\" ", client_data);
xfree(z3958_mem);
}
+void emit_terms(cql_transform_t ct,
+ struct cql_node *cn,
+ void (*pr)(const char *buf, void *client_data),
+ void *client_data,
+ const char *op)
+{
+ struct cql_node *ne = cn->u.st.extra_terms;
+ if (ne)
+ {
+ (*pr)("@", client_data);
+ (*pr)(op, client_data);
+ (*pr)(" ", client_data);
+ }
+ emit_term(ct, cn, cn->u.st.term, strlen(cn->u.st.term),
+ pr, client_data);
+ for (; ne; ne = ne->u.st.extra_terms)
+ {
+ if (ne->u.st.extra_terms)
+ {
+ (*pr)("@", client_data);
+ (*pr)(op, client_data);
+ (*pr)(" ", client_data);
+ }
+ emit_term(ct, cn, ne->u.st.term, strlen(ne->u.st.term),
+ pr, client_data);
+ }
+}
+
void emit_wordlist(cql_transform_t ct,
struct cql_node *cn,
void (*pr)(const char *buf, void *client_data),
}
}
cql_pr_attr(ct, "always", 0, 0, pr, client_data, 0);
- if (cn->u.st.relation && !cql_strcmp(cn->u.st.relation, "="))
- cql_pr_attr(ct, "relation", "eq", "scr",
- pr, client_data, 19);
- else if (cn->u.st.relation && !cql_strcmp(cn->u.st.relation, "<="))
- cql_pr_attr(ct, "relation", "le", "scr",
- pr, client_data, 19);
- else if (cn->u.st.relation && !cql_strcmp(cn->u.st.relation, ">="))
- cql_pr_attr(ct, "relation", "ge", "scr",
- pr, client_data, 19);
- else
- cql_pr_attr(ct, "relation", cn->u.st.relation, "eq",
- pr, client_data, 19);
+ cql_pr_attr(ct, "relation", cn->u.st.relation, 0, pr, client_data, 19);
cql_pr_attr(ct, "structure", cn->u.st.relation, 0,
pr, client_data, 24);
if (cn->u.st.relation && !cql_strcmp(cn->u.st.relation, "all"))
}
else
{
- emit_term(ct, cn, cn->u.st.term, strlen(cn->u.st.term),
- pr, client_data);
+ emit_terms(ct, cn, pr, client_data, "and");
}
break;
case CQL_NODE_BOOL: