55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package clickhouse
|
|
|
|
import (
|
|
"database/sql"
|
|
"database/sql/driver"
|
|
"time"
|
|
|
|
"github.com/kshvakov/clickhouse/lib/data"
|
|
)
|
|
|
|
// Interface for Clickhouse driver
|
|
type Clickhouse interface {
|
|
Block() (*data.Block, error)
|
|
Prepare(query string) (driver.Stmt, error)
|
|
Begin() (driver.Tx, error)
|
|
Commit() error
|
|
Rollback() error
|
|
Close() error
|
|
WriteBlock(block *data.Block) error
|
|
}
|
|
|
|
// Interface for Block allowing writes to individual columns
|
|
type ColumnWriter interface {
|
|
WriteDate(c int, v time.Time) error
|
|
WriteDateTime(c int, v time.Time) error
|
|
WriteUInt8(c int, v uint8) error
|
|
WriteUInt16(c int, v uint16) error
|
|
WriteUInt32(c int, v uint32) error
|
|
WriteUInt64(c int, v uint64) error
|
|
WriteFloat32(c int, v float32) error
|
|
WriteFloat64(c int, v float64) error
|
|
WriteBytes(c int, v []byte) error
|
|
WriteArray(c int, v interface{}) error
|
|
WriteString(c int, v string) error
|
|
WriteFixedString(c int, v []byte) error
|
|
}
|
|
|
|
func OpenDirect(dsn string) (Clickhouse, error) {
|
|
return open(dsn)
|
|
}
|
|
|
|
func (ch *clickhouse) Block() (*data.Block, error) {
|
|
if ch.block == nil {
|
|
return nil, sql.ErrTxDone
|
|
}
|
|
return ch.block, nil
|
|
}
|
|
|
|
func (ch *clickhouse) WriteBlock(block *data.Block) error {
|
|
if block == nil {
|
|
return sql.ErrTxDone
|
|
}
|
|
return ch.writeBlock(block)
|
|
}
|