
SystemStackError when accessing lazy loaded resources.
Reported by Postmodern | January 2nd, 2011 @ 03:35 AM
I'm getting a strange "stack level too deep" error when accessing belongs_to relationships on lazy-loaded resources. I eventually traced it back to this method in DataMapper:
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:421
expected = record_value(value, :target_key)
(rdb:1) bt
--> #0 DataMapper::Query::Conditions::AbstractComparison.expected
at line /home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:421
#1 DataMapper::Query::Conditions::EqualToComparison.matches?(record#Ronin::EmailAddress,...)
at line /home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:533
#2 Set.each
at line /home/hal/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/set.rb:461
#3 Set.each
at line /home/hal/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/set.rb:222
#4 DataMapper::Query::Conditions::AbstractOperation.each
at line /home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/operation.rb:159
#5 DataMapper::Query::Conditions::AndOperation.matches?(record#Ronin::EmailAddress,...)
at line /home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/operation.rb:461
#6 DataMapper::Resource.collection
at line /home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/resource.rb:635
#7 DataMapper::Associations::ManyToOne::Relationship.lazy_load(source#Ronin::EmailAddress,...)
at line /home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/associations/many_to_one.rb:158
#8 DataMapper::Resource::State::Persisted.lazy_load(subject#DataMapper::Associati...,...)
at line /home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/resource/state/persisted.rb:23
#9 DataMapper::Resource::State::Persisted.get(subject#DataMapper::Associati...)
at line /home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/resource/state/persisted.rb:8
#10 #<Module:0x00000002b60380>.host_name
at line /home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/model/relationship.rb:337
Here is where it starts to loop:
(rdb:1) step
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:364
subject = self.subject
(rdb:1) step
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:365
case record
(rdb:1) step
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:371
record
(rdb:1) step
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:423
if @subject.respond_to?(:source_key)
(rdb:1) step
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:426
expected
(rdb:1) step
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:536
super
(rdb:1) step
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:461
if relationship? && expected.respond_to?(:query)
(rdb:1) step
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:449
subject.kind_of?(Associations::Relationship)
(rdb:1) step
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:464
super
(rdb:1) step
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:211
match_property?(record)
(rdb:1)
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:300
expected.send(operator, record_value(record))
(rdb:1)
/home/hal/.rvm/gems/ruby-1.9.2-p136/gems/dm-core-1.0.2/lib/dm-core/query/conditions/comparison.rb:421
expected = record_value(value, :target_key)
No comments found
Please Sign in or create a free account to add a new ticket.
With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »