var unregisterFunction = function (name) { 'use strict'; var func = null; validateName(name); try { func = getStorage().document(name.toUpperCase()); } catch (err1) { } if (func === null) { var err = new ArangoError(); err.errorNum = arangodb.errors.ERROR_QUERY_FUNCTION_NOT_FOUND.code; err.errorMessage = internal.sprintf(arangodb.errors.ERROR_QUERY_FUNCTION_NOT_FOUND.message, name); throw err; } getStorage().remove(func._id); internal.reloadAqlFunctions(); return true; };
var registerFunction = function (name, code, isDeterministic) { // validate input validateName(name); code = stringifyFunction(code, name); var testCode = "(function() { var callback = " + code + "; return callback; })()"; try { internal.executeScript(testCode, undefined, "(user function " + name + ")"); } catch (err1) { var err = new ArangoError(); err.errorNum = arangodb.errors.ERROR_QUERY_FUNCTION_INVALID_CODE.code; err.errorMessage = arangodb.errors.ERROR_QUERY_FUNCTION_INVALID_CODE.message; throw err; } var result = db._executeTransaction({ collections: { write: getStorage().name() }, action: function (params) { var exists = false; var collection = require("internal").db._collection(params.collection); var name = params.name; try { var doc = collection.document(name.toUpperCase()); if (doc !== null) { collection.remove(doc._key); exists = true; } } catch (err2) { } var data = { _key: name.toUpperCase(), name: name, code: params.code, isDeterministic: params.isDeterministic || false }; collection.save(data); return exists; }, params: { name: name, code: code, isDeterministic: isDeterministic, collection: getStorage().name() } }); internal.reloadAqlFunctions(); return result; };
var unregisterFunctionsGroup = function (group) { if (group.length === 0) { var err = new ArangoError(); err.errorNum = arangodb.errors.ERROR_BAD_PARAMETER.code; err.errorMessage = arangodb.errors.ERROR_BAD_PARAMETER.message; } var deleted = 0; getFiltered(group).forEach(function (f) { getStorage().remove(f._id); deleted++; }); if (deleted > 0) { internal.reloadAqlFunctions(); } return deleted; };
var registerFunction = function (name, code, isDeterministic) { // validate input validateName(name); code = stringifyFunction(code, name); var testCode = "(function() { var callback = " + code + "; return callback; })()"; try { var res = internal.executeScript(testCode, undefined, "(user function " + name + ")"); } catch (err1) { var err = new ArangoError(); err.errorNum = arangodb.errors.ERROR_QUERY_FUNCTION_INVALID_CODE.code; err.errorMessage = arangodb.errors.ERROR_QUERY_FUNCTION_INVALID_CODE.message; } var exists = false; try { unregisterFunction(name); exists = true; } catch (err2) { } var data = { _key: name.toUpperCase(), name: name, code: code, isDeterministic: isDeterministic || false }; getStorage().save(data); internal.reloadAqlFunctions(); return exists; };
callback : function (req, res) { internal.reloadAqlFunctions(); actions.resultOk(req, res, actions.HTTP_OK); }