1.1 --- a/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java Mon Dec 23 00:14:29 2013 +0100
1.2 +++ b/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java Mon Dec 23 11:50:24 2013 +0100
1.3 @@ -57,68 +57,58 @@
1.4 }
1.5
1.6 private void processCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
1.7 - SQLCommand.COMMAND_TYPE commandType = sqlCommand.getCommandType();
1.8 - switch (commandType) {
1.9 - case QUERY:
1.10 - processQueryCommand(sqlCommand, formatter);
1.11 - break;
1.12 - case UPDATE:
1.13 - processUpdateCommand(sqlCommand, formatter);
1.14 - break;
1.15 - default:
1.16 - throw new IllegalArgumentException("Unexpected command type: " + commandType);
1.17 - }
1.18 - }
1.19 -
1.20 - private void processQueryCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
1.21 - formatter.writeStartResultSet();
1.22 - formatter.writeQuery(sqlCommand.getQuery());
1.23 - formatter.writeParameters(sqlCommand.getParameters());
1.24 try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) {
1.25 sqlCommand.parametrize(ps);
1.26
1.27 boolean isRS = ps.execute();
1.28 if (isRS) {
1.29 try (ResultSet rs = ps.getResultSet()) {
1.30 - processResultSet(rs, formatter);
1.31 + processResultSet(sqlCommand, rs, formatter);
1.32 }
1.33 } else {
1.34 - /**
1.35 - * TODO: process UPDATE command
1.36 - */
1.37 + processUpdateResult(sqlCommand, ps, formatter);
1.38 }
1.39
1.40 while (ps.getMoreResults() || ps.getUpdateCount() > -1) {
1.41 - /**
1.42 - * TODO: process more RS or UPDATEs
1.43 - */
1.44 + ResultSet rs = ps.getResultSet();
1.45 + if (rs == null) {
1.46 + processUpdateResult(sqlCommand, ps, formatter);
1.47 + } else {
1.48 + processResultSet(sqlCommand, rs, formatter);
1.49 + rs.close();
1.50 + }
1.51 }
1.52 }
1.53 + }
1.54 +
1.55 + private void processUpdateResult(SQLCommand sqlCommand, PreparedStatement ps, Formatter formatter) throws SQLException {
1.56 + formatter.writeStartUpdatesResult();
1.57 + formatter.writeQuery(sqlCommand.getQuery());
1.58 + formatter.writeParameters(sqlCommand.getParameters());
1.59 +
1.60 + int updatedRowsCount = ps.getUpdateCount();
1.61 + formatter.writeUpdatedRowsCount(updatedRowsCount);
1.62 +
1.63 + formatter.writeStartGeneratedKeys();
1.64 + try (ResultSet rs = ps.getGeneratedKeys()) {
1.65 + processResultSetRows(rs, formatter);
1.66 + }
1.67 + formatter.writeEndGeneratedKeys();
1.68 +
1.69 + formatter.writeEndUpdatesResult();
1.70 + }
1.71 +
1.72 + private void processResultSet(SQLCommand sqlCommand, ResultSet rs, Formatter formatter) throws SQLException {
1.73 + formatter.writeStartResultSet();
1.74 + formatter.writeQuery(sqlCommand.getQuery());
1.75 + formatter.writeParameters(sqlCommand.getParameters());
1.76 +
1.77 + processResultSetRows(rs, formatter);
1.78
1.79 formatter.writeEndResultSet();
1.80 }
1.81
1.82 - private void processUpdateCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
1.83 - formatter.writeStartUpdatesResult();
1.84 - formatter.writeQuery(sqlCommand.getQuery());
1.85 - formatter.writeParameters(sqlCommand.getParameters());
1.86 - try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) {
1.87 - sqlCommand.parametrize(ps);
1.88 - int updatedRowsCount = ps.executeUpdate();
1.89 - formatter.writeUpdatedRowsCount(updatedRowsCount);
1.90 -
1.91 - formatter.writeStartGeneratedKeys();
1.92 - try (ResultSet rs = ps.getGeneratedKeys()) {
1.93 - processResultSet(rs, formatter);
1.94 - }
1.95 - formatter.writeEndGeneratedKeys();
1.96 -
1.97 - }
1.98 -
1.99 - formatter.writeEndUpdatesResult();
1.100 - }
1.101 -
1.102 - private void processResultSet(ResultSet rs, Formatter formatter) throws SQLException {
1.103 + private void processResultSetRows(ResultSet rs, Formatter formatter) throws SQLException {
1.104 formatter.writeColumnsHeader(new ColumnsHeader(rs.getMetaData()));
1.105 int columnCount = rs.getMetaData().getColumnCount();
1.106