Hi,

Thank you for your advise.

The issue is considering multiple UNION.

[sta1] UNON [sta2] UNION [sta3] UNION etc...

 DBCommandExpr cmd = cmd1.union(cmd2);
cmd = cmd.union(cmd3);

When is invoked the method "getSelect()", the StringBuffer given in
parametre is used in cascading. The StringBuffer is shared by all sub
getSelect() of the commands. This makes the solution a little bit hard to
elaborate. I'm thinking about to stop to share the same StringBuffer. This
is because I base my logic on the length of the StringBuffer:

getSelect(...) {
   boolean isFirst = buf.length() < 1;
   if(isFirst) {
     buf.append( "(" );
   }

This comment is only to share my experience on that.

Regards,
exxos.







On Wed, Aug 4, 2010 at 10:11 AM, Rainer Döbele <[email protected]> wrote:

>  Hi exxos,
>
>
>
> I need a bit more time to investigate this.
>
> In the meantime I suggest to derive a class from DBCombinedCmd and to
> override the getSelect(StringBuilder buf) method.
>
> Then copy the code from the base-class and add the parenthesis.
>
>
>
> Afterwards in your client-code you write:
>
> DBCommandExpr myExpr = new DBMyCombinedCmd(cmdLeft, “UNION”, cmdRight);
>
>
>
> Regards
>
> Rainer
>
>
>
> *Von:* exxos [mailto:[email protected]]
> *Gesendet:* Dienstag, 3. August 2010 15:18
> *An:* [email protected]
> *Betreff:* UNION and the parentheses
>
>
>
>
> Hello,
>
> According to the MySQL's documentation (5.0), if the ORDER BY or the LIMIT
> clause, are used with UNION, the "( )" have to be added to each SELECT
> statements.
>
> http://dev.mysql.com/doc/refman/5.0/en/union.html
> "To use an ORDER BY or LIMIT clause to sort or limit the entire UNION
> result, parenthesize the individual SELECT statements and place the ORDER BY
> or LIMIT after the last one."
>
> But empire-db version 2.0.6 produces "<DBCommand> UNION (<DBCommand>) ORDER
> BY <DBColumn>" and there is no "( )" to the first SELECT.
>
> But by chance it continues to work with the ORDER BY, but with the keyword
> LIMIT it stops!
>
> The class in charge to build the UNION command seems to be DBCombinedCmd
> (line 102 - public boolean getSelect(StringBuilder buf) )
>
> Could you please advise about a workarround?
>
> /Cheers.
>
>

Reply via email to