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; |