github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/templates/main/18_delete.go.tpl (about) 1 {{- if .Table.IsView -}} 2 {{- else -}} 3 {{- $alias := .Aliases.Table .Table.Name -}} 4 {{- $schemaTable := .Table.Name | .SchemaTable -}} 5 {{- $canSoftDelete := .Table.CanSoftDelete $.AutoColumns.Deleted -}} 6 {{- $soft := and .AddSoftDeletes $canSoftDelete }} 7 {{- $softDelCol := or $.AutoColumns.Deleted "deleted_at"}} 8 {{if .AddGlobal -}} 9 // DeleteG deletes a single {{$alias.UpSingular}} record. 10 // DeleteG will match against the primary key column to find the record to delete. 11 func (o *{{$alias.UpSingular}}) DeleteG({{if not .NoContext}}ctx context.Context{{if $soft}}, hardDelete bool{{end}}{{else}}{{if $soft}}hardDelete bool{{end}}{{end}}) {{if .NoRowsAffected}}error{{else}}(int64, error){{end -}} { 12 return o.Delete({{if .NoContext}}boil.GetDB(){{else}}ctx, boil.GetContextDB(){{end}}{{if $soft}}, hardDelete{{end}}) 13 } 14 15 {{end -}} 16 17 {{if .AddPanic -}} 18 // DeleteP deletes a single {{$alias.UpSingular}} record with an executor. 19 // DeleteP will match against the primary key column to find the record to delete. 20 // Panics on error. 21 func (o *{{$alias.UpSingular}}) DeleteP({{if .NoContext}}exec boil.Executor{{else}}ctx context.Context, exec boil.ContextExecutor{{end}}{{if $soft}}, hardDelete bool{{end}}) {{if not .NoRowsAffected}}int64{{end -}} { 22 {{if not .NoRowsAffected}}rowsAff, {{end}}err := o.Delete({{if not .NoContext}}ctx, {{end -}} exec{{if $soft}}, hardDelete{{end}}) 23 if err != nil { 24 panic(boil.WrapErr(err)) 25 } 26 {{- if not .NoRowsAffected}} 27 28 return rowsAff 29 {{end -}} 30 } 31 32 {{end -}} 33 34 {{if and .AddGlobal .AddPanic -}} 35 // DeleteGP deletes a single {{$alias.UpSingular}} record. 36 // DeleteGP will match against the primary key column to find the record to delete. 37 // Panics on error. 38 func (o *{{$alias.UpSingular}}) DeleteGP({{if not .NoContext}}ctx context.Context{{if $soft}}, hardDelete bool{{end}}{{else}}{{if $soft}}hardDelete bool{{end}}{{end}}) {{if not .NoRowsAffected}}int64{{end -}} { 39 {{if not .NoRowsAffected}}rowsAff, {{end}}err := o.Delete({{if .NoContext}}boil.GetDB(){{else}}ctx, boil.GetContextDB(){{end}}{{if $soft}}, hardDelete{{end}}) 40 if err != nil { 41 panic(boil.WrapErr(err)) 42 } 43 {{- if not .NoRowsAffected}} 44 45 return rowsAff 46 {{end -}} 47 } 48 49 {{end -}} 50 51 // Delete deletes a single {{$alias.UpSingular}} record with an executor. 52 // Delete will match against the primary key column to find the record to delete. 53 func (o *{{$alias.UpSingular}}) Delete({{if .NoContext}}exec boil.Executor{{else}}ctx context.Context, exec boil.ContextExecutor{{end}}{{if $soft}}, hardDelete bool{{end}}) {{if .NoRowsAffected}}error{{else}}(int64, error){{end -}} { 54 if o == nil { 55 return {{if not .NoRowsAffected}}0, {{end -}} errors.New("{{.PkgName}}: no {{$alias.UpSingular}} provided for delete") 56 } 57 58 {{if not .NoHooks -}} 59 if err := o.doBeforeDeleteHooks({{if not .NoContext}}ctx, {{end -}} exec); err != nil { 60 return {{if not .NoRowsAffected}}0, {{end -}} err 61 } 62 {{- end}} 63 64 {{if $soft -}} 65 var ( 66 sql string 67 args []interface{} 68 ) 69 if hardDelete { 70 args = queries.ValuesFromMapping(reflect.Indirect(reflect.ValueOf(o)), {{$alias.DownSingular}}PrimaryKeyMapping) 71 sql = "DELETE FROM {{$schemaTable}} WHERE {{if .Dialect.UseIndexPlaceholders}}{{whereClause .LQ .RQ 1 .Table.PKey.Columns}}{{else}}{{whereClause .LQ .RQ 0 .Table.PKey.Columns}}{{end}}" 72 } else { 73 currTime := time.Now().In(boil.GetLocation()) 74 o.{{$alias.Column $softDelCol}} = null.TimeFrom(currTime) 75 wl := []string{"{{$softDelCol}}"} 76 sql = fmt.Sprintf("UPDATE {{$schemaTable}} SET %s WHERE {{if .Dialect.UseIndexPlaceholders}}{{whereClause .LQ .RQ 2 .Table.PKey.Columns}}{{else}}{{whereClause .LQ .RQ 0 .Table.PKey.Columns}}{{end}}", 77 strmangle.SetParamNames("{{.LQ}}", "{{.RQ}}", {{if .Dialect.UseIndexPlaceholders}}1{{else}}0{{end}}, wl), 78 ) 79 valueMapping, err := queries.BindMapping({{$alias.DownSingular}}Type, {{$alias.DownSingular}}Mapping, append(wl, {{$alias.DownSingular}}PrimaryKeyColumns...)) 80 if err != nil { 81 return {{if not .NoRowsAffected}}0, {{end -}} err 82 } 83 args = queries.ValuesFromMapping(reflect.Indirect(reflect.ValueOf(o)), valueMapping) 84 } 85 {{else -}} 86 args := queries.ValuesFromMapping(reflect.Indirect(reflect.ValueOf(o)), {{$alias.DownSingular}}PrimaryKeyMapping) 87 sql := "DELETE FROM {{$schemaTable}} WHERE {{if .Dialect.UseIndexPlaceholders}}{{whereClause .LQ .RQ 1 .Table.PKey.Columns}}{{else}}{{whereClause .LQ .RQ 0 .Table.PKey.Columns}}{{end}}" 88 {{- end}} 89 90 {{if .NoContext -}} 91 if boil.DebugMode { 92 fmt.Fprintln(boil.DebugWriter, sql) 93 fmt.Fprintln(boil.DebugWriter, args...) 94 } 95 {{else -}} 96 if boil.IsDebug(ctx) { 97 writer := boil.DebugWriterFrom(ctx) 98 fmt.Fprintln(writer, sql) 99 fmt.Fprintln(writer, args...) 100 } 101 {{end -}} 102 103 {{if .NoRowsAffected -}} 104 {{if .NoContext -}} 105 _, err := exec.Exec(sql, args...) 106 {{else -}} 107 _, err := exec.ExecContext(ctx, sql, args...) 108 {{end -}} 109 {{else -}} 110 {{if .NoContext -}} 111 result, err := exec.Exec(sql, args...) 112 {{else -}} 113 result, err := exec.ExecContext(ctx, sql, args...) 114 {{end -}} 115 {{end -}} 116 if err != nil { 117 return {{if not .NoRowsAffected}}0, {{end -}} errors.Wrap(err, "{{.PkgName}}: unable to delete from {{.Table.Name}}") 118 } 119 120 {{if not .NoRowsAffected -}} 121 rowsAff, err := result.RowsAffected() 122 if err != nil { 123 return 0, errors.Wrap(err, "{{.PkgName}}: failed to get rows affected by delete for {{.Table.Name}}") 124 } 125 126 {{end -}} 127 128 {{if not .NoHooks -}} 129 if err := o.doAfterDeleteHooks({{if not .NoContext}}ctx, {{end -}} exec); err != nil { 130 return {{if not .NoRowsAffected}}0, {{end -}} err 131 } 132 {{- end}} 133 134 return {{if not .NoRowsAffected}}rowsAff, {{end -}} nil 135 } 136 137 {{if .AddGlobal -}} 138 func (q {{$alias.DownSingular}}Query) DeleteAllG({{if not .NoContext}}ctx context.Context{{end}}{{if $soft}}{{if not .NoContext}}, {{end}}hardDelete bool{{end}}) {{if .NoRowsAffected}}error{{else}}(int64, error){{end -}} { 139 return q.DeleteAll({{if .NoContext}}boil.GetDB(){{else}}ctx, boil.GetContextDB(){{end}}{{if $soft}}, hardDelete{{end}}) 140 } 141 142 {{end -}} 143 144 {{if .AddPanic -}} 145 // DeleteAllP deletes all rows, and panics on error. 146 func (q {{$alias.DownSingular}}Query) DeleteAllP({{if .NoContext}}exec boil.Executor{{else}}ctx context.Context, exec boil.ContextExecutor{{end}}{{if $soft}}, hardDelete bool{{end}}) {{if not .NoRowsAffected}}int64{{end -}} { 147 {{if not .NoRowsAffected}}rowsAff, {{end -}} err := q.DeleteAll({{if not .NoContext}}ctx, {{end -}} exec{{if $soft}}, hardDelete{{end}}) 148 if err != nil { 149 panic(boil.WrapErr(err)) 150 } 151 {{- if not .NoRowsAffected}} 152 153 return rowsAff 154 {{end -}} 155 } 156 157 {{end -}} 158 159 {{if and .AddGlobal .AddPanic -}} 160 // DeleteAllGP deletes all rows, and panics on error. 161 func (q {{$alias.DownSingular}}Query) DeleteAllGP({{if not .NoContext}}ctx context.Context, {{end}}{{if $soft}}hardDelete bool{{end}}) {{if not .NoRowsAffected}}int64{{end -}} { 162 {{if not .NoRowsAffected}}rowsAff, {{end -}} err := q.DeleteAll({{if .NoContext}}boil.GetDB(){{else}}ctx, boil.GetContextDB(){{end}}{{if $soft}}, hardDelete{{end}}) 163 if err != nil { 164 panic(boil.WrapErr(err)) 165 } 166 {{- if not .NoRowsAffected}} 167 168 return rowsAff 169 {{end -}} 170 } 171 172 {{end -}} 173 174 // DeleteAll deletes all matching rows. 175 func (q {{$alias.DownSingular}}Query) DeleteAll({{if .NoContext}}exec boil.Executor{{else}}ctx context.Context, exec boil.ContextExecutor{{end}}{{if $soft}}, hardDelete bool{{end}}) {{if .NoRowsAffected}}error{{else}}(int64, error){{end -}} { 176 if q.Query == nil { 177 return {{if not .NoRowsAffected}}0, {{end -}} errors.New("{{.PkgName}}: no {{$alias.DownSingular}}Query provided for delete all") 178 } 179 180 {{if $soft -}} 181 if hardDelete { 182 queries.SetDelete(q.Query) 183 } else { 184 currTime := time.Now().In(boil.GetLocation()) 185 queries.SetUpdate(q.Query, M{"{{$softDelCol}}": currTime}) 186 } 187 {{else -}} 188 queries.SetDelete(q.Query) 189 {{- end}} 190 191 {{if .NoRowsAffected -}} 192 {{if .NoContext -}} 193 _, err := q.Query.Exec(exec) 194 {{else -}} 195 _, err := q.Query.ExecContext(ctx, exec) 196 {{end -}} 197 {{else -}} 198 {{if .NoContext -}} 199 result, err := q.Query.Exec(exec) 200 {{else -}} 201 result, err := q.Query.ExecContext(ctx, exec) 202 {{end -}} 203 {{end -}} 204 if err != nil { 205 return {{if not .NoRowsAffected}}0, {{end -}} errors.Wrap(err, "{{.PkgName}}: unable to delete all from {{.Table.Name}}") 206 } 207 208 {{if not .NoRowsAffected -}} 209 rowsAff, err := result.RowsAffected() 210 if err != nil { 211 return 0, errors.Wrap(err, "{{.PkgName}}: failed to get rows affected by deleteall for {{.Table.Name}}") 212 } 213 214 {{end -}} 215 216 return {{if not .NoRowsAffected}}rowsAff, {{end -}} nil 217 } 218 219 {{if .AddGlobal -}} 220 // DeleteAllG deletes all rows in the slice. 221 func (o {{$alias.UpSingular}}Slice) DeleteAllG({{if not .NoContext}}ctx context.Context{{if $soft}}, hardDelete bool{{end}}{{else}}{{if $soft}}hardDelete bool{{end}}{{end}}) {{if .NoRowsAffected}}error{{else}}(int64, error){{end -}} { 222 return o.DeleteAll({{if .NoContext}}boil.GetDB(){{else}}ctx, boil.GetContextDB(){{end}}{{if $soft}}, hardDelete{{end}}) 223 } 224 225 {{end -}} 226 227 {{if .AddPanic -}} 228 // DeleteAllP deletes all rows in the slice, using an executor, and panics on error. 229 func (o {{$alias.UpSingular}}Slice) DeleteAllP({{if .NoContext}}exec boil.Executor{{else}}ctx context.Context, exec boil.ContextExecutor{{end}}{{if $soft}}, hardDelete bool{{end}}) {{if not .NoRowsAffected}}int64{{end -}} { 230 {{if not .NoRowsAffected}}rowsAff, {{end -}} err := o.DeleteAll({{if not .NoContext}}ctx, {{end -}} exec{{if $soft}}, hardDelete{{end}}) 231 if err != nil { 232 panic(boil.WrapErr(err)) 233 } 234 {{- if not .NoRowsAffected}} 235 236 return rowsAff 237 {{end -}} 238 } 239 240 {{end -}} 241 242 {{if and .AddGlobal .AddPanic -}} 243 // DeleteAllGP deletes all rows in the slice, and panics on error. 244 func (o {{$alias.UpSingular}}Slice) DeleteAllGP({{if not .NoContext}}ctx context.Context{{if $soft}}, hardDelete bool{{end}}{{else}}{{if $soft}}hardDelete bool{{end}}{{end}}) {{if not .NoRowsAffected}}int64{{end -}} { 245 {{if not .NoRowsAffected}}rowsAff, {{end -}} err := o.DeleteAll({{if .NoContext}}boil.GetDB(){{else}}ctx, boil.GetContextDB(){{end}}{{if $soft}}, hardDelete{{end}}) 246 if err != nil { 247 panic(boil.WrapErr(err)) 248 } 249 {{- if not .NoRowsAffected}} 250 251 return rowsAff 252 {{end -}} 253 } 254 255 {{end -}} 256 257 // DeleteAll deletes all rows in the slice, using an executor. 258 func (o {{$alias.UpSingular}}Slice) DeleteAll({{if .NoContext}}exec boil.Executor{{else}}ctx context.Context, exec boil.ContextExecutor{{end}}{{if $soft}}, hardDelete bool{{end}}) {{if .NoRowsAffected}}error{{else}}(int64, error){{end -}} { 259 if len(o) == 0 { 260 return {{if not .NoRowsAffected}}0, {{end -}} nil 261 } 262 263 {{if not .NoHooks -}} 264 if len({{$alias.DownSingular}}BeforeDeleteHooks) != 0 { 265 for _, obj := range o { 266 if err := obj.doBeforeDeleteHooks({{if not .NoContext}}ctx, {{end -}} exec); err != nil { 267 return {{if not .NoRowsAffected}}0, {{end -}} err 268 } 269 } 270 } 271 {{- end}} 272 273 {{if $soft -}} 274 var ( 275 sql string 276 args []interface{} 277 ) 278 if hardDelete { 279 for _, obj := range o { 280 pkeyArgs := queries.ValuesFromMapping(reflect.Indirect(reflect.ValueOf(obj)), {{$alias.DownSingular}}PrimaryKeyMapping) 281 args = append(args, pkeyArgs...) 282 } 283 sql = "DELETE FROM {{$schemaTable}} WHERE " + 284 strmangle.WhereClauseRepeated(string(dialect.LQ), string(dialect.RQ), {{if .Dialect.UseIndexPlaceholders}}1{{else}}0{{end}}, {{$alias.DownSingular}}PrimaryKeyColumns, len(o)) 285 } else { 286 currTime := time.Now().In(boil.GetLocation()) 287 for _, obj := range o { 288 pkeyArgs := queries.ValuesFromMapping(reflect.Indirect(reflect.ValueOf(obj)), {{$alias.DownSingular}}PrimaryKeyMapping) 289 args = append(args, pkeyArgs...) 290 obj.{{$alias.Column $softDelCol}} = null.TimeFrom(currTime) 291 } 292 wl := []string{"{{$softDelCol}}"} 293 sql = fmt.Sprintf("UPDATE {{$schemaTable}} SET %s WHERE " + 294 strmangle.WhereClauseRepeated(string(dialect.LQ), string(dialect.RQ), {{if .Dialect.UseIndexPlaceholders}}2{{else}}0{{end}}, {{$alias.DownSingular}}PrimaryKeyColumns, len(o)), 295 strmangle.SetParamNames("{{.LQ}}", "{{.RQ}}", {{if .Dialect.UseIndexPlaceholders}}1{{else}}0{{end}}, wl), 296 ) 297 args = append([]interface{}{currTime}, args...) 298 } 299 {{else -}} 300 var args []interface{} 301 for _, obj := range o { 302 pkeyArgs := queries.ValuesFromMapping(reflect.Indirect(reflect.ValueOf(obj)), {{$alias.DownSingular}}PrimaryKeyMapping) 303 args = append(args, pkeyArgs...) 304 } 305 306 sql := "DELETE FROM {{$schemaTable}} WHERE " + 307 strmangle.WhereClauseRepeated(string(dialect.LQ), string(dialect.RQ), {{if .Dialect.UseIndexPlaceholders}}1{{else}}0{{end}}, {{$alias.DownSingular}}PrimaryKeyColumns, len(o)) 308 {{- end}} 309 310 {{if .NoContext -}} 311 if boil.DebugMode { 312 fmt.Fprintln(boil.DebugWriter, sql) 313 fmt.Fprintln(boil.DebugWriter, args) 314 } 315 {{else -}} 316 if boil.IsDebug(ctx) { 317 writer := boil.DebugWriterFrom(ctx) 318 fmt.Fprintln(writer, sql) 319 fmt.Fprintln(writer, args) 320 } 321 {{end -}} 322 323 {{if .NoRowsAffected -}} 324 {{if .NoContext -}} 325 _, err := exec.Exec(sql, args...) 326 {{else -}} 327 _, err := exec.ExecContext(ctx, sql, args...) 328 {{end -}} 329 {{else -}} 330 {{if .NoContext -}} 331 result, err := exec.Exec(sql, args...) 332 {{else -}} 333 result, err := exec.ExecContext(ctx, sql, args...) 334 {{end -}} 335 {{end -}} 336 if err != nil { 337 return {{if not .NoRowsAffected}}0, {{end -}} errors.Wrap(err, "{{.PkgName}}: unable to delete all from {{$alias.DownSingular}} slice") 338 } 339 340 {{if not .NoRowsAffected -}} 341 rowsAff, err := result.RowsAffected() 342 if err != nil { 343 return 0, errors.Wrap(err, "{{.PkgName}}: failed to get rows affected by deleteall for {{.Table.Name}}") 344 } 345 346 {{end -}} 347 348 {{if not .NoHooks -}} 349 if len({{$alias.DownSingular}}AfterDeleteHooks) != 0 { 350 for _, obj := range o { 351 if err := obj.doAfterDeleteHooks({{if not .NoContext}}ctx, {{end -}} exec); err != nil { 352 return {{if not .NoRowsAffected}}0, {{end -}} err 353 } 354 } 355 } 356 {{- end}} 357 358 return {{if not .NoRowsAffected}}rowsAff, {{end -}} nil 359 } 360 361 {{- end -}}