Open Source Repository

Home /hibernate/hibernate-3.2.6.ga | Repository Home


org/hibernate/sql/Insert.java
//$Id: Insert.java 9681 2006-03-24 18:10:04Z [email protected] $
package org.hibernate.sql;

import java.util.Iterator;
import java.util.Map;

import org.apache.commons.collections.SequencedHashMap;
import org.hibernate.dialect.Dialect;
import org.hibernate.type.LiteralType;

/**
 * An SQL <tt>INSERT</tt> statement
 *
 @author Gavin King
 */
public class Insert {
  private Dialect dialect;
  private String tableName;
  private String comment;
  private Map columns = new SequencedHashMap();

  public Insert(Dialect dialect) {
    this.dialect = dialect;
  }

  protected Dialect getDialect() {
    return dialect;
  }

  public Insert setComment(String comment) {
    this.comment = comment;
    return this;
  }

  public Insert addColumn(String columnName) {
    return addColumn(columnName, "?");
  }

  public Insert addColumns(String[] columnNames) {
    for int i=0; i<columnNames.length; i++ ) {
      addColumncolumnNames[i] );
    }
    return this;
  }

  public Insert addColumns(String[] columnNames, boolean[] insertable) {
    for int i=0; i<columnNames.length; i++ ) {
      if insertable[i] ) {
        addColumncolumnNames[i] );
      }
    }
    return this;
  }

  public Insert addColumn(String columnName, String value) {
    columns.put(columnName, value);
    return this;
  }

  public Insert addColumn(String columnName, Object value, LiteralType typethrows Exception {
    return addColumncolumnName, type.objectToSQLString(value, dialect) );
  }

  public Insert addIdentityColumn(String columnName) {
    String value = dialect.getIdentityInsertString();
    if value != null ) {
      addColumncolumnName, value );
    }
    return this;
  }

  public Insert setTableName(String tableName) {
    this.tableName = tableName;
    return this;
  }

  public String toStatementString() {
    StringBuffer buf = new StringBuffercolumns.size()*15 + tableName.length() 10 );
    if comment != null ) {
      buf.append"/* " ).appendcomment ).append" */ " );
    }
    buf.append("insert into ")
      .append(tableName);
    if columns.size()==) {
      buf.append(' ').appenddialect.getNoColumnsInsertString() );
    }
    else {
      buf.append(" (");
      Iterator iter = columns.keySet().iterator();
      while iter.hasNext() ) {
        buf.appenditer.next() );
        if iter.hasNext() ) {
          buf.append", " );
        }
      }
      buf.append(") values (");
      iter = columns.values().iterator();
      while iter.hasNext() ) {
        buf.appenditer.next() );
        if iter.hasNext() ) {
          buf.append", " );
        }
      }
      buf.append(')');
    }
    return buf.toString();
  }
}