https://tickets.openmrs.org/browse/TRUNK-2680

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

> There is already AOP happening on every XyzService.saveXyz call. So we're
> actually already paying the significant overhead. I think that
> reflection+iterating over properties only on saveXyz methods is vanishingly
> small additional overhead to the fact that every service call is AOPd.
>
> -Darius
>
>
> On Thu, Sep 22, 2011 at 12:51 PM, Burke Mamlin <[email protected]>wrote:
>
>> On Thu, Sep 22, 2011 at 3: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?
>>
>>
>> Yes.  I love magic (I'm no muggle!)… as long as it's not going to add
>> several milliseconds or more to every API call.  If doing it automagically
>> involves AOP or some other hook that is going to add (or contribute to) a
>> measurable performance hit, I would rather find a way to manage it
>> explicitly (via hibernate configuration, a custom hibernate type, and/or
>> code reviews).
>>
>> -Burke
>>
>>
>>> -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
>>>
>>
>> ------------------------------
>> Click here to 
>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>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]

Reply via email to