mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Address ActiveRecord::NotNullViolation: OCIError: ORA-01400
for Oracle database which requires primary key value mentioned in insert statement explicitly.
This commit is contained in:
parent
d721344280
commit
b34838cbe2
1 changed files with 14 additions and 6 deletions
|
@ -66,26 +66,26 @@ module JSONSharedTestCases
|
|||
end
|
||||
|
||||
def test_rewrite
|
||||
@connection.execute(%q|insert into json_data_type (payload) VALUES ('{"k":"v"}')|)
|
||||
@connection.execute(insert_statement_per_database('{"k":"v"}'))
|
||||
x = klass.first
|
||||
x.payload = { '"a\'' => "b" }
|
||||
assert x.save!
|
||||
end
|
||||
|
||||
def test_select
|
||||
@connection.execute(%q|insert into json_data_type (payload) VALUES ('{"k":"v"}')|)
|
||||
@connection.execute(insert_statement_per_database('{"k":"v"}'))
|
||||
x = klass.first
|
||||
assert_equal({ "k" => "v" }, x.payload)
|
||||
end
|
||||
|
||||
def test_select_multikey
|
||||
@connection.execute(%q|insert into json_data_type (payload) VALUES ('{"k1":"v1", "k2":"v2", "k3":[1,2,3]}')|)
|
||||
@connection.execute(insert_statement_per_database('{"k1":"v1", "k2":"v2", "k3":[1,2,3]}'))
|
||||
x = klass.first
|
||||
assert_equal({ "k1" => "v1", "k2" => "v2", "k3" => [1, 2, 3] }, x.payload)
|
||||
end
|
||||
|
||||
def test_null_json
|
||||
@connection.execute("insert into json_data_type (payload) VALUES(null)")
|
||||
@connection.execute(insert_statement_per_database("null"))
|
||||
x = klass.first
|
||||
assert_nil(x.payload)
|
||||
end
|
||||
|
@ -107,13 +107,13 @@ module JSONSharedTestCases
|
|||
end
|
||||
|
||||
def test_select_array_json_value
|
||||
@connection.execute(%q|insert into json_data_type (payload) VALUES ('["v0",{"k1":"v1"}]')|)
|
||||
@connection.execute(insert_statement_per_database('["v0",{"k1":"v1"}]'))
|
||||
x = klass.first
|
||||
assert_equal(["v0", { "k1" => "v1" }], x.payload)
|
||||
end
|
||||
|
||||
def test_rewrite_array_json_value
|
||||
@connection.execute(%q|insert into json_data_type (payload) VALUES ('["v0",{"k1":"v1"}]')|)
|
||||
@connection.execute(insert_statement_per_database('["v0",{"k1":"v1"}]'))
|
||||
x = klass.first
|
||||
x.payload = ["v1", { "k2" => "v2" }, "v3"]
|
||||
assert x.save!
|
||||
|
@ -258,4 +258,12 @@ module JSONSharedTestCases
|
|||
native_type = ActiveRecord::Base.connection.native_database_types[type][:name]
|
||||
assert_match %r(\A#{native_type}\b), sql_type
|
||||
end
|
||||
|
||||
def insert_statement_per_database(values)
|
||||
if current_adapter?(:OracleAdapter)
|
||||
"insert into json_data_type (id, payload) VALUES (json_data_type_seq.nextval, '#{values}')"
|
||||
else
|
||||
"insert into json_data_type (payload) VALUES ('#{values}')"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue