incubator-empire-db-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From exxos <hat...@gmail.com>
Subject Re: UNION and the parentheses
Date Tue, 10 Aug 2010 21:33:32 GMT
Hi,

Here is a candidate fix:

  public boolean getSelect(StringBuilder buf)
   {

   StringBuilder leftBuffer = new StringBuilder();

      // the left part
      left.clearOrderBy();
      if (!left.getSelect(leftBuffer))
           return error(left);

   if(leftBuffer.indexOf(keyWord) == -1) {
    buf.append( "(" );
    buf.append(leftBuffer);
    buf.append( ")" );
   } else {
    buf.append(leftBuffer);
   }

[...]

I do not like the "indexOf(...)" because it is not really elegante, but this
has the advantage to work...

Regards,
exxos.


On Tue, Aug 10, 2010 at 10:53 PM, exxos <hatufr@gmail.com> wrote:

> Sorry, I confused between StringBuffer and StringBuilder...
> But the use case is still valid.
>
> Please accept my appologize.
> Regards,
> exxos.
>
>   On Tue, Aug 10, 2010 at 10:49 PM, exxos <hatufr@gmail.com> wrote:
>
>> 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 <doebele@esteam.de> 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:hatufr@gmail.com]
>>> *Gesendet:* Dienstag, 3. August 2010 15:18
>>> *An:* empire-db-user@incubator.apache.org
>>> *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.
>>>
>>>
>>
>

Mime
View raw message