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 -}}