1
0
Fork 0

re-used function declaration functions in v8-query

This commit is contained in:
Jan Steemann 2012-11-08 18:44:10 +01:00
parent 149c6c1fc1
commit b7b2c87ea8
3 changed files with 237 additions and 231 deletions

View File

@ -2497,67 +2497,39 @@ void TRI_InitV8Queries (v8::Handle<v8::Context> context) {
v8::Handle<v8::ObjectTemplate> rt;
// check the isolate
v8::Isolate* isolate = v8::Isolate::GetCurrent();
TRI_v8_global_t* v8g = (TRI_v8_global_t*) isolate->GetData();
if (v8g == 0) {
v8g = new TRI_v8_global_t;
isolate->SetData(v8g);
}
// .............................................................................
// local function names
// .............................................................................
assert(v8g != 0);
// the _NL functions are the same as their unsuffixed counterparts, just without any locking
v8::Handle<v8::String> AllFuncName = v8::Persistent<v8::String>::New(v8::String::New("ALL"));
v8::Handle<v8::String> AllNLFuncName = v8::Persistent<v8::String>::New(v8::String::New("ALL_NL"));
v8::Handle<v8::String> ByConditionBitarrayFuncName = v8::Persistent<v8::String>::New(v8::String::New("BY_CONDITION_BITARRAY"));
v8::Handle<v8::String> ByConditionBitarrayNLFuncName = v8::Persistent<v8::String>::New(v8::String::New("BY_CONDITION_BITARRAY_NL"));
v8::Handle<v8::String> ByConditionSkiplistFuncName = v8::Persistent<v8::String>::New(v8::String::New("BY_CONDITION_SKIPLIST"));
v8::Handle<v8::String> ByConditionSkiplistNLFuncName = v8::Persistent<v8::String>::New(v8::String::New("BY_CONDITION_SKIPLIST_NL"));
v8::Handle<v8::String> ByExampleFuncName = v8::Persistent<v8::String>::New(v8::String::New("BY_EXAMPLE"));
v8::Handle<v8::String> ByExampleBitarrayFuncName = v8::Persistent<v8::String>::New(v8::String::New("BY_EXAMPLE_BITARRAY"));
v8::Handle<v8::String> ByExampleBitarrayNLFuncName = v8::Persistent<v8::String>::New(v8::String::New("BY_EXAMPLE_BITARRAY_NL"));
v8::Handle<v8::String> ByExampleHashFuncName = v8::Persistent<v8::String>::New(v8::String::New("BY_EXAMPLE_HASH"));
v8::Handle<v8::String> ByExampleHashNLFuncName = v8::Persistent<v8::String>::New(v8::String::New("BY_EXAMPLE_HASH_NL"));
v8::Handle<v8::String> ByExampleSkiplistFuncName = v8::Persistent<v8::String>::New(v8::String::New("BY_EXAMPLE_SKIPLIST"));
v8::Handle<v8::String> ByExampleSkiplistNLFuncName = v8::Persistent<v8::String>::New(v8::String::New("BY_EXAMPLE_SKIPLIST_NL"));
v8::Handle<v8::String> EdgesFuncName = v8::Persistent<v8::String>::New(v8::String::New("edges"));
v8::Handle<v8::String> InEdgesFuncName = v8::Persistent<v8::String>::New(v8::String::New("inEdges"));
v8::Handle<v8::String> NearFuncName = v8::Persistent<v8::String>::New(v8::String::New("NEAR"));
v8::Handle<v8::String> NearNLFuncName = v8::Persistent<v8::String>::New(v8::String::New("NEAR_NL"));
v8::Handle<v8::String> OutEdgesFuncName = v8::Persistent<v8::String>::New(v8::String::New("outEdges"));
v8::Handle<v8::String> WithinFuncName = v8::Persistent<v8::String>::New(v8::String::New("WITHIN"));
v8::Handle<v8::String> WithinNLFuncName = v8::Persistent<v8::String>::New(v8::String::New("WITHIN_NL"));
// .............................................................................
// generate the TRI_vocbase_col_t template
// .............................................................................
rt = v8g->VocbaseColTempl;
rt->Set(AllFuncName, v8::FunctionTemplate::New(JS_AllQuery));
rt->Set(AllNLFuncName, v8::FunctionTemplate::New(JS_AllNLQuery), v8::DontEnum);
rt->Set(ByConditionBitarrayFuncName, v8::FunctionTemplate::New(JS_ByConditionBitarray));
rt->Set(ByConditionBitarrayNLFuncName, v8::FunctionTemplate::New(JS_ByConditionNLBitarray), v8::DontEnum);
rt->Set(ByConditionSkiplistFuncName, v8::FunctionTemplate::New(JS_ByConditionSkiplist));
rt->Set(ByConditionSkiplistNLFuncName, v8::FunctionTemplate::New(JS_ByConditionNLSkiplist), v8::DontEnum);
rt->Set(ByExampleBitarrayFuncName, v8::FunctionTemplate::New(JS_ByExampleBitarray));
rt->Set(ByExampleBitarrayNLFuncName, v8::FunctionTemplate::New(JS_ByExampleNLBitarray), v8::DontEnum);
rt->Set(ByExampleFuncName, v8::FunctionTemplate::New(JS_ByExampleQuery));
rt->Set(ByExampleHashFuncName, v8::FunctionTemplate::New(JS_ByExampleHashIndex));
rt->Set(ByExampleHashNLFuncName, v8::FunctionTemplate::New(JS_ByExampleNLHashIndex), v8::DontEnum);
rt->Set(ByExampleSkiplistFuncName, v8::FunctionTemplate::New(JS_ByExampleSkiplist));
rt->Set(ByExampleSkiplistNLFuncName, v8::FunctionTemplate::New(JS_ByExampleNLSkiplist), v8::DontEnum);
rt->Set(NearFuncName, v8::FunctionTemplate::New(JS_NearQuery));
rt->Set(NearNLFuncName, v8::FunctionTemplate::New(JS_NearNLQuery), v8::DontEnum);
rt->Set(WithinFuncName, v8::FunctionTemplate::New(JS_WithinQuery));
rt->Set(WithinNLFuncName, v8::FunctionTemplate::New(JS_WithinNLQuery), v8::DontEnum);
rt->Set(EdgesFuncName, v8::FunctionTemplate::New(JS_EdgesQuery));
rt->Set(InEdgesFuncName, v8::FunctionTemplate::New(JS_InEdgesQuery));
rt->Set(OutEdgesFuncName, v8::FunctionTemplate::New(JS_OutEdgesQuery));
// the _NL functions are the same as their unsuffixed counterparts, just without any locking
TRI_AddMethodVocbase(rt, "ALL", JS_AllQuery);
TRI_AddMethodVocbase(rt, "ALL_NL", JS_AllNLQuery, true);
TRI_AddMethodVocbase(rt, "BY_CONDITION_BITARRAY", JS_ByConditionBitarray);
TRI_AddMethodVocbase(rt, "BY_CONDITION_BITARRAY_NL", JS_ByConditionNLBitarray, true);
TRI_AddMethodVocbase(rt, "BY_CONDITION_SKIPLIST", JS_ByConditionSkiplist);
TRI_AddMethodVocbase(rt, "BY_CONDITION_SKIPLIST_NL", JS_ByConditionNLSkiplist, true);
TRI_AddMethodVocbase(rt, "BY_EXAMPLE", JS_ByExampleQuery);
TRI_AddMethodVocbase(rt, "BY_EXAMPLE_BITARRAY", JS_ByExampleBitarray);
TRI_AddMethodVocbase(rt, "BY_EXAMPLE_BITARRAY_NL", JS_ByExampleNLBitarray, true);
TRI_AddMethodVocbase(rt, "BY_EXAMPLE_HASH", JS_ByExampleHashIndex);
TRI_AddMethodVocbase(rt, "BY_EXAMPLE_HASH_NL", JS_ByExampleNLHashIndex, true);
TRI_AddMethodVocbase(rt, "BY_EXAMPLE_SKIPLIST", JS_ByExampleSkiplist);
TRI_AddMethodVocbase(rt, "BY_EXAMPLE_SKIPLIST_NL", JS_ByExampleNLSkiplist, true);
TRI_AddMethodVocbase(rt, "edges", JS_EdgesQuery);
TRI_AddMethodVocbase(rt, "inEdges", JS_InEdgesQuery);
TRI_AddMethodVocbase(rt, "NEAR", JS_NearQuery);
TRI_AddMethodVocbase(rt, "NEARL_NL", JS_NearNLQuery, true);
TRI_AddMethodVocbase(rt, "outEdges", JS_OutEdgesQuery);
TRI_AddMethodVocbase(rt, "WITHIN", JS_WithinQuery);
TRI_AddMethodVocbase(rt, "WITHIN_NL", JS_WithinNLQuery, true);
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -67,25 +67,6 @@ using namespace triagens::basics;
static v8::Handle<v8::Value> WrapGeneralCursor (void* cursor);
// -----------------------------------------------------------------------------
// --SECTION-- private defines
// -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup VocBase
/// @{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief create a v8 symbol for the specified string
////////////////////////////////////////////////////////////////////////////////
#define MAKE_SYMBOL(name) v8::String::NewSymbol(name, strlen(name))
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
// -----------------------------------------------------------------------------
// --SECTION-- private constants
// -----------------------------------------------------------------------------
@ -232,64 +213,6 @@ class AhuacatlContextGuard {
/// @{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief add a global function to the given context
////////////////////////////////////////////////////////////////////////////////
static inline void AddGlobalFunction (v8::Handle<v8::Context> context,
const char* const name,
v8::Handle<v8::Value>(*func)(v8::Arguments const&)) {
// all global functions are read-only
context->Global()->Set(MAKE_SYMBOL(name), v8::FunctionTemplate::New(func)->GetFunction(), v8::ReadOnly);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief add a global function to the given context
////////////////////////////////////////////////////////////////////////////////
static inline void AddGlobalFunction (v8::Handle<v8::Context> context,
const char* const name,
v8::Handle<v8::Function> func) {
// all global functions are read-only
context->Global()->Set(MAKE_SYMBOL(name), func, v8::ReadOnly);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief add a method to a prototype object
////////////////////////////////////////////////////////////////////////////////
static inline void AddProtoMethod (v8::Handle<v8::Template> tpl,
const char* const name,
v8::Handle<v8::Value>(*func)(v8::Arguments const&),
const bool isHidden = false) {
if (isHidden) {
// hidden method
tpl->Set(MAKE_SYMBOL(name), v8::FunctionTemplate::New(func), v8::DontEnum);
}
else {
// normal method
tpl->Set(MAKE_SYMBOL(name), v8::FunctionTemplate::New(func));
}
}
////////////////////////////////////////////////////////////////////////////////
/// @brief add a method to an object
////////////////////////////////////////////////////////////////////////////////
static inline void AddMethod (v8::Handle<v8::ObjectTemplate> tpl,
const char* const name,
v8::Handle<v8::Value>(*func)(v8::Arguments const&),
const bool isHidden = false) {
if (isHidden) {
// hidden method
tpl->Set(MAKE_SYMBOL(name), v8::FunctionTemplate::New(func), v8::DontEnum);
}
else {
// normal method
tpl->Set(MAKE_SYMBOL(name), v8::FunctionTemplate::New(func));
}
}
////////////////////////////////////////////////////////////////////////////////
/// @brief return the collection type the object is responsible for
/// - "db" will return TRI_COL_TYPE_DOCUMENT
@ -297,7 +220,7 @@ static inline void AddMethod (v8::Handle<v8::ObjectTemplate> tpl,
////////////////////////////////////////////////////////////////////////////////
static inline TRI_col_type_e GetVocBaseCollectionType (const v8::Handle<v8::Object>& obj) {
v8::Handle<v8::Value> type = obj->Get(MAKE_SYMBOL("_type"));
v8::Handle<v8::Value> type = obj->Get(TRI_V8_SYMBOL("_type"));
if (type->IsNumber()) {
return (TRI_col_type_e) TRI_ObjectToInt64(type);
@ -338,7 +261,7 @@ static v8::Handle<v8::Object> WrapClass (v8::Persistent<v8::ObjectTemplate> clas
static inline TRI_vocbase_t* GetContextVocBase () {
v8::Handle<v8::Context> currentContext = v8::Context::GetCurrent();
v8::Handle<v8::Object> db = currentContext->Global()->Get(MAKE_SYMBOL("db"))->ToObject();
v8::Handle<v8::Object> db = currentContext->Global()->Get(TRI_V8_SYMBOL("db"))->ToObject();
return TRI_UnwrapClass<TRI_vocbase_t>(db, WRP_VOCBASE_TYPE);
}
@ -6042,6 +5965,64 @@ static v8::Handle<v8::Integer> PropertyQueryShapedJson (v8::Local<v8::String> na
/// @{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief add a method to a prototype object
////////////////////////////////////////////////////////////////////////////////
void TRI_AddProtoMethodVocbase (v8::Handle<v8::Template> tpl,
const char* const name,
v8::Handle<v8::Value>(*func)(v8::Arguments const&),
const bool isHidden) {
if (isHidden) {
// hidden method
tpl->Set(TRI_V8_SYMBOL(name), v8::FunctionTemplate::New(func), v8::DontEnum);
}
else {
// normal method
tpl->Set(TRI_V8_SYMBOL(name), v8::FunctionTemplate::New(func));
}
}
////////////////////////////////////////////////////////////////////////////////
/// @brief add a method to an object
////////////////////////////////////////////////////////////////////////////////
void TRI_AddMethodVocbase (v8::Handle<v8::ObjectTemplate> tpl,
const char* const name,
v8::Handle<v8::Value>(*func)(v8::Arguments const&),
const bool isHidden) {
if (isHidden) {
// hidden method
tpl->Set(TRI_V8_SYMBOL(name), v8::FunctionTemplate::New(func), v8::DontEnum);
}
else {
// normal method
tpl->Set(TRI_V8_SYMBOL(name), v8::FunctionTemplate::New(func));
}
}
////////////////////////////////////////////////////////////////////////////////
/// @brief add a global function to the given context
////////////////////////////////////////////////////////////////////////////////
void TRI_AddGlobalFunctionVocbase (v8::Handle<v8::Context> context,
const char* const name,
v8::Handle<v8::Value>(*func)(v8::Arguments const&)) {
// all global functions are read-only
context->Global()->Set(TRI_V8_SYMBOL(name), v8::FunctionTemplate::New(func)->GetFunction(), v8::ReadOnly);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief add a global function to the given context
////////////////////////////////////////////////////////////////////////////////
void TRI_AddGlobalFunctionVocbase (v8::Handle<v8::Context> context,
const char* const name,
v8::Handle<v8::Function> func) {
// all global functions are read-only
context->Global()->Set(TRI_V8_SYMBOL(name), func, v8::ReadOnly);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief extracts the collection, but doesn't lock it
///
@ -6308,8 +6289,8 @@ v8::Handle<v8::Object> TRI_WrapVocBase (TRI_vocbase_t const* database,
WRP_VOCBASE_TYPE,
const_cast<TRI_vocbase_t*>(database));
result->Set(MAKE_SYMBOL("_path"), v8::String::New(database->_path), v8::ReadOnly);
result->Set(MAKE_SYMBOL("_type"), v8::Integer::New((int) type), v8::ReadOnly);
result->Set(TRI_V8_SYMBOL("_path"), v8::String::New(database->_path), v8::ReadOnly);
result->Set(TRI_V8_SYMBOL("_type"), v8::Integer::New((int) type), v8::ReadOnly);
return scope.Close(result);
}
@ -6457,39 +6438,39 @@ TRI_v8_global_t* TRI_InitV8VocBridge (v8::Handle<v8::Context> context, TRI_vocba
v8g->WaitForSyncKey = v8::Persistent<v8::String>::New(v8::String::New("waitForSync"));
if (v8g->BidirectionalKey.IsEmpty()) {
v8g->BidirectionalKey = v8::Persistent<v8::String>::New(MAKE_SYMBOL("_bidirectional"));
v8g->BidirectionalKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("_bidirectional"));
}
if (v8g->DidKey.IsEmpty()) {
v8g->DidKey = v8::Persistent<v8::String>::New(MAKE_SYMBOL("_id"));
v8g->DidKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("_id"));
}
if (v8g->KeyKey.IsEmpty()) {
v8g->KeyKey = v8::Persistent<v8::String>::New(MAKE_SYMBOL("_key"));
v8g->KeyKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("_key"));
}
if (v8g->FromKey.IsEmpty()) {
v8g->FromKey = v8::Persistent<v8::String>::New(MAKE_SYMBOL("_from"));
v8g->FromKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("_from"));
}
if (v8g->IidKey.IsEmpty()) {
v8g->IidKey = v8::Persistent<v8::String>::New(MAKE_SYMBOL("id"));
v8g->IidKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("id"));
}
if (v8g->OldRevKey.IsEmpty()) {
v8g->OldRevKey = v8::Persistent<v8::String>::New(MAKE_SYMBOL("_oldRev"));
v8g->OldRevKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("_oldRev"));
}
if (v8g->RevKey.IsEmpty()) {
v8g->RevKey = v8::Persistent<v8::String>::New(MAKE_SYMBOL("_rev"));
v8g->RevKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("_rev"));
}
if (v8g->ToKey.IsEmpty()) {
v8g->ToKey = v8::Persistent<v8::String>::New(MAKE_SYMBOL("_to"));
v8g->ToKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("_to"));
}
if (v8g->VerticesKey.IsEmpty()) {
v8g->VerticesKey = v8::Persistent<v8::String>::New(MAKE_SYMBOL("_vertices"));
v8g->VerticesKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("_vertices"));
}
// .............................................................................
@ -6497,26 +6478,26 @@ TRI_v8_global_t* TRI_InitV8VocBridge (v8::Handle<v8::Context> context, TRI_vocba
// .............................................................................
ft = v8::FunctionTemplate::New();
ft->SetClassName(MAKE_SYMBOL("ArangoDatabase"));
ft->SetClassName(TRI_V8_SYMBOL("ArangoDatabase"));
rt = ft->InstanceTemplate();
rt->SetInternalFieldCount(2);
rt->SetNamedPropertyHandler(MapGetVocBase);
AddMethod(rt, "_collection", JS_CollectionVocbase);
AddMethod(rt, "_collections", JS_CollectionsVocbase);
AddMethod(rt, "_COMPLETIONS", JS_CompletionsVocbase, true);
AddMethod(rt, "_create", JS_CreateVocbase, true);
AddMethod(rt, "_createDocumentCollection", JS_CreateDocumentCollectionVocbase);
AddMethod(rt, "_createEdgeCollection", JS_CreateEdgeCollectionVocbase);
AddMethod(rt, "_document", JS_DocumentVocbase);
AddMethod(rt, "_document_nl", JS_DocumentNLVocbase, true);
AddMethod(rt, "_remove", JS_RemoveVocbase);
AddMethod(rt, "_replace", JS_ReplaceVocbase);
AddMethod(rt, "_update", JS_UpdateVocbase);
TRI_AddMethodVocbase(rt, "_collection", JS_CollectionVocbase);
TRI_AddMethodVocbase(rt, "_collections", JS_CollectionsVocbase);
TRI_AddMethodVocbase(rt, "_COMPLETIONS", JS_CompletionsVocbase, true);
TRI_AddMethodVocbase(rt, "_create", JS_CreateVocbase, true);
TRI_AddMethodVocbase(rt, "_createDocumentCollection", JS_CreateDocumentCollectionVocbase);
TRI_AddMethodVocbase(rt, "_createEdgeCollection", JS_CreateEdgeCollectionVocbase);
TRI_AddMethodVocbase(rt, "_document", JS_DocumentVocbase);
TRI_AddMethodVocbase(rt, "_document_nl", JS_DocumentNLVocbase, true);
TRI_AddMethodVocbase(rt, "_remove", JS_RemoveVocbase);
TRI_AddMethodVocbase(rt, "_replace", JS_ReplaceVocbase);
TRI_AddMethodVocbase(rt, "_update", JS_UpdateVocbase);
v8g->VocbaseTempl = v8::Persistent<v8::ObjectTemplate>::New(rt);
AddGlobalFunction(context, "ArangoDatabase", ft->GetFunction());
TRI_AddGlobalFunctionVocbase(context, "ArangoDatabase", ft->GetFunction());
// .............................................................................
@ -6524,7 +6505,7 @@ TRI_v8_global_t* TRI_InitV8VocBridge (v8::Handle<v8::Context> context, TRI_vocba
// .............................................................................
ft = v8::FunctionTemplate::New();
ft->SetClassName(MAKE_SYMBOL("ShapedJson"));
ft->SetClassName(TRI_V8_SYMBOL("ShapedJson"));
rt = ft->InstanceTemplate();
rt->SetInternalFieldCount(3);
@ -6538,7 +6519,7 @@ TRI_v8_global_t* TRI_InitV8VocBridge (v8::Handle<v8::Context> context, TRI_vocba
);
v8g->ShapedJsonTempl = v8::Persistent<v8::ObjectTemplate>::New(rt);
AddGlobalFunction(context, "ShapedJson", ft->GetFunction());
TRI_AddGlobalFunctionVocbase(context, "ShapedJson", ft->GetFunction());
// .............................................................................
@ -6546,55 +6527,55 @@ TRI_v8_global_t* TRI_InitV8VocBridge (v8::Handle<v8::Context> context, TRI_vocba
// .............................................................................
ft = v8::FunctionTemplate::New();
ft->SetClassName(MAKE_SYMBOL("ArangoCollection"));
ft->SetClassName(TRI_V8_SYMBOL("ArangoCollection"));
rt = ft->InstanceTemplate();
rt->SetInternalFieldCount(2);
AddMethod(rt, "count", JS_CountVocbaseCol);
AddMethod(rt, "datafiles", JS_DatafilesVocbaseCol);
AddMethod(rt, "datafileScan", JS_DatafileScanVocbaseCol);
AddMethod(rt, "document", JS_DocumentVocbaseCol);
AddMethod(rt, "document_nl", JS_DocumentNLVocbaseCol, true);
AddMethod(rt, "drop", JS_DropVocbaseCol);
AddMethod(rt, "dropIndex", JS_DropIndexVocbaseCol);
AddMethod(rt, "ensureBitarray", JS_EnsureBitarrayVocbaseCol);
AddMethod(rt, "ensureUndefBitarray", JS_EnsureUndefBitarrayVocbaseCol);
AddMethod(rt, "ensureCapConstraint", JS_EnsureCapConstraintVocbaseCol);
AddMethod(rt, "ensureGeoConstraint", JS_EnsureGeoConstraintVocbaseCol);
AddMethod(rt, "ensureGeoIndex", JS_EnsureGeoIndexVocbaseCol);
AddMethod(rt, "ensureHashIndex", JS_EnsureHashIndexVocbaseCol);
AddMethod(rt, "ensurePQIndex", JS_EnsurePriorityQueueIndexVocbaseCol);
AddMethod(rt, "ensureSkiplist", JS_EnsureSkiplistVocbaseCol);
AddMethod(rt, "ensureUniqueConstraint", JS_EnsureUniqueConstraintVocbaseCol);
AddMethod(rt, "ensureUniqueSkiplist", JS_EnsureUniqueSkiplistVocbaseCol);
AddMethod(rt, "figures", JS_FiguresVocbaseCol);
AddMethod(rt, "getIndexes", JS_GetIndexesVocbaseCol);
AddMethod(rt, "getIndexesNL", JS_GetIndexesNLVocbaseCol, true);
AddMethod(rt, "load", JS_LoadVocbaseCol);
AddMethod(rt, "lookupHashIndex", JS_LookupHashIndexVocbaseCol);
AddMethod(rt, "lookupSkiplist", JS_LookupSkiplistVocbaseCol);
AddMethod(rt, "lookupUniqueConstraint", JS_LookupUniqueConstraintVocbaseCol);
AddMethod(rt, "lookupUniqueSkiplist", JS_LookupUniqueSkiplistVocbaseCol);
AddMethod(rt, "name", JS_NameVocbaseCol);
AddMethod(rt, "properties", JS_PropertiesVocbaseCol);
AddMethod(rt, "remove", JS_RemoveVocbaseCol);
AddMethod(rt, "rename", JS_RenameVocbaseCol);
AddMethod(rt, "setAttribute", JS_SetAttributeVocbaseCol, true);
AddMethod(rt, "status", JS_StatusVocbaseCol);
AddMethod(rt, "truncate", JS_TruncateVocbaseCol);
AddMethod(rt, "truncateDatafile", JS_TruncateDatafileVocbaseCol);
AddMethod(rt, "type", JS_TypeVocbaseCol);
AddMethod(rt, "unload", JS_UnloadVocbaseCol);
AddMethod(rt, "upgrade", JS_UpgradeVocbaseCol, true);
AddMethod(rt, "version", JS_VersionVocbaseCol);
TRI_AddMethodVocbase(rt, "count", JS_CountVocbaseCol);
TRI_AddMethodVocbase(rt, "datafiles", JS_DatafilesVocbaseCol);
TRI_AddMethodVocbase(rt, "datafileScan", JS_DatafileScanVocbaseCol);
TRI_AddMethodVocbase(rt, "document", JS_DocumentVocbaseCol);
TRI_AddMethodVocbase(rt, "document_nl", JS_DocumentNLVocbaseCol, true);
TRI_AddMethodVocbase(rt, "drop", JS_DropVocbaseCol);
TRI_AddMethodVocbase(rt, "dropIndex", JS_DropIndexVocbaseCol);
TRI_AddMethodVocbase(rt, "ensureBitarray", JS_EnsureBitarrayVocbaseCol);
TRI_AddMethodVocbase(rt, "ensureUndefBitarray", JS_EnsureUndefBitarrayVocbaseCol);
TRI_AddMethodVocbase(rt, "ensureCapConstraint", JS_EnsureCapConstraintVocbaseCol);
TRI_AddMethodVocbase(rt, "ensureGeoConstraint", JS_EnsureGeoConstraintVocbaseCol);
TRI_AddMethodVocbase(rt, "ensureGeoIndex", JS_EnsureGeoIndexVocbaseCol);
TRI_AddMethodVocbase(rt, "ensureHashIndex", JS_EnsureHashIndexVocbaseCol);
TRI_AddMethodVocbase(rt, "ensurePQIndex", JS_EnsurePriorityQueueIndexVocbaseCol);
TRI_AddMethodVocbase(rt, "ensureSkiplist", JS_EnsureSkiplistVocbaseCol);
TRI_AddMethodVocbase(rt, "ensureUniqueConstraint", JS_EnsureUniqueConstraintVocbaseCol);
TRI_AddMethodVocbase(rt, "ensureUniqueSkiplist", JS_EnsureUniqueSkiplistVocbaseCol);
TRI_AddMethodVocbase(rt, "figures", JS_FiguresVocbaseCol);
TRI_AddMethodVocbase(rt, "getIndexes", JS_GetIndexesVocbaseCol);
TRI_AddMethodVocbase(rt, "getIndexesNL", JS_GetIndexesNLVocbaseCol, true);
TRI_AddMethodVocbase(rt, "load", JS_LoadVocbaseCol);
TRI_AddMethodVocbase(rt, "lookupHashIndex", JS_LookupHashIndexVocbaseCol);
TRI_AddMethodVocbase(rt, "lookupSkiplist", JS_LookupSkiplistVocbaseCol);
TRI_AddMethodVocbase(rt, "lookupUniqueConstraint", JS_LookupUniqueConstraintVocbaseCol);
TRI_AddMethodVocbase(rt, "lookupUniqueSkiplist", JS_LookupUniqueSkiplistVocbaseCol);
TRI_AddMethodVocbase(rt, "name", JS_NameVocbaseCol);
TRI_AddMethodVocbase(rt, "properties", JS_PropertiesVocbaseCol);
TRI_AddMethodVocbase(rt, "remove", JS_RemoveVocbaseCol);
TRI_AddMethodVocbase(rt, "rename", JS_RenameVocbaseCol);
TRI_AddMethodVocbase(rt, "setAttribute", JS_SetAttributeVocbaseCol, true);
TRI_AddMethodVocbase(rt, "status", JS_StatusVocbaseCol);
TRI_AddMethodVocbase(rt, "truncate", JS_TruncateVocbaseCol);
TRI_AddMethodVocbase(rt, "truncateDatafile", JS_TruncateDatafileVocbaseCol);
TRI_AddMethodVocbase(rt, "type", JS_TypeVocbaseCol);
TRI_AddMethodVocbase(rt, "unload", JS_UnloadVocbaseCol);
TRI_AddMethodVocbase(rt, "upgrade", JS_UpgradeVocbaseCol, true);
TRI_AddMethodVocbase(rt, "version", JS_VersionVocbaseCol);
AddMethod(rt, "replace", JS_ReplaceVocbaseCol);
AddMethod(rt, "save", JS_SaveVocbaseCol);
AddMethod(rt, "update", JS_UpdateVocbaseCol);
TRI_AddMethodVocbase(rt, "replace", JS_ReplaceVocbaseCol);
TRI_AddMethodVocbase(rt, "save", JS_SaveVocbaseCol);
TRI_AddMethodVocbase(rt, "update", JS_UpdateVocbaseCol);
v8g->VocbaseColTempl = v8::Persistent<v8::ObjectTemplate>::New(rt);
AddGlobalFunction(context, "ArangoCollection", ft->GetFunction());
TRI_AddGlobalFunctionVocbase(context, "ArangoCollection", ft->GetFunction());
// .............................................................................
@ -6602,11 +6583,11 @@ TRI_v8_global_t* TRI_InitV8VocBridge (v8::Handle<v8::Context> context, TRI_vocba
// .............................................................................
ft = v8::FunctionTemplate::New();
ft->SetClassName(MAKE_SYMBOL("ArangoError"));
ft->SetClassName(TRI_V8_SYMBOL("ArangoError"));
rt = ft->InstanceTemplate();
v8g->ErrorTempl = v8::Persistent<v8::ObjectTemplate>::New(rt);
AddGlobalFunction(context, "ArangoError", ft->GetFunction());
TRI_AddGlobalFunctionVocbase(context, "ArangoError", ft->GetFunction());
// .............................................................................
@ -6614,24 +6595,24 @@ TRI_v8_global_t* TRI_InitV8VocBridge (v8::Handle<v8::Context> context, TRI_vocba
// .............................................................................
ft = v8::FunctionTemplate::New();
ft->SetClassName(MAKE_SYMBOL("ArangoCursor"));
ft->SetClassName(TRI_V8_SYMBOL("ArangoCursor"));
pt = ft->PrototypeTemplate();
AddProtoMethod(pt, "count", JS_CountGeneralCursor);
AddProtoMethod(pt, "dispose", JS_DisposeGeneralCursor);
AddProtoMethod(pt, "getBatchSize", JS_GetBatchSizeGeneralCursor);
AddProtoMethod(pt, "getRows", JS_GetRowsGeneralCursor);
AddProtoMethod(pt, "hasCount", JS_HasCountGeneralCursor);
AddProtoMethod(pt, "hasNext", JS_HasNextGeneralCursor);
AddProtoMethod(pt, "id", JS_IdGeneralCursor);
AddProtoMethod(pt, "next", JS_NextGeneralCursor);
AddProtoMethod(pt, "persist", JS_PersistGeneralCursor);
AddProtoMethod(pt, "unuse", JS_UnuseGeneralCursor);
TRI_AddProtoMethodVocbase(pt, "count", JS_CountGeneralCursor);
TRI_AddProtoMethodVocbase(pt, "dispose", JS_DisposeGeneralCursor);
TRI_AddProtoMethodVocbase(pt, "getBatchSize", JS_GetBatchSizeGeneralCursor);
TRI_AddProtoMethodVocbase(pt, "getRows", JS_GetRowsGeneralCursor);
TRI_AddProtoMethodVocbase(pt, "hasCount", JS_HasCountGeneralCursor);
TRI_AddProtoMethodVocbase(pt, "hasNext", JS_HasNextGeneralCursor);
TRI_AddProtoMethodVocbase(pt, "id", JS_IdGeneralCursor);
TRI_AddProtoMethodVocbase(pt, "next", JS_NextGeneralCursor);
TRI_AddProtoMethodVocbase(pt, "persist", JS_PersistGeneralCursor);
TRI_AddProtoMethodVocbase(pt, "unuse", JS_UnuseGeneralCursor);
rt = ft->InstanceTemplate();
rt->SetInternalFieldCount(2);
v8g->GeneralCursorTempl = v8::Persistent<v8::ObjectTemplate>::New(rt);
AddGlobalFunction(context, "ArangoCursor", ft->GetFunction());
TRI_AddGlobalFunctionVocbase(context, "ArangoCursor", ft->GetFunction());
#ifdef TRI_ENABLE_TRX
@ -6640,20 +6621,20 @@ TRI_v8_global_t* TRI_InitV8VocBridge (v8::Handle<v8::Context> context, TRI_vocba
// .............................................................................
ft = v8::FunctionTemplate::New();
ft->SetClassName(MAKE_SYMBOL("ArangoTransaction"));
ft->SetClassName(TRI_V8_SYMBOL("ArangoTransaction"));
pt = ft->PrototypeTemplate();
AddProtoMethod(pt, "abort", JS_AbortTransaction);
AddProtoMethod(pt, "addCollection", JS_AddCollectionTransaction);
AddProtoMethod(pt, "begin", JS_BeginTransaction);
AddProtoMethod(pt, "commit", JS_CommitTransaction);
AddProtoMethod(pt, "dump", JS_DumpTransaction);
AddProtoMethod(pt, "status", JS_StatusTransaction);
TRI_AddProtoMethodVocbase(pt, "abort", JS_AbortTransaction);
TRI_AddProtoMethodVocbase(pt, "addCollection", JS_AddCollectionTransaction);
TRI_AddProtoMethodVocbase(pt, "begin", JS_BeginTransaction);
TRI_AddProtoMethodVocbase(pt, "commit", JS_CommitTransaction);
TRI_AddProtoMethodVocbase(pt, "dump", JS_DumpTransaction);
TRI_AddProtoMethodVocbase(pt, "status", JS_StatusTransaction);
rt = ft->InstanceTemplate();
rt->SetInternalFieldCount(2);
v8g->TransactionTempl = v8::Persistent<v8::ObjectTemplate>::New(rt);
AddGlobalFunction(context, "ArangoTransaction", JS_CreateTransaction);
TRI_AddGlobalFunctionVocbase(context, "ArangoTransaction", JS_CreateTransaction);
#endif
@ -6661,23 +6642,23 @@ TRI_v8_global_t* TRI_InitV8VocBridge (v8::Handle<v8::Context> context, TRI_vocba
// generate global functions
// .............................................................................
AddGlobalFunction(context, "CURSOR", JS_Cursor);
AddGlobalFunction(context, "CREATE_CURSOR", JS_CreateCursor);
AddGlobalFunction(context, "DELETE_CURSOR", JS_DeleteCursor);
TRI_AddGlobalFunctionVocbase(context, "CURSOR", JS_Cursor);
TRI_AddGlobalFunctionVocbase(context, "CREATE_CURSOR", JS_CreateCursor);
TRI_AddGlobalFunctionVocbase(context, "DELETE_CURSOR", JS_DeleteCursor);
AddGlobalFunction(context, "AHUACATL_RUN", JS_RunAhuacatl);
AddGlobalFunction(context, "AHUACATL_EXPLAIN", JS_ExplainAhuacatl);
AddGlobalFunction(context, "AHUACATL_PARSE", JS_ParseAhuacatl);
TRI_AddGlobalFunctionVocbase(context, "AHUACATL_RUN", JS_RunAhuacatl);
TRI_AddGlobalFunctionVocbase(context, "AHUACATL_EXPLAIN", JS_ExplainAhuacatl);
TRI_AddGlobalFunctionVocbase(context, "AHUACATL_PARSE", JS_ParseAhuacatl);
AddGlobalFunction(context, "COMPARE_STRING", JS_compare_string);
AddGlobalFunction(context, "NORMALIZE_STRING", JS_normalize_string);
TRI_AddGlobalFunctionVocbase(context, "COMPARE_STRING", JS_compare_string);
TRI_AddGlobalFunctionVocbase(context, "NORMALIZE_STRING", JS_normalize_string);
// .............................................................................
// create global variables
// .............................................................................
context->Global()->Set(MAKE_SYMBOL("HAS_ICU"),
context->Global()->Set(TRI_V8_SYMBOL("HAS_ICU"),
#ifdef TRI_ICU_VERSION
v8::Boolean::New(true),
#else
@ -6686,12 +6667,12 @@ TRI_v8_global_t* TRI_InitV8VocBridge (v8::Handle<v8::Context> context, TRI_vocba
v8::ReadOnly);
context->Global()->Set(MAKE_SYMBOL("db"),
context->Global()->Set(TRI_V8_SYMBOL("db"),
TRI_WrapVocBase(vocbase, TRI_COL_TYPE_DOCUMENT),
v8::ReadOnly);
// DEPRECATED: only here for compatibility
context->Global()->Set(MAKE_SYMBOL("edges"),
context->Global()->Set(TRI_V8_SYMBOL("edges"),
TRI_WrapVocBase(vocbase, TRI_COL_TYPE_EDGE),
v8::ReadOnly);

View File

@ -32,6 +32,25 @@
#include "ShapedJson/shaped-json.h"
#include "VocBase/document-collection.h"
// -----------------------------------------------------------------------------
// --SECTION-- public macros
// -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup V8VocBase
/// @{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief create a v8 symbol for the specified string
////////////////////////////////////////////////////////////////////////////////
#define TRI_V8_SYMBOL(name) v8::String::NewSymbol(name, strlen(name))
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////
// -----------------------------------------------------------------------------
// --SECTION-- public functions
// -----------------------------------------------------------------------------
@ -41,6 +60,40 @@
/// @{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// @brief add a method to a prototype object
////////////////////////////////////////////////////////////////////////////////
void TRI_AddProtoMethodVocbase (v8::Handle<v8::Template> tpl,
const char* const name,
v8::Handle<v8::Value>(*func)(v8::Arguments const&),
const bool isHidden = false);
////////////////////////////////////////////////////////////////////////////////
/// @brief add a method to an object
////////////////////////////////////////////////////////////////////////////////
void TRI_AddMethodVocbase (v8::Handle<v8::ObjectTemplate> tpl,
const char* const name,
v8::Handle<v8::Value>(*func)(v8::Arguments const&),
const bool isHidden = false);
////////////////////////////////////////////////////////////////////////////////
/// @brief add a global function to the given context
////////////////////////////////////////////////////////////////////////////////
void TRI_AddGlobalFunctionVocbase (v8::Handle<v8::Context> context,
const char* const name,
v8::Handle<v8::Value>(*func)(v8::Arguments const&));
////////////////////////////////////////////////////////////////////////////////
/// @brief add a global function to the given context
////////////////////////////////////////////////////////////////////////////////
void TRI_AddGlobalFunctionVocbase (v8::Handle<v8::Context> context,
const char* const name,
v8::Handle<v8::Function> func);
////////////////////////////////////////////////////////////////////////////////
/// @brief extracts the collection, but doesn't lock it
///