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.
>>> 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).
--
Brice Figureau
My Blog: http://www.masterzen.fr/
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---