ksql/internal/kbuilder/kbuilder.go

40 lines
990 B
Go

package kbuilder
import (
"fmt"
"github.com/vingarcia/ksql/sqldialect"
)
// Builder is the basic container for injecting
// query builder configurations.
//
// All the Query structs can also be called
// directly without this builder, but we kept it
// here for convenience.
type Builder struct {
dialect sqldialect.Provider
}
type queryBuilder interface {
BuildQuery(dialect sqldialect.Provider) (sqlQuery string, params []interface{}, _ error)
}
// New creates a new Builder container.
func New(driver string) (Builder, error) {
dialect, ok := sqldialect.SupportedDialects[driver]
if !ok {
return Builder{}, fmt.Errorf("unsupported driver `%s`", driver)
}
return Builder{
dialect: dialect,
}, nil
}
// Build receives a query builder struct, injects it with the configurations
// build the query according to its arguments.
func (builder *Builder) Build(query queryBuilder) (sqlQuery string, params []interface{}, _ error) {
return query.BuildQuery(builder.dialect)
}