45 lines
650 B
Go
45 lines
650 B
Go
package clickhouse
|
|
|
|
import (
|
|
"errors"
|
|
"database/sql"
|
|
)
|
|
|
|
type bulk struct {
|
|
db *sql.DB
|
|
query string
|
|
tx *sql.Tx
|
|
stmt *sql.Stmt
|
|
}
|
|
|
|
func newBulk(db *sql.DB, query string) *bulk {
|
|
return &bulk{
|
|
db: db,
|
|
query: query,
|
|
}
|
|
}
|
|
|
|
func (b *bulk) prepare() error {
|
|
var err error
|
|
b.tx, err = b.db.Begin()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
b.stmt, err = b.tx.Prepare(b.query)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (b *bulk) commit() error {
|
|
return b.tx.Commit()
|
|
}
|
|
|
|
func (b *bulk) exec(args ...interface{}) error {
|
|
if b.stmt == nil {
|
|
return errors.New("Bulk is not prepared.")
|
|
}
|
|
_, err := b.stmt.Exec(args...)
|
|
return err
|
|
}
|