# HG changeset patch # User František Kučera # Date 1387134987 -3600 # Node ID 72da10f632b572719d38da4f300366f571dc5d80 # Parent f32dac78d13a7c15ea0e6bfe0421b0c975e1d10a more code diff -r f32dac78d13a -r 72da10f632b5 java/sql-dk/src/info/globalcode/sql/dk/CLIOptions.java --- a/java/sql-dk/src/info/globalcode/sql/dk/CLIOptions.java Sun Dec 15 19:20:50 2013 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIOptions.java Sun Dec 15 20:16:27 2013 +0100 @@ -14,7 +14,13 @@ private String sql; private String databaseName; private boolean batch; - + + public enum MODE { + + QUERY_NOW, + PREPARE_BATCH, + EXECUTE_BATCH + } public enum COMMAND_TYPE { @@ -30,12 +36,7 @@ public void validate() throws InvalidOptionsException { InvalidOptionsException e = new InvalidOptionsException(); - if ( // - (hasDb() ? 1 : 0) + // - (hasSql() ? 1 : 0) + // - (hasBatch() ? 1 : 0) - != 2) // - { + if (getMode() == null) { e.addProblem(new InvalidOptionsException.OptionProblem("Invalid combination of DB, SQL and BATCH – please specify just 2 of this 3 options")); } @@ -49,15 +50,73 @@ } } - public boolean hasSql() { - return isNotEmpty(sql, true); + private boolean hasSql() { + return isNotEmpty(getSql(), true); } - public boolean hasDb() { - return isNotEmpty(databaseName, true); + private boolean hasDb() { + return isNotEmpty(getDatabaseName(), true); } - public boolean hasBatch() { - return batch; + /** + * Depends on options: DB, BATCH, SQL + * + * @return mode | or null if options are not yet initialized or combination of options is + * invalid + */ + public MODE getMode() { + if (hasDb() && !batch && hasSql()) { + return MODE.QUERY_NOW; + } else if (!hasDb() && batch && hasSql()) { + return MODE.PREPARE_BATCH; + } else if (hasDb() && batch && !hasSql()) { + return MODE.EXECUTE_BATCH; + } else { + return null; + } + } + + public String getSql() { + return sql; + } + + public void setSql(String sql) { + this.sql = sql; + } + + public String getDatabaseName() { + return databaseName; + } + + public void setDatabaseName(String databaseName) { + this.databaseName = databaseName; + } + + public void setBatch(boolean batch) { + this.batch = batch; + } + + public COMMAND_TYPE getCommandType() { + return commandType; + } + + public void setCommandType(COMMAND_TYPE commandType) { + this.commandType = commandType; + } + + public Collection getNamedParameters() { + return namedParameters; + } + + public List getNumberedParameters() { + return numberedParameters; + } + + public void addNumberedParameter(Parameter p) { + numberedParameters.add(p); + } + + public void addNamedParameter(NamedParameter p) { + namedParameters.add(p); } } diff -r f32dac78d13a -r 72da10f632b5 java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java --- a/java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java Sun Dec 15 19:20:50 2013 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java Sun Dec 15 20:16:27 2013 +0100 @@ -6,36 +6,59 @@ */ public class CLIStarter { + public static final String DEFAULT_NAME_PREFIX = ":"; + public static void main(String[] args) { - + args = new String[]{"--sql", "SELECT * FROM tabulka;", "--db", "databáze_1"}; - + CLIOptions options = parseOptions(args); } private static CLIOptions parseOptions(String[] args) { CLIOptions options = new CLIOptions(); + String typesString = null; + String namePrefix = DEFAULT_NAME_PREFIX; + + for (int i = 0; i < args.length; i++) { String arg = args[i]; + switch (arg) { + case Tokens.TYPES: + typesString = args[++i]; + break; + case Tokens.NAME_PREFIX: + namePrefix = args[++i]; + break; + } + } + + for (int i = 0; i < args.length; i++) { + String arg = args[i]; switch (arg) { + case Tokens.TYPES: + case Tokens.NAME_PREFIX: + i++; + break; case Tokens.DB: - String db = args[++i]; - System.out.println("DB: " + db); + options.setDatabaseName(args[++i]); break; case Tokens.SQL: - String sql = args[++i]; - System.out.println("SQL: " + sql); + options.setSql(args[++i]); + options.setCommandType(CLIOptions.COMMAND_TYPE.QUERY); break; case Tokens.SQL_UPDATE: + case Tokens.SQL_INSERT: + options.setSql(args[++i]); + options.setCommandType(CLIOptions.COMMAND_TYPE.UPDATE); break; case Tokens.BATCH: + options.setBatch(true); break; case Tokens.DATA: break; - case Tokens.TYPES: - break; } } @@ -48,8 +71,10 @@ public static final String DB = "--db"; public static final String SQL = "--sql"; public static final String SQL_UPDATE = "--sql-update"; + public static final String SQL_INSERT = "--sql-insert"; public static final String BATCH = "--batch"; public static final String DATA = "--data"; + public static final String NAME_PREFIX = "--name-prefix"; public static final String TYPES = "--types"; private Tokens() {