diff --git a/docs/en_US/database_dialog.rst b/docs/en_US/database_dialog.rst index b89161e8bf2..408f1eef034 100644 --- a/docs/en_US/database_dialog.rst +++ b/docs/en_US/database_dialog.rst @@ -19,6 +19,9 @@ Use the fields in the *General* tab to identify the database: * Use the *Database* field to add a descriptive name for the database. The name will be displayed in the *pgAdmin* tree control. +* Use the *OID* field to specify the object identifier to be used for the new + database. Users can specify the value greater than 16383. This option is available + from v15 onwards. * Select the owner of the database from the drop-down listbox in the *Owner* field. * Store notes about the database in the *Comment* field. @@ -38,11 +41,22 @@ Use the *Definition* tab to set properties for the database: * Select a tablespace from the drop-down listbox in the *Tablespace* field. The selected tablespace will be the default tablespace used to contain database objects. +* Select the strategy from the drop-down listbox in the *Strategy* field while + creating a new database. This option is available from v15 onwards. +* Select the locale provider from the drop-down listbox in the *Locale Provider* + field for the default collation in this database. Possible values are: icu, libc. + This option is available from v15 onwards. * Select the collation order from the drop-down listbox in the *Collation* field. * Select the character classification from the drop-down listbox in the *Character Type* field. This affects the categorization of characters, e.g. lower, upper and digit. The default, or a blank field, uses the character classification of the template database. +* Select the icu locale from the drop-down listbox in the *ICU Locale* to + specifies the ICU locale ID if the ICU locale provider is used. + This option is available from v15 onwards. +* Specify the icu rules in the *ICU Rules* field to specify additional collation + rules to customize the behavior of the default collation of this database. + This option is available from v16 onwards. * Specify a connection limit in the *Connection Limit* field to configure the maximum number of connection requests. The default value (*-1*) allows unlimited connections to the database. diff --git a/docs/en_US/images/database_advanced.png b/docs/en_US/images/database_advanced.png index 1abe7f34ad3..91d817a403e 100644 Binary files a/docs/en_US/images/database_advanced.png and b/docs/en_US/images/database_advanced.png differ diff --git a/docs/en_US/images/database_definition.png b/docs/en_US/images/database_definition.png index b2b30cc8dde..c8be35c68dd 100644 Binary files a/docs/en_US/images/database_definition.png and b/docs/en_US/images/database_definition.png differ diff --git a/docs/en_US/images/database_general.png b/docs/en_US/images/database_general.png index 14bb935b289..37002046770 100644 Binary files a/docs/en_US/images/database_general.png and b/docs/en_US/images/database_general.png differ diff --git a/docs/en_US/images/database_parameters.png b/docs/en_US/images/database_parameters.png index 47019cdbffa..09430edc7f3 100644 Binary files a/docs/en_US/images/database_parameters.png and b/docs/en_US/images/database_parameters.png differ diff --git a/docs/en_US/images/database_security.png b/docs/en_US/images/database_security.png index 55db7a6978f..8d3265db47d 100644 Binary files a/docs/en_US/images/database_security.png and b/docs/en_US/images/database_security.png differ diff --git a/docs/en_US/images/database_sql.png b/docs/en_US/images/database_sql.png index 699c4732909..c284213d714 100644 Binary files a/docs/en_US/images/database_sql.png and b/docs/en_US/images/database_sql.png differ diff --git a/docs/en_US/release_notes_7_7.rst b/docs/en_US/release_notes_7_7.rst index eccd3f85fd1..2fffa44252e 100644 --- a/docs/en_US/release_notes_7_7.rst +++ b/docs/en_US/release_notes_7_7.rst @@ -21,10 +21,12 @@ New features ************ | `Issue #4805 `_ - Added all the new options of the 'WITH' clause in the subscription dialog. + | `Issue #6383 `_ - Added Strategy, Locale Provider, ICU Locale, ICU Rules, and OID options while creating a database. Housekeeping ************ + | `Issue #2411 `_ - Added the 'data type' column in the properties tab of the Columns collection node. Bug fixes ********* diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py index 0f223b861c7..b0e4f6b3b26 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py @@ -193,6 +193,10 @@ class DatabaseView(PGChildNodeView): {'get': 'get_ctypes'}, {'get': 'get_ctypes'} ], + 'get_icu_locale': [ + {'get': 'get_icu_locale'}, + {'get': 'get_icu_locale'} + ], 'vopts': [ {}, {'get': 'variable_options'} ], @@ -634,7 +638,7 @@ def get_ctypes(self, gid, sid, did=None): """ This function to return list of available collation/character types """ - res = [{'label': '', 'value': ''}] + res = [] default_list = ['C', 'POSIX'] for val in default_list: res.append( @@ -656,6 +660,28 @@ def get_ctypes(self, gid, sid, did=None): status=200 ) + @check_precondition(action="get_icu_locale") + def get_icu_locale(self, gid, sid, did=None): + """ + This function is used to get the list of icu locale + """ + res = [] + SQL = render_template( + "/".join([self.template_path, 'get_icu_locale.sql']) + ) + status, rset = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=rset) + + for row in rset['rows']: + res.append( + {'label': row['colliculocale'], 'value': row['colliculocale']}) + + return make_json_response( + data=res, + status=200 + ) + @check_precondition(action="create") def create(self, gid, sid): """Create the database.""" @@ -1230,6 +1256,12 @@ def sql(self, gid, sid, did): did=did, conn=conn, last_system_oid=0, show_system_objects=False, ) + + # try to connect the db if not connected + # don't delete the below code as it is needed for Database RESQL tests. + if not conn.connected(): + conn.connect() + status, res = conn.execute_dict(SQL) if not status: diff --git a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js index c233c9a975c..19eb6b43423 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js +++ b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js @@ -332,6 +332,10 @@ define('pgadmin.node.database', [ cacheLevel: 'server', }); + let icu_locale = ()=>getNodeAjaxOptions('get_icu_locale', this, treeNodeInfo, itemNodeData, { + cacheLevel: 'server', + }); + return new DatabaseSchema( ()=>getNodeVariableSchema(this, treeNodeInfo, itemNodeData, false, true), (privileges)=>getNodePrivilegeRoleSchema(this, treeNodeInfo, itemNodeData, privileges), @@ -360,6 +364,7 @@ define('pgadmin.node.database', [ }), datcollate: c_types, datctype: c_types, + daticulocale: icu_locale, }, { datowner: pgBrowser.serverInfo[treeNodeInfo.server._id].user.name, diff --git a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js index a734b7a7ec6..453a4a1d354 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js @@ -61,6 +61,7 @@ export default class DatabaseSchema extends BaseUISchema { char_type: undefined, datconnlimit: -1, datallowconn: undefined, + datlocaleprovider: 'libc', variables: [], privileges: [], securities: [], @@ -82,6 +83,7 @@ export default class DatabaseSchema extends BaseUISchema { spcname: [], datcollate: [], datctype: [], + daticulocale: [], ...fieldOptions, }; } @@ -100,6 +102,9 @@ export default class DatabaseSchema extends BaseUISchema { id: 'did', label: gettext('OID'), cell: 'text', mode: ['properties'], editable: false, type: 'text', },{ + id: 'datoid', label: gettext('OID'), mode: ['create'], type: 'int', + min: 16384, min_version: 150000 + }, { id: 'datowner', label: gettext('Owner'), editable: false, type: 'select', options: this.fieldOptions.role, controlProps: { allowClear: false }, isCollectionProperty: true, @@ -125,17 +130,90 @@ export default class DatabaseSchema extends BaseUISchema { editable: false, type: 'select', group: gettext('Definition'), options: this.fieldOptions.spcname, controlProps: { allowClear: false }, + },{ + id: 'datstrategy', label: gettext('Strategy'), + editable: false, type: 'select', group: gettext('Definition'), + readonly: function(state) {return !obj.isNew(state); }, + mode: ['create'], + options: [{ + label: gettext('WAL Log'), + value: 'wal_log', + }, { + label: gettext('File Copy'), + value: 'file_copy', + }], + min_version: 150000 + }, { + id: 'datlocaleprovider', label: gettext('Locale Provider'), + editable: false, type: 'select', group: gettext('Definition'), + readonly: function(state) {return !obj.isNew(state); }, + controlProps: { allowClear: false }, + options: [{ + label: gettext('icu'), + value: 'icu', + }, { + label: gettext('libc'), + value: 'libc', + }], + min_version: 150000 },{ id: 'datcollate', label: gettext('Collation'), editable: false, type: 'select', group: gettext('Definition'), readonly: function(state) {return !obj.isNew(state); }, options: this.fieldOptions.datcollate, + deps: ['datlocaleprovider'], + depChange: (state)=>{ + if (state.datlocaleprovider !== 'libc') + state.datcollate = ''; + }, + disabled: function(state) { + return state.datlocaleprovider !== 'libc'; + }, },{ id: 'datctype', label: gettext('Character type'), editable: false, type: 'select', group: gettext('Definition'), readonly: function(state) {return !obj.isNew(state); }, options: this.fieldOptions.datctype, + deps: ['datlocaleprovider'], + depChange: (state)=>{ + if (state.datlocaleprovider !== 'libc') + state.datctype = ''; + }, + disabled: function(state) { + return state.datlocaleprovider !== 'libc'; + }, },{ + id: 'daticulocale', label: gettext('ICU Locale'), + editable: false, type: 'select', group: gettext('Definition'), + readonly: function(state) {return !obj.isNew(state); }, + options: this.fieldOptions.daticulocale, + deps: ['datlocaleprovider'], + depChange: (state)=>{ + if (state.datlocaleprovider !== 'icu') + state.daticulocale = ''; + }, + disabled: function(state) { + return state.datlocaleprovider !== 'icu'; + }, + min_version: 150000 + }, { + id: 'datcollversion', label: gettext('Collation Version'), + editable: false, type: 'text', group: gettext('Definition'), + mode: ['properties'], min_version: 150000 + }, { + id: 'daticurules', label: gettext('ICU Rules'), + editable: false, type: 'text', group: gettext('Definition'), + readonly: function(state) {return !obj.isNew(state); }, + deps: ['datlocaleprovider'], + depChange: (state)=>{ + if (state.datlocaleprovider !== 'icu') + state.daticurules = ''; + }, + disabled: function(state) { + return state.datlocaleprovider !== 'icu'; + }, + min_version: 160000 + }, { id: 'datconnlimit', label: gettext('Connection limit'), editable: false, type: 'int', group: gettext('Definition'), min: -1, diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/15_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/15_plus/create.sql new file mode 100644 index 00000000000..0079944fe27 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/15_plus/create.sql @@ -0,0 +1,29 @@ +{% if data %} +CREATE DATABASE {{ conn|qtIdent(data.name) }} +{% if data.datowner %} + WITH{% endif %}{% if data.datowner %} + + OWNER = {{ conn|qtIdent(data.datowner) }}{% endif %}{% if data.template %} + + TEMPLATE = {{ conn|qtIdent(data.template) }}{% endif %}{% if data.encoding %} + + ENCODING = {{ data.encoding|qtLiteral(conn) }}{% endif %}{% if data.datstrategy %} + + STRATEGY = {{ data.datstrategy|qtLiteral(conn) }}{% endif %}{% if data.datcollate %} + + LC_COLLATE = {{ data.datcollate|qtLiteral(conn) }}{% endif %}{% if data.datctype %} + + LC_CTYPE = {{ data.datctype|qtLiteral(conn) }}{% endif %}{% if data.daticulocale %} + + ICU_LOCALE = {{ data.daticulocale|qtLiteral(conn) }}{% endif %}{% if data.datlocaleprovider %} + + LOCALE_PROVIDER = {{ data.datlocaleprovider|qtLiteral(conn) }}{% endif %}{% if data.spcname %} + + TABLESPACE = {{ conn|qtIdent(data.spcname) }}{% endif %}{% if data.datconnlimit %} + + CONNECTION LIMIT = {{ data.datconnlimit }}{% endif %}{% if data.datoid %} + + OID = {{ data.datoid }}{% endif %} + + IS_TEMPLATE = {{ data.is_template }}; +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/15_plus/get_icu_locale.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/15_plus/get_icu_locale.sql new file mode 100644 index 00000000000..fd1ad045bbc --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/15_plus/get_icu_locale.sql @@ -0,0 +1 @@ +SELECT colliculocale from pg_collation where collprovider = 'i' diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/15_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/15_plus/properties.sql new file mode 100644 index 00000000000..d578144f35c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/15_plus/properties.sql @@ -0,0 +1,44 @@ +SELECT + db.oid AS did, db.oid, db.datname AS name, db.dattablespace AS spcoid, + spcname, datallowconn, pg_catalog.pg_encoding_to_char(encoding) AS encoding, + pg_catalog.pg_get_userbyid(datdba) AS datowner, + (select pg_catalog.current_setting('lc_collate')) as datcollate, + (select pg_catalog.current_setting('lc_ctype')) as datctype, + CASE WHEN datlocprovider = 'i' THEN 'icu' ELSE 'libc' END datlocaleprovider, + daticulocale, datcollversion, + datconnlimit, + pg_catalog.has_database_privilege(db.oid, 'CREATE') AS cancreate, + pg_catalog.current_setting('default_tablespace') AS default_tablespace, + descr.description AS comments, db.datistemplate AS is_template, + {### Default ACL for Tables ###} + '' AS tblacl, + {### Default ACL for Sequnces ###} + '' AS seqacl, + {### Default ACL for Functions ###} + '' AS funcacl, + pg_catalog.array_to_string(datacl::text[], ', ') AS acl +FROM pg_catalog.pg_database db + LEFT OUTER JOIN pg_catalog.pg_tablespace ta ON db.dattablespace=ta.OID + LEFT OUTER JOIN pg_catalog.pg_shdescription descr ON ( + db.oid=descr.objoid AND descr.classoid='pg_database'::regclass + ) +WHERE +{% if show_user_defined_templates is defined %} + db.datistemplate = {{show_user_defined_templates}} AND +{% endif %} +{% if did %} + db.oid = {{ did|qtLiteral(conn) }}::OID +{% else %} + {% if name %} + db.datname = {{ name|qtLiteral(conn) }}::text + {% endif %} +{% endif %} + +{% if db_restrictions %} + {% if did or name %}AND{% endif %} + db.datname in ({{db_restrictions}}) +{% elif not did and not name%} + db.oid > {{ last_system_oid }}::OID OR db.datname IN ('postgres', 'edb') +{% endif %} + +ORDER BY datname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/16_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/16_plus/create.sql new file mode 100644 index 00000000000..4a3556ef4ae --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/16_plus/create.sql @@ -0,0 +1,31 @@ +{% if data %} +CREATE DATABASE {{ conn|qtIdent(data.name) }} +{% if data.datowner %} + WITH{% endif %}{% if data.datowner %} + + OWNER = {{ conn|qtIdent(data.datowner) }}{% endif %}{% if data.template %} + + TEMPLATE = {{ conn|qtIdent(data.template) }}{% endif %}{% if data.encoding %} + + ENCODING = {{ data.encoding|qtLiteral(conn) }}{% endif %}{% if data.datstrategy %} + + STRATEGY = {{ data.datstrategy|qtLiteral(conn) }}{% endif %}{% if data.datcollate %} + + LC_COLLATE = {{ data.datcollate|qtLiteral(conn) }}{% endif %}{% if data.datctype %} + + LC_CTYPE = {{ data.datctype|qtLiteral(conn) }}{% endif %}{% if data.daticulocale %} + + ICU_LOCALE = {{ data.daticulocale|qtLiteral(conn) }}{% endif %}{% if data.daticurules %} + + ICU_RULES = {{ data.daticurules|qtLiteral(conn) }}{% endif %}{% if data.datlocaleprovider %} + + LOCALE_PROVIDER = {{ data.datlocaleprovider|qtLiteral(conn) }}{% endif %}{% if data.spcname %} + + TABLESPACE = {{ conn|qtIdent(data.spcname) }}{% endif %}{% if data.datconnlimit %} + + CONNECTION LIMIT = {{ data.datconnlimit }}{% endif %}{% if data.datoid %} + + OID = {{ data.datoid }}{% endif %} + + IS_TEMPLATE = {{ data.is_template }}; +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/16_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/16_plus/properties.sql index 9e1ad6abc01..68eaf14f472 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/16_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/16_plus/properties.sql @@ -2,7 +2,8 @@ SELECT db.oid AS did, db.oid, db.datname AS name, db.dattablespace AS spcoid, spcname, datallowconn, pg_catalog.pg_encoding_to_char(encoding) AS encoding, pg_catalog.pg_get_userbyid(datdba) AS datowner, db.datcollate, db.datctype, - datconnlimit, + datconnlimit, daticulocale, daticurules, datcollversion, + CASE WHEN datlocprovider = 'i' THEN 'icu' ELSE 'libc' END datlocaleprovider, pg_catalog.has_database_privilege(db.oid, 'CREATE') AS cancreate, pg_catalog.current_setting('default_tablespace') AS default_tablespace, descr.description AS comments, db.datistemplate AS is_template, diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_function.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_function.sql new file mode 100644 index 00000000000..f0300a2959e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_function.sql @@ -0,0 +1,16 @@ +-- Database: + +-- DROP DATABASE IF EXISTS ; + +CREATE DATABASE + WITH + OWNER = postgres + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_reset_all.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_reset_all.sql new file mode 100644 index 00000000000..87745cf9478 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_reset_all.sql @@ -0,0 +1,14 @@ +-- Database: + +-- DROP DATABASE IF EXISTS ; + +CREATE DATABASE + WITH + OWNER = postgres + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_sequences.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_sequences.sql new file mode 100644 index 00000000000..85934e9ac14 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_sequences.sql @@ -0,0 +1,23 @@ +-- Database: + +-- DROP DATABASE IF EXISTS ; + +CREATE DATABASE + WITH + OWNER = postgres + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE ALL ON TABLES FROM postgres; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE ALL ON SEQUENCES FROM postgres; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres +GRANT SELECT, USAGE ON SEQUENCES TO PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_tables.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_tables.sql new file mode 100644 index 00000000000..e1d23496312 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_tables.sql @@ -0,0 +1,21 @@ +-- Database: + +-- DROP DATABASE IF EXISTS ; + +CREATE DATABASE + WITH + OWNER = postgres + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE ALL ON TABLES FROM postgres; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres +GRANT SELECT ON TABLES TO PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_types.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_types.sql new file mode 100644 index 00000000000..a69c5b5c1ad --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/alter_default_db_privileges_types.sql @@ -0,0 +1,24 @@ +-- Database: + +-- DROP DATABASE IF EXISTS ; + +CREATE DATABASE + WITH + OWNER = postgres + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE ALL ON TABLES FROM postgres; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE ALL ON SEQUENCES FROM postgres; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres +GRANT SELECT, USAGE ON SEQUENCES TO PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; + diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_icu.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_icu.sql new file mode 100644 index 00000000000..d7ee32c2827 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_icu.sql @@ -0,0 +1,15 @@ +-- Database: test_database_icu_$%{}[]()&*^!@""""'`\/# + +-- DROP DATABASE IF EXISTS "test_database_icu_$%{}[]()&*^!@""""""""'`\/#"; + +CREATE DATABASE "test_database_icu_$%{}[]()&*^!@""""""""'`\/#" + WITH + OWNER = postgres + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + ICU_LOCALE = 'en-US' + LOCALE_PROVIDER = 'icu' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_icu_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_icu_msql.sql new file mode 100644 index 00000000000..5fef1e633a4 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_icu_msql.sql @@ -0,0 +1,13 @@ +CREATE DATABASE "test_database_icu_$%{}[]()&*^!@""""""""'`\/#" + + TEMPLATE = template0 + ENCODING = 'UTF8' + ICU_LOCALE = 'en-US' + LOCALE_PROVIDER = 'icu' + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE ALL ON TABLES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE ALL ON SEQUENCES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_new_options_libc.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_new_options_libc.sql new file mode 100644 index 00000000000..dbf85c3a3aa --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_new_options_libc.sql @@ -0,0 +1,14 @@ +-- Database: test_database_$%{}[]()&*^!@""""'`\/# + +-- DROP DATABASE IF EXISTS "test_database_$%{}[]()&*^!@""""""""'`\/#"; + +CREATE DATABASE "test_database_$%{}[]()&*^!@""""""""'`\/#" + WITH + OWNER = postgres + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_new_options_libc_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_new_options_libc_msql.sql new file mode 100644 index 00000000000..20ea61ab515 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/create_database_new_options_libc_msql.sql @@ -0,0 +1,10 @@ +CREATE DATABASE "test_database_$%{}[]()&*^!@""""""""'`\/#" + + ENCODING = 'UTF8' + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE ALL ON TABLES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE ALL ON SEQUENCES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/test_database.json b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/test_database.json new file mode 100644 index 00000000000..1ae6ee301ba --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/15_plus/test_database.json @@ -0,0 +1,363 @@ +{ + "scenarios": [ + { + "type": "alter", + "name": "Alert default priviliges for functions", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deffuncacl": { + "deleted": [ + { + "grantor": "postgres", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ] + } + }, + "expected_sql_file": "alter_default_db_privileges_function.sql", + "expected_msql_file": "alter_default_db_privileges_function_msql.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for tables", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deftblacl": { + "deleted": [ + { + "grantor": "postgres", + "grantee": "postgres", + "privileges": [ + {"privilege_type":"D","privilege":true,"with_grant":false}, + {"privilege_type":"w","privilege":true,"with_grant":false} + ], + "acltype": "deftblacl" + } + ], + "added": [ + { + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "r", + "privilege": true, + "with_grant": false + } + ], + "grantor": "postgres" + } + ] + } + }, + "expected_sql_file": "alter_default_db_privileges_tables.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for sequences", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "defseqacl": { + "deleted": [ + { + "grantor": "postgres", + "grantee": "postgres", + "privileges": [ + { + "privilege_type": "w", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ], + "added":[ + {"grantee":"PUBLIC","privileges":[{"privilege_type":"U","privilege":true,"with_grant":false}, + {"privilege_type":"r","privilege":true,"with_grant":false}],"grantor":"postgres"}] + }, + "deftblacl": {"deleted":[{"grantor":"postgres","grantee":"PUBLIC","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]} + }, + "expected_sql_file": "alter_default_db_privileges_sequences.sql", + "expected_msql_file": "alter_default_db_privileges_sequences_msql.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for types", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deftypeacl": { + "deleted": [ + { + "grantor": "postgres", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "U", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ] + } + + }, + "expected_sql_file": "alter_default_db_privileges_types.sql" + }, + { + "type": "alter", + "name": "Alert default privileges reset all", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deffuncacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"X","privilege":true,"with_grant":false}],"grantor":"postgres"}]}, + "deftypeacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"U","privilege":true,"with_grant":false}],"grantor":"postgres"}]}, + "deftblacl":{"added":[{"grantee":"postgres","privileges":[{"privilege_type":"a","privilege":true,"with_grant":false},{"privilege_type":"r","privilege":true,"with_grant":false},{"privilege_type":"w","privilege":true,"with_grant":false},{"privilege_type":"d","privilege":true,"with_grant":false},{"privilege_type":"D","privilege":true,"with_grant":false},{"privilege_type":"x","privilege":true,"with_grant":false},{"privilege_type":"t","privilege":true,"with_grant":false}],"grantor":"postgres"}],"deleted":[{"grantor":"postgres","grantee":"PUBLIC","privileges":[{"privilege_type":"a","privilege":true,"with_grant":false,"cid":"nn626"},{"privilege_type":"r","privilege":true,"with_grant":false,"cid":"nn627"},{"privilege_type":"w","privilege":true,"with_grant":false,"cid":"nn628"},{"privilege_type":"d","privilege":true,"with_grant":false},{"privilege_type":"D","privilege":true,"with_grant":false},{"privilege_type":"x","privilege":true,"with_grant":false},{"privilege_type":"t","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]}, + "defseqacl":{"added":[{"grantee":"postgres","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false},{"privilege_type":"w","privilege":true,"with_grant":false},{"privilege_type":"U","privilege":true,"with_grant":false}],"grantor":"postgres"}],"deleted":[{"grantor":"postgres","grantee":"PUBLIC","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false,"cid":"nn673"},{"privilege_type":"U","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]} + }, + "expected_sql_file": "alter_default_db_privileges_reset_all.sql" + }, + { + "type": "create", + "name": "Create Database with new options and libc", + "endpoint": "NODE-database.obj", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql", + "REPLACE_LOCALE": true, + "data": { + "name": "test_database_$%{}[]()&*^!@\"\"\"\"'`\\/#", + "description": "This is a test comment", + "is_template": false, + "encoding": "UTF8", + "schema_res": [], + "nspacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "C", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "seclabels": [], + "deftblacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "a", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "d", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "D", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "x", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "t", + "privilege": true, + "with_grant": false + }] + }], + "defseqacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "deffuncacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "X", + "privilege": true, + "with_grant": false + }] + }], + "deftypeacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }] + }, + "expected_sql_file": "create_database_new_options_libc.sql", + "expected_msql_file": "create_database_new_options_libc_msql.sql" + }, + { + "type": "delete", + "name": "Drop Database", + "endpoint": "NODE-database.delete_id", + "data": { + "name": "test_database_$%{}[]()&*^!@\"\"\"\"'`\\/#" + } + }, + { + "type": "create", + "name": "Create Database with icu options", + "endpoint": "NODE-database.obj", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql", + "REPLACE_LOCALE": true, + "data": { + "name": "test_database_icu_$%{}[]()&*^!@\"\"\"\"'`\\/#", + "description": "This is a test comment", + "is_template": false, + "template": "template0", + "encoding": "UTF8", + "schema_res": [], + "datlocaleprovider": "icu", + "daticulocale": "en-US", + "nspacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "C", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "seclabels": [], + "deftblacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "a", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "d", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "D", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "x", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "t", + "privilege": true, + "with_grant": false + }] + }], + "defseqacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "deffuncacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "X", + "privilege": true, + "with_grant": false + }] + }], + "deftypeacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }] + }, + "expected_sql_file": "create_database_icu.sql", + "expected_msql_file": "create_database_icu_msql.sql" + }, + { + "type": "delete", + "name": "Drop Database", + "endpoint": "NODE-database.delete_id", + "data": { + "name": "test_database_icu_$%{}[]()&*^!@\"\"\"\"'`\\/#" + } + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/16_plus/create_database_icu_rules.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/16_plus/create_database_icu_rules.sql new file mode 100644 index 00000000000..d5889bf0d00 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/16_plus/create_database_icu_rules.sql @@ -0,0 +1,16 @@ +-- Database: test_database_icu_rules_$%{}[]()&*^!@""""'`\/# + +-- DROP DATABASE IF EXISTS "test_database_icu_rules_$%{}[]()&*^!@""""""""'`\/#"; + +CREATE DATABASE "test_database_icu_rules_$%{}[]()&*^!@""""""""'`\/#" + WITH + OWNER = postgres + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + ICU_LOCALE = 'und' + ICU_RULES = '&V << w <<< W' + LOCALE_PROVIDER = 'icu' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/16_plus/create_database_icu_rules_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/16_plus/create_database_icu_rules_msql.sql new file mode 100644 index 00000000000..61b522bf7cd --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/16_plus/create_database_icu_rules_msql.sql @@ -0,0 +1,14 @@ +CREATE DATABASE "test_database_icu_rules_$%{}[]()&*^!@""""""""'`\/#" + + TEMPLATE = template0 + ENCODING = 'UTF8' + ICU_LOCALE = 'und' + ICU_RULES = '&V << w <<< W' + LOCALE_PROVIDER = 'icu' + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE ALL ON TABLES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE ALL ON SEQUENCES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/16_plus/test_database.json b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/16_plus/test_database.json new file mode 100644 index 00000000000..f03174dd7d1 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/16_plus/test_database.json @@ -0,0 +1,474 @@ +{ + "scenarios": [ + { + "type": "alter", + "name": "Alert default priviliges for functions", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deffuncacl": { + "deleted": [ + { + "grantor": "postgres", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ] + } + }, + "expected_sql_file": "alter_default_db_privileges_function.sql", + "expected_msql_file": "alter_default_db_privileges_function_msql.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for tables", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deftblacl": { + "deleted": [ + { + "grantor": "postgres", + "grantee": "postgres", + "privileges": [ + {"privilege_type":"D","privilege":true,"with_grant":false}, + {"privilege_type":"w","privilege":true,"with_grant":false} + ], + "acltype": "deftblacl" + } + ], + "added": [ + { + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "r", + "privilege": true, + "with_grant": false + } + ], + "grantor": "postgres" + } + ] + } + }, + "expected_sql_file": "alter_default_db_privileges_tables.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for sequences", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "defseqacl": { + "deleted": [ + { + "grantor": "postgres", + "grantee": "postgres", + "privileges": [ + { + "privilege_type": "w", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ], + "added":[ + {"grantee":"PUBLIC","privileges":[{"privilege_type":"U","privilege":true,"with_grant":false}, + {"privilege_type":"r","privilege":true,"with_grant":false}],"grantor":"postgres"}] + }, + "deftblacl": {"deleted":[{"grantor":"postgres","grantee":"PUBLIC","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]} + }, + "expected_sql_file": "alter_default_db_privileges_sequences.sql", + "expected_msql_file": "alter_default_db_privileges_sequences_msql.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for types", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deftypeacl": { + "deleted": [ + { + "grantor": "postgres", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "U", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ] + } + + }, + "expected_sql_file": "alter_default_db_privileges_types.sql" + }, + { + "type": "alter", + "name": "Alert default privileges reset all", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deffuncacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"X","privilege":true,"with_grant":false}],"grantor":"postgres"}]}, + "deftypeacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"U","privilege":true,"with_grant":false}],"grantor":"postgres"}]}, + "deftblacl":{"added":[{"grantee":"postgres","privileges":[{"privilege_type":"a","privilege":true,"with_grant":false},{"privilege_type":"r","privilege":true,"with_grant":false},{"privilege_type":"w","privilege":true,"with_grant":false},{"privilege_type":"d","privilege":true,"with_grant":false},{"privilege_type":"D","privilege":true,"with_grant":false},{"privilege_type":"x","privilege":true,"with_grant":false},{"privilege_type":"t","privilege":true,"with_grant":false}],"grantor":"postgres"}],"deleted":[{"grantor":"postgres","grantee":"PUBLIC","privileges":[{"privilege_type":"a","privilege":true,"with_grant":false,"cid":"nn626"},{"privilege_type":"r","privilege":true,"with_grant":false,"cid":"nn627"},{"privilege_type":"w","privilege":true,"with_grant":false,"cid":"nn628"},{"privilege_type":"d","privilege":true,"with_grant":false},{"privilege_type":"D","privilege":true,"with_grant":false},{"privilege_type":"x","privilege":true,"with_grant":false},{"privilege_type":"t","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]}, + "defseqacl":{"added":[{"grantee":"postgres","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false},{"privilege_type":"w","privilege":true,"with_grant":false},{"privilege_type":"U","privilege":true,"with_grant":false}],"grantor":"postgres"}],"deleted":[{"grantor":"postgres","grantee":"PUBLIC","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false,"cid":"nn673"},{"privilege_type":"U","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]} + }, + "expected_sql_file": "alter_default_db_privileges_reset_all.sql" + }, + { + "type": "create", + "name": "Create Database with new options and libc", + "endpoint": "NODE-database.obj", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql", + "REPLACE_LOCALE": true, + "data": { + "name": "test_database_$%{}[]()&*^!@\"\"\"\"'`\\/#", + "description": "This is a test comment", + "is_template": false, + "encoding": "UTF8", + "schema_res": [], + "nspacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "C", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "seclabels": [], + "deftblacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "a", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "d", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "D", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "x", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "t", + "privilege": true, + "with_grant": false + }] + }], + "defseqacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "deffuncacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "X", + "privilege": true, + "with_grant": false + }] + }], + "deftypeacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }] + }, + "expected_sql_file": "create_database_new_options_libc.sql", + "expected_msql_file": "create_database_new_options_libc_msql.sql" + }, + { + "type": "delete", + "name": "Drop Database", + "endpoint": "NODE-database.delete_id", + "data": { + "name": "test_database_$%{}[]()&*^!@\"\"\"\"'`\\/#" + } + }, + { + "type": "create", + "name": "Create Database with icu options", + "endpoint": "NODE-database.obj", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql", + "REPLACE_LOCALE": true, + "data": { + "name": "test_database_icu_$%{}[]()&*^!@\"\"\"\"'`\\/#", + "description": "This is a test comment", + "is_template": false, + "template": "template0", + "encoding": "UTF8", + "schema_res": [], + "datlocaleprovider": "icu", + "daticulocale": "en-US", + "nspacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "C", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "seclabels": [], + "deftblacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "a", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "d", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "D", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "x", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "t", + "privilege": true, + "with_grant": false + }] + }], + "defseqacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "deffuncacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "X", + "privilege": true, + "with_grant": false + }] + }], + "deftypeacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }] + }, + "expected_sql_file": "create_database_icu.sql", + "expected_msql_file": "create_database_icu_msql.sql" + }, + { + "type": "delete", + "name": "Drop Database", + "endpoint": "NODE-database.delete_id", + "data": { + "name": "test_database_icu_$%{}[]()&*^!@\"\"\"\"'`\\/#" + } + }, + { + "type": "create", + "name": "Create Database with icu rules options", + "endpoint": "NODE-database.obj", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql", + "REPLACE_LOCALE": true, + "data": { + "name": "test_database_icu_rules_$%{}[]()&*^!@\"\"\"\"'`\\/#", + "description": "This is a test comment", + "is_template": false, + "template": "template0", + "encoding": "UTF8", + "schema_res": [], + "datlocaleprovider": "icu", + "daticulocale": "und", + "daticurules": "&V << w <<< W", + "nspacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "C", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "seclabels": [], + "deftblacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "a", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "d", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "D", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "x", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "t", + "privilege": true, + "with_grant": false + }] + }], + "defseqacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "deffuncacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "X", + "privilege": true, + "with_grant": false + }] + }], + "deftypeacl": [{ + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [{ + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }] + }, + "expected_sql_file": "create_database_icu_rules.sql", + "expected_msql_file": "create_database_icu_rules_msql.sql" + }, + { + "type": "delete", + "name": "Drop Database", + "endpoint": "NODE-database.delete_id", + "data": { + "name": "test_database_icu_rules_$%{}[]()&*^!@\"\"\"\"'`\\/#" + } + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_function.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_function.sql index efacbd88b1f..3f681819713 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_function.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_function.sql @@ -6,8 +6,8 @@ CREATE DATABASE WITH OWNER = postgres ENCODING = 'UTF8' - LC_COLLATE = 'C' - LC_CTYPE = 'C' + LC_COLLATE = '' + LC_CTYPE = '' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_reset_all.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_reset_all.sql index 6f7de946d40..15768fa0b1c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_reset_all.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_reset_all.sql @@ -6,8 +6,8 @@ CREATE DATABASE WITH OWNER = postgres ENCODING = 'UTF8' - LC_COLLATE = 'C' - LC_CTYPE = 'C' + LC_COLLATE = '' + LC_CTYPE = '' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_sequences.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_sequences.sql index 9711208caa9..96259db4128 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_sequences.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_sequences.sql @@ -6,8 +6,8 @@ CREATE DATABASE WITH OWNER = postgres ENCODING = 'UTF8' - LC_COLLATE = 'C' - LC_CTYPE = 'C' + LC_COLLATE = '' + LC_CTYPE = '' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_tables.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_tables.sql index 3bcb089270b..e47b36cdc0c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_tables.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_tables.sql @@ -6,8 +6,8 @@ CREATE DATABASE WITH OWNER = postgres ENCODING = 'UTF8' - LC_COLLATE = 'C' - LC_CTYPE = 'C' + LC_COLLATE = '' + LC_CTYPE = '' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_types.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_types.sql index 15c440bc37f..b17d0774fe4 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_types.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/alter_default_db_privileges_types.sql @@ -6,8 +6,8 @@ CREATE DATABASE WITH OWNER = postgres ENCODING = 'UTF8' - LC_COLLATE = 'C' - LC_CTYPE = 'C' + LC_COLLATE = '' + LC_CTYPE = '' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/test_database.json b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/test_database.json index f262efe3dae..4e77d666cab 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/test_database.json +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/pg/default/test_database.json @@ -7,6 +7,7 @@ "sql_endpoint": "NODE-database.sql_id", "msql_endpoint": "NODE-database.msql_id", "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, "data": { "deffuncacl": { "deleted": [ @@ -34,6 +35,7 @@ "endpoint": "NODE-database.obj_id", "sql_endpoint": "NODE-database.sql_id", "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, "data": { "deftblacl": { "deleted": [ @@ -71,6 +73,7 @@ "sql_endpoint": "NODE-database.sql_id", "msql_endpoint": "NODE-database.msql_id", "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, "data": { "defseqacl": { "deleted": [ @@ -102,6 +105,7 @@ "endpoint": "NODE-database.obj_id", "sql_endpoint": "NODE-database.sql_id", "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, "data": { "deftypeacl": { "deleted": [ @@ -129,6 +133,7 @@ "endpoint": "NODE-database.obj_id", "sql_endpoint": "NODE-database.sql_id", "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, "data": { "deffuncacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"X","privilege":true,"with_grant":false}],"grantor":"postgres"}]}, "deftypeacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"U","privilege":true,"with_grant":false}],"grantor":"postgres"}]}, diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_function.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_function.sql new file mode 100644 index 00000000000..feb0a8a017a --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_function.sql @@ -0,0 +1,16 @@ +-- Database: + +-- DROP DATABASE IF EXISTS ; + +CREATE DATABASE + WITH + OWNER = enterprisedb + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_reset_all.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_reset_all.sql new file mode 100644 index 00000000000..231a35c8303 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_reset_all.sql @@ -0,0 +1,14 @@ +-- Database: + +-- DROP DATABASE IF EXISTS ; + +CREATE DATABASE + WITH + OWNER = enterprisedb + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_sequences.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_sequences.sql new file mode 100644 index 00000000000..fff9ffc1538 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_sequences.sql @@ -0,0 +1,23 @@ +-- Database: + +-- DROP DATABASE IF EXISTS ; + +CREATE DATABASE + WITH + OWNER = enterprisedb + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE ALL ON TABLES FROM enterprisedb; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE ALL ON SEQUENCES FROM enterprisedb; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb +GRANT SELECT, USAGE ON SEQUENCES TO PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_tables.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_tables.sql new file mode 100644 index 00000000000..f5c47b493f4 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_tables.sql @@ -0,0 +1,21 @@ +-- Database: + +-- DROP DATABASE IF EXISTS ; + +CREATE DATABASE + WITH + OWNER = enterprisedb + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE ALL ON TABLES FROM enterprisedb; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb +GRANT SELECT ON TABLES TO PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_types.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_types.sql new file mode 100644 index 00000000000..fff9ffc1538 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/alter_default_db_privileges_types.sql @@ -0,0 +1,23 @@ +-- Database: + +-- DROP DATABASE IF EXISTS ; + +CREATE DATABASE + WITH + OWNER = enterprisedb + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE ALL ON TABLES FROM enterprisedb; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE ALL ON SEQUENCES FROM enterprisedb; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb +GRANT SELECT, USAGE ON SEQUENCES TO PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_icu.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_icu.sql new file mode 100644 index 00000000000..ea13673304f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_icu.sql @@ -0,0 +1,15 @@ +-- Database: test_database_icu_$%{}[]()&*^!@""""'`\/# + +-- DROP DATABASE IF EXISTS "test_database_icu_$%{}[]()&*^!@""""""""'`\/#"; + +CREATE DATABASE "test_database_icu_$%{}[]()&*^!@""""""""'`\/#" + WITH + OWNER = enterprisedb + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + ICU_LOCALE = 'en-US' + LOCALE_PROVIDER = 'icu' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_icu_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_icu_msql.sql new file mode 100644 index 00000000000..868a440d254 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_icu_msql.sql @@ -0,0 +1,13 @@ +CREATE DATABASE "test_database_icu_$%{}[]()&*^!@""""""""'`\/#" + + TEMPLATE = template0 + ENCODING = 'UTF8' + ICU_LOCALE = 'en-US' + LOCALE_PROVIDER = 'icu' + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE ALL ON TABLES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE ALL ON SEQUENCES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_new_options_libc.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_new_options_libc.sql new file mode 100644 index 00000000000..fa67c87d809 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_new_options_libc.sql @@ -0,0 +1,14 @@ +-- Database: test_database_$%{}[]()&*^!@""""'`\/# + +-- DROP DATABASE IF EXISTS "test_database_$%{}[]()&*^!@""""""""'`\/#"; + +CREATE DATABASE "test_database_$%{}[]()&*^!@""""""""'`\/#" + WITH + OWNER = enterprisedb + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + LOCALE_PROVIDER = 'libc' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_new_options_libc_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_new_options_libc_msql.sql new file mode 100644 index 00000000000..2fb3b2202e8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/create_database_new_options_libc_msql.sql @@ -0,0 +1,10 @@ +CREATE DATABASE "test_database_$%{}[]()&*^!@""""""""'`\/#" + + ENCODING = 'UTF8' + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE ALL ON TABLES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE ALL ON SEQUENCES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/test_database.json b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/test_database.json new file mode 100644 index 00000000000..b9e57fa036f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/15_plus/test_database.json @@ -0,0 +1,363 @@ +{ + "scenarios": [ + { + "type": "alter", + "name": "Alert default priviliges for functions", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deffuncacl": { + "deleted": [ + { + "grantor": "enterprisedb", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ] + } + }, + "expected_sql_file": "alter_default_db_privileges_function.sql", + "expected_msql_file": "alter_default_db_privileges_function_msql.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for tables", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deftblacl": { + "deleted": [ + { + "grantor": "enterprisedb", + "grantee": "enterprisedb", + "privileges": [ + {"privilege_type":"D","privilege":true,"with_grant":false}, + {"privilege_type":"w","privilege":true,"with_grant":false} + ], + "acltype": "deftblacl" + } + ], + "added": [ + { + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "r", + "privilege": true, + "with_grant": false + } + ], + "grantor": "enterprisedb" + } + ] + } + }, + "expected_sql_file": "alter_default_db_privileges_tables.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for sequences", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "defseqacl": { + "deleted": [ + { + "grantor": "enterprisedb", + "grantee": "enterprisedb", + "privileges": [ + { + "privilege_type": "w", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ], + "added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"U","privilege":true,"with_grant":false}, + {"privilege_type":"r","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}] + }, + "deftblacl": {"deleted":[{"grantor":"enterprisedb","grantee":"PUBLIC","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]} + + }, + "expected_sql_file": "alter_default_db_privileges_sequences.sql", + "expected_msql_file": "alter_default_db_privileges_sequences_msql.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for types", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deftypeacl": { + "deleted": [ + { + "grantor": "enterprisedb", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "U", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ] + } + + }, + "expected_sql_file": "alter_default_db_privileges_types.sql" + }, + { + "type": "alter", + "name": "Alert default privileges reset all", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deffuncacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"X","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}]}, + "deftypeacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"U","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}]}, + "deftblacl":{"added":[{"grantee":"enterprisedb","privileges":[{"privilege_type":"a","privilege":true,"with_grant":false},{"privilege_type":"r","privilege":true,"with_grant":false},{"privilege_type":"w","privilege":true,"with_grant":false},{"privilege_type":"d","privilege":true,"with_grant":false},{"privilege_type":"D","privilege":true,"with_grant":false},{"privilege_type":"x","privilege":true,"with_grant":false},{"privilege_type":"t","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}],"deleted":[{"grantor":"enterprisedb","grantee":"PUBLIC","privileges":[{"privilege_type":"a","privilege":true,"with_grant":false,"cid":"nn626"},{"privilege_type":"r","privilege":true,"with_grant":false,"cid":"nn627"},{"privilege_type":"w","privilege":true,"with_grant":false,"cid":"nn628"},{"privilege_type":"d","privilege":true,"with_grant":false},{"privilege_type":"D","privilege":true,"with_grant":false},{"privilege_type":"x","privilege":true,"with_grant":false},{"privilege_type":"t","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]}, + "defseqacl":{"added":[{"grantee":"enterprisedb","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false},{"privilege_type":"w","privilege":true,"with_grant":false},{"privilege_type":"U","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}],"deleted":[{"grantor":"enterprisedb","grantee":"PUBLIC","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false,"cid":"nn673"},{"privilege_type":"U","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]} + }, + "expected_sql_file": "alter_default_db_privileges_reset_all.sql" + }, + { + "type": "create", + "name": "Create Database with new options and libc", + "endpoint": "NODE-database.obj", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql", + "REPLACE_LOCALE": true, + "data": { + "name": "test_database_$%{}[]()&*^!@\"\"\"\"'`\\/#", + "description": "This is a test comment", + "is_template": false, + "encoding": "UTF8", + "schema_res": [], + "nspacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "C", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "seclabels": [], + "deftblacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "a", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "d", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "D", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "x", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "t", + "privilege": true, + "with_grant": false + }] + }], + "defseqacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "deffuncacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "X", + "privilege": true, + "with_grant": false + }] + }], + "deftypeacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }] + }, + "expected_sql_file": "create_database_new_options_libc.sql", + "expected_msql_file": "create_database_new_options_libc_msql.sql" + }, + { + "type": "delete", + "name": "Drop Database", + "endpoint": "NODE-database.delete_id", + "data": { + "name": "test_database_$%{}[]()&*^!@\"\"\"\"'`\\/#" + } + }, + { + "type": "create", + "name": "Create Database with icu options", + "endpoint": "NODE-database.obj", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql", + "REPLACE_LOCALE": true, + "data": { + "name": "test_database_icu_$%{}[]()&*^!@\"\"\"\"'`\\/#", + "description": "This is a test comment", + "is_template": false, + "template": "template0", + "encoding": "UTF8", + "schema_res": [], + "datlocaleprovider": "icu", + "daticulocale": "en-US", + "nspacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "C", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "seclabels": [], + "deftblacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "a", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "d", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "D", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "x", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "t", + "privilege": true, + "with_grant": false + }] + }], + "defseqacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "deffuncacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "X", + "privilege": true, + "with_grant": false + }] + }], + "deftypeacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }] + }, + "expected_sql_file": "create_database_icu.sql", + "expected_msql_file": "create_database_icu_msql.sql" + }, + { + "type": "delete", + "name": "Drop Database", + "endpoint": "NODE-database.delete_id", + "data": { + "name": "test_database_icu_$%{}[]()&*^!@\"\"\"\"'`\\/#" + } + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/16_plus/create_database_icu_rules.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/16_plus/create_database_icu_rules.sql new file mode 100644 index 00000000000..71534a3ba71 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/16_plus/create_database_icu_rules.sql @@ -0,0 +1,16 @@ +-- Database: test_database_icu_rules_$%{}[]()&*^!@""""'`\/# + +-- DROP DATABASE IF EXISTS "test_database_icu_rules_$%{}[]()&*^!@""""""""'`\/#"; + +CREATE DATABASE "test_database_icu_rules_$%{}[]()&*^!@""""""""'`\/#" + WITH + OWNER = enterprisedb + ENCODING = 'UTF8' + LC_COLLATE = '' + LC_CTYPE = '' + ICU_LOCALE = 'und' + ICU_RULES = '&V << w <<< W' + LOCALE_PROVIDER = 'icu' + TABLESPACE = pg_default + CONNECTION LIMIT = -1 + IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/16_plus/create_database_icu_rules_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/16_plus/create_database_icu_rules_msql.sql new file mode 100644 index 00000000000..5259f3921be --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/16_plus/create_database_icu_rules_msql.sql @@ -0,0 +1,14 @@ +CREATE DATABASE "test_database_icu_rules_$%{}[]()&*^!@""""""""'`\/#" + + TEMPLATE = template0 + ENCODING = 'UTF8' + ICU_LOCALE = 'und' + ICU_RULES = '&V << w <<< W' + LOCALE_PROVIDER = 'icu' + IS_TEMPLATE = False; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE ALL ON TABLES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE ALL ON SEQUENCES FROM PUBLIC; + +ALTER DEFAULT PRIVILEGES FOR ROLE enterprisedb REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/16_plus/test_database.json b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/16_plus/test_database.json new file mode 100644 index 00000000000..d6c54d7d379 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/16_plus/test_database.json @@ -0,0 +1,474 @@ +{ + "scenarios": [ + { + "type": "alter", + "name": "Alert default priviliges for functions", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deffuncacl": { + "deleted": [ + { + "grantor": "enterprisedb", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ] + } + }, + "expected_sql_file": "alter_default_db_privileges_function.sql", + "expected_msql_file": "alter_default_db_privileges_function_msql.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for tables", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deftblacl": { + "deleted": [ + { + "grantor": "enterprisedb", + "grantee": "enterprisedb", + "privileges": [ + {"privilege_type":"D","privilege":true,"with_grant":false}, + {"privilege_type":"w","privilege":true,"with_grant":false} + ], + "acltype": "deftblacl" + } + ], + "added": [ + { + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "r", + "privilege": true, + "with_grant": false + } + ], + "grantor": "enterprisedb" + } + ] + } + }, + "expected_sql_file": "alter_default_db_privileges_tables.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for sequences", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "defseqacl": { + "deleted": [ + { + "grantor": "enterprisedb", + "grantee": "enterprisedb", + "privileges": [ + { + "privilege_type": "w", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ], + "added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"U","privilege":true,"with_grant":false}, + {"privilege_type":"r","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}] + }, + "deftblacl": {"deleted":[{"grantor":"enterprisedb","grantee":"PUBLIC","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]} + + }, + "expected_sql_file": "alter_default_db_privileges_sequences.sql", + "expected_msql_file": "alter_default_db_privileges_sequences_msql.sql" + }, + { + "type": "alter", + "name": "Alert default privileges for types", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deftypeacl": { + "deleted": [ + { + "grantor": "enterprisedb", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege_type": "U", + "privilege": true, + "with_grant": false + } + ], + "acltype": "defaultacls" + } + ] + } + + }, + "expected_sql_file": "alter_default_db_privileges_types.sql" + }, + { + "type": "alter", + "name": "Alert default privileges reset all", + "endpoint": "NODE-database.obj_id", + "sql_endpoint": "NODE-database.sql_id", + "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, + "data": { + "deffuncacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"X","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}]}, + "deftypeacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"U","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}]}, + "deftblacl":{"added":[{"grantee":"enterprisedb","privileges":[{"privilege_type":"a","privilege":true,"with_grant":false},{"privilege_type":"r","privilege":true,"with_grant":false},{"privilege_type":"w","privilege":true,"with_grant":false},{"privilege_type":"d","privilege":true,"with_grant":false},{"privilege_type":"D","privilege":true,"with_grant":false},{"privilege_type":"x","privilege":true,"with_grant":false},{"privilege_type":"t","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}],"deleted":[{"grantor":"enterprisedb","grantee":"PUBLIC","privileges":[{"privilege_type":"a","privilege":true,"with_grant":false,"cid":"nn626"},{"privilege_type":"r","privilege":true,"with_grant":false,"cid":"nn627"},{"privilege_type":"w","privilege":true,"with_grant":false,"cid":"nn628"},{"privilege_type":"d","privilege":true,"with_grant":false},{"privilege_type":"D","privilege":true,"with_grant":false},{"privilege_type":"x","privilege":true,"with_grant":false},{"privilege_type":"t","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]}, + "defseqacl":{"added":[{"grantee":"enterprisedb","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false},{"privilege_type":"w","privilege":true,"with_grant":false},{"privilege_type":"U","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}],"deleted":[{"grantor":"enterprisedb","grantee":"PUBLIC","privileges":[{"privilege_type":"r","privilege":true,"with_grant":false,"cid":"nn673"},{"privilege_type":"U","privilege":true,"with_grant":false}],"acltype":"defaultacls"}]} + }, + "expected_sql_file": "alter_default_db_privileges_reset_all.sql" + }, + { + "type": "create", + "name": "Create Database with new options and libc", + "endpoint": "NODE-database.obj", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql", + "REPLACE_LOCALE": true, + "data": { + "name": "test_database_$%{}[]()&*^!@\"\"\"\"'`\\/#", + "description": "This is a test comment", + "is_template": false, + "encoding": "UTF8", + "schema_res": [], + "nspacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "C", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "seclabels": [], + "deftblacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "a", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "d", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "D", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "x", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "t", + "privilege": true, + "with_grant": false + }] + }], + "defseqacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "deffuncacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "X", + "privilege": true, + "with_grant": false + }] + }], + "deftypeacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }] + }, + "expected_sql_file": "create_database_new_options_libc.sql", + "expected_msql_file": "create_database_new_options_libc_msql.sql" + }, + { + "type": "delete", + "name": "Drop Database", + "endpoint": "NODE-database.delete_id", + "data": { + "name": "test_database_$%{}[]()&*^!@\"\"\"\"'`\\/#" + } + }, + { + "type": "create", + "name": "Create Database with icu options", + "endpoint": "NODE-database.obj", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql", + "REPLACE_LOCALE": true, + "data": { + "name": "test_database_icu_$%{}[]()&*^!@\"\"\"\"'`\\/#", + "description": "This is a test comment", + "is_template": false, + "template": "template0", + "encoding": "UTF8", + "schema_res": [], + "datlocaleprovider": "icu", + "daticulocale": "en-US", + "nspacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "C", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "seclabels": [], + "deftblacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "a", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "d", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "D", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "x", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "t", + "privilege": true, + "with_grant": false + }] + }], + "defseqacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "deffuncacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "X", + "privilege": true, + "with_grant": false + }] + }], + "deftypeacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }] + }, + "expected_sql_file": "create_database_icu.sql", + "expected_msql_file": "create_database_icu_msql.sql" + }, + { + "type": "delete", + "name": "Drop Database", + "endpoint": "NODE-database.delete_id", + "data": { + "name": "test_database_icu_$%{}[]()&*^!@\"\"\"\"'`\\/#" + } + }, + { + "type": "create", + "name": "Create Database with icu rules options", + "endpoint": "NODE-database.obj", + "sql_endpoint": "NODE-database.sql_id", + "msql_endpoint": "NODE-database.msql", + "REPLACE_LOCALE": true, + "data": { + "name": "test_database_icu_rules_$%{}[]()&*^!@\"\"\"\"'`\\/#", + "description": "This is a test comment", + "is_template": false, + "template": "template0", + "encoding": "UTF8", + "schema_res": [], + "datlocaleprovider": "icu", + "daticulocale": "und", + "daticurules": "&V << w <<< W", + "nspacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "C", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "seclabels": [], + "deftblacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "a", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "d", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "D", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "x", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "t", + "privilege": true, + "with_grant": false + }] + }], + "defseqacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, { + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }], + "deffuncacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "X", + "privilege": true, + "with_grant": false + }] + }], + "deftypeacl": [{ + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [{ + "privilege_type": "U", + "privilege": true, + "with_grant": false + }] + }] + }, + "expected_sql_file": "create_database_icu_rules.sql", + "expected_msql_file": "create_database_icu_rules_msql.sql" + }, + { + "type": "delete", + "name": "Drop Database", + "endpoint": "NODE-database.delete_id", + "data": { + "name": "test_database_icu_rules_$%{}[]()&*^!@\"\"\"\"'`\\/#" + } + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_function.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_function.sql index 17c27f6e2db..1c0e541d24a 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_function.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_function.sql @@ -6,8 +6,8 @@ CREATE DATABASE WITH OWNER = enterprisedb ENCODING = 'UTF8' - LC_COLLATE = 'C' - LC_CTYPE = 'C' + LC_COLLATE = '' + LC_CTYPE = '' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_reset_all.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_reset_all.sql index 68df5a81a14..776d9f3d63c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_reset_all.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_reset_all.sql @@ -6,8 +6,8 @@ CREATE DATABASE WITH OWNER = enterprisedb ENCODING = 'UTF8' - LC_COLLATE = 'C' - LC_CTYPE = 'C' + LC_COLLATE = '' + LC_CTYPE = '' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_sequences.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_sequences.sql index b25afce5cf7..69312eb6d53 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_sequences.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_sequences.sql @@ -6,8 +6,8 @@ CREATE DATABASE WITH OWNER = enterprisedb ENCODING = 'UTF8' - LC_COLLATE = 'C' - LC_CTYPE = 'C' + LC_COLLATE = '' + LC_CTYPE = '' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_tables.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_tables.sql index 7aadf1055ca..a4838789d9e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_tables.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_tables.sql @@ -6,8 +6,8 @@ CREATE DATABASE WITH OWNER = enterprisedb ENCODING = 'UTF8' - LC_COLLATE = 'C' - LC_CTYPE = 'C' + LC_COLLATE = '' + LC_CTYPE = '' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_types.sql b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_types.sql index b25afce5cf7..69312eb6d53 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_types.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/alter_default_db_privileges_types.sql @@ -6,8 +6,8 @@ CREATE DATABASE WITH OWNER = enterprisedb ENCODING = 'UTF8' - LC_COLLATE = 'C' - LC_CTYPE = 'C' + LC_COLLATE = '' + LC_CTYPE = '' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False; diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/test_database.json b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/test_database.json index 5a6d98bade1..f537c764764 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/test_database.json +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/ppas/default/test_database.json @@ -7,6 +7,7 @@ "sql_endpoint": "NODE-database.sql_id", "msql_endpoint": "NODE-database.msql_id", "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, "data": { "deffuncacl": { "deleted": [ @@ -34,6 +35,7 @@ "endpoint": "NODE-database.obj_id", "sql_endpoint": "NODE-database.sql_id", "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, "data": { "deftblacl": { "deleted": [ @@ -71,6 +73,7 @@ "sql_endpoint": "NODE-database.sql_id", "msql_endpoint": "NODE-database.msql_id", "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, "data": { "defseqacl": { "deleted": [ @@ -102,6 +105,7 @@ "endpoint": "NODE-database.obj_id", "sql_endpoint": "NODE-database.sql_id", "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, "data": { "deftypeacl": { "deleted": [ @@ -129,6 +133,7 @@ "endpoint": "NODE-database.obj_id", "sql_endpoint": "NODE-database.sql_id", "TEST_DB_NAME": "", + "REPLACE_LOCALE": true, "data": { "deffuncacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"X","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}]}, "deftypeacl": {"added":[{"grantee":"PUBLIC","privileges":[{"privilege_type":"U","privilege":true,"with_grant":false}],"grantor":"enterprisedb"}]}, diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py index e26e66e15bc..d7b65033be0 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py @@ -33,7 +33,8 @@ def runTest(self): server_response = server_utils.connect_server(self, self.server_id) if server_response["info"] == "Server connected.": db_owner = server_response['data']['user']['name'] - self.data = database_utils.get_db_data(db_owner) + server_version = server_response['data']['version'] + self.data = database_utils.get_db_data(db_owner, server_version) self.data['template'] = 'template0' self.db_name = self.data['name'] response = self.tester.post(self.url + str(utils.SERVER_GROUP) + diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py index b712aa593cb..1d742fe0fca 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py @@ -9,6 +9,7 @@ import json import uuid +import secrets from pgadmin.utils import server_utils from regression.python_test_utils import test_utils as utils @@ -16,7 +17,7 @@ DATABASE_CONNECT_URL = '/browser/database/connect/' -def get_db_data(db_owner): +def get_db_data(db_owner, version=None): """This function returns the database details in dict format""" data = { "datconnlimit": -1, @@ -77,6 +78,17 @@ def get_db_data(db_owner): 'is_template': False, "schema_res": ["public", "sample"] } + + if version is not None and version >= 150000: + data['datstrategy'] = 'wal_log' + data['datlocaleprovider'] = 'icu' + data['daticulocale'] = 'und' + data['datoid'] = secrets.choice(range(17000, 999999)) + + if version is not None and version >= 160000: + data['daticurules'] = '&V << w <<< W' + data['datoid'] = secrets.choice(range(17000, 999999)) + return data diff --git a/web/regression/re_sql/tests/test_resql.py b/web/regression/re_sql/tests/test_resql.py index 260f064f298..fdfcaf33776 100644 --- a/web/regression/re_sql/tests/test_resql.py +++ b/web/regression/re_sql/tests/test_resql.py @@ -109,7 +109,9 @@ def runTest(self): 'pga_job_id': '', 'timestamptz_2': '', 'db_name': '', - 'db_driver': ''} + 'db_driver': '', + 'LC_COLLATE': '', + 'LC_CTYPE': ''} resql_module_list = create_resql_module_list( BaseTestGenerator.re_sql_module_list, @@ -189,7 +191,12 @@ def get_url(self, endpoint, object_id=None): elif arg == 'sid': options['sid'] = int(self.server_information['server_id']) elif arg == 'did': - options['did'] = int(self.server_information['db_id']) + # For database node object_id is the actual database id. + if endpoint.__contains__('NODE-database') and \ + object_id is not None: + options['did'] = int(object_id) + else: + options['did'] = int(self.server_information['db_id']) elif arg == 'scid': # For schema node object_id is the actual schema id. if endpoint.__contains__('NODE-schema') and \ @@ -779,6 +786,31 @@ def preprocess_expected_sql(self, scenario, sql, resp_sql, object_id): sql = sql.replace(self.JSON_PLACEHOLDERS['db_name'], self.server_information['test_db_name']) + # get the database connection + if 'REPLACE_LOCALE' in scenario: + self.get_db_connection() + pg_cursor = self.connection.cursor() + + db_name = self.server_information['test_db_name'] + # Database name if specify in scenario + if 'data' in scenario and 'name' in scenario['data'] and \ + 'db' in self.server: + db_name = self.server['db'] + + # Fetch the lc_collate and lc_ctype + pg_cursor.execute( + "SELECT datcollate as cname FROM pg_database WHERE datname = " + "'{0}'".format(db_name)) + lc_collate = ''.join(pg_cursor.fetchone()) + pg_cursor.execute( + "SELECT datctype as cname FROM pg_database WHERE datname = " + "'{0}'".format(db_name)) + lc_ctype = ''.join(pg_cursor.fetchone()) + pg_cursor.close() + + sql = sql.replace(self.JSON_PLACEHOLDERS['LC_COLLATE'], lc_collate) + sql = sql.replace(self.JSON_PLACEHOLDERS['LC_CTYPE'], lc_ctype) + return sql def replace_placeholder_with_id(self, value):