1.1 --- a/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java Sun Dec 15 23:54:37 2013 +0100
1.2 +++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java Sun Dec 15 23:54:51 2013 +0100
1.3 @@ -37,7 +37,7 @@
1.4 String arg = args[i];
1.5 switch (arg) {
1.6 case Tokens.TYPES:
1.7 - String typesString = args[++i];
1.8 + String typesString = fetchNext(args, ++i);
1.9
1.10 for (String oneType : typesString.split("\\s*,\\s*")) {
1.11 int sepatratorIndex = oneType.indexOf(TYPE_NAME_SEPARATOR);
1.12 @@ -51,18 +51,18 @@
1.13 }
1.14 break;
1.15 case Tokens.NAME_PREFIX:
1.16 - options.setNamePrefix(args[++i]);
1.17 + options.setNamePrefix(fetchNext(args, ++i));
1.18 break;
1.19 case Tokens.DB:
1.20 - options.setDatabaseName(args[++i]);
1.21 + options.setDatabaseName(fetchNext(args, ++i));
1.22 break;
1.23 case Tokens.SQL:
1.24 - options.setSql(args[++i]);
1.25 + options.setSql(fetchNext(args, ++i));
1.26 options.setCommandType(CLIOptions.COMMAND_TYPE.QUERY);
1.27 break;
1.28 case Tokens.SQL_UPDATE:
1.29 case Tokens.SQL_INSERT:
1.30 - options.setSql(args[++i]);
1.31 + options.setSql(fetchNext(args, ++i));
1.32 options.setCommandType(CLIOptions.COMMAND_TYPE.UPDATE);
1.33 break;
1.34 case Tokens.BATCH:
1.35 @@ -72,21 +72,27 @@
1.36 for (i++; i < args.length; i++) {
1.37 arg = args[i];
1.38
1.39 - if (arg.startsWith(options.getNamePrefix())) {
1.40 + if (arg.startsWith(options.getNamePrefix())) { // Named parameters:
1.41 String paramName = arg.substring(options.getNamePrefix().length());
1.42 - String paramValue = args[++i];
1.43 + String paramValue = fetchNext(args, ++i);
1.44 options.addNamedParameter(new NamedParameter(paramName, paramValue, namedTypes.get(paramName)));
1.45 - } else {
1.46 - int paramIndex = options.getNumberedParameters().size();
1.47 - int paramType;
1.48 - try {
1.49 - paramType = numberedTypes.get(paramIndex);
1.50 - } catch (IndexOutOfBoundsException e) {
1.51 - throw new IllegalArgumentException("Missing type for parameter #" + paramIndex, e);
1.52 - } catch (NullPointerException e) {
1.53 - throw new IllegalArgumentException("Invalid type definition for parameter #" + paramIndex, e);
1.54 + } else { // Numbered parameters:
1.55 + Parameter parameter;
1.56 + if (numberedTypes.isEmpty()) {
1.57 + parameter = new Parameter(arg, null);
1.58 + } else {
1.59 + int paramIndex = options.getNumberedParameters().size();
1.60 + int paramType;
1.61 + try {
1.62 + paramType = numberedTypes.get(paramIndex);
1.63 + } catch (IndexOutOfBoundsException e) {
1.64 + throw new IllegalArgumentException("Missing type for parameter #" + paramIndex, e);
1.65 + } catch (NullPointerException e) {
1.66 + throw new IllegalArgumentException("Invalid type definition for parameter #" + paramIndex, e);
1.67 + }
1.68 + parameter = new Parameter(arg, paramType);
1.69 }
1.70 - options.addNumberedParameter(new Parameter(arg, paramType));
1.71 + options.addNumberedParameter(parameter);
1.72 }
1.73 }
1.74 break;
1.75 @@ -94,11 +100,15 @@
1.76 throw new IllegalArgumentException("Unknown option: " + arg);
1.77 }
1.78 }
1.79 + return options;
1.80 + }
1.81
1.82 -
1.83 -
1.84 - return options;
1.85 -
1.86 + private String fetchNext(String[] args, int index) {
1.87 + if (index < args.length) {
1.88 + return args[index];
1.89 + } else {
1.90 + throw new IllegalArgumentException("Expecting value for option: " + args[index - 1]);
1.91 + }
1.92 }
1.93
1.94 public static class Tokens {
1.95 @@ -116,7 +126,12 @@
1.96 }
1.97 }
1.98
1.99 - private Integer getType(String typeString) {
1.100 - return types.get(typeString);
1.101 + private int getType(String typeString) {
1.102 + Integer type = types.get(typeString);
1.103 + if (type == null) {
1.104 + throw new IllegalArgumentException("Unsupported type: " + typeString);
1.105 + } else {
1.106 + return type;
1.107 + }
1.108 }
1.109 }