I've taken a look at this now, and I believe this patch should fix your
problem. Please try it, and I'd like to ask Jürgen to merge it.
Regards,
Elias
Index: src/sql/SqliteResultValue.cc
===================================================================
--- src/sql/SqliteResultValue.cc (revision 885)
+++ src/sql/SqliteResultValue.cc (working copy)
@@ -60,7 +60,7 @@
int type = sqlite3_column_type( statement, i );
switch( type ) {
case SQLITE_INTEGER:
- value = new IntResultValue( sqlite3_column_int( statement, i )
);
+ value = new IntResultValue( sqlite3_column_int64( statement, i
) );
break;
case SQLITE_FLOAT:
value = new DoubleResultValue( sqlite3_column_double(
statement, i ) );
Index: src/sql/SqliteResultValue.hh
===================================================================
--- src/sql/SqliteResultValue.hh (revision 885)
+++ src/sql/SqliteResultValue.hh (working copy)
@@ -36,12 +36,12 @@
class IntResultValue : public ResultValue {
public:
- IntResultValue( int value_in ) : value( value_in ) {}
+ IntResultValue( APL_Integer value_in ) : value( value_in ) {}
virtual ~IntResultValue() {}
virtual void update( Cell *cell, Value & cell_owner ) const;
private:
- int value;
+ APL_Integer value;
};
class DoubleResultValue : public ResultValue {
On 12 February 2017 at 19:18, Elias Mårtenson <[email protected]> wrote:
> Thanks. I'll take a look at this today or tomorrow if no one else does it
> before me. Ma ☺️
>
> On 12 Feb 2017 7:13 PM, "Kacper Gutowski" <[email protected]> wrote:
>
>> The sqlite provider seems to silently truncate integer values in results:
>>
>> )COPY 5 SQL
>> DUMPED 2017-02-12 10:13:53 (GMT+1)
>> db←'sqlite' SQL∆Connect ':memory:'
>> 'create table a(b)' SQL∆Exec[db] ⍬
>>
>> 'insert into a values(?),(?)' SQL∆Exec[db] 2⋆31 32
>>
>> 'select b from a' SQL∆Select[db] ⍬
>> ¯2147483648
>> 0
>> 'select cast(b as real) from a' SQL∆Select[db] ⍬
>> 2147483648 <(214)%20748-3648>
>> 4294967296
>>
>>
>> -k
>>
>>