use of com.facebook.presto.sql.tree.SqlParameterDeclaration in project presto by prestodb.
the class TestSqlParser method testCreateFunction.
@Test
public void testCreateFunction() {
assertStatement("CREATE FUNCTION tan (x double)\n" + "RETURNS double\n" + "COMMENT 'tangent trigonometric function'\n" + "LANGUAGE SQL\n" + "DETERMINISTIC\n" + "RETURNS NULL ON NULL INPUT\n" + "RETURN sin(x) / cos(x)", new CreateFunction(QualifiedName.of("tan"), false, false, ImmutableList.of(new SqlParameterDeclaration(identifier("x"), "double")), "double", Optional.of("tangent trigonometric function"), new RoutineCharacteristics(SQL, DETERMINISTIC, RETURNS_NULL_ON_NULL_INPUT), new Return(new ArithmeticBinaryExpression(DIVIDE, new FunctionCall(QualifiedName.of("sin"), ImmutableList.of(identifier("x"))), new FunctionCall(QualifiedName.of("cos"), ImmutableList.of(identifier("x")))))));
CreateFunction createFunctionRand = new CreateFunction(QualifiedName.of("dev", "testing", "rand"), true, false, ImmutableList.of(), "double", Optional.empty(), new RoutineCharacteristics(SQL, NOT_DETERMINISTIC, CALLED_ON_NULL_INPUT), new Return(new FunctionCall(QualifiedName.of("rand"), ImmutableList.of())));
assertStatement("CREATE OR REPLACE FUNCTION dev.testing.rand ()\n" + "RETURNS double\n" + "LANGUAGE SQL\n" + "NOT DETERMINISTIC\n" + "CALLED ON NULL INPUT\n" + "RETURN rand()", createFunctionRand);
assertStatement("CREATE OR REPLACE FUNCTION dev.testing.rand ()\n" + "RETURNS double\n" + "RETURN rand()", createFunctionRand);
CreateFunction createTemporaryFunctionFoo = new CreateFunction(QualifiedName.of("foo"), false, true, ImmutableList.of(), "boolean", Optional.empty(), new RoutineCharacteristics(SQL, NOT_DETERMINISTIC, CALLED_ON_NULL_INPUT), new Return(new BooleanLiteral("true")));
assertStatement("CREATE TEMPORARY FUNCTION foo() \n" + "RETURNS boolean \n" + "RETURN true", createTemporaryFunctionFoo);
assertInvalidStatement("CREATE FUNCTION dev.testing.rand () RETURNS double LANGUAGE SQL LANGUAGE SQL RETURN rand()", "Duplicate language clause: SQL");
assertInvalidStatement("CREATE FUNCTION dev.testing.rand () RETURNS double DETERMINISTIC DETERMINISTIC RETURN rand()", "Duplicate determinism characteristics: DETERMINISTIC");
assertInvalidStatement("CREATE FUNCTION dev.testing.rand () RETURNS double CALLED ON NULL INPUT CALLED ON NULL INPUT RETURN rand()", "Duplicate null-call clause: CALLEDONNULLINPUT");
}
Aggregations