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.

Reply via email to