8000 [Doctrine Bridge] Added parameter ignoreNull to accept a nullable value on field by Garfield-fr · Pull Request #5015 · symfony/symfony · GitHub
[go: up one dir, main page]

Skip to content

[Doctrine Bridge] Added parameter ignoreNull to accept a nullable value on field #5015

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 6, 2012
Merged

Conversation

Garfield-fr
Copy link
Contributor

In my last project, i use this syntax to test unicity on 2 fields, but it fail because the validator stop if value is null. I dropped the test on validator and my unicity work fine.

@UniqueEntity(fields={"username", "deletedAt"})

It's possible to add this PR on Bridge.

Thanks

Bertrand

@stof
Copy link
Member
stof commented Jul 23, 2012

This is wrong. RDBMS allow several null values in a unique column and this change will break it.

@henrikbjorn
Copy link
Contributor

@stof seems weird indeed it would return if any of the values are null. Makes sense to do a query where the field IS NULL or whatever the find method does.

@stof
Copy link
Member
stof commented Jul 23, 2012

@henrikbjorn if you do a query with IS NULL, the validator would force to have only 1 entity with a null field whereas it is not the behavior of the DB-level constraint.

@henrikbjorn
Copy link
Contributor

In this case i suspect that he wants to achieve a WHERE username = "henrikbjorn" AND deletedAt IS NULL which would be valid right? Currently it just returns if any of the fields are null and the validation is never done.

@webmozart
Copy link
Contributor

I suggest to make this configurable as the handling of NULL values in UNIQUE columns differs between SQL implementations.

@Garfield-fr
Copy link
Contributor Author

@stof What the correct solution to test my unicity with deletedAt == null ?

I use this definition: @Orm\Column(name="deleted_at", type="datetime", nullable=true)

@Garfield-fr
Copy link
Contributor Author

In my local repository, i added a new parameter "$authorizedNullField" on UniqueEntity.php and tested this on UniqueEntityValidator.php:

Code: https://gist.github.com/4122efbe569e3c2c95c0

What about that ?

Thanks for your help

@stof
Copy link
Member
stof commented Jul 23, 2012

yep, this would be good (except for the naming which seems weird)

@Garfield-fr
8000
Copy link
Contributor Author

No problem to change this. I don't find a good name for this ?

@stof
Copy link
Member
stof commented Jul 23, 2012

what about allowMultipleNull (defaulting to true for BC) ?

@Garfield-fr
Copy link
Contributor Author

Why multiple ? This option is for one or many. what about allowNullable ?

@stof
Copy link
Member
stof commented Jul 23, 2012

@Garfield-fr the current behavior allows having multiple null values without failing to the unique constraint

@Garfield-fr
Copy link
Contributor Author

ok. I make allowMultipleNull.

It's ok with that: https://gist.github.com/cae8d43780c45a5011ed

Thanks

@webmozart
Copy link
Contributor

What about uniqueNull (false by default)? ignoreNull (true by default)? I find allowMultipleNull a bit cumbersome.

@stof
Copy link
Member
stof commented Jul 23, 2012

no it is not. You have an issue in the validator. You have an extra negation.

Please update your PR

@Garfield-fr
Copy link
Contributor Author

@stof ignoreNull is ok for you ?

@stof
Copy link
Member
stof commented Jul 23, 2012

yes

@@ -75,7 +75,7 @@ public function validate($entity, Constraint $constraint)

$criteria[$fieldName] = $class->reflFields[$fieldName]->getValue($entity);

