From 9021bd3cf5fa1abf89e1f297d9e0e0de26ac3fea Mon Sep 17 00:00:00 2001 From: John Ed Quinn Date: Thu, 11 Jul 2024 15:34:32 -0700 Subject: [PATCH] Fixes CASE-WHEN conformance tests Handles permissive mode in branch condition --- .../src/main/kotlin/org/partiql/eval/internal/Compiler.kt | 2 +- .../org/partiql/eval/internal/operator/rex/ExprCallStatic.kt | 2 ++ .../org/partiql/eval/internal/PartiQLEngineDefaultTest.kt | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/partiql-eval/src/main/kotlin/org/partiql/eval/internal/Compiler.kt b/partiql-eval/src/main/kotlin/org/partiql/eval/internal/Compiler.kt index 8c95fb0784..d4bc1356c0 100644 --- a/partiql-eval/src/main/kotlin/org/partiql/eval/internal/Compiler.kt +++ b/partiql-eval/src/main/kotlin/org/partiql/eval/internal/Compiler.kt @@ -372,7 +372,7 @@ internal class Compiler( override fun visitRexOpCase(node: Rex.Op.Case, ctx: PType?): Operator { val branches = node.branches.map { branch -> - visitRex(branch.condition, ctx) to visitRex(branch.rex, ctx) + visitRex(branch.condition, ctx).modeHandled() to visitRex(branch.rex, ctx) } val default = visitRex(node.default, ctx) return ExprCase(branches, default) diff --git a/partiql-eval/src/main/kotlin/org/partiql/eval/internal/operator/rex/ExprCallStatic.kt b/partiql-eval/src/main/kotlin/org/partiql/eval/internal/operator/rex/ExprCallStatic.kt index cfa9347646..6d7e66d545 100644 --- a/partiql-eval/src/main/kotlin/org/partiql/eval/internal/operator/rex/ExprCallStatic.kt +++ b/partiql-eval/src/main/kotlin/org/partiql/eval/internal/operator/rex/ExprCallStatic.kt @@ -1,5 +1,6 @@ package org.partiql.eval.internal.operator.rex +import org.partiql.errors.TypeCheckException import org.partiql.eval.internal.Environment import org.partiql.eval.internal.operator.Operator import org.partiql.eval.value.Datum @@ -23,6 +24,7 @@ internal class ExprCallStatic( val args = inputs.map { input -> val r = input.eval(env) if (r.isNull && fn.signature.isNullCall) return nil.invoke() + if (r.isMissing && fn.signature.isMissingCall) throw TypeCheckException() r.toPartiQLValue() }.toTypedArray() return Datum.of(fn.invoke(args)) diff --git a/partiql-eval/src/test/kotlin/org/partiql/eval/internal/PartiQLEngineDefaultTest.kt b/partiql-eval/src/test/kotlin/org/partiql/eval/internal/PartiQLEngineDefaultTest.kt index b5049d0aed..b42380276f 100644 --- a/partiql-eval/src/test/kotlin/org/partiql/eval/internal/PartiQLEngineDefaultTest.kt +++ b/partiql-eval/src/test/kotlin/org/partiql/eval/internal/PartiQLEngineDefaultTest.kt @@ -1218,6 +1218,7 @@ class PartiQLEngineDefaultTest { } @Test + @Disabled fun developmentTest() { val tc = SuccessTestCase( input = """