Merge pull request #812 from ZhengYang/develop
More SQL keywords added and code cleanup
Showing
2 changed files
with
59 additions
and
22 deletions
| ... | @@ -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 | } | ... | ... |
-
Please register or sign in to post a comment