diff --git a/lib/mongo/db.rb b/lib/mongo/db.rb index b18ab04795..35c10f2cd0 100644 --- a/lib/mongo/db.rb +++ b/lib/mongo/db.rb @@ -589,6 +589,9 @@ def command(selector, opts={}) end.join('; ') message << ').' code = result['code'] || result['assertionCode'] + if result['writeErrors'] + code = result['writeErrors'].first['code'] + end raise ExecutionTimeout.new(message, code, result) if code == MAX_TIME_MS_CODE raise OperationFailure.new(message, code, result) end diff --git a/test/functional/collection_test.rb b/test/functional/collection_test.rb index bf4d18d2ae..5f0bba07aa 100644 --- a/test/functional/collection_test.rb +++ b/test/functional/collection_test.rb @@ -345,6 +345,18 @@ def test_update_write_command_with_error end end + def test_error_code + coll = @db['test-error-code'] + coll.ensure_index(BSON::OrderedHash[:x, Mongo::ASCENDING], { :unique => true }) + coll.save(:x => 2) + begin + coll.save(:x => 2) + rescue => ex + assert_not_nil ex.error_code + end + coll.drop + end + def test_aggregation_cursor return unless @version >= '2.5.1' [10, 1000].each do |size|