|
From: SVN by r. <sv...@ca...> - 2009-02-27 20:13:28
|
Author: roy
Date: 2009-02-27 21:13:20 +0100 (Fri, 27 Feb 2009)
New Revision: 381
Modified:
src/main/java/nl/improved/sqlclient/SQLUtil.java
src/main/java/nl/improved/sqlclient/util/SQLParser.java
src/main/java/nl/improved/sqlclient/util/SQLPart.java
Log:
added unit test stuff
improved group by and order by tab completion
Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java
===================================================================
--- src/main/java/nl/improved/sqlclient/SQLUtil.java 2009-02-27 08:10:51 UTC (rev 380)
+++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2009-02-27 20:13:20 UTC (rev 381)
@@ -19,6 +19,7 @@
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Iterator;
+import nl.improved.sqlclient.util.SQLParser;
/**
* A SQL Utility class.
@@ -133,6 +134,9 @@
* @return tab completion info for the provided command lines.
*/
public static TabCompletionInfo getTabCompletionInfo(List<? extends CharSequence> commandInfo, Point commandPoint) {
+ /*if (true) {
+ return SQLParser.getTabCompletionInfo(commandInfo, commandPoint);
+ }*/
if (commandInfo.size() == 1 && commandInfo.get(0).length() == 0) {
return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD
, Arrays.asList(new String[]{"SELECT", "INSERT INTO", "DELETE FROM", "UPDATE"}));
Modified: src/main/java/nl/improved/sqlclient/util/SQLParser.java
===================================================================
--- src/main/java/nl/improved/sqlclient/util/SQLParser.java 2009-02-27 08:10:51 UTC (rev 380)
+++ src/main/java/nl/improved/sqlclient/util/SQLParser.java 2009-02-27 20:13:20 UTC (rev 381)
@@ -199,6 +199,7 @@
String pSubPart = pPart.getPart().toString().substring("SELECT".length()).trim();
int lastIndex = 0;
int newIndex;
+ StringBuffer bestMatch = new StringBuffer();
while ( (newIndex = pSubPart.indexOf(',', lastIndex)) > 0) {
String colName = pSubPart.substring(lastIndex, newIndex).trim();
if (colName.indexOf(' ') >=0) {
@@ -206,6 +207,12 @@
}
if (!possibleMatches.contains(colName)) {
possibleMatches.add(colName);
+ if (colName.indexOf('(') < 0) {
+ if (bestMatch.length() > 0) {
+ bestMatch.append(',');
+ }
+ bestMatch.append(colName);
+ }
}
lastIndex = newIndex+1;
}
@@ -215,7 +222,16 @@
}
if (!possibleMatches.contains(colName) && colName.length() > 0) {
possibleMatches.add(colName);
+ if (colName.indexOf('(') < 0) {
+ if (bestMatch.length() > 0) {
+ bestMatch.append(',');
+ }
+ bestMatch.append(colName);
+ }
}
+ if (bestMatch.length() > 0) {
+ possibleMatches.add(0, bestMatch.toString());
+ }
}
}
if (subPart.trim().length() == 0 || subPart.trim().endsWith(",")) {
@@ -235,6 +251,9 @@
String subPart = stringPart.substring(stringPart.toUpperCase().indexOf("ORDER BY")+"ORDER BY".length(), charsLeft);
List<String> possibleMatches = new ArrayList<String>();
for (SQLPart pPart : parts) {
+ if (pPart.getSQLType() == SQLPart.SQLType.SELECT) {
+ possibleMatches.addAll(pPart.getColumnNames());
+ }
}
if (subPart.trim().length() == 0 || subPart.trim().endsWith(",")) {
return new TabCompletionInfo(TabCompletionInfo.MatchType.OTHER, possibleMatches);
Modified: src/main/java/nl/improved/sqlclient/util/SQLPart.java
===================================================================
--- src/main/java/nl/improved/sqlclient/util/SQLPart.java 2009-02-27 08:10:51 UTC (rev 380)
+++ src/main/java/nl/improved/sqlclient/util/SQLPart.java 2009-02-27 20:13:20 UTC (rev 381)
@@ -47,6 +47,33 @@
return sqlType+": "+ part.toString();
}
+ public List<String> getColumnNames() {
+
+ if (sqlType == SQLType.SELECT) {
+ String stringPart = getPart().toString();
+ String sub = stringPart.substring(stringPart.toUpperCase().indexOf("SELECT")+"SELECT".length());
+ List<String> returnValue = new ArrayList<String>();
+ int lastIndex = 0;
+ int newIndex;
+ while ( (newIndex = sub.indexOf(',', lastIndex)) > 0) {
+ String tableName = sub.substring(lastIndex, newIndex).trim();
+ if (tableName.indexOf(" ") > 0) {
+ tableName = tableName.substring(0, tableName.indexOf(" ")).trim();
+ }
+ returnValue.add(tableName);
+ lastIndex = newIndex+1;
+ }
+ String tmp = sub.substring(lastIndex).trim();
+ if (tmp.length() > 0) {
+ if (tmp.indexOf(" ") > 0) {
+ tmp = tmp.substring(0, tmp.indexOf(" ")).trim();
+ }
+ returnValue.add(tmp);
+ }
+ return returnValue;
+ }
+ throw new IllegalStateException("Table names are only available for SELECT ("+ sqlType+")");
+ }
public List<String> getTableNames() {
if (sqlType == SQLType.FROM || sqlType == SQLType.UPDATE) {
List<String> returnValue = new ArrayList<String>();
@@ -64,7 +91,6 @@
if (tableName.indexOf(" ") > 0) {
tableName = tableName.substring(0, tableName.indexOf(" ")).trim();
}
- System.err.println("********ADDTN: "+ tableName);
returnValue.add(tableName);
lastIndex = newIndex+1;
}
@@ -73,7 +99,6 @@
if (tmp.indexOf(" ") > 0) {
tmp = tmp.substring(0, tmp.indexOf(" ")).trim();
}
- System.err.println("********ADD: "+ tmp);
returnValue.add(tmp);
}
return returnValue;
|