From 44e77b617e25534c627509da631583cf7c90b33c Mon Sep 17 00:00:00 2001 From: Jose Camacho Date: Wed, 11 Oct 2023 23:34:28 -0600 Subject: [PATCH 1/2] Pass new identity attribute to preserve argument order --- .../postgis/schema_statements.rb | 13 +++++++------ .../connection_adapters/postgis/spatial_column.rb | 4 ++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/active_record/connection_adapters/postgis/schema_statements.rb b/lib/active_record/connection_adapters/postgis/schema_statements.rb index 863ff0e5..23eda942 100644 --- a/lib/active_record/connection_adapters/postgis/schema_statements.rb +++ b/lib/active_record/connection_adapters/postgis/schema_statements.rb @@ -8,15 +8,15 @@ module SchemaStatements # https://github.com/rails/rails/blob/7-0-stable/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L662 # Create a SpatialColumn instead of a PostgreSQL::Column def new_column_from_field(table_name, field, _definitions) - column_name, type, default, notnull, oid, fmod, collation, comment, attgenerated = field + column_name, type, default, notnull, oid, fmod, collation, comment, identity, attgenerated = field type_metadata = fetch_type_metadata(column_name, type, oid.to_i, fmod.to_i) default_value = extract_value_from_default(default) - if attgenerated.present? - default_function = default - else - default_function = extract_default_function(default_value, default) - end + default_function = if attgenerated.present? + default + else + extract_default_function(default_value, default) + end if (match = default_function&.match(/\Anextval\('"?(?.+_(?seq\d*))"?'::regclass\)\z/)) serial = sequence_name_from_parts(table_name, column_name, match[:suffix]) == match[:sequence_name] @@ -35,6 +35,7 @@ def new_column_from_field(table_name, field, _definitions) comment: comment.presence, serial: serial, generated: attgenerated, + identity: identity.presence, spatial: spatial ) end diff --git a/lib/active_record/connection_adapters/postgis/spatial_column.rb b/lib/active_record/connection_adapters/postgis/spatial_column.rb index 1e990521..9457e390 100644 --- a/lib/active_record/connection_adapters/postgis/spatial_column.rb +++ b/lib/active_record/connection_adapters/postgis/spatial_column.rb @@ -9,7 +9,7 @@ class SpatialColumn < ConnectionAdapters::PostgreSQLColumn # :nodoc: # "Geography(Point,4326)" def initialize(name, default, sql_type_metadata = nil, null = true, default_function = nil, collation: nil, comment: nil, - serial: nil, generated: nil, spatial: nil) + serial: nil, generated: nil, spatial: nil, identity: nil) @sql_type_metadata = sql_type_metadata @geographic = !!(sql_type_metadata.sql_type =~ /geography\(/i) if spatial @@ -31,7 +31,7 @@ def initialize(name, default, sql_type_metadata = nil, null = true, build_from_sql_type(sql_type_metadata.sql_type) end super(name, default, sql_type_metadata, null, default_function, - collation: collation, comment: comment, serial: serial, generated: generated) + collation: collation, comment: comment, serial: serial, generated: generated, identity: identity) if spatial? && @srid @limit = { srid: @srid, type: to_type_name(geometric_type) } @limit[:has_z] = true if @has_z From 7778ebebb14c6ed6dbc293fcb71da8b14ca09187 Mon Sep 17 00:00:00 2001 From: Jose Ramon C Date: Wed, 11 Oct 2023 23:41:21 -0600 Subject: [PATCH 2/2] restore unnecessary change --- .../connection_adapters/postgis/schema_statements.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/active_record/connection_adapters/postgis/schema_statements.rb b/lib/active_record/connection_adapters/postgis/schema_statements.rb index 23eda942..62f3f754 100644 --- a/lib/active_record/connection_adapters/postgis/schema_statements.rb +++ b/lib/active_record/connection_adapters/postgis/schema_statements.rb @@ -12,11 +12,11 @@ def new_column_from_field(table_name, field, _definitions) type_metadata = fetch_type_metadata(column_name, type, oid.to_i, fmod.to_i) default_value = extract_value_from_default(default) - default_function = if attgenerated.present? - default - else - extract_default_function(default_value, default) - end + if attgenerated.present? + default_function = default + else + default_function = extract_default_function(default_value, default) + end if (match = default_function&.match(/\Anextval\('"?(?.+_(?seq\d*))"?'::regclass\)\z/)) serial = sequence_name_from_parts(table_name, column_name, match[:suffix]) == match[:sequence_name]