@Override public ResultSet executeQuery(String sql) throws SQLException { checkOpen(); CsvDriver.writeLog("CsvStatement:executeQuery() - sql= " + sql); /* * Close any previous ResultSet, as required by JDBC. */ try { if (lastResultSet != null) lastResultSet.close(); } finally { lastResultSet = null; multipleParsers = null; } SqlParser parser = new SqlParser(); try { parser.parse(sql); } catch (Exception e) { throw new SQLException(CsvResources.getString("syntaxError") + ": " + e.getMessage()); } return executeParsedQuery(parser); }
@Override public boolean execute(String sql) throws SQLException { CsvDriver.writeLog("CsvStatement:execute() - sql= " + sql); /* * Close any previous ResultSet, as required by JDBC. */ try { if (lastResultSet != null) lastResultSet.close(); } finally { lastResultSet = null; multipleParsers = null; } /* * Execute one or more SQL statements. * The method getMoreResults() will be used to step through the results. */ MultipleSqlParser parser = new MultipleSqlParser(); try { List<SqlParser> parsers = parser.parse(sql); lastResultSet = executeParsedQuery(parsers.remove(0)); multipleParsers = parsers; } catch (Exception e) { throw new SQLException(CsvResources.getString("syntaxError") + ": " + e.getMessage()); } return true; }
@Override public void setFetchDirection(int direction) throws SQLException { checkOpen(); if (direction == ResultSet.FETCH_FORWARD || direction == ResultSet.FETCH_REVERSE || direction == ResultSet.FETCH_UNKNOWN) { this.fetchDirection = direction; } else { throw new SQLException(CsvResources.getString("unsupportedDirection") + ": " + direction); } }
@Override public int getResultSetHoldability() throws SQLException { throw new UnsupportedOperationException( CsvResources.getString("methodNotSupported") + ": Statement.getResultSetHoldability()"); }
@Override public boolean execute(String sql, String[] columnNames) throws SQLException { throw new UnsupportedOperationException( CsvResources.getString("methodNotSupported") + ": Statement.execute(String,String[])"); }
@Override public boolean execute(String sql, int autoGeneratedKeys) throws SQLException { throw new UnsupportedOperationException( CsvResources.getString("methodNotSupported") + ": Statement.execute(String,int)"); }
@Override public int executeUpdate(String sql, int[] columnIndexes) throws SQLException { throw new UnsupportedOperationException( CsvResources.getString("methodNotSupported") + ": Statement.executeUpdate(String,int[])"); }
@Override public ResultSet getGeneratedKeys() throws SQLException { throw new UnsupportedOperationException( CsvResources.getString("methodNotSupported") + ": Statement.getGeneratedKeys()"); }
@Override public void setMaxFieldSize(int p0) throws SQLException { throw new SQLException(CsvResources.getString("methodNotSupported") + ": setMaxFieldSize(int)"); }
@Override public void clearBatch() throws SQLException { throw new SQLException( CsvResources.getString("methodNotSupported") + ": Statement.clearBatch()"); }
@Override public void addBatch(String sql) throws SQLException { throw new SQLException( CsvResources.getString("methodNotSupported") + ": Statement.addBatch(String)"); }
@Override public int executeUpdate(String sql) throws SQLException { throw new SQLException( CsvResources.getString("methodNotSupported") + ": Statement.executeUpdate(String)"); }
protected ResultSet executeParsedQuery( SqlParser parser, Map<String, Object> parentobjectEnvironment) throws SQLException { if (parser.getTableNames().size() > 1) throw new SQLException(CsvResources.getString("joinNotSupported")); String tableName = null; if (parser.getTableNames().size() > 0) tableName = parser.getTableNames().get(0); String tableAlias = null; if (parser.getTableAliases().size() > 0) tableAlias = parser.getTableAliases().get(0); String path = connection.getPath(); TableReader tableReader = connection.getTableReader(); if (path != null) CsvDriver.writeLog("Connection Path: " + path); else CsvDriver.writeLog("Connection TableReader: " + tableReader.getClass().getName()); CsvDriver.writeLog("Parser Table Name: " + tableName); CsvDriver.writeLog("Connection Extension: " + connection.getExtension()); DataReader reader = null; String fileName = null; if (tableName == null) { /* * Create an empty dataset with one row. */ String[] columnNames = new String[0]; String[] columnTypes = new String[0]; ArrayList<Object[]> rows = new ArrayList<Object[]>(); rows.add(new Object[0]); reader = new ListDataReader(columnNames, columnTypes, rows); } else { if (path != null && (!connection.isIndexedFiles())) { fileName = path + tableName + connection.getExtension(); CsvDriver.writeLog("CSV file name: " + fileName); File checkFile = new File(fileName); if (!checkFile.exists()) { throw new SQLException(CsvResources.getString("fileNotFound") + ": " + fileName); } if (!checkFile.canRead()) { throw new SQLException(CsvResources.getString("fileNotReadable") + ": " + fileName); } } try { if (connection.getExtension().equalsIgnoreCase(".dbf")) { reader = new DbfReader(fileName, tableName, tableAlias, connection.getCharset()); } else { LineNumberReader input; if (tableReader == null) { InputStream in; CryptoFilter filter = connection.getDecryptingCodec(); if (connection.isIndexedFiles()) { String fileNamePattern = tableName + connection.getFileNamePattern() + connection.getExtension(); String[] nameParts = connection.getNameParts(); String dirName = connection.getPath(); in = new FileSetInputStream( dirName, fileNamePattern, nameParts, connection.getSeparator(), connection.isFileTailPrepend(), connection.isSuppressHeaders(), filter, connection.getSkipLeadingDataLines() + connection.getTransposedLines()); } else if (filter == null) { in = new FileInputStream(fileName); } else { filter.reset(); in = new EncryptedFileInputStream(fileName, filter); } if (connection.getCharset() != null) { input = new LineNumberReader(new InputStreamReader(in, connection.getCharset())); } else { input = new LineNumberReader(new InputStreamReader(in)); } } else { /* * Reader for table comes from user-provided class. */ input = new LineNumberReader(tableReader.getReader(this, tableName)); } String headerline = connection.getHeaderline(tableName); CsvRawReader rawReader = new CsvRawReader( input, tableName, tableAlias, connection.getSeparator(), connection.isSuppressHeaders(), connection.isHeaderFixedWidth(), connection.getQuotechar(), connection.getCommentChar(), headerline, connection.getTrimHeaders(), connection.getTrimValues(), connection.getSkipLeadingLines(), connection.isIgnoreUnparseableLines(), connection.getMissingValue(), connection.isDefectiveHeaders(), connection.getSkipLeadingDataLines(), connection.getQuoteStyle(), connection.getFixedWidthColumns()); reader = new CsvReader( rawReader, connection.getTransposedLines(), connection.getTransposedFieldsToSkip(), headerline); } } catch (IOException e) { throw new SQLException(CsvResources.getString("fileReadError") + ": " + e); } catch (SQLException e) { throw e; } catch (Exception e) { e.printStackTrace(); throw new SQLException(CsvResources.getString("dataReaderError") + ": " + e); } } CsvResultSet resultSet = null; try { resultSet = new CsvResultSet( this, reader, tableName, parser.getColumns(), parser.isDistinct(), this.resultSetType, parser.getWhereClause(), parser.getGroupByColumns(), parser.getHavingClause(), parser.getOrderByColumns(), parser.getLimit(), parser.getOffset(), connection.getColumnTypes(tableName), connection.getSkipLeadingLines(), parentobjectEnvironment); lastResultSet = resultSet; } catch (ClassNotFoundException e) { CsvDriver.writeLog("" + e); } return resultSet; }
@Override public int getMaxFieldSize() throws SQLException { throw new SQLException(CsvResources.getString("methodNotSupported") + ": getMaxFieldSize()"); }
public void closeOnCompletion() throws SQLException { throw new UnsupportedOperationException( CsvResources.getString("methodNotSupported") + ": Statement.closeOnCompletion()"); }
@Override public int[] executeBatch() throws SQLException { throw new SQLException( CsvResources.getString("methodNotSupported") + ": Statement.executeBatch()"); }
protected void checkOpen() throws SQLException { if (closed) throw new SQLException(CsvResources.getString("statementClosed")); }
@Override public boolean getMoreResults(int current) throws SQLException { throw new UnsupportedOperationException( CsvResources.getString("methodNotSupported") + ": Statement.getMoreResults(int)"); }
@Override public void setEscapeProcessing(boolean enable) throws SQLException { throw new SQLException( CsvResources.getString("methodNotSupported") + ": setEscapeProcessing(boolean)"); }
@Override public void setCursorName(String name) throws SQLException { throw new SQLException( CsvResources.getString("methodNotSupported") + ": setCursorName(String)"); }