Skip to content

Commit 5a19ecd

Browse files
committed
Fix some issues from a recent PR
1 parent e25f184 commit 5a19ecd

File tree

6 files changed

+58
-66
lines changed

6 files changed

+58
-66
lines changed

lib/temporal_tables/temporal_adapter.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def remove_temporal_table(table_name)
7474
return unless table_exists?(temporal_name(table_name))
7575

7676
drop_temporal_triggers table_name
77-
drop_table temporal_name(table_name)
77+
drop_table_without_temporal temporal_name(table_name)
7878
end
7979

8080
def drop_table(table_name, **options)

spec/basic_history_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@
207207
end
208208
end
209209

210-
if TemporalTables::DatabaseAdapter.adapter_name != 'mysql'
210+
if TemporalTables::DatabaseHelper.adapter_name != 'mysql'
211211
describe 'when changing a creature with an array column' do
212212
let!(:cat) { Cat.create name: 'Mr. Mittens', nicknames: %w[Blacky Kitty] }
213213

spec/spec_helper.rb

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,9 @@
99
READ_DATABASE_CONFIG_LOCATION = 'spec/internal/config/database.ci.yml'
1010
WRITE_DATABASE_CONFIG_LOCATION = 'spec/internal/config/database.yml'
1111

12-
def adapter_name
13-
if Gemika::Env.gem?('mysql2')
14-
'mysql'
15-
else
16-
'postgresql'
17-
end
18-
end
19-
2012
def database_config_from_gems(file_location)
2113
config = YAML.load_file(file_location)
22-
data = config.slice(adapter_name)
14+
data = config.slice(TemporalTables::DatabaseHelper.adapter_name)
2315
{ Rails.env.to_s => data }
2416
end
2517

@@ -31,7 +23,7 @@ def database_config_from_gems(file_location)
3123
database_config_from_gems(READ_DATABASE_CONFIG_LOCATION).to_yaml
3224
)
3325

34-
Rails.env = adapter_name
26+
Rails.env = TemporalTables::DatabaseHelper.adapter_name
3527
database = Gemika::Database.new
3628
database.connect
3729

spec/support/database.rb

Lines changed: 0 additions & 43 deletions
This file was deleted.

spec/support/database_helper.rb

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# frozen_string_literal: true
2+
3+
module TemporalTables
4+
module DatabaseHelper
5+
def self.adapter_name
6+
if Gemika::Env.gem?('pg')
7+
'postgresql'
8+
elsif Gemika::Env.gem?('mysql2')
9+
'mysql'
10+
else
11+
raise 'Cannot determine adapter'
12+
end
13+
end
14+
15+
def self.function_exists?(name)
16+
case adapter_name
17+
when 'postgresql'
18+
begin
19+
ActiveRecord::Base.connection.execute("select(pg_get_functiondef('#{name}'::regprocedure))").present?
20+
rescue ActiveRecord::StatementInvalid
21+
false
22+
end
23+
when 'mysql' then raise NotImplementedError
24+
else raise "Unknown adapter #{adapter_name}"
25+
end
26+
end
27+
28+
def self.trigger_exists?(name) # rubocop:disable Metrics/MethodLength
29+
case adapter_name
30+
when 'postgresql'
31+
ActiveRecord::Base.connection.execute(
32+
"select (pg_get_triggerdef(oid)) FROM pg_trigger WHERE tgname = '#{name}'"
33+
).first.present?
34+
when 'mysql'
35+
ActiveRecord::Base.connection.execute(
36+
'SHOW TRIGGERS FROM temporal_tables_test'
37+
).find { |row| row.first == name }.present?
38+
else
39+
raise "Unknown adapter #{adapter_name}"
40+
end
41+
end
42+
end
43+
end

spec/temporal_tables/temporal_adapter_spec.rb

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,28 @@
55
describe TemporalTables::TemporalAdapter do
66
describe '#remove_temporal_table' do
77
it 'correctly removes history table, functions and triggers' do
8-
skip 'mysql has no functions' if adapter_name == 'mysql'
8+
skip 'mysql has no functions' if TemporalTables::DatabaseHelper.adapter_name == 'mysql'
99

1010
expect do
1111
ActiveRecord::Schema.define { remove_temporal_table :people }
1212
end.to change { table_exists?('people_h') }.from(true).to(false)
13-
.and change { function_exists?('people_ai()') }.from(true).to(false)
14-
.and change { function_exists?('people_au()') }.from(true).to(false)
15-
.and change { function_exists?('people_ad()') }.from(true).to(false)
16-
.and change { trigger_exists?('people_ai') }.from(true).to(false)
17-
.and change { trigger_exists?('people_au') }.from(true).to(false)
18-
.and change { trigger_exists?('people_ad') }.from(true).to(false)
13+
.and change { TemporalTables::DatabaseHelper.function_exists?('people_ai()') }.from(true).to(false)
14+
.and change { TemporalTables::DatabaseHelper.function_exists?('people_au()') }.from(true).to(false)
15+
.and change { TemporalTables::DatabaseHelper.function_exists?('people_ad()') }.from(true).to(false)
16+
.and change { TemporalTables::DatabaseHelper.trigger_exists?('people_ai') }.from(true).to(false)
17+
.and change { TemporalTables::DatabaseHelper.trigger_exists?('people_au') }.from(true).to(false)
18+
.and change { TemporalTables::DatabaseHelper.trigger_exists?('people_ad') }.from(true).to(false)
1919
end
2020

2121
it 'correctly removes history table and triggers' do
22-
skip 'other adapters than mysql have functions, too' if adapter_name != 'mysql'
22+
skip 'other adapters than mysql have functions, too' if TemporalTables::DatabaseHelper.adapter_name != 'mysql'
2323

2424
expect do
2525
ActiveRecord::Schema.define { remove_temporal_table :people }
2626
end.to change { table_exists?('people_h') }.from(true).to(false)
27-
.and change { trigger_exists?('people_ai') }.from(true).to(false)
28-
.and change { trigger_exists?('people_au') }.from(true).to(false)
29-
.and change { trigger_exists?('people_ad') }.from(true).to(false)
27+
.and change { TemporalTables::DatabaseHelper.trigger_exists?('people_ai') }.from(true).to(false)
28+
.and change { TemporalTables::DatabaseHelper.trigger_exists?('people_au') }.from(true).to(false)
29+
.and change { TemporalTables::DatabaseHelper.trigger_exists?('people_ad') }.from(true).to(false)
3030
end
3131
end
3232
end

0 commit comments

Comments
 (0)