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.

Reply via email to