Search in sources :

Example 11 with BlobImpl

use of org.teiid.core.types.BlobImpl 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;
}
Also used : SQLXMLImpl(org.teiid.core.types.SQLXMLImpl) BinaryType(org.teiid.core.types.BinaryType) InputStreamFactory(org.teiid.core.types.InputStreamFactory) ClobType(org.teiid.core.types.ClobType) XMLType(org.teiid.core.types.XMLType) BlobType(org.teiid.core.types.BlobType) Streamable(org.teiid.core.types.Streamable) ClobImpl(org.teiid.core.types.ClobImpl) BlobImpl(org.teiid.core.types.BlobImpl)

Example 12 with BlobImpl

use of org.teiid.core.types.BlobImpl 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;
    }
}
Also used : N1qlQueryRow(com.couchbase.client.java.query.N1qlQueryRow) BlobType(org.teiid.core.types.BlobType) ByteArrayInputStream(java.io.ByteArrayInputStream) ArrayList(java.util.ArrayList) InputStreamFactory(org.teiid.core.types.InputStreamFactory) BlobImpl(org.teiid.core.types.BlobImpl)

Example 13 with BlobImpl

use of org.teiid.core.types.BlobImpl 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;
}
Also used : N1qlQueryRow(com.couchbase.client.java.query.N1qlQueryRow) BlobType(org.teiid.core.types.BlobType) ByteArrayInputStream(java.io.ByteArrayInputStream) ArrayList(java.util.ArrayList) InputStreamFactory(org.teiid.core.types.InputStreamFactory) BlobImpl(org.teiid.core.types.BlobImpl)

Example 14 with BlobImpl

use of org.teiid.core.types.BlobImpl 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;
}
Also used : ElementSymbol(org.teiid.query.sql.symbol.ElementSymbol) SQLXMLImpl(org.teiid.core.types.SQLXMLImpl) Reference(org.teiid.query.sql.symbol.Reference) SQLParameter(org.teiid.odata.api.SQLParameter) InputStreamFactory(org.teiid.core.types.InputStreamFactory) SubqueryHint(org.teiid.query.sql.lang.ExistsCriteria.SubqueryHint) TeiidException(org.teiid.core.TeiidException) ClobType(org.teiid.core.types.ClobType) Column(org.teiid.metadata.Column) ClobImpl(org.teiid.core.types.ClobImpl) BlobImpl(org.teiid.core.types.BlobImpl)

Example 15 with BlobImpl

use of org.teiid.core.types.BlobImpl in project teiid by teiid.

the class TestJDBCSocketTransport method testGeometryStreaming.

@Test
public void testGeometryStreaming() throws Exception {
    StringBuilder geomString = new StringBuilder();
    for (int i = 0; i < 600; i++) {
        geomString.append("100 100,");
    }
    geomString.append("100 100");
    final GeometryType geo = GeometryUtils.geometryFromClob(new ClobType(new ClobImpl("POLYGON ((" + geomString + "))")));
    long length = geo.length();
    PreparedStatement s = conn.prepareStatement("select st_geomfrombinary(?)");
    s.setBlob(1, new BlobImpl(new InputStreamFactory() {

        @Override
        public InputStream getInputStream() throws IOException {
            try {
                return geo.getBinaryStream();
            } catch (SQLException e) {
                throw new IOException(e);
            }
        }
    }));
    ResultSet rs = s.executeQuery();
    rs.next();
    Blob b = rs.getBlob(1);
    assertEquals(length, b.length());
    b.getBytes(1, (int) b.length());
    toggleInline(false);
    rs = s.executeQuery();
    rs.next();
    b = rs.getBlob(1);
    assertEquals(length, b.length());
    b.getBytes(1, (int) b.length());
}
Also used : Blob(java.sql.Blob) TeiidSQLException(org.teiid.jdbc.TeiidSQLException) SQLException(java.sql.SQLException) PreparedStatement(java.sql.PreparedStatement) IOException(java.io.IOException) InputStreamFactory(org.teiid.core.types.InputStreamFactory) ClobType(org.teiid.core.types.ClobType) GeometryType(org.teiid.core.types.GeometryType) ResultSet(java.sql.ResultSet) ClobImpl(org.teiid.core.types.ClobImpl) BlobImpl(org.teiid.core.types.BlobImpl) Test(org.junit.Test)

Aggregations

BlobImpl (org.teiid.core.types.BlobImpl)15 InputStreamFactory (org.teiid.core.types.InputStreamFactory)12 BlobType (org.teiid.core.types.BlobType)11 IOException (java.io.IOException)9 ClobImpl (org.teiid.core.types.ClobImpl)8 InputStream (java.io.InputStream)6 SQLException (java.sql.SQLException)6 ClobType (org.teiid.core.types.ClobType)6 ByteArrayInputStream (java.io.ByteArrayInputStream)5 Blob (java.sql.Blob)5 SQLXMLImpl (org.teiid.core.types.SQLXMLImpl)5 ArrayList (java.util.ArrayList)3 SerialBlob (javax.sql.rowset.serial.SerialBlob)3 FileStoreOutputStream (org.teiid.common.buffer.FileStore.FileStoreOutputStream)3 BinaryType (org.teiid.core.types.BinaryType)3 GeometryType (org.teiid.core.types.GeometryType)3 N1qlQueryRow (com.couchbase.client.java.query.N1qlQueryRow)2 BigInteger (java.math.BigInteger)2 SQLXML (java.sql.SQLXML)2 Test (org.junit.Test)2