Thank you for your post Jakob.  It sounds like a bit of an effort.  I was 
thinking based on other code perviously posted on the board to get around the 
problem that it might be a bit easier.   I was about to test code people placed 
on the board previously to get around the problem.  I am not sure based on your 
words if it should work?   I will try testing it tonight, but I am a bit 
nervous it might run me into problems in the future now.   Here is the database 
specific code:


import org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl;
import org.apache.ojb.broker.metadata.ClassDescriptor;
import org.apache.ojb.broker.platforms.Platform;
import org.apache.ojb.broker.query.Query;

public class MySqlStatementGenerator extends SqlGeneratorDefaultImpl
{

    public MySqlStatementGenerator(Platform pf)
    {
        super(pf);
    }

    public String getPreparedSelectStatement(Query query, ClassDescriptor cld)
    {
        String result = super.getPreparedSelectStatement(query, cld);
        return addOffsetLimit(query, result);
    }

    public String getSelectStatementDep(Query query, ClassDescriptor cld)
    {
        String result = super.getSelectStatementDep(query, cld);
        return addOffsetLimit(query, result);
    }

    private String addOffsetLimit(Query q, String stmt)
    {
        int startIndex = q.getStartAtIndex();
        int endIndex = q.getEndAtIndex();

        if (endIndex > 0)
        {
            if (startIndex < 0 || startIndex >= endIndex)
            {
                startIndex = 0;
            }

            stmt += " LIMIT " + (endIndex - startIndex);
        }

        if (startIndex > 0)
        {
            stmt += " OFFSET " + startIndex;
        }
        return stmt;
    }

}



Thank you for your ideas.

JohnE





> hi john,
> 
> to be hones, my version of the sql-limit stuff was rather basic 
> and didn't work 
> correctly for extents.
> before we can really use the sql-LIMIT we'll have to change ojb to 
> use a 
> _single_ query for all extents (using the UNION clause). with the 
> current 
> solution using one select for each extent the LIMIT-clause is not 
> useful.
> example:
> 
> -ojb current version:
> select * from person where ... limit ...
> select * from musicians where ... limit ...
> 
> -future version:
> select * from person where ...
> union
> select * from musicians where ...
> limit ...
> 
> jakob
> 
> [EMAIL PROTECTED] schrieb:
> > Hey all.  Thank you for great project.
> > 
> > I am very excited about my site having gone live with OJB, but 
> there is one aspect of OJB I am really not liking to have to do 
> right now -- make it database specific.  It was part of my 
> marketing to have the platform I created be non-database specific, 
> but that can't be for one reason.
> > 
> > I am looking at all the posts on the board about not having 
> LIMIT supported.   I need to do very large table queries but I 
> have to add LIMITs specific to MySQL on the query or there would 
> be a drastically bad performance issue.
> > 
> > Jakob is your LIMIT code you had working working and do you 
> think it might get into 1.0.2 or 1.1?  I know you have bigger fish 
> to fry.
> > 
> > I don't know OJB internals well but I am trying to learn so I 
> can help in the future. 
> > 
> > JohnE
> > 
> > 
> > 
> > 
> > 
> > -----------------------------------------------------------------
> ----
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> > 
> 
> -------------------------------------------------------------------
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to