From: SVN by r. <sv...@ca...> - 2007-09-20 12:51:45
|
Author: roy Date: 2007-09-20 14:51:38 +0200 (Thu, 20 Sep 2007) New Revision: 153 Modified: src/main/java/nl/improved/sqlclient/commands/DescCommand.java Log: show primary key Modified: src/main/java/nl/improved/sqlclient/commands/DescCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/DescCommand.java 2007-09-19 09:04:54 UTC (rev 152) +++ src/main/java/nl/improved/sqlclient/commands/DescCommand.java 2007-09-20 12:51:38 UTC (rev 153) @@ -65,6 +65,26 @@ if (!rs.next()) { return "Failed to find table '"+tableName+"'"; } + } else { + rs = conn.getMetaData().getPrimaryKeys(conn.getCatalog(), DBConnector.getInstance().getSchema(), tableName); + StringBuffer footer = new StringBuffer(); + String indent = " "; + while (rs.next()) { + if (footer.length() > 0) { + footer.append(",\n"); + } else { + footer.append("PRIMARY KEY"); + String pkName = rs.getString("PK_NAME"); + if (pkName != null && pkName.length() > 0) { + footer.append(' '); + footer.append(pkName); + } + footer.append(":\n"); + } + footer.append(indent); + footer.append(rs.getString("COLUMN_NAME")); + } + result.setFooter(footer); } } catch (SQLException ex) { throw new IllegalStateException("Failed to find columnnames for table: "+ tableName, ex); |
From: SVN by r. <sv...@ca...> - 2008-08-19 10:59:16
|
Author: roy Date: 2008-08-19 12:59:06 +0200 (Tue, 19 Aug 2008) New Revision: 286 Modified: src/main/java/nl/improved/sqlclient/commands/InfoCommand.java Log: add information when no connection is opened Modified: src/main/java/nl/improved/sqlclient/commands/InfoCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/InfoCommand.java 2008-08-19 08:01:34 UTC (rev 285) +++ src/main/java/nl/improved/sqlclient/commands/InfoCommand.java 2008-08-19 10:59:06 UTC (rev 286) @@ -35,9 +35,15 @@ */ @Override public CharSequence execute(SQLCommand cmd) { - java.sql.Connection conn = DBConnector.getInstance().getConnection(); - StringBuilder returnValue = new StringBuilder(); + java.sql.Connection conn; try { + conn = DBConnector.getInstance().getConnection(); + } catch(IllegalStateException e) { + return "This command shows information about the current connection.\nCurrently SQLShell is not connected to a database server.\n"+ + "Please use the connect command to create a connection"; + } + StringBuffer returnValue = new StringBuffer(); + try { DatabaseMetaData metaData = conn.getMetaData(); returnValue.append("URL : "+ metaData.getURL()+"\n"); returnValue.append("User : "+ metaData.getUserName()+"\n"); |
From: SVN by r. <sv...@ca...> - 2008-12-17 14:15:45
|
Author: roy Date: 2008-12-17 14:47:37 +0100 (Wed, 17 Dec 2008) New Revision: 330 Modified: src/main/java/nl/improved/sqlclient/commands/ShowCommand.java Log: show description of column when using show tables having columnname Modified: src/main/java/nl/improved/sqlclient/commands/ShowCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/ShowCommand.java 2008-11-09 21:16:45 UTC (rev 329) +++ src/main/java/nl/improved/sqlclient/commands/ShowCommand.java 2008-12-17 13:47:37 UTC (rev 330) @@ -15,6 +15,7 @@ */ package nl.improved.sqlclient.commands; +import java.sql.DatabaseMetaData; import nl.improved.sqlclient.SQLCommand; import nl.improved.sqlclient.DBConnector; import nl.improved.sqlclient.Point; @@ -51,10 +52,26 @@ ResultSet rs = conn.getMetaData().getColumns(conn.getCatalog() , DBConnector.getInstance().getSchema(), "%" , columnName); - List matches = new ArrayList<String>(); + List<String> matches = new ArrayList<String>(); while (rs.next()) { if (!matches.contains(rs.getString("TABLE_NAME"))) { - matches.add(rs.getString("TABLE_NAME")); + //matches.add(rs.getString("TABLE_NAME")); + StringBuilder match = new StringBuilder(); + match.append(rs.getString("TABLE_NAME")); + match.append('\t'); + match.append(rs.getString("COLUMN_NAME")); + match.append('\t'); + String columnSize = rs.getString("COLUMN_SIZE"); + if (columnSize != null) { + match.append(rs.getString("TYPE_NAME") +"("+columnSize+")"); + } else { + match.append(rs.getString("TYPE_NAME")); + } + int nullable = rs.getInt("NULLABLE"); + if (nullable == DatabaseMetaData.columnNoNulls) { + match.append(" NOT NULL"); + } + matches.add(match.toString()); } } returnValue.append("\nTables with column name: '"+ columnName+"'\n"); |
From: SVN by r. <sv...@ca...> - 2009-08-02 15:25:08
|
Author: roy Date: 2009-08-02 17:24:51 +0200 (Sun, 02 Aug 2009) New Revision: 412 Modified: src/main/java/nl/improved/sqlclient/commands/InfoCommand.java Log: added some system functions in desc Modified: src/main/java/nl/improved/sqlclient/commands/InfoCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/InfoCommand.java 2009-08-02 15:24:06 UTC (rev 411) +++ src/main/java/nl/improved/sqlclient/commands/InfoCommand.java 2009-08-02 15:24:51 UTC (rev 412) @@ -15,7 +15,6 @@ */ package nl.improved.sqlclient.commands; -import java.util.List; import nl.improved.sqlclient.Point; import nl.improved.sqlclient.TabCompletionInfo; import nl.improved.sqlclient.SQLCommand; @@ -60,6 +59,13 @@ while (rs.next()) { returnValue.append(" : "+ rs.getString("TABLE_SCHEM")+"\n"); } + returnValue.append("System: "); + returnValue.append(metaData.getSystemFunctions()); + returnValue.append("\nTimeDate"); + returnValue.append(metaData.getTimeDateFunctions()); + returnValue.append("\nNumeric"); + returnValue.append(metaData.getNumericFunctions()); + returnValue.append('\n'); } catch (SQLException ex) { throw new IllegalStateException("Failed to find table info: "+ ex, ex); } |
From: SVN by r. <sv...@ca...> - 2009-09-30 17:50:25
|
Author: roy Date: 2009-09-30 19:50:15 +0200 (Wed, 30 Sep 2009) New Revision: 425 Modified: src/main/java/nl/improved/sqlclient/commands/DescCommand.java Log: fixes in separators Modified: src/main/java/nl/improved/sqlclient/commands/DescCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/DescCommand.java 2009-09-26 13:39:06 UTC (rev 424) +++ src/main/java/nl/improved/sqlclient/commands/DescCommand.java 2009-09-30 17:50:15 UTC (rev 425) @@ -43,8 +43,10 @@ } String tableName = DBConnector.getInstance().translateDbVar(cmd.substring(cmd.lastIndexOf(' ')).trim()); ResultBuilder result = new ResultBuilder(); - result.setHorizontalSeparatorEnabled(false); - result.setVerticalSeparator(' '); + boolean oldEnabled = ResultBuilder.getHorizontalSeparatorEnabled(); + char oldChar = ResultBuilder.getVerticalSeparator(); + ResultBuilder.setHorizontalSeparatorEnabled(false); + ResultBuilder.setVerticalSeparator(' '); boolean foundMatch = false; try { ResultSet rs = conn.getMetaData().getColumns(conn.getCatalog(), DBConnector.getInstance().getSchema(), tableName, "%"); @@ -67,7 +69,7 @@ if (!foundMatch) { rs = conn.getMetaData() .getTables(conn.getCatalog(), DBConnector.getInstance().getSchema() - , tableName, new String[]{"TABLE"}); + , tableName, null); if (!rs.next()) { return new SimpleCommandResult(false, "Failed to find table '"+tableName+"'"); } @@ -92,10 +94,13 @@ } result.setFooter(footer); } + return new SimpleCommandResult(true, result.toString()); } catch (SQLException ex) { throw new IllegalStateException("Failed to find columnnames for table: "+ tableName, ex); + } finally { + ResultBuilder.setHorizontalSeparatorEnabled(oldEnabled); + ResultBuilder.setVerticalSeparator(oldChar); } - return new SimpleCommandResult(true, result.toString()); } /** |
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-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-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-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-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 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 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 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-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-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: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: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: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 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...> - 2010-01-24 13:59:14
|
Author: roy Date: 2010-01-24 14:59:02 +0100 (Sun, 24 Jan 2010) New Revision: 458 Modified: src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java Log: fix set command stacktrace when no arguments provided Modified: src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2010-01-24 13:48:20 UTC (rev 457) +++ src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2010-01-24 13:59:02 UTC (rev 458) @@ -20,6 +20,9 @@ } public CommandResult execute(SQLCommand cmd) { + if (cmd.getUntrimmedCommandString().length() <=4) { + return new SimpleCommandResult(false, "Failure: See help set for usage"); + } String cmdString = cmd.getUntrimmedCommandString().substring("set ".length()).trim(); String setter = cmdString.substring(0, cmdString.indexOf('=')); if (setter.equals("hSeparatorChar")) { @@ -67,9 +70,9 @@ public CharSequence getHelp() { return "Change settings of sqlshell properties" + "Settings are:\n"+ - "hSeparatorChar\n"+ - "vSeparatorChar (values Y/N)\n" + - "readAutoCommit\n" + + "hSeparatorChar (current value: '"+ResultBuilder.getHorizontalSeparator()+"')\n"+ + "vSeparatorChar (values Y/N) (current value: '"+ResultBuilder.getVerticalSeparator()+"')\n" + + "readAutoCommit (current value: '"+(ReadCommand.getAutoCommit() ? "Y" :"N")+"')\n" + "@variable=value"; } |
From: SVN by r. <sv...@ca...> - 2010-01-24 14:05:24
|
Author: roy Date: 2010-01-24 15:05:15 +0100 (Sun, 24 Jan 2010) New Revision: 459 Modified: src/main/java/nl/improved/sqlclient/commands/QueryCommand.java src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java Log: display settings values and variables Modified: src/main/java/nl/improved/sqlclient/commands/QueryCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/QueryCommand.java 2010-01-24 13:59:02 UTC (rev 458) +++ src/main/java/nl/improved/sqlclient/commands/QueryCommand.java 2010-01-24 14:05:15 UTC (rev 459) @@ -2,6 +2,7 @@ import nl.improved.sqlclient.*; import java.sql.SQLException; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -36,6 +37,11 @@ return variables.remove(var); } + public static Map<String, String> getVariables() { + return Collections.unmodifiableMap(variables); + + } + /** * Execute the sql query. * @param cmd the sqlcommand containing the sql query Modified: src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2010-01-24 13:59:02 UTC (rev 458) +++ src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2010-01-24 14:05:15 UTC (rev 459) @@ -5,6 +5,7 @@ package nl.improved.sqlclient.commands; +import java.util.Map; import nl.improved.sqlclient.SQLCommand; import nl.improved.sqlclient.Point; import nl.improved.sqlclient.TabCompletionInfo; @@ -68,12 +69,26 @@ } public CharSequence getHelp() { - return "Change settings of sqlshell properties" + + StringBuffer result = new StringBuffer(); + result.append("Change settings of sqlshell properties" + "Settings are:\n"+ "hSeparatorChar (current value: '"+ResultBuilder.getHorizontalSeparator()+"')\n"+ "vSeparatorChar (values Y/N) (current value: '"+ResultBuilder.getVerticalSeparator()+"')\n" + "readAutoCommit (current value: '"+(ReadCommand.getAutoCommit() ? "Y" :"N")+"')\n" + - "@variable=value"; + "@variable=value\n"); + + Map<String, String> variables = QueryCommand.getVariables(); + if (variables.size() == 0) { + result.append(" No variables set"); + } else { + for (String key : variables.keySet()) { + result.append(" - "+ key+" = "); + result.append(variables.get(key)); + result.append('\n'); + } + } + + return result; } public boolean abort() { |
From: SVN by r. <sv...@ca...> - 2010-01-24 14:34:43
|
Author: roy Date: 2010-01-24 15:34:35 +0100 (Sun, 24 Jan 2010) New Revision: 460 Modified: src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java Log: more info in help and on failure Modified: src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2010-01-24 14:05:15 UTC (rev 459) +++ src/main/java/nl/improved/sqlclient/commands/SettingsCommand.java 2010-01-24 14:34:35 UTC (rev 460) @@ -56,7 +56,7 @@ return new SimpleCommandResult(true, "Registred variable '"+varName+"' to value '"+varValue+"'"); } - return new SimpleCommandResult(false, "Please provide a valid argument"); + return new SimpleCommandResult(false, "Please provide a valid argument (or place @ before the variable name to set a variable), see 'help set'"); } @@ -70,11 +70,15 @@ public CharSequence getHelp() { StringBuffer result = new StringBuffer(); - result.append("Change settings of sqlshell properties" + - "Settings are:\n"+ - "hSeparatorChar (current value: '"+ResultBuilder.getHorizontalSeparator()+"')\n"+ - "vSeparatorChar (values Y/N) (current value: '"+ResultBuilder.getVerticalSeparator()+"')\n" + - "readAutoCommit (current value: '"+(ReadCommand.getAutoCommit() ? "Y" :"N")+"')\n" + + result.append("Change settings of sqlshell properties or variables/parameters that can be used in queries." + + "An example of a variable:\n"+ + " set @name='SQLShell'\n" + + " select * from programs where name=@name\n" + + "\n"+ + "Available Settings are:\n"+ + " hSeparatorChar (current value: '"+ResultBuilder.getHorizontalSeparator()+"')\n"+ + " vSeparatorChar (values Y/N) (current value: '"+ResultBuilder.getVerticalSeparator()+"')\n" + + " readAutoCommit (current value: '"+(ReadCommand.getAutoCommit() ? "Y" :"N")+"')\n" + "@variable=value\n"); Map<String, String> variables = QueryCommand.getVariables(); |
From: SVN by r. <sv...@ca...> - 2010-05-08 10:15:42
|
Author: roy Date: 2010-05-08 12:15:34 +0200 (Sat, 08 May 2010) New Revision: 474 Modified: src/main/java/nl/improved/sqlclient/commands/DescCommand.java Log: some code cleanup Modified: src/main/java/nl/improved/sqlclient/commands/DescCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/DescCommand.java 2010-05-08 09:50:38 UTC (rev 473) +++ src/main/java/nl/improved/sqlclient/commands/DescCommand.java 2010-05-08 10:15:34 UTC (rev 474) @@ -15,6 +15,7 @@ */ package nl.improved.sqlclient.commands; +import java.sql.Connection; import nl.improved.sqlclient.SQLCommand; import java.util.List; import java.util.ArrayList; @@ -31,12 +32,16 @@ * Command to describe table properties. */ public class DescCommand implements Command { + + public static ResultSet getColumnMetaData(Connection conn, String tableName) throws SQLException { + return conn.getMetaData().getColumns(conn.getCatalog(), DBConnector.getInstance().getSchema(), tableName, "%"); + } /** * Execute the describe command. */ @Override public CommandResult execute(SQLCommand command) { - java.sql.Connection conn = DBConnector.getInstance().getConnection(); + Connection conn = DBConnector.getInstance().getConnection(); String cmd = command.getCommandString(); if (cmd.endsWith(";")) { cmd = cmd.substring(0, cmd.length()-1); @@ -50,7 +55,8 @@ boolean foundMatch = false; ResultSet rs = null; try { - rs = conn.getMetaData().getColumns(conn.getCatalog(), DBConnector.getInstance().getSchema(), tableName, "%"); + //rs = conn.getMetaData().getColumns(conn.getCatalog(), DBConnector.getInstance().getSchema(), tableName, "%"); + rs = getColumnMetaData(conn, tableName); int row = 0; while (rs.next()) { foundMatch = true; |
From: SVN by r. <sv...@ca...> - 2010-05-08 10:31:59
|
Author: roy Date: 2010-05-08 12:31:50 +0200 (Sat, 08 May 2010) New Revision: 475 Modified: src/main/java/nl/improved/sqlclient/commands/ShowCommand.java Log: fix case sensitivity in 'show tables having ...' Modified: src/main/java/nl/improved/sqlclient/commands/ShowCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/ShowCommand.java 2010-05-08 10:15:34 UTC (rev 474) +++ src/main/java/nl/improved/sqlclient/commands/ShowCommand.java 2010-05-08 10:31:50 UTC (rev 475) @@ -42,8 +42,9 @@ cmd = cmd.substring(0, cmd.length()-1); } StringBuilder returnValue = new StringBuilder(); - String subCommand = cmd.substring(cmd.indexOf(' ')).trim().toUpperCase(); - if (subCommand.startsWith("TABLES")) { + String subCommand = cmd.substring(cmd.indexOf(' ')).trim(); + String subCommandUp = subCommand.toUpperCase(); + if (subCommandUp.startsWith("TABLES")) { if (subCommand.indexOf(' ') > 0) { String otherCommand = subCommand.substring(subCommand.indexOf(' ')).trim(); String columnName = DBConnector.getInstance().translateDbVar(otherCommand.substring(otherCommand.indexOf(' ')).trim()); @@ -63,7 +64,7 @@ match.append('\t'); String columnSize = rs.getString("COLUMN_SIZE"); if (columnSize != null) { - match.append(rs.getString("TYPE_NAME") +"("+columnSize+")"); + match.append(rs.getString("TYPE_NAME")).append("(").append(columnSize).append(")"); } else { match.append(rs.getString("TYPE_NAME")); } |
From: SVN by r. <sv...@ca...> - 2010-08-25 07:45:36
|
Author: roy Date: 2010-08-25 09:18:46 +0200 (Wed, 25 Aug 2010) New Revision: 480 Modified: src/main/java/nl/improved/sqlclient/commands/ShowCommand.java Log: some coding style fixes Modified: src/main/java/nl/improved/sqlclient/commands/ShowCommand.java =================================================================== --- src/main/java/nl/improved/sqlclient/commands/ShowCommand.java 2010-07-25 10:46:11 UTC (rev 479) +++ src/main/java/nl/improved/sqlclient/commands/ShowCommand.java 2010-08-25 07:18:46 UTC (rev 480) @@ -75,7 +75,7 @@ matches.add(match.toString()); } } - returnValue.append("\nTables with column name: '"+ columnName+"'\n"); + returnValue.append("\nTables with column name: '").append(columnName).append("'\n"); Iterator<String> iMatches = matches.iterator(); while (iMatches.hasNext()) { returnValue.append(" "); |