But isn't the LOB data fetched in a separate call? debugsql output for a simple CLOB-column query shows the query, a describe, LOB.Length(), then LOB.Read(). Could the LOB.Read be done later when the user presses "..."?
Also (and sorry, I'm snooping into your code a bit -- I just want this to work as well as possible because it impacts me), comparing debugsql output with a WireShark packet dump I noticed something odd:
debugsql:
TOracleQuery Query Start Query.Execute
SQL = begin :id := sys.dbms_transaction.local_transaction_id; end;
WireShark:
Looks right. I see the query go out and a response come back.
debugsql:
TOracleQuery $033CFD00 Start Query.Execute
SQL = select user_id,notes from app_user where user_id=1000023
WireShark:
Looks right. I see the query go out and a response come back. However, the response appears to include the contents of the CLOB column ("notes") which I didn't expect.
debugsql:
TOracleQuery SQLForm.TestQuery Start Query.Describe
SQL = SELECT * FROM app_user
WireShark:
Looks right. I see the query go out and a response come back with column names.
debugsql:
TLOBLocator Start LOB.Length
WireShark:
This looks odd. What goes out appears to include the contents of the CLOB, as apparently received above. Then the response also contains that content again, which is unexpected for a "length" call.
debugsql:
TLOBLocator Start LOB.Read(546)
WireShark:
This looks odd too. What goes out
again includes the contents of the CLOB. The response now contains that same content
twice.
debugsql:
TOracleQuery Query Start Query.Execute
SQL = begin :id := sys.dbms_transaction.local_transaction_id; end;
WireShark:
This looks right again.
Is there a good reason why the CLOB content appears to be sent back and forth multiple times, or is this a bug? Because if it's a bug, it would explain a lot of the slowness and fixing it might make me happy
