mirror of https://gitee.com/bigwinds/arangodb
issue #1610
This commit is contained in:
parent
fce17892c1
commit
00650d0330
|
@ -2449,6 +2449,31 @@ static void JS_RemoveVocbaseCol (const v8::FunctionCallbackInfo<v8::Value>& args
|
||||||
TRI_V8_TRY_CATCH_END
|
TRI_V8_TRY_CATCH_END
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief helper function to rename collections in _graphs as well
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static int RenameGraphCollections (v8::Isolate* isolate,
|
||||||
|
std::string const& oldName,
|
||||||
|
std::string const& newName) {
|
||||||
|
v8::HandleScope scope(isolate);
|
||||||
|
|
||||||
|
StringBuffer buffer(TRI_UNKNOWN_MEM_ZONE);
|
||||||
|
buffer.appendText("require('org/arangodb/general-graph')._renameCollection(\"");
|
||||||
|
buffer.appendJsonEncoded(oldName.c_str(), oldName.size());
|
||||||
|
buffer.appendText("\", \"");
|
||||||
|
buffer.appendJsonEncoded(newName.c_str(), newName.size());
|
||||||
|
buffer.appendText("\");");
|
||||||
|
|
||||||
|
TRI_ExecuteJavaScriptString(isolate,
|
||||||
|
isolate->GetCurrentContext(),
|
||||||
|
TRI_V8_ASCII_PAIR_STRING(buffer.c_str(), buffer.length()),
|
||||||
|
TRI_V8_ASCII_STRING("collection rename"),
|
||||||
|
false);
|
||||||
|
|
||||||
|
return TRI_ERROR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief renames a collection
|
/// @brief renames a collection
|
||||||
/// @startDocuBlock collectionRename
|
/// @startDocuBlock collectionRename
|
||||||
|
@ -2489,7 +2514,7 @@ static void JS_RenameVocbaseCol (const v8::FunctionCallbackInfo<v8::Value>& args
|
||||||
TRI_V8_THROW_EXCEPTION(TRI_ERROR_CLUSTER_UNSUPPORTED);
|
TRI_V8_THROW_EXCEPTION(TRI_ERROR_CLUSTER_UNSUPPORTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
string const name = TRI_ObjectToString(args[0]);
|
std::string const name = TRI_ObjectToString(args[0]);
|
||||||
|
|
||||||
// second parameter "override" is to override renaming restrictions, e.g.
|
// second parameter "override" is to override renaming restrictions, e.g.
|
||||||
// renaming from a system collection name to a non-system collection name and
|
// renaming from a system collection name to a non-system collection name and
|
||||||
|
@ -2516,6 +2541,8 @@ static void JS_RenameVocbaseCol (const v8::FunctionCallbackInfo<v8::Value>& args
|
||||||
TRI_V8_THROW_EXCEPTION(TRI_ERROR_CLUSTER_UNSUPPORTED);
|
TRI_V8_THROW_EXCEPTION(TRI_ERROR_CLUSTER_UNSUPPORTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string const oldName(collection->_name);
|
||||||
|
|
||||||
int res = TRI_RenameCollectionVocBase(collection->_vocbase,
|
int res = TRI_RenameCollectionVocBase(collection->_vocbase,
|
||||||
collection,
|
collection,
|
||||||
name.c_str(),
|
name.c_str(),
|
||||||
|
@ -2526,6 +2553,9 @@ static void JS_RenameVocbaseCol (const v8::FunctionCallbackInfo<v8::Value>& args
|
||||||
TRI_V8_THROW_EXCEPTION_MESSAGE(res, "cannot rename collection");
|
TRI_V8_THROW_EXCEPTION_MESSAGE(res, "cannot rename collection");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rename collection inside _graphs as well
|
||||||
|
RenameGraphCollections(isolate, oldName, name);
|
||||||
|
|
||||||
TRI_V8_RETURN_UNDEFINED();
|
TRI_V8_RETURN_UNDEFINED();
|
||||||
TRI_V8_TRY_CATCH_END
|
TRI_V8_TRY_CATCH_END
|
||||||
}
|
}
|
||||||
|
|
|
@ -1339,7 +1339,6 @@ static void JS_ExecuteAqlJson (const v8::FunctionCallbackInfo<v8::Value>& args)
|
||||||
|
|
||||||
static void JS_ExecuteAql (const v8::FunctionCallbackInfo<v8::Value>& args) {
|
static void JS_ExecuteAql (const v8::FunctionCallbackInfo<v8::Value>& args) {
|
||||||
TRI_V8_TRY_CATCH_BEGIN(isolate);
|
TRI_V8_TRY_CATCH_BEGIN(isolate);
|
||||||
|
|
||||||
v8::HandleScope scope(isolate);
|
v8::HandleScope scope(isolate);
|
||||||
|
|
||||||
TRI_vocbase_t* vocbase = GetContextVocBase(isolate);
|
TRI_vocbase_t* vocbase = GetContextVocBase(isolate);
|
||||||
|
|
|
@ -29,7 +29,6 @@ module.define("org/arangodb/general-graph", function(exports, module) {
|
||||||
/// @author Copyright 2011-2014, triAGENS GmbH, Cologne, Germany
|
/// @author Copyright 2011-2014, triAGENS GmbH, Cologne, Germany
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
var arangodb = require("org/arangodb"),
|
var arangodb = require("org/arangodb"),
|
||||||
internal = require("internal"),
|
internal = require("internal"),
|
||||||
ArangoCollection = arangodb.ArangoCollection,
|
ArangoCollection = arangodb.ArangoCollection,
|
||||||
|
@ -2442,7 +2441,7 @@ var _graph = function(graphName) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Graph(graphName, g.edgeDefinitions, collections[0], collections[1], orphanCollections,
|
return new Graph(graphName, g.edgeDefinitions, collections[0], collections[1], orphanCollections,
|
||||||
g._rev , g._id);
|
g._rev, g._id);
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -2454,6 +2453,62 @@ var _exists = function(graphId) {
|
||||||
return gCol.exists(graphId);
|
return gCol.exists(graphId);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief rename a collection inside the _graphs collections
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
var _renameCollection = function(oldName, newName) {
|
||||||
|
db._executeTransaction({
|
||||||
|
collections: {
|
||||||
|
write: "_graphs"
|
||||||
|
},
|
||||||
|
action: function(params) {
|
||||||
|
var gdb = getGraphCollection();
|
||||||
|
if (! gdb) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
gdb.toArray().forEach(function(doc) {
|
||||||
|
var c = _.clone(doc), i, j, changed = false;
|
||||||
|
if (c.edgeDefinitions) {
|
||||||
|
for (i = 0; i < c.edgeDefinitions.length; ++i) {
|
||||||
|
var def = c.edgeDefinitions[i];
|
||||||
|
if (def.collection === params.oldName) {
|
||||||
|
c.edgeDefinitions[i].collection = params.newName;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
for (j = 0; j < def.from.length; ++j) {
|
||||||
|
if (def.from[j] === params.oldName) {
|
||||||
|
c.edgeDefinitions[i].from[j] = params.newName;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (j = 0; j < def.to.length; ++j) {
|
||||||
|
if (def.to[j] === params.oldName) {
|
||||||
|
c.edgeDefinitions[i].to[j] = params.newName;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = 0; i < c.orphanCollections.length; ++i) {
|
||||||
|
if (c.orphanCollections[i] === params.oldName) {
|
||||||
|
c.orphanCollections[i] = params.newName;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed) {
|
||||||
|
gdb.update(doc._key, c);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
params: {
|
||||||
|
oldName: oldName,
|
||||||
|
newName: newName
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief Helper for dropping collections of a graph.
|
/// @brief Helper for dropping collections of a graph.
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -4728,6 +4783,7 @@ exports._extendEdgeDefinitions = _extendEdgeDefinitions;
|
||||||
exports._create = _create;
|
exports._create = _create;
|
||||||
exports._drop = _drop;
|
exports._drop = _drop;
|
||||||
exports._exists = _exists;
|
exports._exists = _exists;
|
||||||
|
exports._renameCollection = _renameCollection;
|
||||||
exports._list = _list;
|
exports._list = _list;
|
||||||
exports._listObjects = _listObjects;
|
exports._listObjects = _listObjects;
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
/// @author Copyright 2011-2014, triAGENS GmbH, Cologne, Germany
|
/// @author Copyright 2011-2014, triAGENS GmbH, Cologne, Germany
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
var arangodb = require("org/arangodb"),
|
var arangodb = require("org/arangodb"),
|
||||||
internal = require("internal"),
|
internal = require("internal"),
|
||||||
ArangoCollection = arangodb.ArangoCollection,
|
ArangoCollection = arangodb.ArangoCollection,
|
||||||
|
@ -2441,7 +2440,7 @@ var _graph = function(graphName) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Graph(graphName, g.edgeDefinitions, collections[0], collections[1], orphanCollections,
|
return new Graph(graphName, g.edgeDefinitions, collections[0], collections[1], orphanCollections,
|
||||||
g._rev , g._id);
|
g._rev, g._id);
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -2453,6 +2452,62 @@ var _exists = function(graphId) {
|
||||||
return gCol.exists(graphId);
|
return gCol.exists(graphId);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief rename a collection inside the _graphs collections
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
var _renameCollection = function(oldName, newName) {
|
||||||
|
db._executeTransaction({
|
||||||
|
collections: {
|
||||||
|
write: "_graphs"
|
||||||
|
},
|
||||||
|
action: function(params) {
|
||||||
|
var gdb = getGraphCollection();
|
||||||
|
if (! gdb) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
gdb.toArray().forEach(function(doc) {
|
||||||
|
var c = _.clone(doc), i, j, changed = false;
|
||||||
|
if (c.edgeDefinitions) {
|
||||||
|
for (i = 0; i < c.edgeDefinitions.length; ++i) {
|
||||||
|
var def = c.edgeDefinitions[i];
|
||||||
|
if (def.collection === params.oldName) {
|
||||||
|
c.edgeDefinitions[i].collection = params.newName;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
for (j = 0; j < def.from.length; ++j) {
|
||||||
|
if (def.from[j] === params.oldName) {
|
||||||
|
c.edgeDefinitions[i].from[j] = params.newName;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (j = 0; j < def.to.length; ++j) {
|
||||||
|
if (def.to[j] === params.oldName) {
|
||||||
|
c.edgeDefinitions[i].to[j] = params.newName;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = 0; i < c.orphanCollections.length; ++i) {
|
||||||
|
if (c.orphanCollections[i] === params.oldName) {
|
||||||
|
c.orphanCollections[i] = params.newName;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed) {
|
||||||
|
gdb.update(doc._key, c);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
params: {
|
||||||
|
oldName: oldName,
|
||||||
|
newName: newName
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief Helper for dropping collections of a graph.
|
/// @brief Helper for dropping collections of a graph.
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -4727,6 +4782,7 @@ exports._extendEdgeDefinitions = _extendEdgeDefinitions;
|
||||||
exports._create = _create;
|
exports._create = _create;
|
||||||
exports._drop = _drop;
|
exports._drop = _drop;
|
||||||
exports._exists = _exists;
|
exports._exists = _exists;
|
||||||
|
exports._renameCollection = _renameCollection;
|
||||||
exports._list = _list;
|
exports._list = _list;
|
||||||
exports._listObjects = _listObjects;
|
exports._listObjects = _listObjects;
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,9 @@ function GeneralGraphCreationSuite() {
|
||||||
},
|
},
|
||||||
|
|
||||||
tearDown: function() {
|
tearDown: function() {
|
||||||
|
db._drop("UnitTestsGraphRenamed1");
|
||||||
|
db._drop("UnitTestsGraphRenamed2");
|
||||||
|
db._drop("UnitTestsGraphRenamed3");
|
||||||
db._drop(ec1);
|
db._drop(ec1);
|
||||||
db._drop(ec2);
|
db._drop(ec2);
|
||||||
db._drop(ec3);
|
db._drop(ec3);
|
||||||
|
@ -106,6 +109,89 @@ function GeneralGraphCreationSuite() {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: rename
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
test_collectionRenameEdge: function() {
|
||||||
|
var g = graph._create(
|
||||||
|
gN1,
|
||||||
|
graph._edgeDefinitions(
|
||||||
|
graph._relation(rn1, [vn2, vn1], [vn4, vn3])
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
var doc = db._graphs.document(gN1);
|
||||||
|
assertEqual(1, doc.edgeDefinitions.length);
|
||||||
|
assertEqual(rn1, doc.edgeDefinitions[0].collection);
|
||||||
|
assertEqual(2, doc.edgeDefinitions[0].from.length);
|
||||||
|
assertEqual([ vn1, vn2 ], doc.edgeDefinitions[0].from.sort());
|
||||||
|
assertEqual(2, doc.edgeDefinitions[0].to.length);
|
||||||
|
assertEqual([ vn3, vn4 ], doc.edgeDefinitions[0].to.sort());
|
||||||
|
assertEqual([ ], doc.orphanCollections);
|
||||||
|
|
||||||
|
db._collection(rn1).rename("UnitTestsGraphRenamed1");
|
||||||
|
|
||||||
|
doc = db._graphs.document(gN1);
|
||||||
|
assertEqual(1, doc.edgeDefinitions.length);
|
||||||
|
assertEqual("UnitTestsGraphRenamed1", doc.edgeDefinitions[0].collection);
|
||||||
|
assertEqual(2, doc.edgeDefinitions[0].from.length);
|
||||||
|
assertEqual([ vn1, vn2 ], doc.edgeDefinitions[0].from.sort());
|
||||||
|
assertEqual(2, doc.edgeDefinitions[0].to.length);
|
||||||
|
assertEqual([ vn3, vn4 ], doc.edgeDefinitions[0].to.sort());
|
||||||
|
assertEqual([ ], doc.orphanCollections);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: rename
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
test_collectionRenameVertex: function() {
|
||||||
|
var g = graph._create(
|
||||||
|
gN1,
|
||||||
|
graph._edgeDefinitions(
|
||||||
|
graph._relation(rn1, [vn2, vn1], [vn4, vn3])
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
db._collection(vn1).rename("UnitTestsGraphRenamed1");
|
||||||
|
|
||||||
|
var doc = db._graphs.document(gN1);
|
||||||
|
assertEqual(1, doc.edgeDefinitions.length);
|
||||||
|
assertEqual(rn1, doc.edgeDefinitions[0].collection);
|
||||||
|
assertEqual(2, doc.edgeDefinitions[0].from.length);
|
||||||
|
assertEqual([ "UnitTestsGraphRenamed1", vn2 ].sort(), doc.edgeDefinitions[0].from.sort());
|
||||||
|
assertEqual(2, doc.edgeDefinitions[0].to.length);
|
||||||
|
assertEqual([ vn3, vn4 ], doc.edgeDefinitions[0].to.sort());
|
||||||
|
assertEqual([ ], doc.orphanCollections);
|
||||||
|
},
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test: rename
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
test_collectionRenameVertices: function() {
|
||||||
|
var g = graph._create(
|
||||||
|
gN1,
|
||||||
|
graph._edgeDefinitions(
|
||||||
|
graph._relation(rn1, [vn2, vn1], [vn4, vn3])
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
db._collection(rn1).rename("UnitTestsGraphRenamed1");
|
||||||
|
db._collection(vn1).rename("UnitTestsGraphRenamed2");
|
||||||
|
db._collection(vn4).rename("UnitTestsGraphRenamed3");
|
||||||
|
|
||||||
|
var doc = db._graphs.document(gN1);
|
||||||
|
assertEqual(1, doc.edgeDefinitions.length);
|
||||||
|
assertEqual("UnitTestsGraphRenamed1", doc.edgeDefinitions[0].collection);
|
||||||
|
assertEqual(2, doc.edgeDefinitions[0].from.length);
|
||||||
|
assertEqual([ "UnitTestsGraphRenamed2", vn2 ].sort(), doc.edgeDefinitions[0].from.sort());
|
||||||
|
assertEqual(2, doc.edgeDefinitions[0].to.length);
|
||||||
|
assertEqual([ vn3, "UnitTestsGraphRenamed3" ].sort(), doc.edgeDefinitions[0].to.sort());
|
||||||
|
assertEqual([ ], doc.orphanCollections);
|
||||||
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief test: Graph Creation
|
/// @brief test: Graph Creation
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue