Refactoring to support parameterized queries.
This commit is contained in:
parent
bc6a2bbcac
commit
fef8f0ef83
33 changed files with 1112 additions and 1206 deletions
|
|
@ -1,19 +1,20 @@
|
|||
package sqlbuilder
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"github.com/sub0zero/go-sqlbuilder/sqlbuilder/execution"
|
||||
"github.com/sub0zero/go-sqlbuilder/types"
|
||||
)
|
||||
|
||||
func serializeExpressionList(expressions []Expression, buf *bytes.Buffer) error {
|
||||
for i, value := range expressions {
|
||||
func serializeOrderByClauseList(orderByClauses []OrderByClause, out *queryData) error {
|
||||
|
||||
for i, value := range orderByClauses {
|
||||
if i > 0 {
|
||||
buf.WriteString(", ")
|
||||
out.WriteString(", ")
|
||||
}
|
||||
|
||||
err := value.SerializeSql(buf)
|
||||
err := value.Serialize(out)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -23,13 +24,33 @@ func serializeExpressionList(expressions []Expression, buf *bytes.Buffer) error
|
|||
return nil
|
||||
}
|
||||
|
||||
func serializeProjectionList(projections []Projection, buf *bytes.Buffer) error {
|
||||
for i, value := range projections {
|
||||
func serializeClauseList(clauses []Clause, out *queryData) (err error) {
|
||||
|
||||
for i, c := range clauses {
|
||||
if i > 0 {
|
||||
buf.WriteString(", ")
|
||||
out.WriteString(", ")
|
||||
}
|
||||
|
||||
err := value.SerializeForProjection(buf)
|
||||
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)
|
||||
}
|
||||
|
||||
err := value.Serialize(out)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -39,24 +60,55 @@ func serializeProjectionList(projections []Projection, buf *bytes.Buffer) error
|
|||
return nil
|
||||
}
|
||||
|
||||
func serializeProjectionList(projections []Projection, out *queryData) error {
|
||||
for i, col := range projections {
|
||||
if i > 0 {
|
||||
out.WriteByte(',')
|
||||
}
|
||||
if col == nil {
|
||||
return errors.New("Projection expression is nil.")
|
||||
}
|
||||
|
||||
if err := col.SerializeForProjection(out); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
func Query(statement Statement, db types.Db, destination interface{}) error {
|
||||
query, err := statement.String()
|
||||
query, args, err := statement.Sql()
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return execution.Execute(db, query, destination)
|
||||
return execution.Query(db, query, args, destination)
|
||||
}
|
||||
|
||||
func Execute(statement Statement, db types.Db) (res sql.Result, err error) {
|
||||
query, err := statement.String()
|
||||
query, args, err := statement.Sql()
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
res, err = db.Exec(query)
|
||||
|
||||
return
|
||||
return db.Exec(query, args...)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue