Skip to content

Commit 517d00f

Browse files
committed
Fix truncation of 64-bit integers on 32-bit hosts.
Issue: PLDB-25 Submitted by: James Low
1 parent 9c4558f commit 517d00f

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

Classes/PLSqliteResultSet.m

+1-1
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ - (id) objectForColumnIndex: (int) columnIndex {
290290
return [self stringForColumnIndex: columnIndex];
291291

292292
case SQLITE_INTEGER:
293-
return [NSNumber numberWithLong: [self bigIntForColumnIndex: columnIndex]];
293+
return [NSNumber numberWithLongLong: [self bigIntForColumnIndex: columnIndex]];
294294

295295
case SQLITE_FLOAT:
296296
return [NSNumber numberWithDouble: [self doubleForColumnIndex: columnIndex]];

Classes/PLSqliteResultSetTests.m

+9-3
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ - (void) testNullValueHandling {
307307
- (void) testObjectForColumn {
308308
id<PLResultSet> result;
309309
NSNumber *testInteger;
310+
NSNumber *testBigInteger;
310311
NSString *testString;
311312
NSNumber *testDouble;
312313
NSData *testBlob;
@@ -317,10 +318,11 @@ - (void) testObjectForColumn {
317318
testString = @"Test string";
318319
testDouble = [NSNumber numberWithDouble: 42.42];
319320
testBlob = [@"Test data" dataUsingEncoding: NSUTF8StringEncoding];
321+
testBigInteger = [NSNumber numberWithLongLong: LLONG_MAX];
320322

321-
STAssertTrue([_db executeUpdateAndReturnError: &error statement: @"CREATE TABLE test (a integer, b varchar(20), c double, d blob, e varchar(20))"], @"Create table failed: %@", error);
322-
STAssertTrue(([_db executeUpdate: @"INSERT INTO test (a, b, c, d, e) VALUES (?, ?, ?, ?, ?)",
323-
testInteger, testString, testDouble, testBlob, nil]), @"Could not insert row");
323+
STAssertTrue([_db executeUpdateAndReturnError: &error statement: @"CREATE TABLE test (a integer, b varchar(20), c double, d blob, e varchar(20), f integer)"], @"Create table failed: %@", error);
324+
STAssertTrue(([_db executeUpdate: @"INSERT INTO test (a, b, c, d, e, f) VALUES (?, ?, ?, ?, ?, ?)",
325+
testInteger, testString, testDouble, testBlob, nil, testBigInteger]), @"Could not insert row");
324326

325327
/* Query the data */
326328
result = [_db executeQuery: @"SELECT * FROM test"];
@@ -345,6 +347,10 @@ - (void) testObjectForColumn {
345347
STAssertTrue(nil == [result objectForColumn: @"e"], @"Did not return correct NSNull value");
346348
STAssertTrue(nil == result[@"e"], @"Did not return correct nil value");
347349
STAssertTrue(nil == result[4], @"Did not return correct nil value");
350+
351+
STAssertTrue([testBigInteger isEqual: [result objectForColumn: @"f"]], @"Did not return correct integer value");
352+
STAssertTrue([testBigInteger isEqual: result[@"f"]], @"Did not return correct integer value");
353+
STAssertTrue([testBigInteger isEqual: result[5]], @"Did not return correct integer value");
348354

349355
[result close];
350356
}

0 commit comments

Comments
 (0)