Newer
Older
import (
"database/sql"
)
type inserter struct {
*stringer
builder *sqlBuilder
table string
values []*exql.Values
returning []exql.Fragment
columns []exql.Fragment
arguments []interface{}
extra string
}
func (qi *inserter) clone() *inserter {
clone := &inserter{}
*clone = *qi
return clone
}
func (qi *inserter) NewBatch(n int) *BatchInserter {
func (qi *inserter) columnsToFragments(dst *[]exql.Fragment, columns []string) error {
}
*dst = append(*dst, f...)
return nil
}
func (qi *inserter) Returning(columns ...string) Inserter {
qi.columnsToFragments(&qi.returning, columns)
return qi
}
func (qi *inserter) Exec() (sql.Result, error) {
José Carlos Nieto
committed
return qi.builder.sess.StatementExec(qi.statement(), qi.arguments...)
}
func (qi *inserter) Query() (*sql.Rows, error) {
José Carlos Nieto
committed
return qi.builder.sess.StatementQuery(qi.statement(), qi.arguments...)
}
func (qi *inserter) QueryRow() (*sql.Row, error) {
José Carlos Nieto
committed
return qi.builder.sess.StatementQueryRow(qi.statement(), qi.arguments...)
func (qi *inserter) Iterator() Iterator {
José Carlos Nieto
committed
rows, err := qi.builder.sess.StatementQuery(qi.statement(), qi.arguments...)
return &iterator{rows, err}
}
func (qi *inserter) Columns(columns ...string) Inserter {
qi.columnsToFragments(&qi.columns, columns)
return qi
}
func (qi *inserter) Values(values ...interface{}) Inserter {
if len(qi.columns) == 0 && len(values) == 1 {
ff, vv, _ := Map(values[0])
columns, vals, arguments, _ := qi.builder.t.ToColumnsValuesAndArguments(ff, vv)
qi.arguments = append(qi.arguments, arguments...)
qi.values = append(qi.values, vals)
for _, c := range columns.Columns {
qi.columns = append(qi.columns, c)
}
} else if len(qi.columns) == 0 || len(values) == len(qi.columns) {
qi.arguments = append(qi.arguments, values...)
l := len(values)
qi.values = append(qi.values, exql.NewValueGroup(placeholders...))
func (qi *inserter) statement() *exql.Statement {
stmt := &exql.Statement{
Type: exql.Insert,
Table: exql.TableWithName(qi.table),
}
if len(qi.values) > 0 {
stmt.Values = exql.JoinValueGroups(qi.values...)
}
if len(qi.columns) > 0 {
stmt.Columns = exql.JoinColumns(qi.columns...)
}
if len(qi.returning) > 0 {
stmt.Returning = exql.ReturningColumns(qi.returning...)
}
return stmt
}