if (null === $criteria[$fieldName]) {
if ($ignoreNull && null === $criteria[$fieldName]) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This cannot work. You need to access $constraint->ignoreNull instead.

Please add a test that proves the implemented functionality.

@fabpot
Copy link
Member
fabpot commented Aug 5, 2012

Is it mergeable now? Is yes, @Garfield-fr Can you squash your commits?

@travisbot
Copy link

This pull request fails (merged 19ae3cf9 into c20c1d1).

@stof
Copy link
Member
stof commented Aug 5, 2012

@Garfield-fr when squashing the commits, you need to force the push as you are rewriting the history. You should not have merged with your remote branch

@Garfield-fr
Copy link
Contributor Author

What's the right solution for resolve this ?

@stof
Copy link
Member
stof commented Aug 5, 2012

@Garfield-fr reset your local branch to the squashed commit and force the push

@Garfield-fr
Copy link
Contributor Author

@stof Thanks for your help

@travisbot
Copy link

This pull request fails (merged f1c4b8b into 20d2e5a).

fabpot added a commit that referenced this pull request Aug 6, 2012
Commits
-------

f1c4b8b [Doctrine Bridge] Added a parameter ignoreNull on Unique entity to allow a nullable value on field. Added Test

Discussion
----------

[Doctrine Bridge] Added parameter ignoreNull to accept a nullable value on field

In my last project, i use this syntax to test unicity on 2 fields, but it fail because the validator stop if value is null. I dropped the test on validator and my unicity work fine.

```
@UniqueEntity(fields={"username", "deletedAt"})
```

It's possible to add this PR on Bridge.

Thanks

Bertrand

---------------------------------------------------------------------------

by stof at 2012-07-23T08:14:19Z

This is wrong. RDBMS allow several null values in a unique column and this change will break it.

---------------------------------------------------------------------------

by henrikbjorn at 2012-07-23T08:17:08Z

@stof seems weird indeed it would return if any of the values are null. Makes sense to do a query where the field `IS NULL` or whatever the find method does.

---------------------------------------------------------------------------

by stof at 2012-07-23T08:18:50Z

@henrikbjorn if you do a query with IS NULL, the validator would force to have only 1 entity with a null field whereas it is not the behavior of the DB-level constraint.

---------------------------------------------------------------------------

by henrikbjorn at 2012-07-23T08:20:41Z

In this case i suspect that he wants to achieve a `WHERE username = "henrikbjorn" AND deletedAt IS NULL` which would be valid right? Currently it just returns if any of the fields are null and the validation is never done.

---------------------------------------------------------------------------

by bschussek at 2012-07-23T08:27:24Z

I suggest to make this configurable as the handling of NULL values in UNIQUE columns [differs between SQL implementations](http://forums.mysql.com/read.php?22,53591,53591#msg-53591).

---------------------------------------------------------------------------

by Garfield-fr at 2012-07-23T08:52:53Z

@stof What the correct solution to test my unicity with deletedAt == null ?

I use this definition: @Orm\Column(name="deleted_at", type="datetime", nullable=true)

---------------------------------------------------------------------------

by Garfield-fr at 2012-07-23T20:28:44Z

In my local repository, i added a new parameter "$authorizedNullField" on UniqueEntity.php and tested this on UniqueEntityValidator.php:

Code: https://gist.github.com/4122efbe569e3c2c95c0

What about that ?

Thanks for your help

---------------------------------------------------------------------------

by stof at 2012-07-23T20:45:30Z

yep, this would be good (except for the naming which seems weird)

---------------------------------------------------------------------------

by Garfield-fr at 2012-07-23T20:46:44Z

No problem to change this. I don't find a good name for this ?

---------------------------------------------------------------------------

by stof at 2012-07-23T20:47:57Z

what about ``allowMultipleNull`` (defaulting to ``true`` for BC) ?

---------------------------------------------------------------------------

by Garfield-fr at 2012-07-23T20:51:30Z

Why multiple ? This option is for one or many. what about `allowNullable` ?

---------------------------------------------------------------------------

by stof at 2012-07-23T20:52:44Z

@Garfield-fr the current behavior allows having multiple null values without failing to the unique constraint

---------------------------------------------------------------------------

by Garfield-fr at 2012-07-23T20:56:07Z

ok. I make `allowMultipleNull`.

It's ok with that: https://gist.github.com/cae8d43780c45a5011ed

Thanks

---------------------------------------------------------------------------

by bschussek at 2012-07-23T20:58:12Z

What about `uniqueNull` (`false` by default)? `ignoreNull` (`true` by default)? I find `allowMultipleNull` a bit cumbersome.

---------------------------------------------------------------------------

by stof at 2012-07-23T20:58:26Z

no it is not. You have an issue in the validator. You have an extra negation.

Please update your PR

---------------------------------------------------------------------------

by Garfield-fr at 2012-07-23T21:01:59Z

@stof `ignoreNull` is ok for you ?

---------------------------------------------------------------------------

by stof at 2012-07-23T21:10:24Z

yes

---------------------------------------------------------------------------

by fabpot at 2012-08-05T07:48:03Z

Is it mergeable now? Is yes, @Garfield-fr Can you squash your commits?

---------------------------------------------------------------------------

by travisbot at 2012-08-05T08:43:23Z

This pull request [fails](http://travis-ci.org/symfony/symfony/builds/2039523) (merged 19ae3cf9 into c20c1d1).

---------------------------------------------------------------------------

by stof at 2012-08-05T12:09:02Z

@Garfield-fr when squashing the commits, you need to force the push as you are rewriting the history. You should not have merged with your remote branch

---------------------------------------------------------------------------

by Garfield-fr at 2012-08-05T12:10:15Z

What's the right solution for resolve this ?

---------------------------------------------------------------------------

by stof at 2012-08-05T12:11:09Z

@Garfield-fr reset your local branch to the squashed commit and force the push

---------------------------------------------------------------------------

by Garfield-fr at 2012-08-05T12:14:09Z

@stof Thanks for your help

---------------------------------------------------------------------------

by travisbot at 2012-08-05T12:19:06Z

This pull request [fails](http://travis-ci.org/symfony/symfony/builds/2040210) (merged f1c4b8b into 20d2e5a).
@fabpot fabpot merged commit f1c4b8b into symfony:master Aug 6, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants
0