UNPKG

sequelize

Version:

Sequelize is a promise-based Node.js ORM tool for Postgres, MySQL, MariaDB, SQLite, Microsoft SQL Server, Amazon Redshift and Snowflake’s Data Cloud. It features solid transaction support, relations, eager and lazy loading, read replication and more.

116 lines (115 loc) 3.42 kB
"use strict"; const wkx = require("wkx"); const _ = require("lodash"); const momentTz = require("moment-timezone"); const moment = require("moment"); module.exports = (BaseTypes) => { BaseTypes.ABSTRACT.prototype.dialectTypes = "https://mariadb.com/kb/en/library/resultset/#field-types"; BaseTypes.DATE.types.mariadb = ["DATETIME"]; BaseTypes.STRING.types.mariadb = ["VAR_STRING"]; BaseTypes.CHAR.types.mariadb = ["STRING"]; BaseTypes.TEXT.types.mariadb = ["BLOB"]; BaseTypes.TINYINT.types.mariadb = ["TINY"]; BaseTypes.SMALLINT.types.mariadb = ["SHORT"]; BaseTypes.MEDIUMINT.types.mariadb = ["INT24"]; BaseTypes.INTEGER.types.mariadb = ["LONG"]; BaseTypes.BIGINT.types.mariadb = ["LONGLONG"]; BaseTypes.FLOAT.types.mariadb = ["FLOAT"]; BaseTypes.TIME.types.mariadb = ["TIME"]; BaseTypes.DATEONLY.types.mariadb = ["DATE"]; BaseTypes.BOOLEAN.types.mariadb = ["TINY"]; BaseTypes.BLOB.types.mariadb = ["TINYBLOB", "BLOB", "LONGBLOB"]; BaseTypes.DECIMAL.types.mariadb = ["NEWDECIMAL"]; BaseTypes.UUID.types.mariadb = false; BaseTypes.ENUM.types.mariadb = false; BaseTypes.REAL.types.mariadb = ["DOUBLE"]; BaseTypes.DOUBLE.types.mariadb = ["DOUBLE"]; BaseTypes.GEOMETRY.types.mariadb = ["GEOMETRY"]; BaseTypes.JSON.types.mariadb = ["JSON"]; class DECIMAL extends BaseTypes.DECIMAL { toSql() { let definition = super.toSql(); if (this._unsigned) { definition += " UNSIGNED"; } if (this._zerofill) { definition += " ZEROFILL"; } return definition; } } class DATE extends BaseTypes.DATE { toSql() { return this._length ? `DATETIME(${this._length})` : "DATETIME"; } _stringify(date, options) { if (!moment.isMoment(date)) { date = this._applyTimezone(date, options); } return date.format("YYYY-MM-DD HH:mm:ss.SSS"); } static parse(value, options) { value = value.string(); if (value === null) { return value; } if (momentTz.tz.zone(options.timezone)) { value = momentTz.tz(value, options.timezone).toDate(); } else { value = new Date(`${value} ${options.timezone}`); } return value; } } class DATEONLY extends BaseTypes.DATEONLY { static parse(value) { return value.string(); } } class UUID extends BaseTypes.UUID { toSql() { return "CHAR(36) BINARY"; } } class GEOMETRY extends BaseTypes.GEOMETRY { constructor(type, srid) { super(type, srid); if (_.isEmpty(this.type)) { this.sqlType = this.key; } else { this.sqlType = this.type; } } static parse(value) { value = value.buffer(); if (!value || value.length === 0) { return null; } value = value.slice(4); return wkx.Geometry.parse(value).toGeoJSON({ shortCrs: true }); } toSql() { return this.sqlType; } } class ENUM extends BaseTypes.ENUM { toSql(options) { return `ENUM(${this.values.map((value) => options.escape(value)).join(", ")})`; } } class JSONTYPE extends BaseTypes.JSON { _stringify(value, options) { return options.operation === "where" && typeof value === "string" ? value : JSON.stringify(value); } } return { ENUM, DATE, DATEONLY, UUID, GEOMETRY, DECIMAL, JSON: JSONTYPE }; }; //# sourceMappingURL=data-types.js.map