You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(8) |
Oct
(34) |
Nov
(7) |
Dec
(2) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(29) |
Feb
(10) |
Mar
(14) |
Apr
(4) |
May
(2) |
Jun
|
Jul
(14) |
Aug
(25) |
Sep
(6) |
Oct
(18) |
Nov
(4) |
Dec
(14) |
2009 |
Jan
(28) |
Feb
(15) |
Mar
(15) |
Apr
(8) |
May
|
Jun
|
Jul
(1) |
Aug
(4) |
Sep
(12) |
Oct
(1) |
Nov
|
Dec
(22) |
2010 |
Jan
(14) |
Feb
|
Mar
(2) |
Apr
|
May
(7) |
Jun
|
Jul
(3) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
From: SVN by r. <sv...@ca...> - 2008-01-24 21:49:33
|
Author: roy Date: 2008-01-24 22:00:21 +0100 (Thu, 24 Jan 2008) New Revision: 226 Modified: pom.xml Log: 0.5 snapshot Modified: pom.xml =================================================================== --- pom.xml 2008-01-24 20:46:27 UTC (rev 225) +++ pom.xml 2008-01-24 21:00:21 UTC (rev 226) @@ -19,7 +19,7 @@ <groupId>nl.improved</groupId> <artifactId>sqlshell</artifactId> <packaging>jar</packaging> - <version>0.4</version> + <version>0.5-SNAPSHOT</version> <name>SQLShell ~ the improved sqlclient</name> <url>http://sqlshell.sourceforge.org</url> <build> |
From: SVN by r. <sv...@ca...> - 2008-01-24 21:35:35
|
Author: roy Date: 2008-01-24 21:46:27 +0100 (Thu, 24 Jan 2008) New Revision: 225 Modified: makejars.sh Log: 0.4 added windows stuff Modified: makejars.sh =================================================================== --- makejars.sh 2008-01-24 20:45:55 UTC (rev 224) +++ makejars.sh 2008-01-24 20:46:27 UTC (rev 225) @@ -1,6 +1,6 @@ #!/bin/bash PROJECT=sqlshell -VERSION=0.3 +VERSION=0.4 #cleanup rm -Rf release @@ -14,6 +14,7 @@ cp ../README source cp ../ChangeLog source cp ../${PROJECT} source +cp ../${PROJECT}.bat source cd source rm -Rf src/www find . -name "*.svn" | xargs rm -Rf @@ -28,12 +29,14 @@ cd release mkdir bin cp ../${PROJECT} bin +cp ../${PROJECT}.bat bin cp ../README bin cp ../ChangeLog bin cp ../src/main/resources/db.properties bin cp ../target/*.jar bin/${PROJECT}.jar cp -Rf ../lib bin -cp -Rf ${HOME}/.m2/repository/hsqldb/hsqldb/1.8.0/hsqldb-1.8.0.jar bin/lib +cp -Rf ../windows bin +#cp -Rf ${HOME}/.m2/repository/hsqldb/hsqldb/1.8.0/hsqldb-1.8.0.jar bin/lib mkdir bin/db cp -Rf ../db/*.script bin/db cp -Rf ../db/*.properties bin/db @@ -43,6 +46,7 @@ cat _sqlshell | awk '{ gsub("SQLSHELL=target/classes","#SQLSHELL=target/classes"); gsub("#SQLSHELL=\${WORKINGDIR}/sqlshell.jar","SQLSHELL=${WORKINGDIR}/sqlshell.jar"); print }' > sqlshell chmod +x sqlshell rm _sqlshell +cp -Rf ../../windows . tar zcf ../${PROJECT}-bin-${VERSION}.tgz . zip -r ../${PROJECT}-bin-${VERSION}.zip . cd .. |
From: SVN by r. <sv...@ca...> - 2008-01-24 21:35:28
|
Author: roy Date: 2008-01-24 21:45:55 +0100 (Thu, 24 Jan 2008) New Revision: 224 Modified: README Log: mention Windows Modified: README =================================================================== --- README 2008-01-17 06:39:08 UTC (rev 223) +++ README 2008-01-24 20:45:55 UTC (rev 224) @@ -18,7 +18,9 @@ In the most simple case download the zip or tgz file from the sourceforge website and unzip it to the folder of your liking. Then you can start the programm that is setup to use a simple testdatabase by executing 'sqlshell'. Please note that because of javacurses currently you need to enter the directory in which sqlshell is located before starting it. This is a bug that hopefully we can address really soon. Windows: -TODO +1. Copy or move the dll located in the windows directory to the lib directory (the directory containing jcurses.jar +2. Change the INSTALLATION_DIR variable in sqlshell.bat file +3. Start sqlshell.bat CURRENT FEATURES [See ChangeLog] |
From: SVN by r. <sv...@ca...> - 2008-01-17 06:44:26
|
Author: roy Date: 2008-01-17 07:39:08 +0100 (Thu, 17 Jan 2008) New Revision: 223 Modified: ChangeLog Log: mention change Modified: ChangeLog =================================================================== --- ChangeLog 2008-01-14 14:21:08 UTC (rev 222) +++ ChangeLog 2008-01-17 06:39:08 UTC (rev 223) @@ -9,6 +9,7 @@ * group by * order by * allow enter in pwd field to 'ok' data + * fix in replace ~/ with users home dir in spool TODO: flush pwd when username manually set and doesn't match default username 0.3 (09-10-2007) * focus fix in login dialog |
From: SVN by r. <sv...@ca...> - 2008-01-14 14:49:47
|
Author: roy Date: 2008-01-14 15:21:08 +0100 (Mon, 14 Jan 2008) New Revision: 222 Modified: src/main/java/nl/improved/sqlclient/util/ResultBuilder.java Log: fix 'no result' output Modified: src/main/java/nl/improved/sqlclient/util/ResultBuilder.java =================================================================== --- src/main/java/nl/improved/sqlclient/util/ResultBuilder.java 2008-01-14 10:57:59 UTC (rev 221) +++ src/main/java/nl/improved/sqlclient/util/ResultBuilder.java 2008-01-14 14:21:08 UTC (rev 222) @@ -232,7 +232,7 @@ int colNr = 0; @Override public boolean hasNext() { - return (colNr <= columnCount) || curRow.nextRow != null; + return curRow != null && ((colNr <= columnCount) || curRow.nextRow != null); } @Override |
From: SVN by r. <sv...@ca...> - 2008-01-14 11:10:05
|
Author: roy Date: 2008-01-14 11:57:59 +0100 (Mon, 14 Jan 2008) New Revision: 221 Modified: src/main/java/nl/improved/sqlclient/SQLShell.java Log: fix spool with ~ in filename Modified: src/main/java/nl/improved/sqlclient/SQLShell.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLShell.java 2008-01-14 10:46:32 UTC (rev 220) +++ src/main/java/nl/improved/sqlclient/SQLShell.java 2008-01-14 10:57:59 UTC (rev 221) @@ -137,6 +137,7 @@ output("Type 'help' to get a list of available commands other then the default sql input."); } + /** * Returns the connection to the database * @return the connection to the database @@ -1094,16 +1095,16 @@ } } else { try { - File f = new File(toFileName(nextPart)); + File f = new File(toFileName(nextPart.trim())); fileName = f.getAbsolutePath(); if ((f.exists() && !f.canWrite()) || (!f.exists() && !f.createNewFile())) { throw new IllegalStateException("Failed to create spool to file: '"+fileName+"'"); } - spoolWriter = new FileWriter(nextPart); + spoolWriter = new FileWriter(fileName); } catch (IOException e) { - throw new IllegalStateException("Failed to create spool: " + e.toString(), e); + throw new IllegalStateException("Failed to create spool ("+fileName+"): " + e.toString(), e); } - return "Spool created."; + return "Spool to "+fileName+" created."; } } |
From: SVN by r. <sv...@ca...> - 2008-01-14 10:57:50
|
Author: roy Date: 2008-01-14 11:46:32 +0100 (Mon, 14 Jan 2008) New Revision: 220 Modified: src/main/java/nl/improved/sqlclient/util/ResultBuilder.java Log: fix presentation of result Modified: src/main/java/nl/improved/sqlclient/util/ResultBuilder.java =================================================================== --- src/main/java/nl/improved/sqlclient/util/ResultBuilder.java 2008-01-14 07:04:24 UTC (rev 219) +++ src/main/java/nl/improved/sqlclient/util/ResultBuilder.java 2008-01-14 10:46:32 UTC (rev 220) @@ -105,7 +105,7 @@ Cell cell = cells.next(); if (cell != null && cell.row != prevRow) { result.append('\n'); - result.append('|'); + result.append(verticalSeparator); prevRow = cell.row; } int colStart = result.length(); |
From: SVN by r. <sv...@ca...> - 2008-01-14 07:10:48
|
Author: roy Date: 2008-01-14 08:04:24 +0100 (Mon, 14 Jan 2008) New Revision: 219 Modified: pom.xml Log: version 0.4 Modified: pom.xml =================================================================== --- pom.xml 2008-01-13 11:04:52 UTC (rev 218) +++ pom.xml 2008-01-14 07:04:24 UTC (rev 219) @@ -19,7 +19,7 @@ <groupId>nl.improved</groupId> <artifactId>sqlshell</artifactId> <packaging>jar</packaging> - <version>0.4-SNAPSHOT</version> + <version>0.4</version> <name>SQLShell ~ the improved sqlclient</name> <url>http://sqlshell.sourceforge.org</url> <build> |
From: SVN by r. <sv...@ca...> - 2008-01-13 11:18:35
|
Author: roy Date: 2008-01-13 12:04:52 +0100 (Sun, 13 Jan 2008) New Revision: 218 Modified: ChangeLog Log: mention changes Modified: ChangeLog =================================================================== --- ChangeLog 2008-01-13 10:42:47 UTC (rev 217) +++ ChangeLog 2008-01-13 11:04:52 UTC (rev 218) @@ -1,4 +1,5 @@ 0.4 + * Improved speed for displaying large( >200<20000 rows) query results * Fix display of time in date column (at least for oracle) * Improve tab comnpletion * Added tabcompletion for: |
From: SVN by r. <sv...@ca...> - 2008-01-13 10:54:06
|
Author: roy Date: 2008-01-13 11:42:47 +0100 (Sun, 13 Jan 2008) New Revision: 217 Modified: src/main/java/nl/improved/sqlclient/util/ResultBuilder.java Log: large speed improvement when displaying large result Modified: src/main/java/nl/improved/sqlclient/util/ResultBuilder.java =================================================================== --- src/main/java/nl/improved/sqlclient/util/ResultBuilder.java 2008-01-13 10:41:19 UTC (rev 216) +++ src/main/java/nl/improved/sqlclient/util/ResultBuilder.java 2008-01-13 10:42:47 UTC (rev 217) @@ -1,10 +1,10 @@ package nl.improved.sqlclient.util; +import java.awt.event.ActionEvent; import java.util.*; public class ResultBuilder { public enum Alignment {LEFT, RIGHT}; - private int columnCount = 0, rowCount = 0; private Map<Integer, Integer> columnSizes = new HashMap<Integer, Integer>(); private List<String> header; @@ -12,16 +12,8 @@ private boolean horizontalSeperatorEnabled = true; private char horizontalSeperator = '-', verticalSeparator ='|'; + private RowList rows = new RowList(); - private Set cellValues = new TreeSet<Cell>(new Comparator<Cell>() { - public int compare(Cell c1, Cell c2) { - if (c1.getRow() != c2.getRow()) { - return c1.getRow() - c2.getRow(); - } - return c1.getColumn() - c2.getColumn(); - } - }); - public void setHorizontalSeparatorEnabled(boolean enabled) { this.horizontalSeperatorEnabled = enabled; } @@ -64,41 +56,21 @@ } public void set(int column,int row, CharSequence s, Alignment alignment) { - columnCount = Math.max(columnCount, column); - rowCount = Math.max(rowCount, row); - Cell c = new Cell(column, row, s, alignment); - if (cellValues.contains(c)) { - cellValues.remove(c); - } - cellValues.add(c); - Integer maxValue = columnSizes.get(new Integer(column)); - if (maxValue == null || maxValue.intValue() < c.getLength()+1) { // +1 because one space at end of column - columnSizes.put(new Integer(column), c.getLength()+1); - } + rows.setValue(column, row, s, alignment); } - private Cell getCell(int col, int row) { - Iterator<Cell> iCellValues = cellValues.iterator(); - while (iCellValues.hasNext()) { - Cell c = iCellValues.next(); - if (c.getRow() == row && c.getColumn() == col) { - return c; - } - } - return null; - } - @Override public String toString() { int rowLength = 2; //add |<row>\n - for (int col = 0; col <= columnCount; col++) { + for (int col = 0; col <= rows.columnCount; col++) { Integer colSize = columnSizes.get(col); if (colSize != null) { rowLength += colSize.intValue() + 1; // add | } } - StringBuilder result = new StringBuilder((rowLength * (rowCount + 2 + (header == null ? 0 : 1))) + (footer == null ? 0 : footer.length()+1)); + int probableLength = (rowLength * (rows.rowCount + 2 + (header == null ? 0 : 1))) + (footer == null ? 0 : footer.length()+1) + 500; + StringBuilder result = new StringBuilder(probableLength); if (header != null) { if (horizontalSeperatorEnabled) { for (int i = 0; i < rowLength-1; i++) { @@ -126,21 +98,27 @@ } } result.append('\n'); - for (int row = 0; row <= rowCount; row++) { - result.append(verticalSeparator); - for (int col = 0; col <= columnCount; col++) { - Cell c = getCell(col, row); - int colStart = result.length(); - int spaceUsed = 0; - if (c != null) { - result.append(c.getValue()); - spaceUsed = c.getLength(); - } - Integer colSize = columnSizes.get(col); + Iterator<Cell> cells = rows.iterator(); + int prevRow = 0; + result.append(verticalSeparator); + while (cells.hasNext()) { + Cell cell = cells.next(); + if (cell != null && cell.row != prevRow) { + result.append('\n'); + result.append('|'); + prevRow = cell.row; + } + int colStart = result.length(); + int spaceUsed = 0; + if (cell != null) { + result.append(cell.getValue()); + spaceUsed = cell.getLength(); + + Integer colSize = columnSizes.get(cell.col); if (colSize != null) { int colSizeInt = colSize.intValue(); for (int i = spaceUsed; i < colSizeInt; i++) { - if (c == null || c.getAlignment() == Alignment.LEFT) { + if (cell == null || cell.getAlignment() == Alignment.LEFT) { result.append(' '); } else { result.insert(colStart, ' '); @@ -149,8 +127,8 @@ result.append(verticalSeparator); } } - result.append('\n'); } + result.append('\n'); if (horizontalSeperatorEnabled) { for (int i = 0; i < rowLength-1; i++) { result.append(horizontalSeperator); @@ -165,7 +143,6 @@ } private static class Cell { - private int row, col; private CharSequence buffer; private Alignment alignment; @@ -210,12 +187,122 @@ } } + private class RowList { + private int columnCount = 0, rowCount = 0; + + private Row firstRow = null; + private Row lastRow = null; + + public RowList() { + } + + public void setValue(int col, int row, CharSequence value, Alignment align) { + // TODO remove first row(s) when rowsize larger then maxsize + columnCount = Math.max(columnCount, col); + rowCount = Math.max(rowCount, row); + Row newRow; + if (firstRow == null) { + firstRow = new Row(row); + lastRow = firstRow; + newRow = firstRow; + } else if (lastRow.rowNum == row) { + newRow = lastRow; + } else if (lastRow.rowNum < row) { + lastRow.nextRow = new Row(row); + newRow = lastRow.nextRow; + lastRow = newRow; + } else { + throw new IllegalStateException("Please add rows in order!"); + } + + Cell c = new Cell(col, row, value, align); + if (newRow.cells.contains(c)) { + newRow.cells.remove(c); + } + newRow.cells.add(c); + Integer maxValue = columnSizes.get(new Integer(col)); + if (maxValue == null || maxValue.intValue() < c.getLength()+1) { // +1 because one space at end of column + columnSizes.put(new Integer(col), c.getLength()+1); + } + } + + public Iterator<Cell> iterator() { + Iterator<Cell> i = new Iterator<Cell>() { + Row curRow = firstRow; + int colNr = 0; + @Override + public boolean hasNext() { + return (colNr <= columnCount) || curRow.nextRow != null; + } + + @Override + public Cell next() { + if (colNr > columnCount) { + colNr = 0; + curRow = curRow.nextRow; + } + return curRow.getCell(colNr++); + } + + @Override + public void remove() { + throw new UnsupportedOperationException("Not supported."); + } + }; + return i; + } + + private class Row { + public Row nextRow; + public int rowNum; + public List<Cell> cells; + + public Row(int rowNum) { + this.rowNum = rowNum; + cells = new ArrayList<Cell>(); + } + + Cell getCell(int col) { + Cell c; + if (cells.size() > col) { + c = cells.get(col); + if (c.col == col) { + return c; + } + } + Iterator<Cell> iCells = cells.iterator(); + while (iCells.hasNext()) { + c = iCells.next(); + if (c.col == col) { + return c; + } + } + return null; + } + } + } + public static void main(String[] args) throws Exception { ResultBuilder builder = new ResultBuilder(); - builder.set(0,0, "cell 0,0"); - builder.set(1,0, "cell 1,0 and even more stuff"); - builder.set(0,1, "cell 0,1 and some other stuff"); - builder.set(1,1, "cell 1,1"); + builder.set(0, 0, "faaaaaa"); + builder.set(1, 0, "fbbbbbb"); + builder.set(2, 0, "fcccccc"); + builder.set(3, 0, "fdddddd"); + builder.set(4, 0, "feeeeee"); + for (int row = 1; row < 2000; row++) { + builder.set(0, row, "aaaaaaa"); + builder.set(1, row, "bbbbbbb"); + builder.set(2, row, "ccccccc"); + builder.set(3, row, "ddddddd"); + builder.set(4, row, "eeeeeee"); + } + builder.set(0, 2000, "laaaaaa"); + builder.set(1, 2000, "lbbbbbb"); + builder.set(2, 2000, "lcccccc"); + builder.set(3, 2000, "ldddddd"); + builder.set(4, 2000, "leeeeee"); + long start = System.currentTimeMillis(); System.out.println(builder.toString()); + System.out.println("TIME: "+ (System.currentTimeMillis() - start)); } } |
From: SVN by r. <sv...@ca...> - 2008-01-13 10:52:39
|
Author: roy Date: 2008-01-13 11:41:19 +0100 (Sun, 13 Jan 2008) New Revision: 216 Modified: src/main/java/nl/improved/sqlclient/DBConnector.java Log: removed unused import Modified: src/main/java/nl/improved/sqlclient/DBConnector.java =================================================================== --- src/main/java/nl/improved/sqlclient/DBConnector.java 2008-01-12 19:13:08 UTC (rev 215) +++ src/main/java/nl/improved/sqlclient/DBConnector.java 2008-01-13 10:41:19 UTC (rev 216) @@ -15,7 +15,6 @@ */ package nl.improved.sqlclient; -import com.sun.org.apache.bcel.internal.generic.Select; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; |
From: SVN by r. <sv...@ca...> - 2008-01-12 19:53:17
|
Author: roy Date: 2008-01-12 20:13:08 +0100 (Sat, 12 Jan 2008) New Revision: 215 Modified: src/main/java/nl/improved/sqlclient/QueryExecutor.java Log: added log of query time Modified: src/main/java/nl/improved/sqlclient/QueryExecutor.java =================================================================== --- src/main/java/nl/improved/sqlclient/QueryExecutor.java 2008-01-12 19:08:46 UTC (rev 214) +++ src/main/java/nl/improved/sqlclient/QueryExecutor.java 2008-01-12 19:13:08 UTC (rev 215) @@ -145,6 +145,7 @@ //StringBuffer displayValue = new StringBuffer(); ResultSetMetaData metadata = results.getMetaData(); + long start = System.currentTimeMillis(); // TODO specify labels List<String> labels = new ArrayList<String>(); @@ -168,7 +169,8 @@ if (rowCount != 1) { footer.append("s"); } - footer.append(" selected.\n\n"); + footer.append(" selected.\n"); + footer.append("Query took: "+ (System.currentTimeMillis() - start) +" millis\n\n"); displayValue.setFooter(footer); return displayValue.toString(); } |
From: SVN by r. <sv...@ca...> - 2008-01-12 19:48:42
|
Author: roy Date: 2008-01-12 20:08:46 +0100 (Sat, 12 Jan 2008) New Revision: 214 Modified: ChangeLog Log: mention change Modified: ChangeLog =================================================================== --- ChangeLog 2008-01-12 19:05:47 UTC (rev 213) +++ ChangeLog 2008-01-12 19:08:46 UTC (rev 214) @@ -1,4 +1,5 @@ 0.4 + * Fix display of time in date column (at least for oracle) * Improve tab comnpletion * Added tabcompletion for: * desc |
From: SVN by r. <sv...@ca...> - 2008-01-12 19:45:21
|
Author: roy Date: 2008-01-12 20:05:47 +0100 (Sat, 12 Jan 2008) New Revision: 213 Modified: src/main/java/nl/improved/sqlclient/QueryExecutor.java Log: fix datetime issue (at least for oracle) Modified: src/main/java/nl/improved/sqlclient/QueryExecutor.java =================================================================== --- src/main/java/nl/improved/sqlclient/QueryExecutor.java 2008-01-12 11:33:22 UTC (rev 212) +++ src/main/java/nl/improved/sqlclient/QueryExecutor.java 2008-01-12 19:05:47 UTC (rev 213) @@ -126,7 +126,7 @@ if (colValue == null) { return "NULL"; } else if (isDate(metadata, column)) { - return defaultDateFormat.format(colValue); + return defaultDateFormat.format(rset.getTimestamp(column)); } else { return colValue.toString(); } |
From: SVN by r. <sv...@ca...> - 2008-01-12 11:25:00
|
Author: roy Date: 2008-01-12 12:08:05 +0100 (Sat, 12 Jan 2008) New Revision: 211 Modified: README Log: mention new feature requests Modified: README =================================================================== --- README 2008-01-12 11:05:55 UTC (rev 210) +++ README 2008-01-12 11:08:05 UTC (rev 211) @@ -24,6 +24,8 @@ [See ChangeLog] FUTURE +- add 'show tables like' support +- login schreen improvements (select all text on focus) - Improve desc table (to show references, etc) - Improve tab completion for update, delete and alter table queries - Highlight the commands to make a distinction between the output and the commands |
From: SVN by r. <sv...@ca...> - 2008-01-12 11:22:49
|
Author: roy Date: 2008-01-12 12:05:55 +0100 (Sat, 12 Jan 2008) New Revision: 210 Modified: ChangeLog Log: mention changes Modified: ChangeLog =================================================================== --- ChangeLog 2008-01-12 10:58:07 UTC (rev 209) +++ ChangeLog 2008-01-12 11:05:55 UTC (rev 210) @@ -4,6 +4,8 @@ * desc * execute batch command * show + * group by + * order by * allow enter in pwd field to 'ok' data TODO: flush pwd when username manually set and doesn't match default username 0.3 (09-10-2007) |
From: SVN by r. <sv...@ca...> - 2008-01-12 11:15:05
|
Author: roy Date: 2008-01-12 11:58:07 +0100 (Sat, 12 Jan 2008) New Revision: 209 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: added (initial) support for order by tab completion Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-12 10:52:04 UTC (rev 208) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-12 10:58:07 UTC (rev 209) @@ -51,7 +51,7 @@ */ private static final String VALUE = "('.*'|[0-9]+|"+VAR+")"; - public static List<String> KEYWORDS = Arrays.asList(new String[]{"SELECT", "UPDATE", "FROM", "WHERE", "VALUES", "SET", "INSERT", "INTO", "DELETE", "IS", "NULL", "IN", "NOT", "GROUP BY", "DESC"}); + public static List<String> KEYWORDS = Arrays.asList(new String[]{"SELECT", "UPDATE", "FROM", "WHERE", "VALUES", "SET", "INSERT", "INTO", "DELETE", "IS", "NULL", "IN", "NOT", "GROUP BY", "ORDER BY", "DESC"}); /** * Private constructor. @@ -298,7 +298,8 @@ return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"})); */ - } else if (lastKeyword.equalsIgnoreCase("GROUP BY")) { + } else if (lastKeyword.equalsIgnoreCase("GROUP BY") + || lastKeyword.equalsIgnoreCase("ORDER BY")) { String upperStart = startOfCommand.toUpperCase(); String columns = startOfCommand.substring(upperStart.indexOf("SELECT")+"SELECT".length(), upperStart.indexOf("FROM")).replaceAll(" ",""); return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES, Arrays.asList(columns.split(","))); Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-12 10:52:04 UTC (rev 208) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-12 10:58:07 UTC (rev 209) @@ -359,6 +359,29 @@ assertTrue(matches.contains("c2")); } + public void testOrderBy() { + List<String> sqlCommand = Arrays.asList(new String[]{"SELECT c1,c2 FROM A,B WHERE a.b=b.b ORDER BY "}); + Point cursorPos = new Point(sqlCommand.get(0).length(),0); + TabCompletionInfo info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); + List<String> matches = info.getPossibleMatches(); + assertEquals(2, matches.size()); + assertTrue(matches.contains("c1")); + assertTrue(matches.contains("c2")); + + + sqlCommand = Arrays.asList(new String[]{"SELECT c1 , c2 FROM A,B WHERE a.b=b.b ORDER BY "}); + cursorPos = new Point(sqlCommand.get(0).length(),0); + info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); + matches = info.getPossibleMatches(); + assertEquals(2, matches.size()); + assertTrue(matches.contains("c1")); + assertTrue(matches.contains("c2")); + } + public void testParseTableNames() { List<String> sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A WHERE "}); Point cursorPos = new Point(sqlCommand.get(0).length(),0); |
From: SVN by r. <sv...@ca...> - 2008-01-12 11:08:09
|
Author: roy Date: 2008-01-12 11:52:04 +0100 (Sat, 12 Jan 2008) New Revision: 208 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: group by: initial support for tab completion added Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-10 19:20:50 UTC (rev 207) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-12 10:52:04 UTC (rev 208) @@ -212,10 +212,13 @@ // 'SELECT x FROM A ' // return WHERE String tmpCommand = startOfCommand.substring(startOfCommand.indexOf(lastKeyword)+lastKeyword.length()+1).toUpperCase(); - if (tmpCommand.matches("[\\s]*"+VAR+"+([\\s]*,[\\s]*"+VAR+"+)*[\\s]+(|W|WH|WHE|WHER|WHERE)")) { + String WHERE = "W|WH|WHE|WHER|WHERE"; + String GROUP_BY = "G|GR|GRO|GROU|GROUP|GROUP |GROUP B|GROUP BY"; + String ORDER_BY = "O|OR|ORD|ORDE|ORDER|ORDER |ORDER B|ORDER BY"; + if (tmpCommand.matches("[\\s]*"+VAR+"+([\\s]*,[\\s]*"+VAR+"+)*[\\s]+(|"+WHERE+"|"+GROUP_BY+"|"+ORDER_BY+")")) { String end = startOfCommand.substring(startOfCommand.lastIndexOf(' ')+1); return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD - , Arrays.asList(new String[]{"WHERE"}), end); + , Arrays.asList(new String[]{"WHERE", "GROUP BY", "ORDER BY"}), end); } String end; startOfCommand = startOfCommand.substring(startOfCommand.toUpperCase().indexOf("FROM")); @@ -295,6 +298,10 @@ return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"})); */ + } else if (lastKeyword.equalsIgnoreCase("GROUP BY")) { + String upperStart = startOfCommand.toUpperCase(); + String columns = startOfCommand.substring(upperStart.indexOf("SELECT")+"SELECT".length(), upperStart.indexOf("FROM")).replaceAll(" ",""); + return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES, Arrays.asList(columns.split(","))); } 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 2008-01-10 19:20:50 UTC (rev 207) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-12 10:52:04 UTC (rev 208) @@ -186,8 +186,10 @@ assertNotNull(info); assertEquals(TabCompletionInfo.MatchType.SQL_KEYWORD, info.getMatchType()); List<String> matches = info.getPossibleMatches(); - assertEquals(1, matches.size()); + assertEquals(3, matches.size()); assertTrue(matches.contains("WHERE")); + assertTrue(matches.contains("GROUP BY")); + assertTrue(matches.contains("ORDER BY")); sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WH"}); cursorPos = new Point(sqlCommand.get(0).length(),0); @@ -195,7 +197,7 @@ assertNotNull(info); assertEquals(TabCompletionInfo.MatchType.SQL_KEYWORD, info.getMatchType()); matches = info.getPossibleMatches(); - assertEquals(1, matches.size()); + assertEquals(3, matches.size()); assertTrue(matches.contains("WHERE")); assertEquals("WH", info.getStart()); } @@ -334,6 +336,29 @@ assertEquals("a", info.getStart()); } + public void testGroupBy() { + List<String> sqlCommand = Arrays.asList(new String[]{"SELECT c1,c2 FROM A,B WHERE a.b=b.b GROUP BY "}); + Point cursorPos = new Point(sqlCommand.get(0).length(),0); + TabCompletionInfo info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); + List<String> matches = info.getPossibleMatches(); + assertEquals(2, matches.size()); + assertTrue(matches.contains("c1")); + assertTrue(matches.contains("c2")); + + + sqlCommand = Arrays.asList(new String[]{"SELECT c1 , c2 FROM A,B WHERE a.b=b.b GROUP BY "}); + cursorPos = new Point(sqlCommand.get(0).length(),0); + info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); + matches = info.getPossibleMatches(); + assertEquals(2, matches.size()); + assertTrue(matches.contains("c1")); + assertTrue(matches.contains("c2")); + } + public void testParseTableNames() { List<String> sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A WHERE "}); Point cursorPos = new Point(sqlCommand.get(0).length(),0); |
From: SVN by r. <sv...@ca...> - 2008-01-10 20:06:22
|
Author: roy Date: 2008-01-10 20:20:50 +0100 (Thu, 10 Jan 2008) New Revision: 207 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: added another test (no spaces required around '=' operator for code completion Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-09 16:11:26 UTC (rev 206) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-10 19:20:50 UTC (rev 207) @@ -235,12 +235,20 @@ String upperCommandString = tmpCommand.toUpperCase(); String subPart = "(|"+VAR+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VAR+")))"; //String regExp = "(|"+VALUE+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+)))))"; - String regExp = "(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+(|"+VALUE+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VALUE+"))))*))))"; + String regExp = "(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"))))*))))"; if (upperCommandString.matches(regExp)) { - String end = tmpCommand.substring(tmpCommand.lastIndexOf(' ')+1); +/* String end = tmpCommand.substring(tmpCommand.lastIndexOf(' ')+1); if (end.indexOf(".") > 0) { end = end.substring(end.indexOf(".")+1); } +*/ + int lastIndex = tmpCommand.lastIndexOf(' '); + lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('.')); + lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('\t')); + lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('=')); + lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('>')); + lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('>')); + String end = tmpCommand.substring(lastIndex+1); return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES , parseTableNames(commandInfo, commandPoint), end); } @@ -249,7 +257,12 @@ if (upperCommandString.matches(".*[\\s]+")) { end = ""; } else { - end = tmpCommand.substring(tmpCommand.lastIndexOf(' ')+1); + int lastIndex = tmpCommand.lastIndexOf(' '); + lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('\t')); + lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('=')); + lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('>')); + lastIndex = Math.max(lastIndex, tmpCommand.lastIndexOf('>')); + end = tmpCommand.substring(lastIndex+1); } return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"}), end); Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-09 16:11:26 UTC (rev 206) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-10 19:20:50 UTC (rev 207) @@ -299,7 +299,6 @@ assertTrue(matches.contains("ORDER BY")); assertEquals("", info.getStart()); - sqlCommand = Arrays.asList(new String[]{"select makelaarnr from makelaar, tree, plugin where parent = makelaar.i_id and child = pl"}); cursorPos = new Point(sqlCommand.get(0).length(),0); info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); @@ -308,6 +307,14 @@ matches = info.getPossibleMatches(); assertEquals("pl", info.getStart()); + sqlCommand = Arrays.asList(new String[]{"select makelaarnr from makelaar, tree, plugin where parent = makelaar.i_id and child=pl"}); + cursorPos = new Point(sqlCommand.get(0).length(),0); + info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); + matches = info.getPossibleMatches(); + assertEquals("pl", info.getStart()); + sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE A.x = 'x' A"}); cursorPos = new Point(sqlCommand.get(0).length(),0); info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); |
From: SVN by r. <sv...@ca...> - 2008-01-09 17:00:01
|
Author: roy Date: 2008-01-09 17:11:26 +0100 (Wed, 09 Jan 2008) New Revision: 206 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: made completion for 'and' case sensitive (a=>and ,A=>AND) Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-09 15:53:31 UTC (rev 205) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-09 16:11:26 UTC (rev 206) @@ -249,7 +249,7 @@ if (upperCommandString.matches(".*[\\s]+")) { end = ""; } else { - end = upperCommandString.substring(upperCommandString.lastIndexOf(' ')+1); + end = tmpCommand.substring(tmpCommand.lastIndexOf(' ')+1); } return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"}), end); Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-09 15:53:31 UTC (rev 205) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-09 16:11:26 UTC (rev 206) @@ -316,6 +316,15 @@ matches = info.getPossibleMatches(); assertTrue(matches.contains("AND")); assertEquals("A", info.getStart()); + + sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE A.x = 'x' a"}); + cursorPos = new Point(sqlCommand.get(0).length(),0); + info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(TabCompletionInfo.MatchType.SQL_KEYWORD, info.getMatchType()); + matches = info.getPossibleMatches(); + assertTrue(matches.contains("AND")); + assertEquals("a", info.getStart()); } public void testParseTableNames() { |
From: SVN by r. <sv...@ca...> - 2008-01-09 16:23:00
|
Author: roy Date: 2008-01-09 16:53:31 +0100 (Wed, 09 Jan 2008) New Revision: 205 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: added 'start' recognizion for 'and' Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-09 15:48:47 UTC (rev 204) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-09 15:53:31 UTC (rev 205) @@ -244,9 +244,15 @@ return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES , parseTableNames(commandInfo, commandPoint), end); } - System.out.println("'"+upperCommandString +"'\n not matches\n"+regExp); + //System.out.println("'"+upperCommandString +"'\n not matches\n"+regExp); + String end = ""; + if (upperCommandString.matches(".*[\\s]+")) { + end = ""; + } else { + end = upperCommandString.substring(upperCommandString.lastIndexOf(' ')+1); + } return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD - , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"})); + , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"}), end); /*String tmpCommand = startOfCommand.substring(startOfCommand.indexOf(lastKeyword)+lastKeyword.length()+1).toUpperCase(); if (startOfCommand.trim().endsWith(lastKeyword) || tmpCommand.matches(".*(AND|OR)(|[\\s]+(|"+VAR+"))")) { @@ -276,7 +282,6 @@ return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"})); */ - } else if (lastKeyword.equalsIgnoreCase("DESC")) { } 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 2008-01-09 15:48:47 UTC (rev 204) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-09 15:53:31 UTC (rev 205) @@ -297,6 +297,7 @@ assertTrue(matches.contains("OR")); assertTrue(matches.contains("GROUP BY")); assertTrue(matches.contains("ORDER BY")); + assertEquals("", info.getStart()); sqlCommand = Arrays.asList(new String[]{"select makelaarnr from makelaar, tree, plugin where parent = makelaar.i_id and child = pl"}); @@ -306,6 +307,15 @@ assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); matches = info.getPossibleMatches(); assertEquals("pl", info.getStart()); + + sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE A.x = 'x' A"}); + cursorPos = new Point(sqlCommand.get(0).length(),0); + info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(TabCompletionInfo.MatchType.SQL_KEYWORD, info.getMatchType()); + matches = info.getPossibleMatches(); + assertTrue(matches.contains("AND")); + assertEquals("A", info.getStart()); } public void testParseTableNames() { |
From: SVN by r. <sv...@ca...> - 2008-01-09 16:18:05
|
Author: roy Date: 2008-01-09 16:48:47 +0100 (Wed, 09 Jan 2008) New Revision: 204 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: added another test no longer spaces around operators required Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-09 15:41:37 UTC (rev 203) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-09 15:48:47 UTC (rev 204) @@ -235,7 +235,7 @@ String upperCommandString = tmpCommand.toUpperCase(); String subPart = "(|"+VAR+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VAR+")))"; //String regExp = "(|"+VALUE+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+)))))"; - String regExp = "(|"+VALUE+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+(|"+VALUE+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VALUE+"))))*))))"; + String regExp = "(|"+VALUE+"(|[\\s]*"+COMPARATOR+"[\\s]*(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+(|"+VALUE+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VALUE+"))))*))))"; if (upperCommandString.matches(regExp)) { String end = tmpCommand.substring(tmpCommand.lastIndexOf(' ')+1); if (end.indexOf(".") > 0) { @@ -244,7 +244,7 @@ return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES , parseTableNames(commandInfo, commandPoint), end); } - //System.out.println("'"+upperCommandString +"'\n not matches\n"+regExp); + System.out.println("'"+upperCommandString +"'\n not matches\n"+regExp); return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"})); /*String tmpCommand = startOfCommand.substring(startOfCommand.indexOf(lastKeyword)+lastKeyword.length()+1).toUpperCase(); Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-09 15:41:37 UTC (rev 203) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-09 15:48:47 UTC (rev 204) @@ -222,7 +222,7 @@ assertTrue(matches.contains("B")); assertEquals("I", info.getStart()); - /*sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE I=bla AND I"}); + sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE I=bla AND I"}); cursorPos = new Point(sqlCommand.get(0).length(),0); info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); assertNotNull(info); @@ -231,7 +231,7 @@ assertEquals(2, matches.size()); assertTrue(matches.contains("A")); assertTrue(matches.contains("B")); - assertEquals("I", info.getStart());*/ + assertEquals("I", info.getStart()); sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE A.I"}); cursorPos = new Point(sqlCommand.get(0).length(),0); |
From: SVN by r. <sv...@ca...> - 2008-01-09 16:13:42
|
Author: roy Date: 2008-01-09 16:41:37 +0100 (Wed, 09 Jan 2008) New Revision: 203 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: (re-)added support for a lot more query strings Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2007-12-02 12:49:15 UTC (rev 202) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2008-01-09 15:41:37 UTC (rev 203) @@ -49,7 +49,7 @@ /** * A sql variable description. */ - private static final String VALUE = "('>*'|[0-9]+|"+VAR+")"; + private static final String VALUE = "('.*'|[0-9]+|"+VAR+")"; public static List<String> KEYWORDS = Arrays.asList(new String[]{"SELECT", "UPDATE", "FROM", "WHERE", "VALUES", "SET", "INSERT", "INTO", "DELETE", "IS", "NULL", "IN", "NOT", "GROUP BY", "DESC"}); @@ -234,11 +234,17 @@ String tmpCommand = startOfCommand.substring(startOfCommand.indexOf(lastKeyword)+lastKeyword.length()+1); String upperCommandString = tmpCommand.toUpperCase(); String subPart = "(|"+VAR+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VAR+")))"; - if (upperCommandString.matches("("+subPart+"|"+VAR+"[\\s]+"+COMPARATOR+"[\\s]+"+VAR+"(|[\\s]+AND[\\s]+"+subPart+"|[\\s]+OR[\\s]+"+subPart+"))")) { + //String regExp = "(|"+VALUE+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+)))))"; + String regExp = "(|"+VALUE+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VALUE+"(|([\\s]+(AND|OR)[\\s]+(|"+VALUE+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VALUE+"))))*))))"; + if (upperCommandString.matches(regExp)) { String end = tmpCommand.substring(tmpCommand.lastIndexOf(' ')+1); + if (end.indexOf(".") > 0) { + end = end.substring(end.indexOf(".")+1); + } return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES , parseTableNames(commandInfo, commandPoint), end); } + //System.out.println("'"+upperCommandString +"'\n not matches\n"+regExp); return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"})); /*String tmpCommand = startOfCommand.substring(startOfCommand.indexOf(lastKeyword)+lastKeyword.length()+1).toUpperCase(); Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2007-12-02 12:49:15 UTC (rev 202) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2008-01-09 15:41:37 UTC (rev 203) @@ -201,7 +201,7 @@ } public void testTabCompletionInfoWHEREConditions() { - /* List<String> sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE "}); + List<String> sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE "}); Point cursorPos = new Point(sqlCommand.get(0).length(),0); TabCompletionInfo info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); assertNotNull(info); @@ -222,7 +222,7 @@ assertTrue(matches.contains("B")); assertEquals("I", info.getStart()); - sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE I=bla AND I"}); + /*sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE I=bla AND I"}); cursorPos = new Point(sqlCommand.get(0).length(),0); info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); assertNotNull(info); @@ -231,7 +231,7 @@ assertEquals(2, matches.size()); assertTrue(matches.contains("A")); assertTrue(matches.contains("B")); - assertEquals("I", info.getStart()); + assertEquals("I", info.getStart());*/ sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE A.I"}); cursorPos = new Point(sqlCommand.get(0).length(),0); @@ -239,8 +239,9 @@ assertNotNull(info); assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); matches = info.getPossibleMatches(); - assertEquals(1, matches.size()); + //assertEquals(1, matches.size()); assertTrue(matches.contains("A")); + System.out.println("I: " + info.getStart()); assertEquals("I", info.getStart()); // with other conditions @@ -296,14 +297,14 @@ assertTrue(matches.contains("OR")); assertTrue(matches.contains("GROUP BY")); assertTrue(matches.contains("ORDER BY")); -*/ - List<String> sqlCommand = Arrays.asList(new String[]{"select makelaarnr from makelaar, tree, plugin where parent = makelaar.i_id and child = pl"}); - Point cursorPos = new Point(sqlCommand.get(0).length(),0); - TabCompletionInfo info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + + sqlCommand = Arrays.asList(new String[]{"select makelaarnr from makelaar, tree, plugin where parent = makelaar.i_id and child = pl"}); + cursorPos = new Point(sqlCommand.get(0).length(),0); + info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); assertNotNull(info); assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); - List matches = info.getPossibleMatches(); + matches = info.getPossibleMatches(); assertEquals("pl", info.getStart()); } |
From: SVN by r. <sv...@ca...> - 2007-12-02 12:52:18
|
Author: roy Date: 2007-12-02 13:49:15 +0100 (Sun, 02 Dec 2007) New Revision: 202 Modified: pom.xml Log: change pom so you don't have to manually install jcurses Modified: pom.xml =================================================================== --- pom.xml 2007-12-02 12:43:35 UTC (rev 201) +++ pom.xml 2007-12-02 12:49:15 UTC (rev 202) @@ -39,6 +39,8 @@ <groupId>net.sf.jcurses</groupId> <artifactId>jcurses</artifactId> <version>0.9.5</version> + <scope>system</scope> + <systemPath>${basedir}/lib/jcurses.jar</systemPath> </dependency> <dependency> <groupId>junit</groupId> |
From: SVN by r. <sv...@ca...> - 2007-12-02 12:46:45
|
Author: roy Date: 2007-12-02 13:43:35 +0100 (Sun, 02 Dec 2007) New Revision: 201 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: added unit test for WHERE a=b AND a=c Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2007-11-14 21:26:47 UTC (rev 200) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2007-12-02 12:43:35 UTC (rev 201) @@ -137,7 +137,9 @@ , Arrays.asList(new String[]{"SELECT", "INSERT INTO", "DELETE FROM", "UPDATE"})); } String startOfCommand = getStartOfCommand(commandInfo, commandPoint); +//System.out.println("Startof command: "+ startOfCommand); String lastKeyword = getLastKeyWord(startOfCommand); +//System.out.println("Last keyword: "+ lastKeyword); if (lastKeyword == null) { return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"SELECT", "INSERT INTO", "DELETE FROM", "UPDATE"}), startOfCommand); @@ -229,7 +231,17 @@ // 'SELECT x FROM A,B WHERE' // or // 'SELECT x FROM A,B WHERE A.x='x' AND/OR ' - String tmpCommand = startOfCommand.substring(startOfCommand.indexOf(lastKeyword)+lastKeyword.length()+1).toUpperCase(); + String tmpCommand = startOfCommand.substring(startOfCommand.indexOf(lastKeyword)+lastKeyword.length()+1); + String upperCommandString = tmpCommand.toUpperCase(); + String subPart = "(|"+VAR+"(|[\\s]+"+COMPARATOR+"[\\s]+(|"+VAR+")))"; + if (upperCommandString.matches("("+subPart+"|"+VAR+"[\\s]+"+COMPARATOR+"[\\s]+"+VAR+"(|[\\s]+AND[\\s]+"+subPart+"|[\\s]+OR[\\s]+"+subPart+"))")) { + String end = tmpCommand.substring(tmpCommand.lastIndexOf(' ')+1); + return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES + , parseTableNames(commandInfo, commandPoint), end); + } + return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD + , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"})); + /*String tmpCommand = startOfCommand.substring(startOfCommand.indexOf(lastKeyword)+lastKeyword.length()+1).toUpperCase(); if (startOfCommand.trim().endsWith(lastKeyword) || tmpCommand.matches(".*(AND|OR)(|[\\s]+(|"+VAR+"))")) { int beginIndex = startOfCommand.lastIndexOf(lastKeyword) + lastKeyword.length(); @@ -257,6 +269,7 @@ } return new TabCompletionInfo(TabCompletionInfo.MatchType.SQL_KEYWORD , Arrays.asList(new String[]{"AND", "OR", "IN", "GROUP BY", "ORDER BY"})); + */ } else if (lastKeyword.equalsIgnoreCase("DESC")) { } 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-11-14 21:26:47 UTC (rev 200) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2007-12-02 12:43:35 UTC (rev 201) @@ -18,9 +18,7 @@ import java.util.Arrays; import java.util.List; -import junit.framework.Test; import junit.framework.TestCase; -import junit.framework.TestSuite; public class SQLUtilTest extends TestCase { @@ -203,7 +201,7 @@ } public void testTabCompletionInfoWHEREConditions() { - List<String> sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE "}); + /* List<String> sqlCommand = Arrays.asList(new String[]{"SELECT * FROM A,B WHERE "}); Point cursorPos = new Point(sqlCommand.get(0).length(),0); TabCompletionInfo info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); assertNotNull(info); @@ -298,6 +296,15 @@ assertTrue(matches.contains("OR")); assertTrue(matches.contains("GROUP BY")); assertTrue(matches.contains("ORDER BY")); +*/ + + List<String> sqlCommand = Arrays.asList(new String[]{"select makelaarnr from makelaar, tree, plugin where parent = makelaar.i_id and child = pl"}); + Point cursorPos = new Point(sqlCommand.get(0).length(),0); + TabCompletionInfo info = SQLUtil.getTabCompletionInfo(sqlCommand, cursorPos); + assertNotNull(info); + assertEquals(TabCompletionInfo.MatchType.COLUMN_NAMES, info.getMatchType()); + List matches = info.getPossibleMatches(); + assertEquals("pl", info.getStart()); } public void testParseTableNames() { |