From d6f985f61c9dc61ccd1e04593d765d1d04c8931b Mon Sep 17 00:00:00 2001 From: Usuario de Programacion Date: Wed, 18 Feb 2009 17:32:01 +0100 Subject: [PATCH] Changed the returned simplified type when DB type is XML. This way the schema is correctly dumped to schema.rb --- .../connection_adapters/postgresql_adapter.rb | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 913bb52..ce7d291 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -99,7 +99,7 @@ module ActiveRecord :string # XML type when /^xml$/ - :string + :xml # Arrays when /^\D+\[\]$/ :string -- 1.6.0.1 From bc4c77333ce2433703e8f7531a0ef8c01a645efe Mon Sep 17 00:00:00 2001 From: Usuario de Programacion Date: Wed, 18 Feb 2009 17:45:39 +0100 Subject: [PATCH] Added short hand column definition for migrations --- .../connection_adapters/postgresql_adapter.rb | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index ce7d291..2285c02 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -39,6 +39,12 @@ module ActiveRecord end module ConnectionAdapters + class TableDefinition + def xml(*args) + options = args.extract_options! + column(args[0], :xml, options) + end + end # PostgreSQL-specific extensions to column definitions in a table. class PostgreSQLColumn < Column #:nodoc: # Instantiates a new PostgreSQL column definition in a table. -- 1.6.0.1 From 088a33d37226a7f6ad7a30a08c0ca1fd914ae523 Mon Sep 17 00:00:00 2001 From: Usuario de Programacion Date: Thu, 19 Feb 2009 10:29:16 +0100 Subject: [PATCH] Added fallback method to handle cases where the database doesn't have a XML datatype --- .../abstract/schema_definitions.rb | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb index 24c734c..121b8c0 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb @@ -316,6 +316,21 @@ module ActiveRecord @base = base end + #Handles non supported datatypes - e.g. XML + def method_missing(symbol, *args) + if symbol.to_s == 'xml' + xml_column_fallback(args) + end + end + + def xml_column_fallback(*args) + case @base.adapter_name.downcase + when 'sqlite', 'mysql' + options = args.extract_options! + column(args[0], :text, options) + end + end + # Appends a primary key definition to the table definition. # Can be called multiple times, but this is probably not a good idea. def primary_key(name) -- 1.6.0.1 From c0872a47076d66f1bd9949b5df358df73dd278d9 Mon Sep 17 00:00:00 2001 From: Usuario de Programacion Date: Fri, 20 Feb 2009 09:14:44 +0100 Subject: [PATCH] Added XML as a native data type for postgres --- .../connection_adapters/postgresql_adapter.rb | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 2285c02..c35b06b 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -200,7 +200,8 @@ module ActiveRecord :time => { :name => "time" }, :date => { :name => "date" }, :binary => { :name => "bytea" }, - :boolean => { :name => "boolean" } + :boolean => { :name => "boolean" }, + :xml => { :name => "xml" } } # Returns 'PostgreSQL' as adapter name for identification purposes. -- 1.6.0.1 From f9553bb351f86307d27280fbc1cb9a94bc66b387 Mon Sep 17 00:00:00 2001 From: Usuario de Programacion Date: Mon, 9 Mar 2009 13:57:04 +0100 Subject: [PATCH] I made a small change so that escape characters work properly in xml with postgres --- .../connection_adapters/postgresql_adapter.rb | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index c35b06b..137c8ae 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -365,7 +365,7 @@ module ActiveRecord if value.kind_of?(String) && column && column.type == :binary "#{quoted_string_prefix}'#{escape_bytea(value)}'" elsif value.kind_of?(String) && column && column.sql_type =~ /^xml$/ - "xml '#{quote_string(value)}'" + "xml E'#{quote_string(value)}'" elsif value.kind_of?(Numeric) && column && column.sql_type =~ /^money$/ # Not truly string input, so doesn't require (or allow) escape string syntax. "'#{value.to_s}'" -- 1.6.0.1 From 5afffadf7433767a6e3272cbc6c18520b2c10967 Mon Sep 17 00:00:00 2001 From: Leonardo Borges Date: Wed, 11 Mar 2009 15:40:57 +0100 Subject: [PATCH] Combined both patches in a single commit. Added test to make sure sexy migrations work for xml when using PostgreSQL Added test to make sure schema dumper dumps xml columns correctly when using PostgreSQL --- .../abstract/schema_definitions.rb | 8 ++++---- .../connection_adapters/postgresql_adapter.rb | 2 +- activerecord/test/cases/migration_test.rb | 9 +++++++++ activerecord/test/cases/schema_dumper_test.rb | 9 +++++++++ .../test/schema/postgresql_specific_schema.rb | 12 +++++++++++- 5 files changed, 34 insertions(+), 6 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb index 121b8c0..19fe985 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb @@ -319,16 +319,16 @@ module ActiveRecord #Handles non supported datatypes - e.g. XML def method_missing(symbol, *args) if symbol.to_s == 'xml' - xml_column_fallback(args) + xml_column_fallback(args) end end def xml_column_fallback(*args) - case @base.adapter_name.downcase - when 'sqlite', 'mysql' + case @base.adapter_name.downcase + when 'sqlite', 'mysql' options = args.extract_options! column(args[0], :text, options) - end + end end # Appends a primary key definition to the table definition. diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 137c8ae..9fd165c 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -42,7 +42,7 @@ module ActiveRecord class TableDefinition def xml(*args) options = args.extract_options! - column(args[0], :xml, options) + column(args[0], 'xml', options) end end # PostgreSQL-specific extensions to column definitions in a table. diff --git a/activerecord/test/cases/migration_test.rb b/activerecord/test/cases/migration_test.rb index 50d039e..753af47 100644 --- a/activerecord/test/cases/migration_test.rb +++ b/activerecord/test/cases/migration_test.rb @@ -1255,6 +1255,15 @@ if ActiveRecord::Base.connection.supports_migrations? t.string :foo, :bar end end + + if current_adapter?(:PostgreSQLAdapter) + def test_xml_creates_xml_column + with_new_table do |t| + t.expects(:column).with(:data, 'xml', {}) + t.xml :data + end + end + end protected def with_new_table diff --git a/activerecord/test/cases/schema_dumper_test.rb b/activerecord/test/cases/schema_dumper_test.rb index 17e4c75..3c9dd72 100644 --- a/activerecord/test/cases/schema_dumper_test.rb +++ b/activerecord/test/cases/schema_dumper_test.rb @@ -180,4 +180,13 @@ class SchemaDumperTest < ActiveRecord::TestCase output = stream.string assert_match %r{:precision => 3,[[:space:]]+:scale => 2,[[:space:]]+:default => 2.78}, output end + + if current_adapter?(:PostgreSQLAdapter) + def test_schema_dump_includes_xml_shorthand_definition + output = standard_dump + if %r{create_table "postgresql_xml_data_type"} =~ output + assert_match %r{t.xml "data"}, output + end + end + end end diff --git a/activerecord/test/schema/postgresql_specific_schema.rb b/activerecord/test/schema/postgresql_specific_schema.rb index 576a4d0..335fa32 100644 --- a/activerecord/test/schema/postgresql_specific_schema.rb +++ b/activerecord/test/schema/postgresql_specific_schema.rb @@ -1,7 +1,7 @@ ActiveRecord::Schema.define do %w(postgresql_arrays postgresql_moneys postgresql_numbers postgresql_times postgresql_network_addresses postgresql_bit_strings - postgresql_oids defaults geometrics).each do |table_name| + postgresql_oids postgresql_xml_data_type defaults geometrics).each do |table_name| execute "DROP TABLE IF EXISTS #{quote_table_name table_name}" end @@ -100,4 +100,14 @@ _SQL obj_id OID ); _SQL + + begin + execute <<_SQL + CREATE TABLE postgresql_xml_data_type ( + id SERIAL PRIMARY KEY, + data xml + ); +_SQL + rescue #This version of PostgreSQL either has no XML support or is was not compiled with XML support: skipping table + end end \ No newline at end of file -- 1.6.0.1