ibm_db 2.5.26-universal-darwin-14 → 2.6.1-universal-darwin-14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +11 -0
  3. data/MANIFEST +14 -14
  4. data/README +225 -225
  5. data/ext/Makefile.nt32 +181 -181
  6. data/ext/Makefile.nt32.191 +212 -212
  7. data/ext/extconf.rb +264 -261
  8. data/ext/extconf_MacOS.rb +269 -0
  9. data/ext/ibm_db.c +11879 -11793
  10. data/ext/ruby_ibm_db.h +241 -240
  11. data/ext/ruby_ibm_db_cli.c +851 -845
  12. data/ext/ruby_ibm_db_cli.h +500 -489
  13. data/init.rb +41 -41
  14. data/lib/IBM_DB.rb +27 -19
  15. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3339 -3289
  16. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
  17. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  18. data/test/cases/adapter_test.rb +207 -207
  19. data/test/cases/associations/belongs_to_associations_test.rb +711 -711
  20. data/test/cases/associations/cascaded_eager_loading_test.rb +181 -181
  21. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +851 -851
  22. data/test/cases/associations/join_model_test.rb +743 -743
  23. data/test/cases/attribute_methods_test.rb +822 -822
  24. data/test/cases/base_test.rb +2133 -2133
  25. data/test/cases/calculations_test.rb +482 -482
  26. data/test/cases/migration_test.rb +2408 -2408
  27. data/test/cases/persistence_test.rb +642 -642
  28. data/test/cases/query_cache_test.rb +257 -257
  29. data/test/cases/relations_test.rb +1182 -1182
  30. data/test/cases/schema_dumper_test.rb +256 -256
  31. data/test/cases/transaction_callbacks_test.rb +300 -300
  32. data/test/cases/validations/uniqueness_validation_test.rb +299 -299
  33. data/test/cases/xml_serialization_test.rb +408 -408
  34. data/test/config.yml +154 -154
  35. data/test/connections/native_ibm_db/connection.rb +43 -43
  36. data/test/ibm_db_test.rb +24 -24
  37. data/test/models/warehouse_thing.rb +4 -4
  38. data/test/schema/schema.rb +751 -751
  39. metadata +6 -8
  40. data/lib/linux/rb18x/ibm_db.bundle +0 -0
  41. data/lib/linux/rb19x/ibm_db.bundle +0 -0
  42. data/lib/linux/rb20x/ibm_db.bundle +0 -0
  43. data/lib/linux/rb21x/ibm_db.bundle +0 -0
