github.com/astaxie/beego@v1.12.3/orm/qb_mysql.go (about) 1 // Copyright 2014 beego Author. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package orm 16 17 import ( 18 "fmt" 19 "strconv" 20 "strings" 21 ) 22 23 // CommaSpace is the separation 24 const CommaSpace = ", " 25 26 // MySQLQueryBuilder is the SQL build 27 type MySQLQueryBuilder struct { 28 Tokens []string 29 } 30 31 // Select will join the fields 32 func (qb *MySQLQueryBuilder) Select(fields ...string) QueryBuilder { 33 qb.Tokens = append(qb.Tokens, "SELECT", strings.Join(fields, CommaSpace)) 34 return qb 35 } 36 37 // ForUpdate add the FOR UPDATE clause 38 func (qb *MySQLQueryBuilder) ForUpdate() QueryBuilder { 39 qb.Tokens = append(qb.Tokens, "FOR UPDATE") 40 return qb 41 } 42 43 // From join the tables 44 func (qb *MySQLQueryBuilder) From(tables ...string) QueryBuilder { 45 qb.Tokens = append(qb.Tokens, "FROM", strings.Join(tables, CommaSpace)) 46 return qb 47 } 48 49 // InnerJoin INNER JOIN the table 50 func (qb *MySQLQueryBuilder) InnerJoin(table string) QueryBuilder { 51 qb.Tokens = append(qb.Tokens, "INNER JOIN", table) 52 return qb 53 } 54 55 // LeftJoin LEFT JOIN the table 56 func (qb *MySQLQueryBuilder) LeftJoin(table string) QueryBuilder { 57 qb.Tokens = append(qb.Tokens, "LEFT JOIN", table) 58 return qb 59 } 60 61 // RightJoin RIGHT JOIN the table 62 func (qb *MySQLQueryBuilder) RightJoin(table string) QueryBuilder { 63 qb.Tokens = append(qb.Tokens, "RIGHT JOIN", table) 64 return qb 65 } 66 67 // On join with on cond 68 func (qb *MySQLQueryBuilder) On(cond string) QueryBuilder { 69 qb.Tokens = append(qb.Tokens, "ON", cond) 70 return qb 71 } 72 73 // Where join the Where cond 74 func (qb *MySQLQueryBuilder) Where(cond string) QueryBuilder { 75 qb.Tokens = append(qb.Tokens, "WHERE", cond) 76 return qb 77 } 78 79 // And join the and cond 80 func (qb *MySQLQueryBuilder) And(cond string) QueryBuilder { 81 qb.Tokens = append(qb.Tokens, "AND", cond) 82 return qb 83 } 84 85 // Or join the or cond 86 func (qb *MySQLQueryBuilder) Or(cond string) QueryBuilder { 87 qb.Tokens = append(qb.Tokens, "OR", cond) 88 return qb 89 } 90 91 // In join the IN (vals) 92 func (qb *MySQLQueryBuilder) In(vals ...string) QueryBuilder { 93 qb.Tokens = append(qb.Tokens, "IN", "(", strings.Join(vals, CommaSpace), ")") 94 return qb 95 } 96 97 // OrderBy join the Order by fields 98 func (qb *MySQLQueryBuilder) OrderBy(fields ...string) QueryBuilder { 99 qb.Tokens = append(qb.Tokens, "ORDER BY", strings.Join(fields, CommaSpace)) 100 return qb 101 } 102 103 // Asc join the asc 104 func (qb *MySQLQueryBuilder) Asc() QueryBuilder { 105 qb.Tokens = append(qb.Tokens, "ASC") 106 return qb 107 } 108 109 // Desc join the desc 110 func (qb *MySQLQueryBuilder) Desc() QueryBuilder { 111 qb.Tokens = append(qb.Tokens, "DESC") 112 return qb 113 } 114 115 // Limit join the limit num 116 func (qb *MySQLQueryBuilder) Limit(limit int) QueryBuilder { 117 qb.Tokens = append(qb.Tokens, "LIMIT", strconv.Itoa(limit)) 118 return qb 119 } 120 121 // Offset join the offset num 122 func (qb *MySQLQueryBuilder) Offset(offset int) QueryBuilder { 123 qb.Tokens = append(qb.Tokens, "OFFSET", strconv.Itoa(offset)) 124 return qb 125 } 126 127 // GroupBy join the Group by fields 128 func (qb *MySQLQueryBuilder) GroupBy(fields ...string) QueryBuilder { 129 qb.Tokens = append(qb.Tokens, "GROUP BY", strings.Join(fields, CommaSpace)) 130 return qb 131 } 132 133 // Having join the Having cond 134 func (qb *MySQLQueryBuilder) Having(cond string) QueryBuilder { 135 qb.Tokens = append(qb.Tokens, "HAVING", cond) 136 return qb 137 } 138 139 // Update join the update table 140 func (qb *MySQLQueryBuilder) Update(tables ...string) QueryBuilder { 141 qb.Tokens = append(qb.Tokens, "UPDATE", strings.Join(tables, CommaSpace)) 142 return qb 143 } 144 145 // Set join the set kv 146 func (qb *MySQLQueryBuilder) Set(kv ...string) QueryBuilder { 147 qb.Tokens = append(qb.Tokens, "SET", strings.Join(kv, CommaSpace)) 148 return qb 149 } 150 151 // Delete join the Delete tables 152 func (qb *MySQLQueryBuilder) Delete(tables ...string) QueryBuilder { 153 qb.Tokens = append(qb.Tokens, "DELETE") 154 if len(tables) != 0 { 155 qb.Tokens = append(qb.Tokens, strings.Join(tables, CommaSpace)) 156 } 157 return qb 158 } 159 160 // InsertInto join the insert SQL 161 func (qb *MySQLQueryBuilder) InsertInto(table string, fields ...string) QueryBuilder { 162 qb.Tokens = append(qb.Tokens, "INSERT INTO", table) 163 if len(fields) != 0 { 164 fieldsStr := strings.Join(fields, CommaSpace) 165 qb.Tokens = append(qb.Tokens, "(", fieldsStr, ")") 166 } 167 return qb 168 } 169 170 // Values join the Values(vals) 171 func (qb *MySQLQueryBuilder) Values(vals ...string) QueryBuilder { 172 valsStr := strings.Join(vals, CommaSpace) 173 qb.Tokens = append(qb.Tokens, "VALUES", "(", valsStr, ")") 174 return qb 175 } 176 177 // Subquery join the sub as alias 178 func (qb *MySQLQueryBuilder) Subquery(sub string, alias string) string { 179 return fmt.Sprintf("(%s) AS %s", sub, alias) 180 } 181 182 // String join all Tokens 183 func (qb *MySQLQueryBuilder) String() string { 184 return strings.Join(qb.Tokens, " ") 185 }