From d5bf57063f055314ea71945034dbe4987f4b926b Mon Sep 17 00:00:00 2001 From: Evan Hahn Date: Thu, 28 Mar 2024 16:14:25 -0500 Subject: [PATCH] chore: save schema integers in INTEGER SQLite columns (#531) If we use the ["integer" JSON Schema type][0], we should save that as an INTEGER column, not a REAL column. Both will work for many numbers, but larger integers (like `2**63`) can only be safely stored in INTEGERs. This should be a bit more reliable. As of this patch, we don't have any integer types in our schemas, so this has no effect. However, that may change as we address [upcoming issues][1]. [0]: https://json-schema.org/understanding-json-schema/reference/numeric#integer [1]: https://github.com/digidem/mapeo-core-next/issues/150 --- src/schema/schema-to-drizzle.js | 4 +++- tests/schema/schema-to-drizzle.js | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/schema/schema-to-drizzle.js b/src/schema/schema-to-drizzle.js index 21081c7d9..5a9a37d3e 100644 --- a/src/schema/schema-to-drizzle.js +++ b/src/schema/schema-to-drizzle.js @@ -39,9 +39,11 @@ export function jsonSchemaToDrizzleColumns(schema) { columns[key] = integer(key, { mode: 'boolean' }) break case 'number': - case 'integer': columns[key] = real(key) break + case 'integer': + columns[key] = integer(key) + break case 'string': { const enumValue = isStringArray(value.enum) ? value.enum diff --git a/tests/schema/schema-to-drizzle.js b/tests/schema/schema-to-drizzle.js index 03e68edc5..6f9900956 100644 --- a/tests/schema/schema-to-drizzle.js +++ b/tests/schema/schema-to-drizzle.js @@ -38,7 +38,7 @@ test('number', (t) => { test('integer', (t) => { const col = getColumn({ type: 'integer' }) - t.is(col.getSQLType(), 'real', 'integers are stored in REAL columns') + t.is(col.getSQLType(), 'integer', 'integers are stored in INTEGER columns') }) test('string', (t) => {