1package squirrel
2
3import "github.com/lann/builder"
4
5// StatementBuilderType is the type of StatementBuilder.
6type StatementBuilderType builder.Builder
7
8// Select returns a SelectBuilder for this StatementBuilderType.
9func (b StatementBuilderType) Select(columns ...string) SelectBuilder {
10	return SelectBuilder(b).Columns(columns...)
11}
12
13// Insert returns a InsertBuilder for this StatementBuilderType.
14func (b StatementBuilderType) Insert(into string) InsertBuilder {
15	return InsertBuilder(b).Into(into)
16}
17
18// Update returns a UpdateBuilder for this StatementBuilderType.
19func (b StatementBuilderType) Update(table string) UpdateBuilder {
20	return UpdateBuilder(b).Table(table)
21}
22
23// Delete returns a DeleteBuilder for this StatementBuilderType.
24func (b StatementBuilderType) Delete(from string) DeleteBuilder {
25	return DeleteBuilder(b).From(from)
26}
27
28// PlaceholderFormat sets the PlaceholderFormat field for any child builders.
29func (b StatementBuilderType) PlaceholderFormat(f PlaceholderFormat) StatementBuilderType {
30	return builder.Set(b, "PlaceholderFormat", f).(StatementBuilderType)
31}
32
33// RunWith sets the RunWith field for any child builders.
34func (b StatementBuilderType) RunWith(runner BaseRunner) StatementBuilderType {
35	return setRunWith(b, runner).(StatementBuilderType)
36}
37
38// StatementBuilder is a parent builder for other builders, e.g. SelectBuilder.
39var StatementBuilder = StatementBuilderType(builder.EmptyBuilder).PlaceholderFormat(Question)
40
41// Select returns a new SelectBuilder, optionally setting some result columns.
42//
43// See SelectBuilder.Columns.
44func Select(columns ...string) SelectBuilder {
45	return StatementBuilder.Select(columns...)
46}
47
48// Insert returns a new InsertBuilder with the given table name.
49//
50// See InsertBuilder.Into.
51func Insert(into string) InsertBuilder {
52	return StatementBuilder.Insert(into)
53}
54
55// Update returns a new UpdateBuilder with the given table name.
56//
57// See UpdateBuilder.Table.
58func Update(table string) UpdateBuilder {
59	return StatementBuilder.Update(table)
60}
61
62// Delete returns a new DeleteBuilder with the given table name.
63//
64// See DeleteBuilder.Table.
65func Delete(from string) DeleteBuilder {
66	return StatementBuilder.Delete(from)
67}
68
69// Case returns a new CaseBuilder
70// "what" represents case value
71func Case(what ...interface{}) CaseBuilder {
72	b := CaseBuilder(builder.EmptyBuilder)
73
74	switch len(what) {
75	case 0:
76	case 1:
77		b = b.what(what[0])
78	default:
79		b = b.what(newPart(what[0], what[1:]...))
80
81	}
82	return b
83}
84