|
|
@ -2580,11 +2580,15 @@ class MssqlClient extends KnexClient { |
|
|
|
|
|
|
|
|
|
|
|
const defaultValue = getDefaultValue(n); |
|
|
|
const defaultValue = getDefaultValue(n); |
|
|
|
const shouldSanitize = true; |
|
|
|
const shouldSanitize = true; |
|
|
|
|
|
|
|
const scaleAndPrecision = |
|
|
|
|
|
|
|
!getDefaultLengthIsDisabled(n.dt) && n.dtxp |
|
|
|
|
|
|
|
? `(${n.dtxp}${n.dtxs ? `,${n.dtxs}` : ''})` |
|
|
|
|
|
|
|
: ''; |
|
|
|
|
|
|
|
|
|
|
|
if (change === 0) { |
|
|
|
if (change === 0) { |
|
|
|
query = existingQuery ? ',' : ''; |
|
|
|
query = existingQuery ? ',' : ''; |
|
|
|
query += this.genQuery(`?? ${n.dt}`, [n.cn], shouldSanitize); |
|
|
|
query += this.genQuery(`?? ${n.dt}`, [n.cn], shouldSanitize); |
|
|
|
query += !getDefaultLengthIsDisabled(n.dt) && n.dtxp ? `(${n.dtxp})` : ''; |
|
|
|
query += scaleAndPrecision; |
|
|
|
query += n.rqd ? ' NOT NULL' : ' NULL'; |
|
|
|
query += n.rqd ? ' NOT NULL' : ' NULL'; |
|
|
|
query += n.ai ? ' IDENTITY(1,1)' : ' '; |
|
|
|
query += n.ai ? ' IDENTITY(1,1)' : ' '; |
|
|
|
query += defaultValue |
|
|
|
query += defaultValue |
|
|
@ -2599,7 +2603,7 @@ class MssqlClient extends KnexClient { |
|
|
|
} |
|
|
|
} |
|
|
|
} else if (change === 1) { |
|
|
|
} else if (change === 1) { |
|
|
|
query += this.genQuery(` ADD ?? ${n.dt}`, [n.cn], shouldSanitize); |
|
|
|
query += this.genQuery(` ADD ?? ${n.dt}`, [n.cn], shouldSanitize); |
|
|
|
query += !getDefaultLengthIsDisabled(n.dt) && n.dtxp ? `(${n.dtxp})` : ''; |
|
|
|
query += scaleAndPrecision; |
|
|
|
query += n.rqd ? ' NOT NULL' : ' NULL'; |
|
|
|
query += n.rqd ? ' NOT NULL' : ' NULL'; |
|
|
|
query += n.ai ? ' IDENTITY(1,1)' : ' '; |
|
|
|
query += n.ai ? ' IDENTITY(1,1)' : ' '; |
|
|
|
query += defaultValue |
|
|
|
query += defaultValue |
|
|
@ -2629,43 +2633,17 @@ class MssqlClient extends KnexClient { |
|
|
|
); |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (n.dtxp !== o.dtxp && !['text'].includes(n.dt)) { |
|
|
|
if ( |
|
|
|
query += this.genQuery( |
|
|
|
n.dtxp !== o.dtxp || |
|
|
|
`\nALTER TABLE ?? ALTER COLUMN ?? ${n.dt}(${n.dtxp});\n`, |
|
|
|
n.dtxs !== o.dtxs || |
|
|
|
[this.getTnPath(t), n.cn], |
|
|
|
n.dt !== o.dt || |
|
|
|
shouldSanitize |
|
|
|
n.rqd !== o.rqd |
|
|
|
); |
|
|
|
) { |
|
|
|
} else if (n.dt !== o.dt) { |
|
|
|
|
|
|
|
query += this.genQuery( |
|
|
|
|
|
|
|
`\nALTER TABLE ?? ALTER COLUMN ?? TYPE ${n.dt};\n`, |
|
|
|
|
|
|
|
[this.getTnPath(t), n.cn], |
|
|
|
|
|
|
|
shouldSanitize |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (n.rqd !== o.rqd) { |
|
|
|
|
|
|
|
query += this.genQuery( |
|
|
|
query += this.genQuery( |
|
|
|
`\nALTER TABLE ?? ALTER COLUMN ?? ${n.dt}`, |
|
|
|
`\nALTER TABLE ?? ALTER COLUMN ?? ${n.dt}${scaleAndPrecision}`, |
|
|
|
[this.getTnPath(t), n.cn], |
|
|
|
[this.getTnPath(t), n.cn], |
|
|
|
shouldSanitize |
|
|
|
shouldSanitize |
|
|
|
); |
|
|
|
); |
|
|
|
if ( |
|
|
|
|
|
|
|
![ |
|
|
|
|
|
|
|
'int', |
|
|
|
|
|
|
|
'bigint', |
|
|
|
|
|
|
|
'bit', |
|
|
|
|
|
|
|
'real', |
|
|
|
|
|
|
|
'float', |
|
|
|
|
|
|
|
'decimal', |
|
|
|
|
|
|
|
'money', |
|
|
|
|
|
|
|
'smallint', |
|
|
|
|
|
|
|
'tinyint', |
|
|
|
|
|
|
|
'geometry', |
|
|
|
|
|
|
|
'datetime', |
|
|
|
|
|
|
|
'text', |
|
|
|
|
|
|
|
].includes(n.dt) |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
query += n.dtxp && n.dtxp != -1 ? `(${n.dtxp})` : ''; |
|
|
|
|
|
|
|
query += n.rqd ? ` NOT NULL;\n` : ` NULL;\n`; |
|
|
|
query += n.rqd ? ` NOT NULL;\n` : ` NULL;\n`; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -2787,43 +2765,32 @@ function getDefaultValue(n) { |
|
|
|
|
|
|
|
|
|
|
|
function getDefaultLengthIsDisabled(type) { |
|
|
|
function getDefaultLengthIsDisabled(type) { |
|
|
|
switch (type) { |
|
|
|
switch (type) { |
|
|
|
// case 'binary':
|
|
|
|
|
|
|
|
// case 'char':
|
|
|
|
|
|
|
|
// case 'sql_variant':
|
|
|
|
|
|
|
|
// case 'nvarchar':
|
|
|
|
|
|
|
|
// case 'nchar':
|
|
|
|
|
|
|
|
// case 'ntext':
|
|
|
|
|
|
|
|
// case 'varbinary':
|
|
|
|
|
|
|
|
// case 'sysname':
|
|
|
|
|
|
|
|
case 'bigint': |
|
|
|
|
|
|
|
case 'bit': |
|
|
|
|
|
|
|
case 'date': |
|
|
|
|
|
|
|
case 'datetime': |
|
|
|
|
|
|
|
case 'datetime2': |
|
|
|
|
|
|
|
case 'datetimeoffset': |
|
|
|
case 'datetimeoffset': |
|
|
|
case 'decimal': |
|
|
|
|
|
|
|
case 'float': |
|
|
|
|
|
|
|
case 'geography': |
|
|
|
case 'geography': |
|
|
|
case 'geometry': |
|
|
|
case 'geometry': |
|
|
|
case 'heirarchyid': |
|
|
|
case 'heirarchyid': |
|
|
|
case 'image': |
|
|
|
case 'image': |
|
|
|
case 'int': |
|
|
|
|
|
|
|
case 'money': |
|
|
|
case 'money': |
|
|
|
case 'numeric': |
|
|
|
|
|
|
|
case 'real': |
|
|
|
case 'real': |
|
|
|
case 'json': |
|
|
|
case 'json': |
|
|
|
case 'smalldatetime': |
|
|
|
case 'smalldatetime': |
|
|
|
case 'smallint': |
|
|
|
|
|
|
|
case 'smallmoney': |
|
|
|
case 'smallmoney': |
|
|
|
case 'text': |
|
|
|
case 'text': |
|
|
|
case 'time': |
|
|
|
case 'time': |
|
|
|
case 'timestamp': |
|
|
|
case 'timestamp': |
|
|
|
|
|
|
|
case 'int': |
|
|
|
case 'tinyint': |
|
|
|
case 'tinyint': |
|
|
|
|
|
|
|
case 'bigint': |
|
|
|
|
|
|
|
case 'bit': |
|
|
|
|
|
|
|
case 'smallint': |
|
|
|
|
|
|
|
case 'float': |
|
|
|
case 'uniqueidentifier': |
|
|
|
case 'uniqueidentifier': |
|
|
|
case 'xml': |
|
|
|
case 'xml': |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
break; |
|
|
|
break; |
|
|
|
default: |
|
|
|
default: |
|
|
|
|
|
|
|
case 'decimal': |
|
|
|
|
|
|
|
case 'numeric': |
|
|
|
case 'varchar': |
|
|
|
case 'varchar': |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
break; |
|
|
|
break; |
|
|
|