From: SVN by r. <sv...@ca...> - 2007-09-30 09:47:41
|
Author: roy Date: 2007-09-30 11:47:31 +0200 (Sun, 30 Sep 2007) New Revision: 157 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: slight improvement of update tab completion Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2007-09-28 14:09:32 UTC (rev 156) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2007-09-30 09:47:31 UTC (rev 157) @@ -47,7 +47,7 @@ */ private static final String VALUE = "('>*'|[0-9]+|"+VAR+")"; - public static List<String> KEYWORDS = Arrays.asList(new String[]{"SELECT", "FROM", "WHERE", "VALUES", "SET", "INSERT", "INTO", "DELETE", "IS", "NULL", "IN", "NOT", "GROUP BY"}); + public static List<String> KEYWORDS = Arrays.asList(new String[]{"SELECT", "UPDATE", "FROM", "WHERE", "VALUES", "SET", "INSERT", "INTO", "DELETE", "IS", "NULL", "IN", "NOT", "GROUP BY"}); /** * Private constructor. @@ -121,20 +121,41 @@ public static TabCompletionInfo getTabCompletionInfo(List<? extends CharSequence> commandInfo, Point 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"})); + , Arrays.asList(new String[]{"SELECT", "INSERT INTO", "DELETE FROM", "UPDATE"})); } String startOfCommand = getStartOfCommand(commandInfo, commandPoint); String lastKeyword = getLastKeyWord(startOfCommand); if (lastKeyword == null) { return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD - , Arrays.asList(new String[]{"SELECT", "INSERT INTO", "DELETE FROM"}), startOfCommand); + , Arrays.asList(new String[]{"SELECT", "INSERT INTO", "DELETE FROM", "UPDATE"}), startOfCommand); } - if (lastKeyword.equalsIgnoreCase("SELECT")) { + if (lastKeyword.equalsIgnoreCase("UPDATE")) { + String end = startOfCommand.substring(startOfCommand.lastIndexOf(' ')+1); + String upCommand = startOfCommand.toUpperCase(); + if (upCommand.matches("UPDATE[\\s]+"+TABLE+"[\\s]+(|S|SE|SET)")) { + return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD, Arrays.asList(new String[]{"SET"}), end); + } + if (upCommand.matches("UPDATE[\\s]+"+TABLE+"[\\s]+SET[\\s]+")) { + String tableName = upCommand.substring("UPDATE".length()); + tableName = tableName.substring(0, tableName.indexOf("SET")).trim(); + return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES, Arrays.asList(tableName), end); + } + return new TabCompletionInfo(TabCompletionInfo.MatchType.TABLE_NAMES, new ArrayList<String>(), end); + } else if (lastKeyword.equalsIgnoreCase("SET")) { + String end = startOfCommand.substring(startOfCommand.lastIndexOf(' ')+1); + String upCommand = startOfCommand.toUpperCase(); + if (upCommand.matches("UPDATE[\\s]+"+TABLE+"[\\s]+SET[\\s]+")) { + String tableName = upCommand.substring("UPDATE".length()); + tableName = tableName.substring(0, tableName.indexOf("SET")).trim(); + return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES, Arrays.asList(tableName), end); + } + } else if (lastKeyword.equalsIgnoreCase("SELECT")) { // if it looks like: // SELECT x // return "FROM" - if (startOfCommand.trim().length() > "SELECT".length()) { - if (startOfCommand.substring("SELECT".length()).matches("[\\s]*(\\*|"+VAR+"[\\s])([\\s]*,[\\s]*"+VAR+"+)*( |\t)*(|F|FR|FRO|FROM|f|fr|fro|from)")) { + String upCommand = startOfCommand.trim().toUpperCase(); + if (upCommand.length() > "SELECT".length()) { + if (upCommand.substring("SELECT".length()).matches("[\\s]*(\\*|"+VAR+"[\\s])([\\s]*,[\\s]*"+VAR+"+)*( |\t)*(|F|FR|FRO|FROM)")) { String end = startOfCommand.substring(startOfCommand.lastIndexOf(' ')+1); return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"FROM"}), end); @@ -222,7 +243,6 @@ return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"})); } - return new TabCompletionInfo(TabCompletionInfo.MatchType.UNKNOWN, Arrays.asList(new String[0])); } Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2007-09-28 14:09:32 UTC (rev 156) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2007-09-30 09:47:31 UTC (rev 157) @@ -285,4 +285,34 @@ assertTrue(tableNames.contains("A")); } + public void testUpdateTabCompletion() { + List<String> sqlCommand = Arrays.asList(new String[]{"UPDATE A"}); + Point cursorPos = new Point(sqlCommand.get(0).length(),0); + SQLUtil.TabCompletionInfo info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(SQLUtil.TabCompletionInfo.MatchType.TABLE_NAMES, info.getMatchType()); + List<String> matches = info.getPossibleMatches(); + assertEquals(0, matches.size()); + assertEquals("A", info.getStart()); + + sqlCommand = Arrays.asList(new String[]{"UPDATE A "}); + cursorPos = new Point(sqlCommand.get(0).length(),0); + info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(SQLUtil.TabCompletionInfo.MatchType.SQL_KEYWORD, info.getMatchType()); + matches = info.getPossibleMatches(); + assertEquals(1, matches.size()); + assertEquals("SET", matches.get(0)); + assertEquals("", info.getStart()); + + sqlCommand = Arrays.asList(new String[]{"UPDATE A SET "}); + cursorPos = new Point(sqlCommand.get(0).length(),0); + info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(SQLUtil.TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); + matches = info.getPossibleMatches(); + assertEquals(1, matches.size()); + assertEquals("A", matches.get(0)); + assertEquals("", info.getStart()); + } } |