1
0
Fork 0
arangodb/js/client/modules/@arangodb/simple-query.js

462 lines
12 KiB
JavaScript

/*jshint strict: false */
////////////////////////////////////////////////////////////////////////////////
/// @brief Arango Simple Query Language
///
/// @file
///
/// DISCLAIMER
///
/// Copyright 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
/// @author Copyright 2012, triAGENS GmbH, Cologne, Germany
////////////////////////////////////////////////////////////////////////////////
var arangosh = require("@arangodb/arangosh");
var ArangoQueryCursor = require("@arangodb/arango-query-cursor").ArangoQueryCursor;
var sq = require("@arangodb/simple-query-common");
var GeneralArrayCursor = sq.GeneralArrayCursor;
var SimpleQueryAll = sq.SimpleQueryAll;
var SimpleQueryArray = sq.SimpleQueryArray;
var SimpleQueryByExample = sq.SimpleQueryByExample;
var SimpleQueryByCondition = sq.SimpleQueryByCondition;
var SimpleQueryFulltext = sq.SimpleQueryFulltext;
var SimpleQueryGeo = sq.SimpleQueryGeo;
var SimpleQueryNear = sq.SimpleQueryNear;
var SimpleQueryRange = sq.SimpleQueryRange;
var SimpleQueryWithin = sq.SimpleQueryWithin;
var SimpleQueryWithinRectangle = sq.SimpleQueryWithinRectangle;
////////////////////////////////////////////////////////////////////////////////
/// @brief executes an all query
////////////////////////////////////////////////////////////////////////////////
SimpleQueryAll.prototype.execute = function (batchSize) {
if (this._execution === null) {
if (batchSize !== undefined && batchSize > 0) {
this._batchSize = batchSize;
}
var data = {
collection: this._collection.name()
};
if (this._limit !== null) {
data.limit = this._limit;
}
if (this._skip !== null) {
data.skip = this._skip;
}
if (this._batchSize !== null) {
data.batchSize = this._batchSize;
}
var requestResult = this._collection._database._connection.PUT(
"/_api/simple/all", JSON.stringify(data));
arangosh.checkRequestResult(requestResult);
this._execution = new ArangoQueryCursor(this._collection._database, requestResult);
if (requestResult.hasOwnProperty("count")) {
this._countQuery = requestResult.count;
}
}
};
////////////////////////////////////////////////////////////////////////////////
/// @brief executes a query-by-example
////////////////////////////////////////////////////////////////////////////////
SimpleQueryByExample.prototype.execute = function (batchSize) {
if (this._execution === null) {
if (batchSize !== undefined && batchSize > 0) {
this._batchSize = batchSize;
}
var data = {
collection: this._collection.name(),
example: this._example
};
if (this._limit !== null) {
data.limit = this._limit;
}
if (this._skip !== null) {
data.skip = this._skip;
}
if (this._batchSize !== null) {
data.batchSize = this._batchSize;
}
var method = "by-example";
if (this.hasOwnProperty("_type")) {
data.index = this._index;
switch (this._type) {
case "hash":
method = "by-example-hash";
break;
case "skiplist":
method = "by-example-skiplist";
break;
}
}
var requestResult = this._collection._database._connection.PUT(
"/_api/simple/" + method, JSON.stringify(data));
arangosh.checkRequestResult(requestResult);
this._execution = new ArangoQueryCursor(this._collection._database, requestResult);
if (requestResult.hasOwnProperty("count")) {
this._countQuery = requestResult.count;
this._countTotal = requestResult.count;
}
}
};
////////////////////////////////////////////////////////////////////////////////
/// @brief executes a query-by-condition
////////////////////////////////////////////////////////////////////////////////
SimpleQueryByCondition.prototype.execute = function (batchSize) {
if (this._execution === null) {
if (batchSize !== undefined && batchSize > 0) {
this._batchSize = batchSize;
}
var data = {
collection: this._collection.name(),
condition: this._condition
};
if (this._limit !== null) {
data.limit = this._limit;
}
if (this._skip !== null) {
data.skip = this._skip;
}
if (this._batchSize !== null) {
data.batchSize = this._batchSize;
}
var method = "by-condition";
if (this.hasOwnProperty("_type")) {
data.index = this._index;
switch (this._type) {
case "skiplist":
method = "by-condition-skiplist";
break;
}
}
var requestResult = this._collection._database._connection.PUT(
"/_api/simple/" + method, JSON.stringify(data));
arangosh.checkRequestResult(requestResult);
this._execution = new ArangoQueryCursor(this._collection._database, requestResult);
if (requestResult.hasOwnProperty("count")) {
this._countQuery = requestResult.count;
this._countTotal = requestResult.count;
}
}
};
////////////////////////////////////////////////////////////////////////////////
/// @brief executes a range query
////////////////////////////////////////////////////////////////////////////////
SimpleQueryRange.prototype.execute = function (batchSize) {
if (this._execution === null) {
if (batchSize !== undefined && batchSize > 0) {
this._batchSize = batchSize;
}
var data = {
collection: this._collection.name(),
attribute: this._attribute,
right: this._right,
left: this._left,
closed: this._type === 1
};
if (this._limit !== null) {
data.limit = this._limit;
}
if (this._skip !== null) {
data.skip = this._skip;
}
if (this._batchSize !== null) {
data.batchSize = this._batchSize;
}
var requestResult = this._collection._database._connection.PUT(
"/_api/simple/range", JSON.stringify(data));
arangosh.checkRequestResult(requestResult);
this._execution = new ArangoQueryCursor(this._collection._database, requestResult);
if (requestResult.hasOwnProperty("count")) {
this._countQuery = requestResult.count;
}
}
};
////////////////////////////////////////////////////////////////////////////////
/// @brief executes a near query
////////////////////////////////////////////////////////////////////////////////
SimpleQueryNear.prototype.execute = function (batchSize) {
if (this._execution === null) {
if (batchSize !== undefined && batchSize > 0) {
this._batchSize = batchSize;
}
var data = {
collection: this._collection.name(),
latitude: this._latitude,
longitude: this._longitude
};
if (this._limit !== null) {
data.limit = this._limit;
}
if (this._skip !== null) {
data.skip = this._skip;
}
if (this._index !== null) {
data.geo = this._index;
}
if (this._distance !== null) {
data.distance = this._distance;
}
if (this._batchSize !== null) {
data.batchSize = this._batchSize;
}
var requestResult = this._collection._database._connection.PUT(
"/_api/simple/near", JSON.stringify(data));
arangosh.checkRequestResult(requestResult);
this._execution = new ArangoQueryCursor(this._collection._database, requestResult);
if (requestResult.hasOwnProperty("count")) {
this._countQuery = requestResult.count;
}
}
};
////////////////////////////////////////////////////////////////////////////////
/// @brief executes a within query
////////////////////////////////////////////////////////////////////////////////
SimpleQueryWithin.prototype.execute = function (batchSize) {
if (this._execution === null) {
if (batchSize !== undefined && batchSize > 0) {
this._batchSize = batchSize;
}
var data = {
collection: this._collection.name(),
latitude: this._latitude,
longitude: this._longitude,
radius: this._radius
};
if (this._limit !== null) {
data.limit = this._limit;
}
if (this._skip !== null) {
data.skip = this._skip;
}
if (this._index !== null) {
data.geo = this._index;
}
if (this._distance !== null) {
data.distance = this._distance;
}
if (this._batchSize !== null) {
data.batchSize = this._batchSize;
}
var requestResult = this._collection._database._connection.PUT(
"/_api/simple/within", JSON.stringify(data));
arangosh.checkRequestResult(requestResult);
this._execution = new ArangoQueryCursor(this._collection._database, requestResult);
if (requestResult.hasOwnProperty("count")) {
this._countQuery = requestResult.count;
}
}
};
////////////////////////////////////////////////////////////////////////////////
/// @brief executes a withinRectangle query
////////////////////////////////////////////////////////////////////////////////
SimpleQueryWithinRectangle.prototype.execute = function (batchSize) {
if (this._execution === null) {
if (batchSize !== undefined && batchSize > 0) {
this._batchSize = batchSize;
}
var data = {
collection: this._collection.name(),
latitude1: this._latitude1,
longitude1: this._longitude1,
latitude2: this._latitude2,
longitude2: this._longitude2
};
if (this._limit !== null) {
data.limit = this._limit;
}
if (this._skip !== null) {
data.skip = this._skip;
}
if (this._index !== null) {
data.geo = this._index;
}
if (this._distance !== null) {
data.distance = this._distance;
}
if (this._batchSize !== null) {
data.batchSize = this._batchSize;
}
var requestResult = this._collection._database._connection.PUT(
"/_api/simple/within-rectangle", JSON.stringify(data));
arangosh.checkRequestResult(requestResult);
this._execution = new ArangoQueryCursor(this._collection._database, requestResult);
if (requestResult.hasOwnProperty("count")) {
this._countQuery = requestResult.count;
}
}
};
////////////////////////////////////////////////////////////////////////////////
/// @brief executes a fulltext query
////////////////////////////////////////////////////////////////////////////////
SimpleQueryFulltext.prototype.execute = function (batchSize) {
if (this._execution === null) {
if (batchSize !== undefined && batchSize > 0) {
this._batchSize = batchSize;
}
var data = {
collection: this._collection.name(),
attribute: this._attribute,
query: this._query
};
if (this._limit !== null) {
data.limit = this._limit;
}
if (this._index !== null) {
data.index = this._index;
}
if (this._skip !== null) {
data.skip = this._skip;
}
if (this._batchSize !== null) {
data.batchSize = this._batchSize;
}
var requestResult = this._collection._database._connection.PUT(
"/_api/simple/fulltext", JSON.stringify(data));
arangosh.checkRequestResult(requestResult);
this._execution = new ArangoQueryCursor(this._collection._database, requestResult);
if (requestResult.hasOwnProperty("count")) {
this._countQuery = requestResult.count;
}
}
};
exports.GeneralArrayCursor = GeneralArrayCursor;
exports.SimpleQueryAll = SimpleQueryAll;
exports.SimpleQueryArray = SimpleQueryArray;
exports.SimpleQueryByExample = SimpleQueryByExample;
exports.SimpleQueryByCondition = SimpleQueryByCondition;
exports.SimpleQueryFulltext = SimpleQueryFulltext;
exports.SimpleQueryGeo = SimpleQueryGeo;
exports.SimpleQueryNear = SimpleQueryNear;
exports.SimpleQueryRange = SimpleQueryRange;
exports.SimpleQueryWithin = SimpleQueryWithin;
exports.SimpleQueryWithinRectangle = SimpleQueryWithinRectangle;