333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../../src/driver/DriverUtils.ts"],"names":[],"mappings":"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","file":"DriverUtils.js","sourcesContent":["import { Driver } from \"./Driver\";\nimport { shorten } from \"../util/StringUtils\";\n\n    /**\n * Common driver utility functions.\n */\nexport class DriverUtils {\n\n    // -------------------------------------------------------------------------\n    // Public Static Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Normalizes and builds a new driver options.\n     * Extracts settings from connection url and sets to a new options object.\n     */\n    static buildDriverOptions(options: any, buildOptions?: { useSid: boolean }): any {\n        if (options.url) {\n            const parsedUrl = this.parseConnectionUrl(options.url);\n            let urlDriverOptions: any = {\n                type: parsedUrl.type,\n                host: parsedUrl.host,\n                username: parsedUrl.username,\n                password: parsedUrl.password,\n                port: parsedUrl.port,\n                database: parsedUrl.database\n            };\n            if (buildOptions && buildOptions.useSid) {\n                urlDriverOptions.sid = parsedUrl.database;\n            }\n            return Object.assign({}, options, urlDriverOptions);\n        }\n        return Object.assign({}, options);\n    }\n\n    /**\n     * Builds column alias from given alias name and column name,\n     * If alias length is greater than the limit (if any) allowed by the current\n     * driver, abbreviates the longest part (alias or column name) in the resulting\n     * alias.\n     *\n     * @param driver Current `Driver`.\n     * @param alias Alias part.\n     * @param column Name of the column to be concatened to `alias`.\n     *\n     * @return An alias allowing to select/transform the target `column`.\n     */\n    static buildColumnAlias({ maxAliasLength }: Driver, alias: string, column: string): string {\n        const columnAliasName = alias + \"_\" + column;\n\n        if (maxAliasLength && maxAliasLength > 0 && columnAliasName.length > maxAliasLength)\n            return alias.length > column.length\n                ? `${shorten(alias)}_${column}`\n                : `${alias}_${shorten(column)}`;\n\n        return columnAliasName;\n    }\n\n    // -------------------------------------------------------------------------\n    // Private Static Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Extracts connection data from the connection url.\n     */\n    private static parseConnectionUrl(url: string) {\n        const type = url.split(\":\")[0];\n        const firstSlashes = url.indexOf(\"//\");\n        const preBase = url.substr(firstSlashes + 2);\n        const secondSlash = preBase.indexOf(\"/\");\n        const base = (secondSlash !== -1) ? preBase.substr(0, secondSlash) : preBase;\n        const afterBase = (secondSlash !== -1) ? preBase.substr(secondSlash + 1) : undefined;\n\n        const lastAtSign = base.lastIndexOf(\"@\");\n        const usernameAndPassword = base.substr(0, lastAtSign);\n        const hostAndPort = base.substr(lastAtSign + 1);\n\n        let username = usernameAndPassword;\n        let password = \"\";\n        const firstColon = usernameAndPassword.indexOf(\":\");\n        if (firstColon !== -1) {\n            username = usernameAndPassword.substr(0, firstColon);\n            password = usernameAndPassword.substr(firstColon + 1);\n        }\n        const [host, port] = hostAndPort.split(\":\");\n\n        return {\n            type: type,\n            host: host,\n            username: decodeURIComponent(username),\n            password: decodeURIComponent(password),\n            port: port ? parseInt(port) : undefined,\n            database: afterBase || undefined\n        };\n    }\n}\n"],"sourceRoot":".."}