I'm playing with dataset and graph, and for the record I was able to:
# select one table and joint it self restricting the fields of joined
relation with :select
ds = DB[:employees___employee].graph(:employees, {:employee_id
=> :manager_id}, {:table_alias => :manager, :select =>
[:first_name ]})
# pick just the fields from the main relation i want
ds = ds.set_graph_aliases(:first_name => :employee, :last_name
=> :employee )
# filter on the fields of the joined relation
ds = ds.filter(Sequel.like(:manager__first_name, "A
%", :case_insensitive=>true))
What I'm trying to do without success is use an expression like
Sequel::SQL::Function.new('upper', :employee__last_name).
ds = ds.set_graph_aliases(:first_name => :employee,
:last_name => :employee,
:upper_name => [:employees, :upper_name,
Sequel::SQL::Function.new('upper', :employee__last_name)],
:first_name => :manager)
I've discovered how by looking object_graph_spec.rb. The generated sql
is correct imo:
SELECT "manager"."first_name",
"employee"."last_name",
upper("employee"."last_name") AS "upper_name"
FROM "employees" AS "employee"
LEFT OUTER JOIN "employees" AS "manager" ON ("manager"."employee_id" =
"employee"."manager_id") WHERE
("manager"."first_name" ILIKE 'A%') LIMIT 1
It shows :
NoMethodError: undefined method `[]=' for nil:NilClass
graph_each at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/dataset/graph.rb:285
each at org/jruby/RubyHash.java:1192
graph_each at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/dataset/graph.rb:283
process_result_set_convert at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/adapters/jdbc.rb:793
process_result_set at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/adapters/jdbc.rb:744
fetch_rows at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/adapters/jdbc.rb:626
execute at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/adapters/jdbc.rb:251
statement at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/adapters/jdbc.rb:557
execute at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/adapters/jdbc.rb:249
hold at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/connection_pool/threaded.rb:
105
hold at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/connection_pool/threaded.rb:
94
synchronize at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/database/connecting.rb:233
execute at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/adapters/jdbc.rb:248
execute at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/dataset/actions.rb:762
fetch_rows at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/adapters/jdbc.rb:626
graph_each at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/dataset/graph.rb:276
each at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/dataset/actions.rb:147
single_record at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/dataset/actions.rb:533
first at /home/geraldo/jruby-1.7.0/lib/ruby/
gems/shared/gems/sequel-3.40.0/lib/sequel/dataset/actions.rb:206
(root) at test_graph.rb:16
Thanks in advance
Geraldo Lopes de Souza
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sequel-talk?hl=en.