From: SVN by r. <sv...@ca...> - 2009-12-08 10:15:04
|
Author: roy Date: 2009-12-08 11:14:51 +0100 (Tue, 08 Dec 2009) New Revision: 431 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: some tab completion fixes Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2009-12-08 10:14:25 UTC (rev 430) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2009-12-08 10:14:51 UTC (rev 431) @@ -282,12 +282,44 @@ } else if (lastKeyword.equalsIgnoreCase("GROUP BY") || lastKeyword.equalsIgnoreCase("ORDER 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(","))); + //String columns = startOfCommand.substring(upperStart.indexOf("SELECT")+"SELECT".length(), upperStart.indexOf("FROM")).replaceAll(" ",""); + String columns = startOfCommand.substring(upperStart.indexOf("SELECT")+"SELECT".length(), upperStart.indexOf("FROM")); + return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES, getColumns(columns)); } return new TabCompletionInfo(TabCompletionInfo.MatchType.OTHER, Arrays.asList(new String[0])); } + static List<String> getColumns(String columnsString) { + int charOpenCount = 0; + int roundOpenCount = 0; + List<String> result = new ArrayList<String>(); + StringBuffer tmp = new StringBuffer(); + for (int i = 0; i < columnsString.length(); i++) { + char c = columnsString.charAt(i); + if (c == '(') { + roundOpenCount++; + tmp.append(c); + } else if (c == ')') { + roundOpenCount--; + tmp.append(c); + } else if (c == '\'') { + charOpenCount++; + tmp.append(c); + } else if (c == ',' && charOpenCount % 2 == 0 && roundOpenCount == 0) { + result.add(tmp.toString().trim()); + tmp = new StringBuffer(); + } else { + tmp.append(c); + } + } + if (tmp.length() > 0) { + result.add(tmp.toString().trim()); + } + + return result; + + } + public static String getStartOfCommand(List<? extends CharSequence> commandInfo, Point commandPoint) { StringBuffer buff = new StringBuffer(); for (int i = 0; i <= commandPoint.y; i++) { Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2009-12-08 10:14:25 UTC (rev 430) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2009-12-08 10:14:51 UTC (rev 431) @@ -27,6 +27,21 @@ public SQLUtilTest() { } + public void testGetColumns() { + String columns = "A, B"; + List<String> result = SQLUtil.getColumns(columns); + assertNotNull(result); + assertEquals(2, result.size()); + assertTrue(result.contains("A")); + assertTrue(result.contains("B")); + + columns = "A, to_char(datein, 'yyyy')"; + result = SQLUtil.getColumns(columns); + assertNotNull(result); + assertEquals(2, result.size()); + assertTrue(result.contains("A")); + assertTrue(result.toString(), result.contains("to_char(datein, 'yyyy')")); + } public void testGetLastKeyWord() { String sql = "SELECT *"; assertEquals("SELECT", SQLUtil.getLastKeyWord(sql)); @@ -425,6 +440,15 @@ matches = info.getPossibleMatches(); assertEquals(2, matches.size()); assertTrue(matches.contains("c2")); + + sqlCommand = Arrays.asList(new String[]{"SELECT c1 , to_char(datein, 'yyyymmdd') FROM A,B WHERE a.b=b.b GROUP BY c1, "}); + 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.toString(), matches.contains("to_char(datein, 'yyyymmdd')")); } public void testOrderBy() { |