use of com.palantir.nexus.db.DBType in project atlasdb by palantir.
the class BasicSQL method selectLightResultSetSpecifyingDBType.
protected AgnosticLightResultSet selectLightResultSetSpecifyingDBType(final Connection c, final FinalSQLString sql, Object[] vs, final DBType dbType, @Nullable Integer fetchSize) throws PalantirSqlException, PalantirInterruptedException {
if (SqlLoggers.LOGGER.isTraceEnabled()) {
SqlLoggers.LOGGER.trace("SQL light result set selection query: {}", sql.getQuery());
}
// $NON-NLS-1$
final ResourceCreationLocation alrsCreationException = new ResourceCreationLocation("This is where the AgnosticLightResultSet wrapper was created");
PreparedStatementVisitor<AgnosticLightResultSet> preparedStatementVisitor = ps -> {
// $NON-NLS-1$
final ResourceCreationLocation creationException = new ResourceCreationLocation("This is where the ResultsSet was created", alrsCreationException);
final ResultSetVisitor<AgnosticLightResultSet> resultSetVisitor = rs -> {
try {
return new AgnosticLightResultSetImpl(rs, dbType, rs.getMetaData(), ps, // $NON-NLS-1$
"selectList", sql, getSqlTimer(), creationException);
} catch (Exception e) {
closeSilently(rs);
BasicSQLUtils.throwUncheckedIfSQLException(e);
throw Throwables.throwUncheckedException(e);
}
};
try {
return runCancellably(ps, resultSetVisitor, sql, AutoClose.FALSE, fetchSize);
} catch (Exception e) {
closeSilently(ps);
BasicSQLUtils.throwUncheckedIfSQLException(e);
throw Throwables.throwUncheckedException(e);
}
};
return wrapPreparedStatement(c, sql, vs, preparedStatementVisitor, // $NON-NLS-1$
"selectList", // don't close the ps
AutoClose.FALSE);
}
use of com.palantir.nexus.db.DBType in project atlasdb by palantir.
the class SQL method handlePtInputStream.
private BlobHandler handlePtInputStream(Connection c, PreparedStatement ps, int i, PTInputStream is) {
if (is.getLength() <= ORACLE_BYTE_LOWER_LIMIT) {
try {
byte[] bytes = IOUtils.toByteArray(is, is.getLength());
Preconditions.checkArgument(bytes.length == is.getLength(), // $NON-NLS-1$
"incorrect length - bytes: %s, input stream: %s", bytes.length, is.getLength());
PreparedStatements.setBytes(ps, i, bytes);
} catch (IOException e) {
// $NON-NLS-1$
throw Throwables.chain(PalantirSqlException.createForChaining(), Throwables.chain(new SQLException("Internal IOException"), e));
} finally {
IOUtils.closeQuietly(is);
}
return null;
} else if (is.getLength() <= Integer.MAX_VALUE) {
if (DBType.getTypeFromConnection(c) == DBType.POSTGRESQL && is.getLength() > SQL.POSTGRES_BLOB_WRITE_LIMIT) {
// $NON-NLS-1$
Validate.isTrue(false, "Postgres only supports blobs up to 1G");
}
PreparedStatements.setBinaryStream(ps, i, is, (int) is.getLength());
return null;
} else {
DBType dbType = DBType.getTypeFromConnection(c);
// $NON-NLS-1$
Validate.isTrue(dbType == DBType.ORACLE, "We only support blobs over 2GB on oracle (postgres only supports blobs up to 1G)");
BlobHandler blobHandler;
try {
blobHandler = getJdbcHandler().createBlob(c);
} catch (SQLException e) {
// $NON-NLS-1$
sqlExceptionlog.debug("Caught SQLException", e);
throw PalantirSqlException.create(e);
}
OutputStream os = null;
try {
os = blobHandler.setBinaryStream(0);
PTStreams.copy(is, os);
os.close();
ps.setBlob(i, blobHandler.getBlob());
} catch (Exception e) {
try {
blobHandler.freeTemporary();
} catch (Exception e1) {
// $NON-NLS-1$
SqlLoggers.LOGGER.error("failed to free temp blob", e1);
}
// $NON-NLS-1$
throw Throwables.chain(PalantirSqlException.createForChaining(), Throwables.chain(new SQLException("failed to transfer blob over 2GB to the DB"), e));
} finally {
IOUtils.closeQuietly(os);
}
return blobHandler;
}
}
use of com.palantir.nexus.db.DBType in project atlasdb by palantir.
the class SQLString method registerQuery.
/**
* Same as the overloaded registerQuery, but overrides the query for a specific DBType.
* @param key Unique identifier representing this query
* @param sql The query that will be stored
* @param dbTypes Override the query for this list of DBTypes. These are not allowed to be null.
*/
public static void registerQuery(String key, String sql, DBType... dbTypes) {
// $NON-NLS-1$
Validate.notEmpty(dbTypes, "DbType list may not be empty");
for (DBType type : dbTypes) {
// $NON-NLS-1$
Validate.notNull(type, "dbType must not be null");
registerQuery(key, sql, type);
}
}
Aggregations