/** * Returns the ORDER BY element at the specified index. * @param index Index to get * @return The element at the index */ public Expression getVariable( int index ) { return orderByItems.get(index).getSymbol(); }
/** * Returns the ORDER BY element at the specified index. * @param index Index to get * @return The element at the index */ public Expression getVariable( int index ) { return orderByItems.get(index).getSymbol(); }
/** * Returns the ORDER BY element at the specified index. * @param index Index to get * @return The element at the index */ public Expression getVariable( int index ) { return orderByItems.get(index).getSymbol(); }
/** * Get the list or sort key symbols. Modifications to this list will not add or remove {@link OrderByItem}s. * @return */ public List<Expression> getSortKeys() { ArrayList<Expression> result = new ArrayList<Expression>(orderByItems.size()); for (OrderByItem item : orderByItems) { result.add(item.getSymbol()); } return result; }
/** * Get the list or sort key symbols. Modifications to this list will not add or remove {@link OrderByItem}s. * @return */ public List<Expression> getSortKeys() { ArrayList<Expression> result = new ArrayList<Expression>(orderByItems.size()); for (OrderByItem item : orderByItems) { result.add(item.getSymbol()); } return result; }
/** * Get the list or sort key symbols. Modifications to this list will not add or remove {@link OrderByItem}s. * @return */ public List<Expression> getSortKeys() { ArrayList<Expression> result = new ArrayList<Expression>(orderByItems.size()); for (OrderByItem item : orderByItems) { result.add(item.getSymbol()); } return result; }
@Override public void visit(OrderByItem obj) { preVisitVisitor(obj); visitNode(obj.getSymbol()); postVisitVisitor(obj); } public void visit(Query obj) {
@Override public void visit(OrderByItem obj) { preVisitVisitor(obj); visitNode(obj.getSymbol()); postVisitVisitor(obj); } public void visit(Query obj) {
@Override public void visit(OrderByItem obj) { preVisitVisitor(obj); visitNode(obj.getSymbol()); postVisitVisitor(obj); } public void visit(Query obj) {
@Override public void visit(OrderByItem obj) { obj.setSymbol(replaceSymbol(obj.getSymbol(), obj.getExpressionPosition() != -1)); }
@Override public void visit(OrderByItem obj) { obj.setSymbol(replaceSymbol(obj.getSymbol(), obj.getExpressionPosition() != -1)); }
@Override public void visit(OrderByItem obj) { obj.setSymbol(replaceSymbol(obj.getSymbol(), obj.getExpressionPosition() != -1)); }
@Override public void visit(OrderByItem obj) { try { checkElementsAreSearchable(obj.getSymbol(), SupportConstants.Element.SEARCHABLE_COMPARE); if (!CapabilitiesUtil.supportsNullOrdering(this.metadata, this.capFinder, this.modelID, obj)) { markInvalid(obj, "Desired null ordering is not supported by source"); //$NON-NLS-1$ } } catch(QueryMetadataException e) { handleException(new TeiidComponentException(e)); } catch(TeiidComponentException e) { handleException(e); } }
@Override public void visit(OrderByItem obj) { try { checkElementsAreSearchable(obj.getSymbol(), SupportConstants.Element.SEARCHABLE_COMPARE); if (!CapabilitiesUtil.supportsNullOrdering(this.metadata, this.capFinder, this.modelID, obj)) { markInvalid(obj, "Desired null ordering is not supported by source"); //$NON-NLS-1$ } } catch(QueryMetadataException e) { handleException(new TeiidComponentException(e)); } catch(TeiidComponentException e) { handleException(e); } }
@Override public void visit(OrderByItem obj) { try { checkElementsAreSearchable(obj.getSymbol(), SupportConstants.Element.SEARCHABLE_COMPARE); if (!CapabilitiesUtil.supportsNullOrdering(this.metadata, this.capFinder, this.modelID, obj)) { markInvalid(obj, "Desired null ordering is not supported by source"); //$NON-NLS-1$ } } catch(QueryMetadataException e) { handleException(new TeiidComponentException(e)); } catch(TeiidComponentException e) { handleException(e); } }
@Override public void visit(OrderByItem obj) { validateSortable(obj.getSymbol()); if (obj.getExpressionPosition() < 0) { for (SubqueryContainer subquery : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(obj)) { for (ElementSymbol es : ElementCollectorVisitor.getElements(obj, true, true)) { if (es.isExternalReference()) { handleValidationError(QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31156, subquery), obj); } } } } }
@Override public void visit(OrderByItem obj) { validateSortable(obj.getSymbol()); if (obj.getExpressionPosition() < 0) { for (SubqueryContainer subquery : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(obj)) { for (ElementSymbol es : ElementCollectorVisitor.getElements(obj, true, true)) { if (es.isExternalReference()) { handleValidationError(QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31156, subquery), obj); } } } } }
@Override public void visit(OrderByItem obj) { validateSortable(obj.getSymbol()); if (obj.getExpressionPosition() < 0) { for (SubqueryContainer subquery : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(obj)) { for (ElementSymbol es : ElementCollectorVisitor.getElements(obj, true, true)) { if (es.isExternalReference()) { handleValidationError(QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31156, subquery), obj); } } } } }
@Test public void testSortAliasWithSameNameUnion() throws Exception { String sql = "select e1 from (select distinct pm1.g1.e1 as e1 from pm1.g1) x union all select e1 from pm1.g2 order by e1"; //$NON-NLS-1$ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder(); BasicSourceCapabilities caps = new BasicSourceCapabilities(); caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true); capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$ RelationalPlan plan = (RelationalPlan)TestOptimizer.helpPlan(sql, RealMetadataFactory.example1Cached(), new String[] {"SELECT g_0.e1 FROM pm1.g1 AS g_0", "SELECT g_0.e1 FROM pm1.g2 AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ SortNode node = (SortNode)plan.getRootNode(); assertTrue("Alias was not accounted for in sort node", node.getElements().get(0).equals(node.getSortElements().get(0).getSymbol())); //$NON-NLS-1$ }
@Test public void testSortAliasWithSameName() throws Exception { String sql = "select e1 from (select distinct pm1.g1.e1 as e1 from pm1.g1) x order by e1"; //$NON-NLS-1$ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder(); BasicSourceCapabilities caps = new BasicSourceCapabilities(); caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true); capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$ RelationalPlan plan = (RelationalPlan)TestOptimizer.helpPlan(sql, RealMetadataFactory.example1Cached(), new String[] {"SELECT g_0.e1 FROM pm1.g1 AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ SortNode node = (SortNode)plan.getRootNode(); assertTrue("Alias was not accounted for in sort node", node.getElements().get(0).equals(node.getSortElements().get(0).getSymbol())); //$NON-NLS-1$ }