@Override public void configure(final Env env, final Config conf, final Binder binder) { Key<DataSource> dskey = Key.get(DataSource.class, Names.named(name)); Supplier<NoSuchElementException> noSuchElement = () -> new NoSuchElementException( "DataSource missing: " + dskey); HikariDataSource ds = (HikariDataSource) env.get(dskey).orElseThrow(noSuchElement); Configuration jooqconf = new DefaultConfiguration(); ConnectionProvider dscp = new DataSourceConnectionProvider(ds); jooqconf.set(JDBCUtils.dialect(env.get(Key.get(String.class, Names.named(name + ".url"))) .orElseThrow(noSuchElement))); jooqconf.set(dscp); jooqconf.set(new DefaultTransactionProvider(dscp)); if (callback != null) { callback.accept(jooqconf, conf); } ServiceKey serviceKey = env.serviceKey(); serviceKey.generate(Configuration.class, name, k -> binder.bind(k).toInstance(jooqconf)); Provider<DSLContext> dsl = () -> DSL.using(jooqconf); serviceKey.generate(DSLContext.class, name, k -> binder.bind(k).toProvider(dsl)); } }
@Override public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data, sql); result.resultSetType = resultSetType; result.resultSetConcurrency = resultSetConcurrency; result.resultSetHoldability = resultSetHoldability; return result; }
@SuppressWarnings("resource") @Override public ResultSet getResultSet() throws SQLException { checkNotClosed(); return (result != null && resultIndex < result.length && result[resultIndex].data != null) ? new MockResultSet(result[resultIndex].data, maxRows) : null; }
@Override public int[] executeBatch() throws SQLException { checkNotClosed(); Object[][] matrix = new Object[bindings.size() - 1][]; for (int i = 0; i < bindings.size() - 1; i++) matrix[i] = bindings.get(i).toArray(); result = data.execute(new MockExecuteContext(sql.toArray(new String[0]), matrix)); int[] rows = new int[result.length]; for (int i = 0; i < result.length; i++) rows[i] = result[i].rows; return rows; }
/** * Safely close a result set and / or a statement. * <p> * This method will silently ignore if <code>resultSet</code> or * <code>statement</code> is <code>null</code>, or if * {@link ResultSet#close()} or {@link Statement#close()} throws an * exception. */ public static final void safeClose(ResultSet resultSet, PreparedStatement statement) { safeClose(resultSet); safeClose(statement); }
@Override public Savepoint setSavepoint(String name) throws SQLException { checkNotClosed(); return new MockSavepoint(name); }
/** * Create a new {@link MockDataProvider} that always returns a single record * for all queries. */ public static final MockDataProvider of(int rows) { return of(new MockResult(rows, null)); }
@Override public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data, sql); result.autoGeneratedKeys = autoGeneratedKeys; return result; }
@SuppressWarnings("resource") @Override public ResultSet getResultSet() throws SQLException { checkNotClosed(); return (result != null && resultIndex < result.length && result[resultIndex].data != null) ? new MockResultSet(result[resultIndex].data, maxRows) : null; }
@Override public Savepoint setSavepoint() throws SQLException { checkNotClosed(); return new MockSavepoint(); }
@Override public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data, sql); result.resultSetType = resultSetType; result.resultSetConcurrency = resultSetConcurrency; result.resultSetHoldability = resultSetHoldability; return result; }
@Override public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data); result.resultSetType = resultSetType; result.resultSetConcurrency = resultSetConcurrency; result.resultSetHoldability = resultSetHoldability; return result; }
@Override public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data, sql); result.autoGeneratedKeys = Statement.RETURN_GENERATED_KEYS; result.columnNames = columnNames; return result; }
@Override public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data, sql); result.autoGeneratedKeys = Statement.RETURN_GENERATED_KEYS; result.columnIndexes = columnIndexes; return result; }
@Override public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data, sql); result.resultSetType = resultSetType; result.resultSetConcurrency = resultSetConcurrency; result.resultSetHoldability = resultSetHoldability; return result; }
@Override public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data); result.resultSetType = resultSetType; result.resultSetConcurrency = resultSetConcurrency; result.resultSetHoldability = resultSetHoldability; return result; }
@Override public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data, sql); result.autoGeneratedKeys = Statement.RETURN_GENERATED_KEYS; result.columnNames = columnNames; return result; }
@Override public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data, sql); result.autoGeneratedKeys = autoGeneratedKeys; return result; }
@Override public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data, sql); result.autoGeneratedKeys = Statement.RETURN_GENERATED_KEYS; result.columnIndexes = columnIndexes; return result; }
@Override public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { checkNotClosed(); MockStatement result = new MockStatement(this, data, sql); result.resultSetType = resultSetType; result.resultSetConcurrency = resultSetConcurrency; result.resultSetHoldability = resultSetHoldability; return result; }