2021-10-21 13:39:24 +02:00
|
|
|
package sqlite
|
|
|
|
|
|
2026-05-14 16:26:47 +00:00
|
|
|
import "source.gleipnir.technology/Gleipnir/jet/internal/jet"
|
2021-10-21 13:39:24 +02:00
|
|
|
|
|
|
|
|
// UpdateStatement is interface of SQL UPDATE statement
|
|
|
|
|
type UpdateStatement interface {
|
|
|
|
|
jet.Statement
|
|
|
|
|
|
|
|
|
|
SET(value interface{}, values ...interface{}) UpdateStatement
|
|
|
|
|
MODEL(data interface{}) UpdateStatement
|
|
|
|
|
|
2021-12-08 18:13:58 +01:00
|
|
|
FROM(tables ...ReadableTable) UpdateStatement
|
2021-10-21 13:39:24 +02:00
|
|
|
WHERE(expression BoolExpression) UpdateStatement
|
2021-12-08 18:13:58 +01:00
|
|
|
RETURNING(projections ...Projection) UpdateStatement
|
2021-10-21 13:39:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type updateStatementImpl struct {
|
|
|
|
|
jet.SerializerStatement
|
|
|
|
|
|
|
|
|
|
Update jet.ClauseUpdate
|
2021-12-08 18:13:58 +01:00
|
|
|
From jet.ClauseFrom
|
2021-10-21 13:39:24 +02:00
|
|
|
Set jet.SetClause
|
|
|
|
|
SetNew jet.SetClauseNew
|
|
|
|
|
Where jet.ClauseWhere
|
|
|
|
|
Returning jet.ClauseReturning
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func newUpdateStatement(table Table, columns []jet.Column) UpdateStatement {
|
|
|
|
|
update := &updateStatementImpl{}
|
|
|
|
|
update.SerializerStatement = jet.NewStatementImpl(Dialect, jet.UpdateStatementType, update,
|
|
|
|
|
&update.Update,
|
|
|
|
|
&update.Set,
|
|
|
|
|
&update.SetNew,
|
2021-12-08 18:13:58 +01:00
|
|
|
&update.From,
|
2021-10-21 13:39:24 +02:00
|
|
|
&update.Where,
|
|
|
|
|
&update.Returning)
|
|
|
|
|
|
|
|
|
|
update.Update.Table = table
|
|
|
|
|
update.Set.Columns = columns
|
|
|
|
|
update.Where.Mandatory = true
|
|
|
|
|
|
|
|
|
|
return update
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (u *updateStatementImpl) SET(value interface{}, values ...interface{}) UpdateStatement {
|
|
|
|
|
columnAssigment, isColumnAssigment := value.(ColumnAssigment)
|
|
|
|
|
|
|
|
|
|
if isColumnAssigment {
|
|
|
|
|
u.SetNew = []ColumnAssigment{columnAssigment}
|
|
|
|
|
for _, value := range values {
|
|
|
|
|
u.SetNew = append(u.SetNew, value.(ColumnAssigment))
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
u.Set.Values = jet.UnwindRowFromValues(value, values)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return u
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (u *updateStatementImpl) MODEL(data interface{}) UpdateStatement {
|
|
|
|
|
u.Set.Values = jet.UnwindRowFromModel(u.Set.Columns, data)
|
|
|
|
|
return u
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-08 18:13:58 +01:00
|
|
|
func (u *updateStatementImpl) FROM(tables ...ReadableTable) UpdateStatement {
|
|
|
|
|
u.From.Tables = readableTablesToSerializerList(tables)
|
|
|
|
|
return u
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-21 13:39:24 +02:00
|
|
|
func (u *updateStatementImpl) WHERE(expression BoolExpression) UpdateStatement {
|
|
|
|
|
u.Where.Condition = expression
|
|
|
|
|
return u
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-08 18:13:58 +01:00
|
|
|
func (u *updateStatementImpl) RETURNING(projections ...Projection) UpdateStatement {
|
2021-10-21 13:39:24 +02:00
|
|
|
u.Returning.ProjectionList = projections
|
|
|
|
|
return u
|
|
|
|
|
}
|