Story#104525318 - in domain history import match change records in historical order

This commit is contained in:
Vladimir Krylov 2015-11-24 16:55:17 +02:00
parent df6e254cc6
commit 3e8309f818
3 changed files with 106 additions and 30 deletions

View file

@ -5,5 +5,33 @@ module Legacy
belongs_to :domain, foreign_key: :id
belongs_to :history, foreign_key: :historyid
has_one :object_history, foreign_key: :historyid, primary_key: :historyid
def get_current_domain_object(param)
p "not implemented #{__method__}"
end
def get_current_changes(param)
p "not implemented #{__method__}"
end
class << self
def changes_dates_for domain_id
sql = %Q{SELECT dh.*, valid_from--, extract(epoch from h.valid_from) valid_from_unix, extract(epoch from h.valid_to) valid_to_unix
FROM domain_history dh JOIN history h ON dh.historyid=h.id where dh.id=#{domain_id};}
# find_by_sql(sql).map{|e| e.attributes.values_at("valid_from") }.flatten.each_with_object({}){|e,h|h[e.try(:to_f)] = [self]}
hash = {}
find_by_sql(sql).each do |rec|
hash[rec.valid_from.try(:to_time)] = [{id: rec.historyid, klass: self, param: :valid_from}] if rec.valid_from
end
hash
end
def get_record_at domain_id, rec_id
sql = %Q{SELECT dh.*, h.valid_from, h.valid_to from domain_history dh JOIN history h ON dh.historyid=h.id
where dh.id=#{domain_id} and dh.historyid = #{rec_id} ;}
find_by_sql(sql).first
end
end
end
end

View file

@ -80,18 +80,40 @@ module Legacy
map[state_id]
end
def get_current_domain_object(param)
p "not implemented #{__method__}"
end
class << self
def get_current_changes(param)
p "not implemented #{__method__}"
end
class << self
def changes_dates_for domain_id
sql = %Q{SELECT t_2.id, state.*
FROM object_history t_2
JOIN object_state state ON (t_2.historyid >= state.ohid_from
AND (t_2.historyid <= state.ohid_to OR state.ohid_to IS NULL))
AND t_2.id = state.object_id
WHERE state.object_id=#{domain_id}
ORDER BY t_2.historyid;}
find_by_sql(sql).map{|e| e.attributes.values_at("valid_from", "valid_to") }.flatten.each_with_object({}){|e,h|h[e] = [self]}
sql = %Q{SELECT distinct t_2.id, state.id state_dot_id, state.*,
extract(epoch from valid_from) valid_from_unix, extract(epoch from valid_to) valid_to_unix
FROM object_history t_2
JOIN object_state state ON (t_2.historyid >= state.ohid_from
AND (t_2.historyid <= state.ohid_to OR state.ohid_to IS NULL))
AND t_2.id = state.object_id
WHERE state.object_id=#{domain_id};}
hash = {}
find_by_sql(sql).each do |rec|
hash[rec.valid_from.try(:to_time)] = [{id: rec.state_dot_id, klass: self, param: :valid_from}] if rec.valid_from
hash[rec.valid_to.try(:to_time)] = [{id: rec.state_dot_id, klass: self, param: :valid_to}] if rec.valid_to
end
hash
end
end
def get_record_at domain_id, rec_id
sql = %Q{SELECT distinct t_2.id, state.*
FROM object_history t_2
JOIN object_state state ON (t_2.historyid >= state.ohid_from
AND (t_2.historyid <= state.ohid_to OR state.ohid_to IS NULL))
AND t_2.id = state.object_id
WHERE state.object_id=#{domain_id} AND state.id = #{rec_id};}
find_by_sql(sql).first
end
end
end
end