db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kathey Marsden (JIRA)" <j...@apache.org>
Subject [jira] Updated: (DERBY-3310) ASSERT in MergeSort.checkColumnTypes() disallow legal type conversions
Date Fri, 22 Feb 2008 19:23:19 GMT

     [ https://issues.apache.org/jira/browse/DERBY-3310?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Kathey Marsden updated DERBY-3310:
----------------------------------

    Attachment: derby-3310_try1_diff.txt

Attached is my initial attempt at fixing this issue.  I am not quite sure this is the right
approach.  The fix removes the line call setType on the underlying expressions from  copyTypesAndLengthsToSource,
to avoid changing the type of the source column of VirtualColumnNodes.

I haven't been able to find any cases that this change affects adversely, but perhaps this
is not the right approach.  Maybe the problem is that genNormalizeResultSetNode puts the VirtualColumnNodes
in the normalized resultset in the first place.  Perhaps they should be CastNodes? 
Then perhaps copyTypesAndLengthsToSource wouldn't be necessary.
Anyway I would appreciate comments on the patch and possible alternatives.


Just for some historical background, I traced copyLengthsAndTypesToSource back to its origin.
It was put in to address a case that is no longer valid with Derby, but I'll put it here just
in case it helps:

-- the following gets an exception trying to convert '11.4' to 
an integer
create table trash(c1 real check(c1 > 2));
insert into trash values '11.4';


Thanks 

Kathey




> ASSERT in MergeSort.checkColumnTypes() disallow legal type conversions
> ----------------------------------------------------------------------
>
>                 Key: DERBY-3310
>                 URL: https://issues.apache.org/jira/browse/DERBY-3310
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.4.0.0
>            Reporter: Dyre Tjeldvoll
>            Priority: Minor
>         Attachments: cast-repro.sql, derby-3310_try1_diff.txt
>
>
> The following code 
> CREATE TABLE U (SNAME VARCHAR(32000), TNAME VARCHAR(32000), C1 BIGINT);
> -- This triggers an ASSERT (because 2 is INTEGER and not BIGINT)
> INSERT INTO U(SNAME, TNAME, C1) SELECT DISTINCT SCHEMANAME, TABLENAME, 2
>  FROM SYS.SYSTABLES T JOIN SYS.SYSSCHEMAS S ON T.SCHEMAID = S.SCHEMAID;
> gives
> ERROR XJ001: Java exception: 'ASSERT FAILED col1.getClass() (class org.apache.derby.iapi.types.SQLInteger)
expected to be the same as col2.getClass() (class org.apache.derby.iapi.types.SQLLongint):
org.apache.derby.shared.common.sanity.AssertFailure'.

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


Mime
View raw message