|
From: SVN by r. <sv...@ca...> - 2008-02-10 16:33:56
|
Author: roy
Date: 2008-02-10 16:17:36 +0100 (Sun, 10 Feb 2008)
New Revision: 233
Modified:
src/main/java/nl/improved/sqlclient/SQLUtil.java
src/test/java/nl/improved/sqlclient/SQLUtilTest.java
Log:
fixed deadlock because of a bug in the regular expression code of java
Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java
===================================================================
--- src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-30 11:49:04 UTC (rev 232)
+++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-02-10 15:17:36 UTC (rev 233)
@@ -215,7 +215,9 @@
String WHERE = "W|WH|WHE|WHER|WHERE";
String GROUP_BY = "G|GR|GRO|GROU|GROUP|GROUP |GROUP B|GROUP BY";
String ORDER_BY = "O|OR|ORD|ORDE|ORDER|ORDER |ORDER B|ORDER BY";
- if (tmpCommand.matches("[\\s]*"+VAR+"+([\\s]*,[\\s]*"+VAR+"+)*[\\s]+(|"+WHERE+"|"+GROUP_BY+"|"+ORDER_BY+")")) {
+ //String regexpSQL = "[\\s]*"+VAR+"+([\\s]*,[\\s]*"+VAR+"+)*[\\s]+(|"+WHERE+"|"+GROUP_BY+"|"+ORDER_BY+")";
+ String regexpSQL = ".*"+VAR+"[\\s]+(|"+WHERE+"|"+GROUP_BY+"|"+ORDER_BY+")";
+ if (tmpCommand.matches(regexpSQL)) {
String end = startOfCommand.substring(startOfCommand.lastIndexOf(' ')+1);
return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD
, Arrays.asList(new String[]{"WHERE", "GROUP BY", "ORDER BY"}), end);
@@ -257,7 +259,7 @@
return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES
, parseTableNames(commandInfo, commandPoint), end);
}
- System.out.println("'"+upperCommandString +"'\n not matches\n"+regExp);
+ //System.out.println("'"+upperCommandString +"'\n not matches\n"+regExp);
String end = "";
if (upperCommandString.matches(".*[\\s]+")) {
end = "";
Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java
===================================================================
--- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-30 11:49:04 UTC (rev 232)
+++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-02-10 15:17:36 UTC (rev 233)
@@ -160,6 +160,24 @@
assertEquals(0, matches.size());
assertEquals("B", info.getStart());
+ sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B,C"});
+ cursorPos = new Point(sqlCommand.get(0).length(),0);
+ info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos);
+ assertNotNull(info);
+ assertEquals(TabCompletionInfo.MatchType.TABLE_NAMES, info.getMatchType());
+ matches = info.getPossibleMatches();
+ assertEquals(0, matches.size());
+ assertEquals("C", info.getStart());
+
+ sqlCommand = Arrays.asList(new String[]{"select * from testdata, TESTDATA, TESTDATA, t"});
+ cursorPos = new Point(sqlCommand.get(0).length(),0);
+ info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos);
+ assertNotNull(info);
+ assertEquals(TabCompletionInfo.MatchType.TABLE_NAMES, info.getMatchType());
+ matches = info.getPossibleMatches();
+ assertEquals(0, matches.size());
+ assertEquals("t", info.getStart());
+
sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A WHERE 1=1"});
cursorPos = new Point("SELECT * FROM A".length(),0);
info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos);
@@ -243,7 +261,7 @@
matches = info.getPossibleMatches();
//assertEquals(1, matches.size());
assertTrue(matches.contains("A"));
- System.out.println("I: " + info.getStart());
+ //System.out.println("I: " + info.getStart());
assertEquals("I", info.getStart());
sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE A."});
@@ -254,7 +272,7 @@
matches = info.getPossibleMatches();
//assertEquals(1, matches.size());
assertTrue(matches.contains("A"));
- System.out.println("I:'" + info.getStart() +"'");
+ //System.out.println("I:'" + info.getStart() +"'");
assertEquals("", info.getStart());
// with other conditions
|