Skip to content

Commit 9317467

Browse files
authored
Enable identity insert on view's base table (#1228)
1 parent 8bd31c2 commit 9317467

File tree

3 files changed

+12
-0
lines changed

3 files changed

+12
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@
1313
#### Fixed
1414

1515
- [#1215](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1215) Fix mismatched foreign key errors
16+
- [#1228](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1228) Enable identity insert on view's base table
1617

1718
Please check [7-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/7-1-stable/CHANGELOG.md) for previous changes.

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ def write_query?(sql) # :nodoc:
1515

1616
def perform_query(raw_connection, sql, binds, type_casted_binds, prepare:, notification_payload:, batch:)
1717
result = if id_insert_table_name = query_requires_identity_insert?(sql)
18+
# If the table name is a view, we need to get the base table name for enabling identity insert.
19+
id_insert_table_name = view_table_name(id_insert_table_name) if view_exists?(id_insert_table_name)
20+
1821
with_identity_insert_enabled(id_insert_table_name, raw_connection) do
1922
internal_exec_sql_query(sql, raw_connection)
2023
end

test/cases/view_test_sqlserver.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,12 @@ class ViewTestSQLServer < ActiveRecord::TestCase
4747
assert_equal 1, klass.count
4848
end
4949
end
50+
51+
describe 'identity insert' do
52+
it "identity insert works with views" do
53+
assert_difference("SSTestCustomersView.count", 1) do
54+
SSTestCustomersView.create!(id: 5, name: "Bob")
55+
end
56+
end
57+
end
5058
end

0 commit comments

Comments
 (0)