java/sql-dk/src/info/globalcode/sql/dk/batch/BatchEncoder.java
branchv_0
changeset 147 4a704c1669f4
parent 146 4f4f515df807
equal deleted inserted replaced
146:4f4f515df807 147:4a704c1669f4
    43 
    43 
    44 			if (sqlCommand instanceof SQLCommandNamed) {
    44 			if (sqlCommand instanceof SQLCommandNamed) {
    45 				sqlCommand = ((SQLCommandNamed) sqlCommand).getSQLCommandNumbered();
    45 				sqlCommand = ((SQLCommandNamed) sqlCommand).getSQLCommandNumbered();
    46 			}
    46 			}
    47 
    47 
    48 			byte[] sqlBytes = toBytes(sqlCommand.getQuery());
    48 			writeNextString(sqlCommand.getQuery(), buffer);
    49 			buffer.writeInt(sqlBytes.length);
       
    50 			buffer.write(sqlBytes);
       
    51 
    49 
    52 			List<? extends Parameter> parameters = sqlCommand.getParameters();
    50 			List<? extends Parameter> parameters = sqlCommand.getParameters();
    53 
    51 
    54 			buffer.writeInt(parameters.size());
    52 			buffer.writeInt(parameters.size());
    55 
    53 
    56 			for (Parameter p : parameters) {
    54 			for (Parameter p : parameters) {
    57 				buffer.writeInt(p.getType().getCode());
    55 				buffer.writeInt(p.getType().getCode());
    58 				byte[] value = toBytes((String) p.getValue()); // parameters are encoded before any preprocessing
    56 				writeNextString((String) p.getValue(), buffer); // parameters are encoded before any preprocessing
    59 				buffer.writeInt(value.length);
       
    60 				buffer.write(value);
       
    61 			}
    57 			}
    62 
    58 
    63 			buffer.flush();
    59 			buffer.flush();
    64 			bufferAOS.writeTo(out);
    60 			bufferAOS.writeTo(out);
    65 			out.flush();
    61 			out.flush();
    69 		} catch (SQLException e) {
    65 		} catch (SQLException e) {
    70 			throw new BatchException("Unable to converd named SQL command to numbered: " + sqlCommand, e);
    66 			throw new BatchException("Unable to converd named SQL command to numbered: " + sqlCommand, e);
    71 		}
    67 		}
    72 	}
    68 	}
    73 
    69 
       
    70 	private void writeNextString(String s, DataOutputStream out) throws IOException {
       
    71 		byte[] bytes = toBytes(s);
       
    72 		out.writeInt(bytes.length);
       
    73 		out.write(bytes);
       
    74 	}
       
    75 
    74 	private static byte[] toBytes(String s) {
    76 	private static byte[] toBytes(String s) {
    75 		if (s == null) {
    77 		if (s == null) {
    76 			return new byte[]{};
    78 			return new byte[]{};
    77 		} else {
    79 		} else {
    78 			return s.getBytes(CHARSET);
    80 			return s.getBytes(CHARSET);