Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,15 @@ func (db *DeleteBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{

db.injection.WriteTo(buf, deleteMarkerAfterDeleteFrom)

if flavor == SQLServer {
if len(db.returning) > 0 {
buf.WriteLeadingString("OUTPUT ")
buf.WriteStringsPrefixed("DELETED.", db.returning, ", ")
}

db.injection.WriteTo(buf, insertMarkerAfterReturning)
}

if db.WhereClause != nil {
db.whereClauseProxy.WhereClause = db.WhereClause
defer func() {
Expand Down
2 changes: 1 addition & 1 deletion delete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func TestDeleteBuilderReturning(t *testing.T) {
a.Equal("DELETE FROM user WHERE id = ? RETURNING id, deleted_at", sql)

sql, _ = db.BuildWithFlavor(SQLServer)
a.Equal("DELETE FROM user WHERE id = @p1", sql)
a.Equal("DELETE FROM user OUTPUT DELETED.id, DELETED.deleted_at WHERE id = @p1", sql)

sql, _ = db.BuildWithFlavor(CQL)
a.Equal("DELETE FROM user WHERE id = ?", sql)
Expand Down
9 changes: 9 additions & 0 deletions insert.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,15 @@ func (ib *InsertBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{
ib.injection.WriteTo(buf, insertMarkerAfterCols)
}

if flavor == SQLServer {
if len(ib.returning) > 0 {
buf.WriteLeadingString("OUTPUT ")
buf.WriteStringsPrefixed("INSERTED.", ib.returning, ", ")
}

ib.injection.WriteTo(buf, insertMarkerAfterReturning)
}

if ib.sbHolder != "" {
buf.WriteString(" ")
buf.WriteString(ib.sbHolder)
Expand Down
2 changes: 1 addition & 1 deletion insert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ func TestInsertBuilderReturning(test *testing.T) {
a.Equal("INSERT INTO user (name) VALUES (?) RETURNING id", sql)

sql, _ = ib.BuildWithFlavor(SQLServer)
a.Equal("INSERT INTO user (name) VALUES (@p1)", sql)
a.Equal("INSERT INTO user (name) OUTPUT INSERTED.id VALUES (@p1)", sql)

sql, _ = ib.BuildWithFlavor(CQL)
a.Equal("INSERT INTO user (name) VALUES (?)", sql)
Expand Down
10 changes: 10 additions & 0 deletions stringbuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,16 @@ func (sb *stringBuilder) WriteStrings(ss []string, sep string) {
}
}

func (sb *stringBuilder) WriteStringsPrefixed(prefix string, ss []string, sep string) {
prefixedSs := []string{}

for _, s := range ss {
prefixedSs = append(prefixedSs, prefix+s)
}

sb.WriteStrings(prefixedSs, sep)
}

func (sb *stringBuilder) WriteRune(r rune) {
sb.builder.WriteRune(r)
}
Expand Down
9 changes: 9 additions & 0 deletions update.go
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,15 @@ func (ub *UpdateBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{

ub.injection.WriteTo(buf, updateMarkerAfterSet)

if flavor == SQLServer {
if len(ub.returning) > 0 {
buf.WriteLeadingString("OUTPUT ")
buf.WriteStringsPrefixed("INSERTED.", ub.returning, ", ")
}

ub.injection.WriteTo(buf, insertMarkerAfterReturning)
}

if flavor != MySQL {
// For ISO SQL, CTE table names should be written after FROM keyword.
if ub.cteBuilder != nil {
Expand Down
2 changes: 1 addition & 1 deletion update_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ func TestUpdateBuilderReturning(t *testing.T) {
a.Equal("UPDATE user SET name = ? WHERE id = ? RETURNING id, updated_at", sql)

sql, _ = ub.BuildWithFlavor(SQLServer)
a.Equal("UPDATE user SET name = @p1 WHERE id = @p2", sql)
a.Equal("UPDATE user SET name = @p1 OUTPUT INSERTED.id, INSERTED.updated_at WHERE id = @p2", sql)

sql, _ = ub.BuildWithFlavor(CQL)
a.Equal("UPDATE user SET name = ? WHERE id = ?", sql)
Expand Down