static void librdf_list_add_iterator_context(librdf_list* list, librdf_list_iterator_context* node) { if(list->last_iterator) { node->prev_ic=list->last_iterator; list->last_iterator->next_ic=node; } list->last_iterator=node; if(!list->first_iterator) list->first_iterator=node; list->iterator_count++; #if defined(LIBRDF_DEBUG) && LIBRDF_DEBUG > 2 LIBRDF_DEBUG4("Added iterator %p to list %p giving %d iterators\n", node->iterator, list, list->iterator_count); #endif }
static void librdf_list_remove_iterator_context(librdf_list* list, librdf_list_iterator_context* node) { if(node == list->first_iterator) list->first_iterator=node->next_ic; if(node->prev_ic) node->prev_ic->next_ic=node->next_ic; if(node == list->last_iterator) list->last_iterator=node->prev_ic; if(node->next_ic) node->next_ic->prev_ic=node->prev_ic; list->iterator_count--; #if defined(LIBRDF_DEBUG) && LIBRDF_DEBUG > 2 LIBRDF_DEBUG4("Removed iterator %p from list %p leaving %d iterators\n", node->iterator, list, list->iterator_count); #endif }
static void librdf_list_iterators_replace_node(librdf_list* list, librdf_list_node* old_node, librdf_list_node* new_node) { librdf_list_iterator_context *node, *next; if(!list->iterator_count) return; for(node=list->first_iterator; node; node=next) { next=node->next_ic; if(node->next == old_node) { #if defined(LIBRDF_DEBUG) && LIBRDF_DEBUG > 2 LIBRDF_DEBUG4("Moved iterator %p pointing from next node %p to %p\n", node->iterator, old_node, new_node); #endif node->next = new_node; } } }
/** * librdf_new_sql_config: * @world: librdf_world * @storage_name: SQL storage name * @layout: SQL schema variant * @config_dir: directory for configuration files * @predicate_uri_strings: configuration predicate URIs to look for * * Constructor - Make a new SQL configuration for a layout from a file * * Uses SQL storage name @storage_name and with database schema * @layout to give a configuration that will contain an array of * string values in the #librdf_sql_config field values array. * * Return value: configuration or NULL on failure **/ librdf_sql_config* librdf_new_sql_config(librdf_world* world, const char* storage_name, const char* layout, const char* config_dir, const char** predicate_uri_strings) { raptor_parser* rdf_parser=NULL; unsigned char *uri_string=NULL; raptor_uri *base_uri; raptor_uri *uri; librdf_sql_config* config; size_t len; int i; librdf_world_open(world); config=(librdf_sql_config*)LIBRDF_MALLOC(librdf_sql_config, sizeof(librdf_sql_config)); len=strlen(config_dir) + 1 + strlen(storage_name) + 4 + 1; if(layout) len+= strlen(layout) + 1; config->filename=(char*)LIBRDF_MALLOC(cstring, len); if(layout) sprintf(config->filename, "%s/%s-%s.ttl", config_dir, storage_name, layout); else sprintf(config->filename, "%s/%s.ttl", config_dir, storage_name); config->predicate_uri_strings=predicate_uri_strings; for(i=0; config->predicate_uri_strings[i]; i++) ; config->predicates_count=i; config->values=(char**)LIBRDF_CALLOC(cstring, sizeof(char*), config->predicates_count); LIBRDF_DEBUG4("Attempting to open %s layout %s storage config file %s\n", storage_name, (layout ? layout: "(default)"), config->filename); if(access((const char*)config->filename, R_OK)) { librdf_log(world, 0, LIBRDF_LOG_ERROR, LIBRDF_FROM_STORAGE, NULL, "Failed to open configuration file %s for storage %s layout %s - %s", config->filename, storage_name, (layout ? layout: "(default)"), strerror(errno)); librdf_free_sql_config(config); return NULL; } uri_string=raptor_uri_filename_to_uri_string(config->filename); uri=raptor_new_uri(uri_string); base_uri=raptor_uri_copy(uri); rdf_parser=raptor_new_parser("turtle"); raptor_set_statement_handler(rdf_parser, config, librdf_sql_config_store_triple); raptor_parse_file(rdf_parser, uri, base_uri); raptor_free_parser(rdf_parser); raptor_free_uri(base_uri); raptor_free_memory(uri_string); raptor_free_uri(uri); /* Check all values are given */ for(i=0; i < config->predicates_count; i++) { if(!config->values[i]) { librdf_log(world, 0, LIBRDF_LOG_ERROR, LIBRDF_FROM_STORAGE, NULL, "Configuration %s missing for storage %s", config->predicate_uri_strings[i], storage_name); librdf_free_sql_config(config); return NULL; } } return config; }