@Override public void addInputDirect(List<?> tuple, CommandContext commandContext) throws TeiidComponentException, TeiidProcessingException { if(collectionBuffer == null) { collectionBuffer = mgr.createTupleBuffer(elements, groupName, TupleSourceType.PROCESSOR); } List<Object> row = new ArrayList<Object>(argIndexes.length); //TODO remove overlap for (int i = 0; i < argIndexes.length; i++) { row.add(tuple.get(argIndexes[i])); } if (!this.proxy.filter(row)) { this.collectionBuffer.addTuple(row); } }
@Override public void addInputDirect(List<?> tuple, CommandContext commandContext) throws TeiidComponentException, TeiidProcessingException { if(collectionBuffer == null) { collectionBuffer = mgr.createTupleBuffer(elements, groupName, TupleSourceType.PROCESSOR); } List<Object> row = new ArrayList<Object>(argIndexes.length); //TODO remove overlap for (int i = 0; i < argIndexes.length; i++) { row.add(tuple.get(argIndexes[i])); } if (!this.proxy.filter(row)) { this.collectionBuffer.addTuple(row); } }
@Override public void addInputDirect(List<?> tuple, CommandContext commandContext) throws TeiidComponentException, TeiidProcessingException { if(collectionBuffer == null) { collectionBuffer = mgr.createTupleBuffer(elements, groupName, TupleSourceType.PROCESSOR); } List<Object> row = new ArrayList<Object>(argIndexes.length); //TODO remove overlap for (int i = 0; i < argIndexes.length; i++) { row.add(tuple.get(argIndexes[i])); } if (!this.proxy.filter(row)) { this.collectionBuffer.addTuple(row); } }
@Override protected void tuplePassed(List tuple) throws BlockedException, TeiidComponentException, TeiidProcessingException { List<Object> newTuple = new ArrayList<Object>(tuple); for (Map.Entry<ElementSymbol, Expression> entry : update.getClauseMap().entrySet()) { newTuple.set(columnMap.get(entry.getKey()), eval.evaluate(entry.getValue(), tuple)); } validateNotNull(newTuple); if (primaryKeyChangePossible) { browser.removed(); deleteTuple(tuple); if (changeSet == null) { changeSet = bm.createTupleBuffer(columns, sessionID, TupleSourceType.PROCESSOR); } changeSet.addTuple(newTuple); } else { browser.update(newTuple); } }
@Override protected void tuplePassed(List tuple) throws BlockedException, TeiidComponentException, TeiidProcessingException { List<Object> newTuple = new ArrayList<Object>(tuple); for (Map.Entry<ElementSymbol, Expression> entry : update.getClauseMap().entrySet()) { newTuple.set(columnMap.get(entry.getKey()), eval.evaluate(entry.getValue(), tuple)); } validateNotNull(newTuple); if (primaryKeyChangePossible) { browser.removed(); deleteTuple(tuple); if (changeSet == null) { changeSet = bm.createTupleBuffer(columns, sessionID, TupleSourceType.PROCESSOR); } changeSet.addTuple(newTuple); } else { browser.update(newTuple); } }
@Override protected void tuplePassed(List tuple) throws BlockedException, TeiidComponentException, TeiidProcessingException { List<Object> newTuple = new ArrayList<Object>(tuple); for (Map.Entry<ElementSymbol, Expression> entry : update.getClauseMap().entrySet()) { newTuple.set(columnMap.get(entry.getKey()), eval.evaluate(entry.getValue(), tuple)); } validateNotNull(newTuple); if (primaryKeyChangePossible) { browser.removed(); deleteTuple(tuple); if (changeSet == null) { changeSet = bm.createTupleBuffer(columns, sessionID, TupleSourceType.PROCESSOR); } changeSet.addTuple(newTuple); } else { browser.update(newTuple); } }
private void saveTuple(List<?> tuple) throws TeiidComponentException { if (tuple != null && mark && saveOnMark && this.getCurrentIndex() > this.buffer.getRowCount()) { this.buffer.setRowCount(this.getCurrentIndex() - 1); this.buffer.addTuple(tuple); } }
private void saveTuple(List<?> tuple) throws TeiidComponentException { if (tuple != null && mark && saveOnMark && this.getCurrentIndex() > this.buffer.getRowCount()) { this.buffer.setRowCount(this.getCurrentIndex() - 1); this.buffer.addTuple(tuple); } }
private void saveTuple(List<?> tuple) throws TeiidComponentException { if (tuple != null && mark && saveOnMark && this.getCurrentIndex() > this.buffer.getRowCount()) { this.buffer.setRowCount(this.getCurrentIndex() - 1); this.buffer.addTuple(tuple); } }
/** * Adds the given batch preserving row offsets. * @param batch * @throws TeiidComponentException */ public void addTupleBatch(TupleBatch batch, boolean save) throws TeiidComponentException { setRowCount(batch.getBeginRow() - 1); List<List<?>> tuples = batch.getTuples(); if (save) { for (int i = 0; i < batch.getRowCount(); i++) { addTuple(tuples.get(i)); } } else { //add the lob references only, since they may still be referenced later if (isLobs()) { for (int i = 0; i < batch.getRowCount(); i++) { lobManager.updateReferences(tuples.get(i), ReferenceMode.CREATE); } } } }
@Override public List<?> nextTuple() throws TeiidComponentException, TeiidProcessingException { synchronized (tb) { if (rowNumber <= tb.getRowCount()) { return tb.getBatch(rowNumber).getTuple(rowNumber++); } if (tb.isFinal()) { return null; } List<?> row = ts.nextTuple(); if (row == null) { tb.setFinal(true); } else { tb.addTuple(row); rowNumber++; } return row; } }
@Override public List<?> nextTuple() throws TeiidComponentException, TeiidProcessingException { synchronized (tb) { if (rowNumber <= tb.getRowCount()) { return tb.getBatch(rowNumber).getTuple(rowNumber++); } if (tb.isFinal()) { return null; } List<?> row = ts.nextTuple(); if (row == null) { tb.setFinal(true); } else { tb.addTuple(row); rowNumber++; } return row; } }
@Test public void testOnePass() throws Exception { ElementSymbol es1 = new ElementSymbol("e1"); //$NON-NLS-1$ es1.setType(DataTypeManager.DefaultDataClasses.INTEGER); ElementSymbol es2 = new ElementSymbol("e2"); //$NON-NLS-1$ es2.setType(DataTypeManager.DefaultDataClasses.INTEGER); BufferManager bm = BufferManagerFactory.getStandaloneBufferManager(); TupleBuffer tsid = bm.createTupleBuffer(Arrays.asList(es1, es2), "test", TupleSourceType.PROCESSOR); //$NON-NLS-1$ tsid.addTuple(Arrays.asList(1, 1)); tsid.addTuple(Arrays.asList(1, 2)); tsid.close(); SortUtility su = new SortUtility(tsid.createIndexedTupleSource(), Arrays.asList(es1), Arrays.asList(Boolean.TRUE), Mode.SORT, bm, "test", tsid.getSchema()); //$NON-NLS-1$ List<TupleBuffer> buffers = su.onePassSort(true); assertEquals(1, buffers.size()); assertTrue(!buffers.get(0).isForwardOnly()); }
@Test public void testDistinct() throws Exception { ElementSymbol es1 = new ElementSymbol("e1"); //$NON-NLS-1$ es1.setType(DataTypeManager.DefaultDataClasses.INTEGER); ElementSymbol es2 = new ElementSymbol("e2"); //$NON-NLS-1$ es2.setType(DataTypeManager.DefaultDataClasses.INTEGER); BufferManager bm = BufferManagerFactory.getStandaloneBufferManager(); TupleBuffer tsid = bm.createTupleBuffer(Arrays.asList(es1, es2), "test", TupleSourceType.PROCESSOR); //$NON-NLS-1$ tsid.addTuple(Arrays.asList(1, 1)); tsid.addTuple(Arrays.asList(1, 2)); tsid.close(); SortUtility su = new SortUtility(tsid.createIndexedTupleSource(), Arrays.asList(es1), Arrays.asList(Boolean.TRUE), Mode.DUP_REMOVE_SORT, bm, "test", tsid.getSchema()); //$NON-NLS-1$ su.sort(); assertFalse(su.isDistinct()); }
@Test public void testReverseIteration() throws Exception { ElementSymbol x = new ElementSymbol("x"); //$NON-NLS-1$ x.setType(DataTypeManager.DefaultDataClasses.INTEGER); List<ElementSymbol> schema = Arrays.asList(x); TupleBuffer tb = BufferManagerFactory.getStandaloneBufferManager().createTupleBuffer(schema, "x", TupleSourceType.PROCESSOR); //$NON-NLS-1$ tb.addTuple(Arrays.asList(1)); tb.addTuple(Arrays.asList(2)); TupleBufferTupleSource tbts = tb.createIndexedTupleSource(); tbts.setReverse(true); assertTrue(tbts.hasNext()); assertEquals(2, tbts.nextTuple().get(0)); assertEquals(1, tbts.nextTuple().get(0)); assertFalse(tbts.hasNext()); }
@Test public void testStableSort() throws Exception { ElementSymbol es1 = new ElementSymbol("e1"); //$NON-NLS-1$ es1.setType(DataTypeManager.DefaultDataClasses.INTEGER); BufferManager bm = BufferManagerFactory.getStandaloneBufferManager(); TupleBuffer tsid = bm.createTupleBuffer(Arrays.asList(es1, es1), "test", TupleSourceType.PROCESSOR); //$NON-NLS-1$ tsid.addTuple(Arrays.asList(1, 1)); tsid.addTuple(Arrays.asList(1, 2)); tsid.addTuple(Arrays.asList(1, 3)); tsid.close(); SortUtility su = new SortUtility(tsid.createIndexedTupleSource(), Arrays.asList(es1), Arrays.asList(Boolean.TRUE), Mode.SORT, bm, "test", tsid.getSchema()); //$NON-NLS-1$ su.setBatchSize(1); su.setStableSort(true); TupleBuffer out = su.sort(); TupleSource ts = out.createIndexedTupleSource(); assertEquals(Arrays.asList(1,1), ts.nextTuple()); assertEquals(Arrays.asList(1,2), ts.nextTuple()); assertEquals(Arrays.asList(1,3), ts.nextTuple()); assertNull(ts.nextTuple()); }
@Test public void testTruncatePartial1() throws Exception { ElementSymbol x = new ElementSymbol("x"); //$NON-NLS-1$ x.setType(DataTypeManager.DefaultDataClasses.INTEGER); List<ElementSymbol> schema = Arrays.asList(x); TupleBuffer tb = BufferManagerFactory.getStandaloneBufferManager().createTupleBuffer(schema, "x", TupleSourceType.PROCESSOR); //$NON-NLS-1$ tb.setBatchSize(128); for (int i = 0; i < 131; i++) { tb.addTuple(Arrays.asList(1)); } tb.truncateTo(129); assertEquals(129, tb.getManagedRowCount()); assertEquals(129, tb.getRowCount()); }
@Test(expected=TeiidComponentException.class) public void testTupleBufferMax() throws Exception { BufferManagerImpl bufferManager = new BufferManagerImpl(); bufferManager.setCache(new MemoryStorageManager() { @Override public long getMaxStorageSpace() { return 640; } }); bufferManager.setMaxReserveKB(10); bufferManager.setMaxActivePlans(20); bufferManager.setEnforceMaxBatchManagerSizeEstimate(true); bufferManager.initialize(); TupleBuffer tb = bufferManager.createTupleBuffer(Arrays.asList(new ElementSymbol("x", null, String.class)), "x", TupleSourceType.PROCESSOR); //fill one batch, which should then exceed the max for (int i = 0; i < 1024; i++) { tb.addTuple(Arrays.asList("a")); } }
@Test public void testTruncateMultiple() throws Exception { ElementSymbol x = new ElementSymbol("x"); //$NON-NLS-1$ x.setType(DataTypeManager.DefaultDataClasses.INTEGER); List<ElementSymbol> schema = Arrays.asList(x); TupleBuffer tb = BufferManagerFactory.getStandaloneBufferManager().createTupleBuffer(schema, "x", TupleSourceType.PROCESSOR); //$NON-NLS-1$ tb.setBatchSize(16); for (int i = 0; i < 131; i++) { tb.addTuple(Arrays.asList(1)); } tb.truncateTo(17); assertEquals(17, tb.getManagedRowCount()); assertEquals(17, tb.getRowCount()); }
@Test public void testTruncatePartial() throws Exception { ElementSymbol x = new ElementSymbol("x"); //$NON-NLS-1$ x.setType(DataTypeManager.DefaultDataClasses.INTEGER); List<ElementSymbol> schema = Arrays.asList(x); TupleBuffer tb = BufferManagerFactory.getStandaloneBufferManager().createTupleBuffer(schema, "x", TupleSourceType.PROCESSOR); //$NON-NLS-1$ tb.setBatchSize(64); for (int i = 0; i < 65; i++) { tb.addTuple(Arrays.asList(1)); } TupleBatch batch = tb.getBatch(1); assertTrue(!batch.getTerminationFlag()); assertEquals(65, tb.getManagedRowCount()); tb.truncateTo(3); assertEquals(3, tb.getManagedRowCount()); assertEquals(3, tb.getRowCount()); batch = tb.getBatch(3); }