55 } |
55 } |
56 formatter.writeEndDatabase(); |
56 formatter.writeEndDatabase(); |
57 } |
57 } |
58 |
58 |
59 private void processCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException { |
59 private void processCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException { |
60 SQLCommand.COMMAND_TYPE commandType = sqlCommand.getCommandType(); |
|
61 switch (commandType) { |
|
62 case QUERY: |
|
63 processQueryCommand(sqlCommand, formatter); |
|
64 break; |
|
65 case UPDATE: |
|
66 processUpdateCommand(sqlCommand, formatter); |
|
67 break; |
|
68 default: |
|
69 throw new IllegalArgumentException("Unexpected command type: " + commandType); |
|
70 } |
|
71 } |
|
72 |
|
73 private void processQueryCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException { |
|
74 formatter.writeStartResultSet(); |
|
75 formatter.writeQuery(sqlCommand.getQuery()); |
|
76 formatter.writeParameters(sqlCommand.getParameters()); |
|
77 try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) { |
60 try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) { |
78 sqlCommand.parametrize(ps); |
61 sqlCommand.parametrize(ps); |
79 |
62 |
80 boolean isRS = ps.execute(); |
63 boolean isRS = ps.execute(); |
81 if (isRS) { |
64 if (isRS) { |
82 try (ResultSet rs = ps.getResultSet()) { |
65 try (ResultSet rs = ps.getResultSet()) { |
83 processResultSet(rs, formatter); |
66 processResultSet(sqlCommand, rs, formatter); |
84 } |
67 } |
85 } else { |
68 } else { |
86 /** |
69 processUpdateResult(sqlCommand, ps, formatter); |
87 * TODO: process UPDATE command |
|
88 */ |
|
89 } |
70 } |
90 |
71 |
91 while (ps.getMoreResults() || ps.getUpdateCount() > -1) { |
72 while (ps.getMoreResults() || ps.getUpdateCount() > -1) { |
92 /** |
73 ResultSet rs = ps.getResultSet(); |
93 * TODO: process more RS or UPDATEs |
74 if (rs == null) { |
94 */ |
75 processUpdateResult(sqlCommand, ps, formatter); |
|
76 } else { |
|
77 processResultSet(sqlCommand, rs, formatter); |
|
78 rs.close(); |
|
79 } |
95 } |
80 } |
96 } |
81 } |
|
82 } |
|
83 |
|
84 private void processUpdateResult(SQLCommand sqlCommand, PreparedStatement ps, Formatter formatter) throws SQLException { |
|
85 formatter.writeStartUpdatesResult(); |
|
86 formatter.writeQuery(sqlCommand.getQuery()); |
|
87 formatter.writeParameters(sqlCommand.getParameters()); |
|
88 |
|
89 int updatedRowsCount = ps.getUpdateCount(); |
|
90 formatter.writeUpdatedRowsCount(updatedRowsCount); |
|
91 |
|
92 formatter.writeStartGeneratedKeys(); |
|
93 try (ResultSet rs = ps.getGeneratedKeys()) { |
|
94 processResultSetRows(rs, formatter); |
|
95 } |
|
96 formatter.writeEndGeneratedKeys(); |
|
97 |
|
98 formatter.writeEndUpdatesResult(); |
|
99 } |
|
100 |
|
101 private void processResultSet(SQLCommand sqlCommand, ResultSet rs, Formatter formatter) throws SQLException { |
|
102 formatter.writeStartResultSet(); |
|
103 formatter.writeQuery(sqlCommand.getQuery()); |
|
104 formatter.writeParameters(sqlCommand.getParameters()); |
|
105 |
|
106 processResultSetRows(rs, formatter); |
97 |
107 |
98 formatter.writeEndResultSet(); |
108 formatter.writeEndResultSet(); |
99 } |
109 } |
100 |
110 |
101 private void processUpdateCommand(SQLCommand sqlCommand, Formatter formatter) throws SQLException { |
111 private void processResultSetRows(ResultSet rs, Formatter formatter) throws SQLException { |
102 formatter.writeStartUpdatesResult(); |
|
103 formatter.writeQuery(sqlCommand.getQuery()); |
|
104 formatter.writeParameters(sqlCommand.getParameters()); |
|
105 try (PreparedStatement ps = sqlCommand.prepareStatement(connection)) { |
|
106 sqlCommand.parametrize(ps); |
|
107 int updatedRowsCount = ps.executeUpdate(); |
|
108 formatter.writeUpdatedRowsCount(updatedRowsCount); |
|
109 |
|
110 formatter.writeStartGeneratedKeys(); |
|
111 try (ResultSet rs = ps.getGeneratedKeys()) { |
|
112 processResultSet(rs, formatter); |
|
113 } |
|
114 formatter.writeEndGeneratedKeys(); |
|
115 |
|
116 } |
|
117 |
|
118 formatter.writeEndUpdatesResult(); |
|
119 } |
|
120 |
|
121 private void processResultSet(ResultSet rs, Formatter formatter) throws SQLException { |
|
122 formatter.writeColumnsHeader(new ColumnsHeader(rs.getMetaData())); |
112 formatter.writeColumnsHeader(new ColumnsHeader(rs.getMetaData())); |
123 int columnCount = rs.getMetaData().getColumnCount(); |
113 int columnCount = rs.getMetaData().getColumnCount(); |
124 |
114 |
125 while (rs.next()) { |
115 while (rs.next()) { |
126 formatter.writeStartRow(); |
116 formatter.writeStartRow(); |