diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fa7bb06..9893239 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,11 +7,12 @@ jobs: build: strategy: matrix: - ruby_version: ["3.4", "3.3"] + ruby_version: ["4.0", "3.3"] + postgres_version: ["18", "15"] runs-on: ubuntu-latest services: postgres: - image: postgres:17 + image: postgres:${{ matrix.postgres_version }} env: # Default database that is created when the image is first started. POSTGRES_DB: active_record_collation_test diff --git a/lib/active_record/collation/schema_statements.rb b/lib/active_record/collation/schema_statements.rb index 649d67b..c266e77 100644 --- a/lib/active_record/collation/schema_statements.rb +++ b/lib/active_record/collation/schema_statements.rb @@ -18,14 +18,31 @@ def drop_collation(name) end def collations - internal_exec_query(<<~SQL, 'SCHEMA') - SELECT - pg_collation.collname, - pg_collation.colllocale - FROM pg_collation - JOIN pg_namespace - ON pg_collation.collnamespace = pg_namespace.oid AND pg_namespace.nspname = 'public' - SQL + internal_exec_query(collations_sql, 'SCHEMA') + end + + private + + def collations_sql # rubocop:disable Metrics/MethodLength + if database_version >= 170_000 + <<~SQL + SELECT + pg_collation.collname, + pg_collation.colllocale + FROM pg_collation + JOIN pg_namespace + ON pg_collation.collnamespace = pg_namespace.oid AND pg_namespace.nspname = 'public' + SQL + else + <<~SQL + SELECT + pg_collation.collname, + pg_collation.colliculocale AS colllocale + FROM pg_collation + JOIN pg_namespace + ON pg_collation.collnamespace = pg_namespace.oid AND pg_namespace.nspname = 'public' + SQL + end end end end diff --git a/test/dummy/db/schema.rb b/test/dummy/db/schema.rb index e3c5d98..4aeed5a 100644 --- a/test/dummy/db/schema.rb +++ b/test/dummy/db/schema.rb @@ -14,8 +14,8 @@ # These are extensions that must be enabled in order to support this database enable_extension "pg_catalog.plpgsql" - create_collation("natural_de", "de-u-ka-shifted-kn-ks-level1-kv-symbol") - create_collation("natural_en", "en-u-ka-shifted-kn-ks-level1-kv-symbol") + create_collation("natural_de", "de-u-kn-true-ks-level1-ka-shifted-kv-symbol") + create_collation("natural_en", "en-u-kn-true-ks-level1-ka-shifted-kv-symbol") create_table "clients", force: :cascade do |t| t.text "name", null: false