All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nl.topicus.jdbc.statement.InsertWorker Maven / Gradle / Ivy

There is a newer version: 1.1.6
Show newest version
package nl.topicus.jdbc.statement;

import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import nl.topicus.jdbc.shaded.net.sf.jsqlparser.schema.Table;
import nl.topicus.jdbc.shaded.net.sf.jsqlparser.statement.insert.Insert;
import nl.topicus.jdbc.shaded.net.sf.jsqlparser.statement.select.Select;
import nl.topicus.jdbc.CloudSpannerConnection;
import nl.topicus.jdbc.CloudSpannerDriver;

public class InsertWorker extends AbstractTablePartWorker {
  final Insert insert;

  public InsertWorker(CloudSpannerConnection connection, Select select, Insert insert,
      ParameterStore parameters, boolean allowExtendedMode, DMLOperation operation) {
    super(connection, select, parameters, allowExtendedMode, operation);
    this.insert = insert;
  }

  @Override
  protected List getColumnNames() throws SQLException {
    String unquotedTableName = CloudSpannerDriver.unquoteIdentifier(getTable().getName());
    List columnNamesList;
    if (insert.getColumns() == null) {
      columnNamesList =
          ConverterUtils.getQuotedColumnNames(connection, null, null, unquotedTableName);
    } else {
      columnNamesList = insert.getColumns().stream()
          .map(x -> CloudSpannerDriver.quoteIdentifier(x.getColumnName()))
          .collect(Collectors.toList());
    }
    return columnNamesList;
  }

  @Override
  protected String createSQL() throws SQLException {
    List columnNamesList = getColumnNames();
    String columnNames = String.join(", ", columnNamesList);
    String[] params = new String[columnNamesList.size()];
    Arrays.fill(params, "?");
    String parameterNames = String.join(", ", params);

    String sql = "INSERT INTO " + CloudSpannerDriver.quoteIdentifier(insert.getTable().getName())
        + " (" + columnNames + ") VALUES \n";
    sql = sql + "(" + parameterNames + ")";
    if (operation == DMLOperation.ONDUPLICATEKEYUPDATE || operation == DMLOperation.UPDATE) {
      sql = sql + " ON DUPLICATE KEY UPDATE";
    }
    return sql;
  }

  @Override
  protected Table getTable() {
    return insert.getTable();
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy