/** * Is selection is not "select *", then mark all those un used nodes as excluded. The way * we do this mark the nodes selected and their parents as selected, then we sweep to mark * everybody who is not marked "included" as excluded. * @param xmlCommand */ static MappingDocument preMarkExcluded(Query xmlCommand, MappingDocument doc) { Select select = xmlCommand.getSelect(); Expression firstSymbol = select.getSymbol(0); // 0. mark the nodes to be excluded if(firstSymbol instanceof MultipleElementSymbol && ((MultipleElementSymbol)firstSymbol).getGroup() == null) { return doc; } // Get all the valid nodes to be marked as included. Collection<ElementSymbol> validElements = ElementCollectorVisitor.getElements(select, true); HashSet<String> elements = new HashSet<String>(validElements.size()); for (ElementSymbol element : validElements) { elements.add(element.getName()); } // keep the nodes given mark the rest of the nodes to be eliminated return MarkExcludeVisitor.markExcludedNodes(doc, elements); }
public Query selectQuery() throws TeiidException { if (!this.exceptions.isEmpty()) { throw this.exceptions.get(0); } Query query = this.context.buildQuery(); if (this.countQuery) { AggregateSymbol aggregateSymbol = new AggregateSymbol(AggregateSymbol.Type.COUNT.name(), false, null); Select select = new Select(Arrays.asList(aggregateSymbol)); query.setSelect(select); } else if (this.orderBy != null) { if (this.context.getIterator() != null) { //currently this doesn't matter as the ordering can only be based upon the parent entity ((AggregateSymbol)((AliasSymbol)query.getSelect().getSymbol(query.getSelect().getProjectedSymbols().size() - 1)).getSymbol()).setOrderBy(this.orderBy); } else { query.setOrderBy(this.orderBy); } } if (this.expandOption != null) { processExpandOption(this.expandOption, this.context, query, 1, null); } return query; }
@Test public void testNationCharString() throws Exception { Query query = (Query) QueryParser.getQueryParser().parseCommand("SELECT N'blah' FROM m.g"); //$NON-NLS-1$ Select select = query.getSelect(); Constant c = (Constant) SymbolMap.getExpression(select.getSymbol(0)); assertEquals(c, new Constant("blah")); //$NON-NLS-1$ }
@Test public void testExactFixedPoint() throws QueryParserException { Query actualCommand = (Query)QueryParser.getQueryParser().parseCommand("SELECT 1.1", new ParseInfo()); assertEquals(DataTypeManager.DefaultDataClasses.BIG_DECIMAL, actualCommand.getSelect().getSymbol(0).getType()); }
@Test public void testAlterProcedure() { AlterProcedure alterProc = (AlterProcedure) helpResolve("alter procedure MMSP5 as begin select param1; end", RealMetadataFactory.exampleBQTCached()); assertNotNull(alterProc.getTarget().getMetadataID()); Query q = (Query)((CommandStatement)alterProc.getDefinition().getBlock().getStatements().get(0)).getCommand(); assertTrue(((ElementSymbol)q.getSelect().getSymbol(0)).isExternalReference()); }
@Test public void testBinaryStringLiteral() throws QueryParserException { Query actualCommand = (Query)QueryParser.getQueryParser().parseCommand("SELECT x'AABBCC0a'", new ParseInfo()); assertEquals(DataTypeManager.DefaultDataClasses.VARBINARY, actualCommand.getSelect().getSymbol(0).getType()); assertEquals("SELECT X'AABBCC0A'", actualCommand.toString()); }
/** * Ensures that views are named with v_ even without metadata */ @Test public void testViewAliasing() throws Exception { String sql = "select y.e1 from (select pm1.g1.e1 from pm1.g1) y"; //$NON-NLS-1$ Query command = (Query)QueryParser.getQueryParser().parseCommand(sql); ((ElementSymbol)command.getSelect().getSymbol(0)).setGroupSymbol(new GroupSymbol("y")); //$NON-NLS-1$ command.acceptVisitor(new AliasGenerator(true)); assertEquals("SELECT v_0.c_0 FROM (SELECT g_0.e1 AS c_0 FROM pm1.g1 AS g_0) AS v_0", command.toString()); //$NON-NLS-1$ }