Integer
ClassSQLite3 can store data in 64-bit signed integers, which are too big for JavaScript’s number format to fully represent. To support this data type, better-sqlite3
uses the immutable Integer
class. To view the complete Integer
documentation, click here.
var Integer = require('better-sqlite3').Integer;
var integer = Integer('95073701505997');
integer.toString(); // returns "95073701505997"
integer.toNumber(); // returns 95073701505997
var bigInteger = Integer('1152735103331642317');
bigInteger.toString(); // returns "1152735103331642317"
bigInteger.toNumber(); // throws a RangeError, cannot be represented in JavaScript
Integers
can bind to Statements
and Transactions
just like regular numbers. You can also return Integers
in registered functions.
db.prepare("SELECT * FROM users WHERE id=?").get(Integer('1152735103331642317'));
db.prepare("INSERT INTO big_numbers VALUES (?)").run(Integer('1152735103331642317'));
By default, integers returned from the database are normal JavaScript numbers (this includes the info.lastInsertROWID
property returned by the run()
methods). You can change this default as you please:
db.defaultSafeIntegers(); // Integers by default
db.defaultSafeIntegers(true); // Integers by default
db.defaultSafeIntegers(false); // JavaScript numbers by default
Additionally, you can override the default for individual statements
and transactions
like so:
var stmt = db.prepare(SQL);
stmt.safeIntegers(); // Safe integers ON
stmt.safeIntegers(true); // Safe integers ON
stmt.safeIntegers(false); // Safe integers OFF
// You can do the same thing with Transaction objects.
Registered functions can also receive Integers
as arguments. You can override the database’s default setting like so:
db.register({safeIntegers: true}, function isInt(value) {
return value instanceof Integer;
});
stmt.prepare('SELECT isInt(?)').get('foobar'); // => false
stmt.prepare('SELECT isInt(?)').get(Integer.MAX_VALUE); // => true
It’s worth noting that REAL (FLOAT) values returned from the database will always be represented as JavaScript numbers.