I have tried to scratch my head hard to think if a real use case where we
would want null and "" to be semantically different in a database column but
have so far failed to get one.

I would personally vote for setting empty strings to null if that simplifies
our lives compared with the other.


On Thu, Sep 22, 2011 at 10:03 PM, Darius Jazayeri
<[email protected]>wrote:

> So, does that mean you're fine with automagically changing empty String
> properties of OpenmrsObjects to null before saving to the database?
>
> -Darius
>
>
> On Thu, Sep 22, 2011 at 11:43 AM, Burke Mamlin <[email protected]>wrote:
>
>> On Thu, Sep 22, 2011 at 9:18 AM, Darius Jazayeri <[email protected]
>> > wrote:
>>
>>> I still think that we *should* be automagic.
>>>
>>> I cannot think of a single use case where you want "" and null to be
>>> distinguishable. And Ben, your worry that "I fear there might be places
>>> where a column is not nullable but the user doesn't want a value there"
>>> is exactly why I *don't* want to allow "". If the field is required, the
>>> whole point is that you are not supposed to be able to store an empty value.
>>>
>>> Burke, Roger, others, can anyone give me an example of a real use case in
>>> OpenMRS where we want null and "" to be semantically different in a database
>>> column?
>>>
>>
>> The only case of "" and null being semantically different would be cases
>> where an empty string is a valid response and distinguishing "answered with
>> blank" vs. not answered becomes important.  I can't think of a case where an
>> "empty" response would be important to capture.
>>
>> -Burke
>>
>>
>>>
>>> -Darius
>>>
>>> On Thu, Sep 22, 2011 at 5:50 AM, Friedman, Roger (CDC/CGH/DGHA) (CTR) <
>>> [email protected]> wrote:
>>>
>>>>  Yes I think this is true.****
>>>>
>>>> ** **
>>>>
>>>> However, I think I agree with Darius that in the context of attributes,
>>>> attempting to create a string-valued property with a null value should
>>>> result in no new property being created.  This could/should be extended to
>>>> the empty string if the distinction between the two is difficult to 
>>>> maintain
>>>> when moving from the gui to the api.  This could also be extended to saying
>>>> that attempting to update a property value to null would be handled the 
>>>> same
>>>> as voiding the property.****
>>>>
>>>> ** **
>>>>
>>>> *From:* [email protected] [mailto:[email protected]] *On Behalf Of *Ben
>>>> Wolfe
>>>> *Sent:* Thursday, September 22, 2011 7:54 AM
>>>>
>>>> *To:* [email protected]
>>>> *Subject:* Re: [OPENMRS-DEV] Empty string fields vs null fields****
>>>>
>>>>  ** **
>>>>
>>>> So our take-away here is to not do automagic but instead tell api users
>>>> to put trimming/nulling into either their save methods or their setters?
>>>>
>>>> Ben****
>>>>
>>>> On Mon, Sep 12, 2011 at 5:24 PM, Darius Jazayeri <
>>>> [email protected]> wrote:****
>>>>
>>>> Actually we've been treating the fact that when you save a patient, you
>>>> get a bunch of person attributes with value=empty-string as a bug. (And 
>>>> it's
>>>> a bug that occurs precisely because of this null != empty string behavior.
>>>> I.e. >95% of the time the significance of that difference is that someone
>>>> forgets to treat a submitted empty string as null in a controller.)****
>>>>
>>>> ** **
>>>>
>>>> -Darius****
>>>>
>>>> ** **
>>>>
>>>> On Mon, Sep 12, 2011 at 5:56 AM, Friedman, Roger (CDC/CGH/DGHA) (CTR) <
>>>> [email protected]> wrote:****
>>>>
>>>> One reason to keep the empty string rather than null is collating order;
>>>> null typically appears last, empty string first.
>>>>
>>>> Re what Ben says about person_attribute, I believe it is conventional
>>>> throughout OpenMRS not to make a record to store a null value (attributes,
>>>> obs, IDs), so if some required data is missing from an otherwise complete
>>>> set of data elements (the patient forgot his national ID card, the vaccine
>>>> manufacturer is missing from the mass campaign report, the patient forgot
>>>> his ID card from another facility), the empty string is needed as a
>>>> placeholder until that information becomes available.
>>>>
>>>> All of which is to agree with Burke that there are sometimes semantic
>>>> reasons to distinguish empty string from null.
>>>>
>>>> I would put this in the API in the setters, along with trimming/padding.
>>>> ****
>>>>
>>>>
>>>> -----Original Message-----
>>>> From: [email protected] [mailto:[email protected]] On Behalf Of Ben Wolfe
>>>> Sent: Monday, September 12, 2011 3:19 AM
>>>> To: [email protected]
>>>> Subject: Re: [OPENMRS-DEV] Empty string fields vs null fields
>>>>
>>>> If it was a runtime property switch that means that users/admins are
>>>> the ones making the decision.  But it is not them but the developer
>>>> that should be deciding how to treat empty strings.
>>>>
>>>> I like the automatic solution, but I fear there might be places where
>>>> a column is not nullable but the user doesn't want a value there.
>>>> That would end up with us (or module developer) forcing a space into
>>>> the value to get around it, and that would definitely make things
>>>> worse.  (I think person_attribute.value is like that now)
>>>>
>>>> So my vote would be to make it automagic by default but with the
>>>> annotation to remove that magic.
>>>>
>>>> And -1000 for switching to Oracle.  Oh wait, Oracle already owns MySQL.
>>>> Crap.
>>>>
>>>> Ben
>>>>
>>>> On Sat, Sep 10, 2011 at 12:06 AM, Saptarshi Purkayastha
>>>> <[email protected]> wrote:
>>>> > +1 for it to be done through the API, without automagic, but probably
>>>> a
>>>> > runtime-property to allow selecting automatic "" or null conversion
>>>> > -0 for switching to Oracle
>>>> > -1 for the annotation in code
>>>> > ---
>>>> > Regards,
>>>> > Saptarshi PURKAYASTHA
>>>> >
>>>> > My Tech Blog:  http://sunnytalkstech.blogspot.com
>>>> > You Live by CHOICE, Not by CHANCE
>>>> >
>>>> >
>>>> > On 10 September 2011 02:00, Burke Mamlin <[email protected]>
>>>> wrote:
>>>> >>
>>>> >> I believe this should be done at the API level, in order to benefit
>>>> other
>>>> >> applications that use the API.  I don't think it should be done
>>>> >> automagically (e.g., with an OpenmrsObjectSaveHandler) for two
>>>> reasons: (1)
>>>> >> there may be cases were an empty string and null are semantically
>>>> different
>>>> >> and (2) aspect-oriented changes like this are not without a cost
>>>> (they can
>>>> >> add up to real performance hits).
>>>> >> How about an annotation on the property like
>>>> >> @BlankValue(persist=NULL|BLANK)? . or maybe we should just switch to
>>>> Oracle.
>>>> >> ;-)
>>>> >> -Burke
>>>> >> On Fri, Sep 9, 2011 at 3:52 PM, Darius Jazayeri <[email protected]
>>>> >
>>>> >> wrote:
>>>> >>>
>>>> >>> Hi All,
>>>> >>> The way that our webapp, our API, and the DB interact, we frequently
>>>> run
>>>> >>> into the case where we store empty strings in the database for
>>>> values, when
>>>> >>> they really should be null.
>>>> >>> For example if you save a Concept Source and leave the HL7 Code
>>>> field
>>>> >>> blank, you save a row with concept_source.hl7_code = '' rather than
>>>> null.
>>>> >>> (Because the webapp submits an empty input, and we use spring MVC to
>>>> bind
>>>> >>> that to a bean property.)
>>>> >>> Two tickets that I looked at today are related to this (and there
>>>> are
>>>> >>> certainly others):
>>>> >>> https://tickets.openmrs.org/browse/TRUNK-2516
>>>> >>> https://tickets.openmrs.org/browse/TRUNK-2004
>>>> >>> We should try to fix this problem in a general way. At first thought
>>>> I
>>>> >>> can't come up with a case where we really want to save the empty
>>>> string in a
>>>> >>> database field rather than null. So some possible solutions are:
>>>> >>>
>>>> >>> (at the web level) use a custom PropertyEditor for the String class
>>>> in
>>>> >>> all our Spring controllers, so that if you submit "" and bind that
>>>> to a
>>>> >>> String property, it sets it to null.
>>>> >>> (at the API level) in OpenmrsObjectSaveHandler iterate over all
>>>> String
>>>> >>> properties and if any of them are "" then set them to null.
>>>> >>>
>>>> >>> (The first would allow API consumers to explicitly set empty string
>>>> >>> properties on objects, while the second wouldn't.)
>>>> >>> Any thoughts on this?
>>>> >
>>>>
>>>>
>> ------------------------------
>> Click here to 
>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from 
>> OpenMRS Developers' mailing list
>>
>
> ------------------------------
> Click here to 
> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from 
> OpenMRS Developers' mailing list
>



-- 
If we keep uppermost in our minds the unkind and unjust acts of others, we
shall find it impossible to love them as Christ has loved us; but if our
thoughts dwell upon the wondrous love and pity of Christ for us, the same
spirit will flow out to others.

_________________________________________

To unsubscribe from OpenMRS Developers' mailing list, send an e-mail to 
[email protected] with "SIGNOFF openmrs-devel-l" in the  body (not 
the subject) of your e-mail.

[mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l]

Reply via email to