Пример #1
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);
  }
Пример #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;
  }
Пример #3
0
  @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);
    }
  }
Пример #4
0
 @Override
 public int getResultSetHoldability() throws SQLException {
   throw new UnsupportedOperationException(
       CsvResources.getString("methodNotSupported") + ": Statement.getResultSetHoldability()");
 }
Пример #5
0
 @Override
 public boolean execute(String sql, String[] columnNames) throws SQLException {
   throw new UnsupportedOperationException(
       CsvResources.getString("methodNotSupported") + ": Statement.execute(String,String[])");
 }
Пример #6
0
 @Override
 public boolean execute(String sql, int autoGeneratedKeys) throws SQLException {
   throw new UnsupportedOperationException(
       CsvResources.getString("methodNotSupported") + ": Statement.execute(String,int)");
 }
Пример #7
0
 @Override
 public int executeUpdate(String sql, int[] columnIndexes) throws SQLException {
   throw new UnsupportedOperationException(
       CsvResources.getString("methodNotSupported") + ": Statement.executeUpdate(String,int[])");
 }
Пример #8
0
 @Override
 public ResultSet getGeneratedKeys() throws SQLException {
   throw new UnsupportedOperationException(
       CsvResources.getString("methodNotSupported") + ": Statement.getGeneratedKeys()");
 }
Пример #9
0
 @Override
 public void setMaxFieldSize(int p0) throws SQLException {
   throw new SQLException(CsvResources.getString("methodNotSupported") + ": setMaxFieldSize(int)");
 }
Пример #10
0
 @Override
 public void clearBatch() throws SQLException {
   throw new SQLException(
       CsvResources.getString("methodNotSupported") + ": Statement.clearBatch()");
 }
Пример #11
0
 @Override
 public void addBatch(String sql) throws SQLException {
   throw new SQLException(
       CsvResources.getString("methodNotSupported") + ": Statement.addBatch(String)");
 }
Пример #12
0
 @Override
 public int executeUpdate(String sql) throws SQLException {
   throw new SQLException(
       CsvResources.getString("methodNotSupported") + ": Statement.executeUpdate(String)");
 }
Пример #13
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;
  }
Пример #14
0
 @Override
 public int getMaxFieldSize() throws SQLException {
   throw new SQLException(CsvResources.getString("methodNotSupported") + ": getMaxFieldSize()");
 }
Пример #15
0
 public void closeOnCompletion() throws SQLException {
   throw new UnsupportedOperationException(
       CsvResources.getString("methodNotSupported") + ": Statement.closeOnCompletion()");
 }
Пример #16
0
 @Override
 public int[] executeBatch() throws SQLException {
   throw new SQLException(
       CsvResources.getString("methodNotSupported") + ": Statement.executeBatch()");
 }
Пример #17
0
 protected void checkOpen() throws SQLException {
   if (closed) throw new SQLException(CsvResources.getString("statementClosed"));
 }
Пример #18
0
 @Override
 public boolean getMoreResults(int current) throws SQLException {
   throw new UnsupportedOperationException(
       CsvResources.getString("methodNotSupported") + ": Statement.getMoreResults(int)");
 }
Пример #19
0
 @Override
 public void setEscapeProcessing(boolean enable) throws SQLException {
   throw new SQLException(
       CsvResources.getString("methodNotSupported") + ": setEscapeProcessing(boolean)");
 }
Пример #20
0
 @Override
 public void setCursorName(String name) throws SQLException {
   throw new SQLException(
       CsvResources.getString("methodNotSupported") + ": setCursorName(String)");
 }