From af4f0ae7bda6e6fc67894f8adc9dc2a9566c28de Mon Sep 17 00:00:00 2001 From: Hasan Jamil <78340806+hjamil-24@users.noreply.github.com> Date: Thu, 1 Jun 2023 19:56:57 +0530 Subject: [PATCH] feat(oracle): add width support for numerictype (#16073) Co-authored-by: Hasan Jamil Co-authored-by: Rik Smale <13023439+WikiRik@users.noreply.github.com> --- src/dialects/oracle/data-types.js | 17 +++++---- test/unit/sql/data-types.test.js | 57 +++++++++++++++++-------------- 2 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/dialects/oracle/data-types.js b/src/dialects/oracle/data-types.js index 0720b88ba863..2bb99a00debc 100644 --- a/src/dialects/oracle/data-types.js +++ b/src/dialects/oracle/data-types.js @@ -218,11 +218,6 @@ module.exports = BaseTypes => { DATE.prototype.escape = false; class DECIMAL extends BaseTypes.DECIMAL { - constructor() { - super(); - this.key = 'DECIMAL'; - } - toSql() { let result = ''; if (this._length) { @@ -261,7 +256,10 @@ module.exports = BaseTypes => { class SMALLINT extends BaseTypes.SMALLINT { toSql() { - return 'NUMBER(5)'; + if (this._length) { + return `NUMBER(${this._length},0)`; + } + return 'SMALLINT'; } _getBindDef(oracledb) { @@ -319,6 +317,13 @@ module.exports = BaseTypes => { } class INTEGER extends BaseTypes.INTEGER { + toSql() { + if (this._length) { + return `NUMBER(${this._length},0)`; + } + return 'INTEGER'; + } + _getBindDef(oracledb) { return { type: oracledb.DB_TYPE_NUMBER }; } diff --git a/test/unit/sql/data-types.test.js b/test/unit/sql/data-types.test.js index 35f36d9dd99b..17b5436e92dd 100644 --- a/test/unit/sql/data-types.test.js +++ b/test/unit/sql/data-types.test.js @@ -376,7 +376,8 @@ describe(Support.getTestDialectTeaser('SQL'), () => { postgres: 'INTEGER', db2: 'INTEGER', mssql: 'INTEGER', - sqlite: 'INTEGER' + sqlite: 'INTEGER', + oracle: 'INTEGER' }); testsql('INTEGER.UNSIGNED.ZEROFILL', DataTypes.INTEGER.UNSIGNED.ZEROFILL, { @@ -384,21 +385,24 @@ describe(Support.getTestDialectTeaser('SQL'), () => { postgres: 'INTEGER', db2: 'INTEGER', mssql: 'INTEGER', - sqlite: 'INTEGER' + sqlite: 'INTEGER', + oracle: 'INTEGER' }); testsql('INTEGER(11)', DataTypes.INTEGER(11), { default: 'INTEGER(11)', postgres: 'INTEGER', db2: 'INTEGER', - mssql: 'INTEGER' + mssql: 'INTEGER', + oracle: 'NUMBER(11,0)' }); testsql('INTEGER({ length: 11 })', DataTypes.INTEGER({ length: 11 }), { default: 'INTEGER(11)', postgres: 'INTEGER', db2: 'INTEGER', - mssql: 'INTEGER' + mssql: 'INTEGER', + oracle: 'NUMBER(11,0)' }); testsql('INTEGER(11).UNSIGNED', DataTypes.INTEGER(11).UNSIGNED, { @@ -406,7 +410,8 @@ describe(Support.getTestDialectTeaser('SQL'), () => { sqlite: 'INTEGER(11)', postgres: 'INTEGER', db2: 'INTEGER', - mssql: 'INTEGER' + mssql: 'INTEGER', + oracle: 'NUMBER(11,0)' }); testsql('INTEGER(11).UNSIGNED.ZEROFILL', DataTypes.INTEGER(11).UNSIGNED.ZEROFILL, { @@ -414,7 +419,8 @@ describe(Support.getTestDialectTeaser('SQL'), () => { sqlite: 'INTEGER(11)', postgres: 'INTEGER', db2: 'INTEGER', - mssql: 'INTEGER' + mssql: 'INTEGER', + oracle: 'NUMBER(11,0)' }); testsql('INTEGER(11).ZEROFILL', DataTypes.INTEGER(11).ZEROFILL, { @@ -422,7 +428,8 @@ describe(Support.getTestDialectTeaser('SQL'), () => { sqlite: 'INTEGER(11)', postgres: 'INTEGER', db2: 'INTEGER', - mssql: 'INTEGER' + mssql: 'INTEGER', + oracle: 'NUMBER(11,0)' }); testsql('INTEGER(11).ZEROFILL.UNSIGNED', DataTypes.INTEGER(11).ZEROFILL.UNSIGNED, { @@ -430,7 +437,8 @@ describe(Support.getTestDialectTeaser('SQL'), () => { sqlite: 'INTEGER(11)', postgres: 'INTEGER', db2: 'INTEGER', - mssql: 'INTEGER' + mssql: 'INTEGER', + oracle: 'NUMBER(11,0)' }); describe('validate', () => { @@ -620,7 +628,6 @@ describe(Support.getTestDialectTeaser('SQL'), () => { title: 'SMALLINT', dataType: DataTypes.SMALLINT, expect: { - oracle: 'NUMBER(5)', default: 'SMALLINT' } }, @@ -629,7 +636,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { dataType: DataTypes.SMALLINT(4), expect: { default: 'SMALLINT(4)', - oracle: 'NUMBER(5)', + oracle: 'NUMBER(4,0)', postgres: 'SMALLINT', db2: 'SMALLINT', mssql: 'SMALLINT' @@ -640,7 +647,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { dataType: DataTypes.SMALLINT({ length: 4 }), expect: { default: 'SMALLINT(4)', - oracle: 'NUMBER(5)', + oracle: 'NUMBER(4,0)', postgres: 'SMALLINT', db2: 'SMALLINT', mssql: 'SMALLINT' @@ -651,7 +658,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { dataType: DataTypes.SMALLINT.UNSIGNED, expect: { default: 'SMALLINT UNSIGNED', - oracle: 'NUMBER(5)', + oracle: 'SMALLINT', postgres: 'SMALLINT', db2: 'SMALLINT', mssql: 'SMALLINT', @@ -663,7 +670,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { dataType: DataTypes.SMALLINT(4).UNSIGNED, expect: { default: 'SMALLINT(4) UNSIGNED', - oracle: 'NUMBER(5)', + oracle: 'NUMBER(4,0)', sqlite: 'SMALLINT(4)', postgres: 'SMALLINT', db2: 'SMALLINT', @@ -675,7 +682,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { dataType: DataTypes.SMALLINT.UNSIGNED.ZEROFILL, expect: { default: 'SMALLINT UNSIGNED ZEROFILL', - oracle: 'NUMBER(5)', + oracle: 'SMALLINT', postgres: 'SMALLINT', db2: 'SMALLINT', mssql: 'SMALLINT', @@ -687,7 +694,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { dataType: DataTypes.SMALLINT(4).UNSIGNED.ZEROFILL, expect: { default: 'SMALLINT(4) UNSIGNED ZEROFILL', - oracle: 'NUMBER(5)', + oracle: 'NUMBER(4,0)', sqlite: 'SMALLINT(4)', postgres: 'SMALLINT', db2: 'SMALLINT', @@ -699,7 +706,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { dataType: DataTypes.SMALLINT.ZEROFILL, expect: { default: 'SMALLINT ZEROFILL', - oracle: 'NUMBER(5)', + oracle: 'SMALLINT', postgres: 'SMALLINT', db2: 'SMALLINT', mssql: 'SMALLINT', @@ -711,7 +718,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { dataType: DataTypes.SMALLINT(4).ZEROFILL, expect: { default: 'SMALLINT(4) ZEROFILL', - oracle: 'NUMBER(5)', + oracle: 'NUMBER(4,0)', sqlite: 'SMALLINT(4)', postgres: 'SMALLINT', db2: 'SMALLINT', @@ -723,7 +730,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { dataType: DataTypes.SMALLINT.ZEROFILL.UNSIGNED, expect: { default: 'SMALLINT UNSIGNED ZEROFILL', - oracle: 'NUMBER(5)', + oracle: 'SMALLINT', postgres: 'SMALLINT', db2: 'SMALLINT', mssql: 'SMALLINT', @@ -735,7 +742,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { dataType: DataTypes.SMALLINT(4).ZEROFILL.UNSIGNED, expect: { default: 'SMALLINT(4) UNSIGNED ZEROFILL', - oracle: 'NUMBER(5)', + oracle: 'NUMBER(4,0)', sqlite: 'SMALLINT(4)', postgres: 'SMALLINT', db2: 'SMALLINT', @@ -1362,7 +1369,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { testsql('NUMERIC(15,5)', DataTypes.NUMERIC(15, 5), { default: 'DECIMAL(15,5)', - oracle: 'NUMBER' + oracle: 'NUMBER(15,5)' }); } @@ -1374,22 +1381,22 @@ describe(Support.getTestDialectTeaser('SQL'), () => { testsql('DECIMAL(10, 2)', DataTypes.DECIMAL(10, 2), { default: 'DECIMAL(10,2)', - oracle: 'NUMBER' + oracle: 'NUMBER(10,2)' }); testsql('DECIMAL({ precision: 10, scale: 2 })', DataTypes.DECIMAL({ precision: 10, scale: 2 }), { default: 'DECIMAL(10,2)', - oracle: 'NUMBER' + oracle: 'NUMBER(10,2)' }); testsql('DECIMAL(10)', DataTypes.DECIMAL(10), { default: 'DECIMAL(10)', - oracle: 'NUMBER' + oracle: 'NUMBER(10)' }); testsql('DECIMAL({ precision: 10 })', DataTypes.DECIMAL({ precision: 10 }), { default: 'DECIMAL(10)', - oracle: 'NUMBER' + oracle: 'NUMBER(10)' }); testsql('DECIMAL.UNSIGNED', DataTypes.DECIMAL.UNSIGNED, { @@ -1410,7 +1417,7 @@ describe(Support.getTestDialectTeaser('SQL'), () => { mariadb: 'DECIMAL(10,2) UNSIGNED', mysql: 'DECIMAL(10,2) UNSIGNED', default: 'DECIMAL(10,2)', - oracle: 'NUMBER' + oracle: 'NUMBER(10,2)' }); describe('validate', () => {