1
0
Fork 0

Merge branch 'devel' of github.com:triAGENS/ArangoDB into devel

This commit is contained in:
Heiko Kernbach 2014-11-07 16:19:57 +01:00
commit 15dafec073
14 changed files with 320 additions and 176 deletions

View File

@ -79,6 +79,16 @@ v2.3.0-beta1 (2014-11-01)
server threads. Thus no change in configuration is required to keep the old server threads. Thus no change in configuration is required to keep the old
behavior. behavior.
However, the default configuration files shipped with ArangoDB have been changed.
The number of server threads has been increased in the configuration files, and
the number of V8 contexts is now explicitly set in the configuration files (to
the same value as the number of server threads was set to in 2.2).
If you are using the default config files or merge them with your local config files,
please review if the higher default number of server threads is okay in your
environment. Additionally you should verify that the number of V8 contexts
created (as specified in option `--javascript.v8-contexts`) is okay.
* removed index type "bitarray" * removed index type "bitarray"
Bitarray indexes were only half-way documented and integrated in previous versions Bitarray indexes were only half-way documented and integrated in previous versions

View File

@ -4,7 +4,7 @@
To upgrade an existing ArangoDB database to a newer version of ArangoDB (e.g. 1.2 to 1.3, or 2.0 to 2.1), the following method is recommended: To upgrade an existing ArangoDB database to a newer version of ArangoDB (e.g. 1.2 to 1.3, or 2.0 to 2.1), the following method is recommended:
* Check the *CHANGELOG* for API or other changes in the new version of ArangoDB and make sure your applications can deal with them * Check the *CHANGELOG* and the [list of incompatible changes](../Upgrading/UpgradingChanges23.html) for API or other changes in the new version of ArangoDB and make sure your applications can deal with them
* Stop the "old" arangod service or binary * Stop the "old" arangod service or binary
* Copy the entire "old" data directory to a safe place (that is, a backup) * Copy the entire "old" data directory to a safe place (that is, a backup)
* Install the new version of ArangoDB and start the server with the *--upgrade* option once. This might write to the logfile of ArangoDB, so you may want to check the logs for any issues before going on. * Install the new version of ArangoDB and start the server with the *--upgrade* option once. This might write to the logfile of ArangoDB, so you may want to check the logs for any issues before going on.
@ -16,4 +16,4 @@ If anything goes wrong during or shortly after the upgrade:
* Revert to the "old" arangod binary and restore the "old" data directory * Revert to the "old" arangod binary and restore the "old" data directory
* Start the "old" version again * Start the "old" version again
It is not supported to use datafiles created or modified by a newer version of ArangoDB with an older ArangoDB version. For example, it is unsupported and is likely to cause problems when using 1.4 datafiles with an ArangoDB 1.3 instance. It is not supported to use datafiles created or modified by a newer version of ArangoDB with an older ArangoDB version. For example, it is unsupported and is likely to cause problems when using 2.3 datafiles with an ArangoDB 2.2 instance.

View File

