mirror of https://github.com/nocodb/nocodb
mertmit
8 months ago
22 changed files with 4148 additions and 22 deletions
@ -0,0 +1,820 @@ |
|||||||
|
import UITypes from '../UITypes'; |
||||||
|
import { IDType } from './index'; |
||||||
|
|
||||||
|
const dbTypes = [ |
||||||
|
'BIGINT', |
||||||
|
'BINARY', |
||||||
|
'BOOLEAN', |
||||||
|
'DATE', |
||||||
|
'DECIMAL', |
||||||
|
'DOUBLE', |
||||||
|
'FLOAT', |
||||||
|
'INT', |
||||||
|
'INTERVAL', |
||||||
|
'VOID', |
||||||
|
'SMALLINT', |
||||||
|
'STRING', |
||||||
|
'TIMESTAMP', |
||||||
|
'TIMESTAMP_NTZ', |
||||||
|
'TINYINT', |
||||||
|
]; |
||||||
|
|
||||||
|
export class DatabricksUi { |
||||||
|
static getNewTableColumns() { |
||||||
|
return [ |
||||||
|
{ |
||||||
|
column_name: 'id', |
||||||
|
title: 'Id', |
||||||
|
dt: 'int', |
||||||
|
dtx: 'int', |
||||||
|
ct: 'int', |
||||||
|
nrqd: false, |
||||||
|
rqd: true, |
||||||
|
ck: false, |
||||||
|
pk: true, |
||||||
|
un: false, |
||||||
|
ai: true, |
||||||
|
cdf: null, |
||||||
|
clen: null, |
||||||
|
np: null, |
||||||
|
ns: 0, |
||||||
|
dtxp: '', |
||||||
|
dtxs: '', |
||||||
|
altered: 1, |
||||||
|
uidt: 'ID', |
||||||
|
uip: '', |
||||||
|
uicn: '', |
||||||
|
}, |
||||||
|
{ |
||||||
|
column_name: 'title', |
||||||
|
title: 'Title', |
||||||
|
dt: 'string', |
||||||
|
dtx: 'specificType', |
||||||
|
ct: 'string', |
||||||
|
nrqd: true, |
||||||
|
rqd: false, |
||||||
|
ck: false, |
||||||
|
pk: false, |
||||||
|
un: false, |
||||||
|
ai: false, |
||||||
|
cdf: null, |
||||||
|
clen: 45, |
||||||
|
np: null, |
||||||
|
ns: null, |
||||||
|
dtxp: '', |
||||||
|
dtxs: '', |
||||||
|
altered: 1, |
||||||
|
uidt: 'SingleLineText', |
||||||
|
uip: '', |
||||||
|
uicn: '', |
||||||
|
}, |
||||||
|
{ |
||||||
|
column_name: 'created_at', |
||||||
|
title: 'CreatedAt', |
||||||
|
dt: 'TIMESTAMP', |
||||||
|
dtx: 'specificType', |
||||||
|
ct: 'TIMESTAMP', |
||||||
|
nrqd: true, |
||||||
|
rqd: false, |
||||||
|
ck: false, |
||||||
|
pk: false, |
||||||
|
un: false, |
||||||
|
ai: false, |
||||||
|
clen: 45, |
||||||
|
np: null, |
||||||
|
ns: null, |
||||||
|
dtxp: '', |
||||||
|
dtxs: '', |
||||||
|
altered: 1, |
||||||
|
uidt: UITypes.CreatedTime, |
||||||
|
uip: '', |
||||||
|
uicn: '', |
||||||
|
system: true, |
||||||
|
}, |
||||||
|
{ |
||||||
|
column_name: 'updated_at', |
||||||
|
title: 'UpdatedAt', |
||||||
|
dt: 'TIMESTAMP', |
||||||
|
dtx: 'specificType', |
||||||
|
ct: 'TIMESTAMP', |
||||||
|
nrqd: true, |
||||||
|
rqd: false, |
||||||
|
ck: false, |
||||||
|
pk: false, |
||||||
|
un: false, |
||||||
|
ai: false, |
||||||
|
clen: 45, |
||||||
|
np: null, |
||||||
|
ns: null, |
||||||
|
dtxp: '', |
||||||
|
dtxs: '', |
||||||
|
altered: 1, |
||||||
|
uidt: UITypes.LastModifiedTime, |
||||||
|
uip: '', |
||||||
|
uicn: '', |
||||||
|
system: true, |
||||||
|
}, |
||||||
|
{ |
||||||
|
column_name: 'created_by', |
||||||
|
title: 'nc_created_by', |
||||||
|
dt: 'string', |
||||||
|
dtx: 'specificType', |
||||||
|
ct: 'string', |
||||||
|
nrqd: true, |
||||||
|
rqd: false, |
||||||
|
ck: false, |
||||||
|
pk: false, |
||||||
|
un: false, |
||||||
|
ai: false, |
||||||
|
clen: 45, |
||||||
|
np: null, |
||||||
|
ns: null, |
||||||
|
dtxp: '', |
||||||
|
dtxs: '', |
||||||
|
altered: 1, |
||||||
|
uidt: UITypes.CreatedBy, |
||||||
|
uip: '', |
||||||
|
uicn: '', |
||||||
|
system: true, |
||||||
|
}, |
||||||
|
{ |
||||||
|
column_name: 'updated_by', |
||||||
|
title: 'nc_updated_by', |
||||||
|
dt: 'string', |
||||||
|
dtx: 'specificType', |
||||||
|
ct: 'string', |
||||||
|
nrqd: true, |
||||||
|
rqd: false, |
||||||
|
ck: false, |
||||||
|
pk: false, |
||||||
|
un: false, |
||||||
|
ai: false, |
||||||
|
clen: 45, |
||||||
|
np: null, |
||||||
|
ns: null, |
||||||
|
dtxp: '', |
||||||
|
dtxs: '', |
||||||
|
altered: 1, |
||||||
|
uidt: UITypes.LastModifiedBy, |
||||||
|
uip: '', |
||||||
|
uicn: '', |
||||||
|
system: true, |
||||||
|
}, |
||||||
|
]; |
||||||
|
} |
||||||
|
|
||||||
|
static getNewColumn(suffix) { |
||||||
|
return { |
||||||
|
column_name: 'title' + suffix, |
||||||
|
dt: 'string', |
||||||
|
dtx: 'specificType', |
||||||
|
ct: 'string', |
||||||
|
nrqd: true, |
||||||
|
rqd: false, |
||||||
|
ck: false, |
||||||
|
pk: false, |
||||||
|
un: false, |
||||||
|
ai: false, |
||||||
|
cdf: null, |
||||||
|
clen: 45, |
||||||
|
np: null, |
||||||
|
ns: null, |
||||||
|
dtxp: '', |
||||||
|
dtxs: '', |
||||||
|
altered: 1, |
||||||
|
uidt: 'SingleLineText', |
||||||
|
uip: '', |
||||||
|
uicn: '', |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
static getDefaultLengthForDatatype(_type) { |
||||||
|
return ''; |
||||||
|
} |
||||||
|
|
||||||
|
static getDefaultLengthIsDisabled(type): any { |
||||||
|
switch (type) { |
||||||
|
case 'decimal': |
||||||
|
return true; |
||||||
|
|
||||||
|
case 'text': |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static getDefaultValueForDatatype(type): any { |
||||||
|
switch (type) { |
||||||
|
case 'integer': |
||||||
|
return 'eg : ' + 10; |
||||||
|
|
||||||
|
case 'text': |
||||||
|
return 'eg : hey'; |
||||||
|
|
||||||
|
case 'numeric': |
||||||
|
return 'eg : ' + 10; |
||||||
|
|
||||||
|
case 'real': |
||||||
|
return 'eg : ' + 10.0; |
||||||
|
|
||||||
|
case 'blob': |
||||||
|
return 'eg : ' + 100; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static getDefaultScaleForDatatype(type): any { |
||||||
|
switch (type) { |
||||||
|
case 'integer': |
||||||
|
case 'text': |
||||||
|
case 'numeric': |
||||||
|
case 'real': |
||||||
|
case 'blob': |
||||||
|
return ' '; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static colPropAIDisabled(col, columns) { |
||||||
|
// console.log(col);
|
||||||
|
if (col.dt === 'integer') { |
||||||
|
for (let i = 0; i < columns.length; ++i) { |
||||||
|
if (columns[i].cn !== col.cn && columns[i].ai) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
return false; |
||||||
|
} else { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static colPropUNDisabled(_col) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
static onCheckboxChangeAI(col) { |
||||||
|
console.log(col); |
||||||
|
if ( |
||||||
|
col.dt === 'int' || |
||||||
|
col.dt === 'bigint' || |
||||||
|
col.dt === 'smallint' || |
||||||
|
col.dt === 'tinyint' |
||||||
|
) { |
||||||
|
col.altered = col.altered || 2; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static showScale(_columnObj) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
static removeUnsigned(columns) { |
||||||
|
for (let i = 0; i < columns.length; ++i) { |
||||||
|
if ( |
||||||
|
columns[i].altered === 1 && |
||||||
|
!( |
||||||
|
columns[i].dt === 'int' || |
||||||
|
columns[i].dt === 'bigint' || |
||||||
|
columns[i].dt === 'tinyint' || |
||||||
|
columns[i].dt === 'smallint' || |
||||||
|
columns[i].dt === 'mediumint' |
||||||
|
) |
||||||
|
) { |
||||||
|
columns[i].un = false; |
||||||
|
console.log('>> resetting unsigned value', columns[i].cn); |
||||||
|
} |
||||||
|
console.log(columns[i].cn); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/*static extractFunctionName(query) { |
||||||
|
const reg = |
||||||
|
/^\s*CREATE\s+(?:OR\s+REPLACE\s*)?\s*FUNCTION\s+(?:[\w\d_]+\.)?([\w_\d]+)/i; |
||||||
|
const match = query.match(reg); |
||||||
|
return match && match[1]; |
||||||
|
} |
||||||
|
|
||||||
|
static extractProcedureName(query) { |
||||||
|
const reg = |
||||||
|
/^\s*CREATE\s+(?:OR\s+REPLACE\s*)?\s*PROCEDURE\s+(?:[\w\d_]+\.)?([\w_\d]+)/i; |
||||||
|
const match = query.match(reg); |
||||||
|
return match && match[1]; |
||||||
|
}*/ |
||||||
|
static columnEditable(_colObj) { |
||||||
|
return true; // colObj.altered === 1;
|
||||||
|
} |
||||||
|
|
||||||
|
/*static handleRawOutput(result, headers) { |
||||||
|
console.log(result); |
||||||
|
if (Array.isArray(result) && result[0]) { |
||||||
|
const keys = Object.keys(result[0]); |
||||||
|
// set headers before settings result
|
||||||
|
for (let i = 0; i < keys.length; i++) { |
||||||
|
const text = keys[i]; |
||||||
|
headers.push({ text, value: text, sortable: false }); |
||||||
|
} |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
static splitQueries(query) { |
||||||
|
/!*** |
||||||
|
* we are splitting based on semicolon |
||||||
|
* there are mechanism to escape semicolon within single/double quotes(string) |
||||||
|
*!/ |
||||||
|
return query.match(/\b("[^"]*;[^"]*"|'[^']*;[^']*'|[^;])*;/g); |
||||||
|
} |
||||||
|
|
||||||
|
/!** |
||||||
|
* if sql statement is SELECT - it limits to a number |
||||||
|
* @param args |
||||||
|
* @returns {string|*} |
||||||
|
*!/ |
||||||
|
sanitiseQuery(args) { |
||||||
|
let q = args.query.trim().split(';'); |
||||||
|
|
||||||
|
if (q[0].startsWith('Select')) { |
||||||
|
q = q[0] + ` LIMIT 0,${args.limit ? args.limit : 100};`; |
||||||
|
} else if (q[0].startsWith('select')) { |
||||||
|
q = q[0] + ` LIMIT 0,${args.limit ? args.limit : 100};`; |
||||||
|
} else if (q[0].startsWith('SELECT')) { |
||||||
|
q = q[0] + ` LIMIT 0,${args.limit ? args.limit : 100};`; |
||||||
|
} else { |
||||||
|
return args.query; |
||||||
|
} |
||||||
|
|
||||||
|
return q; |
||||||
|
} |
||||||
|
|
||||||
|
static getColumnsFromJson(json, tn) { |
||||||
|
const columns = []; |
||||||
|
|
||||||
|
try { |
||||||
|
if (typeof json === 'object' && !Array.isArray(json)) { |
||||||
|
const keys = Object.keys(json); |
||||||
|
for (let i = 0; i < keys.length; ++i) { |
||||||
|
const column = { |
||||||
|
dp: null, |
||||||
|
tn, |
||||||
|
column_name: keys[i], |
||||||
|
cno: keys[i], |
||||||
|
np: null, |
||||||
|
ns: null, |
||||||
|
clen: null, |
||||||
|
cop: 1, |
||||||
|
pk: false, |
||||||
|
nrqd: false, |
||||||
|
rqd: false, |
||||||
|
un: false, |
||||||
|
ct: 'int(11) unsigned', |
||||||
|
ai: false, |
||||||
|
unique: false, |
||||||
|
cdf: null, |
||||||
|
cc: '', |
||||||
|
csn: null, |
||||||
|
dtx: 'specificType', |
||||||
|
dtxp: null, |
||||||
|
dtxs: 0, |
||||||
|
altered: 1, |
||||||
|
}; |
||||||
|
|
||||||
|
switch (typeof json[keys[i]]) { |
||||||
|
case 'number': |
||||||
|
if (Number.isInteger(json[keys[i]])) { |
||||||
|
if (SqliteUi.isValidTimestamp(keys[i], json[keys[i]])) { |
||||||
|
Object.assign(column, { |
||||||
|
dt: 'timestamp', |
||||||
|
}); |
||||||
|
} else { |
||||||
|
Object.assign(column, { |
||||||
|
dt: 'integer', |
||||||
|
}); |
||||||
|
} |
||||||
|
} else { |
||||||
|
Object.assign(column, { |
||||||
|
dt: 'real', |
||||||
|
}); |
||||||
|
} |
||||||
|
break; |
||||||
|
case 'string': |
||||||
|
// if (SqliteUi.isValidDate(json[keys[i]])) {
|
||||||
|
// Object.assign(column, {
|
||||||
|
// "dt": "datetime"
|
||||||
|
// });
|
||||||
|
// } else
|
||||||
|
if (json[keys[i]].length <= 255) { |
||||||
|
Object.assign(column, { |
||||||
|
dt: 'varchar', |
||||||
|
}); |
||||||
|
} else { |
||||||
|
Object.assign(column, { |
||||||
|
dt: 'text', |
||||||
|
}); |
||||||
|
} |
||||||
|
break; |
||||||
|
case 'boolean': |
||||||
|
Object.assign(column, { |
||||||
|
dt: 'integer', |
||||||
|
}); |
||||||
|
break; |
||||||
|
case 'object': |
||||||
|
Object.assign(column, { |
||||||
|
dt: 'text', |
||||||
|
np: null, |
||||||
|
dtxp: null, |
||||||
|
}); |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
columns.push(column); |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (e) { |
||||||
|
console.log('Error in getColumnsFromJson', e); |
||||||
|
} |
||||||
|
|
||||||
|
return columns; |
||||||
|
} |
||||||
|
|
||||||
|
static isValidTimestamp(key, value) { |
||||||
|
if (typeof value !== 'number') { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return new Date(value).getTime() > 0 && /(?:_|(?=A))[aA]t$/.test(key); |
||||||
|
} |
||||||
|
|
||||||
|
static isValidDate(value) { |
||||||
|
return new Date(value).getTime() > 0; |
||||||
|
}*/ |
||||||
|
|
||||||
|
static onCheckboxChangeAU(col) { |
||||||
|
console.log(col); |
||||||
|
// if (1) {
|
||||||
|
col.altered = col.altered || 2; |
||||||
|
// }
|
||||||
|
|
||||||
|
// if (!col.ai) {
|
||||||
|
// col.dtx = 'specificType'
|
||||||
|
// } else {
|
||||||
|
// col.dtx = ''
|
||||||
|
// }
|
||||||
|
} |
||||||
|
|
||||||
|
static colPropAuDisabled(col) { |
||||||
|
if (col.altered !== 1) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
switch (col.dt) { |
||||||
|
case 'date': |
||||||
|
case 'datetime': |
||||||
|
case 'timestamp': |
||||||
|
case 'time': |
||||||
|
return false; |
||||||
|
|
||||||
|
default: |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static getAbstractType(col): any { |
||||||
|
switch (col.dt?.replace(/\(\d+\)$/).toLowerCase()) { |
||||||
|
case 'bigint': |
||||||
|
case 'tinyint': |
||||||
|
case 'int': |
||||||
|
case 'smallint': |
||||||
|
return 'integer'; |
||||||
|
case 'decimal': |
||||||
|
case 'double': |
||||||
|
case 'float': |
||||||
|
return 'float'; |
||||||
|
case 'boolean': |
||||||
|
return 'boolean'; |
||||||
|
case 'timestamp': |
||||||
|
case 'timestamp_ntz': |
||||||
|
return 'datetime'; |
||||||
|
case 'date': |
||||||
|
return 'date'; |
||||||
|
case 'string': |
||||||
|
return 'string'; |
||||||
|
} |
||||||
|
return 'string'; |
||||||
|
} |
||||||
|
|
||||||
|
static getUIType(col): any { |
||||||
|
switch (this.getAbstractType(col)) { |
||||||
|
case 'integer': |
||||||
|
return 'Number'; |
||||||
|
case 'boolean': |
||||||
|
return 'Checkbox'; |
||||||
|
case 'float': |
||||||
|
return 'Decimal'; |
||||||
|
case 'date': |
||||||
|
return 'Date'; |
||||||
|
case 'datetime': |
||||||
|
return 'CreatedTime'; |
||||||
|
case 'time': |
||||||
|
return 'Time'; |
||||||
|
case 'year': |
||||||
|
return 'Year'; |
||||||
|
case 'string': |
||||||
|
return 'SingleLineText'; |
||||||
|
case 'text': |
||||||
|
return 'LongText'; |
||||||
|
case 'blob': |
||||||
|
return 'Attachment'; |
||||||
|
case 'enum': |
||||||
|
return 'SingleSelect'; |
||||||
|
case 'set': |
||||||
|
return 'MultiSelect'; |
||||||
|
case 'json': |
||||||
|
return 'LongText'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static getDataTypeForUiType(col: { uidt: UITypes; }, idType?: IDType) { |
||||||
|
const colProp: any = {}; |
||||||
|
switch (col.uidt) { |
||||||
|
case 'ID': |
||||||
|
{ |
||||||
|
const isAutoIncId = idType === 'AI'; |
||||||
|
const isAutoGenId = idType === 'AG'; |
||||||
|
colProp.dt = isAutoGenId ? 'varchar' : 'integer'; |
||||||
|
colProp.pk = true; |
||||||
|
colProp.un = isAutoIncId; |
||||||
|
colProp.ai = isAutoIncId; |
||||||
|
colProp.rqd = true; |
||||||
|
colProp.meta = isAutoGenId ? { ag: 'nc' } : undefined; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 'ForeignKey': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'SingleLineText': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'LongText': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'Attachment': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'GeoData': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'Checkbox': |
||||||
|
colProp.dt = 'boolean'; |
||||||
|
break; |
||||||
|
case 'MultiSelect': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'SingleSelect': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'Collaborator': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'Date': |
||||||
|
colProp.dt = 'date'; |
||||||
|
|
||||||
|
break; |
||||||
|
case 'Year': |
||||||
|
colProp.dt = 'number'; |
||||||
|
break; |
||||||
|
case 'Time': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'PhoneNumber': |
||||||
|
colProp.dt = 'string'; |
||||||
|
colProp.validate = { |
||||||
|
func: ['isMobilePhone'], |
||||||
|
args: [''], |
||||||
|
msg: ['Validation failed : isMobilePhone'], |
||||||
|
}; |
||||||
|
break; |
||||||
|
case 'Email': |
||||||
|
colProp.dt = 'string'; |
||||||
|
colProp.validate = { |
||||||
|
func: ['isEmail'], |
||||||
|
args: [''], |
||||||
|
msg: ['Validation failed : isEmail'], |
||||||
|
}; |
||||||
|
break; |
||||||
|
case 'URL': |
||||||
|
colProp.dt = 'string'; |
||||||
|
colProp.validate = { |
||||||
|
func: ['isURL'], |
||||||
|
args: [''], |
||||||
|
msg: ['Validation failed : isURL'], |
||||||
|
}; |
||||||
|
break; |
||||||
|
case 'Number': |
||||||
|
colProp.dt = 'int'; |
||||||
|
break; |
||||||
|
case 'Decimal': |
||||||
|
colProp.dt = 'decimal'; |
||||||
|
break; |
||||||
|
case 'Currency': |
||||||
|
colProp.dt = 'double'; |
||||||
|
colProp.validate = { |
||||||
|
func: ['isCurrency'], |
||||||
|
args: [''], |
||||||
|
msg: ['Validation failed : isCurrency'], |
||||||
|
}; |
||||||
|
break; |
||||||
|
case 'Percent': |
||||||
|
colProp.dt = 'double'; |
||||||
|
break; |
||||||
|
case 'Duration': |
||||||
|
colProp.dt = 'decimal'; |
||||||
|
break; |
||||||
|
case 'Rating': |
||||||
|
colProp.dt = 'int'; |
||||||
|
colProp.cdf = '0'; |
||||||
|
break; |
||||||
|
case 'Formula': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'Rollup': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'Count': |
||||||
|
colProp.dt = 'int'; |
||||||
|
break; |
||||||
|
case 'Lookup': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'DateTime': |
||||||
|
colProp.dt = 'datetime'; |
||||||
|
break; |
||||||
|
case 'CreatedTime': |
||||||
|
colProp.dt = 'datetime'; |
||||||
|
break; |
||||||
|
case 'LastModifiedTime': |
||||||
|
colProp.dt = 'datetime'; |
||||||
|
break; |
||||||
|
case 'AutoNumber': |
||||||
|
colProp.dt = 'int'; |
||||||
|
break; |
||||||
|
case 'Barcode': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'Button': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
case 'JSON': |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
default: |
||||||
|
colProp.dt = 'string'; |
||||||
|
break; |
||||||
|
} |
||||||
|
return colProp; |
||||||
|
} |
||||||
|
|
||||||
|
static getDataTypeListForUiType(col: { uidt: UITypes; }, idType?: IDType) { |
||||||
|
switch (col.uidt) { |
||||||
|
case 'ID': |
||||||
|
if (idType === 'AG') { |
||||||
|
return ['character', 'text', 'varchar']; |
||||||
|
} else if (idType === 'AI') { |
||||||
|
return [ |
||||||
|
'int', |
||||||
|
'integer', |
||||||
|
'tinyint', |
||||||
|
'smallint', |
||||||
|
'mediumint', |
||||||
|
'bigint', |
||||||
|
'int2', |
||||||
|
'int8', |
||||||
|
]; |
||||||
|
} else { |
||||||
|
return dbTypes; |
||||||
|
} |
||||||
|
case 'ForeignKey': |
||||||
|
return dbTypes; |
||||||
|
case 'SingleLineText': |
||||||
|
case 'LongText': |
||||||
|
case 'Attachment': |
||||||
|
case 'Collaborator': |
||||||
|
case 'GeoData': |
||||||
|
return ['string']; |
||||||
|
|
||||||
|
case 'Checkbox': |
||||||
|
return [ |
||||||
|
'boolean', |
||||||
|
]; |
||||||
|
|
||||||
|
case 'MultiSelect': |
||||||
|
return ['string']; |
||||||
|
|
||||||
|
case 'SingleSelect': |
||||||
|
return ['string']; |
||||||
|
|
||||||
|
case 'Year': |
||||||
|
return [ |
||||||
|
'int', |
||||||
|
]; |
||||||
|
|
||||||
|
case 'Time': |
||||||
|
return [ |
||||||
|
'string', |
||||||
|
]; |
||||||
|
|
||||||
|
case 'PhoneNumber': |
||||||
|
case 'Email': |
||||||
|
return ['string']; |
||||||
|
|
||||||
|
case 'URL': |
||||||
|
return ['string']; |
||||||
|
|
||||||
|
case 'Number': |
||||||
|
return [ |
||||||
|
'int', |
||||||
|
]; |
||||||
|
|
||||||
|
case 'Decimal': |
||||||
|
return ['decimal', 'float', 'double']; |
||||||
|
|
||||||
|
case 'Currency': |
||||||
|
return [ |
||||||
|
'decimal', |
||||||
|
]; |
||||||
|
|
||||||
|
case 'Percent': |
||||||
|
return [ |
||||||
|
'decimal', |
||||||
|
]; |
||||||
|
|
||||||
|
case 'Duration': |
||||||
|
return [ |
||||||
|
'decimal', |
||||||
|
]; |
||||||
|
|
||||||
|
case 'Rating': |
||||||
|
return [ |
||||||
|
'int', |
||||||
|
]; |
||||||
|
|
||||||
|
case 'Formula': |
||||||
|
return ['string']; |
||||||
|
|
||||||
|
case 'Rollup': |
||||||
|
return ['string']; |
||||||
|
|
||||||
|
case 'Count': |
||||||
|
return [ |
||||||
|
'int', |
||||||
|
]; |
||||||
|
|
||||||
|
case 'Lookup': |
||||||
|
return ['string']; |
||||||
|
|
||||||
|
case 'Date': |
||||||
|
return ['date']; |
||||||
|
|
||||||
|
case 'DateTime': |
||||||
|
case 'CreatedTime': |
||||||
|
case 'LastModifiedTime': |
||||||
|
return ['datetime']; |
||||||
|
|
||||||
|
case 'AutoNumber': |
||||||
|
return [ |
||||||
|
'int', |
||||||
|
]; |
||||||
|
|
||||||
|
case 'Barcode': |
||||||
|
return ['string']; |
||||||
|
|
||||||
|
case 'Geometry': |
||||||
|
return ['string']; |
||||||
|
case 'JSON': |
||||||
|
return ['string']; |
||||||
|
|
||||||
|
case 'Button': |
||||||
|
default: |
||||||
|
return dbTypes; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static getUnsupportedFnList() { |
||||||
|
return [ |
||||||
|
'LOG', |
||||||
|
'EXP', |
||||||
|
'POWER', |
||||||
|
'SQRT', |
||||||
|
'XOR', |
||||||
|
'REGEX_MATCH', |
||||||
|
'REGEX_EXTRACT', |
||||||
|
'REGEX_REPLACE', |
||||||
|
'VALUE', |
||||||
|
'COUNTA', |
||||||
|
'COUNT', |
||||||
|
'ROUNDDOWN', |
||||||
|
'ROUNDUP', |
||||||
|
'DATESTR', |
||||||
|
'DAY', |
||||||
|
'MONTH', |
||||||
|
'HOUR', |
||||||
|
]; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
import commonFns from './commonFns'; |
||||||
|
import type { MapFnArgs } from '../mapFunctionName'; |
||||||
|
|
||||||
|
const databricks = { |
||||||
|
...commonFns, |
||||||
|
AND: async (args: MapFnArgs) => { |
||||||
|
return { |
||||||
|
builder: args.knex.raw( |
||||||
|
`CASE WHEN ${args.knex |
||||||
|
.raw( |
||||||
|
`${( |
||||||
|
await Promise.all( |
||||||
|
args.pt.arguments.map(async (ar) => |
||||||
|
(await args.fn(ar, '', 'AND')).builder.toQuery(), |
||||||
|
), |
||||||
|
) |
||||||
|
).join(' AND ')}`,
|
||||||
|
) |
||||||
|
.wrap('(', ')') |
||||||
|
.toQuery()} THEN TRUE ELSE FALSE END ${args.colAlias}`,
|
||||||
|
), |
||||||
|
}; |
||||||
|
}, |
||||||
|
OR: async (args: MapFnArgs) => { |
||||||
|
return { |
||||||
|
builder: args.knex.raw( |
||||||
|
`CASE WHEN ${args.knex |
||||||
|
.raw( |
||||||
|
`${( |
||||||
|
await Promise.all( |
||||||
|
args.pt.arguments.map(async (ar) => |
||||||
|
(await args.fn(ar, '', 'OR')).builder.toQuery(), |
||||||
|
), |
||||||
|
) |
||||||
|
).join(' OR ')}`,
|
||||||
|
) |
||||||
|
.wrap('(', ')') |
||||||
|
.toQuery()} THEN TRUE ELSE FALSE END ${args.colAlias}`,
|
||||||
|
), |
||||||
|
}; |
||||||
|
}, |
||||||
|
}; |
||||||
|
|
||||||
|
export default databricks; |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,3 @@ |
|||||||
|
const queries = {}; |
||||||
|
|
||||||
|
export default queries; |
@ -0,0 +1,509 @@ |
|||||||
|
import BaseModelXcMeta from './BaseModelXcMeta'; |
||||||
|
|
||||||
|
class ModelXcMetaDatabricks extends BaseModelXcMeta { |
||||||
|
/** |
||||||
|
* @param dir |
||||||
|
* @param filename |
||||||
|
* @param ctx |
||||||
|
* @param ctx.tn |
||||||
|
* @param ctx.columns |
||||||
|
* @param ctx.relations |
||||||
|
*/ |
||||||
|
constructor({ dir, filename, ctx }) { |
||||||
|
super({ dir, filename, ctx }); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Prepare variables used in code template |
||||||
|
*/ |
||||||
|
prepare() { |
||||||
|
const data: any = {}; |
||||||
|
|
||||||
|
/* run of simple variable */ |
||||||
|
data.tn = this.ctx.tn; |
||||||
|
data.dbType = this.ctx.dbType; |
||||||
|
|
||||||
|
/* for complex code provide a func and args - do derivation within the func cbk */ |
||||||
|
data.columns = { |
||||||
|
func: this._renderXcColumns.bind(this), |
||||||
|
args: { |
||||||
|
tn: this.ctx.tn, |
||||||
|
columns: this.ctx.columns, |
||||||
|
relations: this.ctx.relations, |
||||||
|
}, |
||||||
|
}; |
||||||
|
|
||||||
|
/* for complex code provide a func and args - do derivation within the func cbk */ |
||||||
|
data.hasMany = { |
||||||
|
func: this.renderXcHasMany.bind(this), |
||||||
|
args: { |
||||||
|
tn: this.ctx.tn, |
||||||
|
columns: this.ctx.columns, |
||||||
|
hasMany: this.ctx.hasMany, |
||||||
|
}, |
||||||
|
}; |
||||||
|
|
||||||
|
/* for complex code provide a func and args - do derivation within the func cbk */ |
||||||
|
data.belongsTo = { |
||||||
|
func: this.renderXcBelongsTo.bind(this), |
||||||
|
args: { |
||||||
|
tn: this.ctx.tn, |
||||||
|
columns: this.ctx.columns, |
||||||
|
belongsTo: this.ctx.belongsTo, |
||||||
|
}, |
||||||
|
}; |
||||||
|
|
||||||
|
return data; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @param args |
||||||
|
* @param args.columns |
||||||
|
* @param args.relations |
||||||
|
* @returns {string} |
||||||
|
* @private |
||||||
|
*/ |
||||||
|
_renderXcColumns(args) { |
||||||
|
let str = '[\r\n'; |
||||||
|
|
||||||
|
for (let i = 0; i < args.columns.length; ++i) { |
||||||
|
str += `{\r\n`; |
||||||
|
str += `cn: '${args.columns[i].cn}',\r\n`; |
||||||
|
str += `type: '${this._getAbstractType(args.columns[i])}',\r\n`; |
||||||
|
str += `dt: '${args.columns[i].dt}',\r\n`; |
||||||
|
if (args.columns[i].rqd) str += `rqd: ${args.columns[i].rqd},\r\n`; |
||||||
|
|
||||||
|
if (args.columns[i].cdf) { |
||||||
|
str += `default: "${args.columns[i].cdf}",\r\n`; |
||||||
|
str += `columnDefault: "${args.columns[i].cdf}",\r\n`; |
||||||
|
} |
||||||
|
|
||||||
|
if (args.columns[i].un) str += `un: ${args.columns[i].un},\r\n`; |
||||||
|
|
||||||
|
if (args.columns[i].pk) str += `pk: ${args.columns[i].pk},\r\n`; |
||||||
|
|
||||||
|
if (args.columns[i].ai) str += `ai: ${args.columns[i].ai},\r\n`; |
||||||
|
|
||||||
|
if (args.columns[i].dtxp) str += `dtxp: "${args.columns[i].dtxp}",\r\n`; |
||||||
|
|
||||||
|
if (args.columns[i].dtxs) str += `dtxs: ${args.columns[i].dtxs},\r\n`; |
||||||
|
|
||||||
|
str += `validate: {
|
||||||
|
func: [], |
||||||
|
args: [], |
||||||
|
msg: [] |
||||||
|
},`;
|
||||||
|
str += `},\r\n`; |
||||||
|
} |
||||||
|
|
||||||
|
str += ']\r\n'; |
||||||
|
|
||||||
|
return str; |
||||||
|
} |
||||||
|
|
||||||
|
_getAbstractType(column) { |
||||||
|
return this.getAbstractType(column); |
||||||
|
} |
||||||
|
|
||||||
|
getUIDataType(col): any { |
||||||
|
const dt = col.dt.toLowerCase(); |
||||||
|
switch (dt) { |
||||||
|
case 'bigint': |
||||||
|
case 'tinyint': |
||||||
|
case 'int': |
||||||
|
case 'smallint': |
||||||
|
return 'Number'; |
||||||
|
case 'decimal': |
||||||
|
case 'double': |
||||||
|
case 'float': |
||||||
|
return 'Decimal'; |
||||||
|
case 'boolean': |
||||||
|
return 'Checkbox'; |
||||||
|
case 'timestamp': |
||||||
|
case 'timestamp_ntz': |
||||||
|
return 'DateTime'; |
||||||
|
|
||||||
|
case 'date': |
||||||
|
return 'Date'; |
||||||
|
|
||||||
|
case 'string': |
||||||
|
return 'LongText'; |
||||||
|
|
||||||
|
case 'interval': |
||||||
|
case 'void': |
||||||
|
case 'binary': |
||||||
|
default: |
||||||
|
return 'SpecificDBType'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
getAbstractType(col): any { |
||||||
|
const dt = col.dt.toLowerCase(); |
||||||
|
switch (dt) { |
||||||
|
case 'bigint': |
||||||
|
case 'tinyint': |
||||||
|
case 'decimal': |
||||||
|
case 'double': |
||||||
|
case 'float': |
||||||
|
case 'int': |
||||||
|
case 'smallint': |
||||||
|
return 'integer'; |
||||||
|
case 'binary': |
||||||
|
return dt; |
||||||
|
case 'boolean': |
||||||
|
return 'boolean'; |
||||||
|
case 'interval': |
||||||
|
case 'void': |
||||||
|
return dt; |
||||||
|
|
||||||
|
case 'timestamp': |
||||||
|
case 'timestamp_ntz': |
||||||
|
return 'datetime'; |
||||||
|
|
||||||
|
case 'date': |
||||||
|
return 'date'; |
||||||
|
|
||||||
|
case 'string': |
||||||
|
return 'string'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
_sequelizeGetType(column) { |
||||||
|
let str = ''; |
||||||
|
switch (column.dt) { |
||||||
|
case 'int': |
||||||
|
str += `DataTypes.INTEGER(${column.dtxp})`; |
||||||
|
if (column.un) str += `.UNSIGNED`; |
||||||
|
break; |
||||||
|
case 'tinyint': |
||||||
|
str += `DataTypes.INTEGER(${column.dtxp})`; |
||||||
|
if (column.un) str += `.UNSIGNED`; |
||||||
|
|
||||||
|
break; |
||||||
|
case 'smallint': |
||||||
|
str += `DataTypes.INTEGER(${column.dtxp})`; |
||||||
|
if (column.un) str += `.UNSIGNED`; |
||||||
|
|
||||||
|
break; |
||||||
|
case 'mediumint': |
||||||
|
str += `DataTypes.INTEGER(${column.dtxp})`; |
||||||
|
if (column.un) str += `.UNSIGNED`; |
||||||
|
|
||||||
|
break; |
||||||
|
case 'bigint': |
||||||
|
str += `DataTypes.BIGINT`; |
||||||
|
if (column.un) str += `.UNSIGNED`; |
||||||
|
|
||||||
|
break; |
||||||
|
case 'float': |
||||||
|
str += `DataTypes.FLOAT`; |
||||||
|
break; |
||||||
|
case 'decimal': |
||||||
|
str += `DataTypes.DECIMAL`; |
||||||
|
break; |
||||||
|
case 'double': |
||||||
|
str += `"DOUBLE(${column.dtxp},${column.ns})"`; |
||||||
|
break; |
||||||
|
case 'real': |
||||||
|
str += `DataTypes.FLOAT`; |
||||||
|
break; |
||||||
|
case 'bit': |
||||||
|
str += `DataTypes.BOOLEAN`; |
||||||
|
break; |
||||||
|
case 'boolean': |
||||||
|
str += `DataTypes.STRING(45)`; |
||||||
|
break; |
||||||
|
case 'serial': |
||||||
|
str += `DataTypes.BIGINT`; |
||||||
|
break; |
||||||
|
case 'date': |
||||||
|
str += `DataTypes.DATEONLY`; |
||||||
|
break; |
||||||
|
case 'datetime': |
||||||
|
str += `DataTypes.DATE`; |
||||||
|
break; |
||||||
|
case 'timestamp': |
||||||
|
str += `DataTypes.DATE`; |
||||||
|
break; |
||||||
|
case 'time': |
||||||
|
str += `DataTypes.TIME`; |
||||||
|
break; |
||||||
|
case 'year': |
||||||
|
str += `"YEAR"`; |
||||||
|
break; |
||||||
|
case 'char': |
||||||
|
str += `DataTypes.CHAR(${column.dtxp})`; |
||||||
|
break; |
||||||
|
case 'varchar': |
||||||
|
str += `DataTypes.STRING(${column.dtxp})`; |
||||||
|
break; |
||||||
|
case 'nchar': |
||||||
|
str += `DataTypes.CHAR(${column.dtxp})`; |
||||||
|
break; |
||||||
|
case 'text': |
||||||
|
str += `DataTypes.TEXT`; |
||||||
|
break; |
||||||
|
case 'tinytext': |
||||||
|
str += `DataTypes.TEXT`; |
||||||
|
break; |
||||||
|
case 'mediumtext': |
||||||
|
str += `DataTypes.TEXT`; |
||||||
|
break; |
||||||
|
case 'longtext': |
||||||
|
str += `DataTypes.TEXT`; |
||||||
|
break; |
||||||
|
case 'binary': |
||||||
|
str += `"BINARY(${column.dtxp})"`; |
||||||
|
break; |
||||||
|
case 'varbinary': |
||||||
|
str += `"VARBINARY(${column.dtxp})"`; |
||||||
|
break; |
||||||
|
case 'blob': |
||||||
|
str += `"BLOB"`; |
||||||
|
break; |
||||||
|
case 'tinyblob': |
||||||
|
str += `"TINYBLOB"`; |
||||||
|
break; |
||||||
|
case 'mediumblob': |
||||||
|
str += `"MEDIUMBLOB"`; |
||||||
|
break; |
||||||
|
case 'longblob': |
||||||
|
str += `"LONGBLOB"`; |
||||||
|
break; |
||||||
|
case 'enum': |
||||||
|
str += `DataTypes.ENUM(${column.dtxp})`; |
||||||
|
break; |
||||||
|
case 'set': |
||||||
|
str += `"SET(${column.dtxp})"`; |
||||||
|
break; |
||||||
|
case 'geometry': |
||||||
|
str += `DataTypes.GEOMETRY`; |
||||||
|
break; |
||||||
|
case 'point': |
||||||
|
str += `"POINT"`; |
||||||
|
break; |
||||||
|
case 'linestring': |
||||||
|
str += `"LINESTRING"`; |
||||||
|
break; |
||||||
|
case 'polygon': |
||||||
|
str += `"POLYGON"`; |
||||||
|
break; |
||||||
|
case 'multipoint': |
||||||
|
str += `"MULTIPOINT"`; |
||||||
|
break; |
||||||
|
case 'multilinestring': |
||||||
|
str += `"MULTILINESTRING"`; |
||||||
|
break; |
||||||
|
case 'multipolygon': |
||||||
|
str += `"MULTIPOLYGON"`; |
||||||
|
break; |
||||||
|
case 'json': |
||||||
|
str += `DataTypes.JSON`; |
||||||
|
break; |
||||||
|
default: |
||||||
|
str += `"${column.dt}"`; |
||||||
|
break; |
||||||
|
} |
||||||
|
return str; |
||||||
|
} |
||||||
|
|
||||||
|
_sequelizeGetDefault(column) { |
||||||
|
let str = ''; |
||||||
|
switch (column.dt) { |
||||||
|
case 'int': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'tinyint': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'smallint': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'mediumint': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'bigint': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'float': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'decimal': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'double': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'real': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'bit': |
||||||
|
str += column.cdf ? column.cdf.split('b')[1] : column.cdf; |
||||||
|
break; |
||||||
|
case 'boolean': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'serial': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'date': |
||||||
|
str += `sequelize.literal('${column.cdf_sequelize}')`; |
||||||
|
break; |
||||||
|
case 'datetime': |
||||||
|
str += `sequelize.literal('${column.cdf_sequelize}')`; |
||||||
|
break; |
||||||
|
case 'timestamp': |
||||||
|
str += `sequelize.literal('${column.cdf_sequelize}')`; |
||||||
|
break; |
||||||
|
case 'time': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'year': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'char': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'varchar': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'nchar': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'text': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'tinytext': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'mediumtext': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'longtext': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'binary': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'varbinary': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'blob': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'tinyblob': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'mediumblob': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'longblob': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
case 'enum': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'set': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'geometry': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'point': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'linestring': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'polygon': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'multipoint': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'multilinestring': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'multipolygon': |
||||||
|
str += `'${column.cdf}'`; |
||||||
|
break; |
||||||
|
case 'json': |
||||||
|
str += column.cdf; |
||||||
|
break; |
||||||
|
} |
||||||
|
return str; |
||||||
|
} |
||||||
|
|
||||||
|
/* getXcColumnsObject(args) { |
||||||
|
const columnsArr = []; |
||||||
|
|
||||||
|
for (const column of args.columns) { |
||||||
|
const columnObj = { |
||||||
|
validate: { |
||||||
|
func: [], |
||||||
|
args: [], |
||||||
|
msg: [] |
||||||
|
}, |
||||||
|
cn: column.cn, |
||||||
|
_cn: column._cn || column.cn, |
||||||
|
type: this._getAbstractType(column), |
||||||
|
dt: column.dt, |
||||||
|
uidt: column.uidt || this._getUIDataType(column), |
||||||
|
uip: column.uip, |
||||||
|
uicn: column.uicn, |
||||||
|
...column |
||||||
|
}; |
||||||
|
|
||||||
|
if (column.rqd) { |
||||||
|
columnObj.rqd = column.rqd; |
||||||
|
} |
||||||
|
|
||||||
|
if (column.cdf) { |
||||||
|
columnObj.default = column.cdf; |
||||||
|
columnObj.columnDefault = column.cdf; |
||||||
|
} |
||||||
|
|
||||||
|
if (column.un) { |
||||||
|
columnObj.un = column.un; |
||||||
|
} |
||||||
|
|
||||||
|
if (column.pk) { |
||||||
|
columnObj.pk = column.pk; |
||||||
|
} |
||||||
|
|
||||||
|
if (column.ai) { |
||||||
|
columnObj.ai = column.ai; |
||||||
|
} |
||||||
|
|
||||||
|
if (column.dtxp) { |
||||||
|
columnObj.dtxp = column.dtxp; |
||||||
|
} |
||||||
|
|
||||||
|
if (column.dtxs) { |
||||||
|
columnObj.dtxs = column.dtxs; |
||||||
|
} |
||||||
|
|
||||||
|
columnsArr.push(columnObj); |
||||||
|
} |
||||||
|
|
||||||
|
this.mapDefaultDisplayValue(columnsArr); |
||||||
|
return columnsArr; |
||||||
|
}*/ |
||||||
|
|
||||||
|
/* getObject() { |
||||||
|
return { |
||||||
|
tn: this.ctx.tn, |
||||||
|
_tn: this.ctx._tn, |
||||||
|
columns: this.getXcColumnsObject(this.ctx), |
||||||
|
pks: [], |
||||||
|
hasMany: this.ctx.hasMany, |
||||||
|
belongsTo: this.ctx.belongsTo, |
||||||
|
dbType: this.ctx.dbType, |
||||||
|
type: this.ctx.type, |
||||||
|
} |
||||||
|
|
||||||
|
}*/ |
||||||
|
} |
||||||
|
|
||||||
|
export default ModelXcMetaDatabricks; |
Loading…
Reference in new issue