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  }