From 7ffe71d12f8dc5e3ddcfd3ebeea070137b474ca6 Mon Sep 17 00:00:00 2001 From: Akshay Joshi Date: Wed, 25 Aug 2021 18:45:11 +0530 Subject: [PATCH] Added support for OWNED BY clause for sequences. Fixes #4211 --- .../schemas/sequences/static/js/sequence.js | 12 ++- .../sequences/static/js/sequence.ui.js | 64 +++++++++++++++ .../sequences/sql/default/create.sql | 4 +- .../sequences/sql/default/properties.sql | 17 ++-- .../sequences/sql/default/update.sql | 7 ++ .../tests/pg/default/alter_ownedby_column.sql | 14 ++++ .../pg/default/alter_ownedby_column_msql.sql | 2 + .../tests/pg/default/alter_ownedby_remove.sql | 13 +++ .../pg/default/alter_ownedby_remove_msql.sql | 4 + .../pg/default/create_sequence_ownedby.sql | 14 ++++ .../default/create_sequence_ownedby_msql.sql | 10 +++ .../create_sequence_ownedby_remove.sql | 13 +++ .../tests/pg/default/test_sequences_pg.json | 81 +++++++++++++++++++ .../ppas/default/alter_ownedby_column.sql | 14 ++++ .../default/alter_ownedby_column_msql.sql | 2 + .../ppas/default/alter_ownedby_remove.sql | 13 +++ .../default/alter_ownedby_remove_msql.sql | 4 + .../ppas/default/create_sequence_ownedby.sql | 14 ++++ .../default/create_sequence_ownedby_msql.sql | 10 +++ .../create_sequence_ownedby_remove.sql | 13 +++ .../ppas/default/test_sequences_ppas.json | 81 +++++++++++++++++++ 21 files changed, 398 insertions(+), 8 deletions(-) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_column.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_column_msql.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_remove.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_remove_msql.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby_msql.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby_remove.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_column.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_column_msql.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_remove.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_remove_msql.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby_msql.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby_remove.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js index f18cb3d51..324d8dc38 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js @@ -7,7 +7,7 @@ // ////////////////////////////////////////////////////////////// -import { getNodeListByName } from '../../../../../../../static/js/node_ajax'; +import { getNodeAjaxOptions, getNodeListByName } from '../../../../../../../static/js/node_ajax'; import { getNodePrivilegeRoleSchema } from '../../../../../static/js/privilege.ui'; import SequenceSchema from './sequence.ui'; @@ -89,6 +89,16 @@ define('pgadmin.node.sequence', [ } return true; }), + allTables: ()=>getNodeListByName('table', treeNodeInfo, itemNodeData, {includeItemKeys: ['_id']}), + getColumns: (params)=>{ + return getNodeAjaxOptions('get_columns', pgBrowser.Nodes['table'], treeNodeInfo, itemNodeData, {urlParams: params, useCache:false}, (rows)=>{ + return rows.map((r)=>({ + 'value': r.name, + 'image': 'icon-column', + 'label': r.name, + })); + }); + } }, { seqowner: pgBrowser.serverInfo[treeNodeInfo.server._id].user.name, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.ui.js index d9f0f7bb8..0fa2f149c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.ui.js @@ -12,6 +12,61 @@ import BaseUISchema from 'sources/SchemaView/base_schema.ui'; import SecLabelSchema from '../../../../../static/js/sec_label.ui'; import { emptyValidator, isEmptyString } from '../../../../../../../../static/js/validators'; +export class OwnedBySchema extends BaseUISchema { + constructor(allTables, getColumns) { + super({ + owned_table: undefined, + owned_column: undefined, + }); + + this.allTables = allTables; + this.allTablesOptions = []; + this.getColumns = getColumns; + } + + getTableOid(tabName) { + // Here we will fetch the table oid from table name + // iterate over list to find table oid + for(const t of this.allTablesOptions) { + if(t.label === tabName) { + return t._id; + } + } + return; + } + + get baseFields() { + let obj = this; + return [ + { + id: 'owned_table', label: gettext('Table'), type: 'select', editable: false, + options: obj.allTables, + optionsLoaded: (res)=>obj.allTablesOptions=res, + },{ + id: 'owned_column', label: gettext('Column'), editable: false, deps: ['owned_table'], + type: (state)=>{ + let tid = obj.getTableOid(state.owned_table); + return { + type: 'select', + options: state.owned_table ? ()=>obj.getColumns({tid: tid}) : [], + optionsReloadBasis: state.owned_table, + }; + }, + } + ]; + } + + validate(state, setError) { + if (!isEmptyString(state.owned_table) && isEmptyString(state.owned_column)) { + setError('owned_column', gettext('Column cannot be empty.')); + return true; + } else { + setError('owned_column', null); + } + } +} + + export default class SequenceSchema extends BaseUISchema { constructor(getPrivilegeRoleSchema, fieldOptions={}, initValues) { super({ @@ -36,8 +91,10 @@ export default class SequenceSchema extends BaseUISchema { this.fieldOptions = { role: [], schema: [], + allTables: [], ...fieldOptions, }; + this.ownedSchemaObj = new OwnedBySchema(this.fieldOptions.allTables, this.fieldOptions.getColumns); } get idAttribute() { @@ -91,6 +148,13 @@ export default class SequenceSchema extends BaseUISchema { }, { id: 'cycled', label: gettext('Cycled'), type: 'switch', mode: ['properties', 'create', 'edit'], group: gettext('Definition'), + }, { + type: 'nested-fieldset', label: gettext('Owned By'), group: gettext('Definition'), + schema: this.ownedSchemaObj, + }, { + id: 'owned_by_note', type: 'note', group: gettext('Definition'), + mode: ['create', 'edit'], + text: gettext('The OWNED BY option causes the sequence to be associated with a specific table column, such that if that column (or its whole table) is dropped, the sequence will be automatically dropped as well. The specified table must have the same owner and be in the same schema as the sequence.'), }, { id: 'acl', label: gettext('Privileges'), type: 'text', group: gettext('Security'), mode: ['properties'], diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/create.sql index b5f43ceb7..d05180b86 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/create.sql @@ -12,5 +12,7 @@ CREATE SEQUENCE IF NOT EXISTS {{ conn|qtIdent(data.schema, data.name) }}{% if da MAXVALUE {{data.maximum|int}}{% endif %}{% if data.cache is defined and data.cache|int(-1) > -1%} - CACHE {{data.cache|int}}{% endif %}; + CACHE {{data.cache|int}}{% endif %}{% if data.owned_table is defined and data.owned_table != None and data.owned_column is defined and data.owned_column != None %} + + OWNED BY {{ conn|qtIdent(data.owned_table) }}.{{ conn|qtIdent(data.owned_column) }}{% endif %}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/properties.sql index 75e2e898a..64ed3286c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/properties.sql @@ -1,17 +1,22 @@ {% if scid %} SELECT cl.oid as oid, - relname as name, + cl.relname as name, nsp.nspname as schema, - pg_catalog.pg_get_userbyid(relowner) AS seqowner, + pg_catalog.pg_get_userbyid(cl.relowner) AS seqowner, description as comment, - pg_catalog.array_to_string(relacl::text[], ', ') as acl, - (SELECT pg_catalog.array_agg(provider || '=' || label) FROM pg_catalog.pg_seclabels sl1 WHERE sl1.objoid=cl.oid) AS securities + pg_catalog.array_to_string(cl.relacl::text[], ', ') as acl, + (SELECT pg_catalog.array_agg(provider || '=' || label) FROM pg_catalog.pg_seclabels sl1 WHERE sl1.objoid=cl.oid) AS securities, + depcl.relname AS owned_table, + att.attname AS owned_column FROM pg_catalog.pg_class cl LEFT OUTER JOIN pg_catalog.pg_namespace nsp ON cl.relnamespace = nsp.oid LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=cl.oid AND des.classoid='pg_class'::regclass) -WHERE relkind = 'S' AND relnamespace = {{scid}}::oid + LEFT OUTER JOIN pg_catalog.pg_depend dep ON (dep.objid=cl.oid and deptype = 'a') + LEFT JOIN pg_catalog.pg_attribute att ON dep.refobjid=att.attrelid AND dep.refobjsubid=att.attnum + LEFT JOIN pg_catalog.pg_class depcl ON depcl.oid = att.attrelid +WHERE cl.relkind = 'S' AND cl.relnamespace = {{scid}}::oid {% if seid %}AND cl.oid = {{seid}}::oid {% endif %} -ORDER BY relname +ORDER BY cl.relname {% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql index 7aa585f8c..fbb691687 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql @@ -11,6 +11,13 @@ ALTER SEQUENCE IF EXISTS {{ conn|qtIdent(o_data.schema, data.name) }} OWNER TO {{ conn|qtIdent(data.seqowner) }}; {% endif %} +{% if (data.owned_table == None or data.owned_table is not defined) and (o_data.owned_table is defined and o_data.owned_table != None) and (data.owned_column == None or data.owned_column is not defined) %} +ALTER SEQUENCE IF EXISTS {{ conn|qtIdent(o_data.schema, data.name) }} + OWNED BY NONE; +{% elif (data.owned_table is defined or data.owned_column is defined) and (data.owned_table != o_data.owned_table or data.owned_column != o_data.owned_column) %} +ALTER SEQUENCE IF EXISTS {{ conn|qtIdent(o_data.schema, data.name) }} + OWNED BY {% if data.owned_table is defined %}{{ conn|qtIdent(data.owned_table) }}{% else %}{{ conn|qtIdent(o_data.owned_table) }}{% endif %}.{% if data.owned_column is defined %}{{ conn|qtIdent(data.owned_column) }}{% else %}{{ conn|qtIdent(o_data.owned_column) }}{% endif %}; +{% endif %} {% if data.current_value is defined %} {% set seqname = conn|qtIdent(o_data.schema, data.name) %} SELECT setval({{ seqname|qtLiteral }}, {{ data.current_value }}, true); diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_column.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_column.sql new file mode 100644 index 000000000..1f28c190f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_column.sql @@ -0,0 +1,14 @@ +-- SEQUENCE: public.Seq1_$%{}[]()&*^!@"'`\/# + +-- DROP SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#"; + +CREATE SEQUENCE IF NOT EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + INCREMENT 5 + START 5 + MINVALUE 5 + MAXVALUE 999 + CACHE 1 + OWNED BY tableforownedby.col2; + +ALTER SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNER TO postgres; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_column_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_column_msql.sql new file mode 100644 index 000000000..9dd66793d --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_column_msql.sql @@ -0,0 +1,2 @@ +ALTER SEQUENCE IF EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNED BY tableforownedby.col2; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_remove.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_remove.sql new file mode 100644 index 000000000..5041e2513 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_remove.sql @@ -0,0 +1,13 @@ +-- SEQUENCE: public.Seq1_$%{}[]()&*^!@"'`\/# + +-- DROP SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#"; + +CREATE SEQUENCE IF NOT EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + INCREMENT 5 + START 5 + MINVALUE 5 + MAXVALUE 900 + CACHE 1; + +ALTER SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNER TO postgres; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_remove_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_remove_msql.sql new file mode 100644 index 000000000..91656e010 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_ownedby_remove_msql.sql @@ -0,0 +1,4 @@ +ALTER SEQUENCE IF EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNED BY NONE; +ALTER SEQUENCE IF EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + MAXVALUE 900; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby.sql new file mode 100644 index 000000000..5a037b9cf --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby.sql @@ -0,0 +1,14 @@ +-- SEQUENCE: public.Seq1_$%{}[]()&*^!@"'`\/# + +-- DROP SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#"; + +CREATE SEQUENCE IF NOT EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + INCREMENT 5 + START 5 + MINVALUE 5 + MAXVALUE 999 + CACHE 1 + OWNED BY tableforownedby.col1; + +ALTER SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNER TO postgres; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby_msql.sql new file mode 100644 index 000000000..d63bb9586 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby_msql.sql @@ -0,0 +1,10 @@ +CREATE SEQUENCE IF NOT EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + INCREMENT 5 + START 5 + MINVALUE 5 + MAXVALUE 999 + CACHE 1 + OWNED BY tableforownedby.col1; + +ALTER SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNER TO postgres; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby_remove.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby_remove.sql new file mode 100644 index 000000000..f8e3cfb77 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/create_sequence_ownedby_remove.sql @@ -0,0 +1,13 @@ +-- SEQUENCE: public.Seq1_$%{}[]()&*^!@"'`\/# + +-- DROP SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#"; + +CREATE SEQUENCE IF NOT EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + INCREMENT 5 + START 5 + MINVALUE 5 + MAXVALUE 999 + CACHE 1; + +ALTER SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNER TO postgres; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/test_sequences_pg.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/test_sequences_pg.json index 0995825ca..0a58534e1 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/test_sequences_pg.json +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/test_sequences_pg.json @@ -1,5 +1,33 @@ { "scenarios": [ + { + "type": "create", + "name": "Create Table for Owned By", + "endpoint": "NODE-table.obj", + "sql_endpoint": "NODE-table.sql_id", + "data": { + "name": "tableforownedby", + "columns": [ + { + "name": "col1", + "cltype": "integer", + "is_primary_key": true + }, + { + "name": "col2", + "cltype": "text" + }, + { + "name": "col3", + "cltype": "integer" + } + ], + "is_partitioned": false, + "schema": "public", + "spcname": "pg_default" + }, + "store_object_id": true + }, { "type": "create", "name": "Create Sequence", @@ -212,6 +240,59 @@ "data": { "name": "Seq1_$%{}[]()&*^!@\"'`\\/#" } + }, + { + "type": "create", + "name": "Create Sequence with Owned By", + "endpoint": "NODE-sequence.obj", + "sql_endpoint": "NODE-sequence.sql_id", + "msql_endpoint": "NODE-sequence.msql", + "data": { + "name": "Seq1_$%{}[]()&*^!@\"'`\\/#", + "seqowner": "postgres", + "schema": "public", + "increment": "5", + "start": "5", + "maximum": "999", + "minimum": "5", + "cache": "1", + "cycled": false, + "owned_table": "tableforownedby", + "owned_column": "col1", + "relacl": [], + "securities": [] + }, + "expected_sql_file": "create_sequence_ownedby.sql", + "expected_msql_file": "create_sequence_ownedby_msql.sql" + }, { + "type": "alter", + "name": "Alter Sequence owned by column", + "endpoint": "NODE-sequence.obj_id", + "sql_endpoint": "NODE-sequence.sql_id", + "msql_endpoint": "NODE-sequence.msql_id", + "data": { + "owned_column": "col2" + }, + "expected_sql_file": "alter_ownedby_column.sql", + "expected_msql_file": "alter_ownedby_column_msql.sql" + }, { + "type": "alter", + "name": "Alter Sequence remove owned by", + "endpoint": "NODE-sequence.obj_id", + "sql_endpoint": "NODE-sequence.sql_id", + "msql_endpoint": "NODE-sequence.msql_id", + "data": { + "maximum": "900" + }, + "expected_sql_file": "alter_ownedby_remove.sql", + "expected_msql_file": "alter_ownedby_remove_msql.sql" + }, { + "type": "delete", + "name": "Drop owned by sequence", + "endpoint": "NODE-sequence.delete_id", + "data": { + "name": "Seq1_$%{}[]()&*^!@\"'`\\/#" + } } ] } diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_column.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_column.sql new file mode 100644 index 000000000..b8d5b6622 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_column.sql @@ -0,0 +1,14 @@ +-- SEQUENCE: public.Seq1_$%{}[]()&*^!@"'`\/# + +-- DROP SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#"; + +CREATE SEQUENCE IF NOT EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + INCREMENT 5 + START 5 + MINVALUE 5 + MAXVALUE 999 + CACHE 1 + OWNED BY tableforownedby.col2; + +ALTER SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNER TO enterprisedb; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_column_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_column_msql.sql new file mode 100644 index 000000000..9dd66793d --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_column_msql.sql @@ -0,0 +1,2 @@ +ALTER SEQUENCE IF EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNED BY tableforownedby.col2; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_remove.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_remove.sql new file mode 100644 index 000000000..119b51a60 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_remove.sql @@ -0,0 +1,13 @@ +-- SEQUENCE: public.Seq1_$%{}[]()&*^!@"'`\/# + +-- DROP SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#"; + +CREATE SEQUENCE IF NOT EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + INCREMENT 5 + START 5 + MINVALUE 5 + MAXVALUE 900 + CACHE 1; + +ALTER SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNER TO enterprisedb; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_remove_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_remove_msql.sql new file mode 100644 index 000000000..91656e010 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_ownedby_remove_msql.sql @@ -0,0 +1,4 @@ +ALTER SEQUENCE IF EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNED BY NONE; +ALTER SEQUENCE IF EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + MAXVALUE 900; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby.sql new file mode 100644 index 000000000..b1e5c9654 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby.sql @@ -0,0 +1,14 @@ +-- SEQUENCE: public.Seq1_$%{}[]()&*^!@"'`\/# + +-- DROP SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#"; + +CREATE SEQUENCE IF NOT EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + INCREMENT 5 + START 5 + MINVALUE 5 + MAXVALUE 999 + CACHE 1 + OWNED BY tableforownedby.col1; + +ALTER SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNER TO enterprisedb; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby_msql.sql new file mode 100644 index 000000000..722b0214f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby_msql.sql @@ -0,0 +1,10 @@ +CREATE SEQUENCE IF NOT EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + INCREMENT 5 + START 5 + MINVALUE 5 + MAXVALUE 999 + CACHE 1 + OWNED BY tableforownedby.col1; + +ALTER SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNER TO enterprisedb; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby_remove.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby_remove.sql new file mode 100644 index 000000000..980d6d783 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/create_sequence_ownedby_remove.sql @@ -0,0 +1,13 @@ +-- SEQUENCE: public.Seq1_$%{}[]()&*^!@"'`\/# + +-- DROP SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#"; + +CREATE SEQUENCE IF NOT EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#" + INCREMENT 5 + START 5 + MINVALUE 5 + MAXVALUE 999 + CACHE 1; + +ALTER SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" + OWNER TO enterprisedb; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/test_sequences_ppas.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/test_sequences_ppas.json index cafaa9252..646557a02 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/test_sequences_ppas.json +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/test_sequences_ppas.json @@ -1,5 +1,33 @@ { "scenarios": [ + { + "type": "create", + "name": "Create Table for Owned By", + "endpoint": "NODE-table.obj", + "sql_endpoint": "NODE-table.sql_id", + "data": { + "name": "tableforownedby", + "columns": [ + { + "name": "col1", + "cltype": "integer", + "is_primary_key": true + }, + { + "name": "col2", + "cltype": "text" + }, + { + "name": "col3", + "cltype": "integer" + } + ], + "is_partitioned": false, + "schema": "public", + "spcname": "pg_default" + }, + "store_object_id": true + }, { "type": "create", "name": "Create Sequence", @@ -212,6 +240,59 @@ "data": { "name": "Seq1_$%{}[]()&*^!@\"'`\\/#" } + }, + { + "type": "create", + "name": "Create Sequence with Owned By", + "endpoint": "NODE-sequence.obj", + "sql_endpoint": "NODE-sequence.sql_id", + "msql_endpoint": "NODE-sequence.msql", + "data": { + "name": "Seq1_$%{}[]()&*^!@\"'`\\/#", + "seqowner": "enterprisedb", + "schema": "public", + "increment": "5", + "start": "5", + "maximum": "999", + "minimum": "5", + "cache": "1", + "cycled": false, + "owned_table": "tableforownedby", + "owned_column": "col1", + "relacl": [], + "securities": [] + }, + "expected_sql_file": "create_sequence_ownedby.sql", + "expected_msql_file": "create_sequence_ownedby_msql.sql" + }, { + "type": "alter", + "name": "Alter Sequence owned by column", + "endpoint": "NODE-sequence.obj_id", + "sql_endpoint": "NODE-sequence.sql_id", + "msql_endpoint": "NODE-sequence.msql_id", + "data": { + "owned_column": "col2" + }, + "expected_sql_file": "alter_ownedby_column.sql", + "expected_msql_file": "alter_ownedby_column_msql.sql" + }, { + "type": "alter", + "name": "Alter Sequence remove owned by", + "endpoint": "NODE-sequence.obj_id", + "sql_endpoint": "NODE-sequence.sql_id", + "msql_endpoint": "NODE-sequence.msql_id", + "data": { + "maximum": "900" + }, + "expected_sql_file": "alter_ownedby_remove.sql", + "expected_msql_file": "alter_ownedby_remove_msql.sql" + }, { + "type": "delete", + "name": "Drop owned by sequence", + "endpoint": "NODE-sequence.delete_id", + "data": { + "name": "Seq1_$%{}[]()&*^!@\"'`\\/#" + } } ] }