Add USING clause support for DELETE statements

This commit is contained in:
go-jet 2021-12-08 18:14:57 +01:00
parent 72e8d7d584
commit 60ffd004c5
6 changed files with 134 additions and 11 deletions

View file

@ -6,6 +6,7 @@ import "github.com/go-jet/jet/v2/internal/jet"
type DeleteStatement interface {
Statement
USING(tables ...ReadableTable) DeleteStatement
WHERE(expression BoolExpression) DeleteStatement
ORDER_BY(orderByClauses ...OrderByClause) DeleteStatement
LIMIT(limit int64) DeleteStatement
@ -15,6 +16,7 @@ type deleteStatementImpl struct {
jet.SerializerStatement
Delete jet.ClauseStatementBegin
Using jet.ClauseFrom
Where jet.ClauseWhere
OrderBy jet.ClauseOrderBy
Limit jet.ClauseLimit
@ -22,10 +24,15 @@ type deleteStatementImpl struct {
func newDeleteStatement(table Table) DeleteStatement {
newDelete := &deleteStatementImpl{}
newDelete.SerializerStatement = jet.NewStatementImpl(Dialect, jet.DeleteStatementType, newDelete, &newDelete.Delete,
&newDelete.Where, &newDelete.OrderBy, &newDelete.Limit)
newDelete.SerializerStatement = jet.NewStatementImpl(Dialect, jet.DeleteStatementType, newDelete,
&newDelete.Delete,
&newDelete.Using,
&newDelete.Where,
&newDelete.OrderBy,
&newDelete.Limit)
newDelete.Delete.Name = "DELETE FROM"
newDelete.Using.Name = "USING"
newDelete.Delete.Tables = append(newDelete.Delete.Tables, table)
newDelete.Where.Mandatory = true
newDelete.Limit.Count = -1
@ -33,6 +40,11 @@ func newDeleteStatement(table Table) DeleteStatement {
return newDelete
}
func (d *deleteStatementImpl) USING(tables ...ReadableTable) DeleteStatement {
d.Using.Tables = readableTablesToSerializerList(tables)
return d
}
func (d *deleteStatementImpl) WHERE(expression BoolExpression) DeleteStatement {
d.Where.Condition = expression
return d

View file

@ -58,7 +58,7 @@ type SelectStatement interface {
AsTable(alias string) SelectTable
}
//SELECT creates new SelectStatement with list of projections
// SELECT creates new SelectStatement with list of projections
func SELECT(projection Projection, projections ...Projection) SelectStatement {
return newSelectStatement(nil, append([]Projection{projection}, projections...))
}
@ -106,10 +106,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
}
@ -189,3 +186,11 @@ func toJetFrameOffset(offset interface{}) 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
}