mirror of
https://github.com/zitadel/zitadel.git
synced 2025-12-28 12:56:32 +00:00
This pull request fixes an issue where the repository would fail to scan organization or instance structs if the `domains` column was `NULL`. ## Which problems are solved If the `domains` column of `orgs` or `instances` was `NULL`, the repository failed scanning into the structs. This happened because the scanning mechanism did not correctly handle `NULL` JSONB columns. ## How the problems are solved A new generic type `JSONArray[T]` is introduced, which implements the `sql.Scanner` interface. This type can correctly scan JSON arrays from the database, including handling `NULL` values gracefully. The repositories for instances and organizations have been updated to use this new type for the domains field. The SQL queries have also been improved to use `FILTER` with `jsonb_agg` for better readability and performance when aggregating domains. ## Additional changes * An unnecessary cleanup step in the organization domain tests for already removed domains has been removed. * The `pgxscan` library has been replaced with `sqlscan` for scanning `database/sql`.Rows. * Minor cleanups in integration tests.
22 lines
341 B
Go
22 lines
341 B
Go
package repository
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
)
|
|
|
|
type JSONArray[T any] []*T
|
|
|
|
func (a JSONArray[T]) Scan(src any) error {
|
|
switch s := src.(type) {
|
|
case string:
|
|
return json.Unmarshal([]byte(s), &a)
|
|
case []byte:
|
|
return json.Unmarshal(s, &a)
|
|
case nil:
|
|
return nil
|
|
default:
|
|
return errors.New("unsupported scan source")
|
|
}
|
|
}
|