Truffleruby: pg: SIGSEGV while running specs

Created on 10 Mar 2019  路  14Comments  路  Source: oracle/truffleruby

This hasn't been a problem with RC 13 (Native), but with @chrisseaton nightly build (JVM) I got this

To reproduce:

git clone https://github.com/rom-rb/rom.git
cd rom
git checkout truffleruby
bundle exec rake spec

Error:

bundle exec rake spec
~/.rubies/truffleruby-1.0.0-nightly/jre/languages/ruby/bin/truffleruby -I~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/lib:~/.gem/truffleruby/2.6.1/gems/rspec-support-3.8.0/lib ~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb

Randomized with seed 51467
.................FFFFFFF.............FF...................................................FFF.........................................................................................FFF........................FFFFF...........F......................................FF........FF.....FFFFFFFFF.............................................................................FF..FFFFFFFFF.FFFF.F.........F..F...........FFFFFFFF................FFFFF.............FF................FFF..................................................................................................F....................................................................................

Failures:

  1) ROM::Relation::Composite#__send__ proxies Kernel methods
     Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

     ROM::AttributeAlreadyDefinedError:
       Attribute :name already defined
     # ./lib/rom/schema/dsl.rb:71:in `attribute'
     # ./spec/unit/rom/relation/composite_spec.rb:10:in `block (4 levels) in <top (required)>'
     # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
     # ./lib/rom/schema/dsl.rb:157:in `call'
     # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
     # ./lib/rom/relation/class_interface.rb:302:in `call'
     # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
     # ./lib/rom/relation.rb:142:in `block in Relation'
     # (eval):8:in `instance_exec'
     # (eval):8:in `__dry_initializer_initialize__'
     # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./spec/unit/rom/relation/composite_spec.rb:8:in `users_relation'
     # ./spec/unit/rom/relation/composite_spec.rb:101:in `block (3 levels) in <top (required)>'
     # ./spec/support/constant_leak_finder.rb:6:in `find'
     # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  2) ROM::Relation::Composite#first calls and returns the first object
     Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

     ROM::AttributeAlreadyDefinedError:
       Attribute :name already defined
     # ./lib/rom/schema/dsl.rb:71:in `attribute'
     # ./spec/unit/rom/relation/composite_spec.rb:10:in `block (4 levels) in <top (required)>'
     # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
     # ./lib/rom/schema/dsl.rb:157:in `call'
     # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
     # ./lib/rom/relation/class_interface.rb:302:in `call'
     # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
     # ./lib/rom/relation.rb:142:in `block in Relation'
     # (eval):8:in `instance_exec'
     # (eval):8:in `__dry_initializer_initialize__'
     # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./spec/unit/rom/relation/composite_spec.rb:8:in `users_relation'
     # ./spec/unit/rom/relation/composite_spec.rb:92:in `relation'
     # ./spec/unit/rom/relation/composite_spec.rb:95:in `block (3 levels) in <top (required)>'
     # ./spec/support/constant_leak_finder.rb:6:in `find'
     # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  3) ROM::Relation::Composite#call sends a relation through mappers
     Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

     ROM::AttributeAlreadyDefinedError:
       Attribute :name already defined
     # ./lib/rom/schema/dsl.rb:71:in `attribute'
     # ./spec/unit/rom/relation/composite_spec.rb:10:in `block (4 levels) in <top (required)>'
     # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
     # ./lib/rom/schema/dsl.rb:157:in `call'
     # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
     # ./lib/rom/relation/class_interface.rb:302:in `call'
     # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
     # ./lib/rom/relation.rb:142:in `block in Relation'
     # (eval):8:in `instance_exec'
     # (eval):8:in `__dry_initializer_initialize__'
     # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./spec/unit/rom/relation/composite_spec.rb:8:in `users_relation'
     # ./spec/unit/rom/relation/composite_spec.rb:41:in `block (3 levels) in <top (required)>'
     # ./spec/support/constant_leak_finder.rb:6:in `find'
     # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  4) ROM::Relation::Composite#call sends a relation through another composite relation
     Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

     ROM::AttributeAlreadyDefinedError:
       Attribute :name already defined
     # ./lib/rom/schema/dsl.rb:71:in `attribute'
     # ./spec/unit/rom/relation/composite_spec.rb:10:in `block (4 levels) in <top (required)>'
     # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
     # ./lib/rom/schema/dsl.rb:157:in `call'
     # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
     # ./lib/rom/relation/class_interface.rb:302:in `call'
     # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
     # ./lib/rom/relation.rb:142:in `block in Relation'
     # (eval):8:in `instance_exec'
     # (eval):8:in `__dry_initializer_initialize__'
     # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./spec/unit/rom/relation/composite_spec.rb:8:in `users_relation'
     # ./spec/unit/rom/relation/composite_spec.rb:63:in `block (3 levels) in <top (required)>'
     # ./spec/support/constant_leak_finder.rb:6:in `find'
     # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  5) ROM::Relation::Composite#call sends a relation through another relation
     Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

     ROM::AttributeAlreadyDefinedError:
       Attribute :name already defined
     # ./lib/rom/schema/dsl.rb:71:in `attribute'
     # ./spec/unit/rom/relation/composite_spec.rb:10:in `block (4 levels) in <top (required)>'
     # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
     # ./lib/rom/schema/dsl.rb:157:in `call'
     # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
     # ./lib/rom/relation/class_interface.rb:302:in `call'
     # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
     # ./lib/rom/relation.rb:142:in `block in Relation'
     # (eval):8:in `instance_exec'
     # (eval):8:in `__dry_initializer_initialize__'
     # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./spec/unit/rom/relation/composite_spec.rb:8:in `users_relation'
     # ./spec/unit/rom/relation/composite_spec.rb:50:in `block (3 levels) in <top (required)>'
     # ./spec/support/constant_leak_finder.rb:6:in `find'
     # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  6) ROM::Relation::Composite#each calls and iterates
     Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

     ROM::AttributeAlreadyDefinedError:
       Attribute :name already defined
     # ./lib/rom/schema/dsl.rb:71:in `attribute'
     # ./spec/unit/rom/relation/composite_spec.rb:10:in `block (4 levels) in <top (required)>'
     # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
     # ./lib/rom/schema/dsl.rb:157:in `call'
     # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
     # ./lib/rom/relation/class_interface.rb:302:in `call'
     # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
     # ./lib/rom/relation.rb:142:in `block in Relation'
     # (eval):8:in `instance_exec'
     # (eval):8:in `__dry_initializer_initialize__'
     # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./spec/unit/rom/relation/composite_spec.rb:8:in `users_relation'
     # ./spec/unit/rom/relation/composite_spec.rb:76:in `relation'
     # ./spec/unit/rom/relation/composite_spec.rb:80:in `block (3 levels) in <top (required)>'
     # ./spec/support/constant_leak_finder.rb:6:in `find'
     # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  7) ROM::Relation::Composite#each returns enumerator if block is not provided
     Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

     ROM::AttributeAlreadyDefinedError:
       Attribute :name already defined
     # ./lib/rom/schema/dsl.rb:71:in `attribute'
     # ./spec/unit/rom/relation/composite_spec.rb:10:in `block (4 levels) in <top (required)>'
     # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
     # ./lib/rom/schema/dsl.rb:157:in `call'
     # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
     # ./lib/rom/relation/class_interface.rb:302:in `call'
     # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
     # ./lib/rom/relation.rb:142:in `block in Relation'
     # (eval):8:in `instance_exec'
     # (eval):8:in `__dry_initializer_initialize__'
     # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./spec/unit/rom/relation/composite_spec.rb:8:in `users_relation'
     # ./spec/unit/rom/relation/composite_spec.rb:76:in `relation'
     # ./spec/unit/rom/relation/composite_spec.rb:87:in `block (3 levels) in <top (required)>'
     # ./spec/support/constant_leak_finder.rb:6:in `find'
     # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  8) ROM::Relation#output_schema returns output_schema based on canonical schema
     Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

     ROM::AttributeAlreadyDefinedError:
       Attribute :id already defined
     # ./lib/rom/schema/dsl.rb:71:in `attribute'
     # ./spec/unit/rom/relation/output_schema_spec.rb:7:in `block (4 levels) in <top (required)>'
     # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
     # ./lib/rom/schema/dsl.rb:157:in `call'
     # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
     # ./lib/rom/relation/class_interface.rb:302:in `call'
     # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
     # ./lib/rom/relation.rb:142:in `block in Relation'
     # (eval):8:in `instance_exec'
     # (eval):8:in `__dry_initializer_initialize__'
     # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./spec/unit/rom/relation/output_schema_spec.rb:5:in `relation'
     # ./spec/unit/rom/relation/output_schema_spec.rb:18:in `block (2 levels) in <top (required)>'
     # ./spec/support/constant_leak_finder.rb:6:in `find'
     # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  9) ROM::Relation#output_schema returns output_schema based on projected schema
     Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

     ROM::AttributeAlreadyDefinedError:
       Attribute :id already defined
     # ./lib/rom/schema/dsl.rb:71:in `attribute'
     # ./spec/unit/rom/relation/output_schema_spec.rb:7:in `block (4 levels) in <top (required)>'
     # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
     # ./lib/rom/schema/dsl.rb:157:in `call'
     # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
     # ./lib/rom/relation/class_interface.rb:302:in `call'
     # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
     # ./lib/rom/relation.rb:142:in `block in Relation'
     # (eval):8:in `instance_exec'
     # (eval):8:in `__dry_initializer_initialize__'
     # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./lib/rom/support/memoizable.rb:13:in `new'
     # ./spec/unit/rom/relation/output_schema_spec.rb:5:in `relation'
     # ./spec/unit/rom/relation/output_schema_spec.rb:23:in `block (2 levels) in <top (required)>'
     # ./spec/support/constant_leak_finder.rb:6:in `find'
     # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  10) ROM::Relation#to_ast returns valid ast for a plain relation
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/to_ast_spec.rb:7:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/to_ast_spec.rb:32:in `users'
      # ./spec/unit/rom/relation/to_ast_spec.rb:40:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  11) ROM::Relation#to_ast returns valid ast for a combined relation
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/to_ast_spec.rb:7:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/to_ast_spec.rb:32:in `users'
      # ./spec/unit/rom/relation/to_ast_spec.rb:53:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  12) ROM::Relation#to_ast returns valid ast for a wrapped relation
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/to_ast_spec.rb:20:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/to_ast_spec.rb:36:in `tasks'
      # ./spec/unit/rom/relation/to_ast_spec.rb:77:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  13) ROM::Relation#foreign_key returns FK name for the given relation name
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/foreign_key_spec.rb:7:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/foreign_key_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/foreign_key_spec.rb:14:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  14) ROM::Relation#foreign_key generates a virtual FK when real attribute is not found
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/foreign_key_spec.rb:7:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/foreign_key_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/foreign_key_spec.rb:22:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  15) ROM::Relation#foreign_key returns FK name for the given relation name with a different dataset name
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/foreign_key_spec.rb:7:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/foreign_key_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/foreign_key_spec.rb:18:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  16) ROM::Relation#call without read types in schema returns loaded relation with data
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/call_spec.rb:16:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/call_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/call_spec.rb:31:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  17) ROM::Relation#call without read types in schema has noop output_schema
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/call_spec.rb:16:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/call_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/call_spec.rb:27:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  18) ROM::Relation#call auto-struct automatically maps to structs
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/call_spec.rb:60:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/call_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/call_spec.rb:75:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  19) ROM::Relation#call auto-struct supports aliasing
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/call_spec.rb:60:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/call_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/call_spec.rb:85:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  20) ROM::Relation#call with read types in schema returns loaded relation with coerced data
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/call_spec.rb:40:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/call_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/call_spec.rb:51:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  21) ROM::Memory::Relation.inherited extends subclass with core methods
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/inheritance_spec.rb:7:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/inheritance_spec.rb:5:in `relation'
      # ./spec/unit/rom/memory/inheritance_spec.rb:29:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  22) ROM::Relation#input_schema returns a default input schema
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation_spec.rb:258:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation_spec.rb:256:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  23) ROM::Relation#input_schema returns a schema hash type
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation_spec.rb:249:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation_spec.rb:248:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  24) ROM::Memory::Commands Create #call uses default input handler
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/commands_spec.rb:8:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/commands_spec.rb:6:in `relation'
      # ./spec/unit/rom/memory/commands_spec.rb:15:in `command'
      # ./spec/unit/rom/memory/commands_spec.rb:19:in `block (4 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  25) ROM::Memory::Commands Update #call uses default input handler
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/commands_spec.rb:8:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/commands_spec.rb:6:in `relation'
      # ./spec/unit/rom/memory/commands_spec.rb:30:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  26) ROM::Memory::Relation#order places nil before other values when required
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/relation_spec.rb:11:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/relation_spec.rb:9:in `relation'
      # ./spec/unit/rom/memory/relation_spec.rb:110:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  27) ROM::Memory::Relation#order sorts data using provided attribute names
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/relation_spec.rb:11:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/relation_spec.rb:9:in `relation'
      # ./spec/unit/rom/memory/relation_spec.rb:98:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  28) ROM::Memory::Relation#mappers uses custom mapper compiler
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/relation_spec.rb:11:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/relation_spec.rb:9:in `relation'
      # ./spec/unit/rom/memory/relation_spec.rb:124:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  29) ROM::Memory::Relation#take takes given number of tuples
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/relation_spec.rb:11:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/relation_spec.rb:9:in `relation'
      # ./spec/unit/rom/memory/relation_spec.rb:32:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  30) ROM::Memory::Relation#project projects tuples with the provided keys
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/relation_spec.rb:11:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/relation_spec.rb:9:in `relation'
      # ./spec/unit/rom/memory/relation_spec.rb:41:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  31) ROM::Memory::Relation#restrict allows to use regexp as a value
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/relation_spec.rb:11:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/relation_spec.rb:9:in `relation'
      # ./spec/unit/rom/memory/relation_spec.rb:85:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  32) ROM::Memory::Relation#restrict restricts data using block
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/relation_spec.rb:11:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/relation_spec.rb:9:in `relation'
      # ./spec/unit/rom/memory/relation_spec.rb:67:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  33) ROM::Memory::Relation#restrict allows to use array as a value
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/relation_spec.rb:11:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/relation_spec.rb:9:in `relation'
      # ./spec/unit/rom/memory/relation_spec.rb:76:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  34) ROM::Memory::Relation#restrict restricts data using criteria hash
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/memory/relation_spec.rb:11:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/memory/relation_spec.rb:9:in `relation'
      # ./spec/unit/rom/memory/relation_spec.rb:59:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  35) ROM::Relation.schema allows JSON read/write coersion
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :payload already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:119:in `block in Posts'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:123:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:123:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  36) ROM::Relation.schema allows Hash to JSON coersion only
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :payload already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:175:in `block in Posts'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:179:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:179:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  37) ROM::Relation.schema defines a canonical schema for a relation
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:8:in `block in Users'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:14:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:14:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  38) ROM::Relation.schema allows JSON to Hash coersion only
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :payload already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:134:in `block in Posts'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:138:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:138:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  39) ROM::Relation.schema allows JSON read/write coersion
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :payload already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:89:in `block in Posts'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:93:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:93:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  40) ROM::Relation.schema allows JSON read/write coersion using symbols
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :payload already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:104:in `block in Posts'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:108:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:108:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  41) ROM::Relation.schema allows setting composite primary key
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:59:in `block in Users'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:66:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:66:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  42) ROM::Relation.schema returns original payload in JSON to Hash coersion when json is invalid
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :payload already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:148:in `block in Posts'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:152:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:152:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  43) ROM::Relation.schema allows setting foreign keys
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :author_id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:74:in `block in Posts'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:79:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:79:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  44) ROM::Relation.schema allows JSON to Hash coersion only using symbols as keys
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :payload already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:161:in `block in Posts'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:165:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:165:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  45) ROM::Relation.schema allows defining types for reading tuples
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:45:in `block in Users'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:50:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:50:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  46) ROM::Relation.schema #with resets input and output schemas
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:311:in `block in Users'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/schema_spec.rb:316:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  47) ROM::Relation.schema #schema_proc is idempotent
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:296:in `block in Users'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:302:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:302:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  48) ROM::Relation.schema #schema returns defined schema
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:223:in `block in Users'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/schema_spec.rb:229:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  49) ROM::Relation.schema #schema builds optional read types automatically
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:275:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:280:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:280:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  50) ROM::Relation.schema #schema uses custom schema dsl
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :admin already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/schema_spec.rb:237:in `bool'
      # ./spec/unit/rom/relation/schema_spec.rb:245:in `block in Users'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./spec/unit/rom/relation/schema_spec.rb:249:in `call'
      # ./spec/unit/rom/relation/schema_spec.rb:249:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  51) ROM::Schema#[] with a merged schema raises KeyError when attribute is not found
      Failure/Error: expect { schema[:not_here] }.to raise_error(KeyError, /not_here/)
        expected KeyError with message matching /not_here/ but nothing was raised
      # ./spec/unit/rom/schema/accessing_attributes_spec.rb:48:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  52) ROM::Schema#[] with a schema raises KeyError when attribute is not found
      Failure/Error: expect { schema[:not_here] }.to raise_error(KeyError, /not_here/)
        expected KeyError with message matching /not_here/ but nothing was raised
      # ./spec/unit/rom/schema/accessing_attributes_spec.rb:18:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  53) ROM::Relation.view with an explicit schema auto-projects the relation via schema
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      Shared Example Group: "relation with views" called from ./spec/unit/rom/relation/class_interface/view_spec.rb:75
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:79:in `block (6 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:71:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  54) ROM::Relation.view with an explicit schema uses projected schema for view schema
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      Shared Example Group: "relation with views" called from ./spec/unit/rom/relation/class_interface/view_spec.rb:75
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:79:in `block (6 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:71:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  55) ROM::Relation.view with an explicit schema auto-projects a restricted relation via schema
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      Shared Example Group: "relation with views" called from ./spec/unit/rom/relation/class_interface/view_spec.rb:75
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:79:in `block (6 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:71:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  56) ROM::Relation.view with an explicit schema appends foreign attributes
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      Shared Example Group: "relation with views" called from ./spec/unit/rom/relation/class_interface/view_spec.rb:75
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:79:in `block (6 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:71:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  57) ROM::Relation.view with an inferred schema auto-projects the relation via schema
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :title already defined
      Shared Example Group: "relation with views" called from ./spec/unit/rom/relation/class_interface/view_spec.rb:128
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:14:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:12:in `tasks'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:8:in `registry'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:124:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  58) ROM::Relation.view with an inferred schema uses projected schema for view schema
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :title already defined
      Shared Example Group: "relation with views" called from ./spec/unit/rom/relation/class_interface/view_spec.rb:128
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:14:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:12:in `tasks'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:8:in `registry'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:124:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  59) ROM::Relation.view with an inferred schema appends foreign attributes
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :title already defined
      Shared Example Group: "relation with views" called from ./spec/unit/rom/relation/class_interface/view_spec.rb:128
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:14:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:12:in `tasks'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:8:in `registry'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:124:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  60) ROM::Relation.view with an inferred schema auto-projects a restricted relation via schema
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :title already defined
      Shared Example Group: "relation with views" called from ./spec/unit/rom/relation/class_interface/view_spec.rb:128
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:14:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:12:in `tasks'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:8:in `registry'
      # ./spec/unit/rom/relation/class_interface/view_spec.rb:124:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  61) ROM::Relation#struct_namespace setting at runtime returns a new relation configured for the provided struct namespace and aliased relation
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:36:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:34:in `relation'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:49:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  62) ROM::Relation#struct_namespace setting at runtime allows switching namespaces at runtime
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:36:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:34:in `relation'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:55:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  63) ROM::Relation#struct_namespace setting at runtime returns a new relation configured for the provided struct namespace
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:36:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:34:in `relation'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:43:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  64) ROM::Relation#struct_namespace using default setting returns a new relation configured for the provided struct namespace
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:69:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:65:in `relation'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:76:in `block (3 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  65) ROM::Relation#struct_namespace using default setting using inheritance inherits struct namespace and uses custom alias
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:69:in `block (5 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:65:in `relation'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:81:in `admins'
      # ./spec/unit/rom/relation/struct_namespace_spec.rb:90:in `block (4 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  66) ROM::Plugins::Relation::Instrumentation instruments custom methods
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/plugins/relation/instrumentation_spec.rb:20:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/plugins/relation/instrumentation_spec.rb:10:in `relation'
      # ./spec/unit/rom/plugins/relation/instrumentation_spec.rb:40:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  67) ROM::Plugins::Relation::Instrumentation uses notifications API when materializing a relation
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :name already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/plugins/relation/instrumentation_spec.rb:20:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/plugins/relation/instrumentation_spec.rb:10:in `relation'
      # ./spec/unit/rom/plugins/relation/instrumentation_spec.rb:34:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  68) ROM::Relation#new returns a new relation with a new dataset and new options
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/new_spec.rb:7:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/new_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/new_spec.rb:23:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  69) ROM::Relation#new returns a new relation with a new dataset
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/new_spec.rb:7:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/new_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/new_spec.rb:18:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  70) ROM::Relation#new returns a new relation with a re-stablished input/output schemas
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/new_spec.rb:7:in `block (4 levels) in <top (required)>'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/new_spec.rb:5:in `relation'
      # ./spec/unit/rom/relation/new_spec.rb:31:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

  71) ROM::Relation#[] defines a canonical schema for a relation
      Failure/Error: ::Kernel.raise ::ROM::AttributeAlreadyDefinedError,

      ROM::AttributeAlreadyDefinedError:
        Attribute :id already defined
      # ./lib/rom/schema/dsl.rb:71:in `attribute'
      # ./spec/unit/rom/relation/attribute_reader_spec.rb:7:in `block in Users'
      # ./lib/rom/schema/dsl.rb:157:in `instance_exec'
      # ./lib/rom/schema/dsl.rb:157:in `call'
      # ./lib/rom/relation/class_interface.rb:106:in `block in schema'
      # ./lib/rom/relation/class_interface.rb:302:in `call'
      # ./lib/rom/relation/class_interface.rb:302:in `default_schema'
      # ./lib/rom/relation.rb:142:in `block in Relation'
      # (eval):8:in `instance_exec'
      # (eval):8:in `__dry_initializer_initialize__'
      # ~/.gem/truffleruby/2.6.1/gems/dry-initializer-2.5.0/lib/dry/initializer/mixin/root.rb:7:in `initialize'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./lib/rom/support/memoizable.rb:13:in `new'
      # ./spec/unit/rom/relation/attribute_reader_spec.rb:12:in `block (2 levels) in <top (required)>'
      # ./spec/support/constant_leak_finder.rb:6:in `find'
      # ./spec/spec_helper.rb:58:in `block (2 levels) in <top (required)>'

