mirror of https://github.com/VinGarcia/ksql.git
40 lines
990 B
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)
|
|
}
|