Hi,
I have used a query path to lookup some data with dm-core 0.9.7,
and wonder if the path could use different repository.
original code:
class Photo
include DataMapper::Resource
belongs_to :permission
def self.for_public
all(permission.guest.not => :none)
end
end
I would like to do this:
[...]
all(permission(:repository => :cache).guest.not => :none)
[...]
and it seems impossible since INNER JOIN was created in
the form of:
statement <<
" INNER JOIN #{quote_table_name(join_table_name)} ON "
I am not familiar with database, and have no idea if this could
be implemented or not. Then I tried this with MySQL:
Photo.find_by_sql('SELECT * FROM `cache`.`photos` INNER JOIN
`core`.`permissions` ON (`permissions`.`id` =
`photos`.`permission_id`) WHERE `permissions`.`guest` <> 1;')
It's slow but seems working.
Then I rewrite `for_public' method mentioned above to:
def Photo.for_public
# extracted from DataMapper::Model#method_missing
rel = relationships(:default)[:permission]
klass = self == rel.child_model ? rel.parent_model : rel.child_model
per = DataMapper::Query::Path.new(repository(:default), [rel],
klass)
all(per.guest.not => :none)
end
and monkey patch dm-core/adapters/data_object_adapter.rb
DataObjectsAdapter#SQL#links_statement:
statement << " INNER JOIN #{quote_table_name
(query.repository.adapter.uri.path[1..-1])}.#{quote_table_name
(join_table_name)} ON "
then calling:
Photo.repository(:cache) do
Photo.for_public
end
and it produced:
INNER JOIN `cache`.`permissions`
It seems it didn't preserved :default repo but :cache repo instead.
Could this be implemented? If so, perhaps I could spend some
time to figure out where to start.
Many thanks!
cheers,
Jen-Shin
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"DataMapper" 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/datamapper?hl=en
-~----------~----~----~----~------~----~------~--~---