|
From: SVN by r. <sv...@ca...> - 2008-01-12 11:08:09
|
Author: roy
Date: 2008-01-12 11:52:04 +0100 (Sat, 12 Jan 2008)
New Revision: 208
Modified:
src/main/java/nl/improved/sqlclient/SQLUtil.java
src/test/java/nl/improved/sqlclient/SQLUtilTest.java
Log:
group by: initial support for tab completion added
Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java
===================================================================
--- src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-10 19:20:50 UTC (rev 207)
+++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-12 10:52:04 UTC (rev 208)
@@ -212,10 +212,13 @@
// 'SELECT x FROM A '
// return WHERE
String tmpCommand = startOfCommand.substring(startOfCommand.indexOf(lastKeyword)+lastKeyword.length()+1).toUpperCase();
- if (tmpCommand.matches("[\\s]*"+VAR+"+([\\s]*,[\\s]*"+VAR+"+)*[\\s]+(|W|WH|WHE|WHER|WHERE)")) {
+ String WHERE = "W|WH|WHE|WHER|WHERE";
+ String GROUP_BY = "G|GR|GRO|GROU|GROUP|GROUP |GROUP B|GROUP BY";
+ String ORDER_BY = "O|OR|ORD|ORDE|ORDER|ORDER |ORDER B|ORDER BY";
+ if (tmpCommand.matches("[\\s]*"+VAR+"+([\\s]*,[\\s]*"+VAR+"+)*[\\s]+(|"+WHERE+"|"+GROUP_BY+"|"+ORDER_BY+")")) {
String end = startOfCommand.substring(startOfCommand.lastIndexOf(' ')+1);
return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD
- , Arrays.asList(new String[]{"WHERE"}), end);
+ , Arrays.asList(new String[]{"WHERE", "GROUP BY", "ORDER BY"}), end);
}
String end;
startOfCommand = startOfCommand.substring(startOfCommand.toUpperCase().indexOf("FROM"));
@@ -295,6 +298,10 @@
return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD
, Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"}));
*/
+ } else if (lastKeyword.equalsIgnoreCase("GROUP BY")) {
+ String upperStart = startOfCommand.toUpperCase();
+ String columns = startOfCommand.substring(upperStart.indexOf("SELECT")+"SELECT".length(), upperStart.indexOf("FROM")).replaceAll(" ","");
+ return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES, Arrays.asList(columns.split(",")));
}
return new TabCompletionInfo(TabCompletionInfo.MatchType.UNKNOWN, Arrays.asList(new String[0]));
}
Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java
===================================================================
--- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-10 19:20:50 UTC (rev 207)
+++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-12 10:52:04 UTC (rev 208)
@@ -186,8 +186,10 @@
assertNotNull(info);
assertEquals(TabCompletionInfo.MatchType.SQL_KEYWORD, info.getMatchType());
List<String> matches = info.getPossibleMatches();
- assertEquals(1, matches.size());
+ assertEquals(3, matches.size());
assertTrue(matches.contains("WHERE"));
+ assertTrue(matches.contains("GROUP BY"));
+ assertTrue(matches.contains("ORDER BY"));
sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WH"});
cursorPos = new Point(sqlCommand.get(0).length(),0);
@@ -195,7 +197,7 @@
assertNotNull(info);
assertEquals(TabCompletionInfo.MatchType.SQL_KEYWORD, info.getMatchType());
matches = info.getPossibleMatches();
- assertEquals(1, matches.size());
+ assertEquals(3, matches.size());
assertTrue(matches.contains("WHERE"));
assertEquals("WH", info.getStart());
}
@@ -334,6 +336,29 @@
assertEquals("a", info.getStart());
}
+ public void testGroupBy() {
+ List<String> sqlCommand = Arrays.asList(new String[]{"SELECT c1,c2 FROM A,B WHERE a.b=b.b GROUP BY "});
+ Point cursorPos = new Point(sqlCommand.get(0).length(),0);
+ TabCompletionInfo info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos);
+ assertNotNull(info);
+ assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType());
+ List<String> matches = info.getPossibleMatches();
+ assertEquals(2, matches.size());
+ assertTrue(matches.contains("c1"));
+ assertTrue(matches.contains("c2"));
+
+
+ sqlCommand = Arrays.asList(new String[]{"SELECT c1 , c2 FROM A,B WHERE a.b=b.b GROUP BY "});
+ cursorPos = new Point(sqlCommand.get(0).length(),0);
+ info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos);
+ assertNotNull(info);
+ assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType());
+ matches = info.getPossibleMatches();
+ assertEquals(2, matches.size());
+ assertTrue(matches.contains("c1"));
+ assertTrue(matches.contains("c2"));
+ }
+
public void testParseTableNames() {
List<String> sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A WHERE "});
Point cursorPos = new Point(sqlCommand.get(0).length(),0);
|