--- a/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java Sun Dec 15 23:54:37 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java Sun Dec 15 23:54:51 2013 +0100
@@ -37,7 +37,7 @@
String arg = args[i];
switch (arg) {
case Tokens.TYPES:
- String typesString = args[++i];
+ String typesString = fetchNext(args, ++i);
for (String oneType : typesString.split("\\s*,\\s*")) {
int sepatratorIndex = oneType.indexOf(TYPE_NAME_SEPARATOR);
@@ -51,18 +51,18 @@
}
break;
case Tokens.NAME_PREFIX:
- options.setNamePrefix(args[++i]);
+ options.setNamePrefix(fetchNext(args, ++i));
break;
case Tokens.DB:
- options.setDatabaseName(args[++i]);
+ options.setDatabaseName(fetchNext(args, ++i));
break;
case Tokens.SQL:
- options.setSql(args[++i]);
+ options.setSql(fetchNext(args, ++i));
options.setCommandType(CLIOptions.COMMAND_TYPE.QUERY);
break;
case Tokens.SQL_UPDATE:
case Tokens.SQL_INSERT:
- options.setSql(args[++i]);
+ options.setSql(fetchNext(args, ++i));
options.setCommandType(CLIOptions.COMMAND_TYPE.UPDATE);
break;
case Tokens.BATCH:
@@ -72,21 +72,27 @@
for (i++; i < args.length; i++) {
arg = args[i];
- if (arg.startsWith(options.getNamePrefix())) {
+ if (arg.startsWith(options.getNamePrefix())) { // Named parameters:
String paramName = arg.substring(options.getNamePrefix().length());
- String paramValue = args[++i];
+ String paramValue = fetchNext(args, ++i);
options.addNamedParameter(new NamedParameter(paramName, paramValue, namedTypes.get(paramName)));
- } else {
- int paramIndex = options.getNumberedParameters().size();
- int paramType;
- try {
- paramType = numberedTypes.get(paramIndex);
- } catch (IndexOutOfBoundsException e) {
- throw new IllegalArgumentException("Missing type for parameter #" + paramIndex, e);
- } catch (NullPointerException e) {
- throw new IllegalArgumentException("Invalid type definition for parameter #" + paramIndex, e);
+ } 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 IllegalArgumentException("Missing type for parameter #" + paramIndex, e);
+ } catch (NullPointerException e) {
+ throw new IllegalArgumentException("Invalid type definition for parameter #" + paramIndex, e);
+ }
+ parameter = new Parameter(arg, paramType);
}
- options.addNumberedParameter(new Parameter(arg, paramType));
+ options.addNumberedParameter(parameter);
}
}
break;
@@ -94,11 +100,15 @@
throw new IllegalArgumentException("Unknown option: " + arg);
}
}
-
-
+ return options;
+ }
- return options;
-
+ private String fetchNext(String[] args, int index) {
+ if (index < args.length) {
+ return args[index];
+ } else {
+ throw new IllegalArgumentException("Expecting value for option: " + args[index - 1]);
+ }
}
public static class Tokens {
@@ -116,7 +126,12 @@
}
}
- private Integer getType(String typeString) {
- return types.get(typeString);
+ private int getType(String typeString) {
+ Integer type = types.get(typeString);
+ if (type == null) {
+ throw new IllegalArgumentException("Unsupported type: " + typeString);
+ } else {
+ return type;
+ }
}
}