mirror of https://gitee.com/bigwinds/arangodb
fixed tests
This commit is contained in:
parent
14c14cc07c
commit
f8476ce0b0
|
@ -42,6 +42,26 @@ dispose the server-side cursor afterwards.
|
||||||
@anchor HttpSimpleFirstExample
|
@anchor HttpSimpleFirstExample
|
||||||
@copydetails JSA_put_api_simple_first_example
|
@copydetails JSA_put_api_simple_first_example
|
||||||
|
|
||||||
|
@CLEARPAGE
|
||||||
|
@anchor HttpSimpleByExampleHash
|
||||||
|
@copydetails JSA_put_api_simple_by_example_hash
|
||||||
|
|
||||||
|
@CLEARPAGE
|
||||||
|
@anchor HttpSimpleByExampleSkiplist
|
||||||
|
@copydetails JSA_put_api_simple_by_example_skiplist
|
||||||
|
|
||||||
|
@CLEARPAGE
|
||||||
|
@anchor HttpSimpleByExampleBitarray
|
||||||
|
@copydetails JSA_put_api_simple_by_example_bitarray
|
||||||
|
|
||||||
|
@CLEARPAGE
|
||||||
|
@anchor HttpSimpleByConditionSkiplist
|
||||||
|
@copydetails JSA_put_api_simple_by_condition_skiplist
|
||||||
|
|
||||||
|
@CLEARPAGE
|
||||||
|
@anchor HttpSimpleByConditionBitarray
|
||||||
|
@copydetails JSA_put_api_simple_by_condition_bitarray
|
||||||
|
|
||||||
@CLEARPAGE
|
@CLEARPAGE
|
||||||
@anchor HttpSimpleAny
|
@anchor HttpSimpleAny
|
||||||
@copydetails JSA_put_api_simple_any
|
@copydetails JSA_put_api_simple_any
|
||||||
|
|
|
@ -7,6 +7,11 @@ TOC {#HttpSimpleTOC}
|
||||||
- @ref HttpSimpleAll "PUT /_api/simple/all"
|
- @ref HttpSimpleAll "PUT /_api/simple/all"
|
||||||
- @ref HttpSimpleByExample "PUT /_api/simple/by-example"
|
- @ref HttpSimpleByExample "PUT /_api/simple/by-example"
|
||||||
- @ref HttpSimpleFirstExample "PUT /_api/simple/first-example"
|
- @ref HttpSimpleFirstExample "PUT /_api/simple/first-example"
|
||||||
|
- @ref HttpSimpleByExampleHash "PUT /_api/simple/by-example-hash"
|
||||||
|
- @ref HttpSimpleByExampleSkiplist "PUT /_api/simple/by-example-skiplist"
|
||||||
|
- @ref HttpSimpleByExampleBitarray "PUT /_api/simple/by-example-bitarray"
|
||||||
|
- @ref HttpSimpleByConditionSkiplist "PUT /_api/simple/by-condition-skiplist"
|
||||||
|
- @ref HttpSimpleByConditionBitarray "PUT /_api/simple/by-condition-bitarray"
|
||||||
- @ref HttpSimpleAny "PUT /_api/simple/any"
|
- @ref HttpSimpleAny "PUT /_api/simple/any"
|
||||||
- @ref HttpSimpleRange "PUT /_api/simple/range"
|
- @ref HttpSimpleRange "PUT /_api/simple/range"
|
||||||
- @ref HttpSimpleNear "PUT /_api/simple/near"
|
- @ref HttpSimpleNear "PUT /_api/simple/near"
|
||||||
|
|
|
@ -322,7 +322,7 @@ unittests-single:
|
||||||
@rm -rf "$(VOCDIR)"
|
@rm -rf "$(VOCDIR)"
|
||||||
@mkdir -p "$(VOCDIR)/databases"
|
@mkdir -p "$(VOCDIR)/databases"
|
||||||
|
|
||||||
$(VALGRIND) @builddir@/bin/arangod "$(VOCDIR)" $(SERVER_OPT) --javascript.unit-test $(TEST) || test "x$(FORCE)" == "x1"
|
$(VALGRIND) @builddir@/bin/arangod "$(VOCDIR)" $(SERVER_OPT) --server.endpoint "tcp://$(VOCHOST):$(VOCPORT)" --javascript.unit-tests $(TEST) || test "x$(FORCE)" == "x1"
|
||||||
|
|
||||||
@rm -rf "$(VOCDIR)"
|
@rm -rf "$(VOCDIR)"
|
||||||
|
|
||||||
|
@ -399,6 +399,7 @@ SHELL_SERVER_ONLY = \
|
||||||
@top_srcdir@/js/server/tests/shell-foxx-template-middleware.js \
|
@top_srcdir@/js/server/tests/shell-foxx-template-middleware.js \
|
||||||
@top_srcdir@/js/server/tests/shell-foxx-format-middleware.js \
|
@top_srcdir@/js/server/tests/shell-foxx-format-middleware.js \
|
||||||
@top_srcdir@/js/server/tests/shell-foxx-preprocessor.js \
|
@top_srcdir@/js/server/tests/shell-foxx-preprocessor.js \
|
||||||
|
@top_srcdir@/js/server/tests/shell-index-ensure.js \
|
||||||
@top_srcdir@/js/server/tests/shell-skiplist-index.js \
|
@top_srcdir@/js/server/tests/shell-skiplist-index.js \
|
||||||
@top_srcdir@/js/server/tests/shell-skiplist-rm-performance.js \
|
@top_srcdir@/js/server/tests/shell-skiplist-rm-performance.js \
|
||||||
@top_srcdir@/js/server/tests/shell-skiplist-correctness.js
|
@top_srcdir@/js/server/tests/shell-skiplist-correctness.js
|
||||||
|
|
|
@ -134,11 +134,11 @@ static void ExtractSkipAndLimit (v8::Arguments const& argv,
|
||||||
skip = TRI_QRY_NO_SKIP;
|
skip = TRI_QRY_NO_SKIP;
|
||||||
limit = TRI_QRY_NO_LIMIT;
|
limit = TRI_QRY_NO_LIMIT;
|
||||||
|
|
||||||
if (pos < (size_t) argv.Length() && ! argv[pos]->IsNull()) {
|
if (pos < (size_t) argv.Length() && ! argv[pos]->IsNull() && ! argv[pos]->IsUndefined()) {
|
||||||
skip = (TRI_voc_size_t) TRI_ObjectToDouble(argv[pos]);
|
skip = (TRI_voc_size_t) TRI_ObjectToDouble(argv[pos]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pos + 1 < (size_t) argv.Length() && ! argv[pos + 1]->IsNull()) {
|
if (pos + 1 < (size_t) argv.Length() && ! argv[pos + 1]->IsNull() && ! argv[pos + 1]->IsUndefined()) {
|
||||||
limit = (TRI_voc_ssize_t) TRI_ObjectToDouble(argv[pos + 1]);
|
limit = (TRI_voc_ssize_t) TRI_ObjectToDouble(argv[pos + 1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -280,10 +280,11 @@ static TRI_index_operator_t* SetupConditionsSkiplist (TRI_index_t* idx,
|
||||||
TRI_shaper_t* shaper,
|
TRI_shaper_t* shaper,
|
||||||
v8::Handle<v8::Object> conditions) {
|
v8::Handle<v8::Object> conditions) {
|
||||||
TRI_index_operator_t* lastOperator = 0;
|
TRI_index_operator_t* lastOperator = 0;
|
||||||
TRI_json_t* parameters = TRI_CreateListJson(TRI_UNKNOWN_MEM_ZONE);
|
|
||||||
size_t numEq = 0;
|
size_t numEq = 0;
|
||||||
size_t lastNonEq = 0;
|
size_t lastNonEq = 0;
|
||||||
|
|
||||||
|
TRI_json_t* parameters = TRI_CreateListJson(TRI_UNKNOWN_MEM_ZONE);
|
||||||
|
|
||||||
if (parameters == 0) {
|
if (parameters == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1056,7 +1057,7 @@ static v8::Handle<v8::Value> ExecuteSkiplistQuery (v8::Arguments const& argv,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx->_type != TRI_IDX_TYPE_SKIPLIST_INDEX) {
|
if (idx->_type != TRI_IDX_TYPE_SKIPLIST_INDEX) {
|
||||||
TRI_V8_TYPE_ERROR(scope, "index must be a skiplist index");
|
TRI_V8_EXCEPTION(scope, TRI_ERROR_ARANGO_NO_INDEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
TRI_index_operator_t* skiplistOperator;
|
TRI_index_operator_t* skiplistOperator;
|
||||||
|
@ -1070,7 +1071,7 @@ static v8::Handle<v8::Value> ExecuteSkiplistQuery (v8::Arguments const& argv,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skiplistOperator == 0) {
|
if (skiplistOperator == 0) {
|
||||||
TRI_V8_EXCEPTION_PARAMETER(scope, "setting up skiplist operator failed");
|
TRI_V8_EXCEPTION(scope, TRI_ERROR_BAD_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
TRI_skiplist_iterator_t* skiplistIterator = TRI_LookupSkiplistIndex(idx, skiplistOperator);
|
TRI_skiplist_iterator_t* skiplistIterator = TRI_LookupSkiplistIndex(idx, skiplistOperator);
|
||||||
|
@ -1258,7 +1259,7 @@ static v8::Handle<v8::Value> ExecuteBitarrayQuery (v8::Arguments const& argv,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx->_type != TRI_IDX_TYPE_BITARRAY_INDEX) {
|
if (idx->_type != TRI_IDX_TYPE_BITARRAY_INDEX) {
|
||||||
TRI_V8_TYPE_ERROR(scope, "index must be a skiplist index");
|
TRI_V8_EXCEPTION(scope, TRI_ERROR_ARANGO_NO_INDEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1272,7 +1273,7 @@ static v8::Handle<v8::Value> ExecuteBitarrayQuery (v8::Arguments const& argv,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (indexOperator == 0) { // something wrong
|
if (indexOperator == 0) { // something wrong
|
||||||
TRI_V8_EXCEPTION_PARAMETER(scope, "setting up bitarray index operator failed");
|
TRI_V8_EXCEPTION(scope, TRI_ERROR_BAD_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
// .............................................................................
|
// .............................................................................
|
||||||
|
@ -2088,7 +2089,7 @@ static v8::Handle<v8::Value> ByExampleHashIndexQuery (ReadTransactionType& trx,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx->_type != TRI_IDX_TYPE_HASH_INDEX) {
|
if (idx->_type != TRI_IDX_TYPE_HASH_INDEX) {
|
||||||
TRI_V8_TYPE_ERROR(scope, "index must be a hash index");
|
TRI_V8_EXCEPTION(scope, TRI_ERROR_ARANGO_NO_INDEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
TRI_hash_index_t* hashIndex = (TRI_hash_index_t*) idx;
|
TRI_hash_index_t* hashIndex = (TRI_hash_index_t*) idx;
|
||||||
|
@ -2204,7 +2205,7 @@ static v8::Handle<v8::Value> JS_ByExampleHashIndex (v8::Arguments const& argv) {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static v8::Handle<v8::Value> JS_ByConditionSkiplist (v8::Arguments const& argv) {
|
static v8::Handle<v8::Value> JS_ByConditionSkiplist (v8::Arguments const& argv) {
|
||||||
std::string signature("BY_CONDITION_SKIPLIST(<index>, <conditions>, <skip>, <limit>)");
|
std::string const signature("BY_CONDITION_SKIPLIST(<index>, <conditions>, <skip>, <limit>)");
|
||||||
|
|
||||||
return ExecuteSkiplistQuery(argv, signature, QUERY_CONDITION);
|
return ExecuteSkiplistQuery(argv, signature, QUERY_CONDITION);
|
||||||
}
|
}
|
||||||
|
@ -2214,7 +2215,7 @@ static v8::Handle<v8::Value> JS_ByConditionSkiplist (v8::Arguments const& argv)
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static v8::Handle<v8::Value> JS_ByExampleSkiplist (v8::Arguments const& argv) {
|
static v8::Handle<v8::Value> JS_ByExampleSkiplist (v8::Arguments const& argv) {
|
||||||
std::string signature("BY_EXAMPLE_SKIPLIST(<index>, <example>, <skip>, <limit>)");
|
std::string const signature("BY_EXAMPLE_SKIPLIST(<index>, <example>, <skip>, <limit>)");
|
||||||
|
|
||||||
return ExecuteSkiplistQuery(argv, signature, QUERY_EXAMPLE);
|
return ExecuteSkiplistQuery(argv, signature, QUERY_EXAMPLE);
|
||||||
}
|
}
|
||||||
|
@ -2224,7 +2225,7 @@ static v8::Handle<v8::Value> JS_ByExampleSkiplist (v8::Arguments const& argv) {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static v8::Handle<v8::Value> JS_ByExampleBitarray (v8::Arguments const& argv) {
|
static v8::Handle<v8::Value> JS_ByExampleBitarray (v8::Arguments const& argv) {
|
||||||
std::string signature("BY_EXAMPLE_BITARRAY(<index>, <example>, <skip>, <limit>)");
|
std::string const signature("BY_EXAMPLE_BITARRAY(<index>, <example>, <skip>, <limit>)");
|
||||||
|
|
||||||
return ExecuteBitarrayQuery(argv, signature, QUERY_EXAMPLE);
|
return ExecuteBitarrayQuery(argv, signature, QUERY_EXAMPLE);
|
||||||
}
|
}
|
||||||
|
@ -2234,7 +2235,7 @@ static v8::Handle<v8::Value> JS_ByExampleBitarray (v8::Arguments const& argv) {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static v8::Handle<v8::Value> JS_ByConditionBitarray (v8::Arguments const& argv) {
|
static v8::Handle<v8::Value> JS_ByConditionBitarray (v8::Arguments const& argv) {
|
||||||
std::string signature("BY_CONDITION_BITARRAY(<index>, <conditions>, <skip>, <limit>)");
|
std::string const signature("BY_CONDITION_BITARRAY(<index>, <conditions>, <skip>, <limit>)");
|
||||||
|
|
||||||
return ExecuteBitarrayQuery(argv, signature, QUERY_CONDITION);
|
return ExecuteBitarrayQuery(argv, signature, QUERY_CONDITION);
|
||||||
}
|
}
|
||||||
|
@ -2570,7 +2571,7 @@ static v8::Handle<v8::Value> FulltextQuery (ReadTransactionType& trx,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx->_type != TRI_IDX_TYPE_FULLTEXT_INDEX) {
|
if (idx->_type != TRI_IDX_TYPE_FULLTEXT_INDEX) {
|
||||||
TRI_V8_TYPE_ERROR(scope, "index must be a fulltext index");
|
TRI_V8_EXCEPTION(scope, TRI_ERROR_ARANGO_NO_INDEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
const string queryString = TRI_ObjectToString(argv[1]);
|
const string queryString = TRI_ObjectToString(argv[1]);
|
||||||
|
@ -2828,8 +2829,9 @@ static v8::Handle<v8::Value> NearQuery (ReadTransactionType& trx,
|
||||||
return scope.Close(v8::ThrowException(*err));
|
return scope.Close(v8::ThrowException(*err));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx->_type != TRI_IDX_TYPE_GEO1_INDEX && idx->_type != TRI_IDX_TYPE_GEO2_INDEX) {
|
if (idx->_type != TRI_IDX_TYPE_GEO1_INDEX &&
|
||||||
TRI_V8_TYPE_ERROR(scope, "index must be a geo-index");
|
idx->_type != TRI_IDX_TYPE_GEO2_INDEX) {
|
||||||
|
TRI_V8_EXCEPTION(scope, TRI_ERROR_ARANGO_NO_INDEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
// extract latitude and longitude
|
// extract latitude and longitude
|
||||||
|
@ -2951,8 +2953,9 @@ static v8::Handle<v8::Value> WithinQuery (ReadTransactionType& trx,
|
||||||
return scope.Close(v8::ThrowException(*err));
|
return scope.Close(v8::ThrowException(*err));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx->_type != TRI_IDX_TYPE_GEO1_INDEX && idx->_type != TRI_IDX_TYPE_GEO2_INDEX) {
|
if (idx->_type != TRI_IDX_TYPE_GEO1_INDEX &&
|
||||||
TRI_V8_TYPE_ERROR(scope, "index must be a geo-index");
|
idx->_type != TRI_IDX_TYPE_GEO2_INDEX) {
|
||||||
|
TRI_V8_EXCEPTION(scope, TRI_ERROR_ARANGO_NO_INDEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
// extract latitude and longitude
|
// extract latitude and longitude
|
||||||
|
|
|
@ -837,7 +837,12 @@ function post_api_index_bitarray (req, res, collection, body) {
|
||||||
|
|
||||||
var index;
|
var index;
|
||||||
|
|
||||||
index = collection.ensureBitarray.apply(collection, fields);
|
if (body["undefined"]) {
|
||||||
|
index = collection.ensureUndefBitarray.apply(collection, fields);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
index = collection.ensureBitarray.apply(collection, fields);
|
||||||
|
}
|
||||||
|
|
||||||
if (index.isNewlyCreated) {
|
if (index.isNewlyCreated) {
|
||||||
actions.resultOk(req, res, actions.HTTP_CREATED, index);
|
actions.resultOk(req, res, actions.HTTP_CREATED, index);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/*jslint indent: 2, nomen: true, maxlen: 100, sloppy: true, vars: true, white: true, plusplus: true, stupid: true */
|
/*jslint indent: 2, nomen: true, maxlen: 120, sloppy: true, vars: true, white: true, plusplus: true, stupid: true */
|
||||||
/*global require, CREATE_CURSOR */
|
/*global require, CREATE_CURSOR */
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -34,15 +34,338 @@ var ERRORS = require("internal").errors;
|
||||||
|
|
||||||
var API = "_api/simple/";
|
var API = "_api/simple/";
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// --SECTION-- public functions
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @addtogroup ArangoAPI
|
/// @addtogroup ArangoAPI
|
||||||
/// @{
|
/// @{
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- private functions
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @fn JSA_put_api_simple_by_example_hash
|
||||||
|
/// @brief returns all documents of a collection matching a given example,
|
||||||
|
/// using a specific hash index
|
||||||
|
///
|
||||||
|
/// @RESTHEADER{PUT /_api/simple/by-example-hash,executes query by-example using a hash index}
|
||||||
|
///
|
||||||
|
/// @RESTBODYPARAM{query,string,required}
|
||||||
|
/// Contains the query specification.
|
||||||
|
///
|
||||||
|
/// @RESTDESCRIPTION
|
||||||
|
///
|
||||||
|
/// This will find all documents matching a given example, using the specified
|
||||||
|
/// hash index.
|
||||||
|
///
|
||||||
|
/// The call expects a JSON object as body with the following attributes:
|
||||||
|
///
|
||||||
|
/// - `collection`: The name of the collection to query.
|
||||||
|
///
|
||||||
|
/// - `index`: The id of the index to be used for the query. The index must exist
|
||||||
|
/// and must be of type `hash`.
|
||||||
|
///
|
||||||
|
/// - `example`: an example document. The example must contain a value for each
|
||||||
|
/// attribute in the index.
|
||||||
|
///
|
||||||
|
/// - `skip`: The number of documents to skip in the query. (optional)
|
||||||
|
///
|
||||||
|
/// - `limit`: The maximal number of documents to return. (optional)
|
||||||
|
///
|
||||||
|
/// Returns a cursor containing the result, see @ref HttpCursor for details.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODES
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{201}
|
||||||
|
/// is returned if the query was executed successfully.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{400}
|
||||||
|
/// is returned if the body does not contain a valid JSON representation of a
|
||||||
|
/// query. The response body contains an error document in this case.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{404}
|
||||||
|
/// is returned if the collection specified by `collection` is unknown. The
|
||||||
|
/// response body contains an error document in this case.
|
||||||
|
/// The same error code is also returned if an invalid index id or type is used.
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @fn JSA_put_api_simple_by_example_skiplist
|
||||||
|
/// @brief returns all documents of a collection matching a given example,
|
||||||
|
/// using a specific skiplist index
|
||||||
|
///
|
||||||
|
/// @RESTHEADER{PUT /_api/simple/by-example-skiplist,executes query by-example using a skiplist index}
|
||||||
|
///
|
||||||
|
/// @RESTBODYPARAM{query,string,required}
|
||||||
|
/// Contains the query specification.
|
||||||
|
///
|
||||||
|
/// @RESTDESCRIPTION
|
||||||
|
///
|
||||||
|
/// This will find all documents matching a given example, using the specified
|
||||||
|
/// skiplist index.
|
||||||
|
///
|
||||||
|
/// The call expects a JSON object as body with the following attributes:
|
||||||
|
///
|
||||||
|
/// - `collection`: The name of the collection to query.
|
||||||
|
///
|
||||||
|
/// - `index`: The id of the index to be used for the query. The index must
|
||||||
|
/// exist and must be of type `skiplist`.
|
||||||
|
///
|
||||||
|
/// - `example`: an example document. The example must contain a value for each
|
||||||
|
/// attribute in the index.
|
||||||
|
///
|
||||||
|
/// - `skip`: The number of documents to skip in the query. (optional)
|
||||||
|
///
|
||||||
|
/// - `limit`: The maximal number of documents to return. (optional)
|
||||||
|
///
|
||||||
|
/// Returns a cursor containing the result, see @ref HttpCursor for details.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODES
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{201}
|
||||||
|
/// is returned if the query was executed successfully.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{400}
|
||||||
|
/// is returned if the body does not contain a valid JSON representation of a
|
||||||
|
/// query. The response body contains an error document in this case.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{404}
|
||||||
|
/// is returned if the collection specified by `collection` is unknown. The
|
||||||
|
/// response body contains an error document in this case.
|
||||||
|
/// The same error code is also returned if an invalid index id or type is used.
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @fn JSA_put_api_simple_by_example_bitarray
|
||||||
|
/// @brief returns all documents of a collection matching a given example,
|
||||||
|
/// using a specific bitarray index
|
||||||
|
///
|
||||||
|
/// @RESTHEADER{PUT /_api/simple/by-example-bitarray,executes query by-example using a bitarray index}
|
||||||
|
///
|
||||||
|
/// @RESTBODYPARAM{query,string,required}
|
||||||
|
/// Contains the query specification.
|
||||||
|
///
|
||||||
|
/// @RESTDESCRIPTION
|
||||||
|
///
|
||||||
|
/// This will find all documents matching a given example, using the specified
|
||||||
|
/// skiplist index.
|
||||||
|
///
|
||||||
|
/// The call expects a JSON object as body with the following attributes:
|
||||||
|
///
|
||||||
|
/// - `collection`: The name of the collection to query.
|
||||||
|
///
|
||||||
|
/// - `index`: The id of the index to be used for the query. The index must
|
||||||
|
/// exist and must be of type `bitarray`.
|
||||||
|
///
|
||||||
|
/// - `example`: an example document. The example must contain a value for each
|
||||||
|
/// attribute in the index.
|
||||||
|
///
|
||||||
|
/// - `skip`: The number of documents to skip in the query. (optional)
|
||||||
|
///
|
||||||
|
/// - `limit`: The maximal number of documents to return. (optional)
|
||||||
|
///
|
||||||
|
/// Returns a cursor containing the result, see @ref HttpCursor for details.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODES
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{201}
|
||||||
|
/// is returned if the query was executed successfully.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{400}
|
||||||
|
/// is returned if the body does not contain a valid JSON representation of a
|
||||||
|
/// query. The response body contains an error document in this case.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{404}
|
||||||
|
/// is returned if the collection specified by `collection` is unknown. The
|
||||||
|
/// response body contains an error document in this case.
|
||||||
|
/// The same error code is also returned if an invalid index id or type is used.
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @fn JSA_put_api_simple_by_condition_skiplist
|
||||||
|
/// @brief returns all documents of a collection matching a given condition,
|
||||||
|
/// using a specific skiplist index
|
||||||
|
///
|
||||||
|
/// @RESTHEADER{PUT /_api/simple/by-condition-skiplist,executes query by-condition using a skiplist index}
|
||||||
|
///
|
||||||
|
/// @RESTBODYPARAM{query,string,required}
|
||||||
|
/// Contains the query specification.
|
||||||
|
///
|
||||||
|
/// @RESTDESCRIPTION
|
||||||
|
///
|
||||||
|
/// This will find all documents matching a given condition, using the specified
|
||||||
|
/// skiplist index.
|
||||||
|
///
|
||||||
|
/// The call expects a JSON object as body with the following attributes:
|
||||||
|
///
|
||||||
|
/// - `collection`: The name of the collection to query.
|
||||||
|
///
|
||||||
|
/// - `index`: The id of the index to be used for the query. The index must
|
||||||
|
/// exist and must be of type `skiplist`.
|
||||||
|
///
|
||||||
|
/// - `condition`: the condition which all returned documents shall satisfy.
|
||||||
|
/// Conditions must be specified for all indexed attributes.
|
||||||
|
///
|
||||||
|
/// - `skip`: The number of documents to skip in the query. (optional)
|
||||||
|
///
|
||||||
|
/// - `limit`: The maximal number of documents to return. (optional)
|
||||||
|
///
|
||||||
|
/// Returns a cursor containing the result, see @ref HttpCursor for details.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODES
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{201}
|
||||||
|
/// is returned if the query was executed successfully.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{400}
|
||||||
|
/// is returned if the body does not contain a valid JSON representation of a
|
||||||
|
/// query. The response body contains an error document in this case.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{404}
|
||||||
|
/// is returned if the collection specified by `collection` is unknown. The
|
||||||
|
/// response body contains an error document in this case.
|
||||||
|
/// The same error code is also returned if an invalid index id or type is used.
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @fn JSA_put_api_simple_by_condition_bitarray
|
||||||
|
/// @brief returns all documents of a collection matching a given condition,
|
||||||
|
/// using a specific bitarray index
|
||||||
|
///
|
||||||
|
/// @RESTHEADER{PUT /_api/simple/by-condition-bitarray,executes query by-condition using a bitarray index}
|
||||||
|
///
|
||||||
|
/// @RESTBODYPARAM{query,string,required}
|
||||||
|
/// Contains the query specification.
|
||||||
|
///
|
||||||
|
/// @RESTDESCRIPTION
|
||||||
|
///
|
||||||
|
/// This will find all documents matching a given condition, using the specified
|
||||||
|
/// skiplist index.
|
||||||
|
///
|
||||||
|
/// The call expects a JSON object as body with the following attributes:
|
||||||
|
///
|
||||||
|
/// - `collection`: The name of the collection to query.
|
||||||
|
///
|
||||||
|
/// - `index`: The id of the index to be used for the query. The index must
|
||||||
|
/// exist and must be of type `bitarray`.
|
||||||
|
///
|
||||||
|
/// - `condition`: the condition which all returned documents shall satisfy.
|
||||||
|
/// Conditions must be specified for all indexed attributes.
|
||||||
|
///
|
||||||
|
/// - `skip`: The number of documents to skip in the query. (optional)
|
||||||
|
///
|
||||||
|
/// - `limit`: The maximal number of documents to return. (optional)
|
||||||
|
///
|
||||||
|
/// Returns a cursor containing the result, see @ref HttpCursor for details.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODES
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{201}
|
||||||
|
/// is returned if the query was executed successfully.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{400}
|
||||||
|
/// is returned if the body does not contain a valid JSON representation of a
|
||||||
|
/// query. The response body contains an error document in this case.
|
||||||
|
///
|
||||||
|
/// @RESTRETURNCODE{404}
|
||||||
|
/// is returned if the collection specified by `collection` is unknown. The
|
||||||
|
/// response body contains an error document in this case.
|
||||||
|
/// The same error code is also returned if an invalid index id or type is used.
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief setup an index query
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
function setupIndexQuery (name, func, isExampleQuery) {
|
||||||
|
actions.defineHttp({
|
||||||
|
url : API + name,
|
||||||
|
context : "api",
|
||||||
|
|
||||||
|
callback : function (req, res) {
|
||||||
|
try {
|
||||||
|
var body = actions.getJsonBody(req, res);
|
||||||
|
|
||||||
|
if (body === undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req.requestType !== actions.PUT) {
|
||||||
|
actions.resultUnsupported(req, res);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var limit = body.limit;
|
||||||
|
var skip = body.skip || 0;
|
||||||
|
var name = body.collection;
|
||||||
|
var index = body.index;
|
||||||
|
var collection = db._collection(name);
|
||||||
|
|
||||||
|
if (collection === null) {
|
||||||
|
actions.collectionNotFound(req, res, name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var result;
|
||||||
|
|
||||||
|
if (isExampleQuery) {
|
||||||
|
if (typeof body.example !== "object" || Array.isArray(body.example)) {
|
||||||
|
actions.badParameter(req, res, "example");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = collection[func](index, body.example, skip, limit);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (typeof body.condition !== "object" || Array.isArray(body.condition)) {
|
||||||
|
actions.badParameter(req, res, "condition");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = collection[func](index, body.condition, skip, limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
actions.resultCursor(req, res, CREATE_CURSOR(result.documents, true, body.batchSize));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
actions.resultException(req, res, err, undefined, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief register all these functions
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
function setupIndexQueries () {
|
||||||
|
var map = {
|
||||||
|
"by-example-hash" : [ "BY_EXAMPLE_HASH", true ],
|
||||||
|
"by-example-skiplist" : [ "BY_EXAMPLE_SKIPLIST", true ],
|
||||||
|
"by-example-bitarray" : [ "BY_EXAMPLE_BITARRAY", true ],
|
||||||
|
"by-condition-skiplist" : [ "BY_CONDITION_SKIPLIST", false ],
|
||||||
|
"by-condition-bitarray" : [ "BY_CONDITION_BITARRAY", false ]
|
||||||
|
};
|
||||||
|
|
||||||
|
var m;
|
||||||
|
for (m in map) {
|
||||||
|
if (map.hasOwnProperty(m)) {
|
||||||
|
setupIndexQuery(m, map[m][0], map[m][1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setupIndexQueries();
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- public functions
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @fn JSA_put_api_simple_all
|
/// @fn JSA_put_api_simple_all
|
||||||
/// @brief returns all documents of a collection
|
/// @brief returns all documents of a collection
|
||||||
|
|
|
@ -596,7 +596,7 @@ ArangoCollection.prototype.index = function (id) {
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief deletes one index
|
/// @brief deletes an index
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ArangoCollection.prototype.dropIndex = function (id) {
|
ArangoCollection.prototype.dropIndex = function (id) {
|
||||||
|
@ -619,7 +619,7 @@ ArangoCollection.prototype.dropIndex = function (id) {
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief adds a bitarray index
|
/// @brief ensures a bitarray index
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ArangoCollection.prototype.ensureBitarray = function () {
|
ArangoCollection.prototype.ensureBitarray = function () {
|
||||||
|
@ -640,6 +640,28 @@ ArangoCollection.prototype.ensureBitarray = function () {
|
||||||
return requestResult;
|
return requestResult;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief ensures a bitarray index
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
ArangoCollection.prototype.ensureUndefBitarray = function () {
|
||||||
|
var i;
|
||||||
|
var body;
|
||||||
|
var fields = [];
|
||||||
|
|
||||||
|
for (i = 0; i < arguments.length; ++i) {
|
||||||
|
fields.push(arguments[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
body = { type : "bitarray", unique : false, fields : fields, "undefined" : true };
|
||||||
|
|
||||||
|
var requestResult = this._database._connection.POST(this._indexurl(), JSON.stringify(body));
|
||||||
|
|
||||||
|
arangosh.checkRequestResult(requestResult);
|
||||||
|
|
||||||
|
return requestResult;
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief adds a cap constraint
|
/// @brief adds a cap constraint
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -595,7 +595,7 @@ ArangoCollection.prototype.index = function (id) {
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief deletes one index
|
/// @brief deletes an index
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ArangoCollection.prototype.dropIndex = function (id) {
|
ArangoCollection.prototype.dropIndex = function (id) {
|
||||||
|
@ -618,7 +618,7 @@ ArangoCollection.prototype.dropIndex = function (id) {
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief adds a bitarray index
|
/// @brief ensures a bitarray index
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ArangoCollection.prototype.ensureBitarray = function () {
|
ArangoCollection.prototype.ensureBitarray = function () {
|
||||||
|
@ -639,6 +639,28 @@ ArangoCollection.prototype.ensureBitarray = function () {
|
||||||
return requestResult;
|
return requestResult;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief ensures a bitarray index
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
ArangoCollection.prototype.ensureUndefBitarray = function () {
|
||||||
|
var i;
|
||||||
|
var body;
|
||||||
|
var fields = [];
|
||||||
|
|
||||||
|
for (i = 0; i < arguments.length; ++i) {
|
||||||
|
fields.push(arguments[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
body = { type : "bitarray", unique : false, fields : fields, "undefined" : true };
|
||||||
|
|
||||||
|
var requestResult = this._database._connection.POST(this._indexurl(), JSON.stringify(body));
|
||||||
|
|
||||||
|
arangosh.checkRequestResult(requestResult);
|
||||||
|
|
||||||
|
return requestResult;
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief adds a cap constraint
|
/// @brief adds a cap constraint
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -227,521 +227,6 @@ function indexSuite() {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// --SECTION-- ensure index
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test suite: ensureIndex
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
function ensureIndexSuite() {
|
|
||||||
var cn = "UnitTestsCollectionIdx";
|
|
||||||
var collection = null;
|
|
||||||
|
|
||||||
return {
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief set up
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
setUp : function () {
|
|
||||||
internal.db._drop(cn);
|
|
||||||
collection = internal.db._create(cn);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief tear down
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
tearDown : function () {
|
|
||||||
// we need try...catch here because at least one test drops the collection itself!
|
|
||||||
try {
|
|
||||||
collection.drop();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
}
|
|
||||||
collection = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ids
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureId1 : function () {
|
|
||||||
var id = "273475235";
|
|
||||||
var idx = collection.ensureIndex({ type: "hash", fields: [ "a" ], id: id });
|
|
||||||
assertEqual("hash", idx.type);
|
|
||||||
assertFalse(idx.unique);
|
|
||||||
assertEqual([ "a" ], idx.fields);
|
|
||||||
assertEqual(collection.name() + "/" + id, idx.id);
|
|
||||||
|
|
||||||
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
|
||||||
|
|
||||||
assertEqual("hash", res.type);
|
|
||||||
assertFalse(res.unique);
|
|
||||||
assertEqual([ "a" ], res.fields);
|
|
||||||
assertEqual(collection.name() + "/" + id, res.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ids
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureId2 : function () {
|
|
||||||
var id = "2734752388";
|
|
||||||
var idx = collection.ensureIndex({ type: "skiplist", fields: [ "b", "d" ], id: id });
|
|
||||||
assertEqual("skiplist", idx.type);
|
|
||||||
assertFalse(idx.unique);
|
|
||||||
assertEqual([ "b", "d" ], idx.fields);
|
|
||||||
assertEqual(collection.name() + "/" + id, idx.id);
|
|
||||||
|
|
||||||
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
|
||||||
|
|
||||||
assertEqual("skiplist", res.type);
|
|
||||||
assertFalse(res.unique);
|
|
||||||
assertEqual([ "b", "d" ], res.fields);
|
|
||||||
assertEqual(collection.name() + "/" + id, res.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure invalid type
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureTypeFail1 : function () {
|
|
||||||
try {
|
|
||||||
// invalid type given
|
|
||||||
collection.ensureIndex({ type: "foo" });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure invalid type
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureTypeFail2 : function () {
|
|
||||||
try {
|
|
||||||
// no type given
|
|
||||||
collection.ensureIndex({ something: "foo" });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure invalid type
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureTypeForbidden1 : function () {
|
|
||||||
try {
|
|
||||||
// no type given
|
|
||||||
collection.ensureIndex({ type: "primary" });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_FORBIDDEN.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure invalid type
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureTypeForbidden2 : function () {
|
|
||||||
try {
|
|
||||||
// no type given
|
|
||||||
collection.ensureIndex({ type: "edge" });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_FORBIDDEN.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ hash
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureHash : function () {
|
|
||||||
var res = collection.getIndexes();
|
|
||||||
|
|
||||||
assertEqual(1, res.length);
|
|
||||||
|
|
||||||
var idx = collection.ensureIndex({ type: "hash", fields: [ "a" ] });
|
|
||||||
assertEqual("hash", idx.type);
|
|
||||||
assertFalse(idx.unique);
|
|
||||||
assertEqual([ "a" ], idx.fields);
|
|
||||||
|
|
||||||
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
|
||||||
|
|
||||||
assertEqual("hash", res.type);
|
|
||||||
assertFalse(res.unique);
|
|
||||||
assertEqual([ "a" ], res.fields);
|
|
||||||
|
|
||||||
assertEqual(idx.id, res.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ hash
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureUniqueConstraint : function () {
|
|
||||||
var res = collection.getIndexes();
|
|
||||||
|
|
||||||
assertEqual(1, res.length);
|
|
||||||
|
|
||||||
var idx = collection.ensureIndex({ type: "hash", unique: true, fields: [ "b", "c" ] });
|
|
||||||
assertEqual("hash", idx.type);
|
|
||||||
assertTrue(idx.unique);
|
|
||||||
assertEqual([ "b", "c" ], idx.fields);
|
|
||||||
|
|
||||||
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
|
||||||
|
|
||||||
assertEqual("hash", res.type);
|
|
||||||
assertTrue(res.unique);
|
|
||||||
assertEqual([ "b", "c" ], res.fields);
|
|
||||||
|
|
||||||
assertEqual(idx.id, res.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ hash
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureHashFail : function () {
|
|
||||||
try {
|
|
||||||
collection.ensureIndex({ type: "hash" });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ skiplist
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureSkiplist : function () {
|
|
||||||
var res = collection.getIndexes();
|
|
||||||
|
|
||||||
assertEqual(1, res.length);
|
|
||||||
|
|
||||||
var idx = collection.ensureIndex({ type: "skiplist", fields: [ "a" ] });
|
|
||||||
assertEqual("skiplist", idx.type);
|
|
||||||
assertFalse(idx.unique);
|
|
||||||
assertEqual([ "a" ], idx.fields);
|
|
||||||
|
|
||||||
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
|
||||||
|
|
||||||
assertEqual("skiplist", res.type);
|
|
||||||
assertFalse(res.unique);
|
|
||||||
assertEqual([ "a" ], res.fields);
|
|
||||||
|
|
||||||
assertEqual(idx.id, res.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ skiplist
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureUniqueSkiplist : function () {
|
|
||||||
var res = collection.getIndexes();
|
|
||||||
|
|
||||||
assertEqual(1, res.length);
|
|
||||||
|
|
||||||
var idx = collection.ensureIndex({ type: "skiplist", unique: true, fields: [ "b", "c" ] });
|
|
||||||
assertEqual("skiplist", idx.type);
|
|
||||||
assertTrue(idx.unique);
|
|
||||||
assertEqual([ "b", "c" ], idx.fields);
|
|
||||||
|
|
||||||
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
|
||||||
|
|
||||||
assertEqual("skiplist", res.type);
|
|
||||||
assertTrue(res.unique);
|
|
||||||
assertEqual([ "b", "c" ], res.fields);
|
|
||||||
|
|
||||||
assertEqual(idx.id, res.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ skiplist
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureSkiplistFail : function () {
|
|
||||||
try {
|
|
||||||
collection.ensureIndex({ type: "skiplist" });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ fulltext
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureFulltext : function () {
|
|
||||||
var res = collection.getIndexes();
|
|
||||||
|
|
||||||
assertEqual(1, res.length);
|
|
||||||
|
|
||||||
var idx = collection.ensureIndex({ type: "fulltext", fields: [ "a" ] });
|
|
||||||
assertEqual("fulltext", idx.type);
|
|
||||||
assertFalse(idx.unique);
|
|
||||||
assertEqual([ "a" ], idx.fields);
|
|
||||||
assertEqual(2, idx.minLength);
|
|
||||||
|
|
||||||
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
|
||||||
|
|
||||||
assertEqual("fulltext", res.type);
|
|
||||||
assertFalse(res.unique);
|
|
||||||
assertEqual([ "a" ], res.fields);
|
|
||||||
assertEqual(2, res.minLength);
|
|
||||||
|
|
||||||
assertEqual(idx.id, res.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ fulltext
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureFulltextFail : function () {
|
|
||||||
try {
|
|
||||||
collection.ensureIndex({ type: "fulltext", fields: [ "a", "b" ] });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ geo
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureGeo : function () {
|
|
||||||
var res = collection.getIndexes();
|
|
||||||
|
|
||||||
assertEqual(1, res.length);
|
|
||||||
|
|
||||||
var idx = collection.ensureIndex({ type: "geo1", fields: [ "a" ] });
|
|
||||||
assertEqual("geo1", idx.type);
|
|
||||||
assertFalse(idx.unique);
|
|
||||||
assertEqual([ "a" ], idx.fields);
|
|
||||||
assertFalse(idx.ignoreNull);
|
|
||||||
assertFalse(idx.geoJson);
|
|
||||||
|
|
||||||
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
|
||||||
|
|
||||||
assertEqual("geo1", res.type);
|
|
||||||
assertFalse(res.unique);
|
|
||||||
assertEqual([ "a" ], res.fields);
|
|
||||||
assertFalse(res.ignoreNull);
|
|
||||||
assertFalse(res.geoJson);
|
|
||||||
|
|
||||||
assertEqual(idx.id, res.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ geo
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureGeoConstraint : function () {
|
|
||||||
var res = collection.getIndexes();
|
|
||||||
|
|
||||||
assertEqual(1, res.length);
|
|
||||||
|
|
||||||
var idx = collection.ensureIndex({ type: "geo2", fields: [ "a", "b" ], unique: true });
|
|
||||||
assertEqual("geo2", idx.type);
|
|
||||||
assertTrue(idx.unique);
|
|
||||||
assertEqual([ "a", "b" ], idx.fields);
|
|
||||||
assertFalse(idx.ignoreNull);
|
|
||||||
assertFalse(idx.geoJson);
|
|
||||||
|
|
||||||
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
|
||||||
|
|
||||||
assertEqual("geo2", res.type);
|
|
||||||
assertTrue(res.unique);
|
|
||||||
assertEqual([ "a", "b" ], res.fields);
|
|
||||||
assertFalse(res.ignoreNull);
|
|
||||||
assertFalse(res.geoJson);
|
|
||||||
|
|
||||||
assertEqual(idx.id, res.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ geo
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureGeoFail1 : function () {
|
|
||||||
try {
|
|
||||||
collection.ensureIndex({ type: "geo1", fields: [ "a", "b" ] });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ geo
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureGeoFail2 : function () {
|
|
||||||
try {
|
|
||||||
collection.ensureIndex({ type: "geo1", fields: [ ] });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ geo
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureGeoFail3 : function () {
|
|
||||||
try {
|
|
||||||
collection.ensureIndex({ type: "geo2", fields: [ "a" ] });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ geo
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureGeoFail4 : function () {
|
|
||||||
try {
|
|
||||||
collection.ensureIndex({ type: "geo2", fields: [ "a", "b", "c" ] });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ bitarray
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureBitarray : function () {
|
|
||||||
var res = collection.getIndexes();
|
|
||||||
|
|
||||||
assertEqual(1, res.length);
|
|
||||||
|
|
||||||
var idx = collection.ensureIndex({ type: "bitarray", fields: [ [ "a", [ 1, 2 ] ], [ "b", [ 3, 4 ] ] ] });
|
|
||||||
assertEqual("bitarray", idx.type);
|
|
||||||
assertFalse(idx.unique);
|
|
||||||
assertFalse(idx["undefined"]);
|
|
||||||
assertEqual([ [ "a", [ 1, 2 ] ], [ "b", [ 3, 4 ] ] ], idx.fields);
|
|
||||||
|
|
||||||
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
|
||||||
|
|
||||||
assertEqual("bitarray", res.type);
|
|
||||||
assertFalse(res.unique);
|
|
||||||
assertFalse(res["undefined"]);
|
|
||||||
assertEqual([ [ "a", [ 1, 2 ] ], [ "b", [ 3, 4 ] ] ], res.fields);
|
|
||||||
|
|
||||||
assertEqual(idx.id, res.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ bitarray
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureUndefBitarray : function () {
|
|
||||||
var res = collection.getIndexes();
|
|
||||||
|
|
||||||
assertEqual(1, res.length);
|
|
||||||
|
|
||||||
var idx = collection.ensureIndex({ type: "bitarray", fields: [ [ "a", [ 1, 2 ] ] ], "undefined" : true });
|
|
||||||
assertEqual("bitarray", idx.type);
|
|
||||||
assertFalse(idx.unique);
|
|
||||||
assertTrue(idx["undefined"]);
|
|
||||||
assertEqual([ [ "a", [ 1, 2 ] ] ], idx.fields);
|
|
||||||
|
|
||||||
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
|
||||||
|
|
||||||
assertEqual("bitarray", res.type);
|
|
||||||
assertFalse(res.unique);
|
|
||||||
assertTrue(res["undefined"]);
|
|
||||||
assertEqual([ [ "a", [ 1, 2 ] ] ], res.fields);
|
|
||||||
|
|
||||||
assertEqual(idx.id, res.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ bitarray
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureBitarrayFail1 : function () {
|
|
||||||
try {
|
|
||||||
collection.ensureIndex({ type: "bitarray", fields: [ "a" ] });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ bitarray
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureBitarrayFail2 : function () {
|
|
||||||
try {
|
|
||||||
collection.ensureIndex({ type: "bitarray", fields: [ "a", "b" ] });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ bitarray
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureBitarrayFail3 : function () {
|
|
||||||
try {
|
|
||||||
collection.ensureIndex({ type: "bitarray", fields: [ [ "a", "b" ] ] });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test: ensure w/ bitarray
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testEnsureBitarrayFail4 : function () {
|
|
||||||
try {
|
|
||||||
collection.ensureIndex({ type: "bitarray", fields: [ [ "a" ] ] });
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// --SECTION-- getIndexes
|
// --SECTION-- getIndexes
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
@ -1271,7 +756,6 @@ function getIndexesEdgesSuite() {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
jsunity.run(indexSuite);
|
jsunity.run(indexSuite);
|
||||||
jsunity.run(ensureIndexSuite);
|
|
||||||
jsunity.run(getIndexesSuite);
|
jsunity.run(getIndexesSuite);
|
||||||
jsunity.run(getIndexesEdgesSuite);
|
jsunity.run(getIndexesEdgesSuite);
|
||||||
|
|
||||||
|
|
|
@ -1661,9 +1661,9 @@ function collectionNotFound (req, res, collection, headers) {
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief generates an error for unknown index
|
/// @brief generates an error for an unknown index
|
||||||
///
|
///
|
||||||
/// @FUN{actions.collectionNotFound(@FA{req}, @FA{res}, @FA{collection}, @FA{index}, @FA{headers})}
|
/// @FUN{actions.indexNotFound(@FA{req}, @FA{res}, @FA{collection}, @FA{index}, @FA{headers})}
|
||||||
///
|
///
|
||||||
/// The function generates an error response.
|
/// The function generates an error response.
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -1742,6 +1742,8 @@ function resultException (req, res, err, headers, verbose) {
|
||||||
case arangodb.ERROR_ARANGO_DOCUMENT_NOT_FOUND:
|
case arangodb.ERROR_ARANGO_DOCUMENT_NOT_FOUND:
|
||||||
case arangodb.ERROR_ARANGO_DATABASE_NOT_FOUND:
|
case arangodb.ERROR_ARANGO_DATABASE_NOT_FOUND:
|
||||||
case arangodb.ERROR_ARANGO_ENDPOINT_NOT_FOUND:
|
case arangodb.ERROR_ARANGO_ENDPOINT_NOT_FOUND:
|
||||||
|
case arangodb.ERROR_ARANGO_NO_INDEX:
|
||||||
|
case arangodb.ERROR_ARANGO_INDEX_NOT_FOUND:
|
||||||
case arangodb.ERROR_CURSOR_NOT_FOUND:
|
case arangodb.ERROR_CURSOR_NOT_FOUND:
|
||||||
case arangodb.ERROR_USER_NOT_FOUND:
|
case arangodb.ERROR_USER_NOT_FOUND:
|
||||||
code = exports.HTTP_NOT_FOUND;
|
code = exports.HTTP_NOT_FOUND;
|
||||||
|
|
|
@ -0,0 +1,570 @@
|
||||||
|
/*jslint indent: 2,
|
||||||
|
nomen: true,
|
||||||
|
maxlen: 80 */
|
||||||
|
/*global require,
|
||||||
|
db,
|
||||||
|
assertEqual, assertTrue,
|
||||||
|
ArangoCollection */
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test the index
|
||||||
|
///
|
||||||
|
/// @file
|
||||||
|
///
|
||||||
|
/// DISCLAIMER
|
||||||
|
///
|
||||||
|
/// Copyright 2010-2012 triagens GmbH, Cologne, Germany
|
||||||
|
///
|
||||||
|
/// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
/// you may not use this file except in compliance with the License.
|
||||||
|
/// You may obtain a copy of the License at
|
||||||
|
///
|
||||||
|
/// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
///
|
||||||
|
/// Unless required by applicable law or agreed to in writing, software
|
||||||
|
/// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
/// See the License for the specific language governing permissions and
|
||||||
|
/// limitations under the License.
|
||||||
|
///
|
||||||
|
/// Copyright holder is triAGENS GmbH, Cologne, Germany
|
||||||
|
///
|
||||||
|
/// @author Dr. Frank Celler, Lucas Dohmen
|
||||||
|
/// @author Copyright 2012, triAGENS GmbH, Cologne, Germany
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
var jsunity = require("jsunity");
|
||||||
|
var internal = require("internal");
|
||||||
|
var errors = internal.errors;
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- ensure index
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test suite: ensureIndex
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
function ensureIndexSuite() {
|
||||||
|
var cn = "UnitTestsCollectionIdx";
|
||||||
|
var collection = null;
|
||||||
|
|
||||||
|
return {
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief set up
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
setUp : function () {
|
||||||
|
internal.db._drop(cn);
|
||||||
|
collection = internal.db._create(cn);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief tear down
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
tearDown : function () {
|
||||||
|
// we need try...catch here because at least one test drops the collection itself!
|
||||||
|
try {
|
||||||
|
collection.drop();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
}
|
||||||
|
collection = null;
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ids
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureId1 : function () {
|
||||||
|
var id = "273475235";
|
||||||
|
var idx = collection.ensureIndex({ type: "hash", fields: [ "a" ], id: id });
|
||||||
|
assertEqual("hash", idx.type);
|
||||||
|
assertFalse(idx.unique);
|
||||||
|
assertEqual([ "a" ], idx.fields);
|
||||||
|
assertEqual(collection.name() + "/" + id, idx.id);
|
||||||
|
|
||||||
|
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
||||||
|
|
||||||
|
assertEqual("hash", res.type);
|
||||||
|
assertFalse(res.unique);
|
||||||
|
assertEqual([ "a" ], res.fields);
|
||||||
|
assertEqual(collection.name() + "/" + id, res.id);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ids
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureId2 : function () {
|
||||||
|
var id = "2734752388";
|
||||||
|
var idx = collection.ensureIndex({ type: "skiplist", fields: [ "b", "d" ], id: id });
|
||||||
|
assertEqual("skiplist", idx.type);
|
||||||
|
assertFalse(idx.unique);
|
||||||
|
assertEqual([ "b", "d" ], idx.fields);
|
||||||
|
assertEqual(collection.name() + "/" + id, idx.id);
|
||||||
|
|
||||||
|
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
||||||
|
|
||||||
|
assertEqual("skiplist", res.type);
|
||||||
|
assertFalse(res.unique);
|
||||||
|
assertEqual([ "b", "d" ], res.fields);
|
||||||
|
assertEqual(collection.name() + "/" + id, res.id);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure invalid type
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureTypeFail1 : function () {
|
||||||
|
try {
|
||||||
|
// invalid type given
|
||||||
|
collection.ensureIndex({ type: "foo" });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure invalid type
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureTypeFail2 : function () {
|
||||||
|
try {
|
||||||
|
// no type given
|
||||||
|
collection.ensureIndex({ something: "foo" });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure invalid type
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureTypeForbidden1 : function () {
|
||||||
|
try {
|
||||||
|
// no type given
|
||||||
|
collection.ensureIndex({ type: "primary" });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_FORBIDDEN.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure invalid type
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureTypeForbidden2 : function () {
|
||||||
|
try {
|
||||||
|
// no type given
|
||||||
|
collection.ensureIndex({ type: "edge" });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_FORBIDDEN.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ hash
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureHash : function () {
|
||||||
|
var res = collection.getIndexes();
|
||||||
|
|
||||||
|
assertEqual(1, res.length);
|
||||||
|
|
||||||
|
var idx = collection.ensureIndex({ type: "hash", fields: [ "a" ] });
|
||||||
|
assertEqual("hash", idx.type);
|
||||||
|
assertFalse(idx.unique);
|
||||||
|
assertEqual([ "a" ], idx.fields);
|
||||||
|
|
||||||
|
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
||||||
|
|
||||||
|
assertEqual("hash", res.type);
|
||||||
|
assertFalse(res.unique);
|
||||||
|
assertEqual([ "a" ], res.fields);
|
||||||
|
|
||||||
|
assertEqual(idx.id, res.id);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ hash
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureUniqueConstraint : function () {
|
||||||
|
var res = collection.getIndexes();
|
||||||
|
|
||||||
|
assertEqual(1, res.length);
|
||||||
|
|
||||||
|
var idx = collection.ensureIndex({ type: "hash", unique: true, fields: [ "b", "c" ] });
|
||||||
|
assertEqual("hash", idx.type);
|
||||||
|
assertTrue(idx.unique);
|
||||||
|
assertEqual([ "b", "c" ], idx.fields);
|
||||||
|
|
||||||
|
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
||||||
|
|
||||||
|
assertEqual("hash", res.type);
|
||||||
|
assertTrue(res.unique);
|
||||||
|
assertEqual([ "b", "c" ], res.fields);
|
||||||
|
|
||||||
|
assertEqual(idx.id, res.id);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ hash
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureHashFail : function () {
|
||||||
|
try {
|
||||||
|
collection.ensureIndex({ type: "hash" });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ skiplist
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureSkiplist : function () {
|
||||||
|
var res = collection.getIndexes();
|
||||||
|
|
||||||
|
assertEqual(1, res.length);
|
||||||
|
|
||||||
|
var idx = collection.ensureIndex({ type: "skiplist", fields: [ "a" ] });
|
||||||
|
assertEqual("skiplist", idx.type);
|
||||||
|
assertFalse(idx.unique);
|
||||||
|
assertEqual([ "a" ], idx.fields);
|
||||||
|
|
||||||
|
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
||||||
|
|
||||||
|
assertEqual("skiplist", res.type);
|
||||||
|
assertFalse(res.unique);
|
||||||
|
assertEqual([ "a" ], res.fields);
|
||||||
|
|
||||||
|
assertEqual(idx.id, res.id);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ skiplist
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureUniqueSkiplist : function () {
|
||||||
|
var res = collection.getIndexes();
|
||||||
|
|
||||||
|
assertEqual(1, res.length);
|
||||||
|
|
||||||
|
var idx = collection.ensureIndex({ type: "skiplist", unique: true, fields: [ "b", "c" ] });
|
||||||
|
assertEqual("skiplist", idx.type);
|
||||||
|
assertTrue(idx.unique);
|
||||||
|
assertEqual([ "b", "c" ], idx.fields);
|
||||||
|
|
||||||
|
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
||||||
|
|
||||||
|
assertEqual("skiplist", res.type);
|
||||||
|
assertTrue(res.unique);
|
||||||
|
assertEqual([ "b", "c" ], res.fields);
|
||||||
|
|
||||||
|
assertEqual(idx.id, res.id);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ skiplist
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureSkiplistFail : function () {
|
||||||
|
try {
|
||||||
|
collection.ensureIndex({ type: "skiplist" });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ fulltext
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureFulltext : function () {
|
||||||
|
var res = collection.getIndexes();
|
||||||
|
|
||||||
|
assertEqual(1, res.length);
|
||||||
|
|
||||||
|
var idx = collection.ensureIndex({ type: "fulltext", fields: [ "a" ] });
|
||||||
|
assertEqual("fulltext", idx.type);
|
||||||
|
assertFalse(idx.unique);
|
||||||
|
assertEqual([ "a" ], idx.fields);
|
||||||
|
assertEqual(2, idx.minLength);
|
||||||
|
|
||||||
|
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
||||||
|
|
||||||
|
assertEqual("fulltext", res.type);
|
||||||
|
assertFalse(res.unique);
|
||||||
|
assertEqual([ "a" ], res.fields);
|
||||||
|
assertEqual(2, res.minLength);
|
||||||
|
|
||||||
|
assertEqual(idx.id, res.id);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ fulltext
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureFulltextFail : function () {
|
||||||
|
try {
|
||||||
|
collection.ensureIndex({ type: "fulltext", fields: [ "a", "b" ] });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ geo
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureGeo : function () {
|
||||||
|
var res = collection.getIndexes();
|
||||||
|
|
||||||
|
assertEqual(1, res.length);
|
||||||
|
|
||||||
|
var idx = collection.ensureIndex({ type: "geo1", fields: [ "a" ] });
|
||||||
|
assertEqual("geo1", idx.type);
|
||||||
|
assertFalse(idx.unique);
|
||||||
|
assertEqual([ "a" ], idx.fields);
|
||||||
|
assertFalse(idx.ignoreNull);
|
||||||
|
assertFalse(idx.geoJson);
|
||||||
|
|
||||||
|
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
||||||
|
|
||||||
|
assertEqual("geo1", res.type);
|
||||||
|
assertFalse(res.unique);
|
||||||
|
assertEqual([ "a" ], res.fields);
|
||||||
|
assertFalse(res.ignoreNull);
|
||||||
|
assertFalse(res.geoJson);
|
||||||
|
|
||||||
|
assertEqual(idx.id, res.id);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ geo
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureGeoConstraint : function () {
|
||||||
|
var res = collection.getIndexes();
|
||||||
|
|
||||||
|
assertEqual(1, res.length);
|
||||||
|
|
||||||
|
var idx = collection.ensureIndex({ type: "geo2", fields: [ "a", "b" ], unique: true });
|
||||||
|
assertEqual("geo2", idx.type);
|
||||||
|
assertTrue(idx.unique);
|
||||||
|
assertEqual([ "a", "b" ], idx.fields);
|
||||||
|
assertFalse(idx.ignoreNull);
|
||||||
|
assertFalse(idx.geoJson);
|
||||||
|
|
||||||
|
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
||||||
|
|
||||||
|
assertEqual("geo2", res.type);
|
||||||
|
assertTrue(res.unique);
|
||||||
|
assertEqual([ "a", "b" ], res.fields);
|
||||||
|
assertFalse(res.ignoreNull);
|
||||||
|
assertFalse(res.geoJson);
|
||||||
|
|
||||||
|
assertEqual(idx.id, res.id);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ geo
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureGeoFail1 : function () {
|
||||||
|
try {
|
||||||
|
collection.ensureIndex({ type: "geo1", fields: [ "a", "b" ] });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ geo
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureGeoFail2 : function () {
|
||||||
|
try {
|
||||||
|
collection.ensureIndex({ type: "geo1", fields: [ ] });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ geo
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureGeoFail3 : function () {
|
||||||
|
try {
|
||||||
|
collection.ensureIndex({ type: "geo2", fields: [ "a" ] });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ geo
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureGeoFail4 : function () {
|
||||||
|
try {
|
||||||
|
collection.ensureIndex({ type: "geo2", fields: [ "a", "b", "c" ] });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ bitarray
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureBitarray : function () {
|
||||||
|
var res = collection.getIndexes();
|
||||||
|
|
||||||
|
assertEqual(1, res.length);
|
||||||
|
|
||||||
|
var idx = collection.ensureIndex({ type: "bitarray", fields: [ [ "a", [ 1, 2 ] ], [ "b", [ 3, 4 ] ] ] });
|
||||||
|
assertEqual("bitarray", idx.type);
|
||||||
|
assertFalse(idx.unique);
|
||||||
|
assertFalse(idx["undefined"]);
|
||||||
|
assertEqual([ [ "a", [ 1, 2 ] ], [ "b", [ 3, 4 ] ] ], idx.fields);
|
||||||
|
|
||||||
|
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
||||||
|
|
||||||
|
assertEqual("bitarray", res.type);
|
||||||
|
assertFalse(res.unique);
|
||||||
|
assertFalse(res["undefined"]);
|
||||||
|
assertEqual([ [ "a", [ 1, 2 ] ], [ "b", [ 3, 4 ] ] ], res.fields);
|
||||||
|
|
||||||
|
assertEqual(idx.id, res.id);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ bitarray
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureUndefBitarray : function () {
|
||||||
|
var res = collection.getIndexes();
|
||||||
|
|
||||||
|
assertEqual(1, res.length);
|
||||||
|
|
||||||
|
var idx = collection.ensureIndex({ type: "bitarray", fields: [ [ "a", [ 1, 2 ] ] ], "undefined" : true });
|
||||||
|
assertEqual("bitarray", idx.type);
|
||||||
|
assertFalse(idx.unique);
|
||||||
|
assertTrue(idx["undefined"]);
|
||||||
|
assertEqual([ [ "a", [ 1, 2 ] ] ], idx.fields);
|
||||||
|
|
||||||
|
res = collection.getIndexes()[collection.getIndexes().length - 1];
|
||||||
|
|
||||||
|
assertEqual("bitarray", res.type);
|
||||||
|
assertFalse(res.unique);
|
||||||
|
assertTrue(res["undefined"]);
|
||||||
|
assertEqual([ [ "a", [ 1, 2 ] ] ], res.fields);
|
||||||
|
|
||||||
|
assertEqual(idx.id, res.id);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ bitarray
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureBitarrayFail1 : function () {
|
||||||
|
try {
|
||||||
|
collection.ensureIndex({ type: "bitarray", fields: [ "a" ] });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ bitarray
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureBitarrayFail2 : function () {
|
||||||
|
try {
|
||||||
|
collection.ensureIndex({ type: "bitarray", fields: [ "a", "b" ] });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ bitarray
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureBitarrayFail3 : function () {
|
||||||
|
try {
|
||||||
|
collection.ensureIndex({ type: "bitarray", fields: [ [ "a", "b" ] ] });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: ensure w/ bitarray
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
testEnsureBitarrayFail4 : function () {
|
||||||
|
try {
|
||||||
|
collection.ensureIndex({ type: "bitarray", fields: [ [ "a" ] ] });
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
assertEqual(errors.ERROR_BAD_PARAMETER.code, err.errorNum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// --SECTION-- main
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief executes the test suites
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
jsunity.run(ensureIndexSuite);
|
||||||
|
|
||||||
|
return jsunity.done();
|
||||||
|
|
||||||
|
// Local Variables:
|
||||||
|
// mode: outline-minor
|
||||||
|
// outline-regexp: "^\\(/// @brief\\|/// @addtogroup\\|// --SECTION--\\|/// @page\\|/// @}\\)"
|
||||||
|
// End:
|
|
@ -90,7 +90,7 @@ ERROR_ARANGO_DUPLICATE_NAME,1207,"duplicate name","Will be raised when a name du
|
||||||
ERROR_ARANGO_ILLEGAL_NAME,1208,"illegal name","Will be raised when an illegal name is detected."
|
ERROR_ARANGO_ILLEGAL_NAME,1208,"illegal name","Will be raised when an illegal name is detected."
|
||||||
ERROR_ARANGO_NO_INDEX,1209,"no suitable index known","Will be raised when no suitable index for the query is known."
|
ERROR_ARANGO_NO_INDEX,1209,"no suitable index known","Will be raised when no suitable index for the query is known."
|
||||||
ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED,1210,"unique constraint violated","Will be raised when there is a unique constraint violation."
|
ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED,1210,"unique constraint violated","Will be raised when there is a unique constraint violation."
|
||||||
ERROR_ARANGO_GEO_INDEX_VIOLATED,1211,"geo index violated","Will be raised when a illegale coordinate is used."
|
ERROR_ARANGO_GEO_INDEX_VIOLATED,1211,"geo index violated","Will be raised when an illegal coordinate is used."
|
||||||
ERROR_ARANGO_INDEX_NOT_FOUND,1212,"index not found","Will be raised when an index with a given identifier is unknown."
|
ERROR_ARANGO_INDEX_NOT_FOUND,1212,"index not found","Will be raised when an index with a given identifier is unknown."
|
||||||
ERROR_ARANGO_CROSS_COLLECTION_REQUEST,1213,"cross collection request not allowed","Will be raised when a cross-collection is requested."
|
ERROR_ARANGO_CROSS_COLLECTION_REQUEST,1213,"cross collection request not allowed","Will be raised when a cross-collection is requested."
|
||||||
ERROR_ARANGO_INDEX_HANDLE_BAD,1214,"illegal index handle","Will be raised when a index handle is corrupt."
|
ERROR_ARANGO_INDEX_HANDLE_BAD,1214,"illegal index handle","Will be raised when a index handle is corrupt."
|
||||||
|
|
|
@ -139,7 +139,7 @@ extern "C" {
|
||||||
/// - 1210: @LIT{unique constraint violated}
|
/// - 1210: @LIT{unique constraint violated}
|
||||||
/// Will be raised when there is a unique constraint violation.
|
/// Will be raised when there is a unique constraint violation.
|
||||||
/// - 1211: @LIT{geo index violated}
|
/// - 1211: @LIT{geo index violated}
|
||||||
/// Will be raised when a illegale coordinate is used.
|
/// Will be raised when an illegal coordinate is used.
|
||||||
/// - 1212: @LIT{index not found}
|
/// - 1212: @LIT{index not found}
|
||||||
/// Will be raised when an index with a given identifier is unknown.
|
/// Will be raised when an index with a given identifier is unknown.
|
||||||
/// - 1213: @LIT{cross collection request not allowed}
|
/// - 1213: @LIT{cross collection request not allowed}
|
||||||
|
@ -1083,7 +1083,7 @@ void TRI_InitialiseErrorMessages (void);
|
||||||
///
|
///
|
||||||
/// geo index violated
|
/// geo index violated
|
||||||
///
|
///
|
||||||
/// Will be raised when a illegale coordinate is used.
|
/// Will be raised when an illegal coordinate is used.
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#define TRI_ERROR_ARANGO_GEO_INDEX_VIOLATED (1211)
|
#define TRI_ERROR_ARANGO_GEO_INDEX_VIOLATED (1211)
|
||||||
|
|
Loading…
Reference in New Issue