dresende / node-orm2

Object Relational Mapping
http://github.com/dresende/node-orm2
MIT License
3.07k stars 379 forks source link

Do not output properties when they are undefined because they have been omitted from query #588

Open kapouer opened 9 years ago

kapouer commented 9 years ago

Basically this let us have for the same price JSON.stringify(john) : {"height": 4} instead of {"height": 4, "name": null}

Weirdly it wasn't easy to achieve. This requires https://github.com/dresende/node-sql-query/pull/37 for it to pass tests.

Mind that i tested only postgres (and sqlite ? i don't know) but kept in mind it should work everywhere.

dxg commented 9 years ago

I'm not sure of the rational behind this change. null !== undefined. Since null is a type in databases, and undefined isn't, I'm not sure what the ramifications of this are or what may break unexpectedly. If a property is null in the DB, I would like to know that it is. If it is missing from the object entirely this means a different thing all together.

This has come up before. See here as well as a couple other pull requests.

kapouer commented 9 years ago

I wanted to have only/omit query results be serialized without seeing all the columns i've omitted outputed with "null" value. That's the main reason, but as you already know, it could have side effects.

If you check the changes i had to make to the test suite, side effects are not that bad ! If a property is null in the db, and the property is queried, the ouput will be {'thatprop': null} as one expects, of course. The only thing that could go wrong is .find().only().each().save() I suppose validation is going to kick out, when applicable. But hey, if you do that, you get what you asked for.

kapouer commented 9 years ago

Changed the title to better reflect the rationale.

dxg commented 9 years ago

That title is a lot better and I get what you're after now.