@@ -1,256 +1,256 @@
1
- require "cases/helper"
2
-
3
-
4
- class SchemaDumperTest < ActiveRecord::TestCase
5
- def setup
6
- @stream = StringIO.new
7
- end
8
-
9
- def standard_dump
10
- @stream = StringIO.new
11
- ActiveRecord::SchemaDumper.ignore_tables = []
12
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, @stream)
13
- @stream.string
14
- end
15
-
16
- if "string".encoding_aware?
17
- def test_magic_comment
18
- assert_match "# encoding: #{@stream.external_encoding.name}", standard_dump
19
- end
20
- end
21
-
22
- def test_schema_dump
23
- output = standard_dump
24
- assert_match %r{create_table "accounts"}, output
25
- assert_match %r{create_table "authors"}, output
26
- assert_no_match %r{create_table "schema_migrations"}, output
27
- end
28
-
29
- def test_schema_dump_excludes_sqlite_sequence
30
- output = standard_dump
31
- assert_no_match %r{create_table "sqlite_sequence"}, output
32
- end
33
-
34
- def test_schema_dump_includes_camelcase_table_name
35
- output = standard_dump
36
- if current_adapter?(:IBM_DBAdapter)
37
- #DB2 is case insensitive
38
- assert_match %r{create_table "camelcase"}, output
39
- else
40
- assert_match %r{create_table "CamelCase"}, output
41
- end
42
- end
43
-
44
- def assert_line_up(lines, pattern, required = false)
45
- return assert(true) if lines.empty?
46
- matches = lines.map { |line| line.match(pattern) }
47
- assert matches.all? if required
48
- matches.compact!
49
- return assert(true) if matches.empty?
50
- assert_equal 1, matches.map{ |match| match.offset(0).first }.uniq.length
51
- end
52
-
53
- def column_definition_lines(output = standard_dump)
54
- output.scan(/^( *)create_table.*?\n(.*?)^\1end/m).map{ |m| m.last.split(/\n/) }
55
- end
56
-
57
- def test_types_line_up
58
- column_definition_lines.each do |column_set|
59
- next if column_set.empty?
60
-
61
- lengths = column_set.map do |column|
62
- if match = column.match(/t\.(?:integer|decimal|float|datetime|timestamp|time|date|text|binary|string|boolean)\s+"/)
63
- match[0].length
64
- end
65
- end
66
-
67
- assert_equal 1, lengths.uniq.length
68
- end
69
- end
70
-
71
- def test_arguments_line_up
72
- column_definition_lines.each do |column_set|
73
- assert_line_up(column_set, /:default => /)
74
- assert_line_up(column_set, /:limit => /)
75
- assert_line_up(column_set, /:null => /)
76
- end
77
- end
78
-
79
- def test_no_dump_errors
80
- output = standard_dump
81
- assert_no_match %r{\# Could not dump table}, output
82
- end
83
-
84
- def test_schema_dump_includes_not_null_columns
85
- stream = StringIO.new
86
-
87
- ActiveRecord::SchemaDumper.ignore_tables = [/^[^r]/]
88
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
89
- output = stream.string
90
- assert_match %r{:null => false}, output
91
- end
92
-
93
- def test_schema_dump_includes_limit_constraint_for_integer_columns
94
- stream = StringIO.new
95
-
96
- ActiveRecord::SchemaDumper.ignore_tables = [/^(?!integer_limits)/]
97
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
98
- output = stream.string
99
-
100
- if current_adapter?(:PostgreSQLAdapter)
101
- assert_match %r{c_int_1.*:limit => 2}, output
102
- assert_match %r{c_int_2.*:limit => 2}, output
103
-
104
- # int 3 is 4 bytes in postgresql
105
- assert_match %r{c_int_3.*}, output
106
- assert_no_match %r{c_int_3.*:limit}, output
107
-
108
- assert_match %r{c_int_4.*}, output
109
- assert_no_match %r{c_int_4.*:limit}, output
110
- elsif current_adapter?(:MysqlAdapter) or current_adapter?(:Mysql2Adapter)
111
- assert_match %r{c_int_1.*:limit => 1}, output
112
- assert_match %r{c_int_2.*:limit => 2}, output
113
- assert_match %r{c_int_3.*:limit => 3}, output
114
-
115
- assert_match %r{c_int_4.*}, output
116
- assert_no_match %r{c_int_4.*:limit}, output
117
- elsif current_adapter?(:SQLite3Adapter)
118
- assert_match %r{c_int_1.*:limit => 1}, output
119
- assert_match %r{c_int_2.*:limit => 2}, output
120
- assert_match %r{c_int_3.*:limit => 3}, output
121
- assert_match %r{c_int_4.*:limit => 4}, output
122
- end
123
- assert_match %r{c_int_without_limit.*}, output
124
- assert_no_match %r{c_int_without_limit.*:limit}, output
125
-
126
- if current_adapter?(:SQLite3Adapter)
127
- assert_match %r{c_int_5.*:limit => 5}, output
128
- assert_match %r{c_int_6.*:limit => 6}, output
129
- assert_match %r{c_int_7.*:limit => 7}, output
130
- assert_match %r{c_int_8.*:limit => 8}, output
131
- elsif current_adapter?(:OracleAdapter)
132
- assert_match %r{c_int_5.*:limit => 5}, output
133
- assert_match %r{c_int_6.*:limit => 6}, output
134
- assert_match %r{c_int_7.*:limit => 7}, output
135
- assert_match %r{c_int_8.*:limit => 8}, output
136
- elsif current_adapter?(:IBM_DBAdapter)
137
- #Limits is not supported on integer column by DB2
138
- else
139
- assert_match %r{c_int_5.*:limit => 8}, output
140
- assert_match %r{c_int_6.*:limit => 8}, output
141
- assert_match %r{c_int_7.*:limit => 8}, output
142
- assert_match %r{c_int_8.*:limit => 8}, output
143
- end
144
- end
145
-
146
- def test_schema_dump_with_string_ignored_table
147
- stream = StringIO.new
148
-
149
- ActiveRecord::SchemaDumper.ignore_tables = ['accounts']
150
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
151
- output = stream.string
152
- assert_no_match %r{create_table "accounts"}, output
153
- assert_match %r{create_table "authors"}, output
154
- assert_no_match %r{create_table "schema_migrations"}, output
155
- end
156
-
157
- def test_schema_dump_with_regexp_ignored_table
158
- stream = StringIO.new
159
-
160
- ActiveRecord::SchemaDumper.ignore_tables = [/^account/]
161
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
162
- output = stream.string
163
- assert_no_match %r{create_table "accounts"}, output
164
- assert_match %r{create_table "authors"}, output
165
- assert_no_match %r{create_table "schema_migrations"}, output
166
- end
167
-
168
- def test_schema_dump_illegal_ignored_table_value
169
- stream = StringIO.new
170
- ActiveRecord::SchemaDumper.ignore_tables = [5]
171
- assert_raise(StandardError) do
172
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
173
- end
174
- end
175
-
176
- def test_schema_dumps_index_columns_in_right_order
177
- index_definition = standard_dump.split(/\n/).grep(/add_index.*companies/).first.strip
178
- assert_equal 'add_index "companies", ["firm_id", "type", "rating", "ruby_type"], :name => "company_index"', index_definition
179
- end
180
-
181
- def test_schema_dump_should_honor_nonstandard_primary_keys
182
- output = standard_dump
183
- match = output.match(%r{create_table "movies"(.*)do})
184
- assert_not_nil(match, "nonstandardpk table not found")
185
- assert_match %r(:primary_key => "movieid"), match[1], "non-standard primary key not preserved"
186
- end
187
-
188
- if current_adapter?(:MysqlAdapter) or current_adapter?(:Mysql2Adapter)
189
- def test_schema_dump_should_not_add_default_value_for_mysql_text_field
190
- output = standard_dump
191
- assert_match %r{t.text\s+"body",\s+:null => false$}, output
192
- end
193
-
194
- def test_schema_dump_includes_length_for_mysql_blob_and_text_fields
195
- output = standard_dump
196
- assert_match %r{t.binary\s+"tiny_blob",\s+:limit => 255$}, output
197
- assert_match %r{t.binary\s+"normal_blob"$}, output
198
- assert_match %r{t.binary\s+"medium_blob",\s+:limit => 16777215$}, output
199
- assert_match %r{t.binary\s+"long_blob",\s+:limit => 2147483647$}, output
200
- assert_match %r{t.text\s+"tiny_text",\s+:limit => 255$}, output
201
- assert_match %r{t.text\s+"normal_text"$}, output
202
- assert_match %r{t.text\s+"medium_text",\s+:limit => 16777215$}, output
203
- assert_match %r{t.text\s+"long_text",\s+:limit => 2147483647$}, output
204
- end
205
- end
206
-
207
- def test_schema_dump_includes_decimal_options
208
- stream = StringIO.new
209
- ActiveRecord::SchemaDumper.ignore_tables = [/^[^n]/]
210
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
211
- output = stream.string
212
- assert_match %r{:precision => 3,[[:space:]]+:scale => 2,[[:space:]]+:default => 2.78}, output
213
- end
214
-
215
- if current_adapter?(:PostgreSQLAdapter)
216
- def test_schema_dump_includes_xml_shorthand_definition
217
- output = standard_dump
218
- if %r{create_table "postgresql_xml_data_type"} =~ output
219
- assert_match %r{t.xml "data"}, output
220
- end
221
- end
222
-
223
- def test_schema_dump_includes_tsvector_shorthand_definition
224
- output = standard_dump
225
- if %r{create_table "postgresql_tsvectors"} =~ output
226
- assert_match %r{t.tsvector "text_vector"}, output
227
- end
228
- end
229
- end
230
-
231
- def test_schema_dump_keeps_large_precision_integer_columns_as_decimal
232
- output = standard_dump
233
- # Oracle supports precision up to 38 and it identifies decimals with scale 0 as integers
234
- if current_adapter?(:OracleAdapter)
235
- assert_match %r{t.integer\s+"atoms_in_universe",\s+:precision => 38,\s+:scale => 0}, output
236
- elsif current_adapter?(:IBM_DBAdapter)
237
- # DB2 supports precision up to 31
238
- assert_match %r{t.decimal\s+"atoms_in_universe",\s+:precision => 31,\s+:scale => 0}, output
239
- else
240
- assert_match %r{t.decimal\s+"atoms_in_universe",\s+:precision => 55,\s+:scale => 0}, output
241
- end
242
- end
243
-
244
- def test_schema_dump_keeps_id_column_when_id_is_false_and_id_column_added
245
- output = standard_dump
246
- match = output.match(%r{create_table "goofy_string_id"(.*)do.*\n(.*)\n})
247
- assert_not_nil(match, "goofy_string_id table not found")
248
- assert_match %r(:id => false), match[1], "no table id not preserved"
249
- assert_match %r{t.string[[:space:]]+"id",[[:space:]]+:null => false$}, match[2], "non-primary key id column not preserved"
250
- end
251
-
252
- def test_schema_dump_keeps_id_false_when_id_is_false_and_unique_not_null_column_added
253
- output = standard_dump
254
- assert_match %r{create_table "subscribers", :id => false}, output
255
- end
256
- end
1
+ require "cases/helper"
2
+
3
+
4
+ class SchemaDumperTest < ActiveRecord::TestCase
5
+ def setup
6
+ @stream = StringIO.new
7
+ end
8
+
9
+ def standard_dump
10
+ @stream = StringIO.new
11
+ ActiveRecord::SchemaDumper.ignore_tables = []
12
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, @stream)
13
+ @stream.string
14
+ end
15
+
16
+ if "string".encoding_aware?
17
+ def test_magic_comment
18
+ assert_match "# encoding: #{@stream.external_encoding.name}", standard_dump
19
+ end
20
+ end
21
+
22
+ def test_schema_dump
23
+ output = standard_dump
24
+ assert_match %r{create_table "accounts"}, output
25
+ assert_match %r{create_table "authors"}, output
26
+ assert_no_match %r{create_table "schema_migrations"}, output
27
+ end
28
+
29
+ def test_schema_dump_excludes_sqlite_sequence
30
+ output = standard_dump
31
+ assert_no_match %r{create_table "sqlite_sequence"}, output
32
+ end
33
+
34
+ def test_schema_dump_includes_camelcase_table_name
35
+ output = standard_dump
36
+ if current_adapter?(:IBM_DBAdapter)
37
+ #DB2 is case insensitive
38
+ assert_match %r{create_table "camelcase"}, output
39
+ else
40
+ assert_match %r{create_table "CamelCase"}, output
41
+ end
42
+ end
43
+
44
+ def assert_line_up(lines, pattern, required = false)
45
+ return assert(true) if lines.empty?
46
+ matches = lines.map { |line| line.match(pattern) }
47
+ assert matches.all? if required
48
+ matches.compact!
49
+ return assert(true) if matches.empty?
50
+ assert_equal 1, matches.map{ |match| match.offset(0).first }.uniq.length
51
+ end
52
+
53
+ def column_definition_lines(output = standard_dump)
54
+ output.scan(/^( *)create_table.*?\n(.*?)^\1end/m).map{ |m| m.last.split(/\n/) }
55
+ end
56
+
57
+ def test_types_line_up
58
+ column_definition_lines.each do |column_set|
59
+ next if column_set.empty?
60
+
61
+ lengths = column_set.map do |column|
62
+ if match = column.match(/t\.(?:integer|decimal|float|datetime|timestamp|time|date|text|binary|string|boolean)\s+"/)
63
+ match[0].length
64
+ end
65
+ end
66
+
67
+ assert_equal 1, lengths.uniq.length
68
+ end
69
+ end
70
+
71
+ def test_arguments_line_up
72
+ column_definition_lines.each do |column_set|
73
+ assert_line_up(column_set, /:default => /)
74
+ assert_line_up(column_set, /:limit => /)
75
+ assert_line_up(column_set, /:null => /)
76
+ end
77
+ end
78
+
79
+ def test_no_dump_errors
80
+ output = standard_dump
81
+ assert_no_match %r{\# Could not dump table}, output
82
+ end
83
+
84
+ def test_schema_dump_includes_not_null_columns
85
+ stream = StringIO.new
86
+
87
+ ActiveRecord::SchemaDumper.ignore_tables = [/^[^r]/]
88
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
89
+ output = stream.string
90
+ assert_match %r{:null => false}, output
91
+ end
92
+
93
+ def test_schema_dump_includes_limit_constraint_for_integer_columns
94
+ stream = StringIO.new
95
+
96
+ ActiveRecord::SchemaDumper.ignore_tables = [/^(?!integer_limits)/]
97
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
98
+ output = stream.string
99
+
100
+ if current_adapter?(:PostgreSQLAdapter)
101
+ assert_match %r{c_int_1.*:limit => 2}, output
102
+ assert_match %r{c_int_2.*:limit => 2}, output
103
+
104
+ # int 3 is 4 bytes in postgresql
105
+ assert_match %r{c_int_3.*}, output
106
+ assert_no_match %r{c_int_3.*:limit}, output
107
+
108
+ assert_match %r{c_int_4.*}, output
109
+ assert_no_match %r{c_int_4.*:limit}, output
110
+ elsif current_adapter?(:MysqlAdapter) or current_adapter?(:Mysql2Adapter)
111
+ assert_match %r{c_int_1.*:limit => 1}, output
112
+ assert_match %r{c_int_2.*:limit => 2}, output
113
+ assert_match %r{c_int_3.*:limit => 3}, output
114
+
115
+ assert_match %r{c_int_4.*}, output
116
+ assert_no_match %r{c_int_4.*:limit}, output
117
+ elsif current_adapter?(:SQLite3Adapter)
118
+ assert_match %r{c_int_1.*:limit => 1}, output
119
+ assert_match %r{c_int_2.*:limit => 2}, output
120
+ assert_match %r{c_int_3.*:limit => 3}, output
121
+ assert_match %r{c_int_4.*:limit => 4}, output
122
+ end
123
+ assert_match %r{c_int_without_limit.*}, output
124
+ assert_no_match %r{c_int_without_limit.*:limit}, output
125
+
126
+ if current_adapter?(:SQLite3Adapter)
127
+ assert_match %r{c_int_5.*:limit => 5}, output
128
+ assert_match %r{c_int_6.*:limit => 6}, output
129
+ assert_match %r{c_int_7.*:limit => 7}, output
130
+ assert_match %r{c_int_8.*:limit => 8}, output
131
+ elsif current_adapter?(:OracleAdapter)
132
+ assert_match %r{c_int_5.*:limit => 5}, output
133
+ assert_match %r{c_int_6.*:limit => 6}, output
134
+ assert_match %r{c_int_7.*:limit => 7}, output
135
+ assert_match %r{c_int_8.*:limit => 8}, output
136
+ elsif current_adapter?(:IBM_DBAdapter)
137
+ #Limits is not supported on integer column by DB2
138
+ else
139
+ assert_match %r{c_int_5.*:limit => 8}, output
140
+ assert_match %r{c_int_6.*:limit => 8}, output
141
+ assert_match %r{c_int_7.*:limit => 8}, output
142
+ assert_match %r{c_int_8.*:limit => 8}, output
143
+ end
144
+ end
145
+
146
+ def test_schema_dump_with_string_ignored_table
147
+ stream = StringIO.new
148
+
149
+ ActiveRecord::SchemaDumper.ignore_tables = ['accounts']
150
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
151
+ output = stream.string
152
+ assert_no_match %r{create_table "accounts"}, output
153
+ assert_match %r{create_table "authors"}, output
154
+ assert_no_match %r{create_table "schema_migrations"}, output
155
+ end
156
+
157
+ def test_schema_dump_with_regexp_ignored_table
158
+ stream = StringIO.new
159
+
160
+ ActiveRecord::SchemaDumper.ignore_tables = [/^account/]
161
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
162
+ output = stream.string
163
+ assert_no_match %r{create_table "accounts"}, output
164
+ assert_match %r{create_table "authors"}, output
165
+ assert_no_match %r{create_table "schema_migrations"}, output
166
+ end
167
+
168
+ def test_schema_dump_illegal_ignored_table_value
169
+ stream = StringIO.new
170
+ ActiveRecord::SchemaDumper.ignore_tables = [5]
171
+ assert_raise(StandardError) do
172
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
173
+ end
174
+ end
175
+
176
+ def test_schema_dumps_index_columns_in_right_order
177
+ index_definition = standard_dump.split(/\n/).grep(/add_index.*companies/).first.strip
178
+ assert_equal 'add_index "companies", ["firm_id", "type", "rating", "ruby_type"], :name => "company_index"', index_definition
179
+ end
180
+
181
+ def test_schema_dump_should_honor_nonstandard_primary_keys
182
+ output = standard_dump
183
+ match = output.match(%r{create_table "movies"(.*)do})
184
+ assert_not_nil(match, "nonstandardpk table not found")
185
+ assert_match %r(:primary_key => "movieid"), match[1], "non-standard primary key not preserved"
186
+ end
187
+
188
+ if current_adapter?(:MysqlAdapter) or current_adapter?(:Mysql2Adapter)
189
+ def test_schema_dump_should_not_add_default_value_for_mysql_text_field
190
+ output = standard_dump
191
+ assert_match %r{t.text\s+"body",\s+:null => false$}, output
192
+ end
193
+
194
+ def test_schema_dump_includes_length_for_mysql_blob_and_text_fields
195
+ output = standard_dump
196
+ assert_match %r{t.binary\s+"tiny_blob",\s+:limit => 255$}, output
197
+ assert_match %r{t.binary\s+"normal_blob"$}, output
198
+ assert_match %r{t.binary\s+"medium_blob",\s+:limit => 16777215$}, output
199
+ assert_match %r{t.binary\s+"long_blob",\s+:limit => 2147483647$}, output
200
+ assert_match %r{t.text\s+"tiny_text",\s+:limit => 255$}, output
201
+ assert_match %r{t.text\s+"normal_text"$}, output
202
+ assert_match %r{t.text\s+"medium_text",\s+:limit => 16777215$}, output
203
+ assert_match %r{t.text\s+"long_text",\s+:limit => 2147483647$}, output
204
+ end
205
+ end
206
+
207
+ def test_schema_dump_includes_decimal_options
208
+ stream = StringIO.new
209
+ ActiveRecord::SchemaDumper.ignore_tables = [/^[^n]/]
210
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
211
+ output = stream.string
212
+ assert_match %r{:precision => 3,[[:space:]]+:scale => 2,[[:space:]]+:default => 2.78}, output
213
+ end
214
+
215
+ if current_adapter?(:PostgreSQLAdapter)
216
+ def test_schema_dump_includes_xml_shorthand_definition
217
+ output = standard_dump
218
+ if %r{create_table "postgresql_xml_data_type"} =~ output
219
+ assert_match %r{t.xml "data"}, output
220
+ end
221
+ end
222
+
223
+ def test_schema_dump_includes_tsvector_shorthand_definition
224
+ output = standard_dump
225
+ if %r{create_table "postgresql_tsvectors"} =~ output
226
+ assert_match %r{t.tsvector "text_vector"}, output
227
+ end
228
+ end
229
+ end
230
+
231
+ def test_schema_dump_keeps_large_precision_integer_columns_as_decimal
232
+ output = standard_dump
233
+ # Oracle supports precision up to 38 and it identifies decimals with scale 0 as integers
234
+ if current_adapter?(:OracleAdapter)
235
+ assert_match %r{t.integer\s+"atoms_in_universe",\s+:precision => 38,\s+:scale => 0}, output
236
+ elsif current_adapter?(:IBM_DBAdapter)
237
+ # DB2 supports precision up to 31
238
+ assert_match %r{t.decimal\s+"atoms_in_universe",\s+:precision => 31,\s+:scale => 0}, output
239
+ else
240
+ assert_match %r{t.decimal\s+"atoms_in_universe",\s+:precision => 55,\s+:scale => 0}, output
241
+ end
242
+ end
243
+
244
+ def test_schema_dump_keeps_id_column_when_id_is_false_and_id_column_added
245
+ output = standard_dump
246
+ match = output.match(%r{create_table "goofy_string_id"(.*)do.*\n(.*)\n})
247
+ assert_not_nil(match, "goofy_string_id table not found")
248
+ assert_match %r(:id => false), match[1], "no table id not preserved"
249
+ assert_match %r{t.string[[:space:]]+"id",[[:space:]]+:null => false$}, match[2], "non-primary key id column not preserved"
250
+ end
251
+
252
+ def test_schema_dump_keeps_id_false_when_id_is_false_and_unique_not_null_column_added
253
+ output = standard_dump
254
+ assert_match %r{create_table "subscribers", :id => false}, output
255
+ end
256
+ end