25 #include <sys/types.h>
37 #include <sys/types.h>
62 db = nmem_malloc(nmem,
sizeof(*db));
63 db->
id = nmem_strdup(nmem,
id);
66 if (service_settings && service_settings->
num_settings > 0) {
67 yaz_log(YLOG_DEBUG,
"copying settings from service to database %s settings", db->
id);
74 yaz_log(YLOG_DEBUG,
"No service settings to database %s ", db->
id);
79 idset = nmem_malloc(nmem,
sizeof(*idset));
81 idset->
name =
"pz:id";
96 if (!strcmp(p->
id,
id))
99 yaz_log(YLOG_DEBUG,
"new database %s under service %s",
id,
100 service->
id ? service->
id :
"null");
114 if (!strcmp(pattern,
"*"))
116 else if (!strncmp(pattern,
"*/", 2))
118 char *db = strchr(zurl,
'/');
121 if (!strcmp(pattern + 2, db))
126 else if (*(pattern + (len = strlen(pattern) - 1)) ==
'*')
128 if (!strncmp(pattern, zurl, len))
133 else if (!strcmp(pattern, zurl))
148 if (offset < 0 || offset >= num_settings)
150 yaz_log(YLOG_WARN,
"Criterion not found: %s", c->
name);
153 if (!settings[offset])
166 if (!strcmp(settings[offset]->
value, v->
value))
172 if (strstr(settings[offset]->
value, v->
value))
199 nmem_strsplit(m,
",", buf, &
values, &num);
200 for (i = 0; i < num; i++)
209 for (eq =
values[i]; *eq; eq++)
222 yaz_log(YLOG_WARN,
"Missing equal-sign/tilde in filter");
227 nmem_strsplit(m,
"|", eq, &subvalues, &subnum);
229 for (subi = 0; subi < subnum; subi++)
232 = nmem_malloc(m,
sizeof(*newv));
233 newv->
value = subvalues[subi];
234 newv->
next =
new->values;
250 for (; cl; cl = cl->
next)
257 for (; cl; cl = cl->
next)
270 NMEM nmem = nmem_create();
pazpar2_database_criterion_type
@ PAZPAR2_SUBSTRING_MATCH
int session_grep_databases(struct session *se, const char *filter, void(*fun)(struct session *se, struct session_database *db))
static int match_criterion(struct setting **settings, int num_settings, struct conf_service *service, struct database_criterion *c)
static struct database_criterion * create_database_criterion(NMEM m, const char *buf)
struct database * create_database_for_service(const char *id, struct conf_service *service)
int predef_grep_databases(void *context, struct conf_service *service, void(*fun)(void *context, struct database *db))
int match_zurl(const char *zurl, const char *pattern)
struct database * new_database_inherit_settings(const char *id, NMEM nmem, struct settings_array *service_settings)
static int database_match_criteria(struct setting **settings, int num_settings, struct conf_service *service, struct database_criterion *cl)
void(* fun)(struct http_channel *c)
int settings_lookup_offset(struct conf_service *service, const char *name)
struct database * databases
struct settings_array * settings
struct database_criterion_value * next
struct database_criterion * next
struct database_criterion_value * values
enum pazpar2_database_criterion_type type
struct setting ** settings
struct session_database * next
struct setting ** settings
struct session_database * databases
struct conf_service * service
struct setting ** settings