|
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());
+ }
}
|