use of org.teiid.query.processor.relational.SortNode in project teiid by teiid.
the class TestRuleMergeVirtual method testSortAliasWithSameName.
@Test
public void testSortAliasWithSameName() throws Exception {
// $NON-NLS-1$
String sql = "select e1 from (select distinct pm1.g1.e1 as e1 from pm1.g1) x order by e1";
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
// $NON-NLS-1$
capFinder.addCapabilities("pm1", caps);
RelationalPlan plan = (RelationalPlan) TestOptimizer.helpPlan(sql, RealMetadataFactory.example1Cached(), new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0" }, capFinder, // $NON-NLS-1$
TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING);
SortNode node = (SortNode) plan.getRootNode();
// $NON-NLS-1$
assertTrue("Alias was not accounted for in sort node", node.getElements().get(0).equals(node.getSortElements().get(0).getSymbol()));
}
use of org.teiid.query.processor.relational.SortNode in project teiid by teiid.
the class TestRuleMergeVirtual method testSortAliasWithSameNameUnion.
@Test
public void testSortAliasWithSameNameUnion() throws Exception {
// $NON-NLS-1$
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";
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
// $NON-NLS-1$
capFinder.addCapabilities("pm1", caps);
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, // $NON-NLS-1$
TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING);
SortNode node = (SortNode) plan.getRootNode();
// $NON-NLS-1$
assertTrue("Alias was not accounted for in sort node", node.getElements().get(0).equals(node.getSortElements().get(0).getSymbol()));
}
use of org.teiid.query.processor.relational.SortNode in project teiid by teiid.
the class TestEnginePerformance method helpTestLargeSort.
private void helpTestLargeSort(int iterations, int threads, final int rows) throws InterruptedException, Exception {
final List<ElementSymbol> elems = new ArrayList<ElementSymbol>();
final int cols = 50;
for (int i = 0; i < cols; i++) {
ElementSymbol elem1 = new ElementSymbol("e" + i);
elem1.setType(DataTypeManager.DefaultDataClasses.STRING);
elems.add(elem1);
}
final List<ElementSymbol> sortElements = Arrays.asList(elems.get(0));
final Task task = new Task() {
@Override
public Void call() throws Exception {
// $NON-NLS-1$ //$NON-NLS-2$
CommandContext context = new CommandContext("pid", "test", null, null, 1);
SortNode sortNode = new SortNode(1);
sortNode.setSortElements(new OrderBy(sortElements).getOrderByItems());
sortNode.setMode(Mode.SORT);
sortNode.setElements(elems);
RelationalNode rn = new RelationalNode(2) {
int blockingPeriod = 3;
int count = 0;
int batches = 0;
@Override
protected TupleBatch nextBatchDirect() throws BlockedException, TeiidComponentException, TeiidProcessingException {
if (count++ % blockingPeriod == 0) {
throw BlockedException.INSTANCE;
}
int batchSize = this.getBatchSize();
int batchRows = batchSize;
boolean done = false;
int start = batches++ * batchSize;
if (start + batchSize >= rows) {
done = true;
batchRows = rows - start;
}
ArrayList<List<?>> batch = new ArrayList<List<?>>(batchRows);
for (int i = 0; i < batchRows; i++) {
ArrayList<Object> row = new ArrayList<Object>();
for (int j = 0; j < cols; j++) {
if (j == 0) {
row.add(String.valueOf((i * 279470273) % 4294967291l));
} else {
row.add(i + "abcdefghijklmnop" + j);
}
}
batch.add(row);
}
TupleBatch result = new TupleBatch(start + 1, batch);
if (done) {
result.setTerminationFlag(true);
}
return result;
}
@Override
public Object clone() {
return null;
}
};
rn.setElements(elems);
sortNode.addChild(rn);
sortNode.initialize(context, bm, null);
rn.initialize(context, bm, null);
process(sortNode, rows);
return null;
}
};
runTask(iterations, threads, task);
}
use of org.teiid.query.processor.relational.SortNode in project teiid by teiid.
the class TestEnginePerformance method helpTestSort.
public void helpTestSort(Mode mode, int expectedRowCount, List<? extends Expression> sortElements, List<?>[] data, List<? extends Expression> elems, BufferManager bufferManager) throws TeiidComponentException, TeiidProcessingException {
// $NON-NLS-1$ //$NON-NLS-2$
CommandContext context = new CommandContext("pid", "test", null, null, 1);
BlockingFakeRelationalNode dataNode = new BlockingFakeRelationalNode(0, data);
dataNode.setReturnPeriod(3);
dataNode.setElements(elems);
dataNode.initialize(context, bufferManager, null);
SortNode sortNode = new SortNode(1);
sortNode.setSortElements(new OrderBy(sortElements).getOrderByItems());
sortNode.setMode(mode);
sortNode.setElements(dataNode.getElements());
sortNode.addChild(dataNode);
sortNode.initialize(context, bufferManager, null);
process(sortNode, expectedRowCount);
}
Aggregations