Example #1
0
 /**
  * Creates new Statement for use in executing SQL statements.
  *
  * @param connection database connection to create statement for.
  * @param resultSetType either ResultSet.TYPE_SCROLL_INSENSITIVE or
  *     ResultSet.TYPE_SCROLL_SENSITIVE.
  */
 protected CsvStatement(CsvConnection connection, int resultSetType) {
   CsvDriver.writeLog("CsvStatement() - connection=" + connection);
   CsvDriver.writeLog(
       "CsvStatement() - Asked for "
           + (resultSetType == ResultSet.TYPE_SCROLL_SENSITIVE ? "Scrollable" : "Not Scrollable"));
   this.connection = connection;
   this.resultSetType = resultSetType;
 }
Example #2
0
  @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;
  }
Example #3
0
  @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);
  }
Example #4
0
  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;
  }