From 00dfb4ad229dcc07e00c5909166a49cc372f9bee Mon Sep 17 00:00:00 2001 From: Abhilash Kuhikar Date: Tue, 28 Sep 2021 17:04:34 -0700 Subject: [PATCH 1/4] Fixes structs to handle non-text struct fields. --- lang/src/org/partiql/lang/errors/ErrorCode.kt | 5 +++ .../partiql/lang/eval/EvaluatingCompiler.kt | 21 +++++++++++- .../eval/EvaluatingCompilerExceptionsTest.kt | 33 +++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/lang/src/org/partiql/lang/errors/ErrorCode.kt b/lang/src/org/partiql/lang/errors/ErrorCode.kt index 31b8eaa523..38708f1b5b 100644 --- a/lang/src/org/partiql/lang/errors/ErrorCode.kt +++ b/lang/src/org/partiql/lang/errors/ErrorCode.kt @@ -649,6 +649,11 @@ enum class ErrorCode(private val category: ErrorCategory, "LIMIT value must be an integer but found ${errorContext.getProperty(Property.ACTUAL_TYPE)}}" }, + EVALUATOR_NON_TEXT_STRUCT_FIELD ( + ErrorCategory.EVALUATOR, + LOCATION, + "Struct field should be text."), + EVALUATOR_NEGATIVE_LIMIT( ErrorCategory.EVALUATOR, LOCATION, diff --git a/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt b/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt index 55899da1dc..ebb02d6768 100644 --- a/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt +++ b/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt @@ -868,11 +868,30 @@ internal class EvaluatingCompiler( val fieldThunks = fields.map { val (nameExpr, valueExpr) = it + if (nameExpr is Literal && !nameExpr.ionValue.isText) { + // Compile time error. Fail before the StructFieldThunks are evaluated. + err("Found struct field to be of type ${nameExpr.ionValue.type}", + ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, + errorContextFrom(nameExpr.metas.sourceLocationMeta), + internal = false + ) + } StructFieldThunks(compileExprNode(nameExpr), compileExprNode(valueExpr)) } return thunkFactory.thunkEnv(metas) { env -> - val seq = fieldThunks.map { it.valueThunk(env).namedValue(it.nameThunk(env)) }.asSequence() + val seq = fieldThunks.map { + val nameValue = it.nameThunk(env) + if (!nameValue.type.isText) { + // Evaluation time error where variable reference might be evaluated to non-text struct field. + err("Found struct field to be of type ${nameValue.type}", + ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, + errorContextFrom(metas.sourceLocationMeta), + internal = false + ) + } + it.valueThunk(env).namedValue(nameValue) + }.asSequence() createStructExprValue(seq, StructOrdering.ORDERED) } } diff --git a/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt b/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt index 11747d1f66..aa98c98ad5 100644 --- a/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt +++ b/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt @@ -242,4 +242,37 @@ class EvaluatingCompilerExceptionsTest : EvaluatorTestBase() { Property.COLUMN_NUMBER to 11L, Property.BINDING_NAME to "leading") ) + + @Test + fun intAsNonTextStructField() = + checkInputThrowingEvaluationException( + "{'apple' : 1, `banana` : 2, 1 : 3}", + ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, + mapOf( + Property.LINE_NUMBER to 1L, + Property.COLUMN_NUMBER to 29L + ) + ) + + @Test + fun timestampAsNonTextStructField() = + checkInputThrowingEvaluationException( + "{`2007-02-23T12:14Z` : 3}", + ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, + mapOf( + Property.LINE_NUMBER to 1L, + Property.COLUMN_NUMBER to 2L + ) + ) + + @Test + fun variableReferenceToIntAsNonTextStructField() = + checkInputThrowingEvaluationException( + "SELECT {a : 2} FROM {'a' : 1}", + ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, + mapOf( + Property.LINE_NUMBER to 1L, + Property.COLUMN_NUMBER to 8L + ) + ) } From 764fc554809517ad57c94f6f1c60f6f947d9c4cb Mon Sep 17 00:00:00 2001 From: Abhilash Kuhikar Date: Thu, 30 Sep 2021 15:46:57 -0700 Subject: [PATCH 2/4] Adds Semantic error. --- lang/src/org/partiql/lang/errors/ErrorCode.kt | 5 ++++ .../partiql/lang/eval/EvaluatingCompiler.kt | 8 ------ .../visitors/PartiqlAstSanityValidator.kt | 13 +++++++++ .../eval/EvaluatingCompilerExceptionsTest.kt | 22 --------------- lang/test/org/partiql/lang/eval/ScratchPad.kt | 8 ++++++ .../PartiqlAstSanityValidatorTests.kt | 28 +++++++++++++++++++ 6 files changed, 54 insertions(+), 30 deletions(-) create mode 100644 lang/test/org/partiql/lang/eval/ScratchPad.kt diff --git a/lang/src/org/partiql/lang/errors/ErrorCode.kt b/lang/src/org/partiql/lang/errors/ErrorCode.kt index 38708f1b5b..04fee1c941 100644 --- a/lang/src/org/partiql/lang/errors/ErrorCode.kt +++ b/lang/src/org/partiql/lang/errors/ErrorCode.kt @@ -669,6 +669,11 @@ enum class ErrorCode(private val category: ErrorCategory, LOCATION, "% by zero"), + SEMANTIC_NON_TEXT_STRUCT_FIELD ( + ErrorCategory.SEMANTIC, + LOCATION, + "Struct field should be text."), + SEMANTIC_ILLEGAL_GLOBAL_VARIABLE_ACCESS( ErrorCategory.SEMANTIC, LOCATION + setOf(Property.BINDING_NAME), diff --git a/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt b/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt index ebb02d6768..dcac384845 100644 --- a/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt +++ b/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt @@ -868,14 +868,6 @@ internal class EvaluatingCompiler( val fieldThunks = fields.map { val (nameExpr, valueExpr) = it - if (nameExpr is Literal && !nameExpr.ionValue.isText) { - // Compile time error. Fail before the StructFieldThunks are evaluated. - err("Found struct field to be of type ${nameExpr.ionValue.type}", - ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, - errorContextFrom(nameExpr.metas.sourceLocationMeta), - internal = false - ) - } StructFieldThunks(compileExprNode(nameExpr), compileExprNode(valueExpr)) } diff --git a/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt b/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt index 74f067356d..da48457016 100644 --- a/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt +++ b/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt @@ -17,6 +17,7 @@ package org.partiql.lang.eval.visitors import com.amazon.ionelement.api.IntElement import com.amazon.ionelement.api.IntElementSize +import com.amazon.ionelement.api.TextElement import org.partiql.lang.ast.IsCountStarMeta import org.partiql.lang.ast.passes.SemanticException import org.partiql.lang.domains.PartiqlAst @@ -98,4 +99,16 @@ object PartiqlAstSanityValidator : PartiqlAst.Visitor() { PropertyValueMap().addSourceLocation(metas)) } } + + override fun visitExprStruct(node: PartiqlAst.Expr.Struct) { + node.fields.forEach { field -> + if (field.first is PartiqlAst.Expr.Lit && field.first.value !is TextElement) { + throw SemanticException( + "Found struct field to be of type ${field.first.value.type}", + ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD, + PropertyValueMap().addSourceLocation(field.first.metas) + ) + } + } + } } diff --git a/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt b/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt index aa98c98ad5..d08691debb 100644 --- a/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt +++ b/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt @@ -243,28 +243,6 @@ class EvaluatingCompilerExceptionsTest : EvaluatorTestBase() { Property.BINDING_NAME to "leading") ) - @Test - fun intAsNonTextStructField() = - checkInputThrowingEvaluationException( - "{'apple' : 1, `banana` : 2, 1 : 3}", - ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, - mapOf( - Property.LINE_NUMBER to 1L, - Property.COLUMN_NUMBER to 29L - ) - ) - - @Test - fun timestampAsNonTextStructField() = - checkInputThrowingEvaluationException( - "{`2007-02-23T12:14Z` : 3}", - ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, - mapOf( - Property.LINE_NUMBER to 1L, - Property.COLUMN_NUMBER to 2L - ) - ) - @Test fun variableReferenceToIntAsNonTextStructField() = checkInputThrowingEvaluationException( diff --git a/lang/test/org/partiql/lang/eval/ScratchPad.kt b/lang/test/org/partiql/lang/eval/ScratchPad.kt new file mode 100644 index 0000000000..dbbbb6aa16 --- /dev/null +++ b/lang/test/org/partiql/lang/eval/ScratchPad.kt @@ -0,0 +1,8 @@ +package org.partiql.lang.eval + +import com.amazon.ion.Timestamp +import org.junit.Test +import java.time.ZoneOffset + +class ScratchPad : EvaluatorTestBase() { +} \ No newline at end of file diff --git a/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt b/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt index 602a7ddd56..51c9f32a75 100644 --- a/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt +++ b/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt @@ -14,6 +14,7 @@ package org.partiql.lang.eval.visitors +import com.amazon.ionelement.api.ionTimestamp import com.amazon.ionelement.api.toIonElement import org.junit.Test import org.partiql.lang.TestBase @@ -233,4 +234,31 @@ class PartiqlAstSanityValidatorTests : TestBase() { ) } } + + @Test + fun intAsNonTextStructKey() { + assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD) { + PartiqlAstSanityValidator.validate( + PartiqlAst.build { + query( + struct(exprPair(litInt(1), litInt(2))) + ) + } + ) + } + } + + @Test + fun timeAsNonTextStructKey() { + assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD) { + PartiqlAstSanityValidator.validate( + PartiqlAst.build { + query( + struct(exprPair(lit(ionTimestamp("2007-02-23T12:14:33.079-08:00")), litInt(2))) + ) + } + ) + } + } + } From c61591205736185a2d713b32d6f52905814136b5 Mon Sep 17 00:00:00 2001 From: Abhilash Kuhikar Date: Tue, 5 Oct 2021 10:13:32 -0700 Subject: [PATCH 3/4] Addresses comments. --- lang/src/org/partiql/lang/errors/ErrorCode.kt | 18 ++++++++---- .../partiql/lang/eval/EvaluatingCompiler.kt | 6 ++-- .../visitors/PartiqlAstSanityValidator.kt | 12 ++++++-- .../eval/EvaluatingCompilerExceptionsTest.kt | 3 +- .../PartiqlAstSanityValidatorTests.kt | 29 ++++++++++++++++++- 5 files changed, 55 insertions(+), 13 deletions(-) diff --git a/lang/src/org/partiql/lang/errors/ErrorCode.kt b/lang/src/org/partiql/lang/errors/ErrorCode.kt index 04fee1c941..7eac717af7 100644 --- a/lang/src/org/partiql/lang/errors/ErrorCode.kt +++ b/lang/src/org/partiql/lang/errors/ErrorCode.kt @@ -641,7 +641,7 @@ enum class ErrorCode(private val category: ErrorCategory, "escape char = ${errorContext?.get(Property.LIKE_ESCAPE)?.stringValue() ?: "none given"}" }, - EVALUATOR_NON_INT_LIMIT_VALUE ( + EVALUATOR_NON_INT_LIMIT_VALUE( ErrorCategory.EVALUATOR, LOCATION + setOf(Property.ACTUAL_TYPE), "") { @@ -649,10 +649,13 @@ enum class ErrorCode(private val category: ErrorCategory, "LIMIT value must be an integer but found ${errorContext.getProperty(Property.ACTUAL_TYPE)}}" }, - EVALUATOR_NON_TEXT_STRUCT_FIELD ( + EVALUATOR_NON_TEXT_STRUCT_FIELD( ErrorCategory.EVALUATOR, - LOCATION, - "Struct field should be text."), + LOCATION + setOf(Property.ACTUAL_TYPE), + "") { + override fun getErrorMessage(errorContext: PropertyValueMap?): String = + "Struct field key should be text but found ${errorContext.getProperty(Property.ACTUAL_TYPE)}}." + }, EVALUATOR_NEGATIVE_LIMIT( ErrorCategory.EVALUATOR, @@ -671,8 +674,11 @@ enum class ErrorCode(private val category: ErrorCategory, SEMANTIC_NON_TEXT_STRUCT_FIELD ( ErrorCategory.SEMANTIC, - LOCATION, - "Struct field should be text."), + LOCATION + setOf(Property.ACTUAL_TYPE), + "") { + override fun getErrorMessage(errorContext: PropertyValueMap?): String = + "Struct field key should be text but found ${errorContext.getProperty(Property.ACTUAL_TYPE)}}." + }, SEMANTIC_ILLEGAL_GLOBAL_VARIABLE_ACCESS( ErrorCategory.SEMANTIC, diff --git a/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt b/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt index dcac384845..df0620a477 100644 --- a/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt +++ b/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt @@ -876,9 +876,11 @@ internal class EvaluatingCompiler( val nameValue = it.nameThunk(env) if (!nameValue.type.isText) { // Evaluation time error where variable reference might be evaluated to non-text struct field. - err("Found struct field to be of type ${nameValue.type}", + err("Found struct field key to be of type ${nameValue.type}", ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, - errorContextFrom(metas.sourceLocationMeta), + errorContextFrom(metas.sourceLocationMeta).also { pvm -> + pvm[Property.ACTUAL_TYPE] = nameValue.type.toString() + }, internal = false ) } diff --git a/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt b/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt index da48457016..0f3d4bb1a4 100644 --- a/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt +++ b/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt @@ -102,11 +102,17 @@ object PartiqlAstSanityValidator : PartiqlAst.Visitor() { override fun visitExprStruct(node: PartiqlAst.Expr.Struct) { node.fields.forEach { field -> - if (field.first is PartiqlAst.Expr.Lit && field.first.value !is TextElement) { + if (field.first is PartiqlAst.Expr.Missing || (field.first is PartiqlAst.Expr.Lit && field.first.value !is TextElement)) { + val type = when (field.first) { + is PartiqlAst.Expr.Lit -> field.first.value.type.toString() + else -> "MISSING" + } throw SemanticException( - "Found struct field to be of type ${field.first.value.type}", + "Found struct field to be of type $type", ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD, - PropertyValueMap().addSourceLocation(field.first.metas) + PropertyValueMap().addSourceLocation(field.first.metas).also { pvm -> + pvm[Property.ACTUAL_TYPE] = type + } ) } } diff --git a/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt b/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt index d08691debb..fdb04b8c5e 100644 --- a/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt +++ b/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt @@ -250,7 +250,8 @@ class EvaluatingCompilerExceptionsTest : EvaluatorTestBase() { ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, mapOf( Property.LINE_NUMBER to 1L, - Property.COLUMN_NUMBER to 8L + Property.COLUMN_NUMBER to 8L, + Property.ACTUAL_TYPE to "INT" ) ) } diff --git a/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt b/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt index 51c9f32a75..015510aebd 100644 --- a/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt +++ b/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt @@ -23,6 +23,8 @@ import org.partiql.lang.errors.ErrorCode class PartiqlAstSanityValidatorTests : TestBase() { private fun litInt(value: Int) = PartiqlAst.build { lit(ion.newInt(value).toIonElement()) } + private val litNull = PartiqlAst.build { lit(ion.newNull().toIonElement()) } + private val missingExpr = PartiqlAst.build { missing() } @Test fun groupPartial() { @@ -249,7 +251,7 @@ class PartiqlAstSanityValidatorTests : TestBase() { } @Test - fun timeAsNonTextStructKey() { + fun timestampAsNonTextStructKey() { assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD) { PartiqlAstSanityValidator.validate( PartiqlAst.build { @@ -261,4 +263,29 @@ class PartiqlAstSanityValidatorTests : TestBase() { } } + @Test + fun nullAsNonTextStructKey() { + assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD) { + PartiqlAstSanityValidator.validate( + PartiqlAst.build { + query( + struct(exprPair(litNull, litInt(2))) + ) + } + ) + } + } + + @Test + fun missingAsNonTextStructKey() { + assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD) { + PartiqlAstSanityValidator.validate( + PartiqlAst.build { + query( + struct(exprPair(missingExpr, litInt(2))) + ) + } + ) + } + } } From 87fdb5f3fef65c771c4e72bc038d2ff6ca03efdb Mon Sep 17 00:00:00 2001 From: Abhilash Kuhikar Date: Wed, 6 Oct 2021 16:09:30 -0700 Subject: [PATCH 4/4] Minor cleanup --- lang/src/org/partiql/lang/errors/ErrorCode.kt | 4 ++-- lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt | 2 +- .../lang/eval/visitors/PartiqlAstSanityValidator.kt | 2 +- .../partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt | 2 +- lang/test/org/partiql/lang/eval/ScratchPad.kt | 8 -------- .../lang/eval/visitors/PartiqlAstSanityValidatorTests.kt | 8 ++++---- 6 files changed, 9 insertions(+), 17 deletions(-) delete mode 100644 lang/test/org/partiql/lang/eval/ScratchPad.kt diff --git a/lang/src/org/partiql/lang/errors/ErrorCode.kt b/lang/src/org/partiql/lang/errors/ErrorCode.kt index 7eac717af7..c03b6c011d 100644 --- a/lang/src/org/partiql/lang/errors/ErrorCode.kt +++ b/lang/src/org/partiql/lang/errors/ErrorCode.kt @@ -649,7 +649,7 @@ enum class ErrorCode(private val category: ErrorCategory, "LIMIT value must be an integer but found ${errorContext.getProperty(Property.ACTUAL_TYPE)}}" }, - EVALUATOR_NON_TEXT_STRUCT_FIELD( + EVALUATOR_NON_TEXT_STRUCT_FIELD_KEY( ErrorCategory.EVALUATOR, LOCATION + setOf(Property.ACTUAL_TYPE), "") { @@ -672,7 +672,7 @@ enum class ErrorCode(private val category: ErrorCategory, LOCATION, "% by zero"), - SEMANTIC_NON_TEXT_STRUCT_FIELD ( + SEMANTIC_NON_TEXT_STRUCT_FIELD_KEY( ErrorCategory.SEMANTIC, LOCATION + setOf(Property.ACTUAL_TYPE), "") { diff --git a/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt b/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt index df0620a477..309aaa7b05 100644 --- a/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt +++ b/lang/src/org/partiql/lang/eval/EvaluatingCompiler.kt @@ -877,7 +877,7 @@ internal class EvaluatingCompiler( if (!nameValue.type.isText) { // Evaluation time error where variable reference might be evaluated to non-text struct field. err("Found struct field key to be of type ${nameValue.type}", - ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, + ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD_KEY, errorContextFrom(metas.sourceLocationMeta).also { pvm -> pvm[Property.ACTUAL_TYPE] = nameValue.type.toString() }, diff --git a/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt b/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt index 0f3d4bb1a4..7371fd8877 100644 --- a/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt +++ b/lang/src/org/partiql/lang/eval/visitors/PartiqlAstSanityValidator.kt @@ -109,7 +109,7 @@ object PartiqlAstSanityValidator : PartiqlAst.Visitor() { } throw SemanticException( "Found struct field to be of type $type", - ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD, + ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD_KEY, PropertyValueMap().addSourceLocation(field.first.metas).also { pvm -> pvm[Property.ACTUAL_TYPE] = type } diff --git a/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt b/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt index fdb04b8c5e..3f9f8cbe6b 100644 --- a/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt +++ b/lang/test/org/partiql/lang/eval/EvaluatingCompilerExceptionsTest.kt @@ -247,7 +247,7 @@ class EvaluatingCompilerExceptionsTest : EvaluatorTestBase() { fun variableReferenceToIntAsNonTextStructField() = checkInputThrowingEvaluationException( "SELECT {a : 2} FROM {'a' : 1}", - ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD, + ErrorCode.EVALUATOR_NON_TEXT_STRUCT_FIELD_KEY, mapOf( Property.LINE_NUMBER to 1L, Property.COLUMN_NUMBER to 8L, diff --git a/lang/test/org/partiql/lang/eval/ScratchPad.kt b/lang/test/org/partiql/lang/eval/ScratchPad.kt deleted file mode 100644 index dbbbb6aa16..0000000000 --- a/lang/test/org/partiql/lang/eval/ScratchPad.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.partiql.lang.eval - -import com.amazon.ion.Timestamp -import org.junit.Test -import java.time.ZoneOffset - -class ScratchPad : EvaluatorTestBase() { -} \ No newline at end of file diff --git a/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt b/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt index 015510aebd..26e0cadc29 100644 --- a/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt +++ b/lang/test/org/partiql/lang/eval/visitors/PartiqlAstSanityValidatorTests.kt @@ -239,7 +239,7 @@ class PartiqlAstSanityValidatorTests : TestBase() { @Test fun intAsNonTextStructKey() { - assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD) { + assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD_KEY) { PartiqlAstSanityValidator.validate( PartiqlAst.build { query( @@ -252,7 +252,7 @@ class PartiqlAstSanityValidatorTests : TestBase() { @Test fun timestampAsNonTextStructKey() { - assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD) { + assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD_KEY) { PartiqlAstSanityValidator.validate( PartiqlAst.build { query( @@ -265,7 +265,7 @@ class PartiqlAstSanityValidatorTests : TestBase() { @Test fun nullAsNonTextStructKey() { - assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD) { + assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD_KEY) { PartiqlAstSanityValidator.validate( PartiqlAst.build { query( @@ -278,7 +278,7 @@ class PartiqlAstSanityValidatorTests : TestBase() { @Test fun missingAsNonTextStructKey() { - assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD) { + assertThrowsSqlException(ErrorCode.SEMANTIC_NON_TEXT_STRUCT_FIELD_KEY) { PartiqlAstSanityValidator.validate( PartiqlAst.build { query(