java/sql-dk/src/info/globalcode/sql/dk/formatting/AbstractFormatter.java
branchv_0
changeset 142 da1e38386d84
parent 101 97b0d9069133
child 155 eb3676c6929b
equal deleted inserted replaced
141:ecd17aad1178 142:da1e38386d84
    44 
    44 
    45 	/*
    45 	/*
    46 	 * root
    46 	 * root
    47 	 * .batch
    47 	 * .batch
    48 	 * ..database
    48 	 * ..database
    49 	 * ...resultSet
    49 	 * ...statement
    50 	 * ....@query
    50 	 * ....@query
    51 	 * ....@parameters
    51 	 * ....@parameters
    52 	 * ....@columnsHeader
    52 	 * ....resultSet
    53 	 * ....row
    53 	 * .....row
    54 	 * .....@columnValue
    54 	 * ......@columnValue
    55 	 * ...updatesResult
    55 	 * ....@updatesResult
    56 	 * ....@query
       
    57 	 * ....@parameters
       
    58 	 * ....@updatedRowsCount
       
    59 	 */
    56 	 */
    60 	protected enum State {
    57 	protected enum State {
    61 
    58 
    62 		ROOT,
    59 		ROOT,
    63 		BATCH,
    60 		BATCH,
    64 		DATABASE,
    61 		DATABASE,
       
    62 		STATEMENT,
    65 		RESULT_SET,
    63 		RESULT_SET,
    66 		ROW,
    64 		ROW
    67 		UPDATES_RESULT
       
    68 	}
    65 	}
    69 
    66 
    70 	/**
    67 	/**
    71 	 * Go down in hierarchy.
    68 	 * Go down in hierarchy.
    72 	 * Pushes new state and verifies the old one.
    69 	 * Pushes new state and verifies the old one.
   140 	public void writeEndDatabase() {
   137 	public void writeEndDatabase() {
   141 		popState(EnumSet.of(State.BATCH));
   138 		popState(EnumSet.of(State.BATCH));
   142 	}
   139 	}
   143 
   140 
   144 	@Override
   141 	@Override
   145 	public void writeStartResultSet() {
   142 	public void writeStartStatement() {
   146 		pushState(State.RESULT_SET, EnumSet.of(State.DATABASE));
   143 		pushState(State.STATEMENT, EnumSet.of(State.DATABASE));
       
   144 	}
       
   145 
       
   146 	@Override
       
   147 	public void writeEndStatement() {
       
   148 		popState(EnumSet.of(State.DATABASE));
       
   149 	}
       
   150 
       
   151 	@Override
       
   152 	public void writeStartResultSet(ColumnsHeader header) {
       
   153 		pushState(State.RESULT_SET, EnumSet.of(State.STATEMENT));
   147 		currentRowCount = 0;
   154 		currentRowCount = 0;
       
   155 		currentColumnsHeader = header;
   148 	}
   156 	}
   149 
   157 
   150 	@Override
   158 	@Override
   151 	public void writeEndResultSet() {
   159 	public void writeEndResultSet() {
   152 		popState(EnumSet.of(State.DATABASE));
   160 		popState(EnumSet.of(State.STATEMENT));
   153 		currentColumnsHeader = null;
   161 		currentColumnsHeader = null;
   154 	}
   162 	}
   155 
   163 
   156 	@Override
   164 	@Override
   157 	public void writeQuery(String sql) {
   165 	public void writeQuery(String sql) {
   158 		peekState(EnumSet.of(State.RESULT_SET, State.UPDATES_RESULT));
   166 		peekState(EnumSet.of(State.STATEMENT));
   159 
   167 
   160 		if (currentColumnsHeader == null) {
   168 		if (currentColumnsHeader == null) {
   161 			currentQuery = sql;
   169 			currentQuery = sql;
   162 		} else {
   170 		} else {
   163 			throw new IllegalStateException("Query string '" + sql + "' must be set before columns header – was already set: " + currentColumnsHeader);
   171 			throw new IllegalStateException("Query string '" + sql + "' must be set before columns header – was already set: " + currentColumnsHeader);
   164 		}
   172 		}
   165 	}
   173 	}
   166 
   174 
   167 	@Override
   175 	@Override
   168 	public void writeParameters(List<? extends Parameter> parameters) {
   176 	public void writeParameters(List<? extends Parameter> parameters) {
   169 		peekState(EnumSet.of(State.RESULT_SET, State.UPDATES_RESULT));
   177 		peekState(EnumSet.of(State.STATEMENT));
   170 
   178 
   171 		if (currentColumnsHeader != null) {
   179 		if (currentColumnsHeader != null) {
   172 			throw new IllegalStateException("Parameters '" + parameters + "' must be set before columns header – was already set: " + currentColumnsHeader);
   180 			throw new IllegalStateException("Parameters '" + parameters + "' must be set before columns header – was already set: " + currentColumnsHeader);
   173 		}
   181 		}
   174 
   182 
   175 		if (currentQuery == null && parameters != null) {
   183 		if (currentQuery == null && parameters != null) {
   176 			throw new IllegalStateException("Parameters '" + parameters + "' must be set after query – was not yet set.");
   184 			throw new IllegalStateException("Parameters '" + parameters + "' must be set after query – was not yet set.");
   177 		}
       
   178 	}
       
   179 
       
   180 	@Override
       
   181 	public void writeColumnsHeader(ColumnsHeader header) {
       
   182 		peekState(EnumSet.of(State.RESULT_SET));
       
   183 
       
   184 		if (currentColumnsHeader == null) {
       
   185 			currentColumnsHeader = header;
       
   186 		} else {
       
   187 			throw new IllegalStateException("Columns header can be set only once per result set – was already set: " + currentColumnsHeader);
       
   188 		}
   185 		}
   189 	}
   186 	}
   190 
   187 
   191 	@Override
   188 	@Override
   192 	public void writeStartRow() {
   189 	public void writeStartRow() {
   210 			throw new IllegalStateException("Current columns count is " + currentColumnsCount + " which is more than declared " + declaredCount + " in header.");
   207 			throw new IllegalStateException("Current columns count is " + currentColumnsCount + " which is more than declared " + declaredCount + " in header.");
   211 		}
   208 		}
   212 	}
   209 	}
   213 
   210 
   214 	@Override
   211 	@Override
   215 	public void writeStartUpdatesResult() {
   212 	public void writeUpdatesResult(int updatedRowsCount) {
   216 		pushState(State.UPDATES_RESULT, EnumSet.of(State.DATABASE));
   213 		peekState(EnumSet.of(State.STATEMENT));
   217 	}
       
   218 
       
   219 	@Override
       
   220 	public void writeEndUpdatesResult() {
       
   221 		popState(EnumSet.of(State.DATABASE));
       
   222 		currentColumnsHeader = null;
       
   223 	}
       
   224 
       
   225 	@Override
       
   226 	public void writeUpdatedRowsCount(int updatedRowsCount) {
       
   227 		peekState(EnumSet.of(State.UPDATES_RESULT));
       
   228 	}
   214 	}
   229 
   215 
   230 	@Override
   216 	@Override
   231 	public void close() throws FormatterException {
   217 	public void close() throws FormatterException {
   232 	}
   218 	}