8
8
require "models/minimalistic"
9
9
require "models/college"
10
10
11
+ require "models/dog" # A model that exists in both AR databases
12
+
11
13
class AdapterTestSQLServer < ActiveRecord ::TestCase
12
14
fixtures :tasks
13
15
14
16
let ( :basic_insert_sql ) { "INSERT INTO [funny_jokes] ([name]) VALUES('Knock knock')" }
15
17
let ( :basic_update_sql ) { "UPDATE [customers] SET [address_street] = NULL WHERE [id] = 2" }
16
18
let ( :basic_select_sql ) { "SELECT * FROM [customers] WHERE ([customers].[id] = 1)" }
19
+ let ( :cross_database_insert_sql ) do
20
+ arunit_connection = Topic . lease_connection
21
+ arunit2_connection = College . lease_connection
22
+ arunit_database = arunit_connection . pool . db_config . database
23
+ arunit2_database = arunit2_connection . pool . db_config . database
24
+ "INSERT INTO #{ arunit2_database } .dbo.dogs SELECT * FROM #{ arunit_database } .dbo.dogs"
25
+ end
17
26
18
27
it "has basic and non-sensitive information in the adapters inspect method" do
19
28
string = connection . inspect
@@ -83,6 +92,21 @@ class AdapterTestSQLServer < ActiveRecord::TestCase
83
92
assert arunit2_connection . table_exists? ( "#{ arunit_database } .dbo.topics" ) , 'Topics table exists using Colleges connection'
84
93
end
85
94
95
+ # it "test sql insert across databases" do
96
+ # arunit_connection = Topic.lease_connection
97
+ # arunit2_connection = College.lease_connection
98
+ #
99
+ # arunit_database = arunit_connection.pool.db_config.database
100
+ # arunit2_database = arunit2_connection.pool.db_config.database
101
+ #
102
+ # sql = <<~SQL
103
+ # INSERT INTO #{arunit2_database}.dbo.dogs SELECT * FROM #{arunit_database}.dbo.dogs
104
+ # SQL
105
+ #
106
+ # arunit_connection.exec_insert sql
107
+ # assert arunit_connection.send(:query_requires_identity_insert?, sql)
108
+ #
109
+ # end
86
110
it "return true to insert sql query for inserts only" do
87
111
assert connection . send ( :insert_sql? , "INSERT..." )
88
112
assert connection . send ( :insert_sql? , "EXEC sp_executesql N'INSERT INTO [fk_test_has_fks] ([fk_id]) VALUES (@0); SELECT CAST(SCOPE_IDENTITY() AS bigint) AS Ident', N'@0 int', @0 = 0" )
@@ -200,6 +224,7 @@ class AdapterTestSQLServer < ActiveRecord::TestCase
200
224
@identity_insert_sql_non_dbo_sp = "EXEC sp_executesql N'INSERT INTO [test].[aliens] ([id],[name]) VALUES (@0, @1)', N'@0 int, @1 nvarchar(255)', @0 = 420, @1 = N'Mork'"
201
225
@identity_insert_sql_non_dbo_unquoted_sp = "EXEC sp_executesql N'INSERT INTO test.aliens (id, name) VALUES (@0, @1)', N'@0 int, @1 nvarchar(255)', @0 = 420, @1 = N'Mork'"
202
226
@identity_insert_sql_non_dbo_unordered_sp = "EXEC sp_executesql N'INSERT INTO [test].[aliens] ([name],[id]) VALUES (@0, @1)', N'@0 nvarchar(255), @1 int', @0 = N'Mork', @1 = 420"
227
+
203
228
end
204
229
205
230
it "return quoted table_name to #query_requires_identity_insert? when INSERT sql contains id column" do
@@ -216,18 +241,26 @@ class AdapterTestSQLServer < ActiveRecord::TestCase
216
241
assert_equal "[test].[aliens]" , connection . send ( :query_requires_identity_insert? , @identity_insert_sql_non_dbo_sp )
217
242
assert_equal "[test].[aliens]" , connection . send ( :query_requires_identity_insert? , @identity_insert_sql_non_dbo_unquoted_sp )
218
243
assert_equal "[test].[aliens]" , connection . send ( :query_requires_identity_insert? , @identity_insert_sql_non_dbo_unordered_sp )
244
+
219
245
end
220
246
221
247
it "return false to #query_requires_identity_insert? for normal SQL" do
222
- [ basic_insert_sql , basic_update_sql , basic_select_sql ] . each do |sql |
248
+ [ basic_insert_sql , basic_update_sql , basic_select_sql , cross_database_insert_sql ] . each do |sql |
223
249
assert !connection . send ( :query_requires_identity_insert? , sql ) , "SQL was #{ sql } "
224
250
end
225
251
end
226
252
227
253
it "find identity column using #identity_columns" do
228
254
task_id_column = Task . columns_hash [ "id" ]
229
- assert_equal task_id_column . name , connection . send ( :identity_columns , Task . table_name ) . first . name
230
- assert_equal task_id_column . sql_type , connection . send ( :identity_columns , Task . table_name ) . first . sql_type
255
+ assert_equal task_id_column . name , connection . send ( :identity_columns , Task . table_name ) . first
256
+
257
+
258
+ end
259
+
260
+ it "find identity column in other database" do
261
+ arunit2_connection = College . lease_connection
262
+ arunit2_database = arunit2_connection . pool . db_config . database
263
+ assert_equal Dog . columns_hash [ "id" ] . name , connection . send ( :identity_columns , "#{ arunit2_database } .dbo.dogs" ) . first
231
264
end
232
265
233
266
it "return an empty array when calling #identity_columns for a table_name with no identity" do
0 commit comments