UNPKG

kysely

Version:

Type safe SQL query builder

72 lines (71 loc) 2.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MysqlQueryCompiler = void 0; const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js"); const LITERAL_ESCAPE_REGEX = /\\|'/g; const ID_WRAP_REGEX = /`/g; class MysqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler { getCurrentParameterPlaceholder() { return '?'; } getLeftExplainOptionsWrapper() { return ''; } getExplainOptionAssignment() { return '='; } getExplainOptionsDelimiter() { return ' '; } getRightExplainOptionsWrapper() { return ''; } getLeftIdentifierWrapper() { return ID_WRAP_REGEX.source; } getRightIdentifierWrapper() { return ID_WRAP_REGEX.source; } sanitizeIdentifier(identifier) { return identifier.replace(ID_WRAP_REGEX, '``'); } /** * MySQL requires escaping backslashes in string literals when using the * default NO_BACKSLASH_ESCAPES=OFF mode. Without this, a backslash * followed by a quote (\') can break out of the string literal. * * @see https://dev.mysql.com/doc/refman/9.6/en/string-literals.html */ sanitizeStringLiteral(value) { return value.replace(LITERAL_ESCAPE_REGEX, (char) => char === '\\' ? '\\\\' : "''"); } visitCreateIndex(node) { this.append('create '); if (node.unique) { this.append('unique '); } this.append('index '); if (node.ifNotExists) { this.append('if not exists '); } this.visitNode(node.name); if (node.using) { this.append(' using '); this.visitNode(node.using); } if (node.table) { this.append(' on '); this.visitNode(node.table); } if (node.columns) { this.append(' ('); this.compileList(node.columns); this.append(')'); } if (node.where) { this.append(' '); this.visitNode(node.where); } } } exports.MysqlQueryCompiler = MysqlQueryCompiler;