From 1eb7c9d3e2e5d5a813268ffe12ef661d4a0ce186 Mon Sep 17 00:00:00 2001 From: Akshay Joshi Date: Mon, 11 Aug 2025 11:42:14 +0530 Subject: [PATCH] Added support for builtin locale provider while creating Collation. #8931 --- docs/en_US/collation_dialog.rst | 5 +- docs/en_US/images/collation_definition.png | Bin 11561 -> 61706 bytes docs/en_US/release_notes_9_7.rst | 1 + .../schemas/collations/static/js/collation.js | 3 +- .../collations/static/js/collation.ui.js | 29 +++-- .../collations/sql/12_plus/properties.sql | 4 +- .../collations/sql/15_plus/properties.sql | 2 +- .../collations/sql/16_plus/properties.sql | 2 +- .../collations/sql/17_plus/properties.sql | 3 +- .../{16_plus => 13_plus}/alter_collation.sql | 2 +- .../{16_plus => 13_plus}/create_collation.sql | 2 +- .../create_collation_with_extra_params.sql | 2 +- .../pg/13_plus/create_collation_with_libc.sql | 12 ++ .../{16_plus => 13_plus}/msql_collation.sql | 0 .../tests/pg/{16_plus => 13_plus}/test.json | 38 +++++- .../tests/pg/17_plus/alter_collation.sql | 12 ++ .../tests/pg/17_plus/create_collation.sql | 12 ++ .../17_plus/create_collation_with_builtin.sql | 12 ++ .../create_collation_with_extra_params.sql | 12 ++ .../pg/17_plus/create_collation_with_libc.sql | 12 ++ .../tests/pg/17_plus/msql_collation.sql | 5 + .../collations/tests/pg/17_plus/test.json | 117 ++++++++++++++++++ 22 files changed, 264 insertions(+), 23 deletions(-) rename web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/{16_plus => 13_plus}/alter_collation.sql (81%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/{16_plus => 13_plus}/create_collation.sql (80%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/{16_plus => 13_plus}/create_collation_with_extra_params.sql (77%) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/create_collation_with_libc.sql rename web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/{16_plus => 13_plus}/msql_collation.sql (100%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/{16_plus => 13_plus}/test.json (62%) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/alter_collation.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_builtin.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_extra_params.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_libc.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/msql_collation.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/test.json diff --git a/docs/en_US/collation_dialog.rst b/docs/en_US/collation_dialog.rst index c178f0887..9813a725c 100644 --- a/docs/en_US/collation_dialog.rst +++ b/docs/en_US/collation_dialog.rst @@ -40,6 +40,9 @@ settings: as the existing one, but will be an independent object. If you choose to copy an existing collation, you cannot modify the collation properties displayed on this tab. +* Use the drop-down listbox next to *Provider* to select a locale services associated + with the collation. Possible values are: icu, libc and builtin. + **Note:** The builtin option is available from v17 onwards. * Use the *Locale* field to specify a locale; a locale specifies language and language formatting characteristics. If you specify this, you cannot specify either of the following parameters. To view a list of locales supported by @@ -50,8 +53,6 @@ settings: * Use the *LC_CTYPE* field to specify a locale with specified character classification. The locale must be applicable to the current database encoding. (See CREATE DATABASE for details.) -* Use the drop-down listbox next to *Locale Provider* to select a locale services associated - with the collation. Possible values are: icu, libc. libc is the default. * Move the switch next to *Deterministic* to *YES* to specify whether the collation should use deterministic comparisons. By default, this option is set to true. In a deterministic comparison, strings that are not byte-wise equal are considered diff --git a/docs/en_US/images/collation_definition.png b/docs/en_US/images/collation_definition.png index 49f134d44e0f461ddc3edf27b34f89dfafe8a6a1..0edbe963f3c3e81540b7596b0305c1dffbfbaa3f 100644 GIT binary patch literal 61706 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�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 - Add support for automatic updates in the pgAdmin 4 Desktop application on macOS. | `Issue #6456 `_ - Added GENERIC_PLAN, MEMORY, SERIALIZE option to EXPLAIN/EXPLAIN ANALYZE command. | `Issue #8917 `_ - Add support for server tag-based filtering in the Object Explorer. + | `Issue #8931 `_ - Added support for builtin locale provider while creating Collation. | `Issue #8935 `_ - Added all new connection string parameters introduced in PostgreSQL 16 and later. Housekeeping diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.js index 965dd5457..cead8555d 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.js @@ -79,7 +79,8 @@ define('pgadmin.node.collation', [ { owner: pgBrowser.serverInfo[treeNodeInfo.server._id].user.name, schema: ('schema' in treeNodeInfo)? treeNodeInfo.schema.label : '' - } + }, + treeNodeInfo ); } }); diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.ui.js index 15fae8365..a7cd5cc53 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.ui.js @@ -12,7 +12,7 @@ import gettext from 'sources/gettext'; import { isEmptyString } from 'sources/validators'; export default class CollationSchema extends BaseUISchema { - constructor(fieldOptions = {},initValues={}) { + constructor(fieldOptions = {}, initValues={}, nodeInfo={}) { super({ name: undefined, oid: undefined, @@ -30,6 +30,7 @@ export default class CollationSchema extends BaseUISchema { this.schemaList = fieldOptions.schemaList; this.ownerList = fieldOptions.rolesList; this.collationsList = fieldOptions.collationsList; + this.nodeInfo = nodeInfo; } get idAttribute() { @@ -86,16 +87,24 @@ export default class CollationSchema extends BaseUISchema { deps: ['locale', 'lc_collate', 'lc_type'], }, { - id: 'provider', label: gettext('Locale Provider'), + id: 'provider', label: gettext('Provider'), editable: false, type: 'select',mode: ['create'], group: gettext('Definition'), readonly: function (state) { return !obj.isNew(state); }, - options: [{ - label: gettext('icu'), - value: 'icu', - }, { - label: gettext('libc'), - value: 'libc', - }], + options: function() { + let options = [{ + label: gettext('icu'), + value: 'icu', + }, { + label: gettext('libc'), + value: 'libc', + }]; + if(obj.getServerVersion() >= 170000) { + options.push({ + label: gettext('builtin'), value: 'builtin', + }); + } + return Promise.resolve(options); + }, min_version: 110000, deps: ['copy_collation'], depChange: (state)=>{ @@ -110,7 +119,7 @@ export default class CollationSchema extends BaseUISchema { } }, { - id: 'provider', label: gettext('Locale Provider'), + id: 'provider', label: gettext('Provider'), type: 'text',mode: ['properties', 'edit'], group: gettext('Definition'), readonly: true, min_version: 110000, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/12_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/12_plus/properties.sql index 976dd8802..0f633710f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/12_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/12_plus/properties.sql @@ -1,7 +1,7 @@ SELECT c.oid, c.collname AS name, c.collcollate AS lc_collate, c.collctype AS lc_type, pg_catalog.pg_get_userbyid(c.collowner) AS owner, c.collisdeterministic AS is_deterministic, c.collversion AS version, - c.collprovider AS provider, des.description, n.nspname AS schema - + CASE WHEN c.collprovider = 'i' THEN 'icu' ELSE 'libc' END provider, + des.description, n.nspname AS schema FROM pg_catalog.pg_collation c JOIN pg_catalog.pg_namespace n ON n.oid=c.collnamespace LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=c.oid AND des.classoid='pg_collation'::regclass) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/15_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/15_plus/properties.sql index 8fa6f6c0e..080cb432a 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/15_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/15_plus/properties.sql @@ -1,6 +1,6 @@ SELECT c.oid, c.collname AS name, COALESCE(c.collcollate, c.colliculocale) AS lc_collate, COALESCE(c.collctype, c.colliculocale) AS lc_type, c.collisdeterministic AS is_deterministic, c.collversion AS version, - c.collprovider AS provider, + CASE WHEN c.collprovider = 'i' THEN 'icu' ELSE 'libc' END provider, pg_catalog.pg_get_userbyid(c.collowner) AS owner, description, n.nspname AS schema FROM pg_catalog.pg_collation c JOIN pg_catalog.pg_namespace n ON n.oid=c.collnamespace diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/16_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/16_plus/properties.sql index ef0f51084..c81be5503 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/16_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/16_plus/properties.sql @@ -1,6 +1,6 @@ SELECT c.oid, c.collname AS name, COALESCE(c.collcollate, c.colliculocale) AS lc_collate, COALESCE(c.collctype, c.colliculocale) AS lc_type, c.collisdeterministic AS is_deterministic, c.collversion AS version, - c.collprovider AS provider, c.collicurules AS rules, + CASE WHEN c.collprovider = 'i' THEN 'icu' ELSE 'libc' END provider, c.collicurules AS rules, pg_catalog.pg_get_userbyid(c.collowner) AS owner, description, n.nspname AS schema FROM pg_catalog.pg_collation c JOIN pg_catalog.pg_namespace n ON n.oid=c.collnamespace diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/17_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/17_plus/properties.sql index c567e94e4..cdbd22be9 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/17_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/17_plus/properties.sql @@ -1,6 +1,7 @@ SELECT c.oid, c.collname AS name, COALESCE(c.collcollate, c.colllocale) AS lc_collate, COALESCE(c.collctype, c.colllocale) AS lc_type, c.collisdeterministic AS is_deterministic, c.collversion AS version, - c.collprovider AS provider, c.collicurules AS rules, + CASE WHEN c.collprovider = 'i' THEN 'icu' WHEN c.collprovider = 'b' THEN 'builtin' + ELSE 'libc' END provider, c.collicurules AS rules, pg_catalog.pg_get_userbyid(c.collowner) AS owner, description, n.nspname AS schema FROM pg_catalog.pg_collation c JOIN pg_catalog.pg_namespace n ON n.oid=c.collnamespace diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/alter_collation.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/alter_collation.sql similarity index 81% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/alter_collation.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/alter_collation.sql index 215b1a41f..5548a4701 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/alter_collation.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/alter_collation.sql @@ -3,7 +3,7 @@ -- DROP COLLATION IF EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#a"; CREATE COLLATION IF NOT EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#a" - (LC_COLLATE = 'C', LC_CTYPE = 'C', PROVIDER = 'c', DETERMINISTIC = true); + (LC_COLLATE = 'C', LC_CTYPE = 'C', PROVIDER = 'libc', DETERMINISTIC = true); ALTER COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#a" OWNER TO ; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/create_collation.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/create_collation.sql similarity index 80% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/create_collation.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/create_collation.sql index 551417cd2..5595fb16c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/create_collation.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/create_collation.sql @@ -3,7 +3,7 @@ -- DROP COLLATION IF EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#"; CREATE COLLATION IF NOT EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#" - (LC_COLLATE = 'C', LC_CTYPE = 'C', PROVIDER = 'c', DETERMINISTIC = true); + (LC_COLLATE = 'C', LC_CTYPE = 'C', PROVIDER = 'libc', DETERMINISTIC = true); ALTER COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#" OWNER TO ; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/create_collation_with_extra_params.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/create_collation_with_extra_params.sql similarity index 77% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/create_collation_with_extra_params.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/create_collation_with_extra_params.sql index 279d06ffd..115c2a77c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/create_collation_with_extra_params.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/create_collation_with_extra_params.sql @@ -3,7 +3,7 @@ -- DROP COLLATION IF EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#b"; CREATE COLLATION IF NOT EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#b" - (LC_COLLATE = 'locale', LC_CTYPE = 'locale', PROVIDER = 'i', DETERMINISTIC = true, VERSION = '1'); + (LC_COLLATE = 'locale', LC_CTYPE = 'locale', PROVIDER = 'icu', DETERMINISTIC = true, VERSION = '1'); ALTER COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#b" OWNER TO ; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/create_collation_with_libc.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/create_collation_with_libc.sql new file mode 100644 index 000000000..568879b4c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/create_collation_with_libc.sql @@ -0,0 +1,12 @@ +-- Collation: Cl1_$%{}[]()&*^!@"'`\/#b; + +-- DROP COLLATION IF EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#b"; + +CREATE COLLATION IF NOT EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + (LC_COLLATE = 'C', LC_CTYPE = 'C', PROVIDER = 'libc', DETERMINISTIC = true, VERSION = '1'); + +ALTER COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + OWNER TO ; + +COMMENT ON COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + IS 'libc'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/msql_collation.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/msql_collation.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/msql_collation.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/msql_collation.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/test.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/test.json similarity index 62% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/test.json rename to web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/test.json index a76967ae2..e680befb9 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/16_plus/test.json +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/13_plus/test.json @@ -33,12 +33,12 @@ "name": "Drop Collation", "endpoint": "NODE-collation.delete_id", "data": { - "name": "Cl1_$%{}[]()&*^!@\"'`\\/#b" + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#a" } }, { "type": "create", - "name": "Create Collation with extra parameters", + "name": "Create Collation with icu provider", "endpoint": "NODE-collation.obj", "sql_endpoint": "NODE-collation.sql_id", "data": { @@ -53,6 +53,40 @@ }, "store_object_id": true, "expected_sql_file": "create_collation_with_extra_params.sql" + }, + { + "type": "delete", + "name": "Drop Collation", + "endpoint": "NODE-collation.delete_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#b" + } + }, + { + "type": "create", + "name": "Create Collation with libc provider", + "endpoint": "NODE-collation.obj", + "sql_endpoint": "NODE-collation.sql_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#b", + "schema": "testschema", + "owner": "postgres", + "description": "libc", + "locale": "C", + "provider": "libc", + "is_deterministic": true, + "version": "1" + }, + "store_object_id": true, + "expected_sql_file": "create_collation_with_libc.sql" + }, + { + "type": "delete", + "name": "Drop Collation", + "endpoint": "NODE-collation.delete_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#b" + } } ] } diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/alter_collation.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/alter_collation.sql new file mode 100644 index 000000000..5548a4701 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/alter_collation.sql @@ -0,0 +1,12 @@ +-- Collation: Cl1_$%{}[]()&*^!@"'`\/#a; + +-- DROP COLLATION IF EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#a"; + +CREATE COLLATION IF NOT EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#a" + (LC_COLLATE = 'C', LC_CTYPE = 'C', PROVIDER = 'libc', DETERMINISTIC = true); + +ALTER COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#a" + OWNER TO ; + +COMMENT ON COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#a" + IS 'Description for alter'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation.sql new file mode 100644 index 000000000..5595fb16c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation.sql @@ -0,0 +1,12 @@ +-- Collation: Cl1_$%{}[]()&*^!@"'`\/#; + +-- DROP COLLATION IF EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#"; + +CREATE COLLATION IF NOT EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#" + (LC_COLLATE = 'C', LC_CTYPE = 'C', PROVIDER = 'libc', DETERMINISTIC = true); + +ALTER COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#" + OWNER TO ; + +COMMENT ON COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#" + IS 'Description'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_builtin.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_builtin.sql new file mode 100644 index 000000000..93421fbb6 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_builtin.sql @@ -0,0 +1,12 @@ +-- Collation: Cl1_$%{}[]()&*^!@"'`\/#b; + +-- DROP COLLATION IF EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#b"; + +CREATE COLLATION IF NOT EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + (LC_COLLATE = 'C', LC_CTYPE = 'C', PROVIDER = 'builtin', DETERMINISTIC = true, VERSION = '1'); + +ALTER COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + OWNER TO ; + +COMMENT ON COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + IS 'builtin'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_extra_params.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_extra_params.sql new file mode 100644 index 000000000..115c2a77c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_extra_params.sql @@ -0,0 +1,12 @@ +-- Collation: Cl1_$%{}[]()&*^!@"'`\/#b; + +-- DROP COLLATION IF EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#b"; + +CREATE COLLATION IF NOT EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + (LC_COLLATE = 'locale', LC_CTYPE = 'locale', PROVIDER = 'icu', DETERMINISTIC = true, VERSION = '1'); + +ALTER COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + OWNER TO ; + +COMMENT ON COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + IS 'Description for extra params'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_libc.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_libc.sql new file mode 100644 index 000000000..1628e6093 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/create_collation_with_libc.sql @@ -0,0 +1,12 @@ +-- Collation: Cl1_$%{}[]()&*^!@"'`\/#b; + +-- DROP COLLATION IF EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#b"; + +CREATE COLLATION IF NOT EXISTS testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + (LC_COLLATE = 'C', LC_CTYPE = 'C', PROVIDER = 'libc', DETERMINISTIC = true); + +ALTER COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + OWNER TO ; + +COMMENT ON COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#b" + IS 'libc'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/msql_collation.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/msql_collation.sql new file mode 100644 index 000000000..f58616dcb --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/msql_collation.sql @@ -0,0 +1,5 @@ +COMMENT ON COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#" + IS 'Description for alter'; + +ALTER COLLATION testschema."Cl1_$%{}[]()&*^!@""'`\/#" + RENAME TO "Cl1_$%{}[]()&*^!@""'`\/#a"; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/test.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/test.json new file mode 100644 index 000000000..138ac5201 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/pg/17_plus/test.json @@ -0,0 +1,117 @@ +{ + "scenarios": [ + { + "type": "create", + "name": "Create Collation", + "endpoint": "NODE-collation.obj", + "sql_endpoint": "NODE-collation.sql_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#", + "schema": "testschema", + "copy_collation": "pg_catalog.\"C\"", + "description": "Description" + }, + "store_object_id": true, + "expected_sql_file": "create_collation.sql" + }, + { + "type": "alter", + "name": "Alter Collation", + "endpoint": "NODE-collation.obj_id", + "sql_endpoint": "NODE-collation.sql_id", + "msql_endpoint": "NODE-collation.msql_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#a", + "schema": "testschema", + "description": "Description for alter" + }, + "expected_sql_file": "alter_collation.sql", + "expected_msql_file": "msql_collation.sql" + }, + { + "type": "delete", + "name": "Drop Collation", + "endpoint": "NODE-collation.delete_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#a" + } + }, + { + "type": "create", + "name": "Create Collation with icu provider", + "endpoint": "NODE-collation.obj", + "sql_endpoint": "NODE-collation.sql_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#b", + "schema": "testschema", + "owner": "postgres", + "description": "Description for extra params", + "locale": "locale", + "provider": "icu", + "is_deterministic": true, + "version": "1" + }, + "store_object_id": true, + "expected_sql_file": "create_collation_with_extra_params.sql" + }, + { + "type": "delete", + "name": "Drop Collation", + "endpoint": "NODE-collation.delete_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#b" + } + }, + { + "type": "create", + "name": "Create Collation with libc provider", + "endpoint": "NODE-collation.obj", + "sql_endpoint": "NODE-collation.sql_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#b", + "schema": "testschema", + "owner": "postgres", + "description": "libc", + "locale": "C", + "provider": "libc", + "is_deterministic": true + }, + "store_object_id": true, + "expected_sql_file": "create_collation_with_libc.sql" + }, + { + "type": "delete", + "name": "Drop Collation", + "endpoint": "NODE-collation.delete_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#b" + } + }, + { + "type": "create", + "name": "Create Collation with builtin provider", + "endpoint": "NODE-collation.obj", + "sql_endpoint": "NODE-collation.sql_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#b", + "schema": "testschema", + "owner": "postgres", + "description": "builtin", + "locale": "C", + "provider": "builtin", + "is_deterministic": true, + "version": "1" + }, + "store_object_id": true, + "expected_sql_file": "create_collation_with_builtin.sql" + }, + { + "type": "delete", + "name": "Drop Collation", + "endpoint": "NODE-collation.delete_id", + "data": { + "name": "Cl1_$%{}[]()&*^!@\"'`\\/#b" + } + } + ] +}