1
0
Fork 0
arangodb/js/server/js-server.h

653 lines
25 KiB
C

const char* JS_server_server[] = {
"/*jslint indent: 2,",
" nomen: true,",
" maxlen: 100,",
" sloppy: true,",
" vars: true,",
" white: true,",
" plusplus: true */",
"/*global require, db, edges, ModuleCache, Module,",
" ArangoCollection, ArangoDatabase,",
" ArangoError, ShapedJson,",
" SYS_DEFINE_ACTION */",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief JavaScript server functions",
"///",
"/// @file",
"///",
"/// DISCLAIMER",
"///",
"/// Copyright 2011-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 2011-2012, triAGENS GmbH, Cologne, Germany",
"////////////////////////////////////////////////////////////////////////////////",
"",
"// -----------------------------------------------------------------------------",
"// --SECTION-- Module \"internal\"",
"// -----------------------------------------------------------------------------",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @addtogroup V8ModuleInternal",
"/// @{",
"////////////////////////////////////////////////////////////////////////////////",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief internal module",
"////////////////////////////////////////////////////////////////////////////////",
"",
"(function () {",
" var internal = require(\"internal\");",
" var console = require(\"console\");",
"",
" internal.db = db;",
" internal.edges = db;",
" internal.ArangoCollection = ArangoCollection;",
"",
" if (typeof SYS_DEFINE_ACTION === \"undefined\") {",
" internal.defineAction = function() {",
" console.error(\"SYS_DEFINE_ACTION not available\");",
" };",
" }",
" else {",
" internal.defineAction = SYS_DEFINE_ACTION;",
" }",
"",
" if (typeof SYS_EXECUTE_GLOBAL_CONTEXT_FUNCTION === \"undefined\") {",
" internal.executeGlobalContextFunction = function() {",
" console.error(\"SYS_EXECUTE_GLOBAL_CONTEXT_FUNCTION not available\");",
" };",
" }",
" else {",
" internal.executeGlobalContextFunction = SYS_EXECUTE_GLOBAL_CONTEXT_FUNCTION;",
" }",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @}",
"////////////////////////////////////////////////////////////////////////////////",
"",
"// -----------------------------------------------------------------------------",
"// --SECTION-- Module \"simple-query\"",
"// -----------------------------------------------------------------------------",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @addtogroup V8ModuleSimpleQuery",
"/// @{",
"////////////////////////////////////////////////////////////////////////////////",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief simple-query module",
"////////////////////////////////////////////////////////////////////////////////",
"",
" try {",
" require(\"simple-query\");",
" }",
" catch (err) {",
" console.error(\"while loading 'simple-query' module: %s\", err);",
" }",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @}",
"////////////////////////////////////////////////////////////////////////////////",
"",
"// -----------------------------------------------------------------------------",
"// --SECTION-- Module \"monkeypatches\"",
"// -----------------------------------------------------------------------------",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @addtogroup V8ModuleMonkeypatches",
"/// @{",
"////////////////////////////////////////////////////////////////////////////////",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief monkeypatches module",
"////////////////////////////////////////////////////////////////////////////////",
"",
" try {",
" require(\"monkeypatches\");",
" }",
" catch (err) {",
" console.error(\"while loading 'monkeypatches' module: %s\", err);",
" }",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @}",
"////////////////////////////////////////////////////////////////////////////////",
"",
"// -----------------------------------------------------------------------------",
"// --SECTION-- ShapedJson",
"// -----------------------------------------------------------------------------",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @addtogroup V8Shell",
"/// @{",
"////////////////////////////////////////////////////////////////////////////////",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief prints a shaped json",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ShapedJson.prototype._PRINT = function(seen, path, names, level) {",
" if (this instanceof ShapedJson) {",
" internal.printObject(this, seen, path, names, level);",
" }",
" else {",
" internal.output(this.toString());",
" }",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @}",
"////////////////////////////////////////////////////////////////////////////////",
"",
"// -----------------------------------------------------------------------------",
"// --SECTION-- ArangoError",
"// -----------------------------------------------------------------------------",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @addtogroup V8Shell",
"/// @{",
"////////////////////////////////////////////////////////////////////////////////",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief prints an error",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoError.prototype._PRINT = function() {",
" var errorNum = this.errorNum;",
" var errorMessage = this.errorMessage;",
"",
" internal.output(\"[ArangoError \", errorNum, \": \", errorMessage, \"]\");",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief converts error to string",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoError.prototype.toString = function() {",
" var errorNum = this.errorNum;",
" var errorMessage = this.errorMessage;",
"",
" return \"[ArangoError \" + errorNum + \": \" + errorMessage + \"]\";",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @}",
"////////////////////////////////////////////////////////////////////////////////",
"",
"// -----------------------------------------------------------------------------",
"// --SECTION-- ArangoDatabase",
"// -----------------------------------------------------------------------------",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @addtogroup V8Shell",
"/// @{",
"////////////////////////////////////////////////////////////////////////////////",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief factory method to create a new statement",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoDatabase.prototype._createStatement = function (data) { ",
" return new ArangoStatement(this, data);",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief drops a collection",
"///",
"/// @FUN{db._drop(@FA{collection})}",
"///",
"/// Drops a @FA{collection} and all its indexes.",
"///",
"/// @FUN{db._drop(@FA{collection-identifier})}",
"///",
"/// Drops a collection identified by @FA{collection-identifier} and all its",
"/// indexes. No error is thrown if there is no such collection.",
"///",
"/// @FUN{db._drop(@FA{collection-name})}",
"///",
"/// Drops a collection named @FA{collection-name} and all its indexes. No error",
"/// is thrown if there is no such collection.",
"///",
"/// @EXAMPLES",
"///",
"/// Drops a collection:",
"///",
"/// @verbinclude shell_collection-drop-db",
"///",
"/// Drops a collection identified by name:",
"///",
"/// @verbinclude shell_collection-drop-name-db",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoDatabase.prototype._drop = function(name) {",
" var collection = name;",
"",
" if (! (name instanceof ArangoCollection)) {",
" collection = internal.db._collection(name);",
" }",
"",
" if (collection === null) {",
" return;",
" }",
"",
" return collection.drop();",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief truncates a collection",
"///",
"/// @FUN{db._truncate(@FA{collection})}",
"///",
"/// Truncates a @FA{collection}, removing all documents but keeping all its",
"/// indexes.",
"///",
"/// @FUN{db._truncate(@FA{collection-identifier})}",
"///",
"/// Truncates a collection identified by @FA{collection-identified}. No error is",
"/// thrown if there is no such collection.",
"///",
"/// @FUN{db._truncate(@FA{collection-name})}",
"///",
"/// Truncates a collection named @FA{collection-name}. No error is thrown if",
"/// there is no such collection.",
"///",
"/// @EXAMPLES",
"///",
"/// Truncates a collection:",
"///",
"/// @verbinclude shell_collection-truncate-db",
"///",
"/// Truncates a collection identified by name:",
"///",
"/// @verbinclude shell_collection-truncate-name-db",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoDatabase.prototype._truncate = function(name) {",
" var collection = name;",
"",
" if (! (name instanceof ArangoCollection)) {",
" collection = internal.db._collection(name);",
" }",
"",
" if (collection === null) {",
" return;",
" }",
"",
" collection.truncate();",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief finds an index",
"///",
"/// @FUN{db._index(@FA{index-handle})}",
"///",
"/// Returns the index with @FA{index-handle} or null if no such index exists.",
"///",
"/// @EXAMPLES",
"///",
"/// @verbinclude shell_index-read-db",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoDatabase.prototype._index = function(id) {",
" if (id.hasOwnProperty(\"id\")) {",
" id = id.id;",
" }",
"",
" var re = /^([0-9]+)\\/([0-9]+)/;",
" var pa = re.exec(id);",
" var err;",
"",
" if (pa === null) {",
" err = new ArangoError();",
" err.errorNum = internal.errors.ERROR_ARANGO_INDEX_HANDLE_BAD.code;",
" err.errorMessage = internal.errors.ERROR_ARANGO_INDEX_HANDLE_BAD.message;",
" throw err;",
" }",
"",
" var col = this._collection(parseInt(pa[1]));",
"",
" if (col === null) {",
" err = new ArangoError();",
" err.errorNum = internal.errors.ERROR_ARANGO_COLLECTION_NOT_FOUND.code;",
" err.errorMessage = internal.errors.ERROR_ARANGO_COLLECTION_NOT_FOUND.message;",
" throw err;",
" }",
"",
" var indexes = col.getIndexes();",
" var i;",
"",
" for (i = 0; i < indexes.length; ++i) {",
" var index = indexes[i];",
"",
" if (index.id === id) {",
" return index;",
" }",
" }",
"",
" return null;",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief drops an index",
"///",
"/// @FUN{db._dropIndex(@FA{index})}",
"///",
"/// Drops the @FA{index}. If the index does not exists, then @LIT{false} is",
"/// returned. If the index existed and was dropped, then @LIT{true} is",
"/// returned. Note that you cannot drop the primary index.",
"///",
"/// @FUN{db._dropIndex(@FA{index-handle})}",
"///",
"/// Drops the index with @FA{index-handle}.",
"///",
"/// @EXAMPLES",
"///",
"/// @verbinclude shell_index-drop-index-db",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoDatabase.prototype._dropIndex = function(id) {",
" if (id.hasOwnProperty(\"id\")) {",
" id = id.id;",
" }",
"",
" var re = /^([0-9]+)\\/([0-9]+)/;",
" var pa = re.exec(id);",
" var err;",
"",
" if (pa === null) {",
" err = new ArangoError();",
" err.errorNum = internal.errors.ERROR_ARANGO_INDEX_HANDLE_BAD.code;",
" err.errorMessage = internal.errors.ERROR_ARANGO_INDEX_HANDLE_BAD.message;",
" throw err;",
" }",
"",
" var col = this._collection(parseInt(pa[1]));",
"",
" if (col === null) {",
" err = new ArangoError();",
" err.errorNum = internal.errors.ERROR_ARANGO_COLLECTION_NOT_FOUND.code;",
" err.errorMessage = internal.errors.ERROR_ARANGO_COLLECTION_NOT_FOUND.message;",
" throw err;",
" }",
"",
" return col.dropIndex(id);",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief prints a database",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoDatabase.prototype._PRINT = function(seen, path, names, level) {",
" internal.output(\"[ArangoDatabase \\\"\" + this._path + \"\\\"]\");",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief strng representation of a database",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoDatabase.prototype.toString = function(seen, path, names, level) {",
" return \"[ArangoDatabase \\\"\" + this._path + \"\\\"]\";",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @}",
"////////////////////////////////////////////////////////////////////////////////",
"",
"// -----------------------------------------------------------------------------",
"// --SECTION-- ArangoCollection",
"// -----------------------------------------------------------------------------",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @addtogroup V8Shell",
"/// @{",
"////////////////////////////////////////////////////////////////////////////////",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief collection is corrupted",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.STATUS_CORRUPTED = 0;",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief collection is new born",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.STATUS_NEW_BORN = 1;",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief collection is unloaded",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.STATUS_UNLOADED = 2;",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief collection is loaded",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.STATUS_LOADED = 3;",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief collection is unloading",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.STATUS_UNLOADING = 4;",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief collection is deleted",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.STATUS_DELETED = 5;",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief document collection",
"////////////////////////////////////////////////////////////////////////////////",
" ",
" ArangoCollection.TYPE_DOCUMENT = 2;",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief edge collection",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.TYPE_EDGE = 3;",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief attachment collection",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.TYPE_ATTACHMENT = 4;",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief converts collection into an array",
"///",
"/// @FUN{@FA{collection}.toArray()}",
"///",
"/// Converts the collection into an array of documents. Never use this call",
"/// in a production environment.",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.prototype.toArray = function() {",
" return this.ALL(null, null).documents;",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief truncates a collection",
"///",
"/// @FUN{@FA{collection}.truncate()}",
"///",
"/// Truncates a @FA{collection}, removing all documents but keeping all its",
"/// indexes.",
"///",
"/// @EXAMPLES",
"///",
"/// Truncates a collection:",
"///",
"/// @verbinclude shell_collection-truncate",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.prototype.truncate = function() {",
" return internal.db._truncate(this);",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief finds an index of a collection",
"///",
"/// @FUN{@FA{collection}.index(@FA{index-handle})}",
"///",
"/// Returns the index with @FA{index-handle} or null if no such index exists.",
"///",
"/// @EXAMPLES",
"///",
"/// @verbinclude shell_index-read",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.prototype.index = function(id) {",
" var indexes = this.getIndexes();",
" var i;",
"",
" if (typeof id === \"string\") {",
" var re = /^([0-9]+)\\/([0-9]+)/;",
" var pa = re.exec(id);",
"",
" if (pa === null) {",
" id = this._id + \"/\" + id;",
" }",
" }",
" else if (id.hasOwnProperty(\"id\")) {",
" id = id.id;",
" }",
"",
" for (i = 0; i < indexes.length; ++i) {",
" var index = indexes[i];",
"",
" if (index.id === id) {",
" return index;",
" }",
" }",
"",
" return null;",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief prints a collection",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.prototype._PRINT = function() {",
" var status = type = \"unknown\";",
"",
" switch (this.status()) {",
" case ArangoCollection.STATUS_NEW_BORN: status = \"new born\"; break;",
" case ArangoCollection.STATUS_UNLOADED: status = \"unloaded\"; break;",
" case ArangoCollection.STATUS_UNLOADING: status = \"unloading\"; break;",
" case ArangoCollection.STATUS_LOADED: status = \"loaded\"; break;",
" case ArangoCollection.STATUS_CORRUPTED: status = \"corrupted\"; break;",
" case ArangoCollection.STATUS_DELETED: status = \"deleted\"; break;",
" }",
"",
" switch (this.type()) {",
" case ArangoCollection.TYPE_DOCUMENT: type = \"document\"; break;",
" case ArangoCollection.TYPE_EDGE: type = \"edge\"; break;",
" case ArangoCollection.TYPE_ATTACHMENT: type = \"attachment\"; break;",
" }",
"",
" internal.output(\"[ArangoCollection \",",
" this._id, ",
" \", \\\"\", this.name(), \"\\\" (type \", type, \", status \", status, \")]\");",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief strng representation of a collection",
"////////////////////////////////////////////////////////////////////////////////",
"",
" ArangoCollection.prototype.toString = function(seen, path, names, level) {",
" return \"[ArangoCollection \" + this._id + \"]\";",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @}",
"////////////////////////////////////////////////////////////////////////////////",
"",
"// -----------------------------------------------------------------------------",
"// --SECTION-- ArangoStatement",
"// -----------------------------------------------------------------------------",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @addtogroup V8Shell",
"/// @{",
"////////////////////////////////////////////////////////////////////////////////",
" ",
" try {",
" var SQ = require(\"simple-query-basics\");",
" var SB = require(\"statement-basics\");",
" internal.ArangoStatement = SB.ArangoStatement;",
" ArangoStatement = SB.ArangoStatement;",
" }",
" catch (err) {",
" console.error(\"while loading 'statement-basics' module: %s\", err);",
" }",
" ",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief parse a query and return the results",
"////////////////////////////////////////////////////////////////////////////////",
"",
" SB.ArangoStatement.prototype.parse = function () {",
" var result = AHUACATL_PARSE(this._query); ",
"",
" return { \"bindVars\" : result.parameters, \"collections\" : result.collections };",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief explain a query and return the results",
"////////////////////////////////////////////////////////////////////////////////",
"",
" SB.ArangoStatement.prototype.explain = function () {",
" return AHUACATL_EXPLAIN(this._query); ",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @brief execute the query",
"///",
"/// This will return a cursor with the query results in case of success.",
"////////////////////////////////////////////////////////////////////////////////",
"",
" SB.ArangoStatement.prototype.execute = function () {",
" var result = AHUACATL_RUN(this._query, ",
" this._bindVars, ",
" this._doCount != undefined ? this._doCount : false, ",
" null, ",
" true); ",
" return new SQ.GeneralArrayCursor(result, 0, null);",
" };",
"",
"////////////////////////////////////////////////////////////////////////////////",
"/// @}",
"////////////////////////////////////////////////////////////////////////////////",
"",
"}());",
"",
"// -----------------------------------------------------------------------------",
"// --SECTION-- END-OF-FILE",
"// -----------------------------------------------------------------------------",
"",
"// Local Variables:",
"// mode: outline-minor",
"// outline-regexp: \"^\\\\(/// @brief\\\\|/// @addtogroup\\\\|// --SECTION--\\\\|/// @page\\\\|/// @\\\\}\\\\)\"",
"// End:",
"//__end__"
};