Finished in 20.17 seconds (files took 8.44 seconds to load)
657 examples, 71 failures

Failed examples:

rspec ./spec/unit/rom/relation/composite_spec.rb:100 # ROM::Relation::Composite#__send__ proxies Kernel methods
rspec ./spec/unit/rom/relation/composite_spec.rb:94 # ROM::Relation::Composite#first calls and returns the first object
rspec ./spec/unit/rom/relation/composite_spec.rb:40 # ROM::Relation::Composite#call sends a relation through mappers
rspec ./spec/unit/rom/relation/composite_spec.rb:61 # ROM::Relation::Composite#call sends a relation through another composite relation
rspec ./spec/unit/rom/relation/composite_spec.rb:49 # ROM::Relation::Composite#call sends a relation through another relation
rspec ./spec/unit/rom/relation/composite_spec.rb:78 # ROM::Relation::Composite#each calls and iterates
rspec ./spec/unit/rom/relation/composite_spec.rb:86 # ROM::Relation::Composite#each returns enumerator if block is not provided
rspec ./spec/unit/rom/relation/output_schema_spec.rb:17 # ROM::Relation#output_schema returns output_schema based on canonical schema
rspec ./spec/unit/rom/relation/output_schema_spec.rb:22 # ROM::Relation#output_schema returns output_schema based on projected schema
rspec ./spec/unit/rom/relation/to_ast_spec.rb:39 # ROM::Relation#to_ast returns valid ast for a plain relation
rspec ./spec/unit/rom/relation/to_ast_spec.rb:52 # ROM::Relation#to_ast returns valid ast for a combined relation
rspec ./spec/unit/rom/relation/to_ast_spec.rb:76 # ROM::Relation#to_ast returns valid ast for a wrapped relation
rspec ./spec/unit/rom/relation/foreign_key_spec.rb:13 # ROM::Relation#foreign_key returns FK name for the given relation name
rspec ./spec/unit/rom/relation/foreign_key_spec.rb:21 # ROM::Relation#foreign_key generates a virtual FK when real attribute is not found
rspec ./spec/unit/rom/relation/foreign_key_spec.rb:17 # ROM::Relation#foreign_key returns FK name for the given relation name with a different dataset name
rspec ./spec/unit/rom/relation/call_spec.rb:30 # ROM::Relation#call without read types in schema returns loaded relation with data
rspec ./spec/unit/rom/relation/call_spec.rb:26 # ROM::Relation#call without read types in schema has noop output_schema
rspec ./spec/unit/rom/relation/call_spec.rb:74 # ROM::Relation#call auto-struct automatically maps to structs
rspec ./spec/unit/rom/relation/call_spec.rb:84 # ROM::Relation#call auto-struct supports aliasing
rspec ./spec/unit/rom/relation/call_spec.rb:50 # ROM::Relation#call with read types in schema returns loaded relation with coerced data
rspec ./spec/unit/rom/memory/inheritance_spec.rb:28 # ROM::Memory::Relation.inherited extends subclass with core methods
rspec ./spec/unit/rom/relation_spec.rb:255 # ROM::Relation#input_schema returns a default input schema
rspec ./spec/unit/rom/relation_spec.rb:247 # ROM::Relation#input_schema returns a schema hash type
rspec ./spec/unit/rom/memory/commands_spec.rb:18 # ROM::Memory::Commands Create #call uses default input handler
rspec ./spec/unit/rom/memory/commands_spec.rb:34 # ROM::Memory::Commands Update #call uses default input handler
rspec ./spec/unit/rom/memory/relation_spec.rb:109 # ROM::Memory::Relation#order places nil before other values when required
rspec ./spec/unit/rom/memory/relation_spec.rb:97 # ROM::Memory::Relation#order sorts data using provided attribute names
rspec ./spec/unit/rom/memory/relation_spec.rb:123 # ROM::Memory::Relation#mappers uses custom mapper compiler
rspec ./spec/unit/rom/memory/relation_spec.rb:31 # ROM::Memory::Relation#take takes given number of tuples
rspec ./spec/unit/rom/memory/relation_spec.rb:40 # ROM::Memory::Relation#project projects tuples with the provided keys
rspec ./spec/unit/rom/memory/relation_spec.rb:84 # ROM::Memory::Relation#restrict allows to use regexp as a value
rspec ./spec/unit/rom/memory/relation_spec.rb:66 # ROM::Memory::Relation#restrict restricts data using block
rspec ./spec/unit/rom/memory/relation_spec.rb:75 # ROM::Memory::Relation#restrict allows to use array as a value
rspec ./spec/unit/rom/memory/relation_spec.rb:58 # ROM::Memory::Relation#restrict restricts data using criteria hash
rspec ./spec/unit/rom/relation/schema_spec.rb:116 # ROM::Relation.schema allows JSON read/write coersion
rspec ./spec/unit/rom/relation/schema_spec.rb:172 # ROM::Relation.schema allows Hash to JSON coersion only
rspec ./spec/unit/rom/relation/schema_spec.rb:5 # ROM::Relation.schema defines a canonical schema for a relation
rspec ./spec/unit/rom/relation/schema_spec.rb:131 # ROM::Relation.schema allows JSON to Hash coersion only
rspec ./spec/unit/rom/relation/schema_spec.rb:86 # ROM::Relation.schema allows JSON read/write coersion
rspec ./spec/unit/rom/relation/schema_spec.rb:101 # ROM::Relation.schema allows JSON read/write coersion using symbols
rspec ./spec/unit/rom/relation/schema_spec.rb:56 # ROM::Relation.schema allows setting composite primary key
rspec ./spec/unit/rom/relation/schema_spec.rb:145 # ROM::Relation.schema returns original payload in JSON to Hash coersion when json is invalid
rspec ./spec/unit/rom/relation/schema_spec.rb:71 # ROM::Relation.schema allows setting foreign keys
rspec ./spec/unit/rom/relation/schema_spec.rb:158 # ROM::Relation.schema allows JSON to Hash coersion only using symbols as keys
rspec ./spec/unit/rom/relation/schema_spec.rb:36 # ROM::Relation.schema allows defining types for reading tuples
rspec ./spec/unit/rom/relation/schema_spec.rb:308 # ROM::Relation.schema #with resets input and output schemas
rspec ./spec/unit/rom/relation/schema_spec.rb:293 # ROM::Relation.schema #schema_proc is idempotent
rspec ./spec/unit/rom/relation/schema_spec.rb:220 # ROM::Relation.schema #schema returns defined schema
rspec ./spec/unit/rom/relation/schema_spec.rb:269 # ROM::Relation.schema #schema builds optional read types automatically
rspec ./spec/unit/rom/relation/schema_spec.rb:234 # ROM::Relation.schema #schema uses custom schema dsl
rspec ./spec/unit/rom/schema/accessing_attributes_spec.rb:47 # ROM::Schema#[] with a merged schema raises KeyError when attribute is not found
rspec ./spec/unit/rom/schema/accessing_attributes_spec.rb:17 # ROM::Schema#[] with a schema raises KeyError when attribute is not found
rspec ./spec/unit/rom/relation/class_interface/view_spec.rb[1:3:3] # ROM::Relation.view with an explicit schema auto-projects the relation via schema
rspec ./spec/unit/rom/relation/class_interface/view_spec.rb[1:3:2] # ROM::Relation.view with an explicit schema uses projected schema for view schema
rspec ./spec/unit/rom/relation/class_interface/view_spec.rb[1:3:4] # ROM::Relation.view with an explicit schema auto-projects a restricted relation via schema
rspec ./spec/unit/rom/relation/class_interface/view_spec.rb[1:3:1] # ROM::Relation.view with an explicit schema appends foreign attributes
rspec ./spec/unit/rom/relation/class_interface/view_spec.rb[1:4:3] # ROM::Relation.view with an inferred schema auto-projects the relation via schema
rspec ./spec/unit/rom/relation/class_interface/view_spec.rb[1:4:2] # ROM::Relation.view with an inferred schema uses projected schema for view schema
rspec ./spec/unit/rom/relation/class_interface/view_spec.rb[1:4:1] # ROM::Relation.view with an inferred schema appends foreign attributes
rspec ./spec/unit/rom/relation/class_interface/view_spec.rb[1:4:4] # ROM::Relation.view with an inferred schema auto-projects a restricted relation via schema
rspec ./spec/unit/rom/relation/struct_namespace_spec.rb:48 # ROM::Relation#struct_namespace setting at runtime returns a new relation configured for the provided struct namespace and aliased relation
rspec ./spec/unit/rom/relation/struct_namespace_spec.rb:54 # ROM::Relation#struct_namespace setting at runtime allows switching namespaces at runtime
rspec ./spec/unit/rom/relation/struct_namespace_spec.rb:42 # ROM::Relation#struct_namespace setting at runtime returns a new relation configured for the provided struct namespace
rspec ./spec/unit/rom/relation/struct_namespace_spec.rb:75 # ROM::Relation#struct_namespace using default setting returns a new relation configured for the provided struct namespace
rspec ./spec/unit/rom/relation/struct_namespace_spec.rb:89 # ROM::Relation#struct_namespace using default setting using inheritance inherits struct namespace and uses custom alias
rspec ./spec/unit/rom/plugins/relation/instrumentation_spec.rb:39 # ROM::Plugins::Relation::Instrumentation instruments custom methods
rspec ./spec/unit/rom/plugins/relation/instrumentation_spec.rb:33 # ROM::Plugins::Relation::Instrumentation uses notifications API when materializing a relation
rspec ./spec/unit/rom/relation/new_spec.rb:21 # ROM::Relation#new returns a new relation with a new dataset and new options
rspec ./spec/unit/rom/relation/new_spec.rb:15 # ROM::Relation#new returns a new relation with a new dataset
rspec ./spec/unit/rom/relation/new_spec.rb:29 # ROM::Relation#new returns a new relation with a re-stablished input/output schemas
rspec ./spec/unit/rom/relation/attribute_reader_spec.rb:4 # ROM::Relation#[] defines a canonical schema for a relation

