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());
+ }
}
|