@ -2,33 +2,30 @@
Welcome to the ArangoDB documentation! Welcome to the ArangoDB documentation!
The documentation introduces ArangoDB for you as an user, developer and administrator and describes all of his functions in detail. The documentation introduces ArangoDB for you as an user, developer and administrator and describes all of its functions in detail.
ArangoDB is a multi-purpose open-source database with a flexible data ArangoDB is a multi-purpose, open-source database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions. Use ACID transactions if you require them. Scale horizontally and vertically with a few mouse clicks.
model for documents, graphs and key-values. You can easily build high
performance applications using a convenient
[SQL-like query language](../Aql/README.md) or [JavaScript](../Foxx/README.md) extensions.
The database server [_arangod_](../FirstSteps/Arangod.md) stores all documents and serves them Key features include:
using a REST interface. There are [drivers](https://www.arangodb.com/drivers) for all major languages like
Ruby, Python, PHP, JavaScript, and Perl. In the following sections we
will use the JavaScript shell to communicate with the database and
demonstrate some of ArangoDB's features using JavaScript.
Some of the features and programs of ArangoDB are: * **Schema-free schemata** let you combine the space efficiency of MySQL with the performance power of NoSQL
* Use ArangoDB as an **application server** and fuse your application and database together for maximal throughput
- A powerful query language * JavaScript for all: **no language zoo**, you can use one language from your browser to your back-end
- Open Source * ArangoDB is **multi-threaded** - exploit the power of all your cores
- A database daemon * **Flexible data modelling**: model your data as combination of key-value pairs, documents or graphs - perfect for social relations
- An ArangoDB shell * Free **index choice**: use the correct index for your problem, be it a skip list or a fulltext search
- Flexible data modeling * Configurable **durability**: let the application decide if it needs more durability or more performance
- And many more! * No-nonsense storage: ArangoDB uses all of the power of **modern storage hardware**, like SSD and large caches
* **Powerful query language** (AQL) to retrieve and modify data
* **Transactions**: run queries on multiple documents or collections with optional transactional consistency and isolation
* **Replication** and **Sharding**: set up the database in a master-slave configuration or spread bigger datasets across multiple servers
* It is **open source** (Apache Licence 2.0)
In this documentation you can inform yourself about all the functions, features and programs ArangoDB provides for you. In this documentation you can inform yourself about all the functions, features and programs ArangoDB provides for you.
If you want to test the shell go [here](https://www.arangodb.com/shtutorial). If you want to test the shell go [here](https://www.arangodb.com/shtutorial/).
If you want to play with our query language, go to our [AQL Tutorial](https://www.arangodb.com/shtutorial). If you want to play with our query language, go to our [AQL Tutorial](https://www.arangodb.com/aqltutorial/).
!SUBSECTION Community !SUBSECTION Community

View File

@ -1,7 +1,8 @@
!CHAPTER Upgrading to ArangoDB 2.3 !CHAPTER Upgrading to ArangoDB 2.3
Please read the following sections if you upgrade from a previous version to Please read the following sections if you upgrade from a previous version to
ArangoDB 2.3. ArangoDB 2.3. Please be sure that you have checked the list of [changes in 2.3](../Upgrading/UpgradingChanges23.html)
before upgrading.
Please note first that a database directory used with ArangoDB 2.3 Please note first that a database directory used with ArangoDB 2.3
cannot be used with earlier versions (e.g. ArangoDB 2.2) any cannot be used with earlier versions (e.g. ArangoDB 2.2) any
@ -113,151 +114,3 @@ above in the graphical front end. You have to replace `"root"` with
a user name and `""` with a password that is valid for authentication a user name and `""` with a password that is valid for authentication
with the cluster. with the cluster.
!SECTION AQL: Changed behavior
!SUBSECTION AQL queries throw less exceptions
ArangoDB 2.3 contains a completely rewritten AQL query optimizer and execution
engine. This means that AQL queries will be executed with a different engine than
in ArangoDB 2.2 and earlier. Parts of AQL queries might be executed in different
order than before because the AQL optimizer has more freedom to move things
around in a query.
In previous versions of ArangoDB, AQL queries aborted with an exception in many
situations and threw a runtime exception. Exceptions were thrown when trying to
find a value using the `IN` operator in a non-list element, when trying to use
non-boolean values with the logical operands `&&` or `||` or `!`, when using non-numeric
values in arithmetic operations, when passing wrong parameters into functions etc.
In ArangoDB 2.3 this has been changed in many cases to make AQL more user-friendly
and to allow the optimization to perform much more query optimizations.
Here is a summary of changes:
- when a non-list value is used on the right-hand side of the `IN` operator, the
result will be `false` in ArangoDB 2.3, and no exception will be thrown.
- the boolean operators `&&` and `||` do not throw in ArangoDB 2.3 if any of the
operands is not a boolean value. Instead, they will perform an implicit cast of
the values to booleans. Their result will be as follows:
- `lhs && rhs` will return `lhs` if it is `false` or would be `false` when converted
into a boolean. If `lhs` is `true` or would be `true` when converted to a boolean,
`rhs` will be returned.
- `lhs || rhs` will return 'lhs` if it is `true` or would be `true` when converted
into a boolean. If `lhs` is `false` or would be `false` when converted to a boolean,
`rhs` will be returned.
- `! value` will return the negated value of `value` converted into a boolean
- the arithmetic operators (`+`, `-`, `*`, `/`, `%`) can be applied to any value and
will not throw exceptions when applied to non-numeric values. Instead, any value used
in these operators will be casted to a numeric value implicitly. If no numeric result
can be produced by an arithmetic operator, it will return `null` in ArangoDB 2.3. This
is also true for division by zero.
- passing arguments of invalid types into AQL functions does not throw a runtime
exception in most cases, but may produce runtime warnings. Built-in AQL functions that
receive invalid arguments will then return `null`.
!SUBSECTION Changed return values in ArangoQueryCursor.getExtra()
The return value of `ArangoQueryCursor.getExtra()` has been changed in ArangoDB 2.3.
It now contains a `stats` attribute with statistics about the query previously executed.
It also contains a `warnings` attribute with warnings that happened during query
execution.
The new return value format looks like this:
```
arangosh> stmt = db._createStatement("FOR i IN mycollection RETURN i"); stmt.execute().getExtra()
{
"stats" : {
"writesExecuted" : 0,
"writesIgnored" : 0,
"scannedFull" : 2600,
"scannedIndex" : 0
},
"warnings" : [ ]
}
arangosh> stmt = db._createStatement("FOR i IN xx REMOVE i IN xx"); stmt.execute().getExtra()
{
"stats" : {
"writesExecuted" : 2600,
"writesIgnored" : 0,
"scannedFull" : 2600,
"scannedIndex" : 0
},
"warnings" : [ ]
}
```
In ArangoDB 2.2, the return value of `ArangoQueryCursor.getExtra()` was empty for read-only
queries and contained two queries for data-modification queries:
```
arangosh> stmt = db._createStatement("FOR i IN mycollection RETURN i"); stmt.execute().getExtra()
{
}
arangosh> stmt = db._createStatement("FOR i IN mycollection REMOVE i IN mycollection"); stmt.execute().getExtra()
{
"operations" : {
"executed" : 2600,
"ignored" : 0
}
}
```
!SUBSECTION Changed return values in ArangoStatement.explain()
The return value of `ArangoStatement.explain()` has been changed in ArangoDB 2.3.
In ArangoDB 2.3, the full execution plan for an AQL query is returned alongside all
applied optimizer rules, optimization warnings etc. It is also possible to have the
optimizer return all execution plans. This required a new data structure.
Client programs that use `ArangoStatement.explain()` or the HTTP REST API method
`POST /_api/explain` may need to be adjusted to use the new return format.
The return value of `ArangoStatement.parse()` has been extended in ArangoDB 2.3.
In addition to the existing attributes, ArangoDB 2.3 will also return an `ast` attribute
containing the abstract syntax tree of the statement. This extra attribute can
safely be ignored by client programs.
!SUBSECTION New AQL keywords
The following keywords have been added to AQL in ArangoDB 2.3:
- *NOT*
- *AND*
- *OR*
Unquoted usage of these keywords for attribute names in AQL queries will likely
fail in ArangoDB 2.3. If any such attribute name needs to be used in a query, it
should be enclosed in backticks to indicate the usage of a literal attribute
name.
!SECTION Removed features
!SUBSECTION Bitarray indexes
Bitarray indexes were only half-way documented and integrated in previous versions
of ArangoDB so their benefit was limited. The support for bitarray indexes has
thus been removed in ArangoDB 2.3. It is not possible to create indexes of type
"bitarray" with ArangoDB 2.3.
When a collection is openend that contains a bitarray index definition created
with a previous version of ArangoDB, ArangoDB will ignore it and log the following
warning:
index type 'bitarray' is not supported in this version of ArangoDB and is ignored
Future versions of ArangoDB may automatically remove such index definitions so the
warnings will eventually disappear.
!SUBSECTION Other removed features
The HTTP API method at `POST /_admin/modules/flush` has been removed.

View File

@ -4,6 +4,37 @@ It is recommended to check the following list of incompatible changes **before**
upgrading to ArangoDB 2.3, and adjust any client programs if necessary. upgrading to ArangoDB 2.3, and adjust any client programs if necessary.
!SECTION Default configuration file changes
With ArangoDB 2.3, the number of server threads can be configured independently of
the number of V8 contexts. The configuration option `--javascript.v8-contexts` was
added to arangod to provide better control over the number of V8 contexts created
in arangod.
Previously, the number of V8 contexts arangod created at startup was equal
to the number of server threads (as specified by option `--server.threads`).
In some situations it may be more sensible to create different amounts of threads
and V8 contexts. This is because each V8 contexts created will consume memory
and requires CPU resources for periodic garbage collection. Contrary, server
threads do not have such high memory or CPU footprint.
If the option `--javascript.v8-contexts` is not specified, the number of V8
contexts created at startup will remain equal to the number of server threads.
Thus no change in configuration is required to keep the same behavior as in
previous ArangoDB versions.
However, the default configuration files shipped with ArangoDB have been changed.
The number of server threads has been increased in the configuration files, and
the number of V8 contexts is now explicitly set in the configuration files (to
the same value as the number of server threads was set to in 2.2).
If you are using the default config files or merge them with your local config files,
please review if the higher default number of server threads is okay in your
environment. Additionally you should verify that the number of V8 contexts
created (as specified in option `--javascript.v8-contexts`) is okay.
!SECTION AQL !SECTION AQL
!SUBSECTION AQL queries throw less exceptions !SUBSECTION AQL queries throw less exceptions

View File

@ -15,6 +15,7 @@ threads = 1
startup-directory = @PKGDATADIR@/js startup-directory = @PKGDATADIR@/js
app-path = @LOCALSTATEDIR@/lib/arangodb-apps app-path = @LOCALSTATEDIR@/lib/arangodb-apps
script = @PKGDATADIR@/js/server/arango-dfdb.js script = @PKGDATADIR@/js/server/arango-dfdb.js
v8-contexts = 1
[log] [log]
level = info level = info

View File

@ -34,8 +34,8 @@ endpoint = tcp://0.0.0.0:8529
# disable authentication for the admin frontend # disable authentication for the admin frontend
disable-authentication = yes disable-authentication = yes
# number of worker threads for V8 # number of server threads
threads = 5 threads = 10
# the user and group are normally set in the start script # the user and group are normally set in the start script
# uid = arangodb # uid = arangodb
@ -49,6 +49,9 @@ startup-directory = @PKGDATADIR@/js
app-path = @LOCALSTATEDIR@/lib/arangodb-apps app-path = @LOCALSTATEDIR@/lib/arangodb-apps
# app-path = @HOMEDRIVE@/@HOMEPATH@/arangodb/apps # app-path = @HOMEDRIVE@/@HOMEPATH@/arangodb/apps
# number of worker threads for V8
v8-contexts = 5
[log] [log]
level = info level = info
severity = human severity = human

View File

@ -14,6 +14,7 @@ threads = 1
startup-directory = ./js startup-directory = ./js
app-path = ./js/apps app-path = ./js/apps
script = ./js/server/arango-dfdb.js script = ./js/server/arango-dfdb.js
v8-contexts = 1
[ruby] [ruby]
modules-path = ./mr modules-path = ./mr

View File

@ -5,7 +5,7 @@
[server] [server]
disable-authentication = true disable-authentication = true
endpoint = tcp://localhost:8529 endpoint = tcp://localhost:8529
threads = 5 threads = 10
keyfile = UnitTests/server.pem keyfile = UnitTests/server.pem
# reuse-address = false # reuse-address = false
@ -16,6 +16,7 @@ threads = 3
startup-directory = ./js startup-directory = ./js
app-path = ./js/apps app-path = ./js/apps
frontend-development = false frontend-development = false
v8-contexts = 5
[ruby] [ruby]
action-directory = ./mr/actions/system action-directory = ./mr/actions/system

View File

@ -5,7 +5,7 @@
[server] [server]
disable-authentication = true disable-authentication = true
endpoint = tcp://localhost:8529 endpoint = tcp://localhost:8529
threads = 5 threads = 10
keyfile = UnitTests/server.pem keyfile = UnitTests/server.pem
# reuse-address = false # reuse-address = false
@ -16,6 +16,7 @@ threads = 3
startup-directory = ./js startup-directory = ./js
app-path = ./js/apps app-path = ./js/apps
frontend-development = false frontend-development = false
v8-contexts = 5
[ruby] [ruby]
action-directory = ./mr/actions/system action-directory = ./mr/actions/system

View File

@ -5,7 +5,7 @@
[server] [server]
disable-authentication = true disable-authentication = true
endpoint = tcp://localhost:8529 endpoint = tcp://localhost:8529
threads = 5 threads = 10
# reuse-address = false # reuse-address = false
[scheduler] [scheduler]
@ -15,6 +15,7 @@ threads = 3
startup-directory = ./js startup-directory = ./js
app-path = ./js/apps app-path = ./js/apps
frontend-development = false frontend-development = false
v8-contexts = 5
[ruby] [ruby]
action-directory = ./mr/actions/system action-directory = ./mr/actions/system

View File

@ -15,6 +15,7 @@ threads = 3
startup-directory = ./js startup-directory = ./js
app-path = ./js/apps app-path = ./js/apps
frontend-development = false frontend-development = false
v8-contexts = 4
[ruby] [ruby]
action-directory = ./mr/actions/system action-directory = ./mr/actions/system

View File

@ -0,0 +1,97 @@
/*jshint strict: false, maxlen: 500 */
/*global require, AQL_EXECUTE, assertTrue */
////////////////////////////////////////////////////////////////////////////////
/// @brief tests for optimizer rules
///
/// @file
///
/// DISCLAIMER
///
/// Copyright 2010-2014 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 Florian Bartels
/// @author Copyright 2014, triAGENS GmbH, Cologne, Germany
////////////////////////////////////////////////////////////////////////////////
var jsunity = require("jsunity");
////////////////////////////////////////////////////////////////////////////////
/// @brief test suite
////////////////////////////////////////////////////////////////////////////////
function isInPolygonSuite () {
return {
////////////////////////////////////////////////////////////////////////////////
/// @brief set up
////////////////////////////////////////////////////////////////////////////////
setUp : function () {
},
////////////////////////////////////////////////////////////////////////////////
/// @brief tear down
////////////////////////////////////////////////////////////////////////////////
tearDown : function () {
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test WITHIN_RECTANGLE as result
////////////////////////////////////////////////////////////////////////////////
testIsInPolygonSuiteAsResult : function () {
assertTrue(AQL_EXECUTE("RETURN IS_IN_POLYGON ([[ 0, 0 ], [ 0, 10 ], [ 10, 10 ], [ 10, 0 ] ], 10, 9)").json[0]);
}
/*
testIsNotInPolygonSuiteAsResult : function () {
assertFalse(AQL_EXECUTE("RETURN IS_IN_POLYGON ([[ 0, 0 ], [ 0, 10 ], [ 10, 10 ], [ 10, 0 ] ], 10, 11)").json[0]);
},
testIsInPolygonSuiteWithListParameter : function () {
assertTrue(AQL_EXECUTE("RETURN IS_IN_POLYGON ([[ 0, 0 ], [ 0, 10 ], [ 10, 10 ], [ 11, 0 ] ], [ 11, 0 ])").json[0]);
},
testIsInPolygonSuiteWithListParameterWithReverseParameterOrder : function () {
assertFalse(AQL_EXECUTE("RETURN IS_IN_POLYGON ([[ 0, 0 ], [ 0, 10 ], [ 10, 10 ], [ 11, 0 ] ], [ 0, 11 ], false)").json[0]);
},
testIsInPolygonSuiteWithSinglePointPolygon : function () {
assertTrue(AQL_EXECUTE("RETURN IS_IN_POLYGON ([[ 0, 0 ]], [ 0, 0 ])").json[0]);
}*/
};
}
////////////////////////////////////////////////////////////////////////////////
/// @brief executes the test suite
////////////////////////////////////////////////////////////////////////////////
jsunity.run(isInPolygonSuite);
return jsunity.done();
// Local Variables:
// mode: outline-minor
// outline-regexp: "^\\(/// @brief\\|/// @addtogroup\\|// --SECTION--\\|/// @page\\|/// @}\\)"
// End:

View File

@ -0,0 +1,147 @@
/*jshint strict: false, maxlen: 500 */
/*global require, assertEqual, AQL_EXECUTE, assertTrue, fail */
////////////////////////////////////////////////////////////////////////////////
/// @brief tests for optimizer rules
///
/// @file
///
/// DISCLAIMER
///
/// Copyright 2010-2014 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 Florian Bartels
/// @author Copyright 2014, triAGENS GmbH, Cologne, Germany
////////////////////////////////////////////////////////////////////////////////
var jsunity = require("jsunity");
var internal = require("internal");
var errors = internal.errors;
var db = require("org/arangodb").db, indexId;
////////////////////////////////////////////////////////////////////////////////
/// @brief test suite
////////////////////////////////////////////////////////////////////////////////
function withinRectangleSuite () {
return {
////////////////////////////////////////////////////////////////////////////////
/// @brief set up
////////////////////////////////////////////////////////////////////////////////
setUp : function () {
var i, j ;
db._create("geo");
indexId = db.geo.ensureGeoIndex("lat", "lon");
for (i = -40; i < 40; ++i) {
for (j = -40; j < 40; ++j) {
db.geo.save({ lat: i, lon: j });
}
}
db._create("geo2");
indexId = db.geo2.ensureGeoIndex("pos");
for (i = -40; i < 40; ++i) {
for (j = -40; j < 40; ++j) {
db.geo2.save({ pos : [i, j] });
}
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief tear down
////////////////////////////////////////////////////////////////////////////////
tearDown : function () {
db._drop("geo");
db._drop("geo2");
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test WITHIN_RECTANGLE as result
////////////////////////////////////////////////////////////////////////////////
testWithinRectangleAsResult : function () {
var actual =AQL_EXECUTE("RETURN WITHIN_RECTANGLE(geo, -1, -1, 1, 1)").json[0];
assertEqual(actual.length , 9);
},
testWithinRectangleAsResultForSingleDocument : function () {
var actual =AQL_EXECUTE("RETURN WITHIN_RECTANGLE(geo, -0.8, -1.2, -1.2, -0.8)").json[0];
assertEqual(actual.length , 1);
},
testWithinRectangleAsResultForMissingDocument : function () {
var actual =AQL_EXECUTE("RETURN WITHIN_RECTANGLE(geo, -41, -41, -41, -41)").json[0];
assertEqual(actual.length , 0);
},
testWithinRectangleAsResultForUnknownCollection : function () {
try {
AQL_EXECUTE("RETURN WITHIN_RECTANGLE(unknown, -41, -41, -41, -41)");
fail();
} catch (e) {
assertTrue(e.errorNum === errors.ERROR_ARANGO_COLLECTION_NOT_FOUND.code);
}
},
testWithinRectangleAsResultForCollectionWithoutGeoIndex : function () {
try {
AQL_EXECUTE("RETURN WITHIN_RECTANGLE(_graphs, -41, -41, -41, -41)");
fail();
} catch (e) {
assertTrue(e.errorNum === errors.ERROR_QUERY_GEO_INDEX_MISSING.code);
}
},
testWithinRectangleAsResultWithPositionBasedGeoIndex : function () {
var actual =AQL_EXECUTE("RETURN WITHIN_RECTANGLE(geo2, -1, -1, 1, 1)").json[0];
assertEqual(actual.length , 9);
},
testWithinRectangleAsResultForSingleDocumentWithPositionBasedGeoIndex : function () {
var actual =AQL_EXECUTE("RETURN WITHIN_RECTANGLE(geo2, -0.8, -1.2, -1.2, -0.8)").json[0];
assertEqual(actual.length , 1);
},
testWithinRectangleAsResultForMissingDocumentWithPositionBasedGeoIndex : function () {
var actual =AQL_EXECUTE("RETURN WITHIN_RECTANGLE(geo2, -41, -41, -41, -41)").json[0];
assertEqual(actual.length , 0);
}
};
}
////////////////////////////////////////////////////////////////////////////////
/// @brief executes the test suite
////////////////////////////////////////////////////////////////////////////////
jsunity.run(withinRectangleSuite);
return jsunity.done();
// Local Variables:
// mode: outline-minor
// outline-regexp: "^\\(/// @brief\\|/// @addtogroup\\|// --SECTION--\\|/// @page\\|/// @}\\)"
// End: