|
From: SVN by r. <sv...@ca...> - 2009-09-21 18:55:24
|
Author: roy
Date: 2009-09-21 20:55:07 +0200 (Mon, 21 Sep 2009)
New Revision: 420
Added:
src/main/java/nl/improved/sqlclient/commands/QueryCommand.java
src/test/java/nl/improved/sqlclient/commands/QueryCommandTest.java
Removed:
src/test/java/nl/improved/sqlclient/SQLCommandTest.java
Modified:
/
db/testdb.properties
src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java
src/main/java/nl/improved/sqlclient/QueryExecutor.java
src/main/java/nl/improved/sqlclient/SQLCommand.java
src/main/java/nl/improved/sqlclient/StatementExecutor.java
src/main/java/nl/improved/sqlclient/commands/DescCommand.java
src/main/java/nl/improved/sqlclient/commands/InfoCommand.java
src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java
src/main/java/nl/improved/sqlclient/commands/ShowCommand.java
src/main/java/nl/improved/sqlclient/commands/SimpleCommandResult.java
Log:
previous version of variables broke a lot of commands
this version enables variables only for sql commands
Property changes on:
___________________________________________________________________
Name: svn:ignore
- target
+ target
.BUGS.txt.swp
Modified: db/testdb.properties
===================================================================
--- db/testdb.properties 2009-09-19 13:15:22 UTC (rev 419)
+++ db/testdb.properties 2009-09-21 18:55:07 UTC (rev 420)
@@ -1,5 +1,5 @@
-#HSQL Database Engine 1.8.0.7
-#Mon Aug 13 23:55:03 GMT+01:00 2007
+#HSQL Database Engine 1.8.0.8
+#Sat Sep 19 14:54:00 CEST 2009
hsqldb.script_format=0
runtime.gc_interval=0
sql.enforce_strict_size=false
Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java
===================================================================
--- src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2009-09-19 13:15:22 UTC (rev 419)
+++ src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -15,7 +15,6 @@
*/
package nl.improved.sqlclient;
-import nl.improved.sqlclient.commands.SettingsCommand;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
@@ -611,11 +610,11 @@
}
System.setErr(errorStream);
System.setOut(outStream);
- File errFile = getErrFile();
- if (errFile != null && errFile.length() > 0L) {
+ File errorFile = getErrFile();
+ if (errorFile != null && errorFile.length() > 0L) {
try {
System.out.println("There where errors during execution of sqlshell:");
- BufferedReader reader = new BufferedReader(new FileReader(errFile));
+ BufferedReader reader = new BufferedReader(new FileReader(errorFile));
String line;
while ( (line = reader.readLine()) != null) {
System.out.println(line);
@@ -2372,82 +2371,7 @@
}
}
- /**
- * Query command responsible for executing a sql query.
- */
- private class QueryCommand implements Command {
- /**
- * Executor for SQL Statements.
- */
- private StatementExecutor statementExecutor;
-
- /**
- * Execute the sql query.
- * @param cmd the sqlcommand containing the sql query
- * @return the result of the sql query.
- */
- @Override
- public CommandResult execute(SQLCommand cmd) {
- try {
- final String command = cmd.getCommandString();
- if (command.length() > "select".length() && "select".equalsIgnoreCase(command.subSequence(0, "create".length()).toString())) {
- return new CommandResult() {
- public boolean executedSuccessfully() {
- return true;
- }
- public Iterator<CharSequence> getResult() {
- try {
- return DBConnector.getInstance().getQueryExecutor().executeQuery(command);
- } catch (SQLException ex) {
- throw new IllegalArgumentException(ex);
- }
- }
- };
- }
- if (statementExecutor == null) {
- statementExecutor = new StatementExecutor();
- }
- return new SimpleCommandResult(true, statementExecutor.execute(command));
- } catch(SQLException e) {
- error(e);
- return new SimpleCommandResult(false, "");
- } catch(IllegalStateException e) {
- error(e);
- return new SimpleCommandResult(false, "");
- }
- }
-
- @Override
- public CharSequence getCommandString() {
- return "";
- }
-
- @Override
- public TabCompletionInfo getTabCompletionInfo(SQLCommand commandInfo, Point commandPoint) {
- // TODO call SQLUTil..
- debug("GET TAB COMPLETION OF QUERY COMMAND");
- return null;
- }
-
- @Override
- public CharSequence getHelp() {
- return "";
- }
-
- @Override
- public boolean abort() {
- //DBConnector.getInstance().getStatement().cancel();
- output(DBConnector.getInstance().getQueryExecutor().cancel());
- return true;
- }
- @Override
- public boolean backgroundProcessSupported() {
- return true;
- }
- }
-
-
/**
* The key action interface.
* Implement this interface for handling key actions.
Modified: src/main/java/nl/improved/sqlclient/QueryExecutor.java
===================================================================
--- src/main/java/nl/improved/sqlclient/QueryExecutor.java 2009-09-19 13:15:22 UTC (rev 419)
+++ src/main/java/nl/improved/sqlclient/QueryExecutor.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -149,13 +149,13 @@
}
}
- public CharSequence cancel() {
+ public boolean cancel() {
try {
DBConnector.getInstance().getStatement().cancel();
cancelled = true;
- return "Cancel accepted";
+ return true;
} catch (SQLException ex) {
- return "Cancel Failed: "+ ex.toString();
+ return false;
}
}
@@ -165,7 +165,7 @@
* @return the formatted result.
* @throws SQLException if the database could not execute the SQL query for some reason.
*/
- protected Iterator<CharSequence> executeQuery(CharSequence command) throws SQLException {
+ public Iterator<CharSequence> executeQuery(CharSequence command) throws SQLException {
cancelled = false;
long start = System.currentTimeMillis();
ResultSet results = DBConnector.getInstance().getStatement().executeQuery(command.toString());
Modified: src/main/java/nl/improved/sqlclient/SQLCommand.java
===================================================================
--- src/main/java/nl/improved/sqlclient/SQLCommand.java 2009-09-19 13:15:22 UTC (rev 419)
+++ src/main/java/nl/improved/sqlclient/SQLCommand.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -2,16 +2,12 @@
import java.util.List;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.Iterator;
-import java.util.Map;
public class SQLCommand {
private List<StringBuffer> commandLines;
- private static Map<String, String> variables = new HashMap<String, String>();
-
/**
* Constructor.
*/
@@ -27,27 +23,10 @@
commandLines.add(new StringBuffer(cmd));
}
- /**
- * Register variables.
- * @param var the variable name
- * @param value the variable value
- * @return the previous value, if any
- */
- public static String registerVariable(String var, String value) {
- return variables.put(var, value);
- }
- /**
- * Unregister variables.
- * @param var the variable name
- * @return the value, if any
- */
- public static String unregisterVariable(String var) {
- return variables.remove(var);
- }
-
public List<StringBuffer> getEditableLines() {
return commandLines;
}
+
public List<? extends CharSequence> getLines() {
return commandLines;
}
@@ -97,44 +76,7 @@
if (returnString.endsWith(";")) {
returnString = returnString.substring(0, returnString.length()-1).trim();
}
- return replaceVariables(returnString);
+ return returnString;
}
- private String replaceVariables(String returnString) {
- StringBuffer returnValue = new StringBuffer();
- int lastIndex = 0;
- int previous = 0;
- while ( (lastIndex = returnString.indexOf('@', lastIndex)) > 0) {
- returnValue.append(returnString.substring(previous, lastIndex));
- if (getQuoteCount(returnValue) %2 == 1) {
- returnValue.append(returnString.charAt(lastIndex));
- lastIndex++;
- previous = lastIndex;
- continue;
- }
- int end = returnString.indexOf(' ', lastIndex);
- if (end < 0) {
- end = returnString.indexOf(';', lastIndex);
- if (end < 0) {
- end = returnString.length();
- }
- }
- String varName = returnString.substring(lastIndex+1, end);
- returnValue.append(variables.get(varName));
- previous = end;
- lastIndex = end;
- }
- returnValue.append(returnString.substring(previous));
- return returnValue.toString();
- }
-
- static int getQuoteCount(StringBuffer returnValue) {
- int amount = 0;
- int lastIndex = 0;
- while ( (lastIndex = returnValue.indexOf("\'", lastIndex) ) > 0) {
- amount++;
- lastIndex++;
- }
- return amount;
- }
}
Modified: src/main/java/nl/improved/sqlclient/StatementExecutor.java
===================================================================
--- src/main/java/nl/improved/sqlclient/StatementExecutor.java 2009-09-19 13:15:22 UTC (rev 419)
+++ src/main/java/nl/improved/sqlclient/StatementExecutor.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -45,7 +45,7 @@
* @return info about the command execution.
* @throws SQLException if the database could not execute the SQL statement for some reason.
*/
- protected CharSequence execute(CharSequence command) throws SQLException {
+ public CharSequence execute(CharSequence command) throws SQLException {
Connection connection = DBConnector.getInstance().getConnection();
String commandString = command.toString();
//Special handling for commit
Modified: src/main/java/nl/improved/sqlclient/commands/DescCommand.java
===================================================================
--- src/main/java/nl/improved/sqlclient/commands/DescCommand.java 2009-09-19 13:15:22 UTC (rev 419)
+++ src/main/java/nl/improved/sqlclient/commands/DescCommand.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -15,12 +15,12 @@
*/
package nl.improved.sqlclient.commands;
+import nl.improved.sqlclient.SQLCommand;
import java.util.List;
import java.util.ArrayList;
import nl.improved.sqlclient.Point;
import nl.improved.sqlclient.SQLUtil;
import nl.improved.sqlclient.TabCompletionInfo;
-import nl.improved.sqlclient.SQLCommand;
import nl.improved.sqlclient.DBConnector;
import nl.improved.sqlclient.util.ResultBuilder;
import java.sql.ResultSet;
Modified: src/main/java/nl/improved/sqlclient/commands/InfoCommand.java
===================================================================
--- src/main/java/nl/improved/sqlclient/commands/InfoCommand.java 2009-09-19 13:15:22 UTC (rev 419)
+++ src/main/java/nl/improved/sqlclient/commands/InfoCommand.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -15,9 +15,9 @@
*/
package nl.improved.sqlclient.commands;
+import nl.improved.sqlclient.SQLCommand;
import nl.improved.sqlclient.Point;
import nl.improved.sqlclient.TabCompletionInfo;
-import nl.improved.sqlclient.SQLCommand;
import nl.improved.sqlclient.DBConnector;
import java.sql.SQLException;
import java.sql.DatabaseMetaData;
Added: src/main/java/nl/improved/sqlclient/commands/QueryCommand.java
===================================================================
--- src/main/java/nl/improved/sqlclient/commands/QueryCommand.java 2009-09-19 13:15:22 UTC (rev 419)
+++ src/main/java/nl/improved/sqlclient/commands/QueryCommand.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -0,0 +1,140 @@
+package nl.improved.sqlclient.commands;
+
+import nl.improved.sqlclient.*;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Query command responsible for executing a sql query.
+ */
+public class QueryCommand implements Command {
+
+
+ private static Map<String, String> variables = new HashMap<String, String>();
+ /**
+ * Executor for SQL Statements.
+ */
+ private StatementExecutor statementExecutor;
+
+ /**
+ * Register variables.
+ * @param var the variable name
+ * @param value the variable value
+ * @return the previous value, if any
+ */
+ public static String registerVariable(String var, String value) {
+ return variables.put(var, value);
+ }
+ /**
+ * Unregister variables.
+ * @param var the variable name
+ * @return the value, if any
+ */
+ public static String unregisterVariable(String var) {
+ return variables.remove(var);
+ }
+
+ /**
+ * Execute the sql query.
+ * @param cmd the sqlcommand containing the sql query
+ * @return the result of the sql query.
+ */
+ @Override
+ public CommandResult execute(SQLCommand cmd) {
+ try {
+ final String command = replaceVariables(cmd.getCommandString());
+ if (command.length() > "select".length() && "select".equalsIgnoreCase(command.subSequence(0, "create".length()).toString())) {
+ return new CommandResult() {
+
+ public boolean executedSuccessfully() {
+ return true;
+ }
+
+ public Iterator<CharSequence> getResult() {
+ try {
+ return DBConnector.getInstance().getQueryExecutor().executeQuery(command);
+ } catch (SQLException ex) {
+ throw new IllegalArgumentException(ex);
+ }
+ }
+ };
+ }
+ if (statementExecutor == null) {
+ statementExecutor = new StatementExecutor();
+ }
+ return new SimpleCommandResult(true, statementExecutor.execute(command));
+ } catch (SQLException e) {
+ return new SimpleCommandResult(e);
+ } catch (IllegalStateException e) {
+ return new SimpleCommandResult(e);
+ }
+ }
+
+ @Override
+ public CharSequence getCommandString() {
+ return "";
+ }
+
+ @Override
+ public TabCompletionInfo getTabCompletionInfo(SQLCommand commandInfo, Point commandPoint) {
+ // TODO call SQLUTil..
+ return null;
+ }
+
+ @Override
+ public CharSequence getHelp() {
+ return "";
+ }
+
+ @Override
+ public boolean abort() {
+ DBConnector.getInstance().getQueryExecutor().cancel();
+ //output(DBConnector.getInstance().getQueryExecutor().cancel());
+ return true;
+ }
+
+ @Override
+ public boolean backgroundProcessSupported() {
+ return true;
+ }
+
+ static String replaceVariables(String returnString) {
+ StringBuffer returnValue = new StringBuffer();
+ int lastIndex = 0;
+ int previous = 0;
+ while ( (lastIndex = returnString.indexOf('@', lastIndex)) > 0) {
+ returnValue.append(returnString.substring(previous, lastIndex));
+ if (getQuoteCount(returnValue) %2 == 1) {
+ returnValue.append(returnString.charAt(lastIndex));
+ lastIndex++;
+ previous = lastIndex;
+ continue;
+ }
+ int end = returnString.indexOf(' ', lastIndex);
+ if (end < 0) {
+ end = returnString.indexOf(';', lastIndex);
+ if (end < 0) {
+ end = returnString.length();
+ }
+ }
+ String varName = returnString.substring(lastIndex+1, end);
+ returnValue.append(variables.get(varName));
+ previous = end;
+ lastIndex = end;
+ }
+ returnValue.append(returnString.substring(previous));
+ return returnValue.toString();
+ }
+
+ static int getQuoteCount(StringBuffer returnValue) {
+ int amount = 0;
+ int lastIndex = 0;
+ while ( (lastIndex = returnValue.indexOf("\'", lastIndex) ) > 0) {
+ amount++;
+ lastIndex++;
+ }
+ return amount;
+ }
+}
Modified: src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java
===================================================================
--- src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2009-09-19 13:15:22 UTC (rev 419)
+++ src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -5,8 +5,8 @@
package nl.improved.sqlclient.commands;
+import nl.improved.sqlclient.SQLCommand;
import nl.improved.sqlclient.Point;
-import nl.improved.sqlclient.SQLCommand;
import nl.improved.sqlclient.TabCompletionInfo;
import nl.improved.sqlclient.util.ResultBuilder;
@@ -38,7 +38,7 @@
}
String varName = cmdString.substring(1, cmdString.indexOf('=')).trim();
String varValue = cmdString.substring(cmdString.indexOf('=')+1).trim();
- SQLCommand.registerVariable(varName, varValue);
+ QueryCommand.registerVariable(varName, varValue);
return new SimpleCommandResult(true, "Registred variable '"+varName+"' to value '"+varValue+"'");
}
Modified: src/main/java/nl/improved/sqlclient/commands/ShowCommand.java
===================================================================
--- src/main/java/nl/improved/sqlclient/commands/ShowCommand.java 2009-09-19 13:15:22 UTC (rev 419)
+++ src/main/java/nl/improved/sqlclient/commands/ShowCommand.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -15,8 +15,8 @@
*/
package nl.improved.sqlclient.commands;
+import nl.improved.sqlclient.SQLCommand;
import java.sql.DatabaseMetaData;
-import nl.improved.sqlclient.SQLCommand;
import nl.improved.sqlclient.DBConnector;
import nl.improved.sqlclient.Point;
import nl.improved.sqlclient.SQLUtil;
Modified: src/main/java/nl/improved/sqlclient/commands/SimpleCommandResult.java
===================================================================
--- src/main/java/nl/improved/sqlclient/commands/SimpleCommandResult.java 2009-09-19 13:15:22 UTC (rev 419)
+++ src/main/java/nl/improved/sqlclient/commands/SimpleCommandResult.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -16,12 +16,24 @@
public class SimpleCommandResult implements CommandResult {
private boolean success;
private CharSequence result;
+ private final Throwable throwable;
public SimpleCommandResult(boolean success, CharSequence result) {
this.success = success;
this.result = result;
+ throwable = null;
}
+ public SimpleCommandResult(Throwable t) {
+ this.success = false;
+ this.result = t.toString();
+ this.throwable = t;
+ }
+
+ public Throwable getThrowable() {
+ return throwable;
+ }
+
public boolean executedSuccessfully() {
return success;
}
Deleted: src/test/java/nl/improved/sqlclient/SQLCommandTest.java
===================================================================
--- src/test/java/nl/improved/sqlclient/SQLCommandTest.java 2009-09-19 13:15:22 UTC (rev 419)
+++ src/test/java/nl/improved/sqlclient/SQLCommandTest.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -1,66 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package nl.improved.sqlclient;
-
-import java.util.List;
-import junit.framework.TestCase;
-
-/**
- *
- * @author roy
- */
-public class SQLCommandTest extends TestCase {
-
- public SQLCommandTest(String testName) {
- super(testName);
- }
-
- /**
- * Test of registerVariable method, of class SQLCommand.
- */
- public void testRegisterVariable() {
- String var = "test";
- String value = "value";
- String expResult = null;
- String result = SQLCommand.registerVariable(var, value);
- assertEquals(expResult, result);
- value = "value2";
- expResult = "value";
- result = SQLCommand.registerVariable(var, value);
- assertEquals(expResult, result);
- }
-
- /**
- * Test of getCommandString method, of class SQLCommand.
- */
- public void testGetCommandString() {
- SQLCommand cmd = new SQLCommand("select * from test");
- assertEquals("select * from test", cmd.getCommandString());
- cmd = new SQLCommand("select * from test;");
- assertEquals("select * from test", cmd.getCommandString());
-
- cmd = new SQLCommand("select * from test where a='b';");
- assertEquals("select * from test where a='b'", cmd.getCommandString());
-
- // with variables
- cmd = new SQLCommand("select * from test where a=@b;");
- assertEquals("select * from test where a=null", cmd.getCommandString());
- SQLCommand.registerVariable("b", "'b'");
- assertEquals("select * from test where a='b'", cmd.getCommandString());
- cmd = new SQLCommand("select * from test where a='@b';");
- assertEquals("select * from test where a='@b'", cmd.getCommandString());
- }
-
- public void testQuoteCount() {
- StringBuffer buf = new StringBuffer("select * from test");
- assertEquals(0, SQLCommand.getQuoteCount(buf));
- buf.append(" where a='b");
- assertEquals(1, SQLCommand.getQuoteCount(buf));
- buf.append(" '");
- assertEquals(2, SQLCommand.getQuoteCount(buf));
-
- }
-}
Copied: src/test/java/nl/improved/sqlclient/commands/QueryCommandTest.java (from rev 418, src/test/java/nl/improved/sqlclient/SQLCommandTest.java)
===================================================================
--- src/test/java/nl/improved/sqlclient/SQLCommandTest.java 2009-09-19 12:55:14 UTC (rev 418)
+++ src/test/java/nl/improved/sqlclient/commands/QueryCommandTest.java 2009-09-21 18:55:07 UTC (rev 420)
@@ -0,0 +1,68 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package nl.improved.sqlclient.commands;
+
+import java.util.List;
+import junit.framework.TestCase;
+import nl.improved.sqlclient.SQLCommand;
+
+/**
+ *
+ * @author roy
+ */
+public class QueryCommandTest extends TestCase {
+
+ public QueryCommandTest(String testName) {
+ super(testName);
+ }
+
+ /**
+ * Test of registerVariable method, of class QueryCommand.
+ */
+ public void testRegisterVariable() {
+ String var = "test";
+ String value = "value";
+ String expResult = null;
+ String result = QueryCommand.registerVariable(var, value);
+ assertEquals(expResult, result);
+ value = "value2";
+ expResult = "value";
+ result = QueryCommand.registerVariable(var, value);
+ assertEquals(expResult, result);
+ }
+
+ /**
+ * Test of getCommandString method, of class QueryCommand.
+ */
+ public void testGetCommandString() {
+ SQLCommand cmd = new SQLCommand("select * from test");
+ assertEquals("select * from test"
+ , QueryCommand.replaceVariables(cmd.getCommandString()));
+ cmd = new SQLCommand("select * from test;");
+ assertEquals("select * from test" , QueryCommand.replaceVariables(cmd.getCommandString()));
+
+ cmd = new SQLCommand("select * from test where a='b';");
+ assertEquals("select * from test where a='b'", QueryCommand.replaceVariables(cmd.getCommandString()));
+
+ // with variables
+ cmd = new SQLCommand("select * from test where a=@b;");
+ assertEquals("select * from test where a=null", QueryCommand.replaceVariables(cmd.getCommandString()));
+ QueryCommand.registerVariable("b", "'b'");
+ assertEquals("select * from test where a='b'", QueryCommand.replaceVariables(cmd.getCommandString()));
+ cmd = new SQLCommand("select * from test where a='@b';");
+ assertEquals("select * from test where a='@b'", QueryCommand.replaceVariables(cmd.getCommandString()));
+ }
+
+ public void testQuoteCount() {
+ StringBuffer buf = new StringBuffer("select * from test");
+ assertEquals(0, QueryCommand.getQuoteCount(buf));
+ buf.append(" where a='b");
+ assertEquals(1, QueryCommand.getQuoteCount(buf));
+ buf.append(" '");
+ assertEquals(2, QueryCommand.getQuoteCount(buf));
+
+ }
+}
Property changes on: src/test/java/nl/improved/sqlclient/commands/QueryCommandTest.java
___________________________________________________________________
Name: svn:mergeinfo
+
|