diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py index 01f961a..f01957b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py @@ -680,6 +680,14 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings): if isArray: column['cltype'] += "[]" + else: + # This will check & return for serial types in case if its serial type + serial_type = self.get_serial_type( + self.conn, tid, column['cltype'], column['attnum'] + ) + if serial_type: + column['cltype'] = serial_type + column['edit_types'].append(serial_type) if 'indkey' in column: # Current column @@ -1129,7 +1137,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings): 'get_types_where_condition.sql']), show_system_objects=self.blueprint.show_system_objects) - status, types = self.get_types(self.conn, condition) + status, types = self.get_types(self.conn, condition, True) if not status: return internal_server_error(errormsg=types) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/__init__.py index c60bbfb..49d8833 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/__init__.py @@ -434,6 +434,14 @@ class ColumnsView(PGChildNodeView, DataTypeReader): if isArray: data['cltype'] += "[]" + else: + # This will check & return for serial types in case if its serial type + serial_type = self.get_serial_type( + self.conn, tid, data['cltype'], data['attnum'] + ) + if serial_type: + data['cltype'] = serial_type + data['edit_types'].append(serial_type) return data diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/templates/column/js/column.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/templates/column/js/column.js index a2a0413..1c5b9f6 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/templates/column/js/column.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/templates/column/js/column.js @@ -327,8 +327,14 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) { } },{ id: 'defval', label:'{{ _('Default Value') }}', cell: 'string', - type: 'text', disabled: 'inSchemaWithColumnCheck', - group: '{{ _('Definition') }}' + type: 'text', group: '{{ _('Definition') }}', deps: ['cltype'], + disabled: function(m) { + if(!m.inSchemaWithModelCheck.apply(this, [m])) { + var type = m.get('cltype'); + return type == 'serial' || type == 'bigserial' + || type == 'smallserial'; + } + } },{ id: 'attnotnull', label:'{{ _('Not NULL?') }}', cell: 'string', type: 'switch', disabled: 'inSchemaWithColumnCheck', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/datatype/sql/9.1_plus/get_types.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/datatype/sql/9.1_plus/get_types.sql index f465a46..4f04090 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/datatype/sql/9.1_plus/get_types.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/datatype/sql/9.1_plus/get_types.sql @@ -15,5 +15,11 @@ FROM (NOT (typname = 'unknown' AND nspname = 'pg_catalog')) AND {{ condition }} +{% if add_serials %} +{# Here we will add serials types manually #} + UNION SELECT 'smallserial', 0, 2, 'b', 0, 'pg_catalog', false, false + UNION SELECT 'bigserial', 0, 8, 'b', 0, 'pg_catalog', false, false + UNION SELECT 'serial', 0, 4, 'b', 0, 'pg_catalog', false, false +{% endif %} ) AS dummy ORDER BY nspname <> 'pg_catalog', nspname <> 'public', nspname, 1 \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/utils.py index b46a5a0..2cf920e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/utils.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/utils.py @@ -75,13 +75,14 @@ class DataTypeReader: - Returns data-types on the basis of the condition provided. """ - def get_types(self, conn, condition): + def get_types(self, conn, condition, add_serials=False): """ Returns data-types including calculation for Length and Precision. Args: conn: Connection Object condition: condition to restrict SQL statement + add_serials: If you want to serials type """ res = [] try: @@ -91,7 +92,8 @@ class DataTypeReader: SQL = render_template("/".join([sql_template_path, 'get_types.sql']), - condition=condition) + condition=condition, + add_serials=add_serials) status, rset = conn.execute_2darray(SQL) if not status: return status, rset @@ -235,6 +237,39 @@ class DataTypeReader: else: return name + length + array + def get_serial_type(self, conn, tbl_oid, type_name, column_number): + """ + Returns serials type. + + Args: + conn: Connection object + tbl_oid: Table OID + type_name: Type name + column_number: Column number + """ + if type_name == 'integer' or type_name == 'bigint' or \ + type_name == 'smallint' or \ + type_name == 'pg_catalog.integer' or \ + type_name == 'pg_catalog.bigint' or \ + type_name == 'pg_catalog.smallint': + sql = "SELECT count(classid) FROM pg_depend " \ + "WHERE refobjid= {0} " \ + "AND refobjsubid = {1}" \ + "AND deptype='a';".format(tbl_oid, column_number) + + status, count = conn.execute_scalar(sql) + if not status: + return internal_server_error(errormsg=count) + if count != 0: + if type_name.endswith("bigint"): + return "bigserial" + elif type_name.endswith("smallint"): + return "smallserial" + else: + return "serial" + else: + return None + def trigger_definition(data): """