Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
--- a/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java Tue Jan 07 21:53:24 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java Tue Jan 07 21:54:59 2014 +0100
@@ -66,7 +66,11 @@
public void executeQuery(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
formatter.writeStartBatch();
formatter.writeStartDatabase(databaseDefinition);
+ formatter.writeStartStatement();
+ formatter.writeQuery(sqlCommand.getQuery());
+ formatter.writeParameters(sqlCommand.getParameters());
processCommand(sqlCommand, formatter);
+ formatter.writeEndStatement();
formatter.writeEndDatabase();
formatter.writeEndBatch();
}
@@ -75,7 +79,12 @@
formatter.writeStartBatch();
formatter.writeStartDatabase(databaseDefinition);
while (batch.hasNext()) {
- processCommand(batch.next(), formatter);
+ SQLCommand sqlCommand = batch.next();
+ formatter.writeStartStatement();
+ formatter.writeQuery(sqlCommand.getQuery());
+ formatter.writeParameters(sqlCommand.getParameters());
+ processCommand(sqlCommand, formatter);
+ formatter.writeEndStatement();
}
formatter.writeEndDatabase();
formatter.writeEndBatch();
@@ -90,19 +99,19 @@
log.log(Level.FINE, "Statement executed");
if (isRS) {
try (ResultSet rs = ps.getResultSet()) {
- processResultSet(sqlCommand, rs, formatter);
+ processResultSet(rs, formatter);
}
} else {
- processUpdateResult(sqlCommand, ps, formatter);
+ processUpdateResult(ps, formatter);
}
logWarnings(ps);
while (ps.getMoreResults() || ps.getUpdateCount() > -1) {
ResultSet rs = ps.getResultSet();
if (rs == null) {
- processUpdateResult(sqlCommand, ps, formatter);
+ processUpdateResult(ps, formatter);
} else {
- processResultSet(sqlCommand, rs, formatter);
+ processResultSet(rs, formatter);
rs.close();
}
logWarnings(ps);
@@ -110,26 +119,13 @@
}
}
- private void processUpdateResult(SQLCommand sqlCommand, PreparedStatement ps, Formatter formatter) throws SQLException {
- formatter.writeStartUpdatesResult();
- formatter.writeQuery(sqlCommand.getQuery());
- formatter.writeParameters(sqlCommand.getParameters());
- formatter.writeUpdatedRowsCount(ps.getUpdateCount());
- formatter.writeEndUpdatesResult();
+ private void processUpdateResult(PreparedStatement ps, Formatter formatter) throws SQLException {
+ formatter.writeUpdatesResult(ps.getUpdateCount());
}
- private void processResultSet(SQLCommand sqlCommand, ResultSet rs, Formatter formatter) throws SQLException {
- formatter.writeStartResultSet();
- formatter.writeQuery(sqlCommand.getQuery());
- formatter.writeParameters(sqlCommand.getParameters());
+ private void processResultSet(ResultSet rs, Formatter formatter) throws SQLException {
+ formatter.writeStartResultSet(new ColumnsHeader(rs.getMetaData()));
- processResultSetRows(rs, formatter);
-
- formatter.writeEndResultSet();
- }
-
- private void processResultSetRows(ResultSet rs, Formatter formatter) throws SQLException {
- formatter.writeColumnsHeader(new ColumnsHeader(rs.getMetaData()));
int columnCount = rs.getMetaData().getColumnCount();
while (rs.next()) {
@@ -142,6 +138,7 @@
formatter.writeEndRow();
}
+ formatter.writeEndResultSet();
}
private void logWarnings(PreparedStatement ps) throws SQLException {
--- a/java/sql-dk/src/info/globalcode/sql/dk/InfoLister.java Tue Jan 07 21:53:24 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/InfoLister.java Tue Jan 07 21:54:59 2014 +0100
@@ -77,7 +77,9 @@
formatter = f;
formatter.writeStartBatch();
formatter.writeStartDatabase(new DatabaseDefinition());
+ formatter.writeStartStatement();
showInfos(commands);
+ formatter.writeEndStatement();
formatter.writeEndDatabase();
formatter.writeEndBatch();
formatter.close();
@@ -201,8 +203,7 @@
}
private void printTable(Formatter formatter, ColumnsHeader header, List<Object[]> data) throws ConfigurationException, FormatterException {
- formatter.writeStartResultSet();
- formatter.writeColumnsHeader(header);
+ formatter.writeStartResultSet(header);
for (Object[] row : data) {
formatter.writeStartRow();
--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/AbstractFormatter.java Tue Jan 07 21:53:24 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/AbstractFormatter.java Tue Jan 07 21:54:59 2014 +0100
@@ -46,25 +46,22 @@
* root
* .batch
* ..database
- * ...resultSet
+ * ...statement
* ....@query
* ....@parameters
- * ....@columnsHeader
- * ....row
- * .....@columnValue
- * ...updatesResult
- * ....@query
- * ....@parameters
- * ....@updatedRowsCount
+ * ....resultSet
+ * .....row
+ * ......@columnValue
+ * ....@updatesResult
*/
protected enum State {
ROOT,
BATCH,
DATABASE,
+ STATEMENT,
RESULT_SET,
- ROW,
- UPDATES_RESULT
+ ROW
}
/**
@@ -142,20 +139,31 @@
}
@Override
- public void writeStartResultSet() {
- pushState(State.RESULT_SET, EnumSet.of(State.DATABASE));
+ public void writeStartStatement() {
+ pushState(State.STATEMENT, EnumSet.of(State.DATABASE));
+ }
+
+ @Override
+ public void writeEndStatement() {
+ popState(EnumSet.of(State.DATABASE));
+ }
+
+ @Override
+ public void writeStartResultSet(ColumnsHeader header) {
+ pushState(State.RESULT_SET, EnumSet.of(State.STATEMENT));
currentRowCount = 0;
+ currentColumnsHeader = header;
}
@Override
public void writeEndResultSet() {
- popState(EnumSet.of(State.DATABASE));
+ popState(EnumSet.of(State.STATEMENT));
currentColumnsHeader = null;
}
@Override
public void writeQuery(String sql) {
- peekState(EnumSet.of(State.RESULT_SET, State.UPDATES_RESULT));
+ peekState(EnumSet.of(State.STATEMENT));
if (currentColumnsHeader == null) {
currentQuery = sql;
@@ -166,7 +174,7 @@
@Override
public void writeParameters(List<? extends Parameter> parameters) {
- peekState(EnumSet.of(State.RESULT_SET, State.UPDATES_RESULT));
+ peekState(EnumSet.of(State.STATEMENT));
if (currentColumnsHeader != null) {
throw new IllegalStateException("Parameters '" + parameters + "' must be set before columns header – was already set: " + currentColumnsHeader);
@@ -178,17 +186,6 @@
}
@Override
- public void writeColumnsHeader(ColumnsHeader header) {
- peekState(EnumSet.of(State.RESULT_SET));
-
- if (currentColumnsHeader == null) {
- currentColumnsHeader = header;
- } else {
- throw new IllegalStateException("Columns header can be set only once per result set – was already set: " + currentColumnsHeader);
- }
- }
-
- @Override
public void writeStartRow() {
pushState(State.ROW, EnumSet.of(State.RESULT_SET));
currentColumnsCount = 0;
@@ -212,19 +209,8 @@
}
@Override
- public void writeStartUpdatesResult() {
- pushState(State.UPDATES_RESULT, EnumSet.of(State.DATABASE));
- }
-
- @Override
- public void writeEndUpdatesResult() {
- popState(EnumSet.of(State.DATABASE));
- currentColumnsHeader = null;
- }
-
- @Override
- public void writeUpdatedRowsCount(int updatedRowsCount) {
- peekState(EnumSet.of(State.UPDATES_RESULT));
+ public void writeUpdatesResult(int updatedRowsCount) {
+ peekState(EnumSet.of(State.STATEMENT));
}
@Override
--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/Formatter.java Tue Jan 07 21:53:24 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/Formatter.java Tue Jan 07 21:54:59 2014 +0100
@@ -33,15 +33,17 @@
void writeEndDatabase();
- void writeStartResultSet();
+ void writeStartStatement();
- void writeEndResultSet();
+ void writeEndStatement();
void writeQuery(String sql);
void writeParameters(List<? extends Parameter> parameters);
- void writeColumnsHeader(ColumnsHeader header);
+ void writeStartResultSet(ColumnsHeader header);
+
+ void writeEndResultSet();
void writeStartRow();
@@ -49,11 +51,7 @@
void writeEndRow();
- void writeStartUpdatesResult();
-
- void writeUpdatedRowsCount(int updatedRowsCount);
-
- void writeEndUpdatesResult();
+ void writeUpdatesResult(int updatedRowsCount);
void writeEndBatch();
--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/SingleValueFormatter.java Tue Jan 07 21:53:24 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/SingleValueFormatter.java Tue Jan 07 21:54:59 2014 +0100
@@ -44,8 +44,8 @@
}
@Override
- public void writeUpdatedRowsCount(int updatedRowsCount) {
- super.writeUpdatedRowsCount(updatedRowsCount);
+ public void writeUpdatesResult(int updatedRowsCount) {
+ super.writeUpdatesResult(updatedRowsCount);
out.print(updatedRowsCount);
out.flush();
}
--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java Tue Jan 07 21:53:24 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java Tue Jan 07 21:54:59 2014 +0100
@@ -57,14 +57,9 @@
}
@Override
- public void writeStartResultSet() {
- super.writeStartResultSet();
+ public void writeStartResultSet(ColumnsHeader header) {
+ super.writeStartResultSet(header);
printResultSeparator();
- }
-
- @Override
- public void writeColumnsHeader(ColumnsHeader header) {
- super.writeColumnsHeader(header);
initColumnWidths(header.getColumnCount());
@@ -227,14 +222,9 @@
}
@Override
- public void writeStartUpdatesResult() {
- super.writeStartUpdatesResult();
+ public void writeUpdatesResult(int updatedRowsCount) {
+ super.writeUpdatesResult(updatedRowsCount);
printResultSeparator();
- }
-
- @Override
- public void writeUpdatedRowsCount(int updatedRowsCount) {
- super.writeUpdatedRowsCount(updatedRowsCount);
out.print(TerminalColor.Red, "Updated records: ");
out.println(updatedRowsCount);
out.bell();
--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularPrefetchingFormatter.java Tue Jan 07 21:53:24 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularPrefetchingFormatter.java Tue Jan 07 21:54:59 2014 +0100
@@ -17,7 +17,6 @@
*/
package info.globalcode.sql.dk.formatting;
-import info.globalcode.sql.dk.Parameter;
import java.util.ArrayList;
import java.util.List;
@@ -32,8 +31,6 @@
public class TabularPrefetchingFormatter extends TabularFormatter {
public static final String NAME = "tabular-prefetching"; // bash-completion:formatter
- private String currentSql;
- private List<? extends Parameter> currentParameters;
private ColumnsHeader currentHeader;
private List<Object[]> currentResultSet;
private Object[] currentRow;
@@ -54,22 +51,8 @@
}
@Override
- public void writeStartResultSet() {
+ public void writeStartResultSet(ColumnsHeader header) {
currentResultSet = new ArrayList<>();
- }
-
- @Override
- public void writeQuery(String sql) {
- currentSql = sql;
- }
-
- @Override
- public void writeParameters(List<? extends Parameter> parameters) {
- currentParameters = parameters;
- }
-
- @Override
- public void writeColumnsHeader(ColumnsHeader header) {
currentHeader = header;
initColumnWidths(header.getColumnCount());
}
@@ -99,10 +82,7 @@
public void writeEndResultSet() {
prefetchDone = true;
- super.writeStartResultSet();
- super.writeQuery(currentSql);
- super.writeParameters(currentParameters);
- super.writeColumnsHeader(currentHeader);
+ super.writeStartResultSet(currentHeader);
for (Object[] row : currentResultSet) {
super.writeStartRow();
@@ -113,8 +93,6 @@
}
currentColumnsCount = 0;
- currentSql = null;
- currentParameters = null;
currentHeader = null;
currentRow = null;
currentResultSet = null;
--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularWrappingFormatter.java Tue Jan 07 21:53:24 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularWrappingFormatter.java Tue Jan 07 21:54:59 2014 +0100
@@ -38,8 +38,8 @@
}
@Override
- public void writeColumnsHeader(ColumnsHeader header) {
- super.writeColumnsHeader(header);
+ public void writeStartResultSet(ColumnsHeader header) {
+ super.writeStartResultSet(header);
currentRow = new ArrayList<>(header.getColumnCount());
}
@@ -48,7 +48,7 @@
boolean rightAlign = value instanceof Number || value instanceof Boolean;
String valueString = String.valueOf(value);
int columnWidth = getColumnWidth(getCurrentColumnsCount()) - 1; // -1 = space for new line symbol
- currentRow.add(split(valueString, columnWidth, rightAlign));
+ currentRow.add(wrapLines(valueString, columnWidth, rightAlign));
}
@Override
@@ -99,7 +99,7 @@
// already done – wrapped row ends
}
- private static String[] split(String s, int width, boolean rightAlign) {
+ private static String[] wrapLines(String s, int width, boolean rightAlign) {
String[] array = new String[(s.length() - 1) / width + 1];
for (int i = 0; i < array.length; i++) {
if (i == array.length - 1) {
--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/XhtmlFormatter.java Tue Jan 07 21:53:24 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/XhtmlFormatter.java Tue Jan 07 21:54:59 2014 +0100
@@ -46,6 +46,7 @@
public static final String NAME = "xhtml"; // bash-completion:formatter
private static final String DOCTYPE = "html PUBLIC \"-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN\" \"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd\"";
private static final String CSS_FILE = "info/globalcode/sql/dk/formatter/XhtmlFormatter.css";
+ private int statementCounter = 0;
private int resultSetCounter = 0;
private int updatesResultCounter = 0;
@@ -115,7 +116,6 @@
@Override
public void writeQuery(String sql) {
super.writeQuery(sql);
- printTextElement(qname("h3"), null, "SQL:");
printTextElement(qname("pre"), null, sql);
}
@@ -199,9 +199,11 @@
}
@Override
- public void writeColumnsHeader(ColumnsHeader header) {
- super.writeColumnsHeader(header);
- printTextElement(qname("h3"), null, "Data:");
+ public void writeStartResultSet(ColumnsHeader header) {
+ super.writeStartResultSet(header);
+ resultSetCounter++;
+ printEmptyElement(qname("hr"), null);
+ printTextElement(qname("h3"), null, "Result set #" + resultSetCounter);
printStartElement(qname("table"));
printStartElement(qname("thead"));
printStartElement(qname("tr"));
@@ -216,6 +218,14 @@
}
@Override
+ public void writeEndResultSet() {
+ super.writeEndResultSet();
+ printEndElement();
+ printEndElement();
+ printTextElement(qname("p"), null, "Record count: " + getCurrentRowCount());
+ }
+
+ @Override
public void writeStartRow() {
super.writeStartRow();
printStartElement(qname("tr"));
@@ -234,33 +244,21 @@
}
@Override
- public void writeStartResultSet() {
- super.writeStartResultSet();
- resultSetCounter++;
+ public void writeStartStatement() {
+ super.writeStartStatement();
+ statementCounter++;
printEmptyElement(qname("hr"), null);
- printTextElement(qname("h2"), null, "Result set #" + resultSetCounter);
+ printTextElement(qname("h2"), null, "SQL statement #" + statementCounter);
+ resultSetCounter = 0;
+ updatesResultCounter = 0;
}
@Override
- public void writeEndResultSet() {
- super.writeEndResultSet();
- printEndElement();
- printEndElement();
-
- printTextElement(qname("p"), null, "Record count: " + getCurrentRowCount());
- }
-
- @Override
- public void writeStartUpdatesResult() {
- super.writeStartUpdatesResult();
+ public void writeUpdatesResult(int updatedRowsCount) {
+ super.writeUpdatesResult(updatedRowsCount);
updatesResultCounter++;
printEmptyElement(qname("hr"), null);
- printTextElement(qname("h2"), null, "Updates result #" + updatesResultCounter);
- }
-
- @Override
- public void writeUpdatedRowsCount(int updatedRowsCount) {
- super.writeUpdatedRowsCount(updatedRowsCount);
+ printTextElement(qname("h3"), null, "Updates result #" + updatesResultCounter);
printTextElement(qname("p"), null, "Updated rows: " + updatedRowsCount);
}
}
--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Tue Jan 07 21:53:24 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Tue Jan 07 21:54:59 2014 +0100
@@ -71,14 +71,14 @@
}
@Override
- public void writeStartResultSet() {
- super.writeStartResultSet();
- printStartElement(qname("resultSet"));
+ public void writeStartStatement() {
+ super.writeStartStatement();
+ printStartElement(qname("statement"));
}
@Override
- public void writeEndResultSet() {
- super.writeEndResultSet();
+ public void writeEndStatement() {
+ super.writeEndStatement();
printEndElement();
}
@@ -106,8 +106,9 @@
}
@Override
- public void writeColumnsHeader(ColumnsHeader header) {
- super.writeColumnsHeader(header);
+ public void writeStartResultSet(ColumnsHeader header) {
+ super.writeStartResultSet(header);
+ printStartElement(qname("resultSet"));
for (ColumnDescriptor cd : header.getColumnDescriptors()) {
Map<QName, String> attributes = new LinkedHashMap<>(4);
@@ -120,6 +121,12 @@
}
@Override
+ public void writeEndResultSet() {
+ super.writeEndResultSet();
+ printEndElement();
+ }
+
+ @Override
public void writeStartRow() {
super.writeStartRow();
printStartElement(qname("row"));
@@ -145,23 +152,11 @@
}
@Override
- public void writeStartUpdatesResult() {
- super.writeStartUpdatesResult();
- printStartElement(qname("updatesResult"));
- }
-
- @Override
- public void writeUpdatedRowsCount(int updatedRowsCount) {
- super.writeUpdatedRowsCount(updatedRowsCount);
+ public void writeUpdatesResult(int updatedRowsCount) {
+ super.writeUpdatesResult(updatedRowsCount);
printTextElement(qname("updatedRows"), null, String.valueOf(updatedRowsCount));
}
- @Override
- public void writeEndUpdatesResult() {
- super.writeEndUpdatesResult();
- printEndElement();
- }
-
protected String toString(Object value) {
return String.valueOf(value);
}