diff --git a/.clang-tidy b/.clang-tidy index f2a3fc43bde..0e251d98541 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,4 +1,5 @@ # Bugprone exception escape is super unhelpful. +# NewDeleteLeaks has many false positives w.r.t smart pointers. Checks: -*, @@ -10,7 +11,10 @@ Checks: -bugprone-narrowing-conversions, -bugprone-signed-char-misuse, - clang-analyzer-deadcode.DeadStores, + clang-analyzer-*, + -clang-analyzer-cplusplus.NewDeleteLeaks, + concurrency-*, + HeaderFilterRegex: src/include|tools/benchmark/include|tools/nodejs_api/src_cpp/include|tools/python_api/src_cpp/include|tools/rust_api/include|tools/shell/include WarningsAsErrors: "*" diff --git a/src/binder/expression_binder.cpp b/src/binder/expression_binder.cpp index 9b4fa4f7f99..5c61b174650 100644 --- a/src/binder/expression_binder.cpp +++ b/src/binder/expression_binder.cpp @@ -94,8 +94,8 @@ std::shared_ptr ExpressionBinder::implicitCastIfNecessary( if (expression->dataType.getLogicalTypeID() == LogicalTypeID::ANY) { if (targetTypeID == LogicalTypeID::VAR_LIST) { // e.g. len($1) we cannot infer the child type for $1. - throw BinderException("Cannot resolve recursive data type for expression " + - expression->toString() + "."); + throw BinderException(stringFormat( + "Cannot resolve recursive data type for expression {}.", expression->toString())); } resolveAnyDataType(*expression, LogicalType(targetTypeID)); return expression; @@ -118,10 +118,10 @@ std::shared_ptr ExpressionBinder::implicitCast( std::move(bindData), std::move(children), execFunc, nullptr /* selectFunc */, std::move(uniqueName)); } else { - throw BinderException("Expression " + expression->toString() + " has data type " + - LogicalTypeUtils::dataTypeToString(expression->dataType) + - " but expect " + LogicalTypeUtils::dataTypeToString(targetType) + - ". Implicit cast is not supported."); + throw BinderException(stringFormat( + "Expression {} has data type {} but expected {}. Implicit cast is not supported.", + expression->toString(), LogicalTypeUtils::dataTypeToString(expression->dataType), + LogicalTypeUtils::dataTypeToString(targetType))); } } @@ -139,10 +139,9 @@ void ExpressionBinder::validateExpectedDataType( auto dataType = expression.dataType; auto targetsSet = std::unordered_set{targets.begin(), targets.end()}; if (!targetsSet.contains(dataType.getLogicalTypeID())) { - throw BinderException(expression.toString() + " has data type " + - LogicalTypeUtils::dataTypeToString(dataType.getLogicalTypeID()) + - ". " + LogicalTypeUtils::dataTypesToString(targets) + - " was expected."); + throw BinderException(stringFormat("{} has data type {} but {} was expected.", + expression.toString(), LogicalTypeUtils::dataTypeToString(dataType.getLogicalTypeID()), + LogicalTypeUtils::dataTypesToString(targets))); } } @@ -152,7 +151,7 @@ void ExpressionBinder::validateAggregationExpressionIsNotNested(const Expression } if (ExpressionVisitor::hasAggregate(*expression.getChild(0))) { throw BinderException( - "Expression " + expression.toString() + " contains nested aggregation."); + stringFormat("Expression {} contains nested aggregation.", expression.toString())); } } diff --git a/src/c_api/CMakeLists.txt b/src/c_api/CMakeLists.txt index d2dd8ef0f69..597a328d35e 100644 --- a/src/c_api/CMakeLists.txt +++ b/src/c_api/CMakeLists.txt @@ -3,6 +3,7 @@ add_library(kuzu_c_api connection.cpp database.cpp data_type.cpp + helpers.cpp flat_tuple.cpp prepared_statement.cpp query_result.cpp diff --git a/src/c_api/connection.cpp b/src/c_api/connection.cpp index 06b3ad9a2bd..03c35517c95 100644 --- a/src/c_api/connection.cpp +++ b/src/c_api/connection.cpp @@ -1,4 +1,5 @@ #include "binder/bound_statement_result.h" +#include "c_api/helpers.h" #include "c_api/kuzu.h" #include "common/exception/exception.h" #include "main/kuzu.h" @@ -88,33 +89,23 @@ kuzu_query_result* kuzu_connection_execute( } char* kuzu_connection_get_node_table_names(kuzu_connection* connection) { - auto node_table_names = static_cast(connection->_connection)->getNodeTableNames(); - char* node_table_names_c = (char*)malloc(node_table_names.size() + 1); - strcpy(node_table_names_c, node_table_names.c_str()); - return node_table_names_c; + return convertToOwnedCString( + static_cast(connection->_connection)->getNodeTableNames()); } char* kuzu_connection_get_rel_table_names(kuzu_connection* connection) { - auto rel_table_names = static_cast(connection->_connection)->getRelTableNames(); - char* rel_table_names_c = (char*)malloc(rel_table_names.size() + 1); - strcpy(rel_table_names_c, rel_table_names.c_str()); - return rel_table_names_c; + return convertToOwnedCString( + static_cast(connection->_connection)->getRelTableNames()); } char* kuzu_connection_get_node_property_names(kuzu_connection* connection, const char* table_name) { - auto node_property_names = - static_cast(connection->_connection)->getNodePropertyNames(table_name); - char* node_property_names_c = (char*)malloc(node_property_names.size() + 1); - strcpy(node_property_names_c, node_property_names.c_str()); - return node_property_names_c; + return convertToOwnedCString( + static_cast(connection->_connection)->getNodePropertyNames(table_name)); } char* kuzu_connection_get_rel_property_names(kuzu_connection* connection, const char* table_name) { - auto rel_property_names = - static_cast(connection->_connection)->getRelPropertyNames(table_name); - char* rel_property_names_c = (char*)malloc(rel_property_names.size() + 1); - strcpy(rel_property_names_c, rel_property_names.c_str()); - return rel_property_names_c; + return convertToOwnedCString( + static_cast(connection->_connection)->getRelPropertyNames(table_name)); } void kuzu_connection_interrupt(kuzu_connection* connection) { diff --git a/src/c_api/flat_tuple.cpp b/src/c_api/flat_tuple.cpp index 43948b2f7f8..5a7aefb6832 100644 --- a/src/c_api/flat_tuple.cpp +++ b/src/c_api/flat_tuple.cpp @@ -1,5 +1,6 @@ #include "processor/result/flat_tuple.h" +#include "c_api/helpers.h" #include "c_api/kuzu.h" #include "common/exception/exception.h" @@ -35,8 +36,5 @@ kuzu_value* kuzu_flat_tuple_get_value(kuzu_flat_tuple* flat_tuple, uint64_t inde char* kuzu_flat_tuple_to_string(kuzu_flat_tuple* flat_tuple) { auto flat_tuple_shared_ptr = static_cast*>(flat_tuple->_flat_tuple); - auto string = (*flat_tuple_shared_ptr)->toString(); - char* string_c = (char*)malloc(string.size() + 1); - strcpy(string_c, string.c_str()); - return string_c; + return convertToOwnedCString((*flat_tuple_shared_ptr)->toString()); } diff --git a/src/c_api/helpers.cpp b/src/c_api/helpers.cpp new file mode 100644 index 00000000000..68c08faaafe --- /dev/null +++ b/src/c_api/helpers.cpp @@ -0,0 +1,11 @@ +#include "c_api/helpers.h" + +#include + +char* convertToOwnedCString(const std::string& str) { + size_t src_len = str.size(); + auto* c_str = (char*)malloc(sizeof(char) * (src_len + 1)); + memcpy(c_str, str.c_str(), src_len); + c_str[src_len] = '\0'; + return c_str; +} diff --git a/src/c_api/prepared_statement.cpp b/src/c_api/prepared_statement.cpp index 13e3890939a..4880dc570c3 100644 --- a/src/c_api/prepared_statement.cpp +++ b/src/c_api/prepared_statement.cpp @@ -1,4 +1,5 @@ #include "binder/bound_statement.h" +#include "c_api/helpers.h" #include "c_api/kuzu.h" #include "common/types/value/value.h" #include "main/kuzu.h" @@ -43,9 +44,7 @@ char* kuzu_prepared_statement_get_error_message(kuzu_prepared_statement* prepare if (error_message.empty()) { return nullptr; } - char* error_message_c = (char*)malloc(error_message.size() + 1); - strcpy(error_message_c, error_message.c_str()); - return error_message_c; + return convertToOwnedCString(error_message); } void kuzu_prepared_statement_bind_bool( diff --git a/src/c_api/query_result.cpp b/src/c_api/query_result.cpp index faa4bcb8e04..36feba1aa22 100644 --- a/src/c_api/query_result.cpp +++ b/src/c_api/query_result.cpp @@ -1,3 +1,4 @@ +#include "c_api/helpers.h" #include "c_api/kuzu.h" #include "main/kuzu.h" @@ -24,9 +25,7 @@ char* kuzu_query_result_get_error_message(kuzu_query_result* query_result) { if (error_message.empty()) { return nullptr; } - char* error_message_c = (char*)malloc(error_message.size() + 1); - strcpy(error_message_c, error_message.c_str()); - return error_message_c; + return convertToOwnedCString(error_message); } uint64_t kuzu_query_result_get_num_columns(kuzu_query_result* query_result) { @@ -38,10 +37,7 @@ char* kuzu_query_result_get_column_name(kuzu_query_result* query_result, uint64_ if (index >= column_names.size()) { return nullptr; } - auto column_name = column_names[index]; - char* column_name_c = (char*)malloc(column_name.size() + 1); - strcpy(column_name_c, column_name.c_str()); - return column_name_c; + return convertToOwnedCString(column_names[index]); } kuzu_logical_type* kuzu_query_result_get_column_data_type( @@ -80,10 +76,8 @@ kuzu_flat_tuple* kuzu_query_result_get_next(kuzu_query_result* query_result) { } char* kuzu_query_result_to_string(kuzu_query_result* query_result) { - auto string = static_cast(query_result->_query_result)->toString(); - char* string_c = (char*)malloc(string.size() + 1); - strcpy(string_c, string.c_str()); - return string_c; + return convertToOwnedCString( + static_cast(query_result->_query_result)->toString()); } void kuzu_query_result_write_to_csv(kuzu_query_result* query_result, const char* file_path, diff --git a/src/c_api/value.cpp b/src/c_api/value.cpp index 855bdd3a16e..620b5ed050b 100644 --- a/src/c_api/value.cpp +++ b/src/c_api/value.cpp @@ -1,5 +1,6 @@ #include "common/types/value/value.h" +#include "c_api/helpers.h" #include "c_api/kuzu.h" #include "common/types/internal_id_t.h" #include "common/types/types.h" @@ -185,10 +186,7 @@ uint64_t kuzu_value_get_struct_num_fields(kuzu_value* value) { char* kuzu_value_get_struct_field_name(kuzu_value* value, uint64_t index) { auto val = static_cast(value->_value); auto data_type = val->getDataType(); - auto struct_field_name = StructType::getFields(data_type)[index]->getName(); - auto* c_struct_field_name = (char*)malloc(sizeof(char) * (struct_field_name.size() + 1)); - strcpy(c_struct_field_name, struct_field_name.c_str()); - return c_struct_field_name; + return convertToOwnedCString(StructType::getFields(data_type)[index]->getName()); } kuzu_value* kuzu_value_get_struct_field_value(kuzu_value* value, uint64_t index) { @@ -291,24 +289,16 @@ kuzu_interval_t kuzu_value_get_interval(kuzu_value* value) { } char* kuzu_value_get_string(kuzu_value* value) { - auto string_val = static_cast(value->_value)->getValue(); - auto* c_string = (char*)malloc(string_val.size() + 1); - strcpy(c_string, string_val.c_str()); - return c_string; + return convertToOwnedCString(static_cast(value->_value)->getValue()); } uint8_t* kuzu_value_get_blob(kuzu_value* value) { - auto string_val = static_cast(value->_value)->getValue(); - auto* c_blob = (uint8_t*)malloc(string_val.size() + 1); - strcpy((char*)c_blob, string_val.c_str()); - return c_blob; + return (uint8_t*)convertToOwnedCString( + static_cast(value->_value)->getValue()); } char* kuzu_value_to_string(kuzu_value* value) { - auto string_val = static_cast(value->_value)->toString(); - auto* c_string = (char*)malloc(string_val.size() + 1); - strcpy(c_string, string_val.c_str()); - return c_string; + return convertToOwnedCString(static_cast(value->_value)->toString()); } kuzu_value* kuzu_node_val_get_id_val(kuzu_value* node_val) { @@ -336,10 +326,7 @@ kuzu_internal_id_t kuzu_node_val_get_id(kuzu_value* node_val) { } char* kuzu_node_val_get_label_name(kuzu_value* node_val) { - auto label_name = NodeVal::getLabelName(static_cast(node_val->_value)); - auto* c_string = (char*)malloc(label_name.size() + 1); - strcpy(c_string, label_name.c_str()); - return c_string; + return convertToOwnedCString(NodeVal::getLabelName(static_cast(node_val->_value))); } uint64_t kuzu_node_val_get_property_size(kuzu_value* node_val) { @@ -347,10 +334,8 @@ uint64_t kuzu_node_val_get_property_size(kuzu_value* node_val) { } char* kuzu_node_val_get_property_name_at(kuzu_value* node_val, uint64_t index) { - auto name = NodeVal::getPropertyName(static_cast(node_val->_value), index); - auto* c_string = (char*)malloc(name.size() + 1); - strcpy(c_string, name.c_str()); - return c_string; + return convertToOwnedCString( + NodeVal::getPropertyName(static_cast(node_val->_value), index)); } kuzu_value* kuzu_node_val_get_property_value_at(kuzu_value* node_val, uint64_t index) { @@ -362,10 +347,7 @@ kuzu_value* kuzu_node_val_get_property_value_at(kuzu_value* node_val, uint64_t i } char* kuzu_node_val_to_string(kuzu_value* node_val) { - auto string_val = NodeVal::toString(static_cast(node_val->_value)); - auto* c_string = (char*)malloc(string_val.size() + 1); - strcpy(c_string, string_val.c_str()); - return c_string; + return convertToOwnedCString(NodeVal::toString(static_cast(node_val->_value))); } kuzu_value* kuzu_rel_val_get_src_id_val(kuzu_value* rel_val) { @@ -401,20 +383,15 @@ kuzu_internal_id_t kuzu_rel_val_get_dst_id(kuzu_value* rel_val) { } char* kuzu_rel_val_get_label_name(kuzu_value* rel_val) { - auto label = RelVal::getLabelName(static_cast(rel_val->_value)); - auto* c_string = (char*)malloc(label.size() + 1); - strcpy(c_string, label.c_str()); - return c_string; + return convertToOwnedCString(RelVal::getLabelName(static_cast(rel_val->_value))); } uint64_t kuzu_rel_val_get_property_size(kuzu_value* rel_val) { return RelVal::getNumProperties(static_cast(rel_val->_value)); } char* kuzu_rel_val_get_property_name_at(kuzu_value* rel_val, uint64_t index) { - auto name = RelVal::getPropertyName(static_cast(rel_val->_value), index); - auto* c_string = (char*)malloc(name.size() + 1); - strcpy(c_string, name.c_str()); - return c_string; + return convertToOwnedCString( + RelVal::getPropertyName(static_cast(rel_val->_value), index)); } kuzu_value* kuzu_rel_val_get_property_value_at(kuzu_value* rel_val, uint64_t index) { @@ -426,8 +403,5 @@ kuzu_value* kuzu_rel_val_get_property_value_at(kuzu_value* rel_val, uint64_t ind } char* kuzu_rel_val_to_string(kuzu_value* rel_val) { - auto string_val = RelVal::toString(static_cast(rel_val->_value)); - auto* c_string = (char*)malloc(string_val.size() + 1); - strcpy(c_string, string_val.c_str()); - return c_string; + return convertToOwnedCString(RelVal::toString(static_cast(rel_val->_value))); } diff --git a/src/include/c_api/helpers.h b/src/include/c_api/helpers.h index 23065b3f0c9..50edb6c3264 100644 --- a/src/include/c_api/helpers.h +++ b/src/include/c_api/helpers.h @@ -1,3 +1,5 @@ +#pragma once + #include char* convertToOwnedCString(const std::string& str); diff --git a/src/include/common/types/cast_helpers.h b/src/include/common/types/cast_helpers.h index 442a9126c27..589ccc7536c 100644 --- a/src/include/common/types/cast_helpers.h +++ b/src/include/common/types/cast_helpers.h @@ -122,7 +122,8 @@ struct DateToStringCast { } // optionally add BC to the end of the date if (add_bc) { - strcpy(ptr, " (BC)"); + strcpy(ptr, " (BC)"); // NOLINT(clang-analyzer-security.insecureAPI.strcpy): safety + // guaranteed by Length(). } } }; @@ -282,7 +283,8 @@ struct IntervalToStringCast { } } else if (length == 0) { // empty interval: default to 00:00:00 - strcpy(buffer, "00:00:00"); + strcpy(buffer, "00:00:00"); // NOLINT(clang-analyzer-security.insecureAPI.strcpy): + // safety guaranteed by Length(). return 8; } return length; diff --git a/src/storage/store/struct_node_column.cpp b/src/storage/store/struct_node_column.cpp index 260f2157831..4a99eb5791a 100644 --- a/src/storage/store/struct_node_column.cpp +++ b/src/storage/store/struct_node_column.cpp @@ -60,7 +60,6 @@ void StructNodeColumn::writeInternal( void StructNodeColumn::append(ColumnChunk* columnChunk, uint64_t nodeGroupIdx) { NodeColumn::append(columnChunk, nodeGroupIdx); - assert(columnChunk->getDataType().getLogicalTypeID() == LogicalTypeID::STRUCT); auto structColumnChunk = static_cast(columnChunk); for (auto i = 0u; i < childColumns.size(); i++) { childColumns[i]->append(structColumnChunk->getChild(i), nodeGroupIdx); diff --git a/test/test_files/exceptions/binder/binder_error.test b/test/test_files/exceptions/binder/binder_error.test index b75fd1cd2ee..93ca6282a1f 100644 --- a/test/test_files/exceptions/binder/binder_error.test +++ b/test/test_files/exceptions/binder/binder_error.test @@ -38,12 +38,12 @@ Binder exception: Expression in WITH must be aliased (use AS). -LOG BindToDifferentVariableType1 -STATEMENT MATCH (a:person)-[e1:knows]->(b:person) WITH e1 AS a MATCH (a) RETURN * ---- error -Binder exception: a has data type REL. (NODE) was expected. +Binder exception: a has data type REL but (NODE) was expected. -LOG BindToDifferentVariableType2 -STATEMENT MATCH (a:person)-[e1:knows]->(b:person) WITH a.age + 1 AS a MATCH (a) RETURN * ---- error -Binder exception: a has data type INT64. (NODE) was expected. +Binder exception: a has data type INT64 but (NODE) was expected. -LOG BindEmptyStar -STATEMENT RETURN * @@ -73,7 +73,7 @@ Binder exception: Variable b is not in scope. -LOG BindPropertyLookUpOnExpression -STATEMENT MATCH (a:person)-[e1:knows]->(b:person) RETURN (a.age + 2).age ---- error -Binder exception: +(a.age,2) has data type INT64. (NODE,REL,STRUCT) was expected. +Binder exception: +(a.age,2) has data type INT64 but (NODE,REL,STRUCT) was expected. -LOG BindPropertyNotExist -STATEMENT MATCH (a:person)-[e1:knows]->(b:person) RETURN a.foo @@ -222,7 +222,7 @@ Binder exception: The number of columns to union/union all must be the same. -LOG UnionAllUnmatchedDataTypesOfExpressions -STATEMENT MATCH (p:person) RETURN p.fName UNION ALL MATCH (p1:person) RETURN p1.age ---- error -Binder exception: p1.age has data type INT64. (STRING) was expected. +Binder exception: p1.age has data type INT64 but (STRING) was expected. -LOG UnionAndUnionAllInSingleQuery -STATEMENT MATCH (p:person) RETURN p.age UNION ALL MATCH (p1:person) RETURN p1.age UNION MATCH (p1:person) RETURN p1.age @@ -240,17 +240,17 @@ Binder exception: Read after update is not supported. Try query with multiple st -LOG SetDataTypeMisMatch -STATEMENT MATCH (a:person) SET a.age = 'hh' ---- error -Binder exception: Expression hh has data type STRING but expect INT64. Implicit cast is not supported. +Binder exception: Expression hh has data type STRING but expected INT64. Implicit cast is not supported. -LOG CreateNodeDataTypeMisMatch -STATEMENT CREATE (a:person {age:'hh'}) ---- error -Binder exception: Expression hh has data type STRING but expect INT64. Implicit cast is not supported. +Binder exception: Expression hh has data type STRING but expected INT64. Implicit cast is not supported. -LOG CreateRelDataTypeMisMatch -STATEMENT CREATE (a:person)-[:knows {date:12}]->(b:person) ---- error -Binder exception: Expression 12 has data type INT64 but expect DATE. Implicit cast is not supported. +Binder exception: Expression 12 has data type INT64 but expected DATE. Implicit cast is not supported. -LOG DeleteNodeProperty -STATEMENT MATCH (a:person) DELETE a.age @@ -420,7 +420,7 @@ Binder exception: person table already has property fName. -LOG AddPropertyUnmatchedDefaultValueType -STATEMENT alter table person add intCol INT64 DEFAULT '3.2' ---- error -Binder exception: Expression 3.2 has data type STRING but expect INT64. Implicit cast is not supported. +Binder exception: Expression 3.2 has data type STRING but expected INT64. Implicit cast is not supported. -LOG RenameNonExistedTable -STATEMENT alter table person1 rename to person2 @@ -503,7 +503,7 @@ Binder exception: Invalid option name: thread. -LOG InvalidCallOptionValue -STATEMENT CALL threads='abc' ---- error -Binder exception: abc has data type STRING. (INT64) was expected. +Binder exception: abc has data type STRING but (INT64) was expected. -LOG AllShortestPathInvalidLowerBound -STATEMENT MATCH p = (a)-[* ALL SHORTEST 2..3]-(b) RETURN p diff --git a/test/test_files/exceptions/copy/wrong_header.test b/test/test_files/exceptions/copy/wrong_header.test index 0d50e200172..374cb63e55e 100644 --- a/test/test_files/exceptions/copy/wrong_header.test +++ b/test/test_files/exceptions/copy/wrong_header.test @@ -52,7 +52,7 @@ Copy exception: Invalid: CSV parse error: Expected 4 columns, got 3: 10,24,1 ---- ok -STATEMENT COPY person FROM "${KUZU_ROOT_DIRECTORY}/dataset/copy-test/node/parquet/types_50k_1.parquet" (HEADER=true) ---- error -Copy exception: Unmatched number of columns in parquet file. Expect: 3, got: 13. +Copy exception: Unmatched number of columns in parquet file. Expected: 3, got: 13. -CASE RelUnmatchedNumColumns -STATEMENT create node table person (ID1 SERIAL, ID INT64, fName INT64, age INT64, PRIMARY KEY (ID1)) @@ -61,4 +61,4 @@ Copy exception: Unmatched number of columns in parquet file. Expect: 3, got: 13. ---- ok -STATEMENT COPY knows FROM "${KUZU_ROOT_DIRECTORY}/dataset/demo-db/parquet/follows.parquet" (HEADER=true) ---- error -Copy exception: Unmatched number of columns in parquet file. Expect: 4, got: 3. +Copy exception: Unmatched number of columns in parquet file. Expected: 4, got: 3. diff --git a/test/test_files/tck/match/match1.test b/test/test_files/tck/match/match1.test index 3cceb7057f6..c56d3b7a9c8 100644 --- a/test/test_files/tck/match/match1.test +++ b/test/test_files/tck/match/match1.test @@ -84,37 +84,37 @@ Parser exception: Invalid input : expected rule oC_SingleQuery (line ---- ok -STATEMENT MATCH ()-[r]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[r]->() MATCH (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()<-[r]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH (), ()-[r]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[r]-(), () MATCH (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[]-(), ()-[r]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[]-()-[r]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[]-()-[]-(), ()-[r]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[]-()-[]-(), ()-[r]-(), () MATCH (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[]-()-[]-(), (), ()-[r]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH (x), (a)-[q]-(b), (s), (s)-[r]->(t)<-[]-(b) MATCH (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. # Fail when a path has the same variable in a preceding MATCH -CASE Scenario8 @@ -124,52 +124,52 @@ Binder exception: r has data type REL. (NODE) was expected. ---- ok -STATEMENT MATCH r = ()-[]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH r = ()-[]->() MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH r = ()<-[]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH r = ()-[*1..30]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH r = ()-[*1..30]->() MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (), r = ()-[]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (), r = ()-[]->() MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (), r = ()<-[]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (), r = ()-[*1..30]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (), r = ()-[*1..30]->() MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH ()-[]-(), r = ()-[]-(), () MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH r = ()-[]-(), ()-[]-(), () MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH ()-[]-()<-[]-(), r = ()-[]-() MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (x), r = (a)-[q]-(b), (s)-[p]-(t)-[]-(b) MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (x), (a)-[q]-(b), r = (s)-[p]-(t)-[]-(b) MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (x), (a)-[q]-(b), r = (s)-[p]->(t)<-[]-(b) MATCH (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. # Fail when a relationship has the same variable in the same pattern @@ -180,79 +180,79 @@ Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. ---- ok -STATEMENT MATCH ()-[r]-(r) RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()-[r]->(r) RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()<-[r]-(r) RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()-[r]-()-[]-(r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[r*1..30]-()-[]-(r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH ()-[r]-(), (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[r]->(), (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()<-[r]-(), (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[r]-(), (r)-[]-() RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[r]-(), ()-[]-(r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH (s)-[r]-(t), (r)-[]-(t) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH (s)-[r]-(t), (s)-[]-(r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH (), ()-[r]-(), (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[r]-(), (), (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[r]-(), (r), () RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[]-(), ()-[r]-(), (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[]-()-[r]-(), ()-[]-(r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[]-()-[]-(), ()-[r]-(), (r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[]-()-[r]-(), (r), ()-[]-() RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[]-()-[r]-(), (), (r)-[]-() RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[]-()-[r*1..30]-(), (r), ()-[]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH ()-[*1..30]-()-[r]-(), (), (r)-[]-() RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[*1..30]-()-[r]-(), (), (r)-[*1..30]-() RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH ()-[*1..30]-()-[r]-(), (), ()-[*1..30]-(r) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. -STATEMENT MATCH (x), (a)-[r]-(b), (s), (s)-[]->(r)<-[]-(b) RETURN r; ---- error -Binder exception: r has data type REL. (NODE) was expected. +Binder exception: r has data type REL but (NODE) was expected. # Fail when a path has the same variable in the same pattern -CASE Scenario10 @@ -262,64 +262,64 @@ Binder exception: r has data type REL. (NODE) was expected. ---- ok -STATEMENT MATCH r = ()-[]-(), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH r = ()-[]->(), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH r = ()<-[]-(), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH r = ()-[*1..30]-(), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH r = ()-[*1..30]->(), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (), r = ()-[]-(), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (), r = ()-[]->(), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (), r = ()<-[]-(), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (), r = ()-[*1..30]-(), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (), r = ()-[*1..30]->(), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH ()-[]-(), r = ()-[]-(), (), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH r = ()-[]-(), ()-[]-(), (), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH ()-[]-()<-[]-(), r = ()-[]-(), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (x), r = (a)-[q]-(b), (s)-[p]-(t)-[]-(b), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (x), (a)-[q]-(b), r = (s)-[p]-(t)-[]-(b), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (x), (a)-[q]-(b), r = (s)-[p]->(t)<-[]-(b), (r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (x), r = (s)-[p]-(t)-[]-(b), (r), (a)-[q]-(b) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (x), r = (s)-[p]->(t)<-[]-(b), (r), (a)-[q]-(b) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (x), r = (s)-[p]-(t)-[]-(b), (a)-[q]-(r) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. -STATEMENT MATCH (x), r = (s)-[p]->(t)<-[]-(b), (r)-[q]-(b) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. +Binder exception: r has data type RECURSIVE_REL but (NODE) was expected. # Fail when a path has the same variable in the same pattern -CASE Scenario11 @@ -327,22 +327,22 @@ Binder exception: r has data type RECURSIVE_REL. (NODE) was expected. ---- ok -STATEMENT WITH true AS n MATCH (n) RETURN n; ---- error -Binder exception: n has data type BOOL. (NODE) was expected. +Binder exception: n has data type BOOL but (NODE) was expected. -STATEMENT WITH 123 AS n MATCH (n) RETURN n; ---- error -Binder exception: n has data type INT64. (NODE) was expected. +Binder exception: n has data type INT64 but (NODE) was expected. -STATEMENT WITH 123.4 AS n MATCH (n) RETURN n; ---- error -Binder exception: n has data type DOUBLE. (NODE) was expected. +Binder exception: n has data type DOUBLE but (NODE) was expected. -STATEMENT WITH 'foo' AS n MATCH (n) RETURN n; ---- error -Binder exception: n has data type STRING. (NODE) was expected. +Binder exception: n has data type STRING but (NODE) was expected. -STATEMENT WITH [10] AS n MATCH (n) RETURN n; ---- error -Binder exception: n has data type VAR_LIST. (NODE) was expected. +Binder exception: n has data type VAR_LIST but (NODE) was expected. -STATEMENT WITH {x: 1} AS n MATCH (n) RETURN n; ---- error -Binder exception: n has data type STRUCT. (NODE) was expected. +Binder exception: n has data type STRUCT but (NODE) was expected. -STATEMENT WITH {x: [1]} AS n MATCH (n) RETURN n; ---- error -Binder exception: n has data type STRUCT. (NODE) was expected. +Binder exception: n has data type STRUCT but (NODE) was expected. diff --git a/test/test_files/tck/match/match2.test b/test/test_files/tck/match/match2.test index 4c23ec9cd4f..767ac4207e6 100644 --- a/test/test_files/tck/match/match2.test +++ b/test/test_files/tck/match/match2.test @@ -131,82 +131,82 @@ Parser exception: Invalid input : expected rule oC_SingleQuer ---- ok -STATEMENT MATCH (r) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]->() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)<-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]-(r) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()-[]->(r) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()<-[]-(r) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()-[]-(r) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]->(r) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)<-[]-(r) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]-()-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()-[]-(r)-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]-()-[*1..30]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()-[]-(r)-[*1..30]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r), ()-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]-(), ()-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()-[]-(r), ()-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()-[]-(), (r)-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()-[]-(), ()-[]-(r) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]-(t), (s)-[]-(t) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (s)-[]-(r), (s)-[]-(t) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (s)-[]-(t), (r)-[]-(t) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (s)-[]-(t), (s)-[]-(r) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (s), (a)-[q]-(b), (r), (s)-[]-(t)-[]-(b) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (s), (a)-[q]-(b), (r), (s)-[]->(t)<-[]-(b) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (s), (a)-[q]-(b), (t), (s)-[]->(r)<-[]-(b) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. # Fail when a path has the same variable in a preceding MATCH -CASE Scenario10 @@ -216,61 +216,61 @@ Binder exception: r has data type NODE. (REL) was expected. ---- ok -STATEMENT MATCH r = ()-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH r = ()-[]->() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH r = ()<-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH r = ()-[*1..30]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH r = ()-[*1..30]->() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH r = ()<-[*1..30]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH r = ()-[p*1..30]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH r = ()-[p*1..30]->() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH r = ()<-[p*1..30]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH (), r = ()-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH ()-[]-(), r = ()-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH ()-[]->(), r = ()<-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH ()<-[]-(), r = ()-[]->() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH ()-[*1..30]->(), r = ()<-[]-() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH ()<-[p*1..30]-(), r = ()-[*1..30]->() MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH (x), (a)-[q]-(b), (r), (s)-[]->(t)<-[]-(b) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (x), (a)-[q]-(b), r = (s)-[p]->(t)<-[]-(b) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH (x), (a)-[q*1..30]-(b), r = (s)-[p]->(t)<-[]-(b) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH (x), (a)-[q]-(b), r = (s)-[p*1..30]->(t)<-[]-(b) MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. # Fail when a node has the same variable in the same pattern -CASE Scenario11 @@ -280,55 +280,55 @@ Binder exception: r has data type RECURSIVE_REL. (REL) was expected. ---- ok -STATEMENT MATCH (r)-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[r]->() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)<-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[r]-(r) RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[r]->(r) RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)<-[r]-(r) RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]-()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()-[]-(r)-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]-()-[r*1..30]-() RETURN r; ---- error -Binder exception: r has data type NODE. (RECURSIVE_REL) was expected. +Binder exception: r has data type NODE but (RECURSIVE_REL) was expected. -STATEMENT MATCH ()-[]-(r)-[r*1..30]-() RETURN r; ---- error -Binder exception: r has data type NODE. (RECURSIVE_REL) was expected. +Binder exception: r has data type NODE but (RECURSIVE_REL) was expected. -STATEMENT MATCH (r), ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]-(), ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH ()-[]-(r), ()-[r]-() RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r)-[]-(t), (s)-[r]-(t) RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (s)-[]-(r), (s)-[r]-(t) RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r), (a)-[q]-(b), (s), (s)-[r]-(t)-[]-(b) RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. -STATEMENT MATCH (r), (a)-[q]-(b), (s), (s)-[r]->(t)<-[]-(b) RETURN r; ---- error -Binder exception: r has data type NODE. (REL) was expected. +Binder exception: r has data type NODE but (REL) was expected. # Fail when a path has the same variable in the same pattern -CASE Scenario12 @@ -338,13 +338,13 @@ Binder exception: r has data type NODE. (REL) was expected. ---- ok -STATEMENT MATCH r = ()-[]-(), ()-[r]-() RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH r = ()-[]-(), ()-[r*1..30]-() RETURN r; ---- error Binder exception: Bind relationship r to relationship with same name is not supported. -STATEMENT MATCH r = (a)-[p]-(s)-[]-(b), (s)-[]-(t), (t), (t)-[r]-(b) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH r = (a)-[p]-(s)-[]-(b), (s)-[]-(t), (t), (t)-[r*1..2]-(b) RETURN r; ---- error Binder exception: Bind relationship r to relationship with same name is not supported. @@ -356,7 +356,7 @@ Binder exception: Bind relationship r to relationship with same name is not supp Binder exception: Bind relationship r to relationship with same name is not supported. -STATEMENT MATCH (a)-[p]-(s)-[]-(b), r = (s)-[*1..2]-(t), (t), (t)-[r]-(b) RETURN r; ---- error -Binder exception: r has data type RECURSIVE_REL. (REL) was expected. +Binder exception: r has data type RECURSIVE_REL but (REL) was expected. -STATEMENT MATCH (a)-[p]-(s)-[]-(b), r = (s)-[*1..2]-(t), (t), (t)-[r*1..2]-(b) RETURN r; ---- error Binder exception: Bind relationship r to relationship with same name is not supported. @@ -369,22 +369,22 @@ Binder exception: Bind relationship r to relationship with same name is not supp ---- ok -STATEMENT WITH true AS r MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type BOOL. (REL) was expected. +Binder exception: r has data type BOOL but (REL) was expected. -STATEMENT WITH 123 AS r MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type INT64. (REL) was expected. +Binder exception: r has data type INT64 but (REL) was expected. -STATEMENT WITH 123.4 AS r MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type DOUBLE. (REL) was expected. +Binder exception: r has data type DOUBLE but (REL) was expected. -STATEMENT WITH 'foo' AS r MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type STRING. (REL) was expected. +Binder exception: r has data type STRING but (REL) was expected. -STATEMENT WITH [10] AS r MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type VAR_LIST. (REL) was expected. +Binder exception: r has data type VAR_LIST but (REL) was expected. -STATEMENT WITH {x: 1} AS r MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type STRUCT. (REL) was expected. +Binder exception: r has data type STRUCT but (REL) was expected. -STATEMENT WITH {x: [1]} AS r MATCH ()-[r]-() RETURN r; ---- error -Binder exception: r has data type STRUCT. (REL) was expected. +Binder exception: r has data type STRUCT but (REL) was expected. diff --git a/test/test_files/tck/match/match3.test b/test/test_files/tck/match/match3.test index bb1d5bf8ffc..cf082040a10 100644 --- a/test/test_files/tck/match/match3.test +++ b/test/test_files/tck/match/match3.test @@ -411,6 +411,6 @@ Binder exception: Bind relationship r to relationship with same name is not supp MATCH (users)-->(messages) RETURN messages; ---- error -Binder exception: users has data type VAR_LIST. (NODE) was expected. +Binder exception: users has data type VAR_LIST but (NODE) was expected. diff --git a/test/test_files/tinysnb/cast/cast_string_to_other_type.test b/test/test_files/tinysnb/cast/cast_string_to_other_type.test index 6168b6256f3..77e31968983 100644 --- a/test/test_files/tinysnb/cast/cast_string_to_other_type.test +++ b/test/test_files/tinysnb/cast/cast_string_to_other_type.test @@ -28,7 +28,7 @@ Conversion exception: Cast failed. "((hello),(bdfadf),)" is not in STRING[][] ra Conversion exception: Cast failed. (() is not in STRING[][] range. -STATEMENT LOAD WITH HEADERS (list INT32[]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/quote_fail.csv" RETURN * ; ---- error -Binder exception: Number of columns mismatch. Detect 3 but expect 1. +Binder exception: Incorrect number of columns. Detected 3 but expected 1. -STATEMENT LOAD WITH HEADERS (list STRING[]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/single_quote.csv" RETURN *; ---- error Conversion exception: Cast failed. ['fdsfdsfe werw] is not in STRING[] range. diff --git a/test/test_files/tinysnb/exception/list.test b/test/test_files/tinysnb/exception/list.test index 4cd8be77403..96e51e7ac20 100644 --- a/test/test_files/tinysnb/exception/list.test +++ b/test/test_files/tinysnb/exception/list.test @@ -6,7 +6,7 @@ -CASE SetListPropertyError -STATEMENT MATCH (a:person) SET a.workedHours=['A', 'B'] ---- error -Binder exception: Expression LIST_CREATION(A,B) has data type STRING[] but expect INT64[]. Implicit cast is not supported. +Binder exception: Expression LIST_CREATION(A,B) has data type STRING[] but expected INT64[]. Implicit cast is not supported. -CASE ListFunctionMatchError1 -STATEMENT MATCH (a:person) RETURN array_concat(a.workedHours, a.age) diff --git a/test/test_files/tinysnb/exception/relation.test b/test/test_files/tinysnb/exception/relation.test index e8443a98ce5..78191ab81d9 100644 --- a/test/test_files/tinysnb/exception/relation.test +++ b/test/test_files/tinysnb/exception/relation.test @@ -6,12 +6,12 @@ -CASE ReadVarlengthRelPropertyTest1 -STATEMENT MATCH (a:person)-[e:knows*1..3]->(b:person) RETURN e.age ---- error -Binder exception: e has data type RECURSIVE_REL. (NODE,REL,STRUCT) was expected. +Binder exception: e has data type RECURSIVE_REL but (NODE,REL,STRUCT) was expected. -CASE ReadVarlengthRelPropertyTest2 -STATEMENT MATCH (a:person)-[e:knows*1..3]->(b:person) WHERE ID(e) = 0 RETURN COUNT(*) ---- error -Binder exception: e has data type RECURSIVE_REL. (NODE,REL,STRUCT) was expected. +Binder exception: e has data type RECURSIVE_REL but (NODE,REL,STRUCT) was expected. -CASE AccessRelInternalIDTest -STATEMENT MATCH (a:person)-[e:knows]->(b:person) WHERE e._id > 1 RETURN COUNT(*) diff --git a/test/test_files/tinysnb/load_from/load_from.test b/test/test_files/tinysnb/load_from/load_from.test index bfe03c76847..eb40c36e7b1 100644 --- a/test/test_files/tinysnb/load_from/load_from.test +++ b/test/test_files/tinysnb/load_from/load_from.test @@ -24,7 +24,7 @@ -SKIP -STATEMENT LOAD WITH HEADERS (id INT64) FROM "${KUZU_ROOT_DIRECTORY}/dataset/copy-test/node/parquet/types_50k_0.parquet" RETURN *; ---- error -Binder exception: Number of columns mismatch. Detect 10 but expect 1. +Binder exception: Incorrect number of columns. Detected 10 but expected 1. -STATEMENT LOAD WITH HEADERS (id INT64, int64Column INT64, doubleColumn DOUBLE, booleanColumn BOOLEAN, dateColumn DATE, stringColumn STRING, listOfInt64 INT64[], listOfString STRING[], listOfListOfInt64 INT64[][], structColumn STRUCT(ID int64, name STRING)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/copy-test/node/parquet/types_50k_0.parquet" RETURN id, dateColumn ORDER BY id LIMIT 1; ---- 1 @@ -32,7 +32,7 @@ Binder exception: Number of columns mismatch. Detect 10 but expect 1. -STATEMENT LOAD WITH HEADERS (id INT64, int64Column INT64, doubleColumn INT64, booleanColumn INT64, dateColumn INT64, stringColumn INT64, listOfInt64 INT64, listOfString INT64, listOfListOfInt64 INT64, structColumn INT64) FROM "${KUZU_ROOT_DIRECTORY}/dataset/copy-test/node/parquet/types_50k_0.parquet" RETURN * ORDER BY id LIMIT 1; ---- 1 -Binder exception: Column doubleColumn data type mismatch. Detect DOUBLE but expect INT64. +Binder exception: Column doubleColumn data type mismatch. Detected DOUBLE but expected INT64. -STATEMENT LOAD FROM "${KUZU_ROOT_DIRECTORY}/dataset/copy-test/node/parquet/types_50k_0.parquet" RETURN * ORDER BY id LIMIT 5; ---- 5 0|73|3.258507|True|1994-01-12|FrPZkcHFuepVxcAiMwyAsRqDlRtQx|[65,25]|[4deQc5]|[[163,237],[28,60,77,31,137],[286,186,249,206]]|{id: 764, name: CwFRaCoEp} @@ -68,7 +68,7 @@ Binder exception: Load from TURTLE file is not supported. -CASE LoadFromCSVTest -STATEMENT LOAD WITH HEADERS (a INT64) FROM "${KUZU_ROOT_DIRECTORY}/dataset/tinysnb/eStudyAt.csv" (HEADER=True) RETURN `from`, `to`, YEAR, Places; ---- error -Binder exception: Number of columns mismatch. Detect 10 but expect 1. +Binder exception: Incorrect number of columns. Detected 10 but expected 1. -STATEMENT LOAD WITH HEADERS (ID INt64, fName StRING, gender INT64, isStudent BoOLEAN, isWorker BOOLEAN, age INT64, eyeSight DOUBLE, birthdate DATE, registerTime TIMESTAMP, lastJobDuration interval, workedHours INT64[], usedNames STRING[], courseScoresPerTerm INT64[][], grades INT64[4], height float) FROM "${KUZU_ROOT_DIRECTORY}/dataset/tinysnb/vPerson.csv" (HEADER=True) RETURN fName, gender, birthdate; ---- 8 diff --git a/test/test_files/tinysnb/parquet/tinysnb_parquet.test b/test/test_files/tinysnb/parquet/tinysnb_parquet.test index 760e504c18c..18378e4dab3 100644 --- a/test/test_files/tinysnb/parquet/tinysnb_parquet.test +++ b/test/test_files/tinysnb/parquet/tinysnb_parquet.test @@ -41,7 +41,7 @@ Binder exception: Node table PERSON does not exist. -LOG ExceptionReadVarlengthRelPropertyTest2Parquet -STATEMENT MATCH (a:person)-[e:knows*1..3]->(b:person) WHERE ID(e) = 0 RETURN COUNT(*) ---- error -Binder exception: e has data type RECURSIVE_REL. (NODE,REL) was expected. +Binder exception: e has data type RECURSIVE_REL but (NODE,REL) was expected. -LOG FilterPersonNodesAgeFilteredTest2Parquet -STATEMENT MATCH (a:person) WHERE a.age < 25 RETURN COUNT(*) diff --git a/tools/shell/embedded_shell.cpp b/tools/shell/embedded_shell.cpp index b6babf80646..8739cdec712 100644 --- a/tools/shell/embedded_shell.cpp +++ b/tools/shell/embedded_shell.cpp @@ -198,7 +198,7 @@ void highlight(char* buffer, char* resultBuf, uint32_t maxLen, uint32_t cursorPo #endif highlightBuffer << token; } - strcpy(resultBuf, highlightBuffer.str().c_str()); + strncpy(resultBuf, highlightBuffer.str().c_str(), maxLen); } EmbeddedShell::EmbeddedShell(const std::string& databasePath, const SystemConfig& systemConfig) {