@Override public int countTableRows(@NotNull final String tableName) { return db.inSession(new InSession<Integer>() { @Override public Integer run(@NotNull final DBSession session) { return countTableRows(session, tableName); } }); }
@Override public void performScript(@NotNull final SqlScript script) { db.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { session.script(script).run(); } }); }
@Override public void performCommand(@NotNull final SqlCommand command) { db.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { session.command(command).run(); } }); }
@Override public void zapSchema() { final ConnectionInfo connectionInfo = db.getConnectionInfo(); if (connectionInfo.databaseName == null) throw new IllegalStateException("Cannot clean schema when the database name is unknown"); if (connectionInfo.schemaName == null) throw new IllegalStateException("Cannot clean schema when the schema name is unknown"); db.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { zapTables(session, connectionInfo, "%", null); } }); }
void performMetaQueryCommands(final SqlQuery<List<String>> metaQuery, final Object... params) { db.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { List<String> commands = session.query(metaQuery).withParams(params).run(); SqlScriptBuilder sb = new SqlScriptBuilder(); for (String command : commands) if (command != null && command.length() > 0) sb.add(command); SqlScript script = sb.build(); session.script(script).run(); } }); }
@Override public void ensureNoTableOrView(final String... names) { final String[] tableTypes = new String[] {"TABLE","VIEW"}; final ConnectionInfo connectionInfo = db.getConnectionInfo(); if (connectionInfo.databaseName == null) throw new IllegalStateException("Cannot clean schema when the database name is unknown"); if (connectionInfo.schemaName == null) throw new IllegalStateException("Cannot clean schema when the schema name is unknown"); db.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { for (String name : names) { zapTables(session, connectionInfo, name, tableTypes); } } }); }
protected void performMetaQueryCommandsIterative(@NotNull final Scriptum scriptum, @NotNull final String metaQueryName, final int retries, final Object... params) { final SqlQuery<List<String>> metaQuery = scriptum.query(metaQueryName, listOf(oneOf(String.class))); db.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { for (int i = 0; i < retries; ++i) { List<String> commands = session.query(metaQuery).withParams(params).run(); try { for (String command : commands) { if (command != null && command.length() > 0) { session.command(command).run(); } } i = retries + 1; } catch (DBException e) { if (i + 1 >= retries) throw e; } } } }); }
@Test public void access_metadata() { DB.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { DatabaseMetaData md = session.getSpecificService(DatabaseMetaData.class, ImplementationAccessibleService.Names.JDBC_METADATA); assertThat(md).isNotNull(); String driverName = null; try { driverName = md.getDriverName(); } catch (SQLException e) { throw new RuntimeException(e.getMessage(), e); } assertThat(driverName).isNotNull(); } }); }
@Test public void access_metaData() { DB.connect(); final StringBuilder b = new StringBuilder(240); b.append("JDBC DatabaseMetaData:\n"); DB.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { DatabaseMetaData md = session.getSpecificService(DatabaseMetaData.class, ImplementationAccessibleService.Names.JDBC_METADATA); assertThat(md).isNotNull(); try { b.append("\tDatabaseProductName: ").append(md.getDatabaseProductName()).append('\n'); b.append("\tDriverName: ").append(md.getDriverName()).append('\n'); b.append("\tUserName: ").append(md.getUserName()).append('\n'); b.append("\tDatabaseProductVersion: ").append(md.getDatabaseProductVersion()).append('\n'); b.append("\tDriverVersion: ").append(md.getDriverVersion()).append('\n'); b.append("\tExtraNameCharacters: ").append(md.getExtraNameCharacters()).append('\n'); b.append("\tIdentifierQuoteString: ").append(md.getIdentifierQuoteString()).append('\n'); } catch (SQLException e) { throw new RuntimeException(e); } } }); System.out.println(b.toString()); }
@Test public void select_1_in_session() { assert DB != null; DB.connect(); DB.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { final Integer v = session.query("select 1 " + TH.fromSingleRowTable(), Layouts.singleOf(Integer.class)) .run(); assertThat(v).isNotNull() .isEqualTo(1); } }); }
@Test public void basic_create_drop() { TH.ensureNoTableOrView("Tab1"); final SqlCommand command1 = new SqlCommand("create table Tab1 (ColA char(1))"); final SqlCommand command2 = new SqlCommand("drop table Tab1"); DB.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { session.command(command1).run(); session.command(command2).run(); } }); }
@Test public void access_metadata() { final SqlQuery<List<Number>> query = new SqlQuery<List<Number>>("select X from X1000", listOf(oneOf(Number.class))); DB.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { DBQueryRunner<List<Number>> qr = session.query(query).packBy(10); qr.run(); ResultSetMetaData md = qr.getSpecificService(ResultSetMetaData.class, ImplementationAccessibleService.Names.JDBC_METADATA); assertThat(md).isNotNull(); String columnName = null; try { columnName = md.getColumnName(1); } catch (SQLException e) { throw new RuntimeException(e.getMessage(), e); } assertThat(columnName).isEqualToIgnoringCase("X"); } }); }