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 + |