mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-07-06 00:04:02 +00:00
3ccd4ed85c
* filer: skip COLLATE "C" list fallback on CockroachDB CockroachDB string comparison is already byte-ordered, so wrapping the list queries in COLLATE "C" can never change result order. It reports datcollate=en_US.utf8 regardless of how the database was created, so the collation check always misfires and forces the fallback. On 22.1 and older COLLATE "C" is rejected as an invalid locale, turning every filer list query into a hard failure. Detect the backend via version() and keep the default ordering. * filer: test CockroachDB collation detection Cover the CockroachDB skip path and the locale-aware Postgres force path with go-sqlmock.
50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
package postgres
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/DATA-DOG/go-sqlmock"
|
|
)
|
|
|
|
func TestConfigureListOrderingSkipsCockroachDB(t *testing.T) {
|
|
db, mock, err := sqlmock.New()
|
|
if err != nil {
|
|
t.Fatalf("sqlmock: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
mock.ExpectQuery("SELECT version\\(\\)").WillReturnRows(
|
|
sqlmock.NewRows([]string{"version"}).AddRow("CockroachDB CCL v22.1.22 (x86_64-pc-linux-gnu)"))
|
|
|
|
gen := &SqlGenPostgres{}
|
|
ConfigureListOrdering(db, gen)
|
|
if gen.ForceBinaryCollation {
|
|
t.Fatal("CockroachDB default ordering is byte-ordered; COLLATE \"C\" must not be forced")
|
|
}
|
|
if err := mock.ExpectationsWereMet(); err != nil {
|
|
t.Fatalf("unmet expectations: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestConfigureListOrderingForcesBinaryOnLocalePostgres(t *testing.T) {
|
|
db, mock, err := sqlmock.New()
|
|
if err != nil {
|
|
t.Fatalf("sqlmock: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
mock.ExpectQuery("SELECT version\\(\\)").WillReturnRows(
|
|
sqlmock.NewRows([]string{"version"}).AddRow("PostgreSQL 16.2 on x86_64-pc-linux-gnu"))
|
|
mock.ExpectQuery("datcollate").WillReturnRows(
|
|
sqlmock.NewRows([]string{"collation_name", "datcollate"}).AddRow(nil, "en_US.UTF-8"))
|
|
|
|
gen := &SqlGenPostgres{}
|
|
ConfigureListOrdering(db, gen)
|
|
if !gen.ForceBinaryCollation {
|
|
t.Fatal("locale-aware Postgres collation must force byte ordering")
|
|
}
|
|
if err := mock.ExpectationsWereMet(); err != nil {
|
|
t.Fatalf("unmet expectations: %v", err)
|
|
}
|
|
}
|