File tree 2 files changed +31
-0
lines changed
lib/active_record/connection_adapters/oracle_enhanced
spec/active_record/connection_adapters/oracle_enhanced
2 files changed +31
-0
lines changed Original file line number Diff line number Diff line change @@ -51,6 +51,7 @@ def structure_dump # :nodoc:
51
51
structure << ddl
52
52
structure << structure_dump_indexes ( table_name )
53
53
structure << structure_dump_unique_keys ( table_name )
54
+ structure << structure_dump_check_constraints ( table_name )
54
55
structure << structure_dump_table_comments ( table_name )
55
56
structure << structure_dump_column_comments ( table_name )
56
57
end
@@ -161,6 +162,24 @@ def structure_dump_fk_constraints # :nodoc:
161
162
join_with_statement_token ( fks )
162
163
end
163
164
165
+ def structure_dump_check_constraints ( table )
166
+ keys = { }
167
+ check_constraints = select_all ( <<~SQL . squish , "SCHEMA" )
168
+ SELECT /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ c.CONSTRAINT_NAME, c.SEARCH_CONDITION
169
+ FROM all_constraints c
170
+ WHERE c.table_name = '#{ table . upcase } '
171
+ AND c.constraint_type = 'C'
172
+ AND c.owner = SYS_CONTEXT('userenv', 'current_schema')
173
+ AND c.generated = 'USER NAME'
174
+ SQL
175
+ check_constraints . each do |check_constraint |
176
+ keys [ check_constraint [ "constraint_name" ] ] = check_constraint [ "search_condition" ]
177
+ end
178
+ keys . map do |k , v |
179
+ "ALTER TABLE #{ table . upcase } ADD CONSTRAINT #{ k } CHECK (#{ v } )"
180
+ end
181
+ end
182
+
164
183
def structure_dump_table_comments ( table_name )
165
184
comments = [ ]
166
185
comment = table_comment ( table_name )
Original file line number Diff line number Diff line change @@ -215,6 +215,18 @@ class ::TestPost < ActiveRecord::Base
215
215
expect ( dump ) . to match ( /CREATE TABLE "BARS" \( \n "ID" NUMBER\( 38,0\) NOT NULL,\n "SUPER" RAW\( 255\) / )
216
216
end
217
217
218
+ it "should dump check constraints" do
219
+ @conn . execute <<~SQL
220
+ ALTER TABLE test_posts
221
+ add CONSTRAINT foo_is_json CHECK(foo is json)
222
+ SQL
223
+ dump = ActiveRecord ::Base . connection . structure_dump_check_constraints ( "test_posts" )
224
+ expect ( dump ) . to eq ( [ "ALTER TABLE FORM_SUBMISSIONS ADD CONSTRAINT FOO_IS_JSON CHECK (foo is json)" ] )
225
+
226
+ dump = ActiveRecord ::Base . connection . structure_dump
227
+ expect ( dump ) . to match ( /ALTER TABLE FORM_SUBMISSIONS ADD CONSTRAINT FOO_IS_JSON CHECK \( foo is json\) / )
228
+ end
229
+
218
230
it "should dump table comments" do
219
231
comment_sql = %Q(COMMENT ON TABLE "TEST_POSTS" IS 'Test posts with ''some'' "quotes"')
220
232
@conn . execute comment_sql
You can’t perform that action at this time.
0 commit comments