25 #include <sys/types.h>
38 #include <sys/types.h>
66 db = nmem_malloc(nmem,
sizeof(*db));
67 db->
id = nmem_strdup(nmem,
id);
70 if (service_settings && service_settings->
num_settings > 0) {
71 yaz_log(YLOG_DEBUG,
"copying settings from service to database %s settings", db->
id);
78 yaz_log(YLOG_DEBUG,
"No service settings to database %s ", db->
id);
83 idset = nmem_malloc(nmem,
sizeof(*idset));
85 idset->
name =
"pz:id";
100 if (!strcmp(p->
id,
id))
103 yaz_log(YLOG_DEBUG,
"new database %s under service %s",
id,
104 service->
id ? service->
id :
"null");
118 if (!strcmp(pattern,
"*"))
120 else if (!strncmp(pattern,
"*/", 2))
122 char *db = strchr(zurl,
'/');
125 if (!strcmp(pattern + 2, db))
130 else if (*(pattern + (len = strlen(pattern) - 1)) ==
'*')
132 if (!strncmp(pattern, zurl, len))
137 else if (!strcmp(pattern, zurl))
153 yaz_log(YLOG_WARN,
"Criterion not found: %s", c->
name);
156 if (!settings[offset])
169 if (!strcmp(settings[offset]->
value, v->
value))
175 if (strstr(settings[offset]->
value, v->
value))
196 nmem_strsplit(m,
",", buf, &values, &num);
197 for (i = 0; i < num; i++)
204 if ((eq = strchr(values[i],
'=')))
206 else if ((eq = strchr(values[i],
'~')))
210 yaz_log(YLOG_WARN,
"Missing equal-sign/tilde in filter");
214 new->name = values[i];
215 nmem_strsplit(m,
"|", eq, &subvalues, &subnum);
217 for (subi = 0; subi < subnum; subi++)
220 = nmem_malloc(m,
sizeof(*newv));
221 newv->
value = subvalues[subi];
222 newv->
next =
new->values;
235 for (; cl; cl = cl->
next)
250 NMEM nmem = nmem_create();