diff --git a/dataset/load-from-test/fixed_list/fail_conversion.csv b/dataset/load-from-test/fixed_list/error_conversion.csv similarity index 100% rename from dataset/load-from-test/fixed_list/fail_conversion.csv rename to dataset/load-from-test/fixed_list/error_conversion.csv diff --git a/dataset/load-from-test/fixed_list/fail_conversion2.csv b/dataset/load-from-test/fixed_list/error_conversion2.csv similarity index 100% rename from dataset/load-from-test/fixed_list/fail_conversion2.csv rename to dataset/load-from-test/fixed_list/error_conversion2.csv diff --git a/dataset/load-from-test/map_correct.csv b/dataset/load-from-test/map/map_correct.csv similarity index 100% rename from dataset/load-from-test/map_correct.csv rename to dataset/load-from-test/map/map_correct.csv diff --git a/dataset/load-from-test/map_incorrect_type.csv b/dataset/load-from-test/map/map_incorrect_type.csv similarity index 100% rename from dataset/load-from-test/map_incorrect_type.csv rename to dataset/load-from-test/map/map_incorrect_type.csv diff --git a/dataset/load-from-test/map_no_closing1.csv b/dataset/load-from-test/map/map_no_closing1.csv similarity index 100% rename from dataset/load-from-test/map_no_closing1.csv rename to dataset/load-from-test/map/map_no_closing1.csv diff --git a/dataset/load-from-test/map_no_closing2.csv b/dataset/load-from-test/map/map_no_closing2.csv similarity index 100% rename from dataset/load-from-test/map_no_closing2.csv rename to dataset/load-from-test/map/map_no_closing2.csv diff --git a/dataset/load-from-test/map_no_closing3.csv b/dataset/load-from-test/map/map_no_closing3.csv similarity index 100% rename from dataset/load-from-test/map_no_closing3.csv rename to dataset/load-from-test/map/map_no_closing3.csv diff --git a/dataset/load-from-test/map_no_closing4.csv b/dataset/load-from-test/map/map_no_closing4.csv similarity index 100% rename from dataset/load-from-test/map_no_closing4.csv rename to dataset/load-from-test/map/map_no_closing4.csv diff --git a/dataset/load-from-test/map_no_quote.csv b/dataset/load-from-test/map/map_no_quote.csv similarity index 100% rename from dataset/load-from-test/map_no_quote.csv rename to dataset/load-from-test/map/map_no_quote.csv diff --git a/dataset/load-from-test/map_no_val.csv b/dataset/load-from-test/map/map_no_val.csv similarity index 100% rename from dataset/load-from-test/map_no_val.csv rename to dataset/load-from-test/map/map_no_val.csv diff --git a/dataset/load-from-test/nested_map2.csv b/dataset/load-from-test/map/nested_map2.csv similarity index 100% rename from dataset/load-from-test/nested_map2.csv rename to dataset/load-from-test/map/nested_map2.csv diff --git a/dataset/load-from-test/nested_map_correct.csv b/dataset/load-from-test/map/nested_map_correct.csv similarity index 100% rename from dataset/load-from-test/nested_map_correct.csv rename to dataset/load-from-test/map/nested_map_correct.csv diff --git a/dataset/load-from-test/invalid_field_name.csv b/dataset/load-from-test/struct/invalid_field_name.csv similarity index 100% rename from dataset/load-from-test/invalid_field_name.csv rename to dataset/load-from-test/struct/invalid_field_name.csv diff --git a/dataset/load-from-test/struct_bracket_fail1.csv b/dataset/load-from-test/struct/struct_bracket_error1.csv similarity index 100% rename from dataset/load-from-test/struct_bracket_fail1.csv rename to dataset/load-from-test/struct/struct_bracket_error1.csv diff --git a/dataset/load-from-test/struct_bracket_fail2.csv b/dataset/load-from-test/struct/struct_bracket_error2.csv similarity index 100% rename from dataset/load-from-test/struct_bracket_fail2.csv rename to dataset/load-from-test/struct/struct_bracket_error2.csv diff --git a/dataset/load-from-test/struct_close_fail.csv b/dataset/load-from-test/struct/struct_close_error.csv similarity index 100% rename from dataset/load-from-test/struct_close_fail.csv rename to dataset/load-from-test/struct/struct_close_error.csv diff --git a/dataset/load-from-test/no_field_name.csv b/dataset/load-from-test/struct/struct_no_field_name.csv similarity index 100% rename from dataset/load-from-test/no_field_name.csv rename to dataset/load-from-test/struct/struct_no_field_name.csv diff --git a/dataset/load-from-test/struct_noclose.csv b/dataset/load-from-test/struct/struct_noclose.csv similarity index 100% rename from dataset/load-from-test/struct_noclose.csv rename to dataset/load-from-test/struct/struct_noclose.csv diff --git a/dataset/load-from-test/struct_quote_fail.csv b/dataset/load-from-test/struct/struct_quote_error.csv similarity index 100% rename from dataset/load-from-test/struct_quote_fail.csv rename to dataset/load-from-test/struct/struct_quote_error.csv diff --git a/dataset/load-from-test/union/union_correct.csv b/dataset/load-from-test/union/union_correct.csv new file mode 100644 index 0000000000..8fb00f7af3 --- /dev/null +++ b/dataset/load-from-test/union/union_correct.csv @@ -0,0 +1,9 @@ +"false","","255","18446744073709551615",fsdfa +" true ","432","0","-1.43241543","543fasf" +" 34234 ","4294967295","65535",-128,432 +" -42342345 ","-1","-1","-129",fasf +" T ","2022-06-06","4324.123","-32768", +"null","2019-03-19","-12.3432","32768","" +"","-2147483648","1970-01-01 00:00:00.004666-10","-32769",fsdxcv +"0","0","2014-05-12 12:11:59",4324254534123134324321.4343252435,"fsaf" +" F","-4325"," Null ",18446744073709551616," dfsa" diff --git a/dataset/load-from-test/union/union_error.csv b/dataset/load-from-test/union/union_error.csv new file mode 100644 index 0000000000..26077dc051 --- /dev/null +++ b/dataset/load-from-test/union/union_error.csv @@ -0,0 +1 @@ +fdsaf diff --git a/dataset/load-from-test/bracket_fail.csv b/dataset/load-from-test/var_list/bracket_error.csv similarity index 100% rename from dataset/load-from-test/bracket_fail.csv rename to dataset/load-from-test/var_list/bracket_error.csv diff --git a/dataset/load-from-test/change_config.csv b/dataset/load-from-test/var_list/change_config.csv similarity index 100% rename from dataset/load-from-test/change_config.csv rename to dataset/load-from-test/var_list/change_config.csv diff --git a/dataset/load-from-test/conversion_fail.csv b/dataset/load-from-test/var_list/conversion_error.csv similarity index 100% rename from dataset/load-from-test/conversion_fail.csv rename to dataset/load-from-test/var_list/conversion_error.csv diff --git a/dataset/load-from-test/delim_fail.csv b/dataset/load-from-test/var_list/delim_error.csv similarity index 100% rename from dataset/load-from-test/delim_fail.csv rename to dataset/load-from-test/var_list/delim_error.csv diff --git a/dataset/load-from-test/quote_fail.csv b/dataset/load-from-test/var_list/quote_error.csv similarity index 100% rename from dataset/load-from-test/quote_fail.csv rename to dataset/load-from-test/var_list/quote_error.csv diff --git a/dataset/load-from-test/should_pass.csv b/dataset/load-from-test/var_list/should_pass.csv similarity index 100% rename from dataset/load-from-test/should_pass.csv rename to dataset/load-from-test/var_list/should_pass.csv diff --git a/dataset/load-from-test/single_quote.csv b/dataset/load-from-test/var_list/single_quote.csv similarity index 100% rename from dataset/load-from-test/single_quote.csv rename to dataset/load-from-test/var_list/single_quote.csv diff --git a/dataset/load-from-test/single_quote2.csv b/dataset/load-from-test/var_list/single_quote2.csv similarity index 100% rename from dataset/load-from-test/single_quote2.csv rename to dataset/load-from-test/var_list/single_quote2.csv diff --git a/dataset/load-from-test/single_struct.csv b/dataset/load-from-test/var_list/single_struct_bracket.csv similarity index 100% rename from dataset/load-from-test/single_struct.csv rename to dataset/load-from-test/var_list/single_struct_bracket.csv diff --git a/src/include/storage/store/table_copy_utils.h b/src/include/storage/store/table_copy_utils.h index c7adffed09..691728eb1c 100644 --- a/src/include/storage/store/table_copy_utils.h +++ b/src/include/storage/store/table_copy_utils.h @@ -54,8 +54,6 @@ class TableCopyUtils { static std::shared_ptr toArrowDataType(const common::LogicalType& dataType); - static bool tryCast(const common::LogicalType& targetType, const char* value, uint64_t length); - static std::vector parseStructFieldNameAndValues( common::LogicalType& type, std::string_view structString, const common::CSVReaderConfig& csvReaderConfig); diff --git a/src/processor/operator/persistent/reader/csv/driver.cpp b/src/processor/operator/persistent/reader/csv/driver.cpp index 60281ec71f..e694248e28 100644 --- a/src/processor/operator/persistent/reader/csv/driver.cpp +++ b/src/processor/operator/persistent/reader/csv/driver.cpp @@ -465,6 +465,124 @@ static void castStringToStruct(const char* input, uint64_t len, ValueVector* vec } } +template +static inline void testAndSetValue(ValueVector* vector, uint64_t rowToAdd, T result, bool success) { + if (success) { + vector->setValue(rowToAdd, result); + } +} + +static bool tryCastUnionField( + ValueVector* vector, uint64_t rowToAdd, const char* input, uint64_t len) { + auto& targetType = vector->dataType; + bool success = false; + switch (targetType.getLogicalTypeID()) { + case LogicalTypeID::BOOL: { + bool result; + success = function::tryCastToBool(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::INT64: { + int64_t result; + success = function::trySimpleIntegerCast(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::INT32: { + int32_t result; + success = function::trySimpleIntegerCast(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::INT16: { + int16_t result; + success = function::trySimpleIntegerCast(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::INT8: { + int8_t result; + success = function::trySimpleIntegerCast(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::UINT64: { + uint64_t result; + success = function::trySimpleIntegerCast(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::UINT32: { + uint32_t result; + success = function::trySimpleIntegerCast(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::UINT16: { + uint16_t result; + success = function::trySimpleIntegerCast(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::UINT8: { + uint8_t result; + success = function::trySimpleIntegerCast(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::DOUBLE: { + double_t result; + success = function::tryDoubleCast(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::FLOAT: { + float_t result; + success = function::tryDoubleCast(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::DATE: { + date_t result; + uint64_t pos; + success = Date::tryConvertDate(input, len, pos, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::TIMESTAMP: { + timestamp_t result; + success = Timestamp::tryConvertTimestamp(input, len, result); + testAndSetValue(vector, rowToAdd, result, success); + } break; + case LogicalTypeID::STRING: { + if (!utf8proc::Utf8Proc::isValid(input, len)) { + throw common::CopyException{"Invalid UTF8-encoded string."}; + } + StringVector::addString(vector, rowToAdd, input, len); + return true; + } break; + default: { + return false; + } + } + return success; +} + +static void castStringToUnion(ValueVector* vector, std::string_view strVal, uint64_t rowToAdd) { + auto& type = vector->dataType; + union_field_idx_t selectedFieldIdx = INVALID_STRUCT_FIELD_IDX; + + for (auto i = 0u; i < UnionType::getNumFields(&type); i++) { + auto internalFieldIdx = UnionType::getInternalFieldIdx(i); + auto fieldVector = StructVector::getFieldVector(vector, internalFieldIdx).get(); + if (tryCastUnionField(fieldVector, rowToAdd, strVal.data(), strVal.length())) { + fieldVector->setNull(rowToAdd, false /* isNull */); + selectedFieldIdx = i; + break; + } else { + fieldVector->setNull(rowToAdd, true /* isNull */); + } + } + + if (selectedFieldIdx == INVALID_STRUCT_FIELD_IDX) { + throw ConversionException{stringFormat("Could not convert to union type {}: {}.", + LogicalTypeUtils::dataTypeToString(type), strVal)}; + } + StructVector::getFieldVector(vector, UnionType::TAG_FIELD_IDX) + ->setValue(rowToAdd, selectedFieldIdx); + StructVector::getFieldVector(vector, UnionType::TAG_FIELD_IDX) + ->setNull(rowToAdd, false /* isNull */); +} + void copyStringToVector(ValueVector* vector, uint64_t rowToAdd, std::string_view strVal, const CSVReaderConfig& csvReaderConfig) { auto& type = vector->dataType; @@ -569,30 +687,7 @@ void copyStringToVector(ValueVector* vector, uint64_t rowToAdd, std::string_view castStringToStruct(strVal.data(), strVal.length(), vector, rowToAdd, csvReaderConfig); } break; case LogicalTypeID::UNION: { - union_field_idx_t selectedFieldIdx = INVALID_STRUCT_FIELD_IDX; - for (auto i = 0u; i < UnionType::getNumFields(&type); i++) { - auto internalFieldIdx = UnionType::getInternalFieldIdx(i); - if (storage::TableCopyUtils::tryCast( - *UnionType::getFieldType(&type, i), strVal.data(), strVal.length())) { - StructVector::getFieldVector(vector, internalFieldIdx) - ->setNull(rowToAdd, false /* isNull */); - copyStringToVector(StructVector::getFieldVector(vector, internalFieldIdx).get(), - rowToAdd, strVal, csvReaderConfig); - selectedFieldIdx = i; - break; - } else { - StructVector::getFieldVector(vector, internalFieldIdx) - ->setNull(rowToAdd, true /* isNull */); - } - } - if (selectedFieldIdx == INVALID_STRUCT_FIELD_IDX) { - throw ConversionException{stringFormat("Could not convert to union type {}: {}.", - LogicalTypeUtils::dataTypeToString(type), strVal)}; - } - StructVector::getFieldVector(vector, UnionType::TAG_FIELD_IDX) - ->setValue(rowToAdd, selectedFieldIdx); - StructVector::getFieldVector(vector, UnionType::TAG_FIELD_IDX) - ->setNull(rowToAdd, false /* isNull */); + castStringToUnion(vector, strVal, rowToAdd); } break; default: { // LCOV_EXCL_START throw NotImplementedException("BaseCSVReader::copyStringToVector"); diff --git a/src/storage/store/table_copy_utils.cpp b/src/storage/store/table_copy_utils.cpp index 45b753d613..27108adb3f 100644 --- a/src/storage/store/table_copy_utils.cpp +++ b/src/storage/store/table_copy_utils.cpp @@ -306,71 +306,6 @@ std::shared_ptr TableCopyUtils::toArrowDataType(const LogicalTy } } -bool TableCopyUtils::tryCast( - const common::LogicalType& targetType, const char* value, uint64_t length) { - switch (targetType.getLogicalTypeID()) { - case LogicalTypeID::BOOL: { - bool result; - return function::tryCastToBool(value, length, result); - } - case LogicalTypeID::INT64: { - int64_t result; - return function::trySimpleIntegerCast(value, length, result); - } - case LogicalTypeID::INT32: { - int32_t result; - return function::trySimpleIntegerCast(value, length, result); - } - case LogicalTypeID::INT16: { - int16_t result; - return function::trySimpleIntegerCast(value, length, result); - } - case LogicalTypeID::INT8: { - int8_t result; - return function::trySimpleIntegerCast(value, length, result); - } - case LogicalTypeID::UINT64: { - uint64_t result; - return function::trySimpleIntegerCast(value, length, result); - } - case LogicalTypeID::UINT32: { - uint32_t result; - return function::trySimpleIntegerCast(value, length, result); - } - case LogicalTypeID::UINT16: { - uint16_t result; - return function::trySimpleIntegerCast(value, length, result); - } - case LogicalTypeID::UINT8: { - uint8_t result; - return function::trySimpleIntegerCast(value, length, result); - } - case LogicalTypeID::DOUBLE: { - double_t result; - return function::tryDoubleCast(value, length, result); - } - case LogicalTypeID::FLOAT: { - float_t result; - return function::tryDoubleCast(value, length, result); - } - case LogicalTypeID::DATE: { - date_t result; - uint64_t pos; - return Date::tryConvertDate(value, length, pos, result); - } - case LogicalTypeID::TIMESTAMP: { - timestamp_t result; - return Timestamp::tryConvertTimestamp(value, length, result); - } - case LogicalTypeID::STRING: { - return true; - } - default: { - return false; - } - } -} - std::vector TableCopyUtils::parseStructFieldNameAndValues( LogicalType& type, std::string_view structString, const CSVReaderConfig& csvReaderConfig) { std::vector structFieldIdxAndValueParis; diff --git a/test/test_files/tinysnb/cast/cast_string_to_nested_types.test b/test/test_files/tinysnb/cast/cast_string_to_nested_types.test index 4879ad01ee..5f8bdeba16 100644 --- a/test/test_files/tinysnb/cast/cast_string_to_nested_types.test +++ b/test/test_files/tinysnb/cast/cast_string_to_nested_types.test @@ -4,7 +4,7 @@ -- -CASE CastStringToList --STATEMENT LOAD WITH HEADERS (list INT64[][], a struct(num INT64, str STRING), fixedList INT16[3]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/should_pass.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (list INT64[][], a struct(num INT64, str STRING), fixedList INT16[3]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/var_list/should_pass.csv" RETURN *; ---- 10 [[1,3,423,124,43242],[432]]|{num: -423432, str: this is a string []}|[255,254,43] [[1,3,423,124,43242],[432]]|{num: 3423423, str: this is a string}|[250,249,21] @@ -16,17 +16,17 @@ []||[111,0,0] ||[0,111,12] |{num: 0, str: }|[0,0,0] --STATEMENT LOAD WITH HEADERS (list STRING[], str STRING, struct STRUCT(a STRUCT(b STRUCT(c INT64[])))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/change_config.csv" (HEADER=true, DELIM="|", ESCAPE="~", QUOTE="'", LIST_BEGIN="(", LIST_END=")") RETURN * ; +-STATEMENT LOAD WITH HEADERS (list STRING[], str STRING, struct STRUCT(a STRUCT(b STRUCT(c INT64[])))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/var_list/change_config.csv" (HEADER=true, DELIM="|", ESCAPE="~", QUOTE="'", LIST_BEGIN="(", LIST_END=")") RETURN * ; ---- 3 [escape , is escape success? ~]| ' ( ) do not need to escape sepeical | ()|{a: {b: {c: []}}} [this , is a word , normal not escape , ' ( ) | , ~ ' ]|try escape ~|{a: {b: {c: [3432423,-43423,31231,]}}} [~ ' not work also this '"" ]|nu|{a: {b: {c: []}}} --STATEMENT LOAD WITH HEADERS (map MAP(STRING, MAP(STRING, INT16))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/nested_map_correct.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (map MAP(STRING, MAP(STRING, INT16))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map/nested_map_correct.csv" RETURN *; ---- 3 {c={a=3423}, b={g=3421}} {d={}} {} --STATEMENT LOAD WITH HEADERS (map MAP(INT32[], STRUCT(c STRING))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map_correct.csv" (HEADER=true, DELIM=">") RETURN *; +-STATEMENT LOAD WITH HEADERS (map MAP(INT32[], STRUCT(c STRING))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map/map_correct.csv" (HEADER=true, DELIM=">") RETURN *; ---- 6 {[432,24,12]={c: okay}, [90,11,43,54]={c: bad}, [0]={c: good}} {[]={c: }} @@ -34,7 +34,7 @@ {[]={c: this is not empty}} {[1000,143245,432,43241,-43214324,-432423,-4324324,-41412,-131242143,0,-4324324,0]={c: }} {={c: '~~ have some > >'}} --STATEMENT LOAD WITH HEADERS (map MAP(MAP(INT64, INT64), MAP(STRING, STRING))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/nested_map2.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (map MAP(MAP(INT64, INT64), MAP(STRING, STRING))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map/nested_map2.csv" RETURN *; ---- 7 {{18046=18046, 2=321, 3=423421}={dJ3cf6Y=dJ3cf6Y, dJ3cf6Y=dJ3cf6Y, dJ3cf6Y=dJ3cf6Y}} {{30099=30099, 1=0}={3mTEf=3mTEf, 3mTEf=3mTEf, 3mTEf=3mTEf}} @@ -62,69 +62,80 @@ -STATEMENT LOAD WITH HEADERS (fixedList DOUBLE[83]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/fixed_list/long_fixed_list.csv" RETURN *; ---- 1 [4123.120000,0.000000,0.000000,42432.120000,435435.231000,432423.123340,43424.213400,4325245.130000,432423.123000,3242.123000,4123.120000,42432.120000,435435.231000,432423.123340,43424.213400,4325245.130000,432423.123000,3242.123000,4123.120000,42432.120000,435435.231000,432423.123340,43424.213400,4325245.130000,432423.123000,3242.123000,4123.120000,42432.120000,435435.231000,432423.123340,43424.213400,4325245.130000,432423.123000,3242.123000,4123.120000,42432.120000,435435.231000,432423.123340,43424.213400,4325245.130000,432423.123000,3242.123000,4123.120000,42432.120000,435435.231000,432423.123340,43424.213400,4325245.130000,432423.123000,3242.123000,4123.120000,42432.120000,435435.231000,432423.123340,43424.213400,4325245.130000,432423.123000,3242.123000,4123.120000,42432.120000,435435.231000,432423.123340,43424.213400,4325245.130000,432423.123000,3242.123000,4123.120000,42432.120000,435435.231000,432423.123340,43424.213400,4325245.130000,432423.123000,3242.123000,4123.120000,42432.120000,435435.231000,432423.123340,43424.213400,4325245.130000,432423.123000,3242.123000,543523442342.434326] +-STATEMENT LOAD WITH HEADERS (u UNION(v1 INT64, v2 BOOLEAN), u2 UNION(v1 UINT32, v2 INT32, v3 DATE), u3 UNION(v1 UINT8, v2 UINT16, v3 TIMESTAMP, v4 FLOAT), u4 UNION(v1 UINT64, v2 INT8, v3 INT16, v4 DOUBLE), u5 UNION(v1 STRING)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/union/union_correct.csv" RETURN *; +---- 9 +False||255|18446744073709551615|fsdfa +True|432|0|-1.432415|543fasf +34234|4294967295|65535|-128|432 +-42342345|-1|-1.000000|-129|fasf +True|2022-06-06|4324.123047|-32768| +|2019-03-19|-12.343200|32768| +|-2147483648|1970-01-01 10:00:00.004666|-32769.000000|fsdxcv +0|0|2014-05-12 12:11:59|4324254534123134124032.000000|fsaf +False|-4325||18446744073709551616.000000| dfsa -CASE ErrorTest --STATEMENT LOAD WITH HEADERS (list STRING[][]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/delim_fail.csv" (DELIM="|", ESCAPE="~", QUOTE="'", LIST_BEGIN="(", LIST_END=")") RETURN * ; +-STATEMENT LOAD WITH HEADERS (list STRING[][]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/var_list/delim_error.csv" (DELIM="|", ESCAPE="~", QUOTE="'", LIST_BEGIN="(", LIST_END=")") RETURN * ; ---- error Conversion exception: Cast failed. "((hello),(bdfadf),)" is not in STRING[][] range. --STATEMENT LOAD WITH HEADERS (list STRING[][]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/bracket_fail.csv" (DELIM="|", ESCAPE="~", LIST_BEGIN="(", LIST_END=")") RETURN * ; +-STATEMENT LOAD WITH HEADERS (list STRING[][]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/var_list/bracket_error.csv" (DELIM="|", ESCAPE="~", LIST_BEGIN="(", LIST_END=")") RETURN * ; ---- error 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 * ; +-STATEMENT LOAD WITH HEADERS (list INT32[]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/var_list/quote_error.csv" RETURN * ; ---- error Binder exception: Number of columns mismatch. Expected 1 but got 3. --STATEMENT LOAD WITH HEADERS (list STRING[]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/single_quote.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (list STRING[]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/var_list/single_quote.csv" RETURN *; ---- error Conversion exception: Cast failed. ['fdsfdsfe werw] is not in STRING[] range. --STATEMENT LOAD WITH HEADERS (list STRING[]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/single_quote2.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (list STRING[]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/var_list/single_quote2.csv" RETURN *; ---- error Conversion exception: Cast failed. [[' this is a signle quote]] is not in STRING[] range. --STATEMENT LOAD WITH HEADERS (list UINT8[]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/single_struct.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (list UINT8[]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/var_list/single_struct_bracket.csv" RETURN *; ---- error Conversion exception: Cast failed. [{32, 32] is not in UINT8[] range. --STATEMENT LOAD WITH HEADERS (list UINT8[]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/conversion_fail.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (list UINT8[]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/var_list/conversion_error.csv" RETURN *; ---- error Conversion exception: Cast failed. 432412 is not in UINT8 range. --STATEMENT LOAD WITH HEADERS (q STRUCT(a STRUCT(b STRING))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct_bracket_fail1.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (q STRUCT(a STRUCT(b STRING))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct/struct_bracket_error1.csv" RETURN *; ---- error Conversion exception: Cast failed. {a: {b: fsdf is not in STRUCT(a:STRUCT(b:STRING)) range. --STATEMENT LOAD WITH HEADERS (q STRUCT(a STRUCT(b STRING))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct_bracket_fail2.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (q STRUCT(a STRUCT(b STRING))) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct/struct_bracket_error2.csv" RETURN *; ---- error Conversion exception: Cast failed. {a: {b: fds} is not in STRUCT(a:STRUCT(b:STRING)) range. --STATEMENT LOAD WITH HEADERS (a STRUCT(c STRING)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct_close_fail.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a STRUCT(c STRING)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct/struct_close_error.csv" RETURN *; ---- error Conversion exception: Cast failed. { c : 423 } c: 479, is not in STRUCT(c:STRING) range. --STATEMENT LOAD WITH HEADERS (a STRUCT(c INT32)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/invalid_field_name.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a STRUCT(c INT32)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct/invalid_field_name.csv" RETURN *; ---- error Parser exception: Invalid struct field name: d --STATEMENT LOAD WITH HEADERS (a STRUCT(c INT32)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/no_field_name.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a STRUCT(c INT32)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct/struct_no_field_name.csv" RETURN *; ---- error Conversion exception: Cast failed. {c 3423} is not in STRUCT(c:INT32) range. --STATEMENT LOAD WITH HEADERS (a STRUCT(c INT32)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct_quote_fail.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a STRUCT(c INT32)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct/struct_quote_error.csv" RETURN *; ---- error Conversion exception: Cast failed. { c: 'fdsfs } is not in STRUCT(c:INT32) range. --STATEMENT LOAD WITH HEADERS (a STRUCT(c INT32)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct_noclose.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a STRUCT(c INT32)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/struct/struct_noclose.csv" RETURN *; ---- error Conversion exception: Cast failed. { is not in STRUCT(c:INT32) range. --STATEMENT LOAD WITH HEADERS (a MAP(UINT8, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map_incorrect_type.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a MAP(UINT8, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map/map_incorrect_type.csv" RETURN *; ---- error Conversion exception: Cast failed. -3 is not in UINT8 range. --STATEMENT LOAD WITH HEADERS (a MAP(UINT8, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map_no_val.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a MAP(UINT8, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map/map_no_val.csv" RETURN *; ---- error Conversion exception: Cast failed. {4324} is not in MAP(UINT8: UINT8) range. --STATEMENT LOAD WITH HEADERS (a MAP(UINT8, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map_no_closing1.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a MAP(UINT8, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map/map_no_closing1.csv" RETURN *; ---- error Conversion exception: Cast failed. {10=10, 20=20, is not in MAP(UINT8: UINT8) range. --STATEMENT LOAD WITH HEADERS (a MAP(UINT8, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map_no_closing2.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a MAP(UINT8, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map/map_no_closing2.csv" RETURN *; ---- error Conversion exception: Cast failed. { is not in MAP(UINT8: UINT8) range. --STATEMENT LOAD WITH HEADERS (a MAP(STRING, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map_no_quote.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a MAP(STRING, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map/map_no_quote.csv" RETURN *; ---- error Conversion exception: Cast failed. {324="} is not in MAP(STRING: UINT8) range. --STATEMENT LOAD WITH HEADERS (a MAP(UINT8, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map_no_closing3.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a MAP(UINT8, UINT8)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map/map_no_closing3.csv" RETURN *; ---- error Conversion exception: Cast failed. {{3=3} is not in MAP(UINT8: UINT8) range. --STATEMENT LOAD WITH HEADERS (a MAP(UINT16, UINT16[])) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map_no_closing4.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a MAP(UINT16, UINT16[])) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/map/map_no_closing4.csv" RETURN *; ---- error Conversion exception: Cast failed. {432=[432,432} is not in MAP(UINT16: UINT16[]) range. -STATEMENT LOAD WITH HEADERS (a INT64[4]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/fixed_list/incorrect_num.csv" RETURN *; @@ -133,10 +144,10 @@ Copy exception: Each fixed list should have fixed number of elements. Expected: -STATEMENT LOAD WITH HEADERS (a STRING[2]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/fixed_list/unsupported_type.csv" RETURN *; ---- error Binder exception: The child type of a fixed list must be a numeric type. Given: STRING. --STATEMENT LOAD WITH HEADERS (a INT16[1]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/fixed_list/fail_conversion.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a INT16[1]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/fixed_list/error_conversion.csv" RETURN *; ---- error Conversion exception: Cast failed. 4324234543543534534524 is not in INT16 range. --STATEMENT LOAD WITH HEADERS (a INT64[2]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/fixed_list/fail_conversion2.csv" RETURN *; +-STATEMENT LOAD WITH HEADERS (a INT64[2]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/fixed_list/error_conversion2.csv" RETURN *; ---- error Conversion exception: Cast failed. [4324, 432] fewrew is not in INT64[2] range. -STATEMENT LOAD WITH HEADERS (fixedList INT64[0]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/fixed_list/zero_ele.csv" RETURN *; @@ -151,3 +162,9 @@ Conversion exception: Cast failed. NULL is not allowed for FIXEDLIST. -STATEMENT LOAD WITH HEADERS (fixedList INT64[2]) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/fixed_list/fixed_list_null2.csv" RETURN *; ---- error Conversion exception: Cast failed. NULL is not allowed for FIXEDLIST. +-STATEMENT LOAD WITH HEADERS (a UNION(v1 INT64, v2 STRING)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/copy-fault-tests/invalid-utf8/invalid-utf8.csv" RETURN *; +---- error +Copy exception: Invalid UTF8-encoded string. +-STATEMENT LOAD WITH HEADERS (a UNION(v1 INT64, v2 INT32)) FROM "${KUZU_ROOT_DIRECTORY}/dataset/load-from-test/union/union_error.csv" RETURN *; +---- error +Conversion exception: Could not convert to union type UNION(v1:INT64, v2:INT32): fdsaf.