<!-- 
RSS generated by JIRA (5.2.7#850-sha1:b2af0c8dc8537b36121c6a579fabbdf79fc919e5) at Wed Jun 19 04:43:36 UTC 2013

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
For example:
http://www.doctrine-project.org/jira/si/jira.issueviews:issue-xml/DDC-2341/DDC-2341.xml?field=key&field=summary
-->
<rss version="0.92" >
<channel>
    <title>Doctrine Project</title>
    <link>http://www.doctrine-project.org/jira</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>5.2.7</version>
        <build-number>850</build-number>
        <build-date>21-02-2013</build-date>
    </build-info>

<item>
            <title>[DDC-2341] [GH-606] Don&apos;t add empty Expr to another one</title>
                <link>http://www.doctrine-project.org/jira/browse/DDC-2341</link>
                <project id="10032" key="DDC">Doctrine 2 - ORM</project>
                        <description>&lt;p&gt;This issue is created automatically through a Github pull request on behalf of jean-gui:&lt;/p&gt;

&lt;p&gt;  Url: &lt;a href=&quot;https://github.com/doctrine/doctrine2/pull/606&quot; class=&quot;external-link&quot;&gt;https://github.com/doctrine/doctrine2/pull/606&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Message:&lt;/p&gt;

&lt;p&gt;Doctrine should not allow to add an empty Expr to another one. Current code allows that, which can lead to wrong DQL.&lt;br/&gt;
Example 1:&lt;br/&gt;
```php&lt;br/&gt;
$andExpr = $this-&amp;gt;_expr-&amp;gt;andx();&lt;br/&gt;
$andExpr-&amp;gt;add($this-&amp;gt;_expr-&amp;gt;andx());&lt;br/&gt;
$andExpr-&amp;gt;add($this-&amp;gt;_expr-&amp;gt;eq(1, 1));&lt;br/&gt;
echo $andExpr;&lt;br/&gt;
```&lt;br/&gt;
will output:&lt;br/&gt;
```sql&lt;br/&gt;
 AND 1 = 1&lt;br/&gt;
```&lt;br/&gt;
instead of:&lt;br/&gt;
```sql&lt;br/&gt;
1 = 1&lt;br/&gt;
```&lt;/p&gt;

&lt;p&gt;Example 2:&lt;br/&gt;
```php&lt;br/&gt;
echo $andExpr;&lt;br/&gt;
```&lt;br/&gt;
will output:&lt;br/&gt;
```sql&lt;br/&gt;
 AND  AND &lt;br/&gt;
```&lt;br/&gt;
instead of nothing.&lt;/p&gt;

&lt;p&gt;IRC log of the discusion on #doctrine:&lt;br/&gt;
```irc&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:36:18&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       hi&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:36:35&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       I have a question about Doctrine/ORM/Query/Expr/Base.php&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:37:17&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       looking at the add function (&lt;a href=&quot;https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Query/Expr/Base.php#L89&quot; class=&quot;external-link&quot;&gt;https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Query/Expr/Base.php#L89&lt;/a&gt;), the first if seems wrong&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:37:39&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       [[ if ( $arg !== null || ($arg instanceof self &amp;amp;&amp;amp; $arg-&amp;gt;count() &amp;gt; 0) ) ]]&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:39:49&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       if $arg is not null, then it will get added even if $arg-&amp;gt;count === 0&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:41:03&amp;#93;&lt;/span&gt; &amp;lt;ocramius&amp;gt;       yes&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:41:42&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       that doesn&apos;t seem right, does it?&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:43:29&amp;#93;&lt;/span&gt; &amp;lt;ocramius&amp;gt;       why not?&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:43:34&amp;#93;&lt;/span&gt; &amp;lt;ocramius&amp;gt;       can you elaborate?&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:45:37&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       that &quot;if&quot; seems to be meaning that the function shouldn&apos;t add $arg if  $arg-&amp;gt;count() equals 0&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:45:45&amp;#93;&lt;/span&gt; &amp;lt;Ninj&amp;gt;   ocramius: i think Jean-Gui means that the right side of the OR will be called only if the left side is false, which means $arg is null. And if $arg is null it cannot be an object&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:46:07&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       right&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:46:30&amp;#93;&lt;/span&gt; &amp;lt;Ninj&amp;gt;   this condition is indeed bugged&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:47:12&amp;#93;&lt;/span&gt; &amp;lt;alcuadradoatwork&amp;gt;       I see Jean-Gui&apos;s point too&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:47:18&amp;#93;&lt;/span&gt; &amp;lt;ocramius&amp;gt;       write a test case then &lt;img class=&quot;emoticon&quot; src=&quot;http://www.doctrine-project.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:47:24&amp;#93;&lt;/span&gt; &amp;lt;alcuadradoatwork&amp;gt;       maybe it works right, but it&apos;s confusing&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:48:07&amp;#93;&lt;/span&gt; &amp;lt;Ninj&amp;gt;   this condition will not throw any error because the &quot;instanceof&quot; will prevent the $arg::count function to be called on a null object, but it is still useless&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:48:20&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       I think [[ if ( $arg &lt;span class=&quot;error&quot;&gt;Unable to render embedded object: File (== null &amp;amp;&amp;amp; () not found.&lt;/span&gt;($arg instanceof self) || ($arg instanceof self &amp;amp;&amp;amp; $arg-&amp;gt;count() &amp;gt; 0)) ) ]] would work better&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:48:31&amp;#93;&lt;/span&gt;   * Jean-Gui will look into how to submit bug reports&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:48:49&amp;#93;&lt;/span&gt; &amp;lt;alcuadradoatwork&amp;gt;       isn&apos;t this enough?  if ($arg instanceof self &amp;amp;&amp;amp; $arg-&amp;gt;count() &amp;gt; 0)&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:49:18&amp;#93;&lt;/span&gt; &amp;lt;Ninj&amp;gt;   i think it is, alcuadradoatwork&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:49:28&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       no, because if $arg is not an instance of self, I think we still want to add it&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:49:45&amp;#93;&lt;/span&gt; &amp;lt;ocramius&amp;gt;       alcuadradoatwork: again... if it is a buggy condition, write a small test and open a PR &lt;img class=&quot;emoticon&quot; src=&quot;http://www.doctrine-project.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:50:03&amp;#93;&lt;/span&gt; &amp;lt;alcuadradoatwork&amp;gt;       ocramius, it depends on your definition of &quot;buggy&quot;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:50:32&amp;#93;&lt;/span&gt; &amp;lt;alcuadradoatwork&amp;gt;       it won&apos;t damage the behavior of the software, but it&apos;s quality its kind of pour&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:51:19&amp;#93;&lt;/span&gt; &amp;lt;ocramius&amp;gt;       alcuadradoatwork: yes, still it needs coverage. I didn&apos;t say it needs a &lt;em&gt;FAILING&lt;/em&gt; test&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:51:38&amp;#93;&lt;/span&gt; &amp;lt;alcuadradoatwork&amp;gt;       I see your point&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:51:47&amp;#93;&lt;/span&gt; &amp;lt;Ninj&amp;gt;   if the logic is :  &quot;add any non-null object, but if it&apos;s self so add it only if count&amp;gt;0&quot; then it must be rewriten&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:52:46&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       $args should be added if it&apos;s an instance of self or $_allowedClasses&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:53:16&amp;#93;&lt;/span&gt; &amp;lt;Ninj&amp;gt;   hum&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:53:37&amp;#93;&lt;/span&gt; &amp;lt;Ninj&amp;gt;   $args should be added if it&apos;s an instance of self with count &amp;gt; 0 or any other $_allowedClasse&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:53:55&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       yes, Ninj&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:55:01&amp;#93;&lt;/span&gt; &amp;lt;Jean-Gui&amp;gt;       thanks for your help guys, I&apos;ll submit a bug report with some test cases&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;jeudi 7 mars 2013&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;14:55:43&amp;#93;&lt;/span&gt; &amp;lt;Ninj&amp;gt;   your welcome Jean-Gui&lt;br/&gt;
```&lt;/p&gt;
</description>
                <environment></environment>
            <key id="14678">DDC-2341</key>
            <summary>[GH-606] Don&apos;t add empty Expr to another one</summary>
                <type id="1" iconUrl="http://www.doctrine-project.org/jira/images/icons/issuetypes/bug.png">Bug</type>
                                <priority id="3" iconUrl="http://www.doctrine-project.org/jira/images/icons/priorities/major.png">Major</priority>
                    <status id="5" iconUrl="http://www.doctrine-project.org/jira/images/icons/statuses/resolved.png">Resolved</status>
                    <resolution id="1">Fixed</resolution>
                    <security id="10000">All</security>
                        <assignee username="beberlei">Benjamin Eberlei</assignee>
                                <reporter username="beberlei">Benjamin Eberlei</reporter>
                        <labels>
                    </labels>
                <created>Fri, 8 Mar 2013 16:15:04 +0000</created>
                <updated>Tue, 12 Mar 2013 18:20:26 +0000</updated>
                    <resolved>Tue, 12 Mar 2013 18:19:12 +0000</resolved>
                                            <fixVersion>2.3.3</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="19837" author="beberlei" created="Tue, 12 Mar 2013 18:20:26 +0000"  >&lt;p&gt;A related Github Pull-Request &lt;span class=&quot;error&quot;&gt;&amp;#91;GH-606&amp;#93;&lt;/span&gt; was closed&lt;br/&gt;
&lt;a href=&quot;https://github.com/doctrine/doctrine2/pull/606&quot; class=&quot;external-link&quot;&gt;https://github.com/doctrine/doctrine2/pull/606&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
        </item>
</channel>
</rss>