Explorar o código

HPCC-16993 Fix invalid code generation converting varstrings to utf8

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday %!s(int64=8) %!d(string=hai) anos
pai
achega
2ec5d710dd
Modificáronse 2 ficheiros con 40 adicións e 1 borrados
  1. 0 1
      ecl/hqlcpp/hqlcpp.cpp
  2. 40 0
      ecl/regress/issue16993.ecl

+ 0 - 1
ecl/hqlcpp/hqlcpp.cpp

@@ -11352,7 +11352,6 @@ void HqlCppTranslator::assignCastUnknownLength(BuildCtx & ctx, const CHqlBoundTa
                     break;
                 case type_string:
                 case type_data:
-                case type_varstring:
                     funcName = codepageToUtf8XId;
                     codepageParam = createConstant(from->queryCharset()->queryCodepageName());
                     pure.expr.setown(createValue(no_typetransfer, makeStringType(from->getStringLen(), NULL, NULL), LINK(pure.expr)));

+ 40 - 0
ecl/regress/issue16993.ecl

@@ -0,0 +1,40 @@
+Put(filePath, rec) := FUNCTIONMACRO
+    IMPORT Std;
+    LOCAL recStr := '{' + (STRING)TOJSON(rec) + '}';
+    RETURN Std.File.SetFileDescription(filePath, recStr);
+ENDMACRO;
+
+Get_Bad(filePath, recLayout) := FUNCTIONMACRO
+    IMPORT Std;
+    LOCAL desc := Std.File.GetFileDescription(filePath);
+    RETURN FROMJSON
+        (
+            recLayout,
+            desc,
+            ONFAIL(TRANSFORM(recLayout, SELF := []))
+        );
+ENDMACRO;
+
+Get_Good(filePath, recLayout) := FUNCTIONMACRO
+    IMPORT Std;
+    LOCAL desc := Std.File.GetFileDescription(filePath);
+    LOCAL Convert(STRING j) := FROMJSON
+        (
+            recLayout,
+            j,
+            ONFAIL(TRANSFORM(recLayout, SELF := []))
+        );
+    RETURN Convert(desc);
+ENDMACRO;
+
+//------------------------------------------------------
+
+PATH := '~some_existing_file_path';
+DataLayout := {UNSIGNED4 n};
+
+// Insert rec into description
+Put(PATH, ROW({1000}, DataLayout));
+
+// Extract rec
+// OUTPUT(Get_Good(PATH, DataLayout));
+OUTPUT(Get_Bad(PATH, DataLayout));