From b0d64c47355baa5939b585cccae74fd9b1aa3960 Mon Sep 17 00:00:00 2001 From: ms32035 Date: Tue, 11 Mar 2014 22:55:32 +0100 Subject: [PATCH 1/4] Postgresql compatibility for agent model --- app/models/agent.rb | 4 +++- lib/rdbms_functions.rb | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 lib/rdbms_functions.rb diff --git a/app/models/agent.rb b/app/models/agent.rb index 6a950a34..d5a0ed92 100644 --- a/app/models/agent.rb +++ b/app/models/agent.rb @@ -10,6 +10,7 @@ class Agent < ActiveRecord::Base include AssignableTypes include MarkdownClassAttributes include JSONSerializedField + include RDBMSFunctions markdown_class_attributes :description, :event_description @@ -127,7 +128,8 @@ class Agent < ActiveRecord::Base if keep_events_for == 0 events.update_all :expires_at => nil else - events.update_all "expires_at = DATE_ADD(`created_at`, INTERVAL #{keep_events_for.to_i} DAY)" + #events.update_all "expires_at = DATE_ADD(`created_at`, INTERVAL #{keep_events_for.to_i} DAY)" + events.update_all "expires_at = " + rdbms_date_add("created_at","DAY",keep_events_for.to_i) end end diff --git a/lib/rdbms_functions.rb b/lib/rdbms_functions.rb new file mode 100644 index 00000000..a2b1c6e3 --- /dev/null +++ b/lib/rdbms_functions.rb @@ -0,0 +1,13 @@ +module RDBMSFunctions + def rdbms_date_add(source, unit, amount) + adapter_type = connection.adapter_name.downcase.to_sym + case adapter_type + when :mysql + "DATE_ADD(`#{source}`, INTERVAL #{unit} #{AMOUNT})" + when :postgresql + "(#{source} + INTERVAL '#{amount} #{unit}')" + else + raise NotImplementedError, "Unknown adapter type '#{adapter_type}'" + end + end +end From 3d33881897977902f2bfc61ace46ae24211b3c14 Mon Sep 17 00:00:00 2001 From: ms32035 Date: Tue, 11 Mar 2014 23:05:10 +0100 Subject: [PATCH 2/4] date_add for mysql correction --- lib/rdbms_functions.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rdbms_functions.rb b/lib/rdbms_functions.rb index a2b1c6e3..98e075d0 100644 --- a/lib/rdbms_functions.rb +++ b/lib/rdbms_functions.rb @@ -3,7 +3,7 @@ module RDBMSFunctions adapter_type = connection.adapter_name.downcase.to_sym case adapter_type when :mysql - "DATE_ADD(`#{source}`, INTERVAL #{unit} #{AMOUNT})" + "DATE_ADD(`#{source}`, INTERVAL #{amount} #{unit})" when :postgresql "(#{source} + INTERVAL '#{amount} #{unit}')" else From e5c2cac42ac80a743754c5fbf58ce8d086e585a8 Mon Sep 17 00:00:00 2001 From: ms32035 Date: Thu, 13 Mar 2014 23:50:46 +0100 Subject: [PATCH 3/4] Gem mysql2 + port for test environment --- app/models/agent.rb | 3 +-- config/database.yml | 1 + lib/rdbms_functions.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/models/agent.rb b/app/models/agent.rb index d5a0ed92..515ed012 100644 --- a/app/models/agent.rb +++ b/app/models/agent.rb @@ -128,8 +128,7 @@ class Agent < ActiveRecord::Base if keep_events_for == 0 events.update_all :expires_at => nil else - #events.update_all "expires_at = DATE_ADD(`created_at`, INTERVAL #{keep_events_for.to_i} DAY)" - events.update_all "expires_at = " + rdbms_date_add("created_at","DAY",keep_events_for.to_i) + events.update_all "expires_at = " + rdbms_date_add("created_at", "DAY", keep_events_for.to_i) end end diff --git a/config/database.yml b/config/database.yml index 5ee739d6..40d959a4 100644 --- a/config/database.yml +++ b/config/database.yml @@ -21,6 +21,7 @@ test: socket: <%= ENV['DATABASE_SOCKET'] || ["/var/run/mysqld/mysqld.sock", "/opt/local/var/run/mysql5/mysqld.sock", "/tmp/mysql.sock"].find{ |path| File.exist? path } %> encoding: <%= ENV['DATABASE_ENCODING'] || "utf8" %> reconnect: <%= ENV['DATABASE_RECONNECT'] || "true" %> + port: <%= ENV['DATABASE_PORT'] || "" %> pool: <%= ENV['DATABASE_POOL'] || "5" %> production: diff --git a/lib/rdbms_functions.rb b/lib/rdbms_functions.rb index 98e075d0..3de9e865 100644 --- a/lib/rdbms_functions.rb +++ b/lib/rdbms_functions.rb @@ -2,7 +2,7 @@ module RDBMSFunctions def rdbms_date_add(source, unit, amount) adapter_type = connection.adapter_name.downcase.to_sym case adapter_type - when :mysql + when :mysql, :mysql2 "DATE_ADD(`#{source}`, INTERVAL #{amount} #{unit})" when :postgresql "(#{source} + INTERVAL '#{amount} #{unit}')" From 686694cdd2f5759843578c4391744537f3614600 Mon Sep 17 00:00:00 2001 From: ms32035 Date: Sun, 23 Mar 2014 17:58:55 +0100 Subject: [PATCH 4/4] Add to_i for Agent postgres compatibility --- app/models/agent.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/agent.rb b/app/models/agent.rb index 515ed012..41d204e3 100644 --- a/app/models/agent.rb +++ b/app/models/agent.rb @@ -266,8 +266,8 @@ class Agent < ActiveRecord::Base agents_to_events = {} Agent.connection.select_rows(sql).each do |receiver_agent_id, source_agent_id, event_id| - agents_to_events[receiver_agent_id] ||= [] - agents_to_events[receiver_agent_id] << event_id + agents_to_events[receiver_agent_id.to_i] ||= [] + agents_to_events[receiver_agent_id.to_i] << event_id end event_ids = agents_to_events.values.flatten.uniq.compact