From: SVN by r. <sv...@ca...> - 2008-09-04 12:32:20
|
Author: roy Date: 2008-09-04 14:32:02 +0200 (Thu, 04 Sep 2008) New Revision: 303 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: improve some tabcompletion Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-09-01 09:53:07 UTC (rev 302) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-09-04 12:32:02 UTC (rev 303) @@ -246,14 +246,19 @@ String regExp = "(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"))))*))|[\\s]*IN[\\s]*(.*)[\\s]*))"; if (upperCommandString.matches(regExp)) { int lastIndex = tmpCommand.lastIndexOf(' '); - lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('.')); lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('\t')); lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('=')); lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('>')); lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('>')); + int lastBreakIndex = lastIndex; + lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('.')); String end = tmpCommand.substring(lastIndex+1); + if (lastBreakIndex < 0) lastBreakIndex = 0; + List tableNames = (lastIndex > lastBreakIndex) && lastBreakIndex >=0 ? + Arrays.asList(new String[]{tmpCommand.substring(lastBreakIndex,lastIndex).trim()}) : + parseTableNames(commandInfo, commandPoint); return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES - , parseTableNames(commandInfo, commandPoint), end); + , tableNames, end); } //else System.out.println("'"+upperCommandString +"'\n not matches\n"+regExp); String end = ""; Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-09-01 09:53:07 UTC (rev 302) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-09-04 12:32:02 UTC (rev 303) @@ -371,7 +371,7 @@ assertNotNull(info); assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); matches = info.getPossibleMatches(); - assertTrue(matches.contains("A")); + assertTrue(matches.toString(), matches.contains("A")); assertEquals("x", info.getStart()); sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE c like 'a%' and A.x"}); @@ -509,6 +509,18 @@ assertEquals("", info.getStart()); } + public void testGetTableName() { + List<String> sqlCommand = Arrays.asList(new String[]{"select * from a where mytable.b"}); + 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(1, matches.size()); + assertEquals("b", info.getStart()); + assertTrue("Table name should match 'mytable', but was " + matches.get(0), matches.contains("mytable")); + } + /* public void testTabCompletionInfoDESC() { List<String> sqlCommand = Arrays.asList(new String[]{"DESC "}); Point cursorPos = new Point(sqlCommand.get(0).length(),0); |