Esempio n. 1
0
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
}
Esempio n. 2
0
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
}
Esempio n. 3
0
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;
    }
  }
}
Esempio n. 4
0
/**
 * 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;
}