1
0
Fork 0

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:
Jan 2018-01-05 14:51:26 +01:00 committed by GitHub
parent 78213b3b4a
commit d113b755a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 151 additions and 47 deletions

112
CHANGELOG
View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);
} }
}, },

View File

@ -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);