Sha256: 814133637d36cab7cee74096bef27d50eb7b579585784adfd69544a9d461fa32
Contents?: true
Size: 1.9 KB
Versions: 2
Compression:
Stored size: 1.9 KB
Contents
# frozen_string_literal: true module TemporalTables module ConnectionAdapters module AbstractMysqlAdapter def drop_temporal_triggers(table_name) execute "drop trigger #{table_name}_ai" execute "drop trigger #{table_name}_au" execute "drop trigger #{table_name}_ad" end def create_temporal_triggers(table_name) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize column_names = columns(table_name).map(&:name) execute "drop trigger if exists #{table_name}_ai" execute %{ create trigger #{table_name}_ai after insert on #{table_name} for each row begin set @current_time = utc_timestamp(6); insert into #{temporal_name(table_name)} (#{column_names.join(', ')}, eff_from) values (#{column_names.collect { |c| "new.#{c}" }.join(', ')}, @current_time); end } execute "drop trigger if exists #{table_name}_au" execute %{ create trigger #{table_name}_au after update on #{table_name} for each row begin set @current_time = utc_timestamp(6); update #{temporal_name(table_name)} set eff_to = @current_time where id = new.id and eff_to = '9999-12-31'; insert into #{temporal_name(table_name)} (#{column_names.join(', ')}, eff_from) values (#{column_names.collect { |c| "new.#{c}" }.join(', ')}, @current_time); end } execute "drop trigger if exists #{table_name}_ad" execute %{ create trigger #{table_name}_ad after delete on #{table_name} for each row begin set @current_time = utc_timestamp(6); update #{temporal_name(table_name)} set eff_to = @current_time where id = old.id and eff_to = '9999-12-31'; end } end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
temporal_tables-1.0.3 | lib/temporal_tables/connection_adapters/mysql_adapter.rb |
temporal_tables-1.0.2 | lib/temporal_tables/connection_adapters/mysql_adapter.rb |