Randomized with seed 51467

~/.rubies/truffleruby-1.0.0-nightly/jre/languages/ruby/bin/truffleruby -I~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/lib:~/.gem/truffleruby/2.6.1/gems/rspec-support-3.8.0/lib ~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb failed
~/.rubies/truffleruby-1.0.0-nightly/jre/languages/ruby/bin/truffleruby -I~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/lib:~/.gem/truffleruby/2.6.1/gems/rspec-support-3.8.0/lib ~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb

Randomized with seed 9601
..#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x0000000105d1bbab, pid=52622, tid=0x0000000000001903
#
# JRE version: OpenJDK Runtime Environment (8.0_202-b08) (build 1.8.0_202-20190206132754.buildslave.jdk8u-src-tar--b08)
# Java VM: OpenJDK GraalVM 1.0.0-rc14-dev (25.202-b08-jvmci-0.55 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# J 11387 C2 com.oracle.truffle.llvm.nodes.memory.load.LLVMDirectLoadNodeFactory$LLVMPointerDirectLoadNodeGen.executeGeneric(Lcom/oracle/truffle/api/frame/VirtualFrame;)Ljava/lang/Object; (170 bytes) @ 0x0000000105d1bbab [0x0000000105d1b520+0x68b]
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# ~/dev/bugs/truffleruby/rom/repository/hs_err_pid52622.log
Could not load hsdis-amd64.dylib; library not loadable; PrintAssembly is disabled
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#
~/.rubies/truffleruby-1.0.0-nightly/jre/languages/ruby/bin/truffleruby -I~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/lib:~/.gem/truffleruby/2.6.1/gems/rspec-support-3.8.0/lib ~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb failed
~/.rubies/truffleruby-1.0.0-nightly/jre/languages/ruby/bin/truffleruby -I~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/lib:~/.gem/truffleruby/2.6.1/gems/rspec-support-3.8.0/lib ~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb

