/** * True/false are consistently representable by integers */ @Test public void testExecBadType() { helpResolve("EXEC pm1.sq3('xyz', {b'true'})"); //$NON-NLS-1$ }
/** select pm3.g1.e1 from pm3.g1, pm3.g2 where pm3.g1.e4 BETWEEN pm3.g1.e2 AND pm3.g2.e2 */ @Test public void testBetween8(){ String sql = "select pm3.g1.e1 from pm3.g1, pm3.g2 where pm3.g1.e4 BETWEEN pm3.g1.e2 AND pm3.g2.e2"; //$NON-NLS-1$ helpResolve(sql); }
@Test public void testCaseExpressionWithNestedFunction() { String sql = "SELECT CASE WHEN e2 < 0 THEN abs(CASE WHEN e2 < 0 THEN -1 ELSE e2 END)" + //$NON-NLS-1$ " ELSE e2 END FROM pm1.g1"; //$NON-NLS-1$ helpResolve(sql); }
@Test public void testCase5474() throws Exception { String procedure = "CREATE VIRTUAL PROCEDURE "; //$NON-NLS-1$ procedure = procedure + "BEGIN\n"; //$NON-NLS-1$ procedure = procedure + "DECLARE integer VARIABLES.NLEVELS;\n"; //$NON-NLS-1$ procedure = procedure + "VARIABLES.NLEVELS = SELECT COUNT(*) FROM (SELECT oi.e1 AS Col1, oi.e2 AS Col2, oi.e3 FROM pm1.g2 AS oi) AS TOBJ, pm2.g2 AS TModel WHERE TModel.e3 = TOBJ.e3;\n"; //$NON-NLS-1$ procedure = procedure + "END\n"; //$NON-NLS-1$ TestResolver.helpResolve(procedure, RealMetadataFactory.example1Cached()); }
@Test public void testStoredSubQuery2() { Query resolvedQuery = (Query) helpResolve("select x.e1 from (EXEC pm1.sq3('abc', 5)) as x"); //$NON-NLS-1$ helpCheckFrom(resolvedQuery, new String[] { "x" }); //$NON-NLS-1$ helpCheckSelect(resolvedQuery, new String[] { "x.e1" }); //$NON-NLS-1$ }
@Test public void testReferenceInSelect1() { String sql = "select convert(?, integer), e1 from pm1.g1"; //$NON-NLS-1$ Query command = (Query)helpResolve(sql, RealMetadataFactory.example1Cached()); assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, command.getProjectedSymbols().get(0).getType()); }
@Test public void testSelectStarFromAliasedGroup() { Query resolvedQuery = (Query) helpResolve("SELECT * FROM pm1.g1 as x"); //$NON-NLS-1$ helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$ helpCheckElements(resolvedQuery.getSelect(), new String[] { "x.e1", "x.e2", "x.e3", "x.e4" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ new String[] { "pm1.g1.e1", "pm1.g1.e2", "pm1.g1.e3", "pm1.g1.e4" } ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ }
@Test public void testFunctionInGroupBy() { String sql = "SELECT SUM(e2) FROM pm1.g1 GROUP BY (e2 + 1)"; //$NON-NLS-1$ Command command = helpResolve(sql); assertEquals(sql, command.toString()); helpCheckElements(command, new String[] {"pm1.g1.e2", "pm1.g1.e2"}, new String[] {"pm1.g1.e2", "pm1.g1.e2"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$//$NON-NLS-4$ }
@Test public void testNestedInlineViewsCount() throws Exception { String sql = "SELECT COUNT(*) FROM (SELECT * FROM (SELECT * FROM pm1.g1) AS Y) AS X"; //$NON-NLS-1$ Command c = helpResolve(sql); assertEquals(sql, c.toString()); verifyProjectedTypes(c, new Class[] { Integer.class }); }
@Test public void testUpdateAlias() { String sql = "UPDATE pm1.g1 as x SET x.e1 = 1 where x.e2 = 2;"; //$NON-NLS-1$ Update update = (Update)helpResolve(sql, RealMetadataFactory.example1Cached()); assertEquals("UPDATE pm1.g1 AS x SET e1 = 1 WHERE x.e2 = 2", update.toString()); }
@Test public void testArrayGetTyping() { String sql = "select array_agg(e1)[1], array_agg(e2)[3] from pm1.g1"; //$NON-NLS-1$ Command command = helpResolve(sql, RealMetadataFactory.example1Cached()); assertEquals(DataTypeManager.DefaultDataClasses.STRING, command.getProjectedSymbols().get(0).getType()); assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, command.getProjectedSymbols().get(1).getType()); }
@Test public void testOptionalParams() throws Exception { String ddl = "create foreign procedure proc (x integer, y string);\n"; TransformationMetadata tm = createMetadata(ddl); String sql = "call proc (1)"; //$NON-NLS-1$ StoredProcedure sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals(new Constant(null, DataTypeManager.DefaultDataClasses.STRING), sp.getParameter(2).getExpression()); sql = "call proc (1, 'a')"; //$NON-NLS-1$ sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals(new Constant("a", DataTypeManager.DefaultDataClasses.STRING), sp.getParameter(2).getExpression()); }
@Test public void testMultipleIdenticalElements() { Query resolvedQuery = (Query) helpResolve("SELECT e1, e1 FROM pm1.g1"); //$NON-NLS-1$ helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$ helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "pm1.g1.e1" }); //$NON-NLS-1$ //$NON-NLS-2$ helpCheckElements(resolvedQuery.getSelect(), new String[] { "pm1.g1.e1", "pm1.g1.e1" }, //$NON-NLS-1$ //$NON-NLS-2$ new String[] { "pm1.g1.e1", "pm1.g1.e1" }); //$NON-NLS-1$ //$NON-NLS-2$ }
@Test public void testMultipleIdenticalElements2() { Query resolvedQuery = (Query) helpResolve("SELECT e1, pm1.g1.e1 FROM pm1.g1"); //$NON-NLS-1$ helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$ helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "pm1.g1.e1" }); //$NON-NLS-1$ //$NON-NLS-2$ helpCheckElements(resolvedQuery.getSelect(), new String[] { "pm1.g1.e1", "pm1.g1.e1" }, //$NON-NLS-1$ //$NON-NLS-2$ new String[] { "pm1.g1.e1", "pm1.g1.e1" }); //$NON-NLS-1$ //$NON-NLS-2$ }
@Test public void testSelectIntoWithNullLiteral() { String sql = "select null as x into #temp from pm1.g1"; //$NON-NLS-1$ Query query = (Query)helpResolve(sql); TempMetadataStore store = query.getTemporaryMetadata(); TempMetadataID id = store.getTempElementID("#temp.x"); //$NON-NLS-1$ assertEquals(DataTypeManager.DefaultDataClasses.STRING, id.getType()); }
@Test public void testArrayResolvingNull() throws Exception { String sql = "select (null, 'a')"; //$NON-NLS-1$ QueryResolver.resolveCommand(helpParse(sql), RealMetadataFactory.example1Cached()); Command command = helpResolve(sql, RealMetadataFactory.example1Cached()); assertEquals(String[].class, command.getProjectedSymbols().get(0).getType()); sql = "select ((null,), ('a',))"; //$NON-NLS-1$ QueryResolver.resolveCommand(helpParse(sql), RealMetadataFactory.example1Cached()); command = helpResolve(sql, RealMetadataFactory.example1Cached()); assertEquals(String[][].class, command.getProjectedSymbols().get(0).getType()); }
@Test public void testOptionalParams1() throws Exception { String ddl = "create foreign procedure proc (x integer, y string NOT NULL, z integer);\n"; TransformationMetadata tm = createMetadata(ddl); String sql = "call proc (1, 'a')"; //$NON-NLS-1$ StoredProcedure sp = (StoredProcedure) TestResolver.helpResolve(sql, tm); assertEquals(new Constant("a", DataTypeManager.DefaultDataClasses.STRING), sp.getParameter(2).getExpression()); }
@Test public void testElementSymbolForms() { String sql = "SELECT pm1.g1.e1, e2, pm1.g1.e3 AS a, e4 AS b FROM pm1.g1"; //$NON-NLS-1$ Query resolvedQuery = (Query) helpResolve(sql); helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$ helpCheckSelect(resolvedQuery, new String[] { "pm1.g1.e1", "pm1.g1.e2", "a", "b" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ helpCheckElements(resolvedQuery.getSelect(), new String[] { "pm1.g1.e1", "pm1.g1.e2", "pm1.g1.e3", "pm1.g1.e4" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ new String[] { "pm1.g1.e1", "pm1.g1.e2", "pm1.g1.e3", "pm1.g1.e4" } ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ assertEquals("Resolved string form was incorrect ", sql, resolvedQuery.toString()); //$NON-NLS-1$ }
@Test public void testElementSymbolFormsWithAliasedGroup() { String sql = "SELECT x.e1, e2, x.e3 AS a, e4 AS b FROM pm1.g1 AS x"; //$NON-NLS-1$ Query resolvedQuery = (Query) helpResolve(sql); helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$ helpCheckSelect(resolvedQuery, new String[] { "x.e1", "x.e2", "a", "b" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ helpCheckElements(resolvedQuery.getSelect(), new String[] { "x.e1", "x.e2", "x.e3", "x.e4" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ new String[] { "pm1.g1.e1", "pm1.g1.e2", "pm1.g1.e3", "pm1.g1.e4" } ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ assertEquals("Resolved string form was incorrect ", sql, resolvedQuery.toString()); //$NON-NLS-1$ }
@Test public void testMultiDimensionalArrayRewrite() throws Exception { String sql = "select (('a', 'b'),('c','d'))"; //$NON-NLS-1$ QueryResolver.resolveCommand(helpParse(sql), RealMetadataFactory.example1Cached()); Command command = helpResolve(sql, RealMetadataFactory.example1Cached()); assertEquals(String[][].class, command.getProjectedSymbols().get(0).getType()); command = QueryRewriter.rewrite(command, RealMetadataFactory.example1Cached(), null); Expression ex = SymbolMap.getExpression(command.getProjectedSymbols().get(0)); Constant c = (Constant)ex; assertTrue(c.getValue() instanceof ArrayImpl); }