int TRI_CreateKeyGenerator (const TRI_json_t* const parameters,
                            TRI_key_generator_t** dst) {
  TRI_key_generator_t* generator;
  const TRI_json_t* options;
  int res;

  *dst = NULL;

  options = NULL;
  if (parameters != NULL && parameters->_type == TRI_JSON_ARRAY) {
    options = parameters;
  }

  generator = CreateGenerator(options);

  if (generator == NULL) {
    return TRI_ERROR_ARANGO_INVALID_KEY_GENERATOR;
  }

  res = generator->init(generator, options);

  if (res != TRI_ERROR_NO_ERROR) {
    TRI_FreeKeyGenerator(generator);

    return res;
  }

  *dst = generator;

  return TRI_ERROR_NO_ERROR;
}
void TRI_DestroyPrimaryCollection (TRI_primary_collection_t* primary) {
  size_t i, n;

  if (primary->_keyGenerator != NULL) {
    TRI_FreeKeyGenerator(primary->_keyGenerator);
  }

  TRI_DestroyReadWriteLock(&primary->_compactionLock);
  TRI_DestroyReadWriteLock(&primary->_lock);

  TRI_DestroyAssociativePointer(&primary->_primaryIndex);

  if (primary->_shaper != NULL) {
    TRI_FreeVocShaper(primary->_shaper);
  }
  
  n = primary->_datafileInfo._nrAlloc;

  for (i = 0; i < n; ++i) {
    TRI_doc_datafile_info_t* dfi = primary->_datafileInfo._table[i];
    if (dfi != NULL) {
      FreeDatafileInfo(dfi);
    }
  }

  TRI_DestroyAssociativePointer(&primary->_datafileInfo);
  
  TRI_DestroyBarrierList(&primary->_barrierList);

  TRI_DestroyCollection(&primary->base);
}
Example #3
0
void TRI_DestroyPrimaryCollection (TRI_primary_collection_t* primary) {
  if (primary->_keyGenerator != NULL) {
    TRI_FreeKeyGenerator(primary->_keyGenerator);
  }

  TRI_DestroyReadWriteLock(&primary->_lock);
  TRI_DestroyAssociativePointer(&primary->_primaryIndex);

  if (primary->_shaper != NULL) {
    TRI_FreeVocShaper(primary->_shaper);
  }

  FreeDatafileInfo(&primary->_datafileInfo);
  TRI_DestroyBarrierList(&primary->_barrierList);

  TRI_DestroyCollection(&primary->base);
}