# HG changeset patch # User František Kučera # Date 1387883105 -3600 # Node ID e2ba2af0ef405d32c254f57251062f75a4a457fe # Parent 6730214fab41cfa2c6ca3e12a89f08ba2e2f4e33 new option --data-named (then follows name/value pairs without prefix/suffix) diff -r 6730214fab41 -r e2ba2af0ef40 java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java --- a/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java Tue Dec 24 11:54:58 2013 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java Tue Dec 24 12:05:05 2013 +0100 @@ -85,29 +85,29 @@ case Tokens.DATA: // --data is the last option for (i++; i < args.length; i++) { arg = args[i]; - - if (arg.startsWith(options.getNamePrefix()) && arg.endsWith(options.getNameSuffix())) { // Named parameters: - String paramName = arg.substring(options.getNamePrefix().length(), arg.length() - options.getNameSuffix().length()); - String paramValue = fetchNext(args, ++i); - options.addNamedParameter(new NamedParameter(paramName, paramValue, namedTypes.get(paramName))); - } else { // Numbered parameters: - Parameter parameter; - if (numberedTypes.isEmpty()) { - parameter = new Parameter(arg, null); - } else { - int paramIndex = options.getNumberedParameters().size(); - int paramType; - try { - paramType = numberedTypes.get(paramIndex); - } catch (IndexOutOfBoundsException e) { - throw new CLIParserException("Missing type for parameter #" + paramIndex, e); - } catch (NullPointerException e) { - throw new CLIParserException("Invalid type definition for parameter #" + paramIndex, e); - } - parameter = new Parameter(arg, paramType); + Parameter parameter; + if (numberedTypes.isEmpty()) { + parameter = new Parameter(arg, null); + } else { + int paramIndex = options.getNumberedParameters().size(); + int paramType; + try { + paramType = numberedTypes.get(paramIndex); + } catch (IndexOutOfBoundsException e) { + throw new CLIParserException("Missing type for parameter #" + paramIndex, e); + } catch (NullPointerException e) { + throw new CLIParserException("Invalid type definition for parameter #" + paramIndex, e); } - options.addNumberedParameter(parameter); + parameter = new Parameter(arg, paramType); } + options.addNumberedParameter(parameter); + } + break; + case Tokens.DATA_NAMED: + for (i++; i < args.length; i++) { + String paramName = args[i]; + String paramValue = fetchNext(args, ++i); + options.addNamedParameter(new NamedParameter(paramName, paramValue, namedTypes.get(paramName))); } break; case Tokens.FORMATTER: @@ -156,6 +156,7 @@ public static final String SQL = "--sql"; public static final String BATCH = "--batch"; public static final String DATA = "--data"; + public static final String DATA_NAMED = "--data-named"; public static final String NAME_PREFIX = "--name-prefix"; public static final String NAME_SUFFIX = "--name-suffix"; public static final String TYPES = "--types"; diff -r 6730214fab41 -r e2ba2af0ef40 java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java --- a/java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java Tue Dec 24 11:54:58 2013 +0100 +++ b/java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java Tue Dec 24 12:05:05 2013 +0100 @@ -19,7 +19,6 @@ import info.globalcode.sql.dk.CLIParser.Tokens; import static info.globalcode.sql.dk.CLIParser.TYPE_NAME_SEPARATOR; -import static info.globalcode.sql.dk.CLIOptions.DEFAULT_NAME_PREFIX; import java.sql.Types; import java.util.Collection; import static org.testng.Assert.*; @@ -110,7 +109,7 @@ String[] args = new String[]{ Tokens.DB, DATABASE_NAME_1, Tokens.SQL, SQL_1, - Tokens.DATA, DEFAULT_NAME_PREFIX + NAME_1, DATA_1, DEFAULT_NAME_PREFIX + NAME_2, DATA_2, DEFAULT_NAME_PREFIX + NAME_3, DATA_3}; + Tokens.DATA_NAMED, NAME_1, DATA_1, NAME_2, DATA_2, NAME_3, DATA_3}; CLIOptions options = parser.parseOptions(args); options.validate(); @@ -130,7 +129,7 @@ Tokens.SQL, SQL_1, Tokens.NAME_PREFIX, "$", Tokens.TYPES, " " + NAME_1 + TYPE_NAME_SEPARATOR + "int" + "," + NAME_3 + TYPE_NAME_SEPARATOR + "boolean", - Tokens.DATA, "$" + NAME_1, DATA_1, "$" + NAME_2, DATA_2, "$" + NAME_3, DATA_3}; + Tokens.DATA_NAMED, NAME_1, DATA_1, NAME_2, DATA_2, NAME_3, DATA_3}; CLIOptions options = parser.parseOptions(args); options.validate();