From 464d372e8f95b4a56d54957d32f2c5c5641a4c39 Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Wed, 1 Nov 2023 20:02:04 +0000 Subject: validate for array/wset attributes, take 2: * ensure attribute(arrayfield).count does not trigger validation * log warning via deploylogger instead of throwing exception --- .../RankingExpressionTypeResolverTestCase.java | 48 ++++++++++++++++++++++ .../schema/processing/TensorTransformTestCase.java | 4 +- 2 files changed, 50 insertions(+), 2 deletions(-) (limited to 'config-model/src/test/java') diff --git a/config-model/src/test/java/com/yahoo/schema/processing/RankingExpressionTypeResolverTestCase.java b/config-model/src/test/java/com/yahoo/schema/processing/RankingExpressionTypeResolverTestCase.java index 037c5c31334..e8754b07921 100644 --- a/config-model/src/test/java/com/yahoo/schema/processing/RankingExpressionTypeResolverTestCase.java +++ b/config-model/src/test/java/com/yahoo/schema/processing/RankingExpressionTypeResolverTestCase.java @@ -458,6 +458,54 @@ public class RankingExpressionTypeResolverTestCase { message); } + @Test + void requireThatUsingArrayWarns() throws Exception { + InspectableDeployLogger logger = new InspectableDeployLogger(); + ApplicationBuilder builder = new ApplicationBuilder(logger); + builder.addSchema(joinLines( + "search test {", + " document test { ", + " field foo type array {", + " indexing: attribute", + " }", + " }", + " rank-profile my_rank_profile {", + " first-phase {", + " expression: map(attribute(foo), f(x)(42*x))", + " }", + " }", + "}" + )); + builder.build(true); + String message = logger.findMessage("collection"); + assertNotNull(message); + assertEquals("WARNING: Using attribute(foo) collectiontype: ARRAY as ranking expression input", message); + } + + @Test + void requireThatUsingWsetWarns() throws Exception { + InspectableDeployLogger logger = new InspectableDeployLogger(); + ApplicationBuilder builder = new ApplicationBuilder(logger); + builder.addSchema(joinLines( + "search test {", + " document test { ", + " field foo type weightedset {", + " indexing: attribute", + " }", + " }", + " rank-profile my_rank_profile {", + " first-phase {", + " expression: attribute(foo)", + " }", + " }", + "}" + )); + builder.build(true); + String message = logger.findMessage("collection"); + assertNotNull(message); + assertEquals("WARNING: Using attribute(foo) collectiontype: WEIGHTEDSET as ranking expression input", message); + } + @Test void noWarningWhenUsingTensorsWhenQueryFeaturesAreDeclared() throws Exception { InspectableDeployLogger logger = new InspectableDeployLogger(); diff --git a/config-model/src/test/java/com/yahoo/schema/processing/TensorTransformTestCase.java b/config-model/src/test/java/com/yahoo/schema/processing/TensorTransformTestCase.java index 58a0b54e6cc..1e1fdf67734 100644 --- a/config-model/src/test/java/com/yahoo/schema/processing/TensorTransformTestCase.java +++ b/config-model/src/test/java/com/yahoo/schema/processing/TensorTransformTestCase.java @@ -35,8 +35,8 @@ public class TensorTransformTestCase extends AbstractSchemaTestCase { "max(1.0,2.0)"); assertTransformedExpression("min(attribute(double_field),x)", "min(attribute(double_field),x)"); - assertTransformedExpression("max(attribute(double_field),attribute(double_array_field))", - "max(attribute(double_field),attribute(double_array_field))"); + assertTransformedExpression("max(attribute(double_field),attribute(double_array_field).count)", + "max(attribute(double_field),attribute(double_array_field).count)"); assertTransformedExpression("min(attribute(tensor_field_1),attribute(double_field))", "min(attribute(tensor_field_1),attribute(double_field))"); assertTransformedExpression("reduce(max(attribute(tensor_field_1),attribute(tensor_field_2)),sum)", -- cgit v1.2.3 From a946b12ff2a04cf2152a5b98cf0ed9c3ca542fba Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Thu, 2 Nov 2023 14:55:26 +0000 Subject: explain consequences in the warning --- config-model/src/main/java/com/yahoo/schema/RankProfile.java | 2 +- .../schema/processing/RankingExpressionTypeResolverTestCase.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'config-model/src/test/java') diff --git a/config-model/src/main/java/com/yahoo/schema/RankProfile.java b/config-model/src/main/java/com/yahoo/schema/RankProfile.java index 3d64252f56a..502b054f84e 100644 --- a/config-model/src/main/java/com/yahoo/schema/RankProfile.java +++ b/config-model/src/main/java/com/yahoo/schema/RankProfile.java @@ -1278,7 +1278,7 @@ public class RankProfile implements Cloneable { } private void warnOnce() { if (shouldWarn) { - deployLogger.log(Level.WARNING, "Using attribute(" + attr +") " + collType + " as ranking expression input"); + deployLogger.log(Level.WARNING, "Using attribute(" + attr +") " + collType + " in ranking expression will always evaluate to 0.0"); shouldWarn = false; } } diff --git a/config-model/src/test/java/com/yahoo/schema/processing/RankingExpressionTypeResolverTestCase.java b/config-model/src/test/java/com/yahoo/schema/processing/RankingExpressionTypeResolverTestCase.java index e8754b07921..e1f3aea3525 100644 --- a/config-model/src/test/java/com/yahoo/schema/processing/RankingExpressionTypeResolverTestCase.java +++ b/config-model/src/test/java/com/yahoo/schema/processing/RankingExpressionTypeResolverTestCase.java @@ -479,7 +479,7 @@ public class RankingExpressionTypeResolverTestCase { builder.build(true); String message = logger.findMessage("collection"); assertNotNull(message); - assertEquals("WARNING: Using attribute(foo) collectiontype: ARRAY as ranking expression input", message); + assertEquals("WARNING: Using attribute(foo) collectiontype: ARRAY in ranking expression will always evaluate to 0.0", message); } @Test @@ -503,7 +503,7 @@ public class RankingExpressionTypeResolverTestCase { builder.build(true); String message = logger.findMessage("collection"); assertNotNull(message); - assertEquals("WARNING: Using attribute(foo) collectiontype: WEIGHTEDSET as ranking expression input", message); + assertEquals("WARNING: Using attribute(foo) collectiontype: WEIGHTEDSET in ranking expression will always evaluate to 0.0", message); } @Test -- cgit v1.2.3