/**Execute the PreparedStatement asynchronously, cancel it if we're interrupted, and return the result set if we're not. Throws a RuntimeException (PalantirInterruptedException) in case of interrupts. */ private <T> T runCancellably(PreparedStatement ps, ResultSetVisitor<T> visitor, FinalSQLString sql, @Nullable Integer fetchSize) throws PalantirInterruptedException, PalantirSqlException { return runCancellably(ps, visitor, sql, AutoClose.TRUE, fetchSize); }
protected boolean selectExistsInternal(final Connection c, final FinalSQLString sql, Object... vs) throws PalantirSqlException { if (SqlLoggers.LOGGER.isTraceEnabled()) { SqlLoggers.LOGGER.trace("SQL selectExistsInternal query: {}", sql.getQuery()); } return wrapPreparedStatement(c, sql, vs, ps -> { PreparedStatements.setMaxRows(ps, 1); return runCancellably(ps, rs -> ResultSets.next(rs), sql, null); }, "selectExists"); //$NON-NLS-1$ }
protected AgnosticResultSet selectResultSetSpecifyingDBType(final Connection c, final FinalSQLString sql, Object[] vs, final DBType dbType) throws PalantirSqlException, PalantirInterruptedException { if (SqlLoggers.LOGGER.isTraceEnabled()) { SqlLoggers.LOGGER.trace("SQL result set query: {}", sql.getQuery()); } return wrapPreparedStatement(c, sql, vs, ps -> runCancellably(ps, (ResultSetVisitor<AgnosticResultSet>) rs -> { List<List<Object>> rvs = new ArrayList<List<Object>>(); ResultSetMetaData meta = ResultSets.getMetaData(rs); int columnCount = ResultSets.getColumnCount(meta); Map<String, Integer> columnMap = ResultSets.buildInMemoryColumnMap(meta, dbType); while (ResultSets.next(rs)) { List<Object> row = Lists.newArrayListWithCapacity(columnCount); for (int i=0; i < columnCount; i++) { row.add(ResultSets.getObject(rs, i+1)); } rvs.add(row); } return new AgnosticResultSetImpl(rvs, dbType, columnMap); }, sql, null), "selectList"); //$NON-NLS-1$ }
protected int selectIntegerInternal(final Connection c, final FinalSQLString sql, Object... vs) throws PalantirSqlException { if (SqlLoggers.LOGGER.isTraceEnabled()) { SqlLoggers.LOGGER.trace("SQL selectIntegerInternal query: {}", sql.getQuery()); } return wrapPreparedStatement(c, sql, vs, ps -> runCancellably(ps, rs -> { if (ResultSets.next(rs)) { int ret = ResultSets.getInt(rs, 1); if (ResultSets.next(rs)) { SqlLoggers.LOGGER.error( "In selectIntegerInternal more than one row was returned for query: {}", sql); //$NON-NLS-1$ assert false : "Found more than one row in SQL#selectInteger"; //$NON-NLS-1$ } return ret; } // indicate failure throw PalantirSqlException.create("No rows returned."); //$NON-NLS-1$ }, sql, null), "selectInteger"); //$NON-NLS-1$ }
SqlLoggers.LOGGER.trace("SQL selectLongInternal query: {}", sql.getQuery()); return wrapPreparedStatement(c, sql, vs, ps -> runCancellably(ps, rs -> { if (ResultSets.next(rs)) { Long ret = null;
return runCancellably(ps, resultSetVisitor, sql, AutoClose.FALSE, fetchSize); } catch (Exception e) { closeSilently(ps);
/**Execute the PreparedStatement asynchronously, cancel it if we're interrupted, and return the result set if we're not. Throws a RuntimeException (PalantirInterruptedException) in case of interrupts. */ private <T> T runCancellably(PreparedStatement ps, ResultSetVisitor<T> visitor, FinalSQLString sql, @Nullable Integer fetchSize) throws PalantirInterruptedException, PalantirSqlException { return runCancellably(ps, visitor, sql, AutoClose.TRUE, fetchSize); }
protected boolean selectExistsInternal(final Connection c, final FinalSQLString sql, Object... vs) throws PalantirSqlException { if (SqlLoggers.LOGGER.isTraceEnabled()) { SqlLoggers.LOGGER.trace("SQL selectExistsInternal query: {}", sql.getQuery()); } return wrapPreparedStatement(c, sql, vs, ps -> { PreparedStatements.setMaxRows(ps, 1); return runCancellably(ps, rs -> ResultSets.next(rs), sql, null); }, "selectExists"); //$NON-NLS-1$ }
protected AgnosticResultSet selectResultSetSpecifyingDBType(final Connection c, final FinalSQLString sql, Object[] vs, final DBType dbType) throws PalantirSqlException, PalantirInterruptedException { if (SqlLoggers.LOGGER.isTraceEnabled()) { SqlLoggers.LOGGER.trace("SQL result set query: {}", sql.getQuery()); } return wrapPreparedStatement(c, sql, vs, ps -> runCancellably(ps, (ResultSetVisitor<AgnosticResultSet>) rs -> { List<List<Object>> rvs = new ArrayList<List<Object>>(); ResultSetMetaData meta = ResultSets.getMetaData(rs); int columnCount = ResultSets.getColumnCount(meta); Map<String, Integer> columnMap = ResultSets.buildInMemoryColumnMap(meta, dbType); while (ResultSets.next(rs)) { List<Object> row = Lists.newArrayListWithCapacity(columnCount); for (int i=0; i < columnCount; i++) { row.add(ResultSets.getObject(rs, i+1)); } rvs.add(row); } return new AgnosticResultSetImpl(rvs, dbType, columnMap); }, sql, null), "selectList"); //$NON-NLS-1$ }
protected int selectIntegerInternal(final Connection c, final FinalSQLString sql, Object... vs) throws PalantirSqlException { if (SqlLoggers.LOGGER.isTraceEnabled()) { SqlLoggers.LOGGER.trace("SQL selectIntegerInternal query: {}", sql.getQuery()); } return wrapPreparedStatement(c, sql, vs, ps -> runCancellably(ps, rs -> { if (ResultSets.next(rs)) { int ret = ResultSets.getInt(rs, 1); if (ResultSets.next(rs)) { SqlLoggers.LOGGER.error( "In selectIntegerInternal more than one row was returned for query: {}", sql); //$NON-NLS-1$ assert false : "Found more than one row in SQL#selectInteger"; //$NON-NLS-1$ } return ret; } // indicate failure throw PalantirSqlException.create("No rows returned."); //$NON-NLS-1$ }, sql, null), "selectInteger"); //$NON-NLS-1$ }
SqlLoggers.LOGGER.trace("SQL selectLongInternal query: {}", sql.getQuery()); return wrapPreparedStatement(c, sql, vs, ps -> runCancellably(ps, rs -> { if (ResultSets.next(rs)) { Long ret = null;
return runCancellably(ps, resultSetVisitor, sql, AutoClose.FALSE, fetchSize); } catch (Exception e) { closeSilently(ps);