aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/CHANGELOG4
-rw-r--r--activerecord/lib/active_record/connection_adapters/oci_adapter.rb2
-rwxr-xr-xactiverecord/test/base_test.rb10
-rw-r--r--activerecord/test/fixtures/db_definitions/oci.sql8
4 files changed, 22 insertions, 2 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG
index e9a525e304..711d5a8f30 100644
--- a/activerecord/CHANGELOG
+++ b/activerecord/CHANGELOG
@@ -1,10 +1,12 @@
*SVN*
+* Oracle: test case for column default parsing. #2788 [Michael Schoen <schoenm@earthlink.net>]
+
* Update documentation for Migrations. #2861 [Tom Werner <tom@cube6media.com>]
* When AbstractAdapter#log rescues an exception, attempt to detect and reconnect to an inactive database connection. Connection adapter must respond to the active? and reconnect! instance methods. Initial support for PostgreSQL, MySQL, and SQLite. Make certain that all statements which may need reconnection are performed within a logged block: for example, this means no avoiding log(sql, name) { } if @logger.nil? [Jeremy Kemper]
-* Much faster Oracle column reflection. #2848 [Michael Schoen <schoenm@earthlink.net>]
+* Oracle: Much faster column reflection. #2848 [Michael Schoen <schoenm@earthlink.net>]
* Base.reset_sequence_name analogous to reset_table_name (mostly useful for testing). Base.define_attr_method allows nil values. [Jeremy Kemper]
diff --git a/activerecord/lib/active_record/connection_adapters/oci_adapter.rb b/activerecord/lib/active_record/connection_adapters/oci_adapter.rb
index 59191948d2..2bcd68f2a9 100644
--- a/activerecord/lib/active_record/connection_adapters/oci_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/oci_adapter.rb
@@ -338,7 +338,7 @@ begin
end
select_all(table_cols).map do |row|
- row['data_default'].gsub!(/^'(.*)'\s*$/, '\1') if row['data_default']
+ row['data_default'].sub!(/^'(.*)'\s*$/, '\1') if row['data_default']
OCIColumn.new(
oci_downcase(row['column_name']),
row['data_default'],
diff --git a/activerecord/test/base_test.rb b/activerecord/test/base_test.rb
index 7be6441f1d..2db2dbf837 100755
--- a/activerecord/test/base_test.rb
+++ b/activerecord/test/base_test.rb
@@ -17,6 +17,7 @@ class MasterCreditCard < ActiveRecord::Base; end
class Post < ActiveRecord::Base; end
class Computer < ActiveRecord::Base; end
class NonExistentTable < ActiveRecord::Base; end
+class TestOCIDefault < ActiveRecord::Base; end
class LoosePerson < ActiveRecord::Base
attr_protected :credit_rating, :administrator
@@ -470,6 +471,15 @@ class BasicsTest < Test::Unit::TestCase
topic = Topic.find(topic.id)
assert topic.approved?
assert_nil topic.last_read
+
+ # Oracle has some funky default handling, so it requires a bit of
+ # extra testing. See ticket #2788.
+ if current_adapter?(:OCIAdapter)
+ test = TestOCIDefault.new
+ assert_equal "X", test.test_char
+ assert_equal "hello", test.test_string
+ assert_equal 3, test.test_int
+ end
end
def test_utc_as_time_zone
diff --git a/activerecord/test/fixtures/db_definitions/oci.sql b/activerecord/test/fixtures/db_definitions/oci.sql
index cedd92ad53..832396d0c7 100644
--- a/activerecord/test/fixtures/db_definitions/oci.sql
+++ b/activerecord/test/fixtures/db_definitions/oci.sql
@@ -261,3 +261,11 @@ create table keyboards (
);
create sequence keyboards_seq minvalue 10000;
+create table test_oci_defaults (
+ id integer not null primary key,
+ test_char char(1) default 'X' not null,
+ test_string varchar2(20) default 'hello' not null,
+ test_int integer default 3 not null
+);
+create sequence test_oci_defaults_seq minvalue 10000;
+