hi john,
to implement the LIMIT is not too complicated but to make it really work for extents is a bit harder.
imo you should use the platform for db-specific stuff.
jakob
[EMAIL PROTECTED] schrieb:
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]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
