From ddf816c998569b389b79b0f2a4fd9771ed184cc9 Mon Sep 17 00:00:00 2001 From: zer0sub Date: Sat, 30 Mar 2019 10:05:30 +0100 Subject: [PATCH] Add func expression support. --- sqlbuilder/func.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 sqlbuilder/func.go diff --git a/sqlbuilder/func.go b/sqlbuilder/func.go new file mode 100644 index 0000000..adc095e --- /dev/null +++ b/sqlbuilder/func.go @@ -0,0 +1,57 @@ +package sqlbuilder + +import "bytes" + +type FuncExpression struct { + isExpression + isProjection + + name string + expression Expression + + alias string +} + +func (f *FuncExpression) As(alias string) Projection { + newFuncExpression := *f + + newFuncExpression.alias = alias + + return &newFuncExpression +} + +func (f *FuncExpression) SerializeSql(out *bytes.Buffer) error { + out.WriteString(f.name) + out.WriteString("(") + err := f.expression.SerializeSql(out) + if err != nil { + return err + } + out.WriteString(")") + + if f.alias != "" { + out.WriteString(` AS "`) + out.WriteString(f.alias) + out.WriteString(`"`) + } + + return nil +} + +func (f *FuncExpression) SerializeSqlForColumnList(out *bytes.Buffer) error { + return f.SerializeSql(out) +} + +func MAX(expression Expression) *FuncExpression { + return &FuncExpression{ + name: "MAX", + expression: expression, + } +} + +func SUM(expression Expression) *FuncExpression { + return &FuncExpression{ + name: "SUM", + expression: expression, + } +}