mirror of
https://github.com/hanzo-ds/go.git
synced 2026-10-30 19:45:01 +00:00
Feature-complete v2.44.0 (lib/churl, lib/col, BFloat16, QBit, scanTypeDuration, Options.Logger *slog.Logger) — fixes the [email protected].0 downgrade RED caught. Package datastore, module github.com/hanzo-ds/go, depends only on hanzo-ds/native. Wire strings preserved VERBATIM (X-ClickHouse-* headers, sql.Register("clickhouse"), clickhouse:// DSN, ClientName="clickhouse-go") — consistent with native.
53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package ext
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/hanzo-ds/go/lib/column"
|
|
"github.com/hanzo-ds/go/lib/proto"
|
|
"strings"
|
|
)
|
|
|
|
func NewTable(name string, columns ...func(t *Table) error) (*Table, error) {
|
|
table := &Table{
|
|
name: name,
|
|
block: proto.NewBlock(),
|
|
}
|
|
for _, column := range columns {
|
|
if err := column(table); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return table, nil
|
|
}
|
|
|
|
type Table struct {
|
|
name string
|
|
block *proto.Block
|
|
}
|
|
|
|
func (tbl *Table) Name() string {
|
|
return tbl.name
|
|
}
|
|
|
|
func (tbl *Table) Structure() string {
|
|
columnStructure := make([]string, 0, len(tbl.block.Columns))
|
|
for _, c := range tbl.block.Columns {
|
|
columnStructure = append(columnStructure, fmt.Sprintf("%v %v", c.Name(), c.Type()))
|
|
}
|
|
return strings.Join(columnStructure, ", ")
|
|
}
|
|
|
|
func (tbl *Table) Block() *proto.Block {
|
|
return tbl.block
|
|
}
|
|
|
|
func (tbl *Table) Append(v ...any) error {
|
|
return tbl.block.Append(v...)
|
|
}
|
|
|
|
func Column(name string, ct column.Type) func(t *Table) error {
|
|
return func(tbl *Table) error {
|
|
return tbl.block.AddColumn(name, ct)
|
|
}
|
|
}
|