From: SVN by r. <sv...@ca...> - 2009-03-31 19:38:36
|
Author: roy Date: 2009-03-31 21:38:19 +0200 (Tue, 31 Mar 2009) New Revision: 398 Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java src/main/java/nl/improved/sqlclient/util/SQLParser.java Log: tab completion fixes in select Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java =================================================================== --- src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2009-03-26 18:49:51 UTC (rev 397) +++ src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2009-03-31 19:38:19 UTC (rev 398) @@ -60,7 +60,9 @@ import nl.improved.sqlclient.history.HistoryPersister; import nl.improved.sqlclient.history.exception.CouldNotLoadHistoryException; import nl.improved.sqlclient.history.exception.CouldNotSaveHistoryException; +import nl.improved.sqlclient.util.Function; import nl.improved.sqlclient.util.LimitedArrayList; +import nl.improved.sqlclient.util.oracle.Functions; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -727,6 +729,7 @@ } CharSequence newText; if (inp.getCharacter() == '\t') { + new Throwable().printStackTrace(); try { Point cursorPosition = screen.getCursorPosition(); newText = getTabCompletion(commandLines, cursorPosition); @@ -1017,6 +1020,16 @@ return nullToEmpty(findMatch(getTableNames(), info.getStart())); } if (info.getMatchType() == TabCompletionInfo.MatchType.COLUMN_NAMES) { + if (info.getStart().length() > 0) { + try { + List<Function> functions = Functions.getFunctionMatches(getConnection(), info.getStart()); + if (functions.size() > 0) { + debug("Found function matches: "+ functions); + } + } catch (SQLException ex) { + Logger.getLogger(AbstractSQLShellWindow.class.getName()).log(Level.SEVERE, null, ex); + } + } return nullToEmpty(findMatch(getColumnNames(info.getPossibleMatches()), info.getStart())); } if (info.getMatchType() == TabCompletionInfo.MatchType.OTHER) { Modified: src/main/java/nl/improved/sqlclient/util/SQLParser.java =================================================================== --- src/main/java/nl/improved/sqlclient/util/SQLParser.java 2009-03-26 18:49:51 UTC (rev 397) +++ src/main/java/nl/improved/sqlclient/util/SQLParser.java 2009-03-31 19:38:19 UTC (rev 398) @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import nl.improved.sqlclient.Point; import nl.improved.sqlclient.SQLCommand; @@ -311,11 +312,12 @@ return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES, getTableNames(parts), end); } - private static TabCompletionInfo getSelectTabCompletionInfo(SQLPart part, List<SQLPart> parts, int position) { + private static TabCompletionInfo getSelectTabCompletionInfo(SQLPart part, List<SQLPart> parts, int charsLeft) { // if it looks like: // SELECT x // return "FROM" - String startOfCommand = part.getPart().toString(); + String stringPart = part.getPart().toString(); + String startOfCommand = stringPart.substring(0, charsLeft); String upCommand = startOfCommand.toUpperCase(); if (upCommand.equals("SELECT")) { return new TabCompletionInfo(TabCompletionInfo.MatchType.OTHER @@ -347,6 +349,11 @@ , Arrays.asList(new String[]{tableName.substring(0,tableName.indexOf('.'))}) , tableName.substring(tableName.indexOf('.')+1)); } + List<String> tableNames = getTableNames(parts); + if (tableNames.size() > 0) { + return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES + , tableNames, tableName); + } return new TabCompletionInfo(TabCompletionInfo.MatchType.TABLE_NAMES , Arrays.asList(new String[0]), tableName); } @@ -413,6 +420,9 @@ tableNamesSqlPart = tmpPart; } } + if (tableNamesSqlPart == null) { + return Collections.emptyList(); + } return tableNamesSqlPart.getTableNames(); } |