write_column.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package clickhouse
  2. import (
  3. "database/sql"
  4. "database/sql/driver"
  5. "time"
  6. "github.com/ClickHouse/clickhouse-go/lib/data"
  7. )
  8. // Interface for Clickhouse driver
  9. type Clickhouse interface {
  10. Block() (*data.Block, error)
  11. Prepare(query string) (driver.Stmt, error)
  12. Begin() (driver.Tx, error)
  13. Commit() error
  14. Rollback() error
  15. Close() error
  16. WriteBlock(block *data.Block) error
  17. }
  18. // Interface for Block allowing writes to individual columns
  19. type ColumnWriter interface {
  20. WriteDate(c int, v time.Time) error
  21. WriteDateNullable(c int, v *time.Time) error
  22. WriteDateTime(c int, v time.Time) error
  23. WriteDateTimeNullable(c int, v *time.Time) error
  24. WriteUInt8(c int, v uint8) error
  25. WriteUInt8Nullable(c int, v *uint8) error
  26. WriteUInt16(c int, v uint16) error
  27. WriteUInt16Nullable(c int, v *uint16) error
  28. WriteUInt32(c int, v uint32) error
  29. WriteUInt32Nullable(c int, v *uint32) error
  30. WriteUInt64(c int, v uint64) error
  31. WriteUInt64Nullable(c int, v *uint64) error
  32. WriteFloat32(c int, v float32) error
  33. WriteFloat32Nullable(c int, v *float32) error
  34. WriteFloat64(c int, v float64) error
  35. WriteFloat64Nullable(c int, v *float64) error
  36. WriteBytes(c int, v []byte) error
  37. WriteArray(c int, v interface{}) error
  38. WriteBytesNullable(c int, v *[]byte) error
  39. WriteArrayNullable(c int, v *interface{}) error
  40. WriteString(c int, v string) error
  41. WriteStringNullable(c int, v *string) error
  42. WriteFixedString(c int, v []byte) error
  43. WriteFixedStringNullable(c int, v *[]byte) error
  44. }
  45. func OpenDirect(dsn string) (Clickhouse, error) {
  46. return open(dsn)
  47. }
  48. func (ch *clickhouse) Block() (*data.Block, error) {
  49. if ch.block == nil {
  50. return nil, sql.ErrTxDone
  51. }
  52. return ch.block, nil
  53. }
  54. func (ch *clickhouse) WriteBlock(block *data.Block) error {
  55. if block == nil {
  56. return sql.ErrTxDone
  57. }
  58. return ch.writeBlock(block, "")
  59. }