67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"github.com/ClickHouse/clickhouse-go/v2"
|
|
"time"
|
|
)
|
|
|
|
type ClickHouseRepo struct {
|
|
host string
|
|
port string
|
|
user string
|
|
password string
|
|
database string
|
|
connection *sql.DB
|
|
}
|
|
|
|
func NewClickHouseRepo(host, port, user, password, database string) *ClickHouseRepo {
|
|
return &ClickHouseRepo{
|
|
host: host,
|
|
port: port,
|
|
user: user,
|
|
password: password,
|
|
database: database,
|
|
}
|
|
}
|
|
|
|
func (c *ClickHouseRepo) Open() error {
|
|
c.connection = clickhouse.OpenDB(&clickhouse.Options{
|
|
Addr: []string{fmt.Sprintf("%v:%v", c.host, c.port)},
|
|
Auth: clickhouse.Auth{
|
|
Database: c.database,
|
|
Username: c.user,
|
|
Password: c.password,
|
|
},
|
|
Settings: clickhouse.Settings{
|
|
"max_execution_time": 60,
|
|
},
|
|
DialTimeout: 5 * time.Second,
|
|
Compression: &clickhouse.Compression{
|
|
Method: clickhouse.CompressionLZ4,
|
|
Level: 5,
|
|
},
|
|
Protocol: clickhouse.Native,
|
|
// Debug: true,
|
|
})
|
|
if c.connection == nil {
|
|
return fmt.Errorf("connect clickhouse fail")
|
|
}
|
|
c.connection.SetMaxIdleConns(5)
|
|
c.connection.SetMaxOpenConns(10)
|
|
c.connection.SetConnMaxLifetime(0)
|
|
return c.connection.Ping()
|
|
}
|
|
|
|
func (c *ClickHouseRepo) Close() {
|
|
_ = c.connection.Close()
|
|
}
|
|
|
|
func (c *ClickHouseRepo) Select(query string, args ...interface{}) (*sql.Rows, error) {
|
|
return c.connection.Query(query, args...)
|
|
}
|
|
func (c *ClickHouseRepo) Exec(query string, args ...interface{}) (sql.Result, error) {
|
|
return c.connection.Exec(query, args...)
|
|
}
|