From: SVN by r. <sv...@ca...> - 2008-03-03 07:39:31
|
Author: roy Date: 2008-03-03 08:39:20 +0100 (Mon, 03 Mar 2008) New Revision: 248 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: more tab completion issues fixed Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-03-02 14:09:51 UTC (rev 247) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-03-03 07:39:20 UTC (rev 248) @@ -45,13 +45,13 @@ /** * SQL Comparators. */ - private static final String COMPARATOR = "(IN|=|<>|<|>)"; + private static final String COMPARATOR = "(=|<>|<|>)"; /** * A sql variable description. */ private static final String VALUE = "('.*'|[0-9]+|"+VAR+")"; - public static List<String> KEYWORDS = Arrays.asList(new String[]{"SELECT", "UPDATE", "FROM", "WHERE", "VALUES", "SET", "INSERT", "INTO", "DELETE", "IS", "NULL", "IN", "NOT", "GROUP BY", "ORDER BY", "DESC"}); + public static List<String> KEYWORDS = Arrays.asList(new String[]{"SELECT", "UPDATE", "FROM", "WHERE", "VALUES", "SET", "INSERT", "INTO", "DELETE", "GROUP BY", "ORDER BY", "DESC"}); /** * Private constructor. @@ -240,15 +240,11 @@ String upperCommandString = tmpCommand.toUpperCase(); String VAR = "(|"+TABLE+"\\.)(|"+COLUMN+")"; String VALUE = "('.*'|[0-9]+|"+VAR+")"; - String subPart = "(|"+VAR+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VAR+")))"; - //String regExp = "(|"+VALUE+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+)))))"; - String regExp = "(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"))))*))))"; + // 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]*))"; if (upperCommandString.matches(regExp)) { -/* String end = tmpCommand.substring(tmpCommand.lastIndexOf(' ')+1); - if (end.indexOf(".") > 0) { - end = end.substring(end.indexOf(".")+1); - } -*/ int lastIndex = tmpCommand.lastIndexOf(' '); lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('.')); lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('\t')); @@ -259,7 +255,7 @@ return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES , parseTableNames(commandInfo, commandPoint), end); } - //System.out.println("'"+upperCommandString +"'\n not matches\n"+regExp); + //else System.out.println("'"+upperCommandString +"'\n not matches\n"+regExp); String end = ""; if (upperCommandString.matches(".*[\\s]+")) { end = ""; @@ -273,35 +269,6 @@ } return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"}), end); - /*String tmpCommand = startOfCommand.substring(startOfCommand.indexOf(lastKeyword)+lastKeyword.length()+1).toUpperCase(); - if (startOfCommand.trim().endsWith(lastKeyword) - || tmpCommand.matches(".*(AND|OR)(|[\\s]+(|"+VAR+"))")) { - int beginIndex = startOfCommand.lastIndexOf(lastKeyword) + lastKeyword.length(); - if (startOfCommand.endsWith(" ")) { - return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES - , parseTableNames(commandInfo, commandPoint)); - } else { - int lastSpace = startOfCommand.lastIndexOf(' '); - return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES - , parseTableNames(commandInfo, commandPoint), startOfCommand.substring(lastSpace+1)); - } - } - if (tmpCommand.matches(VAR+"[\\s]*(|(|("+COMPARATOR+")[\\s]*"+VALUE+"*))")) { - String tmp = startOfCommand.substring(Math.max(startOfCommand.lastIndexOf(',')+1 - , startOfCommand.lastIndexOf(' ')+1)); - List<String> tableNames; - if (tmp.indexOf('.') > 0) { - tableNames = Arrays.asList(new String[]{tmp.substring(0, tmp.indexOf('.'))}); - tmp = tmp.substring(tmp.indexOf('.')+1); - } else { - tableNames = parseTableNames(commandInfo, commandPoint); - } - return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES - , tableNames, tmp); - } - return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD - , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"})); - */ } else if (lastKeyword.equalsIgnoreCase("GROUP BY") || lastKeyword.equalsIgnoreCase("ORDER BY")) { String upperStart = startOfCommand.toUpperCase(); Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-03-02 14:09:51 UTC (rev 247) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-03-03 07:39:20 UTC (rev 248) @@ -363,6 +363,17 @@ matches = info.getPossibleMatches(); assertTrue(matches.contains("AND")); assertEquals("a", info.getStart()); + + + sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE c in('c','d','e') and A.x"}); + cursorPos = new Point(sqlCommand.get(0).length(),0); + assertEquals("WHERE", SQLUtil.getLastKeyWord(sqlCommand.get(0))); + info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); + matches = info.getPossibleMatches(); + assertTrue(matches.contains("A")); + assertEquals("x", info.getStart()); } public void testGroupBy() { @@ -386,6 +397,25 @@ 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 c"}); + 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")); + + sqlCommand = Arrays.asList(new String[]{"SELECT c1 , c2 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.contains("c2")); } public void testOrderBy() { |