e48e1dda by astaxie

Merge pull request #812 from ZhengYang/develop

More SQL keywords added and code cleanup
2 parents 9013f5c6 1f9281c8
...@@ -34,6 +34,11 @@ type QueryBuilder interface { ...@@ -34,6 +34,11 @@ type QueryBuilder interface {
34 Offset(offset int) QueryBuilder 34 Offset(offset int) QueryBuilder
35 GroupBy(fields ...string) QueryBuilder 35 GroupBy(fields ...string) QueryBuilder
36 Having(cond string) QueryBuilder 36 Having(cond string) QueryBuilder
37 Update(tables ...string) QueryBuilder
38 Set(kv ...string) QueryBuilder
39 Delete(tables ...string) QueryBuilder
40 InsertInto(table string, fields ...string) QueryBuilder
41 Values(vals ...string) QueryBuilder
37 Subquery(sub string, alias string) string 42 Subquery(sub string, alias string) string
38 String() string 43 String() string
39 } 44 }
......
...@@ -20,95 +20,127 @@ import ( ...@@ -20,95 +20,127 @@ import (
20 "strings" 20 "strings"
21 ) 21 )
22 22
23 const COMMA_SPACE = ", "
24
23 type MySQLQueryBuilder struct { 25 type MySQLQueryBuilder struct {
24 QueryTokens []string 26 Tokens []string
25 } 27 }
26 28
27 func (qb *MySQLQueryBuilder) Select(fields ...string) QueryBuilder { 29 func (qb *MySQLQueryBuilder) Select(fields ...string) QueryBuilder {
28 segment := fmt.Sprintf("SELECT %s", strings.Join(fields, ", ")) 30 qb.Tokens = append(qb.Tokens, "SELECT", strings.Join(fields, COMMA_SPACE))
29 qb.QueryTokens = append(qb.QueryTokens, segment)
30 return qb 31 return qb
31 } 32 }
32 33
33 func (qb *MySQLQueryBuilder) From(tables ...string) QueryBuilder { 34 func (qb *MySQLQueryBuilder) From(tables ...string) QueryBuilder {
34 segment := fmt.Sprintf("FROM %s", strings.Join(tables, ", ")) 35 qb.Tokens = append(qb.Tokens, "FROM", strings.Join(tables, COMMA_SPACE))
35 qb.QueryTokens = append(qb.QueryTokens, segment)
36 return qb 36 return qb
37 } 37 }
38 38
39 func (qb *MySQLQueryBuilder) InnerJoin(table string) QueryBuilder { 39 func (qb *MySQLQueryBuilder) InnerJoin(table string) QueryBuilder {
40 qb.QueryTokens = append(qb.QueryTokens, "INNER JOIN "+table) 40 qb.Tokens = append(qb.Tokens, "INNER JOIN", table)
41 return qb 41 return qb
42 } 42 }
43 43
44 func (qb *MySQLQueryBuilder) LeftJoin(table string) QueryBuilder { 44 func (qb *MySQLQueryBuilder) LeftJoin(table string) QueryBuilder {
45 qb.QueryTokens = append(qb.QueryTokens, "LEFT JOIN "+table) 45 qb.Tokens = append(qb.Tokens, "LEFT JOIN", table)
46 return qb 46 return qb
47 } 47 }
48 48
49 func (qb *MySQLQueryBuilder) RightJoin(table string) QueryBuilder { 49 func (qb *MySQLQueryBuilder) RightJoin(table string) QueryBuilder {
50 qb.QueryTokens = append(qb.QueryTokens, "RIGHT JOIN "+table) 50 qb.Tokens = append(qb.Tokens, "RIGHT JOIN", table)
51 return qb 51 return qb
52 } 52 }
53 53
54 func (qb *MySQLQueryBuilder) On(cond string) QueryBuilder { 54 func (qb *MySQLQueryBuilder) On(cond string) QueryBuilder {
55 qb.QueryTokens = append(qb.QueryTokens, "ON "+cond) 55 qb.Tokens = append(qb.Tokens, "ON", cond)
56 return qb 56 return qb
57 } 57 }
58 58
59 func (qb *MySQLQueryBuilder) Where(cond string) QueryBuilder { 59 func (qb *MySQLQueryBuilder) Where(cond string) QueryBuilder {
60 qb.QueryTokens = append(qb.QueryTokens, "WHERE "+cond) 60 qb.Tokens = append(qb.Tokens, "WHERE", cond)
61 return qb 61 return qb
62 } 62 }
63 63
64 func (qb *MySQLQueryBuilder) And(cond string) QueryBuilder { 64 func (qb *MySQLQueryBuilder) And(cond string) QueryBuilder {
65 qb.QueryTokens = append(qb.QueryTokens, "AND "+cond) 65 qb.Tokens = append(qb.Tokens, "AND", cond)
66 return qb 66 return qb
67 } 67 }
68 68
69 func (qb *MySQLQueryBuilder) Or(cond string) QueryBuilder { 69 func (qb *MySQLQueryBuilder) Or(cond string) QueryBuilder {
70 qb.QueryTokens = append(qb.QueryTokens, "OR "+cond) 70 qb.Tokens = append(qb.Tokens, "OR", cond)
71 return qb 71 return qb
72 } 72 }
73 73
74 func (qb *MySQLQueryBuilder) In(vals ...string) QueryBuilder { 74 func (qb *MySQLQueryBuilder) In(vals ...string) QueryBuilder {
75 segment := fmt.Sprintf("IN (%s)", strings.Join(vals, ", ")) 75 qb.Tokens = append(qb.Tokens, "IN", "(", strings.Join(vals, COMMA_SPACE), ")")
76 qb.QueryTokens = append(qb.QueryTokens, segment)
77 return qb 76 return qb
78 } 77 }
79 78
80 func (qb *MySQLQueryBuilder) OrderBy(fields ...string) QueryBuilder { 79 func (qb *MySQLQueryBuilder) OrderBy(fields ...string) QueryBuilder {
81 qb.QueryTokens = append(qb.QueryTokens, "ORDER BY "+strings.Join(fields, ", ")) 80 qb.Tokens = append(qb.Tokens, "ORDER BY", strings.Join(fields, COMMA_SPACE))
82 return qb 81 return qb
83 } 82 }
84 83
85 func (qb *MySQLQueryBuilder) Asc() QueryBuilder { 84 func (qb *MySQLQueryBuilder) Asc() QueryBuilder {
86 qb.QueryTokens = append(qb.QueryTokens, "ASC") 85 qb.Tokens = append(qb.Tokens, "ASC")
87 return qb 86 return qb
88 } 87 }
89 88
90 func (qb *MySQLQueryBuilder) Desc() QueryBuilder { 89 func (qb *MySQLQueryBuilder) Desc() QueryBuilder {
91 qb.QueryTokens = append(qb.QueryTokens, "DESC") 90 qb.Tokens = append(qb.Tokens, "DESC")
92 return qb 91 return qb
93 } 92 }
94 93
95 func (qb *MySQLQueryBuilder) Limit(limit int) QueryBuilder { 94 func (qb *MySQLQueryBuilder) Limit(limit int) QueryBuilder {
96 qb.QueryTokens = append(qb.QueryTokens, "LIMIT "+strconv.Itoa(limit)) 95 qb.Tokens = append(qb.Tokens, "LIMIT", strconv.Itoa(limit))
97 return qb 96 return qb
98 } 97 }
99 98
100 func (qb *MySQLQueryBuilder) Offset(offset int) QueryBuilder { 99 func (qb *MySQLQueryBuilder) Offset(offset int) QueryBuilder {
101 qb.QueryTokens = append(qb.QueryTokens, "OFFSET "+strconv.Itoa(offset)) 100 qb.Tokens = append(qb.Tokens, "OFFSET", strconv.Itoa(offset))
102 return qb 101 return qb
103 } 102 }
104 103
105 func (qb *MySQLQueryBuilder) GroupBy(fields ...string) QueryBuilder { 104 func (qb *MySQLQueryBuilder) GroupBy(fields ...string) QueryBuilder {
106 qb.QueryTokens = append(qb.QueryTokens, "GROUP BY "+strings.Join(fields, ", ")) 105 qb.Tokens = append(qb.Tokens, "GROUP BY", strings.Join(fields, COMMA_SPACE))
107 return qb 106 return qb
108 } 107 }
109 108
110 func (qb *MySQLQueryBuilder) Having(cond string) QueryBuilder { 109 func (qb *MySQLQueryBuilder) Having(cond string) QueryBuilder {
111 qb.QueryTokens = append(qb.QueryTokens, "HAVING "+cond) 110 qb.Tokens = append(qb.Tokens, "HAVING", cond)
111 return qb
112 }
113
114 func (qb *MySQLQueryBuilder) Update(tables ...string) QueryBuilder {
115 qb.Tokens = append(qb.Tokens, "UPDATE", strings.Join(tables, COMMA_SPACE))
116 return qb
117 }
118
119 func (qb *MySQLQueryBuilder) Set(kv ...string) QueryBuilder {
120 qb.Tokens = append(qb.Tokens, "SET", strings.Join(kv, COMMA_SPACE))
121 return qb
122 }
123
124 func (qb *MySQLQueryBuilder) Delete(tables ...string) QueryBuilder {
125 qb.Tokens = append(qb.Tokens, "DELETE")
126 if len(tables) != 0 {
127 qb.Tokens = append(qb.Tokens, strings.Join(tables, COMMA_SPACE))
128 }
129 return qb
130 }
131
132 func (qb *MySQLQueryBuilder) InsertInto(table string, fields ...string) QueryBuilder {
133 qb.Tokens = append(qb.Tokens, "INSERT INTO", table)
134 if len(fields) != 0 {
135 fieldsStr := strings.Join(fields, COMMA_SPACE)
136 qb.Tokens = append(qb.Tokens, "(", fieldsStr, ")")
137 }
138 return qb
139 }
140
141 func (qb *MySQLQueryBuilder) Values(vals ...string) QueryBuilder {
142 valsStr := strings.Join(vals, COMMA_SPACE)
143 qb.Tokens = append(qb.Tokens, "VALUES", "(", valsStr, ")")
112 return qb 144 return qb
113 } 145 }
114 146
...@@ -117,5 +149,5 @@ func (qb *MySQLQueryBuilder) Subquery(sub string, alias string) string { ...@@ -117,5 +149,5 @@ func (qb *MySQLQueryBuilder) Subquery(sub string, alias string) string {
117 } 149 }
118 150
119 func (qb *MySQLQueryBuilder) String() string { 151 func (qb *MySQLQueryBuilder) String() string {
120 return strings.Join(qb.QueryTokens, " ") 152 return strings.Join(qb.Tokens, " ")
121 } 153 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!