[ 
https://issues.apache.org/jira/browse/DERBY-3230?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12557482#action_12557482
 ] 

Kathey Marsden commented on DERBY-3230:
---------------------------------------

Thanks Bryan for your comments on this issue so far.

I am taking a look at this issue and have a question about the position logic 
in the client. The failure occurs in this code because position_ = 
lastValidBytePosition_ in the following code in NetCursor.

  private int readFdocaOneByte() throws 
org.apache.derby.client.am.DisconnectException, SqlException {
        // For singleton select, the complete row always comes back, even if 
multiple query blocks are required,
        // so there is no need to drive a flowFetch (continue query) request 
for singleton select.
        if (position_ == lastValidBytePosition_) {
            // Check for ENDQRYRM, throw SqlException if already received one.
            checkAndThrowReceivedEndqryrm();
     .......

There is no javadoc for lastValidBytePosition, nor currentRowPosition and 
nextRowPosition which seem to be at play here as well. I haven't really been 
able to figure it all out from the code yet.

  I'd most appreciate an explanation of the interplay of the various positions 
if someone understands it, so I can understand why position == 
lastValidBytePosition and why that is a bad thing in this case.  I will add any 
explanation as comments to the code.


Kathey




> Selecting data from a Table raises Error XN008: Query processing has been 
> terminated due to an error on the server
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-3230
>                 URL: https://issues.apache.org/jira/browse/DERBY-3230
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Client, Network Server
>    Affects Versions: 10.3.1.4
>         Environment: Windows XP
>            Reporter: Stefan Huber
>            Priority: Critical
>         Attachments: test.rar
>
>
> I got a table (PCLASS) in my database where I cannot select the data via a 
> simple select statement:
> - If I execute 'select * from PCLASS': XN008: Query processing has been 
> terminated due to an error on the server
> - If I execute 'select * from PCLASS order by CLASSNAME': it works
> - If I add or remove only one row to/from the table: it works
> If I use the embedded driver everything works fine. But as soon as I use the 
> derby network client to access the database, this problem occurs.
> This is very odd. I spent a lot of time to do some research on this behavior 
> because I could not believe that the network client produces errors depending 
> on the data contained in a table. But after all it looks like I managed to 
> fill the table with an exact amount of data that causes this error to arise.
> To reproduce the problem download the attached file and follow these 
> instructions:
> * extract test.rar to $derby.system.home$
> * start derby network server
> * start ji utility and execute the following commands:
> ** connect to database test using client driver:
>       connect 'jdbc:derby://localhost/test;user=ZOL;password=zol';
> ** select content of table PCLASS
>       select * from PCLASS;
> --> Error XN008: Query processing has been terminated due to an error on the 
> server 
> ** disconnect from database
>       disconnect;
> ** shutdown database 'test'
>       connect 
> 'jdbc:derby://localhost/test;user=ZOL;password=zol;shutdown=true';
> ** connect to database 'test' using embedded driver: 
>       connect 'jdbc:derby:test;user=ZOL;password=zol';
> ** select content of table PCLASS
>       select * from PCLASS;
> --> everything o.k.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to