Randomized with seed 60877
......................................#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x000000010e63dce2, pid=52662, tid=0x0000000000002703
#
# JRE version: OpenJDK Runtime Environment (8.0_202-b08) (build 1.8.0_202-20190206132754.buildslave.jdk8u-src-tar--b08)
# Java VM: OpenJDK GraalVM 1.0.0-rc14-dev (25.202-b08-jvmci-0.55 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# J 12185 C2 com.oracle.truffle.llvm.nodes.memory.load.LLVMDirectLoadNodeFactory$LLVMPointerDirectLoadNodeGen.executeGeneric(Lcom/oracle/truffle/api/frame/VirtualFrame;)Ljava/lang/Object; (170 bytes) @ 0x000000010e63dce2 [0x000000010e63d940+0x3a2]
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# ~/dev/bugs/truffleruby/rom/changeset/hs_err_pid52662.log
Could not load hsdis-amd64.dylib; library not loadable; PrintAssembly is disabled
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#
~/.rubies/truffleruby-1.0.0-nightly/jre/languages/ruby/bin/truffleruby -I~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/lib:~/.gem/truffleruby/2.6.1/gems/rspec-support-3.8.0/lib ~/.gem/truffleruby/2.6.1/gems/rspec-core-3.8.0/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb failed

Randomized with seed 28606
....

