UNPKG

plywood

Version:
142 lines (141 loc) 6.3 kB
import { __extends } from "tslib"; import { SQLDialect } from './baseDialect'; var MySQLDialect = (function (_super) { __extends(MySQLDialect, _super); function MySQLDialect() { return _super.call(this) || this; } MySQLDialect.prototype.escapeName = function (name) { name = name.replace(/`/g, '``'); return '`' + name + '`'; }; MySQLDialect.prototype.escapeLiteral = function (name) { if (name === null) return this.nullConstant(); return JSON.stringify(name); }; MySQLDialect.prototype.timeToSQL = function (date) { if (!date) return this.nullConstant(); return "TIMESTAMP('".concat(this.dateToSQLDateString(date), "')"); }; MySQLDialect.prototype.stringArrayToSQL = function (_value) { throw new Error('must implement'); }; MySQLDialect.prototype.concatExpression = function (a, b) { return "CONCAT(".concat(a, ",").concat(b, ")"); }; MySQLDialect.prototype.containsExpression = function (a, b, insensitive) { if (insensitive) { a = "LOWER(".concat(a, ")"); b = "LOWER(".concat(b, ")"); } return "LOCATE(".concat(b, ",").concat(a, ")>0"); }; MySQLDialect.prototype.isNotDistinctFromExpression = function (a, b) { return "(".concat(a, "<=>").concat(b, ")"); }; MySQLDialect.prototype.castExpression = function (inputType, operand, targetType) { var castFunction = MySQLDialect.CAST_TO_FUNCTION[targetType][inputType]; if (!castFunction) { throw new Error("unsupported cast from ".concat(inputType, " to ").concat(targetType, " in MySQL dialect")); } return castFunction.replace(/\$\$/g, operand); }; MySQLDialect.prototype.utcToWalltime = function (operand, timezone) { if (timezone.isUTC()) return operand; return "CONVERT_TZ(".concat(operand, ",'+0:00','").concat(timezone, "')"); }; MySQLDialect.prototype.walltimeToUTC = function (operand, timezone) { if (timezone.isUTC()) return operand; return "CONVERT_TZ(".concat(operand, ",'").concat(timezone, "','+0:00')"); }; MySQLDialect.prototype.timeFloorExpression = function (operand, duration, timezone) { var bucketFormat = MySQLDialect.TIME_BUCKETING[duration.toString()]; if (!bucketFormat) throw new Error("unsupported duration '".concat(duration, "'")); return this.walltimeToUTC("DATE_FORMAT(".concat(this.utcToWalltime(operand, timezone), ",'").concat(bucketFormat, "')"), timezone); }; MySQLDialect.prototype.timeBucketExpression = function (operand, duration, timezone) { return this.timeFloorExpression(operand, duration, timezone); }; MySQLDialect.prototype.timePartExpression = function (operand, part, timezone) { var timePartFunction = MySQLDialect.TIME_PART_TO_FUNCTION[part]; if (!timePartFunction) throw new Error("unsupported part ".concat(part, " in MySQL dialect")); return timePartFunction.replace(/\$\$/g, this.utcToWalltime(operand, timezone)); }; MySQLDialect.prototype.timeShiftExpression = function (operand, duration, step, _timezone) { if (step === 0) return operand; var sqlFn = step > 0 ? 'DATE_ADD(' : 'DATE_SUB('; var spans = duration.multiply(Math.abs(step)).valueOf(); if (spans.week) { return sqlFn + operand + ', INTERVAL ' + String(spans.week) + ' WEEK)'; } if (spans.year || spans.month) { var expr = String(spans.year || 0) + '-' + String(spans.month || 0); operand = sqlFn + operand + ", INTERVAL '" + expr + "' YEAR_MONTH)"; } if (spans.day || spans.hour || spans.minute || spans.second) { var expr = String(spans.day || 0) + ' ' + [spans.hour || 0, spans.minute || 0, spans.second || 0].join(':'); operand = sqlFn + operand + ", INTERVAL '" + expr + "' DAY_SECOND)"; } return operand; }; MySQLDialect.prototype.extractExpression = function (_operand, _regexp) { throw new Error('MySQL must implement extractExpression (https://github.com/mysqludf/lib_mysqludf_preg)'); }; MySQLDialect.prototype.indexOfExpression = function (str, substr) { return "LOCATE(".concat(substr, ", ").concat(str, ") - 1"); }; MySQLDialect.TIME_BUCKETING = { PT1S: '%Y-%m-%d %H:%i:%SZ', PT1M: '%Y-%m-%d %H:%i:00Z', PT1H: '%Y-%m-%d %H:00:00Z', P1D: '%Y-%m-%d 00:00:00Z', P1M: '%Y-%m-01 00:00:00Z', P1Y: '%Y-01-01 00:00:00Z', }; MySQLDialect.TIME_PART_TO_FUNCTION = { SECOND_OF_MINUTE: 'SECOND($$)', SECOND_OF_HOUR: '(MINUTE($$)*60+SECOND($$))', SECOND_OF_DAY: '((HOUR($$)*60+MINUTE($$))*60+SECOND($$))', SECOND_OF_WEEK: '(((WEEKDAY($$)*24)+HOUR($$)*60+MINUTE($$))*60+SECOND($$))', SECOND_OF_MONTH: '((((DAYOFMONTH($$)-1)*24)+HOUR($$)*60+MINUTE($$))*60+SECOND($$))', SECOND_OF_YEAR: '((((DAYOFYEAR($$)-1)*24)+HOUR($$)*60+MINUTE($$))*60+SECOND($$))', MINUTE_OF_HOUR: 'MINUTE($$)', MINUTE_OF_DAY: 'HOUR($$)*60+MINUTE($$)', MINUTE_OF_WEEK: '(WEEKDAY($$)*24)+HOUR($$)*60+MINUTE($$)', MINUTE_OF_MONTH: '((DAYOFMONTH($$)-1)*24)+HOUR($$)*60+MINUTE($$)', MINUTE_OF_YEAR: '((DAYOFYEAR($$)-1)*24)+HOUR($$)*60+MINUTE($$)', HOUR_OF_DAY: 'HOUR($$)', HOUR_OF_WEEK: '(WEEKDAY($$)*24+HOUR($$))', HOUR_OF_MONTH: '((DAYOFMONTH($$)-1)*24+HOUR($$))', HOUR_OF_YEAR: '((DAYOFYEAR($$)-1)*24+HOUR($$))', DAY_OF_WEEK: '(WEEKDAY($$)+1)', DAY_OF_MONTH: 'DAYOFMONTH($$)', DAY_OF_YEAR: 'DAYOFYEAR($$)', WEEK_OF_YEAR: 'WEEK($$)', MONTH_OF_YEAR: 'MONTH($$)', YEAR: 'YEAR($$)', }; MySQLDialect.CAST_TO_FUNCTION = { TIME: { NUMBER: 'FROM_UNIXTIME($$ / 1000)', }, NUMBER: { TIME: 'UNIX_TIMESTAMP($$) * 1000', STRING: 'CAST($$ AS SIGNED)', }, STRING: { NUMBER: 'CAST($$ AS CHAR)', }, }; return MySQLDialect; }(SQLDialect)); export { MySQLDialect };