java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java
branchv_0
changeset 8 4507cb9a0cf1
parent 5 26223eb63851
child 9 2ec52027b97f
     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  }