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