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 }