On Oct 21, 2009, at 9:53 AM, Brice Figureau wrote:

>
> On 21/10/09 18:12, Luke Kanies wrote:
>> On Oct 21, 2009, at 1:19 AM, Brice Figureau wrote:
>>
>>> On Tue, 2009-10-20 at 23:51 -0700, Luke Kanies wrote:
>>>> On Oct 20, 2009, at 11:30 PM, Brice Figureau wrote:
>>>>
>>>>>
>>>>> On Wed, October 21, 2009 00:34, Luke Kanies wrote:
>>>>>> On Oct 20, 2009, at 2:33 PM, Brice Figureau wrote:
>>>>>>
>>>>>>> On 20/10/09 20:54, Luke Kanies wrote:
>>>>>>>> I'm a little confused by this patch, or at least by the last
>>>>>>>> test -
>>>>>>>> does it make it so you can't query both tags and params at the
>>>>>>>> same
>>>>>>>> time, or does it just make it so that tag queries don't also
>>>>>>>> query
>>>>>>>> the
>>>>>>>> tag param?
>>>>>>> First, and unlike what I wrote in my Puppet Camp presentation  
>>>>>>> you
>>>>>>> can't
>>>>>>> use and/or in an exported collection expression, so you can't
>>>>>>> query by
>>>>>>> tag and parameters at the same time.
>>>>>> You couldn't a long time ago, but I'm pretty sure you can now:
>>>>>>
>>>>>>       if oper == "=" or oper == "!="
>>>>>>           # Add the rails association info where necessary
>>>>>>           case str1
>>>>>>           when "title"
>>>>>>               str = "title #{oper} '#{str2}'"
>>>>>>           when "tag"
>>>>>>               str = "puppet_tags.name #{oper} '#{str2}'"
>>>>>>           else
>>>>>>               str = "param_values.value #{oper} '#{str2}' and " +
>>>>>>                   "param_names.name = '#{str1}'"
>>>>>>           end
>>>>>>       else
>>>>>>           str = "(%s) %s (%s)" % [str1, oper, str2]
>>>>>>       end
>>>>>>
>>>>>> that second to last line certainly implies that you can do 'AND'
>>>>>> and
>>>>>> 'OR'.
>>>>> Maybe, but that's not clear because in the previous block you  
>>>>> have:
>>>>>
>>>>>      case @oper
>>>>>      when "and", "or"
>>>>>          if form == :exported
>>>>>              raise Puppet::ParseError, "Puppet does not currently
>>>>> support collecting exported resources with more than one
>>>>> condition"
>>>>>          end
>>>>>          oper = @oper.upcase
>>>>>      when "=="; oper = "="
>>>>>      else
>>>>>          oper = @oper
>>>>>      end
>>>>>
>>>>> Which to me means and/or are not supported in exported
>>>>> collections...
>>>>> And looking to the git history this part is there since 2007, so a
>>>>> long
>>>>> time before I started hacking there :-)
>>>> Wow, I *totally* thought I fixed that.  Insane and inane.  I  
>>>> think I
>>>> (or you) fixed all of the plumbing so it *shoud* work, but just  
>>>> never
>>>> removed the exception that prevents it from working.
>>> The problem is that it's much more complex than just feeding AR with
>>> the
>>> extra conditions, because each time you have to add an and/or you  
>>> need
>>> to add two extra joins (and I think it's much more complex with or).
>>> I'm not sure AR is able to do that free for us.
>>> So anyway, I think it can't work directly, just by removing the
>>> exception.
>>
>> Well, adding two extra joins isn't complex exactly, it's just
>> heinously expensive. :)
>
> What I meant is that it's complex for an AR newbie like me, because  
> when
> things are too magical, they usually don't do what you want.
> I mean, even writing the condition will be difficult because you  
> have to
> reference table aliases you don't even know yet their name.
> To the point that writing the query in SQL looks much easier :-)
> /me will read the AR docs.

Oh, it won't *work*, but it'll be easy to do. :)

>>>> On the one hand, this sucks, but on the other hand, it makes our
>>>> problem of needing an abstract query language that allows us to  
>>>> make
>>>> all of our Rails support pluggable about 100x easier -- we don't  
>>>> have
>>>> to support boolean expressions, just that basic attribute query.
>>> That's one of the reason I'd like to keep it that way. In my own  
>>> usage
>>> pattern of collections, I never felt I had to use logical  
>>> expression.
>>> Looking at it, I'm sure I'm only collecting by tag which is, I  
>>> guess,
>>> what everybody is doing (what's the point on collecting on titles or
>>> file owner?).
>>
>> Well, I can see the point in doing it, but I can also understand why
>> no one is.
>
> I think this can be something we add once I'll refactor the collector
> (but I'm more and more late on this patch).

Sounds good.

-- 
Aizu's Second Law:
     What changes the world is communication, not information.
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" 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/puppet-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to