mirror of https://gitee.com/bigwinds/arangodb
fixed issue #4199: Internal failure: JavaScript exception in file 'arangosh.js' at 98,7: ArangoError 4: Expecting type String (#4202)
This commit is contained in:
parent
78213b3b4a
commit
d113b755a0
112
CHANGELOG
112
CHANGELOG
|
@ -1,6 +1,5 @@
|
||||||
devel
|
devel
|
||||||
-----
|
-----
|
||||||
* UI: displayed wrong wfs property for a collection when using rocksdb as storage engine
|
|
||||||
|
|
||||||
* UI: updated dygraph js library to version 2.1.0
|
* UI: updated dygraph js library to version 2.1.0
|
||||||
|
|
||||||
|
@ -22,43 +21,112 @@ devel
|
||||||
Release packages will still install arangoimp as a symlink so user scripts
|
Release packages will still install arangoimp as a symlink so user scripts
|
||||||
invoking arangoimp do not need to be changed
|
invoking arangoimp do not need to be changed
|
||||||
|
|
||||||
* UI: improved the behavior during collection creation in a cluster environment
|
* UI: Shard distribution view now has an accordion view instead of displaying
|
||||||
|
all shards of all collections at once.
|
||||||
|
|
||||||
|
|
||||||
|
v3.3.2 (XXXX-XX-XX)
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* fixed issue #4199: Internal failure: JavaScript exception in file 'arangosh.js'
|
||||||
|
at 98,7: ArangoError 4: Expecting type String
|
||||||
|
|
||||||
|
|
||||||
|
v3.3.1 (2017-12-28)
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* UI: displayed wrong wfs property for a collection when using RocksDB as
|
||||||
|
storage engine
|
||||||
|
|
||||||
|
* added `--ignore-missing` option to arangoimp
|
||||||
|
this option allows importing lines with less fields than specified in the CSV
|
||||||
|
header line
|
||||||
|
|
||||||
|
* changed misleading error message from "no leader" to "not a leader"
|
||||||
|
|
||||||
|
* optimize usage of AQL FULLTEXT index function to a FOR loop with index
|
||||||
|
usage in some cases
|
||||||
|
When the optimization is applied, this especially speeds up fulltext index
|
||||||
|
queries in the cluster
|
||||||
|
|
||||||
|
* UI: improved the behavior during collection creation in a cluster environment
|
||||||
|
|
||||||
|
* Agency lockup fixes for very small machines.
|
||||||
|
|
||||||
|
* Agency performance improvement by finer grained locking.
|
||||||
|
|
||||||
|
* Use steady_clock in agency whereever possible.
|
||||||
|
|
||||||
|
* Agency prevent Supervision thread crash.
|
||||||
|
|
||||||
|
* Fix agency integer overflow in timeout calculation.
|
||||||
|
|
||||||
|
|
||||||
|
v3.3.0 (2012-12-14)
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* release version
|
||||||
|
|
||||||
|
* added a missing try/catch block in the supervision thread
|
||||||
|
|
||||||
|
|
||||||
|
v3.3.rc8 (2017-12-12)
|
||||||
|
---------------------
|
||||||
|
|
||||||
* UI: fixed broken foxx configuration keys. Some valid configuration values
|
* UI: fixed broken foxx configuration keys. Some valid configuration values
|
||||||
could not be edited via the ui.
|
could not be edited via the ui.
|
||||||
|
|
||||||
* UI: Shard distribution view now has an accordion view instead of displaying
|
* UI: pressing the return key inside a select2 box no longer triggers the modal's
|
||||||
all shards of all collections at once.
|
|
||||||
|
|
||||||
* UI: pressing the return key inside a select2 box no longer triggers the modals
|
|
||||||
success function
|
success function
|
||||||
|
|
||||||
* UI: coordinators and db servers are now in sorted order (ascending)
|
* UI: coordinators and db servers are now in sorted order (ascending)
|
||||||
|
|
||||||
* UI: fixed disappearing of the navigation label in some cases
|
|
||||||
|
|
||||||
* fixed issue #3917: traversals with high maximal depth take extremely long
|
v3.3.rc7 (2017-12-07)
|
||||||
in planning phase.
|
---------------------
|
||||||
|
|
||||||
* UI: fixed issue #3822: disabled name input field for system collections
|
|
||||||
|
|
||||||
* fixed issue #3741: fix terminal color output in Windows
|
* fixed issue #3741: fix terminal color output in Windows
|
||||||
|
|
||||||
|
* UI: fixed issue #3822: disabled name input field for system collections
|
||||||
|
|
||||||
|
* fixed issue #3640: limit in subquery
|
||||||
|
|
||||||
|
* fixed issue #3745: Invalid result when using OLD object with array attribute in UPSERT statement
|
||||||
|
|
||||||
|
* UI: edge collections were wrongly added to from and to vertices select box during graph creation
|
||||||
|
|
||||||
|
* UI: added not found views for documents and collections
|
||||||
|
|
||||||
* UI: using default user database api during database creation now
|
* UI: using default user database api during database creation now
|
||||||
|
|
||||||
* UI: the graph viewer backend now picks one random start vertex of the
|
* UI: the graph viewer backend now picks one random start vertex of the
|
||||||
first 1000 documents instead of calling any(). The implementation of
|
first 1000 documents instead of calling any(). The implementation of
|
||||||
any is known to scale bad on huge collections with rocksdb.
|
"any" is known to scale bad on huge collections with RocksDB.
|
||||||
|
|
||||||
* UI: added not found views for documents and collections
|
* UI: fixed disappearing of the navigation label in some case special case
|
||||||
|
|
||||||
* UI: edge collections were wrongly added to from and to vertices select box during graph creation
|
|
||||||
|
|
||||||
* fixed issue #3640: limit in subquery
|
|
||||||
|
|
||||||
* UI: the graph viewer now displays updated label values correctly.
|
* UI: the graph viewer now displays updated label values correctly.
|
||||||
Additionally the included node/edge editor now closes automatically
|
Additionally the included node/edge editor now closes automatically
|
||||||
after a successful node/edge update.
|
after a successful node/edge update.
|
||||||
|
|
||||||
|
* fixed issue #3917: traversals with high maximal depth take extremely long
|
||||||
|
in planning phase.
|
||||||
|
|
||||||
|
|
||||||
|
v3.3.rc4 (2017-11-28)
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
* minor bug-fixes
|
||||||
|
|
||||||
|
|
||||||
|
v3.3.rc3 (2017-11-24)
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
* bug-fixes
|
||||||
|
|
||||||
|
|
||||||
|
v3.3.rc2 (2017-11-22)
|
||||||
|
---------------------
|
||||||
|
|
||||||
* UI: document/edge editor now remembering their modes (e.g. code or tree)
|
* UI: document/edge editor now remembering their modes (e.g. code or tree)
|
||||||
|
|
||||||
|
@ -71,12 +139,20 @@ devel
|
||||||
* added options `--encryption.keyfile` and `--encryption.key-generator` to arangodump
|
* added options `--encryption.keyfile` and `--encryption.key-generator` to arangodump
|
||||||
and arangorestore
|
and arangorestore
|
||||||
|
|
||||||
|
* UI: the graph viewer now displays updated label values correctly.
|
||||||
|
Additionally the included node/edge editor now closes automatically
|
||||||
|
after a successful node/edge update.
|
||||||
|
|
||||||
* removed `--recycle-ids` option for arangorestore
|
* removed `--recycle-ids` option for arangorestore
|
||||||
|
|
||||||
using that option could have led to problems on the restore, with potential
|
using that option could have led to problems on the restore, with potential
|
||||||
id conflicts between the originating server (the source dump server) and the
|
id conflicts between the originating server (the source dump server) and the
|
||||||
target server (the restore server)
|
target server (the restore server)
|
||||||
|
|
||||||
|
|
||||||
|
v3.3.rc1 (2017-11-17)
|
||||||
|
---------------------
|
||||||
|
|
||||||
* add readonly mode REST API
|
* add readonly mode REST API
|
||||||
|
|
||||||
* allow compilation of ArangoDB source code with g++ 7
|
* allow compilation of ArangoDB source code with g++ 7
|
||||||
|
|
|
@ -79,7 +79,6 @@ GatherBlock::GatherBlock(ExecutionEngine* engine, GatherNode const* en)
|
||||||
}
|
}
|
||||||
|
|
||||||
GatherBlock::~GatherBlock() {
|
GatherBlock::~GatherBlock() {
|
||||||
DEBUG_BEGIN_BLOCK();
|
|
||||||
for (std::deque<AqlItemBlock*>& x : _gatherBlockBuffer) {
|
for (std::deque<AqlItemBlock*>& x : _gatherBlockBuffer) {
|
||||||
for (AqlItemBlock* y : x) {
|
for (AqlItemBlock* y : x) {
|
||||||
delete y;
|
delete y;
|
||||||
|
@ -87,7 +86,6 @@ GatherBlock::~GatherBlock() {
|
||||||
x.clear();
|
x.clear();
|
||||||
}
|
}
|
||||||
_gatherBlockBuffer.clear();
|
_gatherBlockBuffer.clear();
|
||||||
DEBUG_END_BLOCK();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @brief initialize
|
/// @brief initialize
|
||||||
|
|
|
@ -406,6 +406,9 @@ bool IndexBlock::skipIndex(size_t atMost) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// cppcheck-suppress style
|
||||||
|
DEBUG_END_BLOCK();
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is called every time we need to fetch data from the indexes
|
// this is called every time we need to fetch data from the indexes
|
||||||
|
|
|
@ -51,7 +51,7 @@ function aqlVPackExternalsTestSuite () {
|
||||||
let coll = db._create(collName);
|
let coll = db._create(collName);
|
||||||
|
|
||||||
for (let i = 1000; i < 5000; ++i) {
|
for (let i = 1000; i < 5000; ++i) {
|
||||||
coll.save({_key: "test" + i});
|
coll.save({_key: "test" + i, value: "test" + i});
|
||||||
}
|
}
|
||||||
|
|
||||||
let ecoll = db._createEdgeCollection(edgeColl);
|
let ecoll = db._createEdgeCollection(edgeColl);
|
||||||
|
@ -62,6 +62,25 @@ function aqlVPackExternalsTestSuite () {
|
||||||
},
|
},
|
||||||
|
|
||||||
tearDown: cleanUp,
|
tearDown: cleanUp,
|
||||||
|
|
||||||
|
testCustom: function () {
|
||||||
|
const query = `FOR x IN ${collName} FILTER x IN [${JSON.stringify(db[collName].any())}] RETURN x`;
|
||||||
|
const cursor = db._query(query);
|
||||||
|
assertTrue(cursor.hasNext());
|
||||||
|
},
|
||||||
|
|
||||||
|
testCustomSubquery: function () {
|
||||||
|
const query = `FOR x IN ${collName} FILTER x IN (FOR doc IN ${collName} LIMIT 1 RETURN doc) RETURN x`;
|
||||||
|
const cursor = db._query(query);
|
||||||
|
assertTrue(cursor.hasNext());
|
||||||
|
},
|
||||||
|
|
||||||
|
testCustomSubquery2: function () {
|
||||||
|
db[collName].insert({ value: db[collName].any() });
|
||||||
|
const query = `FOR x IN ${collName} FILTER x.value IN (FOR doc IN ${collName} RETURN doc) RETURN x`;
|
||||||
|
const cursor = db._query(query);
|
||||||
|
assertTrue(cursor.hasNext());
|
||||||
|
},
|
||||||
|
|
||||||
testPlainExternal: function () {
|
testPlainExternal: function () {
|
||||||
const query = `FOR x IN ${collName} SORT x._key RETURN x`;
|
const query = `FOR x IN ${collName} SORT x._key RETURN x`;
|
||||||
|
@ -116,13 +135,13 @@ function aqlVPackExternalsTestSuite () {
|
||||||
},
|
},
|
||||||
|
|
||||||
testExternalInMerge: function () {
|
testExternalInMerge: function () {
|
||||||
const query = `FOR x IN ${collName} SORT x._key RETURN MERGE({value: 5}, x)`;
|
const query = `FOR x IN ${collName} SORT x._key RETURN MERGE({value2: 5}, x)`;
|
||||||
const cursor = db._query(query);
|
const cursor = db._query(query);
|
||||||
for (let i = 1000; i < 5000; ++i) {
|
for (let i = 1000; i < 5000; ++i) {
|
||||||
assertTrue(cursor.hasNext());
|
assertTrue(cursor.hasNext());
|
||||||
let n = cursor.next();
|
let n = cursor.next();
|
||||||
assertEqual(n._key, "test" + i);
|
assertEqual(n._key, "test" + i);
|
||||||
assertEqual(n.value, 5);
|
assertEqual(n.value2, 5);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -760,32 +760,40 @@ int VelocyPackHelper::compare(VPackSlice lhs, VPackSlice rhs, bool useUTF8,
|
||||||
case VPackValueType::SmallInt: {
|
case VPackValueType::SmallInt: {
|
||||||
return compareNumberValues(lhsType, lhs, rhs);
|
return compareNumberValues(lhsType, lhs, rhs);
|
||||||
}
|
}
|
||||||
case VPackValueType::String: {
|
case VPackValueType::String:
|
||||||
VPackValueLength nl;
|
|
||||||
char const* left = lhs.getString(nl);
|
|
||||||
TRI_ASSERT(left != nullptr);
|
|
||||||
|
|
||||||
VPackValueLength nr;
|
|
||||||
char const* right = rhs.getString(nr);
|
|
||||||
TRI_ASSERT(right != nullptr);
|
|
||||||
|
|
||||||
return compareStringValues(left, nl, right, nr, useUTF8);
|
|
||||||
}
|
|
||||||
case VPackValueType::Custom: {
|
case VPackValueType::Custom: {
|
||||||
if (lhsBase == nullptr || rhsBase == nullptr ||
|
VPackValueLength nl;
|
||||||
options == nullptr ||
|
VPackValueLength nr;
|
||||||
options->customTypeHandler == nullptr) {
|
char const* left;
|
||||||
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_INTERNAL,
|
char const* right;
|
||||||
"Could not extract custom attribute.");
|
std::string lhsString;
|
||||||
}
|
std::string rhsString;
|
||||||
std::string lhsString(options->customTypeHandler->toString(lhs, options, *lhsBase));
|
|
||||||
char const* left = lhsString.data();
|
|
||||||
VPackValueLength nl = lhsString.size();
|
|
||||||
TRI_ASSERT(left != nullptr);
|
|
||||||
|
|
||||||
std::string rhsString(options->customTypeHandler->toString(rhs, options, *rhsBase));
|
if (lhs.isCustom()) {
|
||||||
char const* right = rhsString.data();
|
if (lhsBase == nullptr || options == nullptr || options->customTypeHandler == nullptr) {
|
||||||
VPackValueLength nr = rhsString.size();
|
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_INTERNAL,
|
||||||
|
"Could not extract custom attribute.");
|
||||||
|
}
|
||||||
|
lhsString = options->customTypeHandler->toString(lhs, options, *lhsBase);
|
||||||
|
left = lhsString.data();
|
||||||
|
nl = lhsString.size();
|
||||||
|
} else {
|
||||||
|
left = lhs.getString(nl);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rhs.isCustom()) {
|
||||||
|
if (rhsBase == nullptr || options == nullptr || options->customTypeHandler == nullptr) {
|
||||||
|
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_INTERNAL,
|
||||||
|
"Could not extract custom attribute.");
|
||||||
|
}
|
||||||
|
rhsString = options->customTypeHandler->toString(rhs, options, *rhsBase);
|
||||||
|
right = rhsString.data();
|
||||||
|
nr = rhsString.size();
|
||||||
|
} else {
|
||||||
|
right = rhs.getString(nr);
|
||||||
|
}
|
||||||
|
|
||||||
|
TRI_ASSERT(left != nullptr);
|
||||||
TRI_ASSERT(right != nullptr);
|
TRI_ASSERT(right != nullptr);
|
||||||
|
|
||||||
return compareStringValues(left, nl, right, nr, useUTF8);
|
return compareStringValues(left, nl, right, nr, useUTF8);
|
||||||
|
|
Loading…
Reference in New Issue