X-Git-Url: http://jaekl.net/gitweb/?p=cfb.git;a=blobdiff_plain;f=prod%2Fnet%2Fjaekl%2Fcfb%2Fdb%2Fdriver%2FDbDriver.java;h=ecfe2a7eae6bd48e4eef3d0160e0380a09a3274d;hp=ac9f8ccdad2030150d25d0fe06cd15078c8d7fb4;hb=58107a0cbb49652e7772ce80fb73d2c027590eb1;hpb=083fb5094456d37fa4765400a461625635fbf77d diff --git a/prod/net/jaekl/cfb/db/driver/DbDriver.java b/prod/net/jaekl/cfb/db/driver/DbDriver.java index ac9f8cc..ecfe2a7 100644 --- a/prod/net/jaekl/cfb/db/driver/DbDriver.java +++ b/prod/net/jaekl/cfb/db/driver/DbDriver.java @@ -30,7 +30,8 @@ public abstract class DbDriver { public abstract Connection connect(String host, int port, String dbName, String user, String pass) throws SQLException; - public boolean createTable(Connection con, Table table) throws SQLException { + public boolean createTable(Connection con, Table table) throws SQLException + { String sql = createTableSql(table); try (PreparedStatement ps = con.prepareStatement(sql)) { ps.executeUpdate(); @@ -42,6 +43,17 @@ public abstract class DbDriver { return true; } + public void dropTable(Connection con, Table table) throws SQLException + { + String sql = dropTableSql(table); + try (PreparedStatement ps = con.prepareStatement(sql)) { + ps.executeUpdate(); + } + catch (SQLException exc) { + throw new SQLException("Failed to drop table: " + sql, exc); + } + } + public boolean createSequence(Connection con, Sequence seq) throws SQLException { String sql = createSequenceSql(seq); @@ -55,6 +67,17 @@ public abstract class DbDriver { return true; } + public void dropSequence(Connection con, Sequence seq) throws SQLException + { + String sql = dropSequenceSql(seq); + try (PreparedStatement ps = con.prepareStatement(sql)) { + ps.executeUpdate(); + } + catch (SQLException exc) { + throw new SQLException("Failed to drop sequence: " + sql, exc); + } + } + public List select(Connection con, Column[] columns, Table[] tables, Condition[] conditions) throws SQLException { @@ -74,7 +97,7 @@ public abstract class DbDriver { while (rs.next()) { Object[] values = new Object[columns.length]; for (index = 0; index < columns.length; ++index) { - values[index] = rs.getObject(index); + values[index] = rs.getObject(index + 1); } Row row = new Row(columns, values); result.add(row); @@ -120,6 +143,22 @@ public abstract class DbDriver { return count; } + public long nextVal(Connection con, Sequence seq) throws SQLException + { + String sql = nextValSql(seq); + + try (PreparedStatement ps = con.prepareStatement(sql)) + { + try (ResultSet rs = ps.executeQuery()) { + if (rs.next()) { + return rs.getLong(1); + } + } + } + + throw new SQLException("No value returned for sequence: " + sql); + } + int checkFlushBatch(PreparedStatement ps, int pendingValues, boolean forceFlush) throws SQLException { int count = 0; @@ -247,10 +286,26 @@ public abstract class DbDriver { return sb.toString(); } + protected String dropTableSql(Table table) { + assert(null != table); + assert(null != table.getName()); + + return "DROP TABLE " + table.getName(); + } + protected String createSequenceSql(Sequence seq) { assert(null != seq); assert(null != seq.getName()); return "CREATE SEQUENCE " + seq.getName(); } + + protected String dropSequenceSql(Sequence seq) { + assert(null != seq); + assert(null != seq.getName()); + + return "DROP SEQUENCE " + seq.getName(); + } + + abstract protected String nextValSql(Sequence seq); }