Skip to content

Commit 134c901

Browse files
authored
Merge pull request #177 from rodionovv/flavor_getter
Flavor getters
2 parents be6fb8b + 4b59c4a commit 134c901

19 files changed

+208
-0
lines changed

builder.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
type Builder interface {
1414
Build() (sql string, args []interface{})
1515
BuildWithFlavor(flavor Flavor, initialArg ...interface{}) (sql string, args []interface{})
16+
Flavor() Flavor
1617
}
1718

1819
type compiledBuilder struct {
@@ -30,6 +31,12 @@ func (cb *compiledBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interfac
3031
return cb.args.CompileWithFlavor(cb.format, flavor, initialArg...)
3132
}
3233

34+
// Flavor returns flavor of builder
35+
// Always returns DefaultFlavor
36+
func (cb *compiledBuilder) Flavor() Flavor {
37+
return cb.args.Flavor
38+
}
39+
3340
type flavoredBuilder struct {
3441
builder Builder
3542
flavor Flavor
@@ -43,6 +50,11 @@ func (fb *flavoredBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interfac
4350
return fb.builder.BuildWithFlavor(flavor, initialArg...)
4451
}
4552

53+
// Flavor returns flavor of builder
54+
func (fb *flavoredBuilder) Flavor() Flavor {
55+
return fb.flavor
56+
}
57+
4658
// WithFlavor creates a new Builder based on builder with a default flavor.
4759
func WithFlavor(builder Builder, flavor Flavor) Builder {
4860
return &flavoredBuilder{

builder_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,22 @@ func TestBuildWithCQL(t *testing.T) {
132132
a.Equal(sql, "BEGIN BATCH USING TIMESTAMP ? INSERT INTO t1 (col1, col2) VALUES (?, ?); INSERT INTO t2 (col3, col4) VALUES (?, ?); APPLY BATCH;")
133133
a.Equal(args, []interface{}{1481124356754405, 1, 2, 3, 4})
134134
}
135+
136+
func TestBuilderGetFlavor(t *testing.T) {
137+
a := assert.New(t)
138+
139+
defaultBuilder := Build("SELECT * FROM foo WHERE id = $0", 1234)
140+
a.Equal(DefaultFlavor, defaultBuilder.Flavor())
141+
142+
buildfBuilder := Buildf("SELECT * FROM foo WHERE id = %v", 1234)
143+
a.Equal(DefaultFlavor, buildfBuilder.Flavor())
144+
145+
namedBuilder := Buildf("SELECT * FROM ${table} WHERE id = 1234", map[string]interface{}{
146+
"table": "foo",
147+
})
148+
a.Equal(DefaultFlavor, namedBuilder.Flavor())
149+
150+
flavoredBuilder := WithFlavor(Build("SELECT * FROM foo WHERE id = $0", 1234), PostgreSQL)
151+
a.Equal(PostgreSQL, flavoredBuilder.Flavor())
152+
153+
}

createtable.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ func (ctb *CreateTableBuilder) SetFlavor(flavor Flavor) (old Flavor) {
158158
return
159159
}
160160

161+
// Flavor returns flavor of builder
162+
func (ctb *CreateTableBuilder) Flavor() Flavor {
163+
return ctb.args.Flavor
164+
}
165+
161166
// Var returns a placeholder for value.
162167
func (ctb *CreateTableBuilder) Var(arg interface{}) string {
163168
return ctb.args.Add(arg)

createtable_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ package sqlbuilder
55

66
import (
77
"fmt"
8+
"testing"
9+
10+
"github.com/huandu/go-assert"
811
)
912

1013
func ExampleCreateTable() {
@@ -86,3 +89,16 @@ func ExampleCreateTableBuilder_NumDefine() {
8689
// Output:
8790
// 5
8891
}
92+
93+
func TestCreateTableGetFlavor(t *testing.T) {
94+
a := assert.New(t)
95+
ctb := newCreateTableBuilder()
96+
97+
ctb.SetFlavor(PostgreSQL)
98+
flavor := ctb.Flavor()
99+
a.Equal(PostgreSQL, flavor)
100+
101+
ctbClick := ClickHouse.NewCreateTableBuilder()
102+
flavor = ctbClick.Flavor()
103+
a.Equal(ClickHouse, flavor)
104+
}

cte.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ func (cteb *CTEBuilder) SetFlavor(flavor Flavor) (old Flavor) {
112112
return
113113
}
114114

115+
// Flavor returns flavor of builder
116+
func (cteb *CTEBuilder) Flavor() Flavor {
117+
return cteb.args.Flavor
118+
}
119+
115120
// SQL adds an arbitrary sql to current position.
116121
func (cteb *CTEBuilder) SQL(sql string) *CTEBuilder {
117122
cteb.injection.SQL(cteb.marker, sql)

cte_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,29 @@ func TestRecursiveCTEBuilder(t *testing.T) {
130130
sql = ctetb.String()
131131
a.Equal(sql, "/* table init */ t (a, b) /* after table */ AS (SELECT a, b FROM t) /* after table as */")
132132
}
133+
134+
func TestCTEGetFlavor(t *testing.T) {
135+
a := assert.New(t)
136+
cteb := newCTEBuilder()
137+
138+
cteb.SetFlavor(PostgreSQL)
139+
flavor := cteb.Flavor()
140+
a.Equal(PostgreSQL, flavor)
141+
142+
ctebClick := ClickHouse.NewCTEBuilder()
143+
flavor = ctebClick.Flavor()
144+
a.Equal(ClickHouse, flavor)
145+
}
146+
147+
func TestCTEQueryBuilderGetFlavor(t *testing.T) {
148+
a := assert.New(t)
149+
ctetb := newCTEQueryBuilder()
150+
151+
ctetb.SetFlavor(PostgreSQL)
152+
flavor := ctetb.Flavor()
153+
a.Equal(PostgreSQL, flavor)
154+
155+
ctetbClick := ClickHouse.NewCTEQueryBuilder()
156+
flavor = ctetbClick.Flavor()
157+
a.Equal(ClickHouse, flavor)
158+
}

ctequery.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@ func (ctetb *CTEQueryBuilder) SetFlavor(flavor Flavor) (old Flavor) {
124124
return
125125
}
126126

127+
// Flavor returns flavor of builder
128+
func (ctetb *CTEQueryBuilder) Flavor() Flavor {
129+
return ctetb.args.Flavor
130+
}
131+
127132
// SQL adds an arbitrary sql to current position.
128133
func (ctetb *CTEQueryBuilder) SQL(sql string) *CTEQueryBuilder {
129134
ctetb.injection.SQL(ctetb.marker, sql)

delete.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,11 @@ func (db *DeleteBuilder) SetFlavor(flavor Flavor) (old Flavor) {
200200
return
201201
}
202202

203+
// Flavor returns flavor of builder
204+
func (db *DeleteBuilder) Flavor() Flavor {
205+
return db.args.Flavor
206+
}
207+
203208
// SQL adds an arbitrary sql to current position.
204209
func (db *DeleteBuilder) SQL(sql string) *DeleteBuilder {
205210
db.injection.SQL(db.marker, sql)

delete_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ package sqlbuilder
55

66
import (
77
"fmt"
8+
"testing"
9+
10+
"github.com/huandu/go-assert"
811
)
912

1013
func ExampleDeleteFrom() {
@@ -80,3 +83,16 @@ func ExampleDeleteBuilder_With() {
8083
// Output:
8184
// WITH users AS (SELECT id, name FROM users WHERE name IS NULL) DELETE FROM orders WHERE users.id = orders.user_id
8285
}
86+
87+
func TestDeleteBuilderGetFlavor(t *testing.T) {
88+
a := assert.New(t)
89+
db := newDeleteBuilder()
90+
91+
db.SetFlavor(PostgreSQL)
92+
flavor := db.Flavor()
93+
a.Equal(PostgreSQL, flavor)
94+
95+
dbClick := ClickHouse.NewDeleteBuilder()
96+
flavor = dbClick.Flavor()
97+
a.Equal(ClickHouse, flavor)
98+
}

insert.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,11 @@ func (ib *InsertBuilder) SetFlavor(flavor Flavor) (old Flavor) {
213213
return
214214
}
215215

216+
// Flavor returns flavor of builder
217+
func (ib *InsertBuilder) Flavor() Flavor {
218+
return ib.args.Flavor
219+
}
220+
216221
// Var returns a placeholder for value.
217222
func (ib *InsertBuilder) Var(arg interface{}) string {
218223
return ib.args.Add(arg)

insert_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ package sqlbuilder
55

66
import (
77
"fmt"
8+
"testing"
9+
10+
"github.com/huandu/go-assert"
811
)
912

1013
func ExampleInsertInto() {
@@ -241,3 +244,16 @@ func ExampleInsertBuilder_NumValue() {
241244
// Output:
242245
// 2
243246
}
247+
248+
func TestInsertBuilderGetFlavor(t *testing.T) {
249+
a := assert.New(t)
250+
ib := newInsertBuilder()
251+
252+
ib.SetFlavor(PostgreSQL)
253+
flavor := ib.Flavor()
254+
a.Equal(PostgreSQL, flavor)
255+
256+
ibClick := ClickHouse.NewInsertBuilder()
257+
flavor = ibClick.Flavor()
258+
a.Equal(ClickHouse, flavor)
259+
}

select.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,11 @@ func (sb *SelectBuilder) SetFlavor(flavor Flavor) (old Flavor) {
537537
return
538538
}
539539

540+
// Flavor returns flavor of builder
541+
func (sb *SelectBuilder) Flavor() Flavor {
542+
return sb.args.Flavor
543+
}
544+
540545
// SQL adds an arbitrary sql to current position.
541546
func (sb *SelectBuilder) SQL(sql string) *SelectBuilder {
542547
sb.injection.SQL(sb.marker, sql)

select_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,3 +375,16 @@ func TestSelectBuilderSelectMore(t *testing.T) {
375375
).SQL("/* second */").SelectMore("name").SQL("/* third */")
376376
a.Equal(sb.String(), "SELECT id, name /* first */ /* third */ WHERE name IS NOT NULL /* second */")
377377
}
378+
379+
func TestSelectBuilderGetFlavor(t *testing.T) {
380+
a := assert.New(t)
381+
sb := newSelectBuilder()
382+
383+
sb.SetFlavor(PostgreSQL)
384+
flavor := sb.Flavor()
385+
a.Equal(PostgreSQL, flavor)
386+
387+
sbClick := ClickHouse.NewSelectBuilder()
388+
flavor = sbClick.Flavor()
389+
a.Equal(ClickHouse, flavor)
390+
}

union.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,11 @@ func (ub *UnionBuilder) SetFlavor(flavor Flavor) (old Flavor) {
204204
return
205205
}
206206

207+
// Flavor returns flavor of builder
208+
func (ub *UnionBuilder) Flavor() Flavor {
209+
return ub.args.Flavor
210+
}
211+
207212
// Var returns a placeholder for value.
208213
func (ub *UnionBuilder) Var(arg interface{}) string {
209214
return ub.args.Add(arg)

union_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,16 @@ func TestUnionForSQLite(t *testing.T) {
9191

9292
a.Equal(sql, "SELECT id, name FROM users WHERE created_at > DATE('now', '-15 days') UNION ALL SELECT id, nick_name FROM user_extras WHERE status IN (1, 2, 3) ORDER BY id")
9393
}
94+
95+
func TestUnionBuilderGetFlavor(t *testing.T) {
96+
a := assert.New(t)
97+
ub := newUnionBuilder()
98+
99+
ub.SetFlavor(PostgreSQL)
100+
flavor := ub.Flavor()
101+
a.Equal(PostgreSQL, flavor)
102+
103+
ubClick := ClickHouse.NewUnionBuilder()
104+
flavor = ubClick.Flavor()
105+
a.Equal(ClickHouse, flavor)
106+
}

update.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,11 @@ func (ub *UpdateBuilder) SetFlavor(flavor Flavor) (old Flavor) {
269269
return
270270
}
271271

272+
// Flavor returns flavor of builder
273+
func (ub *UpdateBuilder) Flavor() Flavor {
274+
return ub.args.Flavor
275+
}
276+
272277
// SQL adds an arbitrary sql to current position.
273278
func (ub *UpdateBuilder) SQL(sql string) *UpdateBuilder {
274279
ub.injection.SQL(ub.marker, sql)

update_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,3 +149,16 @@ func ExampleUpdateBuilder_With() {
149149
// Output:
150150
// WITH users AS (SELECT id, name FROM users WHERE prime IS NOT NULL) UPDATE orders SET orders.transport_fee = 0 WHERE users.id = orders.user_id
151151
}
152+
153+
func TestUpdateBuilderGetFlavor(t *testing.T) {
154+
a := assert.New(t)
155+
ub := newUpdateBuilder()
156+
157+
ub.SetFlavor(PostgreSQL)
158+
flavor := ub.Flavor()
159+
a.Equal(PostgreSQL, flavor)
160+
161+
ubClick := ClickHouse.NewUpdateBuilder()
162+
flavor = ubClick.Flavor()
163+
a.Equal(ClickHouse, flavor)
164+
}

whereclause.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ func (wc *WhereClause) SetFlavor(flavor Flavor) (old Flavor) {
8686
return
8787
}
8888

89+
// Flavor returns flavor of clause
90+
func (wc *WhereClause) Flavor() Flavor {
91+
return wc.flavor
92+
}
93+
8994
// AddWhereExpr adds an AND expression to WHERE clause with the specified arguments.
9095
func (wc *WhereClause) AddWhereExpr(args *Args, andExpr ...string) *WhereClause {
9196
if len(andExpr) == 0 {

whereclause_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,22 @@ func TestEmptyStringsWhereAddWhereExpr(t *testing.T) {
311311
a.Equal(ub.String(), "UPDATE t SET foo = 1 ")
312312
a.Equal(db.String(), "DELETE FROM t ")
313313
}
314+
315+
func TestWhereClauseGetFlavor(t *testing.T) {
316+
a := assert.New(t)
317+
wc := NewWhereClause()
318+
wc.SetFlavor(PostgreSQL)
319+
flavor := wc.Flavor()
320+
a.Equal(PostgreSQL, flavor)
321+
}
322+
323+
func TestWhereClauseCopyGetFlavor(t *testing.T) {
324+
a := assert.New(t)
325+
326+
wc := NewWhereClause()
327+
wc.SetFlavor(PostgreSQL)
328+
329+
wcCopy := CopyWhereClause(wc)
330+
flavor := wcCopy.Flavor()
331+
a.Equal(PostgreSQL, flavor)
332+
}

0 commit comments

Comments
 (0)