@Override public List<?> translate(Function function) { return Arrays.asList("cast(", function.getParameters().get(0), " as int64)", "%", //$NON-NLS-1$ //$NON-NLS-2$ "cast(",function.getParameters().get(1), " as int64)"); } }); //$NON-NLS-1$
@Override public List<?> translate(Function function) { return Arrays.asList(function.getParameters().get(0), " MOD ", function.getParameters().get(1)); //$NON-NLS-1$ } });
@Override public List<?> translate(Function function) { return Arrays.asList("trunc(cast(",function.getParameters().get(0)," AS date))"); //$NON-NLS-1$ //$NON-NLS-2$ } });
@Override public List<?> translate(Function function) { Expression stringValue = function.getParameters().get(0); return Arrays.asList("CASE WHEN ", stringValue, " = 0 THEN 0 WHEN ", stringValue, " IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } }, FunctionModifier.BOOLEAN);
@Override public List<?> translate(Function function) { if (function.getParameters().size() == 1) { function.getParameters().add(new Literal(1, TypeFacility.RUNTIME_TYPES.INTEGER)); } return null; } });
@Override public List<?> translate(Function function) { if (Number.class.isAssignableFrom(function.getParameters().get(0).getType())) { return Arrays.asList("trunc(", function.getParameters().get(0), ")"); //$NON-NLS-1$ //$NON-NLS-2$ } return Arrays.asList("trunc(to_number(", function.getParameters().get(0), "))"); //$NON-NLS-1$ //$NON-NLS-2$ } },
@Override public List<?> translate(Function function) { ArrayList<Object> target = new ArrayList<Object>(); target.add("TRIM(TRAILING FROM ");//$NON-NLS-1$ target.add(function.getParameters().get(0)); target.add(")"); //$NON-NLS-1$ return target; } });
@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; } });
@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) { ((Literal)function.getParameters().get(1)).setValue(INTEGER_TYPE); return null; } }, FunctionModifier.BOOLEAN);
@Override public List<?> translate(Function function) { if (function.getParameters().size() != 3) { return null; } Expression param2 = function.getParameters().get(1); param2 = new Function(SourceSystemFunctions.ADD_OP, Arrays.asList(param2, new Literal(1, TypeFacility.RUNTIME_TYPES.INTEGER)), TypeFacility.RUNTIME_TYPES.INTEGER); function.getParameters().set(1, param2); return null; } });
@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; }
@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))) { return toNChar.translate(function); } return toChar.translate(function); } }, FunctionModifier.STRING);
@Override public List<?> translate(Function function) { Expression ex = function.getParameters().get(0); if (ex.getType() == TypeFacility.RUNTIME_TYPES.DATE || ex.getType() == TypeFacility.RUNTIME_TYPES.TIME || (ex instanceof ColumnReference && "date".equalsIgnoreCase(((ColumnReference)ex).getMetadataObject().getNativeType())) //$NON-NLS-1$ || (!(ex instanceof ColumnReference) && !(ex instanceof Literal) && !(ex instanceof Function))) { ex = ConvertModifier.createConvertFunction(getLanguageFactory(), function.getParameters().get(0), TypeFacility.RUNTIME_NAMES.TIMESTAMP); function.getParameters().set(0, ex); } return super.translate(function); } }
@Override public void visit(Comparison obj) { if (allowImplictConversion(obj)) { Function left = (Function) obj.getLeftExpression(); obj.setLeftExpression(left.getParameters().get(0)); Function right = (Function) obj.getRightExpression(); obj.setRightExpression(right.getParameters().get(0)); } super.visit(obj); }
@Override public List<?> translate(Function function) { Expression trueValue = function.getParameters().get(0); Expression falseValue = trueValue; falseValue = new IsNull(falseValue, true); if (!(trueValue instanceof Predicate)) { trueValue = new Comparison(trueValue, new Literal(Boolean.TRUE, TypeFacility.RUNTIME_TYPES.BOOLEAN), Comparison.Operator.EQ); } return Arrays.asList("CASE WHEN ", trueValue, " THEN 'true' WHEN ", falseValue, " THEN 'false' END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } });
@Test public void testGetParameters() throws Exception { List<Expression> params = example("testFunction").getParameters(); //$NON-NLS-1$ assertNotNull(params); assertEquals(2, params.size()); for (int i = 0; i < params.size(); i++) { assertNotNull(params.get(i)); } }
@Test public void testLongTimestampAddLongExpression() throws Exception { org.teiid.query.sql.symbol.Function ex = (org.teiid.query.sql.symbol.Function)TestFunctionResolving.getExpression("timestampadd(sql_tsi_second, cast(1 as long), now())"); Function f = (Function) TstLanguageBridgeFactory.factory.translate(ex); assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, f.getParameters().get(1).getType()); }
@Test public void testLongTimestampAddLiteral1() throws Exception { org.teiid.query.sql.symbol.Function ex = (org.teiid.query.sql.symbol.Function)TestFunctionResolving.getExpression("timestampadd(sql_tsi_second, 1, now())"); ex.getArgs()[1] = new Constant(1l); Function f = (Function) TstLanguageBridgeFactory.factory.translate(ex); assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, f.getParameters().get(1).getType()); }