diff --git a/arangod/Aql/Executor.cpp b/arangod/Aql/Executor.cpp index 9f00054a60..2d425a47ee 100644 --- a/arangod/Aql/Executor.cpp +++ b/arangod/Aql/Executor.cpp @@ -37,6 +37,7 @@ #include "Cluster/ServerState.h" #include "V8/v8-conv.h" #include "V8/v8-globals.h" +#include "V8/v8-utils.h" #include "V8Server/v8-shape-conv.h" using namespace triagens::aql; @@ -556,6 +557,8 @@ void Executor::HandleV8Error (v8::TryCatch& tryCatch, v8::Handle objValue = v8::Handle::Cast(tryCatch.Exception()); v8::Handle errorNum = TRI_V8_ASCII_STRING("errorNum"); v8::Handle errorMessage = TRI_V8_ASCII_STRING("errorMessage"); + + TRI_Utf8ValueNFC stacktrace(TRI_UNKNOWN_MEM_ZONE, tryCatch.StackTrace()); if (objValue->HasOwnProperty(errorNum) && objValue->HasOwnProperty(errorMessage)) { @@ -566,14 +569,25 @@ void Executor::HandleV8Error (v8::TryCatch& tryCatch, if ((errorNumValue->IsNumber() || errorNumValue->IsNumberObject()) && (errorMessageValue->IsString() || errorMessageValue->IsStringObject())) { int errorCode = static_cast(TRI_ObjectToInt64(errorNumValue)); - std::string const errorMessage(TRI_ObjectToString(errorMessageValue)); + std::string errorMessage(TRI_ObjectToString(errorMessageValue)); + if (*stacktrace && stacktrace.length() > 0) { + errorMessage += "\nstacktrace of offending AQL function: "; + errorMessage += *stacktrace; + } + THROW_ARANGO_EXCEPTION_MESSAGE(errorCode, errorMessage); } } // exception is no ArangoError - std::string const details(TRI_ObjectToString(tryCatch.Exception())); + std::string details(TRI_ObjectToString(tryCatch.Exception())); + + if (*stacktrace && stacktrace.length() > 0) { + details += "\nstacktrace of offending AQL function: "; + details += *stacktrace; + } + THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_QUERY_SCRIPT, details); } diff --git a/js/server/modules/org/arangodb/aql.js b/js/server/modules/org/arangodb/aql.js index 97fe125142..ffd1cc44fc 100644 --- a/js/server/modules/org/arangodb/aql.js +++ b/js/server/modules/org/arangodb/aql.js @@ -7428,10 +7428,10 @@ function AQL_NEIGHBORS (vertexCollection, var collectionFromVertex = vertex.slice(0, vertexCollection.length); if (collectionFromVertex !== vertexCollection) { THROW("AQL_NEIGBORS", - INTERNAL.errors.ERROR_ARANGO_DOCUMENT_KEY_BAD, + INTERNAL.errors.ERROR_GRAPH_INVALID_PARAMETER, "", "You specified vertex collection `" + collectionFromVertex + - "...` for start vertext from the collection`" + vertexCollection + "`"); + "...` for start vertext from the collection `" + vertexCollection + "`"); } options = CLONE(options) || {}; diff --git a/js/server/modules/org/arangodb/foxx/templateEngine.js b/js/server/modules/org/arangodb/foxx/templateEngine.js index d0650047d2..921836039a 100644 --- a/js/server/modules/org/arangodb/foxx/templateEngine.js +++ b/js/server/modules/org/arangodb/foxx/templateEngine.js @@ -112,8 +112,8 @@ _.extend(Engine.prototype, { modelInstance = collectionStart.toLowerCase() + modelBase; repositoryName = collectionStart.toUpperCase() + repositoryBase; repositoryInstance = collectionStart.toLowerCase() + repositoryBase; - repositoryPath = '../repositories/' + collectionName; - modelPath = '../models/' + modelName.toLowerCase(); + repositoryPath = 'repositories/' + collectionName; + modelPath = 'models/' + modelName.toLowerCase(); this.collectionNames.push(collectionName); this.controllers.push({ diff --git a/js/server/modules/org/arangodb/foxx/templates/controller.js.tmpl b/js/server/modules/org/arangodb/foxx/templates/controller.js.tmpl index 2e4be91c46..612d2e266f 100644 --- a/js/server/modules/org/arangodb/foxx/templates/controller.js.tmpl +++ b/js/server/modules/org/arangodb/foxx/templates/controller.js.tmpl @@ -3,8 +3,8 @@ var _ = require('underscore'); var joi = require('joi'); var Foxx = require('org/arangodb/foxx'); var ArangoError = require('org/arangodb').ArangoError; -var <%= repository %> = require('<%= repositoryPath %>'); -var <%= model %> = require('<%= modelPath %>'); +var <%= repository %> = require('../<%= repositoryPath %>'); +var <%= model %> = require('../<%= modelPath %>'); var controller = new Foxx.Controller(applicationContext); var <%= modelInstance %>IdSchema = joi.string().required()