Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion common/src/main/java/io/druid/common/utils/StringUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
*/
public class StringUtils extends com.metamx.common.StringUtils
{
public static final String EMPTY = "";
private static final byte[] EMPTY_BYTES = new byte[0];

// should be used only for estimation
// returns the same result with StringUtils.fromUtf8(value).length for valid string values
Expand All @@ -46,4 +46,9 @@ public static int estimatedBinaryLengthAsUTF8(String value)
}
return length;
}

public static byte[] toUtf8WithNullToEmpty(final String string)
{
return string == null ? EMPTY_BYTES : toUtf8(string);
}
}
56 changes: 30 additions & 26 deletions common/src/main/java/io/druid/math/expr/Expr.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,17 @@
import com.google.common.math.LongMath;

import java.util.List;
import java.util.Map;

/**
*/
public interface Expr
{
Number eval(Map<String, Number> bindings);
Number eval(NumericBinding bindings);

interface NumericBinding
{
Number get(String name);
}
}

class LongExpr implements Expr
Expand All @@ -47,7 +51,7 @@ public String toString()
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
return value;
}
Expand All @@ -69,7 +73,7 @@ public String toString()
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
return value;
}
Expand All @@ -91,7 +95,7 @@ public String toString()
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number val = bindings.get(value);
if (val == null) {
Expand All @@ -104,8 +108,8 @@ public Number eval(Map<String, Number> bindings)

class FunctionExpr implements Expr
{
private final String name;
private final List<Expr> args;
final String name;
final List<Expr> args;

public FunctionExpr(String name, List<Expr> args)
{
Expand All @@ -120,23 +124,23 @@ public String toString()
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
return Parser.func.get(name.toLowerCase()).apply(args, bindings);
}
}

class UnaryMinusExpr implements Expr
{
private final Expr expr;
final Expr expr;

UnaryMinusExpr(Expr expr)
{
this.expr = expr;
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number valObj = expr.eval(bindings);
if (valObj instanceof Long) {
Expand All @@ -155,15 +159,15 @@ public String toString()

class UnaryNotExpr implements Expr
{
private final Expr expr;
final Expr expr;

UnaryNotExpr(Expr expr)
{
this.expr = expr;
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number valObj = expr.eval(bindings);
return valObj.doubleValue() > 0 ? 0.0d : 1.0d;
Expand Down Expand Up @@ -210,7 +214,7 @@ class BinMinusExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -231,7 +235,7 @@ class BinPowExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -252,7 +256,7 @@ class BinMulExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -273,7 +277,7 @@ class BinDivExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -294,7 +298,7 @@ class BinModuloExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -315,7 +319,7 @@ class BinPlusExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -336,7 +340,7 @@ class BinLtExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -357,7 +361,7 @@ class BinLeqExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -378,7 +382,7 @@ class BinGtExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -399,7 +403,7 @@ class BinGeqExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -420,7 +424,7 @@ class BinEqExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -441,7 +445,7 @@ class BinNeqExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand All @@ -462,7 +466,7 @@ class BinAndExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand Down Expand Up @@ -495,7 +499,7 @@ class BinOrExpr extends BinaryOpExprBase
}

@Override
public Number eval(Map<String, Number> bindings)
public Number eval(NumericBinding bindings)
{
Number leftVal = left.eval(bindings);
Number rightVal = right.eval(bindings);
Expand Down
9 changes: 4 additions & 5 deletions common/src/main/java/io/druid/math/expr/Function.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,19 @@
package io.druid.math.expr;

import java.util.List;
import java.util.Map;

/**
*/
interface Function
{
String name();

Number apply(List<Expr> args, Map<String, Number> bindings);
Number apply(List<Expr> args, Expr.NumericBinding bindings);

abstract class SingleParam implements Function
{
@Override
public Number apply(List<Expr> args, Map<String, Number> bindings)
public Number apply(List<Expr> args, Expr.NumericBinding bindings)
{
if (args.size() != 1) {
throw new RuntimeException("function '" + name() + "' needs 1 argument");
Expand All @@ -48,7 +47,7 @@ public Number apply(List<Expr> args, Map<String, Number> bindings)
abstract class DoubleParam implements Function
{
@Override
public Number apply(List<Expr> args, Map<String, Number> bindings)
public Number apply(List<Expr> args, Expr.NumericBinding bindings)
{
if (args.size() != 2) {
throw new RuntimeException("function '" + name() + "' needs 1 argument");
Expand Down Expand Up @@ -616,7 +615,7 @@ public String name()
}

@Override
public Number apply(List<Expr> args, Map<String, Number> bindings)
public Number apply(List<Expr> args, Expr.NumericBinding bindings)
{
if (args.size() != 3) {
throw new RuntimeException("function 'if' needs 3 argument");
Expand Down
Loading