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) {
|