UNPKG

expo-sqlite

Version:

Provides access to a database using SQLite (https://www.sqlite.org/). The database is persisted across restarts of your app.

313 lines (271 loc) 6.78 kB
// Copyright 2015-present 650 Industries. All rights reserved. import { type SQLAction } from './SQLAction'; import { type SQLiteOpenOptions } from '../src/NativeDatabase'; import { type Changeset } from '../src/NativeSession'; import { type SQLiteBindBlobParams, type SQLiteBindPrimitiveParams, type SQLiteColumnNames, type SQLiteColumnValues, } from '../src/NativeStatement'; export interface SyncWorkerMessage { id: number; isSync: true; lockBuffer: SharedArrayBuffer; resultBuffer: SharedArrayBuffer; } export interface AsyncWorkerMessage { id: number; isSync: false; } export type BaseWorkerMessage = SyncWorkerMessage | AsyncWorkerMessage; //#region Request messages export interface MessageTypeMap { backupDatabase: BackupDatabaseMessage; close: CloseMessage; deleteDatabase: DeleteDatabaseMessage; exec: ExecMessage; finalize: FinalizeMessage; getAll: GetAllMessage; getColumnNames: GetColumnNamesMessage; importAssetDatabase: ImportAssetDatabaseMessage; isInTransaction: IsInTransactionMessage; open: OpenMessage; prepare: PrepareMessage; reset: ResetMessage; run: RunMessage; serialize: SerializeMessage; step: StepMessage; sessionCreate: SessionCreateMessage; sessionAttach: SessionAttachMessage; sessionEnable: SessionEnableMessage; sessionClose: SessionCloseMessage; sessionCreateChangeset: SessionCreateChangesetMessage; sessionCreateInvertedChangeset: SessionCreateInvertedChangesetMessage; sessionApplyChangeset: SessionApplyChangesetMessage; sessionInvertChangeset: SessionInvertChangesetMessage; } export type SQLiteWorkerMessageType = keyof MessageTypeMap; export type SQLiteWorkerMessage = MessageTypeMap[SQLiteWorkerMessageType]; type BackupDatabaseMessage = BaseWorkerMessage & { type: 'backupDatabase'; data: { destNativeDatabaseId: number; destDatabaseName: string; sourceNativeDatabaseId: number; sourceDatabaseName: string; }; }; type CloseMessage = BaseWorkerMessage & { type: 'close'; data: { nativeDatabaseId: number; }; }; type DeleteDatabaseMessage = BaseWorkerMessage & { type: 'deleteDatabase'; data: { databasePath: string; }; }; type ExecMessage = BaseWorkerMessage & { type: 'exec'; data: { nativeDatabaseId: number; source: string; }; }; type FinalizeMessage = BaseWorkerMessage & { type: 'finalize'; data: { nativeDatabaseId: number; nativeStatementId: number; }; }; type GetAllMessage = BaseWorkerMessage & { type: 'getAll'; data: { nativeDatabaseId: number; nativeStatementId: number; }; }; type GetColumnNamesMessage = BaseWorkerMessage & { type: 'getColumnNames'; data: { nativeStatementId: number; }; }; type ImportAssetDatabaseMessage = BaseWorkerMessage & { type: 'importAssetDatabase'; data: { databasePath: string; assetDatabasePath: string; forceOverwrite: boolean; }; }; type IsInTransactionMessage = BaseWorkerMessage & { type: 'isInTransaction'; data: { nativeDatabaseId: number; }; }; type OpenMessage = BaseWorkerMessage & { type: 'open'; data: { nativeDatabaseId: number; databasePath: string; options: SQLiteOpenOptions; serializedData?: Uint8Array; }; }; type PrepareMessage = BaseWorkerMessage & { type: 'prepare'; data: { nativeDatabaseId: number; nativeStatementId: number; source: string; }; }; type ResetMessage = BaseWorkerMessage & { type: 'reset'; data: { nativeDatabaseId: number; nativeStatementId: number; }; }; type RunMessage = BaseWorkerMessage & { type: 'run'; data: { nativeDatabaseId: number; nativeStatementId: number; bindParams: SQLiteBindPrimitiveParams; bindBlobParams: SQLiteBindBlobParams; shouldPassAsArray: boolean; }; }; type SerializeMessage = BaseWorkerMessage & { type: 'serialize'; data: { nativeDatabaseId: number; schemaName: string; }; }; type StepMessage = BaseWorkerMessage & { type: 'step'; data: { nativeDatabaseId: number; nativeStatementId: number; }; }; type SessionCreateMessage = BaseWorkerMessage & { type: 'sessionCreate'; data: { nativeDatabaseId: number; nativeSessionId: number; dbName: string; }; }; type SessionAttachMessage = BaseWorkerMessage & { type: 'sessionAttach'; data: { nativeDatabaseId: number; nativeSessionId: number; table: string | null; }; }; type SessionEnableMessage = BaseWorkerMessage & { type: 'sessionEnable'; data: { nativeDatabaseId: number; nativeSessionId: number; enabled: boolean; }; }; type SessionCloseMessage = BaseWorkerMessage & { type: 'sessionClose'; data: { nativeDatabaseId: number; nativeSessionId: number; }; }; type SessionCreateChangesetMessage = BaseWorkerMessage & { type: 'sessionCreateChangeset'; data: { nativeDatabaseId: number; nativeSessionId: number; }; }; type SessionCreateInvertedChangesetMessage = BaseWorkerMessage & { type: 'sessionCreateInvertedChangeset'; data: { nativeDatabaseId: number; nativeSessionId: number; }; }; type SessionApplyChangesetMessage = BaseWorkerMessage & { type: 'sessionApplyChangeset'; data: { nativeDatabaseId: number; nativeSessionId: number; changeset: Changeset; }; }; type SessionInvertChangesetMessage = BaseWorkerMessage & { type: 'sessionInvertChangeset'; data: { nativeDatabaseId: number; nativeSessionId: number; changeset: Changeset; }; }; //#endregion Request messages //#region Response messages interface RunResult { lastInsertRowId: number; changes: number; firstRowValues: SQLiteColumnValues; } export interface ResultTypeMap { open: void; isInTransaction: boolean; close: void; exec: void; importAssetDatabase: void; prepare: void; run: RunResult; step: SQLiteColumnValues | null; getAll: SQLiteColumnValues[]; reset: void; getColumnNames: SQLiteColumnNames; finalize: void; deleteDatabase: void; backupDatabase: void; serialize: Uint8Array; sessionCreate: void; sessionAttach: void; sessionEnable: void; sessionClose: void; sessionCreateChangeset: Changeset; sessionCreateInvertedChangeset: Changeset; sessionApplyChangeset: void; sessionInvertChangeset: Changeset; } export type ResultType = ResultTypeMap[keyof ResultTypeMap]; export type SQLiteWorkerResponse = { id: number; result?: ResultType; error?: Error; }; //#endregion Response messages //#region Continuous events export interface OnDatabaseChangeMessage { type: 'onDatabaseChange'; data: { databaseName: string | null; databaseFilePath: string | null; tableName: string | null; rowId: number | bigint; typeId: SQLAction; }; } //#endregion Continuous events