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); |