aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-21 16:46:45 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-21 16:46:45 -0800
commitce6fc8609b26a7538dca840b2de5427a146445d4 (patch)
treee2f75c9894d0d6d38c9308f82346e011e787e1d6
parenta251669fa1ef9dc148d3477d6f5721db01dd5f60 (diff)
downloadbun-ce6fc8609b26a7538dca840b2de5427a146445d4.tar.gz
bun-ce6fc8609b26a7538dca840b2de5427a146445d4.tar.zst
bun-ce6fc8609b26a7538dca840b2de5427a146445d4.zip
[bun:sqlite] fix truncating to int32 in results (now truncates to int52)
TODO: bigint
-rw-r--r--src/bun.js/bindings/sqlite/JSSQLStatement.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/bun.js/bindings/sqlite/JSSQLStatement.cpp b/src/bun.js/bindings/sqlite/JSSQLStatement.cpp
index 8fc6ac77a..524c131af 100644
--- a/src/bun.js/bindings/sqlite/JSSQLStatement.cpp
+++ b/src/bun.js/bindings/sqlite/JSSQLStatement.cpp
@@ -992,14 +992,19 @@ static inline JSC::JSValue constructResultObject(JSC::JSGlobalObject* lexicalGlo
switch (sqlite3_column_type(stmt, i)) {
case SQLITE_INTEGER: {
- result->putDirect(vm, name, jsNumber(sqlite3_column_int(stmt, i)), 0);
+ // https://github.com/oven-sh/bun/issues/1536
+ result->putDirect(vm, name, jsNumber(sqlite3_column_int64(stmt, i)), 0);
break;
}
case SQLITE_FLOAT: {
result->putDirect(vm, name, jsNumber(sqlite3_column_double(stmt, i)), 0);
break;
}
- case SQLITE_TEXT: {
+ // > Note that the SQLITE_TEXT constant was also used in SQLite version
+ // > 2 for a completely different meaning. Software that links against
+ // > both SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT,
+ // > not SQLITE_TEXT.
+ case SQLITE3_TEXT: {
size_t len = sqlite3_column_bytes(stmt, i);
const unsigned char* text = len > 0 ? sqlite3_column_text(stmt, i) : nullptr;
@@ -1042,13 +1047,18 @@ static inline JSC::JSArray* constructResultRow(JSC::JSGlobalObject* lexicalGloba
switch (sqlite3_column_type(stmt, i)) {
case SQLITE_INTEGER: {
- result->initializeIndex(scope, i, jsNumber(sqlite3_column_int(stmt, i)));
+ // https://github.com/oven-sh/bun/issues/1536
+ result->initializeIndex(scope, i, jsNumber(sqlite3_column_int64(stmt, i)));
break;
}
case SQLITE_FLOAT: {
result->initializeIndex(scope, i, jsNumber(sqlite3_column_double(stmt, i)));
break;
}
+ // > Note that the SQLITE_TEXT constant was also used in SQLite version
+ // > 2 for a completely different meaning. Software that links against
+ // > both SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT,
+ // > not SQLITE_TEXT.
case SQLITE_TEXT: {
size_t len = sqlite3_column_bytes(stmt, i);
const unsigned char* text = len > 0 ? sqlite3_column_text(stmt, i) : nullptr;