aboutsummaryrefslogtreecommitdiff
path: root/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoCompareFunctionProcessor.java
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoCompareFunctionProcessor.java')
-rw-r--r--contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoCompareFunctionProcessor.java13
1 files changed, 11 insertions, 2 deletions
diff --git a/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoCompareFunctionProcessor.java b/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoCompareFunctionProcessor.java
index 130ea0f06..b12887d7c 100644
--- a/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoCompareFunctionProcessor.java
+++ b/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoCompareFunctionProcessor.java
@@ -30,6 +30,7 @@ import org.apache.drill.common.expression.ValueExpressions.IntExpression;
import org.apache.drill.common.expression.ValueExpressions.LongExpression;
import org.apache.drill.common.expression.ValueExpressions.QuotedString;
import org.apache.drill.common.expression.ValueExpressions.TimeExpression;
+import org.apache.drill.common.expression.ValueExpressions.VarDecimalExpression;
import org.apache.drill.common.expression.visitors.AbstractExprVisitor;
import com.google.common.collect.ImmutableMap;
@@ -110,7 +111,7 @@ public class MongoCompareFunctionProcessor extends
@Override
public Boolean visitConvertExpression(ConvertExpression e,
LogicalExpression valueArg) throws RuntimeException {
- if (e.getConvertFunction() == ConvertExpression.CONVERT_FROM
+ if (ConvertExpression.CONVERT_FROM.equals(e.getConvertFunction())
&& e.getInput() instanceof SchemaPath) {
String encodingType = e.getEncodingType();
switch (encodingType) {
@@ -219,6 +220,14 @@ public class MongoCompareFunctionProcessor extends
return true;
}
+ // Mongo does not support decimals, therefore double value is used.
+ // See list of supported types in BsonValueCodecProvider.
+ if (valueArg instanceof VarDecimalExpression) {
+ this.value = ((VarDecimalExpression) valueArg).getBigDecimal().doubleValue();
+ this.path = path;
+ return true;
+ }
+
return false;
}
@@ -230,7 +239,7 @@ public class MongoCompareFunctionProcessor extends
.add(DateExpression.class).add(DoubleExpression.class)
.add(FloatExpression.class).add(IntExpression.class)
.add(LongExpression.class).add(QuotedString.class)
- .add(TimeExpression.class).build();
+ .add(TimeExpression.class).add(VarDecimalExpression.class).build();
}
private static final ImmutableMap<String, String> COMPARE_FUNCTIONS_TRANSPOSE_MAP;