From: SVN by r. <sv...@ca...> - 2010-01-24 14:35:27
|
Author: roy Date: 2010-01-24 15:35:05 +0100 (Sun, 24 Jan 2010) New Revision: 461 Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java src/main/java/nl/improved/sqlclient/TabCompletionInfo.java src/main/java/nl/improved/sqlclient/util/SQLParser.java src/test/java/nl/improved/sqlclient/util/SQLParserTest.java Log: variables(@) tab completion support added Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java =================================================================== --- src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2010-01-24 14:34:35 UTC (rev 460) +++ src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2010-01-24 14:35:05 UTC (rev 461) @@ -1002,6 +1002,13 @@ }*/ return nullToEmpty(findMatch(getColumnNames(info.getPossibleMatches()), info.getStart())); } + if (info.getMatchType() == TabCompletionInfo.MatchType.VARIABLE) { + List<String> vars = new ArrayList<String>(); + for (String var : QueryCommand.getVariables().keySet()) { + vars.add("@"+var); + } + return nullToEmpty(findMatch(vars, info.getStart())); + } if (info.getMatchType() == TabCompletionInfo.MatchType.OTHER) { return nullToEmpty(findMatch(info.getPossibleMatches(), info.getStart())); } Modified: src/main/java/nl/improved/sqlclient/TabCompletionInfo.java =================================================================== --- src/main/java/nl/improved/sqlclient/TabCompletionInfo.java 2010-01-24 14:34:35 UTC (rev 460) +++ src/main/java/nl/improved/sqlclient/TabCompletionInfo.java 2010-01-24 14:35:05 UTC (rev 461) @@ -18,7 +18,7 @@ import java.util.List; public class TabCompletionInfo { - public enum MatchType {SQL_KEYWORD, TABLE_NAMES, COLUMN_NAMES, FILE_NAMES, OTHER} + public enum MatchType {SQL_KEYWORD, TABLE_NAMES, COLUMN_NAMES, FILE_NAMES, VARIABLE, OTHER} private MatchType type; private List<String> possibleMatches; Modified: src/main/java/nl/improved/sqlclient/util/SQLParser.java =================================================================== --- src/main/java/nl/improved/sqlclient/util/SQLParser.java 2010-01-24 14:34:35 UTC (rev 460) +++ src/main/java/nl/improved/sqlclient/util/SQLParser.java 2010-01-24 14:35:05 UTC (rev 461) @@ -530,6 +530,10 @@ lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('>')); end = tmpCommand.substring(lastIndex+1); } + if (end.trim().startsWith("@")) { + return new TabCompletionInfo(TabCompletionInfo.MatchType.VARIABLE + , Arrays.asList(new String[0]), end); + } return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"}), end); } Modified: src/test/java/nl/improved/sqlclient/util/SQLParserTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/util/SQLParserTest.java 2010-01-24 14:34:35 UTC (rev 460) +++ src/test/java/nl/improved/sqlclient/util/SQLParserTest.java 2010-01-24 14:35:05 UTC (rev 461) @@ -49,6 +49,18 @@ assertEquals(expResult, result); } + public void testParseWhereUsingVars() { + CharSequence sql = "SELECT * FROM TESTTABLE WHERE A=@B"; + List<SQLPart> expResult = Arrays.asList(new SQLPart[]{ + new SQLPart(SQLPart.SQLType.SELECT, "SELECT * "), + new SQLPart(SQLPart.SQLType.FROM, "FROM TESTTABLE "), + new SQLPart(SQLPart.SQLType.WHERE, "WHERE A=@B") + }); + List<SQLPart> result = SQLParser.parse(sql); + assertEquals(expResult.size(), result.size()); + assertEquals(expResult, result); + } + public void testParseGroupBy() { CharSequence sql = "SELECT * FROM TESTTABLE WHERE A=B GROUP BY test.a"; List<SQLPart> expResult = Arrays.asList(new SQLPart[]{ @@ -940,4 +952,14 @@ assertTrue("Table name should match 'testtable', but was " + matches.get(0), matches.contains("testtable")); } + public void testGetVariable() { + List<String> sqlCommand = Arrays.asList(new String[]{"select * from a where a=@a"}); + Point cursorPos = new Point(sqlCommand.get(0).length(),0); + TabCompletionInfo info = SQLParser.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(TabCompletionInfo.MatchType.VARIABLE, info.getMatchType()); + List<String> matches = info.getPossibleMatches(); + assertEquals(0, matches.size()); + assertEquals("@a", info.getStart()); + } } |