Finished in 0.303 seconds (files took 3.82 seconds to load)
4 examples, 0 failures

Randomized with seed 28606


specs failed
bug cexts

All 14 comments

@chrisseaton ^^

Can you post the hs_err_pid52622.log please?

Looks like it's crashing during C extension GC marking @aardvark179.

J 3903 C2 org.truffleruby.language.LazyRubyNode.execute(Lcom/oracle/truffle/api/frame/VirtualFrame;)Ljava/lang/Object; (9 bytes) @ 0x000000010d55f67c [0x000000010d55f600+0x7c]
J 11023 C2 com.oracle.truffle.api.impl.DefaultCallTarget.call([Ljava/lang/Object;)Ljava/lang/Object; (79 bytes) @ 0x000000010daae378 [0x000000010daade00+0x578]
J 12457 C2 org.truffleruby.RubyContext.send(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object; (52 bytes) @ 0x000000010d4ed4cc [0x000000010d4ed200+0x2cc]
J 12163 C1 org.truffleruby.core.MarkingService$$Lambda$791.accept(Ljava/lang/Object;)V (12 bytes) @ 0x000000010e61cd4c [0x000000010e61c6e0+0x66c]
J 11022 C1 org.truffleruby.core.ReferenceProcessingService.runCatchingErrors(Ljava/util/function/Consumer;Lorg/truffleruby/core/ReferenceProcessingService$ProcessingReference;)V (53 bytes) @ 0x000000010cf096cc [0x000000010cf095c0+0x10c]
J 12033 C1 org.truffleruby.core.MarkingService.runMarker(Lorg/truffleruby/core/MarkingService$MarkerReference;)V (12 bytes) @ 0x000000010e58589c [0x000000010e5854c0+0x3dc]
j  org.truffleruby.core.MarkingService.runAllMarkers()V+46
J 12797 C1 org.truffleruby.core.MarkingService.addToKeptObjects(Ljava/lang/Object;)V (33 bytes) @ 0x000000010c9dac74 [0x000000010c9daae0+0x194]
J 12787 C1 org.truffleruby.core.MarkingServiceNodesFactory$KeepAliveNodeGen.execute(Lcom/oracle/truffle/api/frame/VirtualFrame;Ljava/lang/Object;)V (30 bytes) @ 0x000000010cc1b06c [0x000000010cc1a660+0xa0c]
J 12105 C1 org.truffleruby.cext.ValueWrapper$AsPointerNode.access(Lcom/oracle/truffle/api/frame/VirtualFrame;Lorg/truffleruby/cext/ValueWrapper;)J (57 bytes) @ 0x000000010e5e890c [0x000000010e5e7ee0+0xa2c]
J 12104 C1 org.truffleruby.cext.ValueWrapperForeignFactory$AsPointerSubNodeGen.executeWithTarget(Lcom/oracle/truffle/api/frame/VirtualFrame;Ljava/lang/Object;)Ljava/lang/Object; (40 bytes) @ 0x000000010e5e10ec [0x000000010e5e0be0+0x50c]
J 12107 C1 org.truffleruby.cext.ValueWrapperForeign$AsPointerSubNode$AS_POINTERRootNode.execute(Lcom/oracle/truffle/api/frame/VirtualFrame;)Ljava/lang/Object; (37 bytes) @ 0x000000010e5e75ec [0x000000010e5e72e0+0x30c]

I can reproduce this with pg, I'm trying to work out exactly what the source of the problem is.

I鈥檝e found and fixed one cause of this, along with a few more minor issues that may have contributed to the problem, but I can still provoke the issue. I鈥檒l keep looking at this tomorrow.

@chrisseaton Can I ask for when @aardvark179 changes will be merged, it's possible to make a new nightly build for me, please?

Yes I can make a nightly build for you whenever you need - I'll do one later today.

Did you know it's relatively easy to build yourself as well? If you want to try that I can help you do it. If you'd prefer me to do the builds for you that's fine as well I'll keep doing that.

His changes aren't merged yet. I'll wait until they are.

@chrisseaton I would prefer not to build myself for now yet. In near future why not. I'd appreciate a new nightly build after merging a fix on this issue if I can ask for. This and the openssl's issue (already fixed by you) blocking me.

I'm testing one middle large Rails on TruffleRuby so far quite good. I just needed to exclude some native gems (due to missing FFI#enum support) and replace them Ruby variants. The boot is quite slow (~7 min before to be able receiving a first request). But the first request ends with this SIGSEGV.

@aardvark179 I don't push into this issue but there is any news about this issue? :)

Sorry, I was away from the office on Friday. The changes have now been merged, though they didn't make it into RC14. There will be some more changes to come to fix a few other issues I've found while testing pg.

@chrisseaton it would be possible to build RC15-dev for me, please?

Done.

Was this page helpful?
0 / 5 - 0 ratings