use of org.teiid.core.types.InputStreamFactory in project teiid by teiid.
the class ResultSetImpl method getObjectDirect.
/**
* Get the value of the current row at the column index specified.
* @param column Column index
* @return Value at column, which may be null
* @throws SQLException if this result set has an exception
*/
public Object getObjectDirect(int column) throws SQLException {
checkClosed();
if (column < 1 || column > columnCount) {
// $NON-NLS-1$
throw new IllegalArgumentException(JDBCPlugin.Util.getString("ResultsImpl.Invalid_col_index", column));
}
List<?> cursorRow = batchResults.getCurrentRow();
if (cursorRow == null) {
// $NON-NLS-1$
throw new TeiidSQLException(JDBCPlugin.Util.getString("ResultsImpl.The_cursor_is_not_on_a_valid_row._1"));
}
// defect 13539 - set the currentValue (defined in MMResultSet) so that wasNull() accurately returns whether this value was null
currentValue = cursorRow.get(column - 1);
if (currentValue instanceof Streamable<?>) {
Object reference = ((Streamable<?>) currentValue).getReference();
if (reference != null) {
return reference;
}
if (currentValue instanceof ClobType) {
return new ClobImpl(createInputStreamFactory((ClobType) currentValue), ((ClobType) currentValue).getLength());
} else if (currentValue instanceof BlobType) {
InputStreamFactory isf = createInputStreamFactory((BlobType) currentValue);
isf.setLength(((BlobType) currentValue).getLength());
return new BlobImpl(isf);
} else if (currentValue instanceof XMLType) {
XMLType val = (XMLType) currentValue;
SQLXMLImpl impl = new SQLXMLImpl(createInputStreamFactory(val));
impl.setEncoding(val.getEncoding());
return impl;
}
} else if (currentValue instanceof java.util.Date) {
return TimestampWithTimezone.create((java.util.Date) currentValue, serverTimeZone, getDefaultCalendar(), currentValue.getClass());
} else if (maxFieldSize > 0 && currentValue instanceof String) {
String val = (String) currentValue;
return val.substring(0, Math.min(maxFieldSize / 2, val.length()));
} else if (currentValue instanceof BinaryType) {
BinaryType val = (BinaryType) currentValue;
return val.getBytesDirect();
}
return currentValue;
}
use of org.teiid.core.types.InputStreamFactory in project teiid by teiid.
the class CouchbaseDirectQueryExecution method next.
@Override
public List<?> next() throws TranslatorException, DataNotAvailableException {
ArrayList<Object[]> returns = new ArrayList<>(1);
ArrayList<Object> result = new ArrayList<>(1);
if (this.results != null && this.results.hasNext()) {
final N1qlQueryRow row = this.results.next();
InputStreamFactory isf = new InputStreamFactory() {
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(row.byteValue());
}
};
result.add(new BlobType(new BlobImpl(isf)));
returns.add(result.toArray());
return returns;
} else {
return null;
}
}
use of org.teiid.core.types.InputStreamFactory in project teiid by teiid.
the class ObjectDecoderInputStream method readObjectOverride.
@Override
protected final Object readObjectOverride() throws IOException, ClassNotFoundException {
if (result == null) {
if (!foundLength) {
clearRemaining();
remaining = dis.readInt();
foundLength = true;
if (remaining <= 0) {
// $NON-NLS-1$
throw new StreamCorruptedException("invalid data length: " + remaining);
}
if (remaining > maxObjectSize) {
throw new StreamCorruptedException(JDBCPlugin.Util.gs(JDBCPlugin.Event.TEIID20028, remaining, maxObjectSize));
}
}
foundLength = false;
CompactObjectInputStream cois = new CompactObjectInputStream(subStream, classLoader);
result = cois.readObject();
streams = ExternalizeUtil.readList(cois, StreamFactoryReference.class);
streamIndex = 0;
}
while (streamIndex < streams.size()) {
if (!foundLength) {
clearRemaining();
// convert to unsigned
remaining = 0xffff & dis.readShort();
foundLength = true;
if (remaining < 0) {
// $NON-NLS-1$
throw new StreamCorruptedException("Invalid stream chunk length");
}
}
if (stream == null) {
// $NON-NLS-1$
final File f = File.createTempFile("teiid", null);
StreamFactoryReference sfr = streams.get(streamIndex);
sfr.setStreamFactory(new InputStreamFactory() {
@Override
public InputStream getInputStream() throws IOException {
return new BufferedInputStream(new FileInputStream(f));
}
@Override
protected void finalize() throws Throwable {
super.finalize();
f.delete();
}
});
this.stream = new FileOutputStream(f);
}
foundLength = false;
if (remaining != 0) {
int available = Math.min(remaining, in.getCount() - in.getPosition());
if (available > 0) {
this.stream.write(in.getBuffer(), in.getPosition(), available);
in.setPosition(in.getPosition() + available);
remaining -= available;
}
if (remaining > 0) {
ObjectConverterUtil.write(this.stream, in, in.getBuffer(), remaining, false);
remaining = 0;
}
continue;
}
stream.close();
stream = null;
streamIndex++;
}
Object toReturn = result;
result = null;
streams = null;
stream = null;
return toReturn;
}
use of org.teiid.core.types.InputStreamFactory in project teiid by teiid.
the class CouchbaseProcedureExecution method next.
@Override
public List<?> next() throws TranslatorException, DataNotAvailableException {
if (this.results != null && this.results.hasNext()) {
final N1qlQueryRow row = this.results.next();
String procName = this.call.getProcedureName();
if (procName.equalsIgnoreCase(GETDOCUMENTS) || procName.equalsIgnoreCase(GETDOCUMENT)) {
ArrayList<Object> result = new ArrayList<>(1);
InputStreamFactory isf = new InputStreamFactory() {
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(row.byteValue());
}
};
Object value = new BlobType(new BlobImpl(isf));
result.add(value);
return result;
}
}
return null;
}
use of org.teiid.core.types.InputStreamFactory in project teiid by teiid.
the class ODataSQLBuilder method updateStreamProperty.
public Update updateStreamProperty(EdmProperty edmProperty, final InputStream content) throws TeiidException {
Update update = new Update();
update.setGroup(this.context.getGroupSymbol());
Column column = this.context.getColumnByName(edmProperty.getName());
ElementSymbol symbol = new ElementSymbol(column.getName(), this.context.getGroupSymbol());
update.addChange(symbol, new Reference(0));
Class<?> lobType = DataTypeManager.getDataTypeClass(column.getRuntimeType());
int sqlType = JDBCSQLTypeInfo.getSQLType(column.getRuntimeType());
if (content == null) {
this.params.add(new SQLParameter(null, sqlType));
} else {
Object value = null;
InputStreamFactory isf = new InputStreamFactory() {
@Override
public InputStream getInputStream() throws IOException {
return content;
}
};
if (lobType.isAssignableFrom(SQLXML.class)) {
value = new SQLXMLImpl(isf);
} else if (lobType.isAssignableFrom(ClobType.class)) {
value = new ClobImpl(isf, -1);
} else if (lobType.isAssignableFrom(BlobType.class)) {
value = new BlobImpl(isf);
} else {
throw new TeiidException(ODataPlugin.Util.gs(ODataPlugin.Event.TEIID16031, column.getName()));
}
this.params.add(new SQLParameter(value, sqlType));
}
update.setCriteria(this.context.getCriteria());
return update;
}
Aggregations