333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../../src/driver/sqljs/SqljsQueryRunner.ts"],"names":[],"mappings":";;;AAAA,+FAA4F;AAC5F,0FAAuF;AAEvF,4DAAyD;AACzD,iEAA8D;AAE9D;;GAEG;AACH;IAAsC,4CAAyB;IAO3D,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,0BAAY,MAAmB;QAA/B,YACI,iBAAO,SAIV;QAHG,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,KAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,KAAI,CAAC,CAAC;;IAC7C,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;;OAGG;IACG,4CAAiB,GAAvB;;;;4BACI,qBAAM,iBAAM,iBAAiB,WAAE,EAAA;;wBAA/B,SAA+B,CAAC;wBAChC,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAA;;wBAA5B,SAA4B,CAAC;;;;;KAChC;IAED;;OAEG;IACH,gCAAK,GAAL,UAAM,KAAa,EAAE,UAAkB;QAAvC,iBAsCC;QArCG,IAAI,IAAI,CAAC,UAAU;YACf,MAAM,IAAI,iEAA+B,EAAE,CAAC;QAEhD,OAAO,IAAI,OAAO,CAAQ,UAAO,EAAE,EAAE,IAAI;;;gBAC/B,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;gBAC1D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;gBAC1D,cAAc,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBAEnC,IAAI;oBACA,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC9C,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAGrB,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC;oBAC7E,YAAY,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;oBAC3B,kBAAkB,GAAG,YAAY,GAAG,cAAc,CAAC;oBACzD,IAAI,qBAAqB,IAAI,kBAAkB,GAAG,qBAAqB;wBACnE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;oBAEtF,MAAM,GAAU,EAAE,CAAC;oBAEzB,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE;wBACrB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;qBACxC;oBAED,SAAS,CAAC,IAAI,EAAE,CAAC;oBACjB,EAAE,CAAC,MAAM,CAAC,CAAC;iBACd;gBACD,OAAO,CAAC,EAAE;oBACN,IAAI,SAAS,EAAE;wBACX,SAAS,CAAC,IAAI,EAAE,CAAC;qBACpB;oBAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;oBACxE,IAAI,CAAC,IAAI,mCAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;iBACpD;;;aACJ,CAAC,CAAC;IACP,CAAC;IACL,uBAAC;AAAD,CAzEA,AAyEC,CAzEqC,qDAAyB,GAyE9D;AAzEY,4CAAgB","file":"SqljsQueryRunner.js","sourcesContent":["import {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {AbstractSqliteQueryRunner} from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport {SqljsDriver} from \"./SqljsDriver\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class SqljsQueryRunner extends AbstractSqliteQueryRunner {\n    \n    /**\n     * Database driver used by connection.\n     */\n    driver: SqljsDriver;\n    \n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n\n    constructor(driver: SqljsDriver) {\n        super();\n        this.driver = driver;\n        this.connection = driver.connection;\n        this.broadcaster = new Broadcaster(this);\n    }\n\n    // -------------------------------------------------------------------------\n    // Public methods\n    // -------------------------------------------------------------------------\n    \n    /**\n     * Commits transaction.\n     * Error will be thrown if transaction was not started.\n     */\n    async commitTransaction(): Promise<void> {\n        await super.commitTransaction();\n        await this.driver.autoSave();\n    }\n\n    /**\n     * Executes a given SQL query.\n     */\n    query(query: string, parameters?: any[]): Promise<any> {\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        return new Promise<any[]>(async (ok, fail) => {\n            const databaseConnection = this.driver.databaseConnection;\n            this.driver.connection.logger.logQuery(query, parameters, this);\n            const queryStartTime = +new Date();\n            let statement: any;\n            try {\n                statement = databaseConnection.prepare(query);\n                statement.bind(parameters);\n                \n                // log slow queries if maxQueryExecution time is set\n                const maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n                const queryEndTime = +new Date();\n                const queryExecutionTime = queryEndTime - queryStartTime;\n                if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n                    this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n\n                const result: any[] = [];\n\n                while (statement.step()) {\n                    result.push(statement.getAsObject());\n                }\n                \n                statement.free();\n                ok(result);\n            }\n            catch (e) {\n                if (statement) {\n                    statement.free();\n                }\n\n                this.driver.connection.logger.logQueryError(e, query, parameters, this);\n                fail(new QueryFailedError(query, parameters, e));\n            }\n        });\n    }\n}"],"sourceRoot":"../.."}