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; }