# HG changeset patch # User František Kučera # Date 1387148091 -3600 # Node ID 4507cb9a0cf14d79f205b451151a7b256344e5d4 # Parent a7555ec6eea99b433e32ef91050f36fa04df8bc4 more exceptions diff -r a7555ec6eea9 -r 4507cb9a0cf1 java/sql-dk/nbproject/project.properties --- a/java/sql-dk/nbproject/project.properties Sun Dec 15 23:54:37 2013 +0100 +++ b/java/sql-dk/nbproject/project.properties Sun Dec 15 23:54:51 2013 +0100 @@ -52,7 +52,7 @@ javadoc.use=true javadoc.version=false javadoc.windowtitle= -main.class= +main.class=info.globalcode.sql.dk.CLIStarter manifest.file=manifest.mf meta.inf.dir=${src.dir}/META-INF mkdist.disabled=false diff -r a7555ec6eea9 -r 4507cb9a0cf1 java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java --- 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; + } } }