@Override public List<?> translate(Function function) { ((Literal)function.getParameters().get(1)).setValue(INTEGER_TYPE); return null; } }, FunctionModifier.BOOLEAN);
@Override public List<?> translate(Function function) { ((Literal)function.getParameters().get(1)).setValue(TINYINT_TYPE); return null; } }, FunctionModifier.BOOLEAN);
@Override public List<?> translate(Function function) { Literal intervalType = (Literal)function.getParameters().get(0); String interval = ((String)intervalType.getValue()).toUpperCase(); if (interval.equals(NonReserved.SQL_TSI_FRAC_SECOND)) { intervalType.setValue("MICROSECOND"); //$NON-NLS-1$ return Arrays.asList(function, " * 1000"); //$NON-NLS-1$ } return null; } });
@Override public List<?> translate(Function function) { if (isNonAscii(function.getParameters().get(0))) { ((Literal)function.getParameters().get(1)).setValue("nchar(1)"); //$NON-NLS-1$ } else { ((Literal)function.getParameters().get(1)).setValue("char(1)"); //$NON-NLS-1$ } return null; } }, FunctionModifier.CHAR);
@Override public List<?> translate(Function function) { if (isNonAscii(function.getParameters().get(0))) { ((Literal)function.getParameters().get(1)).setValue("nvarchar(4000)"); //$NON-NLS-1$ } else { ((Literal)function.getParameters().get(1)).setValue("varchar(4000)"); //$NON-NLS-1$ } return null; } }, FunctionModifier.STRING);
@Override public List<?> translate(Function function) { modify(function); if (format == null) { function.getParameters().remove(1); } else { ((Literal)function.getParameters().get(1)).setValue(format); } return null; }
String newInterval = INTERVAL_MAP.get(interval); if (newInterval != null) { intervalType.setValue(newInterval); } else if (supportsQuarter && interval.equals(NonReserved.SQL_TSI_QUARTER)) { intervalType.setValue("QUARTER"); //$NON-NLS-1$ } else if (add) { if (interval.equals(NonReserved.SQL_TSI_FRAC_SECOND)) { intervalType.setValue("MILLISECOND"); //$NON-NLS-1$ result.add(4, " / 1000000"); //$NON-NLS-1$ } else if (interval.equals(NonReserved.SQL_TSI_QUARTER)) { intervalType.setValue(ExtractFunctionModifier.MONTH); result.add(4, " * 3"); //$NON-NLS-1$ } else { intervalType.setValue(ExtractFunctionModifier.DAY); result.add(4, " * 7"); //$NON-NLS-1$ intervalType.setValue("MILLISECOND"); //$NON-NLS-1$ result.add(" * 1000000"); //$NON-NLS-1$ } else if (interval.equals(NonReserved.SQL_TSI_QUARTER)) { intervalType.setValue(ExtractFunctionModifier.MONTH); result.add(" / 3"); //$NON-NLS-1$ } else { intervalType.setValue(ExtractFunctionModifier.DAY); result.add(" / 7"); //$NON-NLS-1$
@Override public List<?> translate(Function function) { Expression arg = function.getParameters().get(0); if (arg instanceof Literal && ((Literal)arg).getValue() == null) { ((Literal)function.getParameters().get(1)).setValue(this.alias); return null; } return super.translate(function); } }
@Override public List<?> translate(Function function) { Literal intervalType = (Literal)function.getParameters().get(0); String interval = ((String)intervalType.getValue()).toUpperCase(); if (interval.equals(NonReserved.SQL_TSI_FRAC_SECOND)) { intervalType.setValue("MICROSECOND"); //$NON-NLS-1$ Expression[] args = new Expression[] {function.getParameters().get(1), getLanguageFactory().createLiteral(1000, TypeFacility.RUNTIME_TYPES.INTEGER)}; function.getParameters().set(1, getLanguageFactory().createFunction("/", args, TypeFacility.RUNTIME_TYPES.INTEGER)); //$NON-NLS-1$ } return null; } });
((Literal)function.getParameters().get(1)).setValue(type); return null;
private Expression ensurePositiveStartIndex(Expression startIndex) { if (startIndex instanceof Literal) { Literal literal = (Literal)startIndex; if (literal.getValue() instanceof Integer && ((Integer)literal.getValue() < 1)) { literal.setValue(1); } } else { Comparison whenExpr = langFactory.createCompareCriteria( Operator.LT, startIndex, langFactory.createLiteral(1, Integer.class) ); Literal thenExpr = langFactory.createLiteral(1, Integer.class); startIndex = langFactory.createSearchedCaseExpression(Arrays.asList(langFactory.createSearchedWhenCondition(whenExpr, thenExpr)), startIndex, TypeFacility.RUNTIME_TYPES.INTEGER); } return startIndex; }
/** * Adding a specific workaround for just Pheonix and BigDecimal. */ @Override public List<?> translate(LanguageObject obj, ExecutionContext context) { if (obj instanceof SubqueryIn) { SubqueryIn in = (SubqueryIn)obj; return Arrays.asList(new SubqueryComparison(in.getLeftExpression(), in.isNegated()?Operator.NE:Operator.EQ, in.isNegated()?Quantifier.ALL:Quantifier.SOME, in.getSubquery())); } if (!(obj instanceof Literal)) { return super.translate(obj, context); } Literal l = (Literal)obj; if (l.isBindEligible() || l.getType() != TypeFacility.RUNTIME_TYPES.BIG_DECIMAL) { return super.translate(obj, context); } BigDecimal bd = ((BigDecimal)l.getValue()); if (bd.scale() == 0) { l.setValue(bd.setScale(1)); } return null; }