|
From: SVN by r. <sv...@ca...> - 2009-12-08 10:15:04
|
Author: roy
Date: 2009-12-08 11:14:51 +0100 (Tue, 08 Dec 2009)
New Revision: 431
Modified:
src/main/java/nl/improved/sqlclient/SQLUtil.java
src/test/java/nl/improved/sqlclient/SQLUtilTest.java
Log:
some tab completion fixes
Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java
===================================================================
--- src/main/java/nl/improved/sqlclient/SQLUtil.java 2009-12-08 10:14:25 UTC (rev 430)
+++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2009-12-08 10:14:51 UTC (rev 431)
@@ -282,12 +282,44 @@
} else if (lastKeyword.equalsIgnoreCase("GROUP BY")
|| lastKeyword.equalsIgnoreCase("ORDER BY")) {
String upperStart = startOfCommand.toUpperCase();
- String columns = startOfCommand.substring(upperStart.indexOf("SELECT")+"SELECT".length(), upperStart.indexOf("FROM")).replaceAll(" ","");
- return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES, Arrays.asList(columns.split(",")));
+ //String columns = startOfCommand.substring(upperStart.indexOf("SELECT")+"SELECT".length(), upperStart.indexOf("FROM")).replaceAll(" ","");
+ String columns = startOfCommand.substring(upperStart.indexOf("SELECT")+"SELECT".length(), upperStart.indexOf("FROM"));
+ return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES, getColumns(columns));
}
return new TabCompletionInfo(TabCompletionInfo.MatchType.OTHER, Arrays.asList(new String[0]));
}
+ static List<String> getColumns(String columnsString) {
+ int charOpenCount = 0;
+ int roundOpenCount = 0;
+ List<String> result = new ArrayList<String>();
+ StringBuffer tmp = new StringBuffer();
+ for (int i = 0; i < columnsString.length(); i++) {
+ char c = columnsString.charAt(i);
+ if (c == '(') {
+ roundOpenCount++;
+ tmp.append(c);
+ } else if (c == ')') {
+ roundOpenCount--;
+ tmp.append(c);
+ } else if (c == '\'') {
+ charOpenCount++;
+ tmp.append(c);
+ } else if (c == ',' && charOpenCount % 2 == 0 && roundOpenCount == 0) {
+ result.add(tmp.toString().trim());
+ tmp = new StringBuffer();
+ } else {
+ tmp.append(c);
+ }
+ }
+ if (tmp.length() > 0) {
+ result.add(tmp.toString().trim());
+ }
+
+ return result;
+
+ }
+
public static String getStartOfCommand(List<? extends CharSequence> commandInfo, Point commandPoint) {
StringBuffer buff = new StringBuffer();
for (int i = 0; i <= commandPoint.y; i++) {
Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java
===================================================================
--- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2009-12-08 10:14:25 UTC (rev 430)
+++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2009-12-08 10:14:51 UTC (rev 431)
@@ -27,6 +27,21 @@
public SQLUtilTest() {
}
+ public void testGetColumns() {
+ String columns = "A, B";
+ List<String> result = SQLUtil.getColumns(columns);
+ assertNotNull(result);
+ assertEquals(2, result.size());
+ assertTrue(result.contains("A"));
+ assertTrue(result.contains("B"));
+
+ columns = "A, to_char(datein, 'yyyy')";
+ result = SQLUtil.getColumns(columns);
+ assertNotNull(result);
+ assertEquals(2, result.size());
+ assertTrue(result.contains("A"));
+ assertTrue(result.toString(), result.contains("to_char(datein, 'yyyy')"));
+ }
public void testGetLastKeyWord() {
String sql = "SELECT *";
assertEquals("SELECT", SQLUtil.getLastKeyWord(sql));
@@ -425,6 +440,15 @@
matches = info.getPossibleMatches();
assertEquals(2, matches.size());
assertTrue(matches.contains("c2"));
+
+ sqlCommand = Arrays.asList(new String[]{"SELECT c1 , to_char(datein, 'yyyymmdd') 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.toString(), matches.contains("to_char(datein, 'yyyymmdd')"));
}
public void testOrderBy() {
|