jet/sqlbuilder/utils.go

134 lines
2.2 KiB
Go
Raw Normal View History

2019-03-31 14:07:58 +02:00
package sqlbuilder
2019-04-14 17:55:10 +02:00
2019-04-20 19:49:29 +02:00
import (
"database/sql"
"errors"
2019-04-20 19:49:29 +02:00
"github.com/sub0zero/go-sqlbuilder/sqlbuilder/execution"
"github.com/sub0zero/go-sqlbuilder/types"
)
2019-04-14 17:55:10 +02:00
2019-05-07 19:06:21 +02:00
func serializeOrderByClauseList(orderByClauses []orderByClause, out *queryData) error {
for i, value := range orderByClauses {
2019-04-14 17:55:10 +02:00
if i > 0 {
out.WriteString(", ")
2019-04-14 17:55:10 +02:00
}
2019-05-08 12:49:36 +02:00
err := value.serializeAsOrderBy(out)
2019-04-14 17:55:10 +02:00
if err != nil {
return err
}
}
return nil
}
2019-05-07 19:06:21 +02:00
func serializeGroupByClauseList(clauses []groupByClause, out *queryData) (err error) {
for i, c := range clauses {
2019-04-14 17:55:10 +02:00
if i > 0 {
out.WriteString(", ")
}
if c == nil {
return errors.New("nil clause.")
2019-04-14 17:55:10 +02:00
}
2019-05-07 19:06:21 +02:00
if err = c.serializeForGroupBy(out); err != nil {
return
}
}
return nil
}
2019-05-07 19:06:21 +02:00
func serializeClauseList(clauses []clause, out *queryData) (err error) {
for i, c := range clauses {
if i > 0 {
out.WriteString(", ")
}
if c == nil {
return errors.New("nil clause.")
}
if err = c.serialize(out); err != nil {
return
}
}
return nil
}
func serializeExpressionList(expressions []expression, separator string, out *queryData) error {
for i, value := range expressions {
if i > 0 {
out.WriteString(separator)
}
2019-05-07 19:06:21 +02:00
err := value.serialize(out)
2019-04-14 17:55:10 +02:00
if err != nil {
return err
}
}
return nil
}
2019-04-20 19:49:29 +02:00
2019-05-07 19:06:21 +02:00
func serializeProjectionList(projections []projection, out *queryData) error {
for i, col := range projections {
if i > 0 {
2019-05-03 12:51:57 +02:00
out.WriteString(", ")
}
if col == nil {
2019-05-07 19:06:21 +02:00
return errors.New("projection expression is nil.")
}
2019-05-07 19:06:21 +02:00
if err := col.serializeForProjection(out); err != nil {
return err
}
}
return nil
}
2019-05-07 19:06:21 +02:00
func serializeColumnList(columns []column, out *queryData) error {
for i, col := range columns {
if i > 0 {
out.WriteByte(',')
}
if col == nil {
return errors.New("nil column in columns list.")
}
out.WriteString(col.Name())
}
return nil
}
2019-05-07 19:06:21 +02:00
func Query(statement statement, db types.Db, destination interface{}) error {
query, args, err := statement.Sql()
2019-04-20 19:49:29 +02:00
if err != nil {
return err
}
return execution.Query(db, query, args, destination)
2019-04-20 19:49:29 +02:00
}
2019-05-07 19:06:21 +02:00
func Execute(statement statement, db types.Db) (res sql.Result, err error) {
query, args, err := statement.Sql()
2019-04-20 19:49:29 +02:00
if err != nil {
return
}
return db.Exec(query, args...)
2019-04-20 19:49:29 +02:00
}