333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../browser/src/driver/sqlite/SqliteDriver.ts"],"names":[],"mappings":"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","file":"SqliteDriver.js","sourcesContent":["import {DriverPackageNotInstalledError} from \"../../error/DriverPackageNotInstalledError\";\nimport {SqliteQueryRunner} from \"./SqliteQueryRunner\";\nimport {DriverOptionNotSetError} from \"../../error/DriverOptionNotSetError\";\nimport {PlatformTools} from \"../../platform/PlatformTools\";\nimport {Connection} from \"../../connection/Connection\";\nimport {SqliteConnectionOptions} from \"./SqliteConnectionOptions\";\nimport {ColumnType} from \"../types/ColumnTypes\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {AbstractSqliteDriver} from \"../sqlite-abstract/AbstractSqliteDriver\";\n\n/**\n * Organizes communication with sqlite DBMS.\n */\nexport class SqliteDriver extends AbstractSqliteDriver {\n\n    // -------------------------------------------------------------------------\n    // Public Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Connection options.\n     */\n    options: SqliteConnectionOptions;\n\n    /**\n     * SQLite underlying library.\n     */\n    sqlite: any;\n\n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n\n    constructor(connection: Connection) {\n        super(connection);\n\n        this.connection = connection;\n        this.options = connection.options as SqliteConnectionOptions;\n        this.database = this.options.database;\n\n        // validate options to make sure everything is set\n        if (!this.options.database)\n            throw new DriverOptionNotSetError(\"database\");\n\n        // load sqlite package\n        this.loadDependencies();\n    }\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Closes connection with database.\n     */\n    async disconnect(): Promise<void> {\n        return new Promise<void>((ok, fail) => {\n            this.queryRunner = undefined;\n            this.databaseConnection.close((err: any) => err ? fail(err) : ok());\n        });\n    }\n\n    /**\n     * Creates a query runner used to execute database queries.\n     */\n    createQueryRunner(mode: \"master\"|\"slave\" = \"master\"): QueryRunner {\n        if (!this.queryRunner)\n            this.queryRunner = new SqliteQueryRunner(this);\n\n        return this.queryRunner;\n    }\n\n    normalizeType(column: { type?: ColumnType, length?: number | string, precision?: number|null, scale?: number }): string {\n        if ((column.type as any) === Buffer) {\n            return \"blob\";\n        }\n\n        return super.normalizeType(column);\n    }\n\n    // -------------------------------------------------------------------------\n    // Protected Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Creates connection with the database.\n     */\n    protected createDatabaseConnection() {\n        return new Promise<void>(async (ok, fail) => {\n            await this.createDatabaseDirectory(this.options.database);\n            const databaseConnection = new this.sqlite.Database(this.options.database, (err: any) => {\n                if (err) return fail(err);\n\n                // we need to enable foreign keys in sqlite to make sure all foreign key related features\n                // working properly. this also makes onDelete to work with sqlite.\n                databaseConnection.run(`PRAGMA foreign_keys = ON;`, (err: any, result: any) => {\n                    if (err) return fail(err);\n                    ok(databaseConnection);\n                });\n\n                // in the options, if encryption key for for SQLCipher is setted.\n                if (this.options.key) {\n                  databaseConnection.run(`PRAGMA key = ${this.options.key};`, (err: any, result: any) => {\n                    if (err) return fail(err);\n                    ok(databaseConnection);\n                  });\n                }\n            });\n        });\n    }\n\n    /**\n     * If driver dependency is not given explicitly, then try to load it via \"require\".\n     */\n    protected loadDependencies(): void {\n        try {\n            this.sqlite = PlatformTools.load(\"sqlite3\").verbose();\n\n        } catch (e) {\n            throw new DriverPackageNotInstalledError(\"SQLite\", \"sqlite3\");\n        }\n    }\n\n    /**\n     * Auto creates database directory if it does not exist.\n     */\n    protected createDatabaseDirectory(fullPath: string): Promise<void> {\n        return new Promise<void>((resolve, reject) => {\n            const mkdirp = PlatformTools.load(\"mkdirp\");\n            const path = PlatformTools.load(\"path\");\n            mkdirp(path.dirname(fullPath), (err: any) => err ? reject(err) : resolve());\n        });\n    }\n\n}"],"sourceRoot":"../.."}