From: SVN by r. <sv...@ca...> - 2009-03-16 08:38:46
|
Author: roy Date: 2009-03-16 09:38:36 +0100 (Mon, 16 Mar 2009) New Revision: 396 Modified: src/main/java/nl/improved/sqlclient/util/SQLParser.java src/test/java/nl/improved/sqlclient/util/SQLParserTest.java Log: more tab compl fixes Modified: src/main/java/nl/improved/sqlclient/util/SQLParser.java =================================================================== --- src/main/java/nl/improved/sqlclient/util/SQLParser.java 2009-03-15 20:44:38 UTC (rev 395) +++ src/main/java/nl/improved/sqlclient/util/SQLParser.java 2009-03-16 08:38:36 UTC (rev 396) @@ -47,6 +47,7 @@ List<? extends CharSequence> lines = command.getLines(); return getTabCompletionInfo(lines, commandPoint); } + public static TabCompletionInfo getTabCompletionInfo(List<? extends CharSequence> lines, Point commandPoint) { StringBuffer buf = new StringBuffer(); int position = 0; @@ -396,13 +397,29 @@ return new TabCompletionInfo(TabCompletionInfo.MatchType.OTHER , Arrays.asList(new String[]{" "})); } - String tmpCommand = startOfCommand.substring(startOfCommand.toUpperCase().indexOf("WHERE")+"WHERE".length()+1); + String tmpCommand = startOfCommand.substring(startOfCommand.toUpperCase().indexOf("WHERE")+"WHERE".length()); String upperCommandString = tmpCommand.toUpperCase(); + if (upperCommandString.indexOf("AND") >= 0) { + String tmp = upperCommandString.substring(upperCommandString.lastIndexOf("AND")+3); + if (tmp.trim().length() > 0) { + upperCommandString = tmp; + } + } + if (upperCommandString.indexOf("OR") >= 0) { + String tmp = upperCommandString.substring(upperCommandString.lastIndexOf("OR")+2); + if (tmp.trim().length() > 0) { + upperCommandString = tmp; + } + } + if (upperCommandString.equals("")) { + return new TabCompletionInfo(TabCompletionInfo.MatchType.OTHER + , Arrays.asList(new String[]{" "})); + } //String VAR = "(|"+TABLE+"\\.)(|"+COLUMN+")"; //String VALUE = "('.*'|[0-9]+|"+VAR+")"; // VALUE COMPERATOR VALUE // VALUE IN (.*) - String regExp = "(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"))))*))|[\\s]*IN[\\s]*(.*)[\\s]*))"; + String regExp = "[\\s]*(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"))))*))|[\\s]*IN[\\s]*(.*)[\\s]*))"; if (upperCommandString.matches(regExp) || upperCommandString.endsWith(".")) { int lastIndex = tmpCommand.lastIndexOf(' '); lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('\t')); Modified: src/test/java/nl/improved/sqlclient/util/SQLParserTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/util/SQLParserTest.java 2009-03-15 20:44:38 UTC (rev 395) +++ src/test/java/nl/improved/sqlclient/util/SQLParserTest.java 2009-03-16 08:38:36 UTC (rev 396) @@ -400,7 +400,7 @@ Point cursorPos = new Point(sqlCommand.get(0).length(),0); TabCompletionInfo info = SQLParser.getTabCompletionInfo(sqlCommand, cursorPos); assertNotNull(info); - assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); + assertEquals(info.getPossibleMatches().toString(), TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); List<String> matches = info.getPossibleMatches(); assertEquals(2, matches.size()); assertTrue(matches.contains("A")); @@ -605,6 +605,15 @@ matches = info.getPossibleMatches(); assertTrue(matches.contains("A")); assertEquals("", info.getStart()); + + sqlCommand = Arrays.asList(new String[]{"select * from L where s is not null and t='p' and m"}); + cursorPos = new Point(sqlCommand.get(0).length(),0); + info = SQLParser.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(info.getPossibleMatches().toString(), TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); + matches = info.getPossibleMatches(); + assertTrue(matches.contains("L")); + assertEquals("m", info.getStart()); } public void testGroupBy() { |