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 from OpenMRS Developers' mailing list
>
> _________________________________________
>
> 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]
>
> _________________________________________
>
> 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]
>

_________________________________________

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