Hi!

Torsten Curdt wrote:
Hi!

The SQLTransformer lacks an important feature that is present in
the ESQL logicsheet. ESQL allows limiting the number of rows
returned from a database using <esql:max-rows> and skips
some rows using the <esql:skip-rows> tag.

I have implemented something similar for the SQLTransformer. The
patch is very simple and I think doesn't break any of the current
funcionality.

The major feature of esql in this particular case is that it already limits the result set on the *database*! Your patch only skips the
> generation of SAX events. As a first steps this is nice but it is
> probably a magnitute slower.

ESQL still uses JDBC for accessing the database, just as SQLTransformer
does. I am not aware of the ability of limiting the results set
returned by JDBC apart from using apropriate SQL. And all databases
do not support limiting the number of rows returned by SQL SELECTs.
All major databases, such as MySql, Postgresql and Oracle do, but some
minor ones such as MS SQL Server do not. To my knowledge. JDBC fetches
statement.getFetchSize() rows from the database, and gets more when
needed, so I would't say I am _just_ limiting the generation of SAX
events. Most rows in large tables are never fetched. I can probably
use statement.setFetchSize(limit) to make it a little more efficient.
(Just tried this and it does make a difference.)

That said, I first had my problem implemented with ESQL, and did not
notice a big difference in performance after redoing it with
SQLTRansformer. The transformer is slower, of course, but the the time
dependence is the same O(N), where N is the numer of rows in the SQL
querry! Regardless of <esql:max-rows>! This maybe isn't the case on
most databses, but I cannot choose which one to use.

To share this feature with esql the SQLTransformer should better use
the esql helper classes.

There was a discussion to merge the codebase of esql and the
SQLTransformer into a new new sql logicsheet and a corresponding
sql transformer (see [1]). Same syntax, same feature set. Or at least
as close as possible.

Nice. But I need a solution soon.


That way we wouldn't have to maintain two tools for basically the
same thing.

[1] http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=102642026918555&w=2

I agree that having two tools is a waste, but ESQL cannot do everything. In particular, I wanted to write a logicsheet, that processes a <browseable-table> tag. The logicsheet template takes parameters, such as <offset>, <limit> and <query>. The values for these parameters come from the request or from the session. I was not able to pass these parameters to the logicsheet _and_ use them in ESQL at the same time, even though I spent days on the problem and asked for help on cocoon-users. So I decided to break up the problem into two steps. My XSP logicsheet produces input for the SQLTransformer and so on... But this is off-topic here.

Realizing that SQLTransformer is an evolutionary dead end, I guess I will
revisit my original problem. There go a few more days :-(

My first choice was ESQL. And I also noticed SQLTransformer is absent from
Cocoon 2.1.

:-((

feri.







Reply via email to