Skip to content

Loading…

DDC-3065: Generated 'IN' clause doesn't handle 'null' values (needs to add 'IS NULL' check) #3837

Closed
doctrinebot opened this Issue · 5 comments

2 participants

@doctrinebot

Jira issue originally created by user samadams83:

BasicEntityPersister::getSelectSQL($criteria) first argument can take an array.
However, if that array contains an 'or' structure like so:

  'mycol'=>array(
    'couldbethis','orthis',null
  )
);```
it is converted into:
```mycol IN (?)```
With the final query looking like:
```WHERE mycol IN ('couldbethis','orthis',null)```
The problem is, mysql will never be able to match the null.

Possible change to `getSelectConditionStatementSQL` method:

    if (is_array($value)) {
        $in = sprintf('%s IN (%s)' , $condition, $placeholder);
        $nullKey = array_search(null, $value, true);

        if ($nullKey) {
            return sprintf('(%s OR %s IS NULL)' , $in, $condition);
        } else {
            return $in;
        }
    }```

resulting in a final query like:
WHERE (mycol IN ('couldbethis','orthis',null) OR mycol IS NULL)

@doctrinebot

Comment created by @ocramius:

Please see #998 - I applied your suggested fix and tested it carefully

@doctrinebot

Comment created by @doctrinebot:

A related Github Pull-Request [GH-998] was closed:
#998

@doctrinebot

Comment created by @guilhermeblanco:

As of 4185a9c this issue is fixed.

@doctrinebot

Issue was closed with resolution "Fixed"

@doctrinebot doctrinebot added this to the 2.5 milestone
@doctrinebot doctrinebot closed this
@doctrinebot doctrinebot added the Bug label
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.