|
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() {
|