UNPKG

@rcronin/sequelize-ibmi-mapepire

Version:

IBM i (via Mapepire) Sequelize V7 Dialect

244 lines 8.57 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.UUID = exports.ENUM = exports.DECIMAL = exports.DOUBLE = exports.FLOAT = exports.BIGINT = exports.INTEGER = exports.MEDIUMINT = exports.SMALLINT = exports.TINYINT = exports.DATE = exports.TEXT = exports.CHAR = exports.STRING = exports.BLOB = void 0; const BaseTypes = __importStar(require("@sequelize/core/_non-semver-use-at-your-own-risk_/abstract-dialect/data-types.js")); const dayjs_1 = __importDefault(require("dayjs")); const utc_1 = __importDefault(require("dayjs/plugin/utc")); const maxBy_js_1 = __importDefault(require("lodash/maxBy.js")); dayjs_1.default.extend(utc_1.default); function removeUnsupportedIntegerOptions(dataType, dialect) { if (dataType.options.length != null) { // this option only makes sense for zerofill dialect.warnDataTypeIssue(`${dialect.name} does not support ${dataType.getDataTypeId()} with length specified. This options is ignored.`); delete dataType.options.length; } } class BLOB extends BaseTypes.BLOB { toSql() { if (this.options.length != null) { if (this.options.length.toLowerCase() === 'tiny') { // tiny = 255 bytes return 'BLOB(255)'; } if (this.options.length.toLowerCase() === 'medium') { // medium = 16M return 'BLOB(16M)'; } if (this.options.length.toLowerCase() === 'long') { // long = 2GB return 'BLOB(2G)'; } return `BLOB(${this.options.length})`; } return 'BLOB(1M)'; } } exports.BLOB = BLOB; class STRING extends BaseTypes.STRING { toSql() { const length = this.options.length ?? 255; if (this.options.binary) { if (length <= 4000) { return `VARCHAR(${length}) FOR BIT DATA`; } throw new Error(`${this._getDialect().name} does not support the BINARY option for data types with a length greater than 4000.`); } if (length <= 4000) { return `VARCHAR(${length})`; } return `CLOB(${length})`; } } exports.STRING = STRING; class CHAR extends BaseTypes.CHAR { toSql() { if (this.options.binary) { return `CHAR(${this.options.length ?? 255}) FOR BIT DATA`; } return super.toSql(); } } exports.CHAR = CHAR; class TEXT extends BaseTypes.TEXT { toSql() { // default value for CLOB let len = 2_147_483_647; if (typeof this.options.length === 'string') { switch (this.options.length.toLowerCase()) { // 'tiny', 'medium' and 'long' are MySQL values. // 'max' is dialect-dependant. case 'tiny': len = 2 ** 8; break; case 'medium': len = 2 ** 24; break; case 'long': // long would normally be 2 ** 32, but that's above the limit for db2 len = 2_147_483_647; break; default: throw new Error(`LENGTH value ${this.options.length} is not supported. Expected a number of one of the following strings: tiny, medium, long.`); } } if (len > 32_672) { return `CLOB(${len})`; } return `VARCHAR(${len})`; } } exports.TEXT = TEXT; class DATE extends BaseTypes.DATE { _checkOptionSupport(dialect) { super._checkOptionSupport(dialect); if (this.options.precision != null && this.options.precision > 6) { this.options.precision = 6; } } toSql() { return `TIMESTAMP${this.options.precision != null ? `(${this.options.precision})` : ''}`; } toBindableValue(date) { date = (0, dayjs_1.default)(date).utc(false); return date.format('YYYY-MM-DD HH:mm:ss.SSS'); } } exports.DATE = DATE; class TINYINT extends BaseTypes.TINYINT { _checkOptionSupport(dialect) { super._checkOptionSupport(dialect); removeUnsupportedIntegerOptions(this, dialect); } // TODO: add >= 0 =< 2^8-1 check when the unsigned option is true // TODO: add >= -2^7 =< 2^7-1 check when the unsigned option is false toSql() { return 'SMALLINT'; } } exports.TINYINT = TINYINT; class SMALLINT extends BaseTypes.SMALLINT { _checkOptionSupport(dialect) { super._checkOptionSupport(dialect); removeUnsupportedIntegerOptions(this, dialect); } // TODO: add >= 0 =< 2^16-1 check when the unsigned option is true toSql() { if (this.options.unsigned) { return 'INTEGER'; } return 'SMALLINT'; } } exports.SMALLINT = SMALLINT; class MEDIUMINT extends BaseTypes.MEDIUMINT { _checkOptionSupport(dialect) { super._checkOptionSupport(dialect); removeUnsupportedIntegerOptions(this, dialect); } // TODO: add >= 0 =< 2^24-1 check when the unsigned option is true // TODO: add >= -2^23 =< 2^23-1 check when the unsigned option is false toSql() { return 'INTEGER'; } } exports.MEDIUMINT = MEDIUMINT; class INTEGER extends BaseTypes.INTEGER { _checkOptionSupport(dialect) { super._checkOptionSupport(dialect); removeUnsupportedIntegerOptions(this, dialect); } // TODO: add >= 0 =< 2^32-1 check when the unsigned option is true toSql() { if (this.options.unsigned) { return 'BIGINT'; } return 'INTEGER'; } } exports.INTEGER = INTEGER; class BIGINT extends BaseTypes.BIGINT { _checkOptionSupport(dialect) { super._checkOptionSupport(dialect); removeUnsupportedIntegerOptions(this, dialect); } } exports.BIGINT = BIGINT; class FLOAT extends BaseTypes.FLOAT { // TODO: add check constraint >= 0 if unsigned is true getNumberSqlTypeName() { return 'REAL'; } } exports.FLOAT = FLOAT; class DOUBLE extends BaseTypes.DOUBLE { // TODO: add check constraint >= 0 if unsigned is true getNumberSqlTypeName() { return 'DOUBLE'; } } exports.DOUBLE = DOUBLE; class DECIMAL extends BaseTypes.DECIMAL { } exports.DECIMAL = DECIMAL; class ENUM extends BaseTypes.ENUM { toSql() { const minLength = (0, maxBy_js_1.default)(this.options.values, value => value.length)?.length ?? 0; // db2 does not have an ENUM type, we use VARCHAR instead. return `VARCHAR(${Math.max(minLength, 255)})`; } } exports.ENUM = ENUM; class UUID extends BaseTypes.UUID { toSql() { return 'CHAR(36)'; } } exports.UUID = UUID; // export class BOOLEAN extends BaseTypes.BOOLEAN { // escape(value: boolean | unknown): string { // return value ? '1' : '0'; // } // toBindableValue(value: boolean | unknown): unknown { // return value ? 1 : 0; // } // toSql() { // return 'SMALLINT'; // } // } //# sourceMappingURL=data-types-overrides.js.map