-/* $Id: cqltransform.c,v 1.26 2007-01-03 08:42:15 adam Exp $
+/* $Id: cqltransform.c,v 1.28 2007-03-29 11:14:11 mike Exp $
Copyright (C) 1995-2007, Index Data ApS
Index Data Aps
const char *cp0 = res, *cp1;
while ((cp1 = strchr(cp0, '=')))
{
+ int i;
while (*cp1 && *cp1 != ' ')
cp1++;
if (cp1 - cp0 >= sizeof(buf))
memcpy (buf, cp0, cp1 - cp0);
buf[cp1-cp0] = 0;
(*pr)("@attr ", client_data);
- (*pr)(buf, client_data);
+
+ for (i = 0; buf[i]; i++)
+ {
+ if (buf[i] == '*')
+ (*pr)(eval, client_data);
+ else
+ {
+ char tmp[2];
+ tmp[0] = buf[i];
+ tmp[1] = '\0';
+ (*pr)(tmp, client_data);
+ }
+ }
(*pr)(" ", client_data);
cp0 = cp1;
while (*cp0 == ' ')
}
+/* ### checks for CQL relation-name rather than Type-1 attribute */
+static int has_modifier(struct cql_node *cn, const char *name) {
+ struct cql_node *mod;
+ for (mod = cn->u.st.modifiers; mod != 0; mod = mod->u.st.modifiers) {
+ if (!strcmp(mod->u.st.index, name))
+ return 1;
+ }
+
+ return 0;
+}
+
+
void emit_term(cql_transform_t ct,
struct cql_node *cn,
const char *term, int length,
{
int i;
const char *ns = cn->u.st.index_uri;
+ int process_term = !has_modifier(cn, "regexp");
assert(cn->which == CQL_NODE_ST);
- if (length > 0)
+ if (process_term && length > 0)
{
if (length > 1 && term[0] == '^' && term[length-1] == '^')
{
}
}
- if (length > 0)
+ if (process_term && length > 0)
{
/* Check for well-known globbing patterns that represent
* simple truncation attributes as expected by, for example,