Added a section on the FAQ in the wiki about null / '' handling

https://cwiki.apache.org/confluence/display/empiredb/Frequently+asked+questions

On Tue, Aug 17, 2010 at 10:50 AM, Francis De Brabandere
<[email protected]> wrote:
> So the actual fix for exxos would be:
>
> DBCommand cmd = db.createCommand();
> cmd.set(db.tab.col.to(DBDatabase.EMPTY_STRING));
>
> Could we somehow make this '' -> null behavior optional, would that
> need a lot of refactoring? If a user wants empty strings he now needs
> to check all his values and replace them by DBDatabase.EMPTY_STRING
> where needed...
>
> Cheers,
> Francis
>
> On Tue, Aug 17, 2010 at 9:18 AM, Rainer Döbele <[email protected]> wrote:
>> Hi everyone,
>>
>>
>>
>> empire-db internally treats all empty strings as null and this behavior is
>> by design.
>>
>> Some databases accept empty strings as a valid value for a text column,
>> others don’t.
>>
>> However allowing empty strings is a major reason for many database problems
>> and changing the empire-db code here would have a major impact on existing
>> projects.
>>
>> We have thought about this a long time ago and we came to the conclusion
>> that empty strings are evil and should be avoided completely.
>>
>> In fact NULL has a logical meaning of a value not being supplied for a field
>> but what different logical meaning would an empty string have instead?
>>
>> Also declaring a column as “not null” would be useless since this rule could
>> easily be bypassed by an empty string, even though there is no real value
>> given for the field.
>>
>> (I guess we have had this discussion before a while ago and it keeps coming
>> up).
>>
>>
>>
>> So believe me that with avoiding empty strings altogether, your life will be
>> much easier and your code will be a lot less error prone.
>>
>> In some rare cases however you might need to explicitly use an empty string
>> rather than null.
>>
>> One of it is with existing databases when you want to search for field that
>> contain an empty string.
>>
>> In this case (and others) you must explicitly say that you want to use an
>> empty string.
>>
>> This is possible through the DBDatabase.EMPTY_STRING constant.
>>
>> The following example shows how to replace all empty strings of a column by
>> null:
>>
>>
>>
>> DBCommand cmd = db.createCommand();
>>
>> cmd.set  (db.EMPLOYEES.LASTNAME.to( null ));
>>
>> cmd.where(db.EMPLOYEES.LASTNAME.is( DBDatabase.EMPTY_STRING ));
>>
>> db.executeSQL(cmd.getUpdate(), conn);
>>
>>
>>
>> This will generate:
>>
>> UPDATE EMPLOYEES
>>
>> SET LASTNAME=null
>>
>> WHERE LASTNAME=''
>>
>>
>>
>> Regards,
>>
>> Rainer
>>
>>
>>
>>
>>
>> from: exxos [mailto:[email protected]]
>> to: [email protected]
>> re: Unconsistent SQL generation ?
>>
>>
>>
>> Hello,
>>
>> I noticed something probably not correct:
>>
>> When you execute the following:
>>
>> DBCommand cmd = db.createCommand();
>> cmd.set(db.tab.col.to(""));
>>
>> You get the SQL below
>>
>> INSERT INTO tab (col) VALUES (null);
>>
>> whereas it is expected
>>
>> INSERT INTO tab (col) VALUES ("");
>>
>> In the table defintion there is:
>> col = addColumn("col", DataType.TEXT, 80, true);
>>
>> Could you please advise why  you get "null" instead of empty "" ?
>>
>> Regards,
>> exxos.
>>
>>
>
>
>
> --
> http://www.somatik.be
> Microsoft gives you windows, Linux gives you the whole house.
>



-- 
http://www.somatik.be
Microsoft gives you windows, Linux gives you the whole house.

Reply via email to