use of org.teiid.core.types.BlobType in project teiid by teiid.
the class StringAgg method getResult.
/**
* @see org.teiid.query.function.aggregate.AggregateFunction#getResult(CommandContext)
*/
public Object getResult(CommandContext commandContext) throws TeiidProcessingException {
if (this.result == null) {
this.result = buildResult(commandContext);
}
try {
this.result.getWriter().close();
FileStoreOutputStream fs = this.result.getOuputStream();
fs.close();
if (binary) {
if (fs.bytesWritten()) {
return new BlobType(new BlobImpl(result));
}
return new BlobType(new SerialBlob(Arrays.copyOf(fs.getBuffer(), fs.getCount())));
}
if (fs.bytesWritten()) {
return new ClobType(new ClobImpl(result, -1));
}
return new ClobType(new ClobImpl(new String(Arrays.copyOf(fs.getBuffer(), fs.getCount()), Streamable.ENCODING)));
} catch (IOException e) {
throw new TeiidProcessingException(QueryPlugin.Event.TEIID30422, e);
} catch (SQLException e) {
throw new TeiidProcessingException(QueryPlugin.Event.TEIID30423, e);
}
}
use of org.teiid.core.types.BlobType in project teiid by teiid.
the class TextAgg method getResult.
/**
* @see org.teiid.query.function.aggregate.AggregateFunction#getResult(CommandContext)
*/
public Object getResult(CommandContext commandContext) throws TeiidProcessingException {
if (this.result == null) {
this.result = buildResult(commandContext);
}
try {
FileStoreOutputStream fs = this.result.getOuputStream();
fs.close();
if (fs.bytesWritten()) {
return new BlobType(new BlobImpl(result));
}
return new BlobType(new SerialBlob(Arrays.copyOf(fs.getBuffer(), fs.getCount())));
} catch (IOException e) {
throw new TeiidProcessingException(QueryPlugin.Event.TEIID30422, e);
} catch (SQLException e) {
throw new TeiidProcessingException(QueryPlugin.Event.TEIID30423, e);
}
}
use of org.teiid.core.types.BlobType in project teiid by teiid.
the class TestLobManager method testLobPeristence.
@Test
public void testLobPeristence() throws Exception {
BufferManager buffMgr = BufferManagerFactory.getStandaloneBufferManager();
FileStore fs = buffMgr.createFileStore("temp");
ClobType clob = new ClobType(new ClobImpl(new InputStreamFactory() {
@Override
public InputStream getInputStream() throws IOException {
return new ReaderInputStream(new StringReader("Clob contents One"), Charset.forName(Streamable.ENCODING));
}
}, -1));
BlobType blob = new BlobType(new BlobImpl(new InputStreamFactory() {
@Override
public InputStream getInputStream() throws IOException {
return new ReaderInputStream(new StringReader("Blob contents Two"), Charset.forName(Streamable.ENCODING));
}
}));
BlobType blobEmpty = new BlobType(new BlobImpl(new InputStreamFactory() {
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(new byte[0]);
}
}));
FileStore fs1 = buffMgr.createFileStore("blob");
FileStoreInputStreamFactory fsisf = new FileStoreInputStreamFactory(fs1, Streamable.ENCODING);
FileStoreOutputStream fsos = fsisf.getOuputStream();
byte[] b = new byte[DataTypeManager.MAX_LOB_MEMORY_BYTES + 1];
fsos.write(b);
fsos.close();
BlobType blob1 = new BlobType(new BlobImpl(fsisf));
assertNotNull(blob1.getReferenceStreamId());
LobManager lobManager = new LobManager(new int[] { 0, 1, 2, 3 }, fs);
lobManager.setMaxMemoryBytes(4);
List<?> tuple = Arrays.asList(clob, blob, blob1, blobEmpty);
lobManager.updateReferences(tuple, ReferenceMode.CREATE);
assertNotNull(blob1.getReferenceStreamId());
lobManager.persist();
Streamable<?> lob = lobManager.getLobReference(clob.getReferenceStreamId());
assertTrue(lob.getClass().isAssignableFrom(ClobType.class));
ClobType clobRead = (ClobType) lob;
assertEquals(ClobType.getString(clob), ClobType.getString(clobRead));
assertTrue(clobRead.length() != -1);
lob = lobManager.getLobReference(blob.getReferenceStreamId());
assertTrue(lob.getClass().isAssignableFrom(BlobType.class));
BlobType blobRead = (BlobType) lob;
assertTrue(Arrays.equals(ObjectConverterUtil.convertToByteArray(blob.getBinaryStream()), ObjectConverterUtil.convertToByteArray(blobRead.getBinaryStream())));
lobManager.updateReferences(tuple, ReferenceMode.REMOVE);
assertEquals(0, lobManager.getLobCount());
}
use of org.teiid.core.types.BlobType in project teiid by teiid.
the class TestFunctionLibrary method testToChars.
@Test
public void testToChars() throws Exception {
// $NON-NLS-1$
Clob result = (Clob) helpInvokeMethod("to_chars", new Class<?>[] { DefaultDataClasses.BLOB, DefaultDataClasses.STRING }, new Object[] { new BlobType(new SerialBlob("hello world".getBytes("ASCII"))), "ASCII" }, null);
String string = result.getSubString(1, (int) result.length());
assertEquals("hello world", string);
}
use of org.teiid.core.types.BlobType in project teiid by teiid.
the class TestFunctionLibrary method testToChars2.
@Test
public void testToChars2() throws Exception {
// $NON-NLS-1$
Clob result = (Clob) helpInvokeMethod("to_chars", new Class<?>[] { DefaultDataClasses.BLOB, DefaultDataClasses.STRING }, new Object[] { new BlobType(new SerialBlob("hello world".getBytes("ASCII"))), "HEX" }, null);
String string = result.getSubString(1, (int) result.length());
assertEquals("68656C6C6F20776F726C64", string);
}
Aggregations