2009-08-26 7 views
7

J'utilise DataMapper, un ORM open source pour ruby, et j'ai envie de gratter. Pour l'instant, DataMapper peut utiliser le chargement stratégique d'améliorations (SEL) pour les relations un-à-plusieurs, mais pas pour plusieurs-à-plusieurs, où les requêtes N + 1 se produisent. Je voudrais bidouiller avec faire ce travail correctement, mais je ne peux pas trouver où le faire. Donc, deux partie question:Téléchargement stratégique pour les relations plusieurs-à-plusieurs dans Datamapper?

  1. Comment faire pour exécuter la suite de tests afin qu'il montre que cela échoue (nb. En ce moment toutes les spécifications qui devraient être défaillantes sont marquées comme étant en attente)?
  2. Où et comment SEL est-il mis en œuvre pour les relations un-à-plusieurs?

Répondre

0

Pour la deuxième question, vous pouvez essayer de plonger dans le code:

/lib/dm-core/associations/relationship.rb

# Eager load the collection using the source as a base 
    # 
    # @param [Collection] source 
    # the source collection to query with 
    # @param [Query, Hash] query 
    # optional query to restrict the collection 
    # 
    # @return [Collection] 
    # the loaded collection for the source 
    # 
    # @api private 
    def eager_load(source, query = nil) 
    targets = source.model.all(query_for(source, query)) 

    # FIXME: cannot associate targets to m:m collection yet 
    if source.loaded? && !source.kind_of?(ManyToMany::Collection) 
     associate_targets(source, targets) 
    end 

    targets 
    end 

./lib/dm-core/associations/ one_to_many.rb:

def lazy_load(source) 
     return if loaded?(source) 

     # SEL: load all related resources in the source collection 
     if source.saved? && (collection = source.collection).size > 1 
     eager_load(collection) 
     end 

     unless loaded?(source) 
     set!(source, collection_for(source)) 
     end 
    end 
+0

Wow, 2 ans et demi et c'est toujours un FIXME! Est-ce que les tests échouent au moins correctement maintenant? –

+0

En fait, je ne développe pas avec DataMapper, je voudrais pouvoir mais ne pas avoir le temps. Peut-être que cette question peut être posée dans les groupes DataMapper ou IRC. – CodeGroover

Questions connexes