Add FROM clause support for UPDATE statements

This commit is contained in:
go-jet 2021-12-08 18:13:58 +01:00
parent 97c34fbb54
commit 72e8d7d584
11 changed files with 211 additions and 18 deletions

View file

@ -110,10 +110,7 @@ func (s *selectStatementImpl) DISTINCT() SelectStatement {
}
func (s *selectStatementImpl) FROM(tables ...ReadableTable) SelectStatement {
s.From.Tables = nil
for _, table := range tables {
s.From.Tables = append(s.From.Tables, table)
}
s.From.Tables = readableTablesToSerializerList(tables)
return s
}
@ -182,3 +179,11 @@ func toJetFrameOffset(offset int64) jet.Serializer {
}
return jet.FixedLiteral(offset)
}
func readableTablesToSerializerList(tables []ReadableTable) []jet.Serializer {
var ret []jet.Serializer
for _, table := range tables {
ret = append(ret, table)
}
return ret
}

View file

@ -11,8 +11,9 @@ type UpdateStatement interface {
SET(value interface{}, values ...interface{}) UpdateStatement
MODEL(data interface{}) UpdateStatement
FROM(tables ...ReadableTable) UpdateStatement
WHERE(expression BoolExpression) UpdateStatement
RETURNING(projections ...jet.Projection) UpdateStatement
RETURNING(projections ...Projection) UpdateStatement
}
type updateStatementImpl struct {
@ -21,6 +22,7 @@ type updateStatementImpl struct {
Update jet.ClauseUpdate
Set clauseSet
SetNew jet.SetClauseNew
From jet.ClauseFrom
Where jet.ClauseWhere
Returning jet.ClauseReturning
}
@ -31,6 +33,7 @@ func newUpdateStatement(table WritableTable, columns []jet.Column) UpdateStateme
&update.Update,
&update.Set,
&update.SetNew,
&update.From,
&update.Where,
&update.Returning)
@ -61,6 +64,11 @@ func (u *updateStatementImpl) MODEL(data interface{}) UpdateStatement {
return u
}
func (u *updateStatementImpl) FROM(tables ...ReadableTable) UpdateStatement {
u.From.Tables = readableTablesToSerializerList(tables)
return u
}
func (u *updateStatementImpl) WHERE(expression BoolExpression) UpdateStatement {
u.Where.Condition = expression
return u