SQL from STDIN: --sql-in v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Fri, 17 Jan 2014 23:24:07 +0100
branchv_0
changeset 166 5488c2dcf680
parent 165 871185e406b3
child 167 84aaa91642bf
SQL from STDIN: --sql-in
java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java
java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java
java/sql-dk/src/info/globalcode/sql/dk/Functions.java
--- a/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java	Thu Jan 16 12:28:08 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java	Fri Jan 17 23:24:07 2014 +0100
@@ -17,8 +17,11 @@
  */
 package info.globalcode.sql.dk;
 
+import static info.globalcode.sql.dk.Functions.readString;
 import info.globalcode.sql.dk.InfoLister.InfoType;
 import info.globalcode.sql.dk.configuration.Property;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -35,7 +38,7 @@
 
 	public static final String TYPE_NAME_SEPARATOR = ":";
 
-	public CLIOptions parseOptions(String[] args) throws CLIParserException {
+	public CLIOptions parseOptions(String[] args, InputStream in) throws CLIParserException {
 		CLIOptions options = new CLIOptions();
 
 		List<SQLType> numberedTypes = new ArrayList<>();
@@ -70,6 +73,13 @@
 				case Tokens.SQL:
 					options.setSql(fetchNext(args, ++i));
 					break;
+				case Tokens.SQL_IN:
+					try {
+						options.setSql(readString(in));
+					} catch (IOException e) {
+						throw new CLIParserException("Unable to read SQL from the input stream", e);
+					}
+					break;
 				case Tokens.BATCH:
 					options.setBatch(true);
 					break;
@@ -160,6 +170,7 @@
 		public static final String DB = "--db"; // bash-completion:option // help: database name
 		public static final String DB_PROPERTY = "--db-property"; // bash-completion:option // help: name and value
 		public static final String SQL = "--sql"; // bash-completion:option // help: SQL query/command
+		public static final String SQL_IN = "--sql-in"; // bash-completion:option // help: SQL query/command
 		public static final String BATCH = "--batch"; // bash-completion:option // help: batch mode (no argument)
 		public static final String DATA = "--data"; // bash-completion:option // help: list of ordinal parameters
 		public static final String DATA_NAMED = "--data-named"; // bash-completion:option // help: list of named parameters
--- a/java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java	Thu Jan 16 12:28:08 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java	Fri Jan 17 23:24:07 2014 +0100
@@ -75,7 +75,7 @@
 
 		try {
 			CLIParser parser = new CLIParser();
-			CLIOptions options = parser.parseOptions(args);
+			CLIOptions options = parser.parseOptions(args, System.in);
 			options.validate();
 			CLIStarter starter = new CLIStarter(options);
 			starter.installDefaultConfiguration();
--- a/java/sql-dk/src/info/globalcode/sql/dk/Functions.java	Thu Jan 16 12:28:08 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/Functions.java	Fri Jan 17 23:24:07 2014 +0100
@@ -21,12 +21,14 @@
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
+import java.util.Scanner;
 
 /**
  *
@@ -152,4 +154,15 @@
 		}
 		return new String(hexChars);
 	}
+
+	public static String readString(InputStream in) throws IOException {
+		try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) {
+			StringBuilder result = new StringBuilder();
+			for (String line = br.readLine(); line != null; line = br.readLine()) {
+				result.append(line);
+				result.append('\n');
+			}
+			return result.toString();
+		}
+	}
 }