/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.query.resolver.v87; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import org.junit.Test; import org.teiid.api.exception.query.QueryResolverException; import org.teiid.core.types.DataTypeManagerService; import org.teiid.designer.query.metadata.IQueryMetadataInterface; import org.teiid.designer.runtime.version.spi.ITeiidServerVersion; import org.teiid.designer.runtime.version.spi.TeiidServerVersion.Version; import org.teiid.query.metadata.TransformationMetadata; import org.teiid.query.resolver.util.ResolverVisitor; import org.teiid.query.resolver.v86.Test86FunctionResolving; import org.teiid.query.sql.symbol.Function; import org.teiid.query.unittest.RealMetadataFactory.DDLHolder; @SuppressWarnings( {"nls", "javadoc"} ) public class Test87FunctionResolving extends Test86FunctionResolving { protected Test87FunctionResolving(Version teiidVersion) { super(teiidVersion); } public Test87FunctionResolving() { this(Version.TEIID_8_7); } /* * UDF function for testVarArgsFunction */ public static String vararg(Object... vals) { return String.valueOf(vals.length); } @Test public void testAmbiguousUDF() throws Exception { TransformationMetadata tm = getMetadataFactory().fromDDL("x", new DDLHolder("y", "create foreign function f () returns string"), new DDLHolder("z", "create foreign function f () returns string")); String sql = "f()"; Function func = (Function)getQueryParser().parseExpression(sql); ResolverVisitor resolver = new ResolverVisitor(getTeiidVersion()); try { resolver.resolveLanguageObject(func, tm); fail(); } catch (QueryResolverException e) { } sql = "z.f()"; func = (Function)getQueryParser().parseExpression(sql); resolver = new ResolverVisitor(getTeiidVersion()); resolver.resolveLanguageObject(func, tm); } @Test public void testUDFResolveOrder() throws Exception { IQueryMetadataInterface tm = getMetadataFactory().fromDDL("create foreign function func(x object) returns object; " + " create foreign function func(x string) returns string;" + " create foreign function func1(x object) returns double;" + " create foreign function func1(x string[]) returns bigdecimal;", "x", "y"); String sql = "func('a')"; Function func = (Function) getQueryParser().parseExpression(sql); ResolverVisitor resolver = new ResolverVisitor(getTeiidVersion()); resolver.resolveLanguageObject(func, tm); assertEquals(DataTypeManagerService.DefaultDataTypes.STRING.getTypeClass(), func.getArgs()[0].getType()); assertEquals(DataTypeManagerService.DefaultDataTypes.STRING.getTypeClass(), func.getType()); sql = "func1(('1',))"; func = (Function) getQueryParser().parseExpression(sql); resolver = new ResolverVisitor(getTeiidVersion()); resolver.resolveLanguageObject(func, tm); System.out.println(func.getType()); } }