11package qsql
22
33type SqlBuilder struct {
4- table []string
5- selectStr []string
6- whereAndStr []string
4+ innerBuilder * SqlBuilder
5+ table []string
6+
7+ whereStr []string
78 whereParams []interface {}
89 whereOrStr []string
910 whereOrParams []interface {}
@@ -23,13 +24,81 @@ func NewSqlBuilder(table string) *SqlBuilder {
2324 }
2425}
2526
27+ func (b * SqlBuilder ) Copy () * SqlBuilder {
28+ n := & SqlBuilder {
29+ innerBuilder : b .innerBuilder ,
30+ table : make ([]string , len (b .table )),
31+ whereStr : make ([]string , len (b .whereStr )),
32+ whereParams : make ([]interface {}, len (b .whereParams )),
33+ whereOrStr : make ([]string , len (b .whereOrStr )),
34+ whereOrParams : make ([]interface {}, len (b .whereOrParams )),
35+ groupByStr : make ([]string , len (b .groupByStr )),
36+ havingStr : make ([]string , len (b .havingStr )),
37+ havingParams : make ([]interface {}, len (b .havingParams )),
38+ havingOrStr : make ([]string , len (b .havingOrStr )),
39+ havingOrParams : make ([]interface {}, len (b .havingOrParams )),
40+ orderByStr : make ([]string , len (b .orderByStr )),
41+ offset : b .offset ,
42+ limit : b .limit ,
43+ }
44+ copy (n .table , b .table )
45+ copy (n .whereStr , b .whereStr )
46+ copy (n .whereParams , b .whereParams )
47+ copy (n .whereOrStr , b .whereOrStr )
48+ copy (n .whereOrParams , b .whereOrParams )
49+ copy (n .groupByStr , b .groupByStr )
50+ copy (n .havingStr , b .havingStr )
51+ copy (n .havingParams , b .havingParams )
52+ copy (n .havingOrStr , b .havingOrStr )
53+ copy (n .havingOrParams , b .havingOrParams )
54+
55+ return n
56+ }
57+
2658func (b * SqlBuilder ) Joins (table string ) * SqlBuilder {
2759 b .table = append (b .table , table )
2860 return b
2961}
3062
3163func (b * SqlBuilder ) Where (cond string , args ... interface {}) * SqlBuilder {
32- b .whereAndStr = append (b .whereAndStr , cond )
64+ b .whereStr = append (b .whereStr , cond )
3365 b .whereParams = append (b .whereParams , args ... )
3466 return b
3567}
68+
69+ func (b * SqlBuilder ) Or (cond string , args ... interface {}) * SqlBuilder {
70+ b .whereOrStr = append (b .whereOrStr , cond )
71+ b .whereOrParams = append (b .whereOrParams , args ... )
72+ return b
73+ }
74+
75+ func (b * SqlBuilder ) GroupBy (cond ... string ) * SqlBuilder {
76+ b .groupByStr = append (b .groupByStr , cond ... )
77+ return b
78+ }
79+ func (b * SqlBuilder ) Having (cond string , args ... interface {}) * SqlBuilder {
80+ b .havingStr = append (b .havingStr , cond )
81+ b .havingParams = append (b .havingParams , args ... )
82+ return b
83+ }
84+ func (b * SqlBuilder ) HavingOr (cond string , args ... interface {}) * SqlBuilder {
85+ b .havingOrStr = append (b .havingOrStr , cond )
86+ b .havingOrParams = append (b .havingOrParams , args ... )
87+ return b
88+ }
89+
90+ func (b * SqlBuilder ) OrderBy (cond string ) * SqlBuilder {
91+ b .orderByStr = append (b .orderByStr , cond )
92+ return b
93+ }
94+ func (b * SqlBuilder ) Offset (offset int ) * SqlBuilder {
95+ b .offset = offset
96+ return b
97+ }
98+ func (b * SqlBuilder ) Limit (limit int ) * SqlBuilder {
99+ b .limit = limit
100+ return b
101+ }
102+ func (b * SqlBuilder ) Select (column ... string ) (string , []interface {}) {
103+ return "TODO" , nil
104+ }
0 commit comments