From 014c5bdceb91ab876d10939c308611748ee0ee9c Mon Sep 17 00:00:00 2001 From: cedricnjanga Date: Tue, 3 Oct 2017 15:01:14 +0200 Subject: Refs #4678 Add migration to convert control attributes to hstore --- ..._in_compliance_control_and_in_compliance_check.rb | 20 ++++++++++++++++++++ db/schema.rb | 8 ++++---- 2 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 db/migrate/20171003123007_change_control_attributes_format_in_compliance_control_and_in_compliance_check.rb diff --git a/db/migrate/20171003123007_change_control_attributes_format_in_compliance_control_and_in_compliance_check.rb b/db/migrate/20171003123007_change_control_attributes_format_in_compliance_control_and_in_compliance_check.rb new file mode 100644 index 000000000..cf1e31970 --- /dev/null +++ b/db/migrate/20171003123007_change_control_attributes_format_in_compliance_control_and_in_compliance_check.rb @@ -0,0 +1,20 @@ +class ChangeControlAttributesFormatInComplianceControlAndInComplianceCheck < ActiveRecord::Migration + def change + + execute <<-SQL + CREATE OR REPLACE FUNCTION my_json_to_hstore(json) + RETURNS hstore + IMMUTABLE + STRICT + LANGUAGE sql + AS $func$ + SELECT hstore(array_agg(key), array_agg(value)) + FROM json_each_text($1) + $func$; + SQL + + change_column :compliance_controls, :control_attributes, 'hstore USING my_json_to_hstore(control_attributes)' + change_column :compliance_checks, :control_attributes, 'hstore USING my_json_to_hstore(control_attributes)' + execute "DROP FUNCTION my_json_to_hstore(json)" + end +end diff --git a/db/schema.rb b/db/schema.rb index 91ffdd60c..608a611a3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20171002080526) do +ActiveRecord::Schema.define(version: 20171003123007) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -205,7 +205,7 @@ ActiveRecord::Schema.define(version: 20171002080526) do t.integer "compliance_check_set_id" t.integer "compliance_check_block_id" t.string "type" - t.json "control_attributes" + t.hstore "control_attributes" t.string "name" t.string "code" t.integer "criticity" @@ -240,7 +240,7 @@ ActiveRecord::Schema.define(version: 20171002080526) do create_table "compliance_controls", id: :bigserial, force: :cascade do |t| t.integer "compliance_control_set_id" t.string "type" - t.json "control_attributes" + t.hstore "control_attributes" t.string "name" t.string "code" t.string "criticity" @@ -402,9 +402,9 @@ ActiveRecord::Schema.define(version: 20171002080526) do t.string "type" t.integer "parent_id", limit: 8 t.string "parent_type" - t.datetime "notified_parent_at" t.integer "current_step", default: 0 t.integer "total_steps", default: 0 + t.datetime "notified_parent_at" t.string "creator" end -- cgit v1.2.3