Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 18 additions & 11 deletions example/tests/db.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,20 +55,27 @@ const LARGE_DB_NAME = 'large'
// Taken from "op-sqlite" example project.
// Used to demonstrate the performance of NitroSQLite.
const ROWS = 300000
const LARGE_DB_SCHEMA: BatchQueryCommand[] = [
{ query: 'DROP TABLE IF EXISTS Test;' },
{
query:
'CREATE TABLE Test ( id INT PRIMARY KEY, v1 TEXT, v2 TEXT, v3 TEXT, v4 TEXT, v5 TEXT, v6 INT, v7 INT, v8 INT, v9 INT, v10 INT, v11 REAL, v12 REAL, v13 REAL, v14 REAL) STRICT;',
},
]

export function resetLargeDbSchema(db: NitroSQLiteConnection) {
db.executeBatch(LARGE_DB_SCHEMA)
}

export let largeDb: NitroSQLiteConnection | undefined
export function resetLargeDb() {
try {
if (largeDb != null) {
largeDb.close()
largeDb.delete()
}
largeDb = open({
name: LARGE_DB_NAME,
})
largeDb ??= open({ name: LARGE_DB_NAME })

largeDb.execute(
'CREATE TABLE Test ( id INT PRIMARY KEY, v1 TEXT, v2 TEXT, v3 TEXT, v4 TEXT, v5 TEXT, v6 INT, v7 INT, v8 INT, v9 INT, v10 INT, v11 REAL, v12 REAL, v13 REAL, v14 REAL) STRICT;',
)
// The database file survives app restarts, while this module state does
// not. Rebuild the benchmark schema every time instead of assuming an
// absent connection means an absent table.
resetLargeDbSchema(largeDb)

largeDb.execute('PRAGMA mmap_size=268435456')

Expand Down Expand Up @@ -99,6 +106,6 @@ export function resetLargeDb() {

largeDb.executeBatch(insertions)
} catch (e) {
console.warn('Error resetting user database', e)
console.warn('Error resetting large database', e)
}
}
2 changes: 2 additions & 0 deletions example/tests/unit/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import registerExecuteBatchUnitTests from './specs/operations/executeBatch.spec'
import registerTypeORMUnitTestsSpecs from './specs/typeorm.spec'
import registerDatabaseQueueUnitTests from './specs/DatabaseQueue.spec'
import registerSqliteVecUnitTestsSpecs from './specs/sqlite-vec.spec'
import registerBenchmarkDatabaseUnitTests from './specs/benchmarkDatabase.spec'

export function registerUnitTests() {
beforeEach(setupTestDb)
Expand All @@ -14,6 +15,7 @@ export function registerUnitTests() {
registerExecuteUnitTests()
registerTransactionUnitTests()
registerExecuteBatchUnitTests()
registerBenchmarkDatabaseUnitTests()
})

registerDatabaseQueueUnitTests()
Expand Down
43 changes: 43 additions & 0 deletions example/tests/unit/specs/benchmarkDatabase.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { describe, it } from '@tests/TestApi'
import { expect } from '@tests/unit/common'
import { resetLargeDbSchema } from '@tests/db'
import { open } from 'react-native-nitro-sqlite'

const DB_NAME = 'benchmark_schema_reset'

export default function registerBenchmarkDatabaseUnitTests() {
describe('benchmark database', () => {
it('rebuilds an existing benchmark table', () => {
const db = open({ name: DB_NAME })

try {
db.execute('DROP TABLE IF EXISTS Test;')
db.execute('CREATE TABLE Test (legacy TEXT);')

resetLargeDbSchema(db)

const columns = db.execute('PRAGMA table_info(Test);')
expect(columns.rows?._array.map((column) => column.name)).toEqual([
'id',
'v1',
'v2',
'v3',
'v4',
'v5',
'v6',
'v7',
'v8',
'v9',
'v10',
'v11',
'v12',
'v13',
'v14',
])
} finally {
db.close()
db.delete()
}
})
})
}
Loading