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...> - 2010-01-24 13:23:27
|
Author: roy Date: 2010-01-24 14:23:17 +0100 (Sun, 24 Jan 2010) New Revision: 455 Added: src/test/java/nl/improved/sqlclient/AbstractSQLShellWindowTest.java Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java Log: fixes to real annoying character order messup Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java =================================================================== --- src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2010-01-24 11:07:18 UTC (rev 454) +++ src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2010-01-24 13:23:17 UTC (rev 455) @@ -147,6 +147,7 @@ commands.register("EXIT[\\s]*", new QuitCommand("exit")); commands.register("SAVE[\\s]*.*", new SaveCommand()); commands.register("SET[\\s]*.*", new SettingsCommand()); + commands.register("COUNT[\\s]*.*[\\d]+", new CountCommand()); //commands.register("\\\\Q[\\s]*", new QuitCommand("\\q")); commands.register("@.*", new ExecuteBatchCommand(this)); commands.register("(SELECT|UPDATE|ALTER|INSERT|DELETE).*;[\\s]*", new QueryCommand()); @@ -707,7 +708,7 @@ repaint(); } - public void insertText(CharSequence newText) { + public synchronized void insertText(CharSequence newText) { if (newText.equals("\n")) { newLine(); // TODO Fix return in middle of an other line } else { @@ -727,15 +728,16 @@ cursorPosition.x += newText.length(); // check if the new line is becoming too long if (currentLine.length() > screen.MAX_LINE_LENGTH) { + //debug("BREAKING LINE IN MULTIPLE PIECES: " + screen.MAX_LINE_LENGTH); // TODO search for lastspace that is not between '' ?? int lastSpace = SQLUtil.getLastBreakIndex(currentLine.toString().substring(0, screen.MAX_LINE_LENGTH-2));//currentLine.lastIndexOf(" "); if (lastSpace == -1) { - lastSpace = currentLine.length(); + lastSpace = screen.MAX_LINE_LENGTH-1;//currentLine.length(); } int lastChar = currentLine.charAt(lastSpace); // check if there are enough 'next' lines // if not.. add one - if (editableLines.size()-1 == cursorPosition.y) { + if (editableLines.size()-1 >= cursorPosition.y) { StringBuffer newLine = new StringBuffer(); editableLines.add(newLine); } @@ -752,18 +754,23 @@ // if there is not already a 'breaking character' there if (nextLine.length() > 0 && ! SQLUtil.isBreakCharacter(nextLine.charAt(0))) { nextLine.insert(0, ' '); + //debug("INSERTING SPACE"); } // insert the new text at the beginning nextLine.insert(0, currentLine.subSequence(lastSpace, currentLine.length())); currentLine.delete(lastSpace, currentLine.length()); if (lastChar == ' ') { + //debug("DELEINT SPACE"); + cursorPosition.x--; nextLine.deleteCharAt(0); } // check if the cursor postition > the new line length // calculate new x and go to nextline if (cursorPosition.x >= lastSpace) { - cursorPosition.x = (cursorPosition.x - (lastSpace))-1; + //debug("CHANGING POSITION" + cursorPosition); + cursorPosition.x = (cursorPosition.x - (lastSpace)); cursorPosition.y++; + //debug("->CHANGING POSITION" + cursorPosition); } } } @@ -1121,6 +1128,46 @@ return returnValue; } + private class CountCommand implements Command { + + public CommandResult execute(SQLCommand cmd) { + int count; + String cmdStr = cmd.getCommandString(); + if (cmdStr.indexOf(' ') > 0) { + count = Integer.parseInt(cmdStr.substring(cmdStr.indexOf(' ')).trim()); + } else { + count = 100; + } + StringBuffer result = new StringBuffer(); + for (int i =0; i < count; i++) { + result.append(Integer.toString(i+1)); + result.append(' '); + } + + return new SimpleCommandResult(run, result.toString()); + } + + public CharSequence getCommandString() { + return "count"; + } + + public TabCompletionInfo getTabCompletionInfo(SQLCommand commandInfo, Point commandPoint) { + return null; + } + + public CharSequence getHelp() { + return ""; + } + + public boolean abort() { + return false; + } + + public boolean backgroundProcessSupported() { + return false; + } + + } /** * Connect command for setting up a connection to a database. */ Added: src/test/java/nl/improved/sqlclient/AbstractSQLShellWindowTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/AbstractSQLShellWindowTest.java 2010-01-24 11:07:18 UTC (rev 454) +++ src/test/java/nl/improved/sqlclient/AbstractSQLShellWindowTest.java 2010-01-24 13:23:17 UTC (rev 455) @@ -0,0 +1,94 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package nl.improved.sqlclient; + +import java.io.File; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; +import junit.framework.TestCase; + +/** + * + * @author roy + */ +public class AbstractSQLShellWindowTest extends TestCase { + + public AbstractSQLShellWindowTest(String testName) { + super(testName); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + /** + * Test of handleInput method, of class AbstractSQLShellWindow. + */ + public void testHandleInput() { + String s = "select * from test;"; + AbstractSQLShellWindow instance = new AbstractSQLShellWindowImpl(); + InputKey inp = null; + for (char c : s.toCharArray()) { + inp = new InputKey(c); + instance.handleInput(inp); + } + assertEquals(s, instance.getCommand().getUntrimmedCommandString().trim()); + } + + public void testInsertText() { + String s = "select * from test;"; + AbstractSQLShellWindow instance = new AbstractSQLShellWindowImpl(); + instance.insertText(s); + assertEquals(s, instance.getCommand().getUntrimmedCommandString().trim()); + + instance = new AbstractSQLShellWindowImpl(); + InputKey inp = null; + for (char c : s.toCharArray()) { + instance.insertText(Character.toString(c)); + } + assertEquals(s, instance.getCommand().getUntrimmedCommandString().trim()); + } + + public class AbstractSQLShellWindowImpl extends AbstractSQLShellWindow { + + public void show() { + } + + public int getScreenWidth() { + return 10;//10; + } + + public int getScreenHeight() { + return 20; + } + + public void paint(Screen screen) { + } + + public void beep() { + } + + public void debug(String debug) { + System.out.println("DEBUG: "+ debug); + } + + public String select(List<String> items, Point p) { + return ""; + } + + public String[] getLoginCredentials(String username, String password) throws SQLException { + return null; + } + } + +} |
From: SVN by r. <sv...@ca...> - 2010-01-24 11:07:30
|
Author: roy Date: 2010-01-24 12:07:18 +0100 (Sun, 24 Jan 2010) New Revision: 454 Added: src/test/java/nl/improved/sqlclient/charva/ src/test/java/nl/improved/sqlclient/charva/CharvaSQLShellWindowTest.java Modified: src/main/java/nl/improved/sqlclient/charva/CharvaSQLShellWindow.java Log: fix pageup/down include some lines of previous screen Modified: src/main/java/nl/improved/sqlclient/charva/CharvaSQLShellWindow.java =================================================================== --- src/main/java/nl/improved/sqlclient/charva/CharvaSQLShellWindow.java 2010-01-20 19:40:27 UTC (rev 453) +++ src/main/java/nl/improved/sqlclient/charva/CharvaSQLShellWindow.java 2010-01-24 11:07:18 UTC (rev 454) @@ -309,17 +309,25 @@ } private String trim(StringBuilder text, int pageUpCount) { + return trim(text, pageUpCount, getScreenHeight()); + + } + + public static String trim(StringBuilder text, int pageUpCount, int maxHeight) { String strText = text.toString(); if (strText.indexOf('\n') < 0) { return strText; } - int maxHeight = getScreenHeight(); String[] lines = strText.split("\n"); if (lines.length <= maxHeight) { return strText; } StringBuilder newString = new StringBuilder(); - int offset = Math.max(0, lines.length - ((pageUpCount +1) * maxHeight-3)); // include some extra lines in history + int offset = lines.length - ((pageUpCount +1) * maxHeight); + if (pageUpCount > 0) { + offset +=pageUpCount; + } + offset = Math.max(0, offset); boolean endsWithReturn = strText.endsWith("\n"); for (int i = 0; i < maxHeight; i++) { newString.append(lines[i+offset]); Added: src/test/java/nl/improved/sqlclient/charva/CharvaSQLShellWindowTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/charva/CharvaSQLShellWindowTest.java 2010-01-20 19:40:27 UTC (rev 453) +++ src/test/java/nl/improved/sqlclient/charva/CharvaSQLShellWindowTest.java 2010-01-24 11:07:18 UTC (rev 454) @@ -0,0 +1,66 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package nl.improved.sqlclient.charva; + +import junit.framework.TestCase; + +/** + * + * @author roy + */ +public class CharvaSQLShellWindowTest extends TestCase { + + public CharvaSQLShellWindowTest(String testName) { + super(testName); + } + + + /** + * Test of trim method, of class CharvaSQLShellWindow. + */ + public void testTrim() { + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < 1000; i++) { + buf.append(Integer.toString(i)); + buf.append('\n'); + } + int maxHeight = 3; + + int pageUpCount = 0; + String expResult = "997\n998\n999\n"; + String result = CharvaSQLShellWindow.trim(buf, pageUpCount, maxHeight); + assertEquals(expResult, result); + + pageUpCount = 1; + expResult = "995\n996\n997\n"; + result = CharvaSQLShellWindow.trim(buf, pageUpCount, maxHeight); + assertEquals(expResult, result); + + pageUpCount = 2; + expResult = "993\n994\n995\n"; + result = CharvaSQLShellWindow.trim(buf, pageUpCount, maxHeight); + assertEquals(expResult, result); + + + pageUpCount = 0; + maxHeight=10; + expResult = "990\n991\n992\n993\n994\n995\n996\n997\n998\n999\n"; + result = CharvaSQLShellWindow.trim(buf, pageUpCount, maxHeight); + assertEquals(expResult, result); + + pageUpCount = 1; + maxHeight=10; + expResult = "981\n982\n983\n984\n985\n986\n987\n988\n989\n990\n"; + result = CharvaSQLShellWindow.trim(buf, pageUpCount, maxHeight); + assertEquals(expResult, result); + + pageUpCount = 2; + maxHeight=10; + expResult = "972\n973\n974\n975\n976\n977\n978\n979\n980\n981\n"; + result = CharvaSQLShellWindow.trim(buf, pageUpCount, maxHeight); + assertEquals(expResult, result); + } +} |
From: SVN by r. <sv...@ca...> - 2009-12-20 15:13:16
|
Author: roy Date: 2009-12-20 16:13:01 +0100 (Sun, 20 Dec 2009) New Revision: 449 Modified: ChangeLog Log: mention change Modified: ChangeLog =================================================================== --- ChangeLog 2009-12-20 15:12:32 UTC (rev 448) +++ ChangeLog 2009-12-20 15:13:01 UTC (rev 449) @@ -11,7 +11,7 @@ - read autocommit (after every 100,000 rows) setting added - set readAutoCommit=Y; to autocommit after successfull read (and every 10,000 rows) - fix encoding problems - - fix for really large files (7934149 rows, 4,9G) + - fix for really large files (tested 7,934,149 rows, 4,9G datafile) 0.6.2 (2009-02-20) * Commandline input support |
From: SVN by r. <sv...@ca...> - 2009-12-20 15:12:50
|
Author: roy Date: 2009-12-20 16:12:32 +0100 (Sun, 20 Dec 2009) New Revision: 448 Modified: ChangeLog Log: mention changes Modified: ChangeLog =================================================================== --- ChangeLog 2009-12-17 21:55:24 UTC (rev 447) +++ ChangeLog 2009-12-20 15:12:32 UTC (rev 448) @@ -8,9 +8,10 @@ * Dump / Read updates - dump as <filename> support added - dump/read progress output added - - read autocommit (after every 10,000 rows) setting added + - read autocommit (after every 100,000 rows) setting added - set readAutoCommit=Y; to autocommit after successfull read (and every 10,000 rows) - fix encoding problems + - fix for really large files (7934149 rows, 4,9G) 0.6.2 (2009-02-20) * Commandline input support |
From: SVN by r. <sv...@ca...> - 2009-12-17 21:55:38
|
Author: roy Date: 2009-12-17 22:55:24 +0100 (Thu, 17 Dec 2009) New Revision: 447 Modified: ChangeLog Log: mention changes Modified: ChangeLog =================================================================== --- ChangeLog 2009-12-17 21:55:16 UTC (rev 446) +++ ChangeLog 2009-12-17 21:55:24 UTC (rev 447) @@ -5,9 +5,12 @@ * Added initial settings command (to change for the current login session) the horizontal or vertical separator character * Added initial support for variables (in settings command.. see 'help set' for more information) * History completion - * dump as <filename> support added - * dump/read progress output added - * read autocommit (after every 1000 rows) setting added +* Dump / Read updates + - dump as <filename> support added + - dump/read progress output added + - read autocommit (after every 10,000 rows) setting added + - set readAutoCommit=Y; to autocommit after successfull read (and every 10,000 rows) + - fix encoding problems 0.6.2 (2009-02-20) * Commandline input support |
From: SVN by r. <sv...@ca...> - 2009-12-17 21:55:29
|
Author: roy Date: 2009-12-17 22:55:16 +0100 (Thu, 17 Dec 2009) New Revision: 446 Modified: src/main/java/nl/improved/sqlclient/commands/DumpCommand.java Log: fixes in skipping characters Modified: src/main/java/nl/improved/sqlclient/commands/DumpCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-12-17 15:59:15 UTC (rev 445) +++ src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-12-17 21:55:16 UTC (rev 446) @@ -248,16 +248,24 @@ int index = 0; for (int i = 0; i < chars.length(); i++) { ch[index] = chars.charAt(i); - if (ch[index] != 19 && ch[index] != 24 && ch[index] != 25 && ch[index] != 26 - && ch[index] != 27) { + if (ch[index] < 8) { + continue; + } + if (ch[index] >= 11 && ch[index] <= 31 ) { + continue; + } + if (ch[index] >= 11 && ch[index] <= 31 ) { if (ch[index] == 28 || ch[index] == 29) { ch[index]='\''; warnings++; index++; - } else { - index++; } + continue; } + if (ch[index] >= 127 && ch[index] <= 159 ) { + continue; + } + index++; } if (index == chars.length()) { return ch; |
From: SVN by r. <sv...@ca...> - 2009-12-17 15:59:27
|
Author: roy Date: 2009-12-17 16:59:15 +0100 (Thu, 17 Dec 2009) New Revision: 445 Modified: src/main/java/nl/improved/sqlclient/commands/DumpCommand.java Log: oops.. files became empty ;( Modified: src/main/java/nl/improved/sqlclient/commands/DumpCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-12-17 15:47:07 UTC (rev 444) +++ src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-12-17 15:59:15 UTC (rev 445) @@ -250,11 +250,13 @@ ch[index] = chars.charAt(i); if (ch[index] != 19 && ch[index] != 24 && ch[index] != 25 && ch[index] != 26 && ch[index] != 27) { - } else if (ch[index] == 28 || ch[index] == 29) { - ch[index]='\''; - index++; - } else { - index++; + if (ch[index] == 28 || ch[index] == 29) { + ch[index]='\''; + warnings++; + index++; + } else { + index++; + } } } if (index == chars.length()) { |
From: SVN by r. <sv...@ca...> - 2009-12-17 15:47:21
|
Author: roy Date: 2009-12-17 16:47:07 +0100 (Thu, 17 Dec 2009) New Revision: 444 Modified: src/main/java/nl/improved/sqlclient/commands/DumpCommand.java Log: added abort method added encoding fixes Modified: src/main/java/nl/improved/sqlclient/commands/DumpCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-12-17 15:45:34 UTC (rev 443) +++ src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-12-17 15:47:07 UTC (rev 444) @@ -17,8 +17,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; @@ -35,6 +33,8 @@ public class DumpCommand extends ReadDumpCommand { private String fileName; + private int warnings = 0; + private boolean abort; public DumpCommand(AbstractSQLShellWindow window) { super(window); @@ -77,6 +77,8 @@ @Override public CommandResult execute(SQLCommand cmd) { + abort = false; + warnings = 0; String[] result = getParsedStrings(cmd); String dumpFileName = result[0]; String tableName = result[1]; @@ -102,7 +104,7 @@ // SAX2.0 ContentHandler. TransformerHandler hd = tf.newTransformerHandler(); Transformer serializer = hd.getTransformer(); - serializer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1"); + serializer.setOutputProperty(OutputKeys.ENCODING, ENCODING); //serializer.setOutputProperty(OutputKeys.INDENT,"no"); hd.setResult(streamResult); hd.startDocument(); @@ -114,7 +116,7 @@ stmt = c.createStatement(); rs = stmt.executeQuery(query); SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT); - while (rs.next()) { + while (rs.next() && !abort) { atts.clear(); hd.startElement("", "", "row", atts); ResultSetMetaData metaData = rs.getMetaData(); @@ -159,7 +161,11 @@ hd.startElement("", "", "col", atts); String value = rs.getString(col); if (value != null) { - hd.characters(value.toCharArray(), 0, value.length()); + //hd.startCDATA();; + //hd.characters(value.toCharArray(), 0, value.length()); + //hd.endCDATA(); + char[] chars = trimNonReadableChars(value); + hd.characters(chars, 0, chars.length); } } hd.endElement("", "", "col"); @@ -172,7 +178,11 @@ } hd.endElement("", "", "dump"); hd.endDocument(); - + if (abort) { + return new SimpleCommandResult(true, "Dump to " + fileName + " aborted. (" + rowCount + " rows written, "+warnings+" warnings)"); + } else { + return new SimpleCommandResult(true, "Dump to " + fileName + " done. (" + rowCount + " rows written, "+warnings+" warnings)"); + } } catch (SAXException ex) { throw new IllegalStateException("Failed to create dump (" + fileName + "): " + ex.toString(), ex); } catch (TransformerConfigurationException e) { @@ -192,7 +202,6 @@ out.close(); } } - return new SimpleCommandResult(true, "Dump to " + fileName + " done. (" + rowCount + " rows written)"); } @Override @@ -225,11 +234,36 @@ @Override public boolean abort() { + this.abort = true; return false; } @Override public boolean backgroundProcessSupported() { - return false; + return true; } + + private char[] trimNonReadableChars(String chars) { + char[] ch = new char[chars.length()]; + int index = 0; + for (int i = 0; i < chars.length(); i++) { + ch[index] = chars.charAt(i); + if (ch[index] != 19 && ch[index] != 24 && ch[index] != 25 && ch[index] != 26 + && ch[index] != 27) { + } else if (ch[index] == 28 || ch[index] == 29) { + ch[index]='\''; + index++; + } else { + index++; + } + } + if (index == chars.length()) { + return ch; + } + warnings += (chars.length() - index); + char[] result = new char[index]; + System.arraycopy(ch, 0, result, 0, index); + return result; + + } } |
From: SVN by r. <sv...@ca...> - 2009-12-17 15:45:47
|
Author: roy Date: 2009-12-17 16:45:34 +0100 (Thu, 17 Dec 2009) New Revision: 443 Modified: src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java Log: log correct setting for readAutoCommit Modified: src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2009-12-17 15:45:00 UTC (rev 442) +++ src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2009-12-17 15:45:34 UTC (rev 443) @@ -35,7 +35,7 @@ char readAutoCommit = cmdString.charAt(cmdString.indexOf('=')+1); if (readAutoCommit == 'Y' || readAutoCommit == 'N') { ReadCommand.setAutoCommit(readAutoCommit == 'Y'); - return new SimpleCommandResult(true, "Auto commit for the read command is set to '"+ResultBuilder.getVerticalSeparator()+"'."); + return new SimpleCommandResult(true, "Auto commit for the read command is set to '"+ReadCommand.getAutoCommit()+"'."); } else { return new SimpleCommandResult(false, "Auto commit for the read command can only be set to 'Y' or 'N' (value: " + readAutoCommit+")"); } |
From: SVN by r. <sv...@ca...> - 2009-12-17 15:45:15
|
Author: roy Date: 2009-12-17 16:45:00 +0100 (Thu, 17 Dec 2009) New Revision: 442 Modified: src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java Log: final encoding value Modified: src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java 2009-12-17 15:44:46 UTC (rev 441) +++ src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java 2009-12-17 15:45:00 UTC (rev 442) @@ -2,10 +2,14 @@ import java.sql.Types; import nl.improved.sqlclient.AbstractSQLShellWindow; -import nl.improved.sqlclient.commands.Command; abstract class ReadDumpCommand implements Command { + /** + * Encoding used in dump files. + */ + public static final String ENCODING= "ISO-8859-1"; + public static final String DATE_FORMAT = "yyyyMMddHHmmss"; private final AbstractSQLShellWindow window; |
From: SVN by r. <sv...@ca...> - 2009-12-17 15:44:59
|
Author: roy Date: 2009-12-17 16:44:46 +0100 (Thu, 17 Dec 2009) New Revision: 441 Modified: src/main/java/nl/improved/sqlclient/commands/ReadCommand.java Log: oracle number fixes fixes to encoding Modified: src/main/java/nl/improved/sqlclient/commands/ReadCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-12-16 15:15:46 UTC (rev 440) +++ src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-12-17 15:44:46 UTC (rev 441) @@ -4,7 +4,9 @@ import javax.xml.parsers.SAXParser; import nl.improved.sqlclient.*; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStreamReader; import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; @@ -18,6 +20,7 @@ import java.util.Vector; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; +import org.xml.sax.InputSource; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; @@ -33,6 +36,9 @@ static void setAutoCommit(boolean b) { autoCommit = b; } + static boolean getAutoCommit() { + return autoCommit; + } private String fileName; private ReadCommandContentHandler contentHandler; @@ -102,7 +108,6 @@ pstmt.setObject(i+1, o); } } - output(valuesList.toString()); // execute query... pstmt.executeUpdate(); valuesList.clear(); @@ -132,7 +137,6 @@ valuesList.add(NULL_DATE); } else { try { - //pstmt.setDate(colNr + 1, new Date(formatter.parse(nodeValue).getTime())); valuesList.add(new Date(formatter.parse(nodeValue.replace("\n", "").trim()).getTime())); } catch (ParseException ex) { throw new IOException("Row: "+ rowCount+" Failed to parse date :"+ nodeValue); @@ -151,13 +155,22 @@ try { int iType = Integer.parseInt(typeString); switch (iType) { + case Types.NUMERIC: case Types.INTEGER: case Types.SMALLINT: case Types.BIGINT: - valuesList.add(Integer.parseInt(nodeValue)); + if (nodeValue == null || nodeValue.equals("")) { + valuesList.add(null); + } else { + valuesList.add(Integer.parseInt(nodeValue)); + } break; case Types.DOUBLE: - valuesList.add(Double.parseDouble(nodeValue)); + if (nodeValue == null || nodeValue.equals("")) { + valuesList.add(null); + } else { + valuesList.add(Double.parseDouble(nodeValue)); + } break; case Types.VARCHAR: case Types.CHAR: @@ -170,24 +183,33 @@ valuesList.add(nodeValue); } } catch(Exception e) { - throw new IllegalArgumentException("Row :"+ rowCount +": Warning invalid type read: '" + typeString+"'"); + throw new IllegalArgumentException("Row :"+ rowCount +": Warning invalid type read: '" + typeString+"'", e); } } } } }; - //reader.setContentHandler(contentHandler); - parser.parse(new File(fileName), contentHandler); + InputStreamReader ir = new InputStreamReader(new FileInputStream(fileName), ENCODING); + InputSource source = new InputSource(ir); + parser.parse(source, contentHandler); int rowCount= contentHandler.rowCount; contentHandler = null; - return new SimpleCommandResult(true, "Read from " + fileName + " done. (" + rowCount + " rows imported)"); + if (autoCommit && c != null) { + c.commit(); + return new SimpleCommandResult(true, "Read from " + fileName + " done. (" + rowCount + " rows comitted)"); + } else { + return new SimpleCommandResult(true, "Read from " + fileName + " done. (" + rowCount + " rows imported)"); + } } catch (AbortException e) { int rowCount= contentHandler.rowCount; contentHandler = null; return new SimpleCommandResult(true, "Read from " + fileName + " aborted. (" + rowCount + " rows imported)"); } catch (Exception e) { - int rowCount= contentHandler.rowCount; - contentHandler = null; + int rowCount= -1; + if (contentHandler != null) { + rowCount= contentHandler.rowCount; + contentHandler = null; + } throw new IllegalStateException("Row: "+ rowCount+" Failed to read dump (" + fileName + "): " + e.toString(), e); } } @@ -278,7 +300,8 @@ public void endElement(String uri, String localName, String qName) throws SAXException { if (nameTree.get(nameTree.size()-1).name.equals(qName)) { try { - handleElement(nameTree.remove(nameTree.size() - 1), content.toString()); + String s = new String(content.toString().getBytes(ENCODING)); // fix encoding + handleElement(nameTree.remove(nameTree.size() - 1), s); } catch (SQLException e) { throw new IllegalStateException("Failed to execute update query for dump(" + fileName + "): " + e.toString(), e); } catch (IOException e) { @@ -304,10 +327,12 @@ @Override public void processingInstruction(String target, String data) throws SAXException { + System.out.println(data); } @Override public void skippedEntity(String name) throws SAXException { + System.out.println(name); } } |
From: SVN by r. <sv...@ca...> - 2009-12-16 15:16:02
|
Author: roy Date: 2009-12-16 16:15:46 +0100 (Wed, 16 Dec 2009) New Revision: 440 Modified: src/main/java/nl/improved/sqlclient/commands/DescCommand.java Log: close cursors Modified: src/main/java/nl/improved/sqlclient/commands/DescCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/DescCommand.java 2009-12-16 11:32:47 UTC (rev 439) +++ src/main/java/nl/improved/sqlclient/commands/DescCommand.java 2009-12-16 15:15:46 UTC (rev 440) @@ -48,8 +48,9 @@ ResultBuilder.setHorizontalSeparatorEnabled(false); ResultBuilder.setVerticalSeparator(' '); boolean foundMatch = false; + ResultSet rs = null; try { - ResultSet rs = conn.getMetaData().getColumns(conn.getCatalog(), DBConnector.getInstance().getSchema(), tableName, "%"); + rs = conn.getMetaData().getColumns(conn.getCatalog(), DBConnector.getInstance().getSchema(), tableName, "%"); int row = 0; while (rs.next()) { foundMatch = true; @@ -98,6 +99,9 @@ } catch (SQLException ex) { throw new IllegalStateException("Failed to find columnnames for table: "+ tableName, ex); } finally { + if (rs != null) { + try { rs.close(); } catch(Exception e) { /*ignore */} + } ResultBuilder.setHorizontalSeparatorEnabled(oldEnabled); ResultBuilder.setVerticalSeparator(oldChar); } |
From: SVN by r. <sv...@ca...> - 2009-12-16 11:32:59
|
Author: roy Date: 2009-12-16 12:32:47 +0100 (Wed, 16 Dec 2009) New Revision: 439 Modified: src/main/java/nl/improved/sqlclient/commands/DumpCommand.java Log: close statements and resultsets Modified: src/main/java/nl/improved/sqlclient/commands/DumpCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-12-16 10:12:50 UTC (rev 438) +++ src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-12-16 11:32:47 UTC (rev 439) @@ -83,6 +83,8 @@ String query = "select * from " + result[2]; int rowCount = 0; PrintWriter out = null; + Statement stmt = null; + ResultSet rs = null; try { File f; if (dumpFileName.toLowerCase().endsWith(".dmp")) { @@ -109,8 +111,8 @@ // USERS tag. hd.startElement("", "", "dump", atts); Connection c = DBConnector.getInstance().getConnection(); - Statement stmt = c.createStatement(); - ResultSet rs = stmt.executeQuery(query); + stmt = c.createStatement(); + rs = stmt.executeQuery(query); SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT); while (rs.next()) { atts.clear(); @@ -180,6 +182,12 @@ } catch (IOException e) { throw new IllegalStateException("Failed to create dump (" + fileName + "): " + e.toString(), e); } finally { + if (rs != null) { + try { rs.close(); } catch(Exception e) { /* ignore */} + } + if (stmt != null) { + try { stmt.close(); } catch(Exception e) { /* ignore */} + } if (out != null) { out.close(); } |
From: SVN by r. <sv...@ca...> - 2009-12-16 10:13:03
|
Author: roy Date: 2009-12-16 11:12:50 +0100 (Wed, 16 Dec 2009) New Revision: 438 Modified: src/main/java/nl/improved/sqlclient/commands/DumpCommand.java Log: fix help small other fixes in error handling Modified: src/main/java/nl/improved/sqlclient/commands/DumpCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-12-16 10:04:43 UTC (rev 437) +++ src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-12-16 10:12:50 UTC (rev 438) @@ -164,7 +164,7 @@ } hd.endElement("", "", "row"); rowCount++; - if (rowCount % 1000 == 0) { + if (rowCount % 10000 == 0) { output(Integer.toString(rowCount)+" rows written"); } } @@ -172,7 +172,7 @@ hd.endDocument(); } catch (SAXException ex) { - Logger.getLogger(AbstractSQLShellWindow.class.getName()).log(Level.SEVERE, null, ex); + throw new IllegalStateException("Failed to create dump (" + fileName + "): " + ex.toString(), ex); } catch (TransformerConfigurationException e) { throw new IllegalStateException("Failed to create xml handler: " + e.toString(), e); } catch (SQLException e) { @@ -212,7 +212,7 @@ @Override public CharSequence getHelp() { - return "tablename [where clause]\n" + "For example: dump users where role=\'manager\';\n\n" + "See \'read\' for options to read the dump file back into the table"; + return "[as filename] tablename [where clause]\n" + "For example: dump users where role=\'manager\';\n\n" + "See \'read\' for options to read the dump file back into the table"; } @Override |
From: SVN by r. <sv...@ca...> - 2009-12-16 10:05:00
|
Author: roy Date: 2009-12-16 11:04:43 +0100 (Wed, 16 Dec 2009) New Revision: 437 Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java Log: made repaint public Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java =================================================================== --- src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2009-12-16 09:49:10 UTC (rev 436) +++ src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2009-12-16 10:04:43 UTC (rev 437) @@ -499,7 +499,7 @@ /** * Repaint the screen. */ - protected void repaint() { + public void repaint() { if (isRunning()) { waitAndPaint(); //paint(getScreen()); |
From: SVN by r. <sv...@ca...> - 2009-12-16 09:49:27
|
Author: roy Date: 2009-12-16 10:49:10 +0100 (Wed, 16 Dec 2009) New Revision: 436 Modified: src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java Log: repaint after feedback Modified: src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java 2009-12-16 09:48:55 UTC (rev 435) +++ src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java 2009-12-16 09:49:10 UTC (rev 436) @@ -16,6 +16,7 @@ void output(CharSequence out) { if (window != null) { window.output(out); + window.repaint(); } } |
From: SVN by r. <sv...@ca...> - 2009-12-16 09:49:11
|
Author: roy Date: 2009-12-16 10:48:55 +0100 (Wed, 16 Dec 2009) New Revision: 435 Modified: src/main/java/nl/improved/sqlclient/commands/ReadCommand.java Log: fix import content (oops) add background support (again) Modified: src/main/java/nl/improved/sqlclient/commands/ReadCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-12-15 20:48:09 UTC (rev 434) +++ src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-12-16 09:48:55 UTC (rev 435) @@ -102,6 +102,7 @@ pstmt.setObject(i+1, o); } } + output(valuesList.toString()); // execute query... pstmt.executeUpdate(); valuesList.clear(); @@ -109,9 +110,9 @@ if (rowCount % 100000 == 0) { if (autoCommit) { pstmt.getConnection().commit(); - //output(Integer.toString(rowCount)+" rows comitted"); + output(Integer.toString(rowCount)+" rows comitted"); } else { - //output(Integer.toString(rowCount)+" rows inserted"); + output(Integer.toString(rowCount)+" rows inserted"); } } } @@ -224,7 +225,7 @@ @Override public boolean backgroundProcessSupported() { - return false; + return true; } private static abstract class ReadCommandContentHandler extends DefaultHandler { @@ -277,7 +278,7 @@ public void endElement(String uri, String localName, String qName) throws SAXException { if (nameTree.get(nameTree.size()-1).name.equals(qName)) { try { - handleElement(nameTree.remove(nameTree.size() - 1), "");//content.toString()); + handleElement(nameTree.remove(nameTree.size() - 1), content.toString()); } catch (SQLException e) { throw new IllegalStateException("Failed to execute update query for dump(" + fileName + "): " + e.toString(), e); } catch (IOException e) { @@ -293,9 +294,7 @@ @Override public void characters(char[] ch, int start, int length) throws SAXException { - if (nameTree.get(nameTree.size()-1).name.equals("col")) { - content.append(ch, start, length); - } + content.append(ch, start, length); } @Override @@ -305,12 +304,10 @@ @Override public void processingInstruction(String target, String data) throws SAXException { - System.err.println("Not supported yet."); } @Override public void skippedEntity(String name) throws SAXException { - System.err.println("Not supported yet."); } } |
From: SVN by r. <sv...@ca...> - 2009-12-15 20:48:22
|
Author: roy Date: 2009-12-15 21:48:09 +0100 (Tue, 15 Dec 2009) New Revision: 434 Modified: src/main/java/nl/improved/sqlclient/commands/ReadCommand.java Log: some fixes in reading large files (threading issues) Modified: src/main/java/nl/improved/sqlclient/commands/ReadCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-12-15 08:58:40 UTC (rev 433) +++ src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-12-15 20:48:09 UTC (rev 434) @@ -12,10 +12,12 @@ import java.sql.Types; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Vector; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; -import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; @@ -89,6 +91,7 @@ if (info.name.equals("row")) { if (!query.endsWith(")")) { query = query + values + ")"; + //output(query); pstmt = c.prepareStatement(query); } for (int i = 0; i < valuesList.size() ; i++) { @@ -106,20 +109,22 @@ if (rowCount % 100000 == 0) { if (autoCommit) { pstmt.getConnection().commit(); - output(Integer.toString(rowCount)+" rows comitted"); + //output(Integer.toString(rowCount)+" rows comitted"); } else { - output(Integer.toString(rowCount)+" rows inserted"); + //output(Integer.toString(rowCount)+" rows inserted"); } } } if (info.name.equals("col")) { if (!query.endsWith(")")) { if (values.endsWith("?")) { + query +=","; values+=","; } + query+= info.atts.get("name"); values += "?"; } - String typeString = info.atts.getValue("type"); + String typeString = info.atts.get("type"); if (typeString.equals("date")) { String nodeValue = content; if (nodeValue == null || nodeValue.equals("")) { @@ -127,9 +132,9 @@ } else { try { //pstmt.setDate(colNr + 1, new Date(formatter.parse(nodeValue).getTime())); - valuesList.add(new Date(formatter.parse(nodeValue).getTime())); + valuesList.add(new Date(formatter.parse(nodeValue.replace("\n", "").trim()).getTime())); } catch (ParseException ex) { - throw new IOException("Failed to parse date :"+ nodeValue); + throw new IOException("Row: "+ rowCount+" Failed to parse date :"+ nodeValue); } } } else if (typeString.equals("binary")) { @@ -164,21 +169,25 @@ valuesList.add(nodeValue); } } catch(Exception e) { - valuesList.add(nodeValue); + throw new IllegalArgumentException("Row :"+ rowCount +": Warning invalid type read: '" + typeString+"'"); } } } } }; - reader.setContentHandler(contentHandler); - //parser.parse(new File(fileName), new DefaultHandler()); - parser.parse(new File(fileName), (DefaultHandler)null); + //reader.setContentHandler(contentHandler); + parser.parse(new File(fileName), contentHandler); + int rowCount= contentHandler.rowCount; contentHandler = null; - return new SimpleCommandResult(true, "Read from " + fileName + " done. (" + contentHandler.rowCount + " rows imported)"); + return new SimpleCommandResult(true, "Read from " + fileName + " done. (" + rowCount + " rows imported)"); } catch (AbortException e) { - return new SimpleCommandResult(true, "Read from " + fileName + " aborted. (" + contentHandler.rowCount + " rows imported)"); + int rowCount= contentHandler.rowCount; + contentHandler = null; + return new SimpleCommandResult(true, "Read from " + fileName + " aborted. (" + rowCount + " rows imported)"); } catch (Exception e) { - throw new IllegalStateException("Failed to read dump (" + fileName + "): " + e.toString(), e); + int rowCount= contentHandler.rowCount; + contentHandler = null; + throw new IllegalStateException("Row: "+ rowCount+" Failed to read dump (" + fileName + "): " + e.toString(), e); } } @@ -215,13 +224,13 @@ @Override public boolean backgroundProcessSupported() { - return true; + return false; } - private static abstract class ReadCommandContentHandler implements ContentHandler { + private static abstract class ReadCommandContentHandler extends DefaultHandler { int rowCount = 0; - private List<ElementInfo> nameTree = new ArrayList<ElementInfo>(); + private List<ElementInfo> nameTree = new Vector<ElementInfo>(); private StringBuffer content; private boolean failed = false; private final String fileName; @@ -232,35 +241,43 @@ } + @Override public void setDocumentLocator(Locator locator) { } + @Override public void startDocument() throws SAXException { nameTree.clear(); content = new StringBuffer(); } + @Override public void endDocument() throws SAXException { nameTree.clear(); } + @Override public void startPrefixMapping(String prefix, String uri) throws SAXException { } + @Override public void endPrefixMapping(String prefix) throws SAXException { } + @Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { nameTree.add(new ElementInfo(qName, atts)); + content = new StringBuffer(); if (abort) { throw new AbortException(); } } + @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (nameTree.get(nameTree.size()-1).name.equals(qName)) { try { - handleElement(nameTree.remove(nameTree.size() - 1), content.toString()); + handleElement(nameTree.remove(nameTree.size() - 1), "");//content.toString()); } catch (SQLException e) { throw new IllegalStateException("Failed to execute update query for dump(" + fileName + "): " + e.toString(), e); } catch (IOException e) { @@ -274,50 +291,44 @@ public abstract void handleElement(ElementInfo info, String content) throws SQLException, IOException; + @Override public void characters(char[] ch, int start, int length) throws SAXException { - content.append(ch, start, length); + if (nameTree.get(nameTree.size()-1).name.equals("col")) { + content.append(ch, start, length); + } } + @Override public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { - content.append(ch, start, length); + //content.append(ch, start, length); } + @Override public void processingInstruction(String target, String data) throws SAXException { - throw new UnsupportedOperationException("Not supported yet."); + System.err.println("Not supported yet."); } + @Override public void skippedEntity(String name) throws SAXException { - throw new UnsupportedOperationException("Not supported yet."); + System.err.println("Not supported yet."); } } private static class ElementInfo { private final String name; - private final Attributes atts; + private final Map<String, String> atts; - public ElementInfo(String name, Attributes atts) { + public ElementInfo(String name, Attributes attributes) { this.name = name; - this.atts = atts; + atts = new HashMap<String, String>(); + for (int i= 0; i < attributes.getLength(); i++) { + atts.put(attributes.getLocalName(i), attributes.getValue(i)); + } } } private static class AbortException extends RuntimeException { } - - public static void main(String[] args) throws Exception { - final String fileName = args[0]; - SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); - XMLReader reader = parser.getXMLReader(); - reader.setFeature("http://xml.org/sax/features/validation", false); - reader.setContentHandler(new ReadCommandContentHandler(fileName) { - @Override - public void handleElement(ElementInfo info, String content) throws SQLException, IOException { - System.out.println(info.name); - } - }); - //parser.parse(new File(fileName), new DefaultHandler()); - parser.parse(new File(fileName), (DefaultHandler)null); - } } |
From: SVN by r. <sv...@ca...> - 2009-12-15 08:58:53
|
Author: roy Date: 2009-12-15 09:58:40 +0100 (Tue, 15 Dec 2009) New Revision: 433 Modified: src/main/java/nl/improved/sqlclient/commands/ReadCommand.java Log: fix read command for very large files (tried dump of 4.9G) Modified: src/main/java/nl/improved/sqlclient/commands/ReadCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-12-08 10:18:57 UTC (rev 432) +++ src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-12-15 08:58:40 UTC (rev 433) @@ -1,5 +1,7 @@ package nl.improved.sqlclient.commands; +import java.text.ParseException; +import javax.xml.parsers.SAXParser; import nl.improved.sqlclient.*; import java.io.File; import java.io.IOException; @@ -9,12 +11,15 @@ import java.sql.SQLException; import java.sql.Types; import java.text.SimpleDateFormat; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; +import java.util.ArrayList; +import java.util.List; +import javax.xml.parsers.SAXParserFactory; +import org.xml.sax.Attributes; +import org.xml.sax.ContentHandler; +import org.xml.sax.Locator; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; import sun.misc.BASE64Decoder; /** @@ -28,6 +33,7 @@ } private String fileName; + private ReadCommandContentHandler contentHandler; public ReadCommand(AbstractSQLShellWindow window) { super(window); @@ -45,109 +51,138 @@ } else { dumpFileName = nextPart; } - int rowCount = 0; try { - File f = new File(AbstractSQLShellWindow.toFileName(dumpFileName + ".dmp")); + File f = new File(AbstractSQLShellWindow.toFileName(dumpFileName)); fileName = f.getAbsolutePath(); if (!f.exists() && !f.canRead()) { - throw new IllegalStateException("Failed to read dump file: \'" + fileName + "\'"); + f = new File(AbstractSQLShellWindow.toFileName(dumpFileName + ".dmp")); + fileName = f.getAbsolutePath(); + if (!f.exists() && !f.canRead()) { + f = new File(AbstractSQLShellWindow.toFileName(dumpFileName + ".DMP")); + fileName = f.getAbsolutePath(); + throw new IllegalStateException("Failed to read dump file: \'" + fileName + "\'"); + } } - // Step 1: create a DocumentBuilderFactory - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - // Step 2: create a DocumentBuilder - DocumentBuilder db = dbf.newDocumentBuilder(); - // Step 3: parse the input file to get a Document object - Document doc = db.parse(new File(fileName)); - Element documentElement = doc.getDocumentElement(); - String tableName = documentElement.getAttribute("tablename"); - NodeList nodeList = documentElement.getElementsByTagName("row"); - String query = "insert into " + tableName + " ("; - String values = ") values ("; - Element n = (Element) nodeList.item(0); - // row - NodeList cols = n.getElementsByTagName("col"); - for (int colNr = 0; colNr < cols.getLength(); colNr++) { - query += cols.item(colNr).getAttributes().getNamedItem("name").getNodeValue(); - values += "?"; - if (colNr + 1 < cols.getLength()) { - query += ", "; - values += ", "; + + final SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT); + final Connection c = DBConnector.getInstance().getConnection(); + SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); + XMLReader reader = parser.getXMLReader(); + reader.setFeature("http://xml.org/sax/features/validation", false); + contentHandler = new ReadCommandContentHandler(fileName) { + final String NULL_DATE="null_date"; + String query = null; + String values = ") values ("; + List valuesList = new ArrayList(); + PreparedStatement pstmt; + + @Override + public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { + if (qName.equals("dump")) { + query = "insert into " + atts.getValue("tablename") + " ("; + } + super.startElement(uri, localName, qName, atts); } - } - query = query + values + ")"; - Connection c = DBConnector.getInstance().getConnection(); - PreparedStatement pstmt = c.prepareStatement(query); - SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT); - for (int nodeNr = 0; nodeNr < nodeList.getLength(); nodeNr++) { - Element row = (Element) nodeList.item(nodeNr); - // row - NodeList columns = row.getElementsByTagName("col"); - for (int colNr = 0; colNr < columns.getLength(); colNr++) { - Element column = (Element) columns.item(colNr); - Node type = column.getAttributes().getNamedItem("type"); - if (type != null) { - String typeString = type.getNodeValue(); + + @Override + public void handleElement(ElementInfo info, String content) throws SQLException, IOException { + if (info.name.equals("row")) { + if (!query.endsWith(")")) { + query = query + values + ")"; + pstmt = c.prepareStatement(query); + } + for (int i = 0; i < valuesList.size() ; i++) { + Object o = valuesList.get(i); + if (o == NULL_DATE) { + pstmt.setDate(i+1, null); + } else { + pstmt.setObject(i+1, o); + } + } + // execute query... + pstmt.executeUpdate(); + valuesList.clear(); + rowCount++; + if (rowCount % 100000 == 0) { + if (autoCommit) { + pstmt.getConnection().commit(); + output(Integer.toString(rowCount)+" rows comitted"); + } else { + output(Integer.toString(rowCount)+" rows inserted"); + } + } + } + if (info.name.equals("col")) { + if (!query.endsWith(")")) { + if (values.endsWith("?")) { + values+=","; + } + values += "?"; + } + String typeString = info.atts.getValue("type"); if (typeString.equals("date")) { - String nodeValue = column.getTextContent(); + String nodeValue = content; if (nodeValue == null || nodeValue.equals("")) { - pstmt.setDate(colNr + 1, null); + valuesList.add(NULL_DATE); } else { - pstmt.setDate(colNr + 1, new Date(formatter.parse(nodeValue).getTime())); + try { + //pstmt.setDate(colNr + 1, new Date(formatter.parse(nodeValue).getTime())); + valuesList.add(new Date(formatter.parse(nodeValue).getTime())); + } catch (ParseException ex) { + throw new IOException("Failed to parse date :"+ nodeValue); + } } } else if (typeString.equals("binary")) { - String nodeValue = column.getTextContent(); + String nodeValue = content; BASE64Decoder decoder = new BASE64Decoder(); byte[] value = decoder.decodeBuffer(nodeValue); - pstmt.setBytes(colNr + 1, value); + valuesList.add(value); } else { - String nodeValue = column.getTextContent(); - int iType = Integer.parseInt(typeString); - switch (iType) { - case Types.INTEGER: - case Types.SMALLINT: - case Types.BIGINT: - pstmt.setInt(colNr + 1, Integer.parseInt(nodeValue)); - break; - case Types.DOUBLE: - pstmt.setDouble(colNr + 1, Double.parseDouble(nodeValue)); - break; - case Types.VARCHAR: - case Types.CHAR: - case Types.LONGNVARCHAR: - case Types.NCHAR: - case Types.NVARCHAR: - pstmt.setString(colNr + 1, nodeValue); - break; - default: - pstmt.setString(colNr + 1, nodeValue); + String nodeValue = content; + if (typeString.startsWith(".")) { + typeString = typeString.substring(1); } + try { + int iType = Integer.parseInt(typeString); + switch (iType) { + case Types.INTEGER: + case Types.SMALLINT: + case Types.BIGINT: + valuesList.add(Integer.parseInt(nodeValue)); + break; + case Types.DOUBLE: + valuesList.add(Double.parseDouble(nodeValue)); + break; + case Types.VARCHAR: + case Types.CHAR: + case Types.LONGNVARCHAR: + case Types.NCHAR: + case Types.NVARCHAR: + valuesList.add(nodeValue); + break; + default: + valuesList.add(nodeValue); + } + } catch(Exception e) { + valuesList.add(nodeValue); + } } - } else { - //debug(nodeNr +" ? "+column.getTextContent()); - pstmt.setString(colNr + 1, column.getTextContent()); } } - pstmt.executeUpdate(); - rowCount++; - if (rowCount % 1000 == 0) { - if (autoCommit) { - pstmt.getConnection().commit(); - output(Integer.toString(rowCount)+" rows comitted"); - } else { - output(Integer.toString(rowCount)+" rows inserted"); - } - } - } - } catch (SQLException e) { - throw new IllegalStateException("Failed to execute update query for dump(" + fileName + "): " + e.toString(), e); - } catch (IOException e) { - throw new IllegalStateException("Failed to read dump (" + fileName + "): " + e.toString(), e); + }; + reader.setContentHandler(contentHandler); + //parser.parse(new File(fileName), new DefaultHandler()); + parser.parse(new File(fileName), (DefaultHandler)null); + contentHandler = null; + return new SimpleCommandResult(true, "Read from " + fileName + " done. (" + contentHandler.rowCount + " rows imported)"); + } catch (AbortException e) { + return new SimpleCommandResult(true, "Read from " + fileName + " aborted. (" + contentHandler.rowCount + " rows imported)"); } catch (Exception e) { throw new IllegalStateException("Failed to read dump (" + fileName + "): " + e.toString(), e); } - return new SimpleCommandResult(true, "Read from " + fileName + " done. (" + rowCount + " rows imported)"); } + @Override public CharSequence getCommandString() { return "read"; @@ -172,11 +207,117 @@ @Override public boolean abort() { + if (contentHandler != null) { + contentHandler.abort = true; + } return false; } @Override public boolean backgroundProcessSupported() { - return false; + return true; } + + private static abstract class ReadCommandContentHandler implements ContentHandler { + + int rowCount = 0; + private List<ElementInfo> nameTree = new ArrayList<ElementInfo>(); + private StringBuffer content; + private boolean failed = false; + private final String fileName; + private boolean abort; + + public ReadCommandContentHandler(String fileName) { + this.fileName = fileName; + } + + + public void setDocumentLocator(Locator locator) { + } + + public void startDocument() throws SAXException { + nameTree.clear(); + content = new StringBuffer(); + } + + public void endDocument() throws SAXException { + nameTree.clear(); + } + + public void startPrefixMapping(String prefix, String uri) throws SAXException { + } + + public void endPrefixMapping(String prefix) throws SAXException { + } + + public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { + nameTree.add(new ElementInfo(qName, atts)); + if (abort) { + throw new AbortException(); + } + } + + public void endElement(String uri, String localName, String qName) throws SAXException { + if (nameTree.get(nameTree.size()-1).name.equals(qName)) { + try { + handleElement(nameTree.remove(nameTree.size() - 1), content.toString()); + } catch (SQLException e) { + throw new IllegalStateException("Failed to execute update query for dump(" + fileName + "): " + e.toString(), e); + } catch (IOException e) { + throw new IllegalStateException("Failed to read dump (" + fileName + "): " + e.toString(), e); + } + content = new StringBuffer(); + } else { + throw new IllegalStateException("Closing unopened element"); + } + } + + public abstract void handleElement(ElementInfo info, String content) throws SQLException, IOException; + + public void characters(char[] ch, int start, int length) throws SAXException { + content.append(ch, start, length); + } + + public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { + content.append(ch, start, length); + } + + public void processingInstruction(String target, String data) throws SAXException { + throw new UnsupportedOperationException("Not supported yet."); + } + + public void skippedEntity(String name) throws SAXException { + throw new UnsupportedOperationException("Not supported yet."); + } + + } + + private static class ElementInfo { + private final String name; + private final Attributes atts; + + public ElementInfo(String name, Attributes atts) { + this.name = name; + this.atts = atts; + } + } + + private static class AbortException extends RuntimeException { + + } + + public static void main(String[] args) throws Exception { + final String fileName = args[0]; + SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); + XMLReader reader = parser.getXMLReader(); + reader.setFeature("http://xml.org/sax/features/validation", false); + reader.setContentHandler(new ReadCommandContentHandler(fileName) { + @Override + public void handleElement(ElementInfo info, String content) throws SQLException, IOException { + System.out.println(info.name); + } + }); + //parser.parse(new File(fileName), new DefaultHandler()); + parser.parse(new File(fileName), (DefaultHandler)null); + } } |
From: SVN by r. <sv...@ca...> - 2009-12-08 10:19:12
|
Author: roy Date: 2009-12-08 11:18:57 +0100 (Tue, 08 Dec 2009) New Revision: 432 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: small fixx Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2009-12-08 10:14:51 UTC (rev 431) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2009-12-08 10:18:57 UTC (rev 432) @@ -292,7 +292,16 @@ static List<String> getColumns(String columnsString) { int charOpenCount = 0; int roundOpenCount = 0; - List<String> result = new ArrayList<String>(); + List<String> result = new ArrayList<String>() { + + @Override + public boolean add(String e) { + if (e.toUpperCase().indexOf(" AS ") > 0) { + e = e.substring(0, e.toUpperCase().indexOf(" AS")).trim(); + } + return super.add(e); + } + }; StringBuffer tmp = new StringBuffer(); for (int i = 0; i < columnsString.length(); i++) { char c = columnsString.charAt(i); Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2009-12-08 10:14:51 UTC (rev 431) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2009-12-08 10:18:57 UTC (rev 432) @@ -449,6 +449,15 @@ matches = info.getPossibleMatches(); assertEquals(2, matches.size()); assertTrue(matches.toString(), matches.contains("to_char(datein, 'yyyymmdd')")); + + sqlCommand = Arrays.asList(new String[]{"SELECT c1 , to_char(datein, 'yyyymmdd') AS D FROM A,B WHERE a.b=b.b GROUP BY c1, "}); + 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.toString(), matches.contains("to_char(datein, 'yyyymmdd')")); } public void testOrderBy() { |
From: SVN by r. <sv...@ca...> - 2009-12-08 10:15:04
|
Author: roy Date: 2009-12-08 11:14:51 +0100 (Tue, 08 Dec 2009) New Revision: 431 Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java src/test/java/nl/improved/sqlclient/SQLUtilTest.java Log: some tab completion fixes Modified: src/main/java/nl/improved/sqlclient/SQLUtil.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLUtil.java 2009-12-08 10:14:25 UTC (rev 430) +++ src/main/java/nl/improved/sqlclient/SQLUtil.java 2009-12-08 10:14:51 UTC (rev 431) @@ -282,12 +282,44 @@ } 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(","))); + //String columns = startOfCommand.substring(upperStart.indexOf("SELECT")+"SELECT".length(), upperStart.indexOf("FROM")).replaceAll(" ",""); + String columns = startOfCommand.substring(upperStart.indexOf("SELECT")+"SELECT".length(), upperStart.indexOf("FROM")); + return new TabCompletionInfo(TabCompletionInfo.MatchType.COLUMN_NAMES, getColumns(columns)); } return new TabCompletionInfo(TabCompletionInfo.MatchType.OTHER, Arrays.asList(new String[0])); } + static List<String> getColumns(String columnsString) { + int charOpenCount = 0; + int roundOpenCount = 0; + List<String> result = new ArrayList<String>(); + StringBuffer tmp = new StringBuffer(); + for (int i = 0; i < columnsString.length(); i++) { + char c = columnsString.charAt(i); + if (c == '(') { + roundOpenCount++; + tmp.append(c); + } else if (c == ')') { + roundOpenCount--; + tmp.append(c); + } else if (c == '\'') { + charOpenCount++; + tmp.append(c); + } else if (c == ',' && charOpenCount % 2 == 0 && roundOpenCount == 0) { + result.add(tmp.toString().trim()); + tmp = new StringBuffer(); + } else { + tmp.append(c); + } + } + if (tmp.length() > 0) { + result.add(tmp.toString().trim()); + } + + return result; + + } + public static String getStartOfCommand(List<? extends CharSequence> commandInfo, Point commandPoint) { StringBuffer buff = new StringBuffer(); for (int i = 0; i <= commandPoint.y; i++) { Modified: src/test/java/nl/improved/sqlclient/SQLUtilTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2009-12-08 10:14:25 UTC (rev 430) +++ src/test/java/nl/improved/sqlclient/SQLUtilTest.java 2009-12-08 10:14:51 UTC (rev 431) @@ -27,6 +27,21 @@ public SQLUtilTest() { } + public void testGetColumns() { + String columns = "A, B"; + List<String> result = SQLUtil.getColumns(columns); + assertNotNull(result); + assertEquals(2, result.size()); + assertTrue(result.contains("A")); + assertTrue(result.contains("B")); + + columns = "A, to_char(datein, 'yyyy')"; + result = SQLUtil.getColumns(columns); + assertNotNull(result); + assertEquals(2, result.size()); + assertTrue(result.contains("A")); + assertTrue(result.toString(), result.contains("to_char(datein, 'yyyy')")); + } public void testGetLastKeyWord() { String sql = "SELECT *"; assertEquals("SELECT", SQLUtil.getLastKeyWord(sql)); @@ -425,6 +440,15 @@ matches = info.getPossibleMatches(); assertEquals(2, matches.size()); assertTrue(matches.contains("c2")); + + sqlCommand = Arrays.asList(new String[]{"SELECT c1 , to_char(datein, 'yyyymmdd') FROM A,B WHERE a.b=b.b GROUP BY c1, "}); + 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.toString(), matches.contains("to_char(datein, 'yyyymmdd')")); } public void testOrderBy() { |
From: SVN by r. <sv...@ca...> - 2009-12-08 10:14:39
|
Author: roy Date: 2009-12-08 11:14:25 +0100 (Tue, 08 Dec 2009) New Revision: 430 Modified: src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java Log: set autocommit on/off Modified: src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2009-12-08 09:46:14 UTC (rev 429) +++ src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2009-12-08 10:14:25 UTC (rev 430) @@ -34,6 +34,7 @@ //ResultBuilder.setVerticalSeparator(cmdString.charAt(cmdString.indexOf('=')+1)); char readAutoCommit = cmdString.charAt(cmdString.indexOf('=')+1); if (readAutoCommit == 'Y' || readAutoCommit == 'N') { + ReadCommand.setAutoCommit(readAutoCommit == 'Y'); return new SimpleCommandResult(true, "Auto commit for the read command is set to '"+ResultBuilder.getVerticalSeparator()+"'."); } else { return new SimpleCommandResult(false, "Auto commit for the read command can only be set to 'Y' or 'N' (value: " + readAutoCommit+")"); |
From: SVN by r. <sv...@ca...> - 2009-12-08 10:13:10
|
Author: roy Date: 2009-12-08 10:46:14 +0100 (Tue, 08 Dec 2009) New Revision: 429 Modified: ChangeLog Log: mention changes Modified: ChangeLog =================================================================== --- ChangeLog 2009-12-08 09:45:35 UTC (rev 428) +++ ChangeLog 2009-12-08 09:46:14 UTC (rev 429) @@ -6,6 +6,8 @@ * Added initial support for variables (in settings command.. see 'help set' for more information) * History completion * dump as <filename> support added + * dump/read progress output added + * read autocommit (after every 1000 rows) setting added 0.6.2 (2009-02-20) * Commandline input support |
From: SVN by r. <sv...@ca...> - 2009-12-08 10:12:30
|
Author: roy Date: 2009-12-08 10:45:35 +0100 (Tue, 08 Dec 2009) New Revision: 428 Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java src/main/java/nl/improved/sqlclient/SQLShell.java src/main/java/nl/improved/sqlclient/commands/DumpCommand.java src/main/java/nl/improved/sqlclient/commands/ReadCommand.java src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java src/test/java/nl/improved/sqlclient/commands/DumpCommandTest.java Log: improved dump/read command with progress output Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java =================================================================== --- src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2009-10-16 14:12:51 UTC (rev 427) +++ src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2009-12-08 09:45:35 UTC (rev 428) @@ -141,8 +141,8 @@ commands.register("HELP[\\s]*.*", new HelpCommand()); commands.register("HISTORY[\\s]*.*", new HistoryCommand()); commands.register("SPOOL[\\s]*.*", new SpoolCommand()); - commands.register("DUMP[\\s]*.*[A-Z]+.*", new DumpCommand()); - commands.register("READ[\\s]*.*[A-Z]+.*", new ReadCommand()); + commands.register("DUMP[\\s]*.*[A-Z]+.*", new DumpCommand(this)); + commands.register("READ[\\s]*.*[A-Z]+.*", new ReadCommand(this)); commands.register("QUIT[\\s]*", new QuitCommand("quit")); commands.register("EXIT[\\s]*", new QuitCommand("exit")); commands.register("SAVE[\\s]*.*", new SaveCommand()); @@ -807,9 +807,10 @@ * Output data to the screen. * @param data the data to print to the screen. */ - protected void output(CharSequence data) { + public void output(CharSequence data) { output(data, true); } + protected void output(CharSequence data, boolean spool) { synchronized(this) { List<CharSequence> screenBuffer = screen.getScreenBuffer(); Modified: src/main/java/nl/improved/sqlclient/SQLShell.java =================================================================== --- src/main/java/nl/improved/sqlclient/SQLShell.java 2009-10-16 14:12:51 UTC (rev 427) +++ src/main/java/nl/improved/sqlclient/SQLShell.java 2009-12-08 09:45:35 UTC (rev 428) @@ -169,7 +169,7 @@ } @Override - protected void output(CharSequence data) { + public void output(CharSequence data) { if (!argsMap.containsKey(OUTPUT)) { System.out.println(data); } Modified: src/main/java/nl/improved/sqlclient/commands/DumpCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-10-16 14:12:51 UTC (rev 427) +++ src/main/java/nl/improved/sqlclient/commands/DumpCommand.java 2009-12-08 09:45:35 UTC (rev 428) @@ -36,6 +36,10 @@ private String fileName; + public DumpCommand(AbstractSQLShellWindow window) { + super(window); + } + // 0 filename // 1 tablename // 2 query @@ -160,9 +164,13 @@ } hd.endElement("", "", "row"); rowCount++; + if (rowCount % 1000 == 0) { + output(Integer.toString(rowCount)+" rows written"); + } } hd.endElement("", "", "dump"); hd.endDocument(); + } catch (SAXException ex) { Logger.getLogger(AbstractSQLShellWindow.class.getName()).log(Level.SEVERE, null, ex); } catch (TransformerConfigurationException e) { Modified: src/main/java/nl/improved/sqlclient/commands/ReadCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-10-16 14:12:51 UTC (rev 427) +++ src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-12-08 09:45:35 UTC (rev 428) @@ -21,9 +21,20 @@ * Read the result of a dump file. */ public class ReadCommand extends ReadDumpCommand { + private static boolean autoCommit; + static void setAutoCommit(boolean b) { + autoCommit = b; + } + private String fileName; + public ReadCommand(AbstractSQLShellWindow window) { + super(window); + } + + + @Override public CommandResult execute(SQLCommand cmd) { String command = cmd.getCommandString(); @@ -118,6 +129,14 @@ } pstmt.executeUpdate(); rowCount++; + if (rowCount % 1000 == 0) { + if (autoCommit) { + pstmt.getConnection().commit(); + output(Integer.toString(rowCount)+" rows comitted"); + } else { + output(Integer.toString(rowCount)+" rows inserted"); + } + } } } catch (SQLException e) { throw new IllegalStateException("Failed to execute update query for dump(" + fileName + "): " + e.toString(), e); Modified: src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java 2009-10-16 14:12:51 UTC (rev 427) +++ src/main/java/nl/improved/sqlclient/commands/ReadDumpCommand.java 2009-12-08 09:45:35 UTC (rev 428) @@ -1,12 +1,24 @@ package nl.improved.sqlclient.commands; import java.sql.Types; +import nl.improved.sqlclient.AbstractSQLShellWindow; import nl.improved.sqlclient.commands.Command; abstract class ReadDumpCommand implements Command { public static final String DATE_FORMAT = "yyyyMMddHHmmss"; + private final AbstractSQLShellWindow window; + public ReadDumpCommand(AbstractSQLShellWindow window) { + this.window = window; + } + + void output(CharSequence out) { + if (window != null) { + window.output(out); + } + } + boolean isBinary(int columnType) { if (columnType == Types.BINARY || columnType == Types.BLOB || columnType == Types.CLOB || columnType == Types.LONGVARBINARY || columnType == Types.LONGVARCHAR || columnType == Types.OTHER) { return true; Modified: src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2009-10-16 14:12:51 UTC (rev 427) +++ src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2009-12-08 09:45:35 UTC (rev 428) @@ -30,6 +30,15 @@ ResultBuilder.setVerticalSeparator(cmdString.charAt(cmdString.indexOf('=')+1)); return new SimpleCommandResult(true, "Vertical separator updated to '"+ResultBuilder.getVerticalSeparator()+"'."); } + if (setter.equals("readAutoCommit")) { + //ResultBuilder.setVerticalSeparator(cmdString.charAt(cmdString.indexOf('=')+1)); + char readAutoCommit = cmdString.charAt(cmdString.indexOf('=')+1); + if (readAutoCommit == 'Y' || readAutoCommit == 'N') { + return new SimpleCommandResult(true, "Auto commit for the read command is set to '"+ResultBuilder.getVerticalSeparator()+"'."); + } else { + return new SimpleCommandResult(false, "Auto commit for the read command can only be set to 'Y' or 'N' (value: " + readAutoCommit+")"); + } + } if (setter.startsWith("@")) { // variable // see // http://www.science.uva.nl/ict/ossdocs/mysql/manual_Reference.html @@ -58,7 +67,8 @@ return "Change settings of sqlshell properties" + "Settings are:\n"+ "hSeparatorChar\n"+ - "vSeparatorChar\n" + + "vSeparatorChar (values Y/N)\n" + + "readAutoCommit\n" + "@variable=value"; } Modified: src/test/java/nl/improved/sqlclient/commands/DumpCommandTest.java =================================================================== --- src/test/java/nl/improved/sqlclient/commands/DumpCommandTest.java 2009-10-16 14:12:51 UTC (rev 427) +++ src/test/java/nl/improved/sqlclient/commands/DumpCommandTest.java 2009-12-08 09:45:35 UTC (rev 428) @@ -76,7 +76,7 @@ public void testGetTabCompletionInfo() { System.out.println("getTabCompletionInfo"); SQLCommand cmd = new SQLCommand("dump t"); - DumpCommand dcmd = new DumpCommand(); + DumpCommand dcmd = new DumpCommand(null); TabCompletionInfo completionInfo = dcmd.getTabCompletionInfo(cmd, new Point(cmd.getCommandString().length(), 0)); assertNotNull(completionInfo); assertEquals(TabCompletionInfo.MatchType.TABLE_NAMES, completionInfo.getMatchType()); |
From: SVN by r. <sv...@ca...> - 2009-10-16 14:13:04
|
Author: roy Date: 2009-10-16 16:12:51 +0200 (Fri, 16 Oct 2009) New Revision: 427 Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java src/main/java/nl/improved/sqlclient/QueryExecutor.java Log: don't display 'More...' in spool file Modified: src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java =================================================================== --- src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2009-09-30 18:14:51 UTC (rev 426) +++ src/main/java/nl/improved/sqlclient/AbstractSQLShellWindow.java 2009-10-16 14:12:51 UTC (rev 427) @@ -425,6 +425,9 @@ Iterator<CharSequence> iResult = result.getResult(); while (iResult.hasNext()) { output(iResult.next()); + if (iResult.hasNext()) { + output("More...\n", false); + } repaint(); } if (!result.executedSuccessfully()) { @@ -446,6 +449,9 @@ Iterator<CharSequence> iResult = result.getResult(); while (iResult.hasNext()) { output(iResult.next()); + if (iResult.hasNext()) { + output("More...\n", false); + } repaint(); } if (!result.executedSuccessfully()) { @@ -802,10 +808,13 @@ * @param data the data to print to the screen. */ protected void output(CharSequence data) { + output(data, true); + } + protected void output(CharSequence data, boolean spool) { synchronized(this) { List<CharSequence> screenBuffer = screen.getScreenBuffer(); screenBuffer.addAll(getLines(data)); - if (spoolWriter != null) { + if (spoolWriter != null && spool) { try { spoolWriter.write(data.toString()); spoolWriter.write("\n"); Modified: src/main/java/nl/improved/sqlclient/QueryExecutor.java =================================================================== --- src/main/java/nl/improved/sqlclient/QueryExecutor.java 2009-09-30 18:14:51 UTC (rev 426) +++ src/main/java/nl/improved/sqlclient/QueryExecutor.java 2009-10-16 14:12:51 UTC (rev 427) @@ -27,8 +27,6 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Iterator; -import java.util.logging.Level; -import java.util.logging.Logger; import nl.improved.sqlclient.util.ResultBuilder; /** @@ -193,6 +191,7 @@ private long start; private ResultSetMetaData metadata; private boolean next = true; + private boolean first = true; public QueryExecutorIterator(long start, ResultSet results, List<String> labels, ResultSetMetaData metadata) throws SQLException { this.start = start; @@ -212,7 +211,10 @@ try { next = false; ResultBuilder displayValue = new ResultBuilder(); - displayValue.setHeader(labels); + if (first) { + displayValue.setHeader(labels); + first = false; + } int max = 1000; while (results.next() && !cancelled) { for (int col = 1; col <= columnCount; col++ ) { @@ -238,8 +240,6 @@ } footer.append("Query took: "+ (System.currentTimeMillis() - start) +" millis\n\n"); displayValue.setFooter(footer); - } else { - displayValue.setFooter("More...\n\n"); } return displayValue.toString(); } catch(SQLException e) { |