On Oct 11, 12:59 pm, Christer Nilsson <[email protected]> wrote: > The sql works in MySql at least. > > With the following two models, in different databases: > > class Item < Sequel::Model(:sonar__tbltree) many_to_one :customer, > :class=>:Customer, :key=>:customerid > end > class Customer < Sequel::Model(:samm__tblorganisation) one_to_many :items, > :class=>:Item, :key=>:customerid > end > > I can get my dataset: > dataset = Item. > eager_graph(:customer). > # select(:tbltree__id,:customer__name). > order(:customer__name). > limit(10) > > and traverse it as two models: > > dataset.all.each do |item| > if item.customer.nil? > p item.id > else > p item.id, item.customer.name > end > end > > This works fine, I get 10 rows with two columns each: > "15437 WSP Sverige AB" > "15418 WSP Sverige AB" > "15400 WSP Sverige AB" > "15377 WSP Sverige AB" > "15376 WSP Sverige AB" > "15375 WSP Sverige AB" > "15357 WSP Sverige AB" > "15298 WSP Sverige AB" > "15290 WSP Sverige AB" > "15283 WSP Sverige AB" > (2.656 secs) > > But, if I try to reduce the number of columns, for performance, by reducing > the number of columns (from 45) to two > > select(:tbltree__id,:customer__name) > > I lose one column: > > 15437 15418 > 15400 > 15377 > 15376 > 15375 > 15357 > 15298 > 15290 > 15283 > (0.125 secs) > > The generated sql: > > SELECT `tbltree`.`id`, `customer`.`name` > FROM `tbltree` > LEFT OUTER JOIN `samm`.`tblorganisation` AS `customer` ON (`customer`.`id` = > `tbltree`.`customerid`) > ORDER BY `customer`.`name` DESC, `tbltree`.`id` DESC > LIMIT 10 > > It seems item.customer is only updated when "select *" is used. > > Have I found a limitation or am I doing something wrong here?
If you are using eager_graph, and you want to manipulate the columns returned, you need to use set_graph_aliases instead of select, in order to tell Sequel how to map the columns to the appropriate subhash. set_graph_aliases(:id=>[:tbltree, :id], :name=>[:customer, :name]) Alternatively, you can just join manually and have the results returned as a single hash, instead of using eager_graph. If you are attempting to optimize, manually joining is going to be faster than graphing. Jeremy --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
