cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Utralite crashes using subquery with CASE

Former Member
5,183

I have a query that causes a crash in Ultralite, both in the iPad and Interactive SQL. The crash began to happen after I installed EBF 3798. Before that, the query was executed without error.

The original query is somewhat complex, but I succeeded in devising a simple query that causes the crash as well.

The query is:

select * from (
    select 
    A.id as i,
       case A.num 
            when 0 then 'a'
            when 1 then 'b'
            when 2 then 'c'
            else 'd'
       end as v,
       v + ' - ' + A.num as s
    from testTable A
) as X(i, v, s)
where i = 1

And the Ultralite database has only one table:

create table testTable
(
     id int primary key,
     num int,
     descr varchar(100)
)

The crash occurs when executing ULConnection's PrepareStatement method. And the table does not need to have any data in it.

If I remove the enclosing select, the problem does not happen again. Also, if remove either column v (the one that contains the case statement) or column s, that concatenates the preceding field with another field from the table, the problem does not occur any longer.

Those solutions are not acceptable, because the outer query is generated at runtime, in other to add extra filters to an existing query.

Accepted Solutions (1)

Accepted Solutions (1)

Hi Antonio,

Thank you for posting this concise repro. I confirm that the crash was fixed in 12.0.1.3803. There was a further bug that your query exposed, and that is now fixed with 12.0.1.3812. I have requested an EBF be released.

And thank you Breck for correcting the query. Indeed, UL does (now) report -157 (conversion error) for 'b -' -> numeric with the original query.

Former Member
0 Likes

Hi Tim,

Do you have any news about the EBF?

jeff_albion
Product and Topic Expert
Product and Topic Expert
0 Likes

Hello Antonio,

This issue has been reported and fixed underneath CR #723102. The Windows / Mac OS 12.0.1 EBFs have been requested for this issue and are currently being built and tested internally.

If you require an immediate update for when the EBF is released (or a "pre-release" copy for your own testing purposes), we invite you to open a technical support case so that we can discuss this with you directly and properly address your individual business needs.

This should be posted now (build 3819), and also includes proper iPhone 5/Xcode 4.5 support.

Answers (3)

Answers (3)

jeff_albion
Product and Topic Expert
Product and Topic Expert

I believe this is an instance of CR #717377 fixed in 12.0.1.3803.

Former Member

I haven't found this version in the EBF list. Is it available for download? If not, when will it be?

Thanks.

Former Member

I changed the query to use STRING instead of "+", but it still crashes on iPad and in InteractiveSQL for Mac OS.

Also, I changed the query to

select *
from (
select 
   A.id as i,
   (case A.num 
        when 0 then 'a'
        when 1 then 'b'
        when 2 then 'c'
        else 'd'
   end) as v,
   v + ' - ' + A.descr as s
from testTable A
) as X(i, v, s)

where i = 1

The crash always happens, and the first time when there was an ambiguity, Ultralite did not return any error. It simply crashes.

Former Member

I can confirm the crash also happens to me using the above query. I'm also using the 3798 EBF, as far as I know it is the latest Ultralite EBF for iOS, or there is any more recent?

Breck_Carter
Participant

That query shouldn't ever work because of the ambiguous use of the "+" operator (is it numeric addition? is it string concatenation?), and it does fail in in SQL Anywhere 12.0.1.3298 Classic (non-UltraLite) as follows:

create table testTable
(
     id int primary key,
     num int,
     descr varchar(100)
);
INSERT testTable VALUES ( 1, 1, 'x' );
COMMIT;
select * from (
    select 
    A.id as i,
       case A.num 
            when 0 then 'a'
            when 1 then 'b'
            when 2 then 'c'
            else 'd'
       end as v,
       v + ' - ' + A.num as s
    from testTable A
) as X(i, v, s)
where i = 1;

There was an error reading the results of the SQL statement.
The displayed results may be incorrect or incomplete.
Cannot convert 'b - ' to a numeric
SQLCODE=-157, ODBC 3 State="07006"

Try using STRING() instead of "+"; this query works:

select * from (
    select 
    A.id as i,
       case A.num 
            when 0 then 'a'
            when 1 then 'b'
            when 2 then 'c'
            else 'd'
       end as v,
       STRING ( v, ' - ', A.num ) as s
    from testTable A
) as X(i, v, s)
where i = 1;

i,v,s
1,'b','b - 1'
Ask a Question