<div dir="ltr">Hi Alexander,<div><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="im"><div class="gmail_extra">> <span style="font-family:arial,sans-serif;font-size:13px">Is this inconvinience particularly one which you meant, or something other?</span></div><div class="gmail_extra">


<br></div></div><div class="gmail_extra">Don't remember I said something like that, I spoke purely about performance of INTERSECT / UNION in SQL</div></div></blockquote><div><br></div><div style>I meant this "<span style="font-family:arial,sans-serif;font-size:13px">This way of filtering should works in the development version of Pony (it was accidentally broken in the last release 0.4.8, but will be restored in the upcoming release 0.4.9)", but I see now that the development version works fine as described.</span></div>
<div style><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span style="font-family:arial,sans-serif;font-size:13px">It will be non-intuitive if parameter name can be arbitrary when query has only one for-loop, but becomes non-arbitrary with multiple for-loops.</span></blockquote>
<div><br></div><div style>I didnt mean that.</div><div><br></div><div style>Look here for example:</div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra" style><div class="gmail_quote" style>
<div style><div style><font face="courier new, monospace">>>> d = {</font></div></div></div></div><div class="gmail_extra" style><div class="gmail_quote" style><div style><div style><font face="courier new, monospace">...   'a':[1,2,3],</font></div>
</div></div></div><div class="gmail_extra" style><div class="gmail_quote" style><div style><div style><font face="courier new, monospace">...   'b':[4,5],</font></div></div></div></div><div class="gmail_extra" style>
<div class="gmail_quote" style><div style><div style><font face="courier new, monospace">...   'c':[6,7]</font></div></div></div></div><div class="gmail_extra" style><div class="gmail_quote" style><div style><div style>
<font face="courier new, monospace">... }</font></div></div></div></div><div class="gmail_extra" style><div class="gmail_quote" style><div style><div style><div style><font face="courier new, monospace">>>> [(v,k) for k in d for v in d[k]]</font></div>
</div></div></div></div><div class="gmail_extra" style><div class="gmail_quote" style><div style><div style><font face="courier new, monospace">[(1, 'a'), (2, 'a'), (3, 'a'), (6, 'c'), (7, 'c'), (4, 'b'), (5, 'b')]</font></div>
</div></div></div></blockquote><div class="gmail_extra"><div class="gmail_quote"><div style><br></div><div style>You can see that the generator turns the first circle and then the second one, but always returns only one item - the (v,k) pair - every turn. After the evaluating of the generator the only this item remains available for the following operations. So, filtering for example, the returned sequence we may use only the item value in a filter expression:</div>
<div style><div><br></div></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra" style><div class="gmail_quote" style><div style><div style><font face="courier new, monospace">>>> filter(lambda x:x[0]==2,[(v,k) for k in d for v in d[k]])</font></div>
</div></div></div><div class="gmail_extra" style><div class="gmail_quote" style><div style><div style><font face="courier new, monospace">[(2, 'a')]</font></div></div></div></div></blockquote><div class="gmail_extra">
<div class="gmail_quote"><div style><br></div><div style>The same rule should be appied IMHO to the lambda-filter expression which is used to filter the query: the only item returned in the query result may be used. This particular item is an only lambda parameter of the lambda-filter, so we are free to use any name for it.    <br>
</div><div style><br></div><div style>Another syntax case should be applied IMHO if the filter is included DIRECTLY into the generator like here:</div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
<div class="gmail_extra" style><div class="gmail_quote" style><div style><div style><font face="courier new, monospace">>>> [(v,k) for k in d for v in d[k] if v != 1 and k != 'c']</font></div></div></div>
</div><div class="gmail_extra" style><div class="gmail_quote" style><div style><div style><font face="courier new, monospace">[(2, 'a'), (3, 'a'), (4, 'b'), (5, 'b')]</font></div></div></div>
</div></blockquote>The filter here may use any variable in the context of the generator and this is usual python language syntax and semantic.<div><br></div><div style>Regards,</div><div style>Vsevolod</div><div style><br>
</div></div></div>