# HG changeset patch # User František Kučera # Date 1388055494 -3600 # Node ID 574cd7fbb5b2409262879d68f01c2ad068284953 # Parent 10c9b9e546225d7275e349dd9886d76e6b9cf73d SQLType enum wrapper for java.sql.Types diff -r 10c9b9e54622 -r 574cd7fbb5b2 java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java --- a/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java Thu Dec 26 01:53:15 2013 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java Thu Dec 26 11:58:14 2013 +0100 @@ -17,9 +17,7 @@ */ package info.globalcode.sql.dk; -import java.sql.Types; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -31,24 +29,12 @@ public class CLIParser { public static final String TYPE_NAME_SEPARATOR = ":"; - private final Map types; - - public CLIParser() { - Map m = new HashMap<>(); - m.put("integer", Types.INTEGER); - m.put("varchar", Types.VARCHAR); - m.put("boolean", Types.BOOLEAN); - /** - * TODO: more types - */ - types = Collections.unmodifiableMap(m); - } public CLIOptions parseOptions(String[] args) throws CLIParserException { CLIOptions options = new CLIOptions(); - List numberedTypes = new ArrayList<>(); - Map namedTypes = new HashMap<>(); + List numberedTypes = new ArrayList<>(); + Map namedTypes = new HashMap<>(); for (int i = 0; i < args.length; i++) { String arg = args[i]; @@ -90,7 +76,7 @@ parameter = new Parameter(arg, null); } else { int paramIndex = options.getNumberedParameters().size(); - int paramType; + SQLType paramType; try { paramType = numberedTypes.get(paramIndex); } catch (IndexOutOfBoundsException e) { @@ -173,12 +159,11 @@ } } - private int getType(String typeString) throws CLIParserException { - Integer type = types.get(typeString.trim()); - if (type == null) { - throw new CLIParserException("Unsupported type: " + typeString); - } else { - return type; + private SQLType getType(String typeString) throws CLIParserException { + try { + return SQLType.valueOf(typeString.trim()); + } catch (IllegalArgumentException e) { + throw new CLIParserException("Unsupported type: " + typeString, e); } } } diff -r 10c9b9e54622 -r 574cd7fbb5b2 java/sql-dk/src/info/globalcode/sql/dk/NamedParameter.java --- a/java/sql-dk/src/info/globalcode/sql/dk/NamedParameter.java Thu Dec 26 01:53:15 2013 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/NamedParameter.java Thu Dec 26 11:58:14 2013 +0100 @@ -27,11 +27,12 @@ private String name; - public NamedParameter(String name, Object value, Integer type) { + public NamedParameter(String name, Object value, SQLType type) { super(value, type); this.name = name; } + @Override public String getName() { return name; } diff -r 10c9b9e54622 -r 574cd7fbb5b2 java/sql-dk/src/info/globalcode/sql/dk/Parameter.java --- a/java/sql-dk/src/info/globalcode/sql/dk/Parameter.java Thu Dec 26 01:53:15 2013 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/Parameter.java Thu Dec 26 11:58:14 2013 +0100 @@ -28,14 +28,14 @@ /** * @see Types */ - public static final int DEFAULT_TYPE = Types.VARCHAR; + public static final SQLType DEFAULT_TYPE = SQLType.VARCHAR; private Object value; - private int type; + private SQLType type; public Parameter() { } - public Parameter(Object value, Integer type) { + public Parameter(Object value, SQLType type) { this.value = value; if (type == null) { this.type = DEFAULT_TYPE; @@ -55,14 +55,14 @@ /** * @see java.sql.Types */ - public int getType() { + public SQLType getType() { return type; } /** * @see java.sql.Types */ - public void setType(int type) { + public void setType(SQLType type) { this.type = type; } } diff -r 10c9b9e54622 -r 574cd7fbb5b2 java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java --- a/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java Thu Dec 26 01:53:15 2013 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java Thu Dec 26 11:58:14 2013 +0100 @@ -68,7 +68,7 @@ public void parametrize(PreparedStatement ps) throws SQLException { int i = 1; for (Parameter p : notNull(parametersUsed)) { - ps.setObject(i++, p.getValue(), p.getType()); + ps.setObject(i++, p.getValue(), p.getType().getCode()); } } diff -r 10c9b9e54622 -r 574cd7fbb5b2 java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNumbered.java --- a/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNumbered.java Thu Dec 26 01:53:15 2013 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNumbered.java Thu Dec 26 11:58:14 2013 +0100 @@ -39,7 +39,7 @@ public void parametrize(PreparedStatement ps) throws SQLException { int i = 1; for (Parameter p : notNull(parameters)) { - ps.setObject(i++, p.getValue(), p.getType()); + ps.setObject(i++, p.getValue(), p.getType().getCode()); } } diff -r 10c9b9e54622 -r 574cd7fbb5b2 java/sql-dk/src/info/globalcode/sql/dk/SQLType.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/sql-dk/src/info/globalcode/sql/dk/SQLType.java Thu Dec 26 11:58:14 2013 +0100 @@ -0,0 +1,61 @@ +/** + * SQL-DK + * Copyright © 2013 František Kučera (frantovo.cz) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package info.globalcode.sql.dk; + +import java.sql.Types; + +/** + * + * @author Ing. František Kučera (frantovo.cz) + */ +public enum SQLType { + + VARCHAR(Types.VARCHAR), + BOOLEAN(Types.BOOLEAN), + INTEGER(Types.INTEGER), + DECIMAL(Types.DECIMAL); + /** + * TODO: more types + */ + private int code; + + private SQLType(int code) { + this.code = code; + } + + /** + * @see java.sql.Types.Types + */ + public int getCode() { + return code; + } + + /** + * @param code see {@linkplain java.sql.Types.Types} + * @return found SQLType + * @throws IllegalArgumentException if no data type has given code + */ + public SQLType valueOf(int code) { + for (SQLType t : values()) { + if (t.code == code) { + return t; + } + } + throw new IllegalArgumentException("No data type has code: " + code); + } +} diff -r 10c9b9e54622 -r 574cd7fbb5b2 java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java --- a/java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java Thu Dec 26 01:53:15 2013 +0100 +++ b/java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java Thu Dec 26 11:58:14 2013 +0100 @@ -19,7 +19,6 @@ import info.globalcode.sql.dk.CLIParser.Tokens; import static info.globalcode.sql.dk.CLIParser.TYPE_NAME_SEPARATOR; -import java.sql.Types; import java.util.Collection; import static org.testng.Assert.*; import org.testng.annotations.BeforeMethod; @@ -87,7 +86,7 @@ String[] args = new String[]{ Tokens.DB, DATABASE_NAME_1, Tokens.SQL, SQL_1, - Tokens.TYPES, " int,string, boolean", + Tokens.TYPES, " INTEGER,VARCHAR, BOOLEAN", Tokens.DATA, DATA_1, DATA_2, DATA_3}; CLIOptions options = parser.parseOptions(args); options.validate(); @@ -99,9 +98,9 @@ assertEquals(options.getNumberedParameters().get(0).getValue(), DATA_1); assertEquals(options.getNumberedParameters().get(1).getValue(), DATA_2); assertEquals(options.getNumberedParameters().get(2).getValue(), DATA_3); - assertEquals(options.getNumberedParameters().get(0).getType(), Types.INTEGER); - assertEquals(options.getNumberedParameters().get(1).getType(), Types.VARCHAR); - assertEquals(options.getNumberedParameters().get(2).getType(), Types.BOOLEAN); + assertEquals(options.getNumberedParameters().get(0).getType(), SQLType.INTEGER); + assertEquals(options.getNumberedParameters().get(1).getType(), SQLType.VARCHAR); + assertEquals(options.getNumberedParameters().get(2).getType(), SQLType.BOOLEAN); } @Test @@ -128,7 +127,7 @@ Tokens.DB, DATABASE_NAME_1, Tokens.SQL, SQL_1, Tokens.NAME_PREFIX, "$", - Tokens.TYPES, " " + NAME_1 + TYPE_NAME_SEPARATOR + "int" + "," + NAME_3 + TYPE_NAME_SEPARATOR + "boolean", + Tokens.TYPES, " " + NAME_1 + TYPE_NAME_SEPARATOR + "INTEGER" + "," + NAME_3 + TYPE_NAME_SEPARATOR + "BOOLEAN", Tokens.DATA_NAMED, NAME_1, DATA_1, NAME_2, DATA_2, NAME_3, DATA_3}; CLIOptions options = parser.parseOptions(args); options.validate(); @@ -137,12 +136,12 @@ assertEquals(options.getSql(), SQL_1); assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW); assertEquals(options.getNamedParameters().size(), 3); - assertNamedParameter(options.getNamedParameters(), NAME_1, DATA_1, Types.INTEGER); + assertNamedParameter(options.getNamedParameters(), NAME_1, DATA_1, SQLType.INTEGER); assertNamedParameter(options.getNamedParameters(), NAME_2, DATA_2, Parameter.DEFAULT_TYPE); - assertNamedParameter(options.getNamedParameters(), NAME_3, DATA_3, Types.BOOLEAN); + assertNamedParameter(options.getNamedParameters(), NAME_3, DATA_3, SQLType.BOOLEAN); } - private void assertNamedParameter(Collection params, String name, Object value, int type) { + private void assertNamedParameter(Collection params, String name, Object value, SQLType type) { for (NamedParameter p : params) { if (name.equals(p.getName())) { assertEquals(p.getValue(), value, "value does not match – name: " + name);