Skip to content

Commit d95102d

Browse files
lng2020delvh
andauthored
Fix wrong xorm Delete usage (#27995)
## Bug in Gitea I ran into this bug when I accidentally used the wrong redirect URL for the oauth2 provider when using mssql. But the oauth2 provider still got added. Most of the time, we use `Delete(&some{id: some.id})` or `In(condition).Delete(&some{})`, which specify the conditions. But the function uses `Delete(source)` when `source.Cfg` is a `TEXT` field and not empty. This will cause xorm `Delete` function not working in mssql. https://github.com/go-gitea/gitea/blob/61ff91f9603806df2505907614b9006bf721b9c8/models/auth/source.go#L234-L240 ## Reason Because the `TEXT` field can not be compared in mssql, xorm doesn't support it according to [this PR](https://gitea.com/xorm/xorm/pulls/2062) [related code](https://gitea.com/xorm/xorm/src/commit/b23798dc987af776bec867f4537ca129fd66328e/internal/statements/statement.go#L552-L558) in xorm ```go if statement.dialect.URI().DBType == schemas.MSSQL && (col.SQLType.Name == schemas.Text ||   col.SQLType.IsBlob() || col.SQLType.Name == schemas.TimeStampz) {   if utils.IsValueZero(fieldValue) {   continue   }   return nil, fmt.Errorf("column %s is a TEXT type with data %#v which cannot be as compare condition", col.Name, fieldValue.Interface())   } } ``` When using the `Delete` function in xorm, the non-empty fields will auto-set as conditions(perhaps some special fields are not?). If `TEXT` field is not empty, xorm will return an error. I only found this usage after searching, but maybe there is something I missing. --------- Co-authored-by: delvh <[email protected]>
1 parent f860fe3 commit d95102d

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

models/auth/source.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ func CreateSource(ctx context.Context, source *Source) error {
234234
err = registerableSource.RegisterSource()
235235
if err != nil {
236236
// remove the AuthSource in case of errors while registering configuration
237-
if _, err := db.GetEngine(ctx).Delete(source); err != nil {
237+
if _, err := db.GetEngine(ctx).ID(source.ID).Delete(new(Source)); err != nil {
238238
log.Error("CreateSource: Error while wrapOpenIDConnectInitializeError: %v", err)
239239
}
240240
}

0 commit comments

Comments
 (0)