private static CalciteUDFInfo getUDFInfo(String hiveUdfName, ImmutableList<RelDataType> calciteArgTypes, RelDataType calciteRetType) { CalciteUDFInfo udfInfo = new CalciteUDFInfo(); udfInfo.udfName = hiveUdfName; udfInfo.returnTypeInference = ReturnTypes.explicit(calciteRetType); udfInfo.operandTypeInference = InferTypes.explicit(calciteArgTypes); ImmutableList.Builder<SqlTypeFamily> typeFamilyBuilder = new ImmutableList.Builder<SqlTypeFamily>(); for (RelDataType at : calciteArgTypes) { typeFamilyBuilder.add(Util.first(at.getSqlTypeName().getFamily(), SqlTypeFamily.ANY)); } udfInfo.operandTypeChecker = OperandTypes.family(typeFamilyBuilder.build()); return udfInfo; }
SqlAggFunction createCustomAggFunction(String funcName, RelDataType returnType, Class<?> customAggFuncClz) { RelDataTypeFactory typeFactory = getCluster().getTypeFactory(); SqlIdentifier sqlIdentifier = new SqlIdentifier(funcName, new SqlParserPos(1, 1)); AggregateFunction aggFunction = AggregateFunctionImpl.create(customAggFuncClz); List<RelDataType> argTypes = new ArrayList<RelDataType>(); List<SqlTypeFamily> typeFamilies = new ArrayList<SqlTypeFamily>(); for (FunctionParameter o : aggFunction.getParameters()) { final RelDataType type = o.getType(typeFactory); argTypes.add(type); typeFamilies.add(Util.first(type.getSqlTypeName().getFamily(), SqlTypeFamily.ANY)); } return new SqlUserDefinedAggFunction(sqlIdentifier, ReturnTypes.explicit(returnType), InferTypes.explicit(argTypes), OperandTypes.family(typeFamilies), aggFunction, false, false, typeFactory); }
private static CalciteUDFInfo getUDFInfo(String hiveUdfName, ImmutableList<RelDataType> calciteArgTypes, RelDataType calciteRetType) { CalciteUDFInfo udfInfo = new CalciteUDFInfo(); udfInfo.udfName = hiveUdfName; udfInfo.returnTypeInference = ReturnTypes.explicit(calciteRetType); udfInfo.operandTypeInference = InferTypes.explicit(calciteArgTypes); ImmutableList.Builder<SqlTypeFamily> typeFamilyBuilder = new ImmutableList.Builder<SqlTypeFamily>(); for (RelDataType at : calciteArgTypes) { typeFamilyBuilder.add(Util.first(at.getSqlTypeName().getFamily(), SqlTypeFamily.ANY)); } udfInfo.operandTypeChecker = OperandTypes.family(typeFamilyBuilder.build()); return udfInfo; }
} else if (SqlTypeName.NUMERIC_TYPES.contains(sqlTypeName)) { return DruidExpression.fromExpression(DruidExpression.numberLiteral((Number) RexLiteral.value(rexNode))); } else if (SqlTypeFamily.INTERVAL_DAY_TIME == sqlTypeName.getFamily()) { } else if (SqlTypeFamily.INTERVAL_YEAR_MONTH == sqlTypeName.getFamily()) {
/** * @return true if type is in SqlTypeFamily.Character */ public static boolean inCharFamily(SqlTypeName typeName) { return typeName.getFamily() == SqlTypeFamily.CHARACTER; }
/** * @return true if type is in SqlTypeFamily.Character */ public static boolean inCharFamily(SqlTypeName typeName) { return typeName.getFamily() == SqlTypeFamily.CHARACTER; }
/** * @return true if type is in SqlTypeFamily.Character */ public static boolean inCharFamily(SqlTypeName typeName) { return typeName.getFamily() == SqlTypeFamily.CHARACTER; }
public RelDataTypeFamily getFamily() { return typeName.getFamily(); }
public RelDataTypeFamily getFamily() { return typeName.getFamily(); }
@Override public int getNumTypeRadix(SqlTypeName typeName) { if (typeName.getFamily() == SqlTypeFamily.NUMERIC && getDefaultPrecision(typeName) != -1) { return 10; } return 0; }
@Override public int getNumTypeRadix(SqlTypeName typeName) { if (typeName.getFamily() == SqlTypeFamily.NUMERIC && getDefaultPrecision(typeName) != -1) { return 10; } return 0; }
@Override public RelDataTypeFamily getFamily() { return getSqlTypeName().getFamily(); } }
@Override public RelDataTypeFamily getFamily() { return getSqlTypeName().getFamily(); }
@Override public RelDataTypeFamily getFamily() { return getSqlTypeName().getFamily(); }
@Override public Boolean visitCall(RexCall call) { if (call.getOperator() == SqlStdOperatorTable.ITEM) { final RexNode op0 = call.getOperands().get(0); final RexNode op1 = call.getOperands().get(1); if (op0 instanceof RexInputRef && op1 instanceof RexLiteral && ((RexLiteral) op1).getTypeName().getFamily() == SqlTypeFamily.CHARACTER) { return true; } else if (op0 instanceof RexCall && op1 instanceof RexLiteral && ((RexLiteral) op1).getTypeName().getFamily() == SqlTypeFamily.CHARACTER) { return op0.accept(this); } } return false; }
protected static RelDataTypeFamily family(RelDataType type) { // REVIEW jvs 2-June-2005: This is needed to keep // the Saffron type system happy. RelDataTypeFamily family = null; if (type.getSqlTypeName() != null) { family = type.getSqlTypeName().getFamily(); } if (family == null) { family = type.getFamily(); } return family; }
protected static RelDataTypeFamily family(RelDataType type) { // REVIEW jvs 2-June-2005: This is needed to keep // the Saffron type system happy. RelDataTypeFamily family = null; if (type.getSqlTypeName() != null) { family = type.getSqlTypeName().getFamily(); } if (family == null) { family = type.getFamily(); } return family; }
@Override public SqlNode toSql(RexProgram program, RexNode rex) { if (rex.getKind() == SqlKind.LITERAL) { final RexLiteral literal = (RexLiteral) rex; if (literal.getTypeName().getFamily() == SqlTypeFamily.CHARACTER) { return new SqlIdentifier(RexLiteral.stringValue(literal), POS); } } return super.toSql(program, rex); } }
@Override public SqlNode toSql(RexProgram program, RexNode rex) { if (rex.getKind() == SqlKind.LITERAL) { final RexLiteral literal = (RexLiteral) rex; if (literal.getTypeName().getFamily() == SqlTypeFamily.CHARACTER) { return new SqlIdentifier(RexLiteral.stringValue(literal), POS); } } return super.toSql(program, rex); } }
private PathSegment convertLiteral(RexLiteral literal) { switch (literal.getType().getSqlTypeName().getFamily()) { case CHARACTER: return new NameSegment(RexLiteral.stringValue(literal)); case NUMERIC: return new ArraySegment(RexLiteral.intValue(literal)); default: return null; } }