UNPKG

kysely

Version:

Type safe SQL query builder

69 lines (68 loc) 2.04 kB
/// <reference types="./mysql-query-compiler.d.ts" /> import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js'; const LITERAL_ESCAPE_REGEX = /\\|'/g; const ID_WRAP_REGEX = /`/g; export class MysqlQueryCompiler extends 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); } } }