github.com/unionj-cloud/go-doudou/v2@v2.3.5/toolkit/gormgen/internal/generate/clause.go (about)

     1  package generate
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/unionj-cloud/go-doudou/v2/toolkit/gormgen/internal/model"
     8  )
     9  
    10  // Clause a symbol of clause, it can be sql condition clause, if clause, where clause, set clause and else clause
    11  type Clause interface {
    12  	String() string
    13  	Create() string
    14  }
    15  
    16  var (
    17  	_ Clause = new(SQLClause)
    18  	_ Clause = new(IfClause)
    19  	_ Clause = new(ElseClause)
    20  	_ Clause = new(WhereClause)
    21  	_ Clause = new(SetClause)
    22  )
    23  
    24  type clause struct {
    25  	VarName string
    26  	Type    model.Status
    27  }
    28  
    29  // SQLClause sql condition clause
    30  type SQLClause struct {
    31  	clause
    32  	Value []string
    33  }
    34  
    35  func (s SQLClause) String() string {
    36  	sqlString := strings.Join(s.Value, "+")
    37  	// trim left space
    38  	if strings.HasPrefix(sqlString, "\"") {
    39  		sqlString = `"` + strings.TrimLeft(sqlString, `" `)
    40  	}
    41  	// make sure right has only one space
    42  	if !strings.HasSuffix(sqlString, ` "`) {
    43  		sqlString += `+" "`
    44  	}
    45  	// Remove redundant connection symbols
    46  	return strings.ReplaceAll(sqlString, `"+"`, "")
    47  }
    48  
    49  // Create create clause
    50  func (s SQLClause) Create() string {
    51  	return fmt.Sprintf("%s.WriteString(%s)", s.VarName, s.String())
    52  }
    53  
    54  // Finish finish clause
    55  func (s SQLClause) Finish() string {
    56  	return fmt.Sprintf("%s.WriteString(%s)", s.VarName, s.String())
    57  }
    58  
    59  // IfClause if clause
    60  type IfClause struct {
    61  	clause
    62  	Value []Clause
    63  	slice section
    64  }
    65  
    66  func (i IfClause) String() string {
    67  	return i.slice.Value
    68  }
    69  
    70  // Create create clause
    71  func (i IfClause) Create() string {
    72  	return fmt.Sprintf("%s {", i.String())
    73  }
    74  
    75  // Finish finish clause
    76  func (i IfClause) Finish() string {
    77  	return "}"
    78  }
    79  
    80  // ElseClause else clause
    81  type ElseClause struct {
    82  	IfClause
    83  }
    84  
    85  func (e ElseClause) String() (res string) {
    86  	return e.slice.Value
    87  }
    88  
    89  // Create create clause
    90  func (e ElseClause) Create() string {
    91  	return fmt.Sprintf("} %s {", e.String())
    92  }
    93  
    94  // Finish finish clause
    95  func (e ElseClause) Finish() string {
    96  	return ""
    97  }
    98  
    99  // WhereClause where clause
   100  type WhereClause struct {
   101  	clause
   102  	Value []Clause
   103  }
   104  
   105  func (w WhereClause) String() string {
   106  	return fmt.Sprintf("helper.WhereTrim(%s.String())", w.VarName)
   107  }
   108  
   109  // Create create clause
   110  func (w WhereClause) Create() string {
   111  	return fmt.Sprintf("var %s strings.Builder", w.VarName)
   112  }
   113  
   114  // Finish finish clause
   115  func (w WhereClause) Finish(name string) string {
   116  	return fmt.Sprintf("helper.JoinWhereBuilder(&%s,%s)", name, w.VarName)
   117  }
   118  
   119  // SetClause set clause
   120  type SetClause struct {
   121  	clause
   122  	Value []Clause
   123  }
   124  
   125  func (s SetClause) String() string {
   126  	return fmt.Sprintf("helper.SetTrim(%s.String())", s.VarName)
   127  }
   128  
   129  // Create create clause
   130  func (s SetClause) Create() string {
   131  	return fmt.Sprintf("var %s strings.Builder", s.VarName)
   132  }
   133  
   134  // Finish finish clause
   135  func (s SetClause) Finish(name string) string {
   136  	return fmt.Sprintf("helper.JoinSetBuilder(&%s,%s)", name, s.VarName)
   137  }
   138  
   139  // TrimClause set clause
   140  type TrimClause struct {
   141  	clause
   142  	Value []Clause
   143  }
   144  
   145  func (s TrimClause) String() string {
   146  	return fmt.Sprintf("helper.TrimALL(%s.String())", s.VarName)
   147  }
   148  
   149  // Create create trim clause
   150  func (s TrimClause) Create() string {
   151  	return fmt.Sprintf("var %s strings.Builder", s.VarName)
   152  }
   153  
   154  // Finish finish trim clause
   155  func (s TrimClause) Finish(name string) string {
   156  	return fmt.Sprintf("helper.JoinTrimAllBuilder(&%s,%s)", name, s.VarName)
   157  }
   158  
   159  // ForClause set clause
   160  type ForClause struct {
   161  	clause
   162  	Value    []Clause
   163  	ForRange ForRange
   164  	forSlice section
   165  }
   166  
   167  func (f ForClause) String() string {
   168  	return f.forSlice.Value + "{"
   169  }
   170  
   171  // Create create clause
   172  func (f ForClause) Create() string {
   173  	return f.String()
   174  }
   175  
   176  // Finish finish clause
   177  func (f ForClause) Finish() string {
   178  	return "}"
   179  }