58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
module.exports = Self => {
|
|
/**
|
|
* Returns a set of allowed values defined on table scheme
|
|
* @param {String} column - Model or Table column name
|
|
* @return {Array} - Array of set values
|
|
*/
|
|
Self.getSetValues = async function(column) {
|
|
let model = this.app.models[this.modelName].definition;
|
|
let properties = model.properties;
|
|
let columnName;
|
|
let tableName = this.modelName;
|
|
let schema = null;
|
|
|
|
if (model.settings && model.settings.mysql) {
|
|
let tableSplit = model.settings.mysql.table.split('.');
|
|
tableName = tableSplit.pop();
|
|
schema = tableSplit.pop() || null;
|
|
}
|
|
|
|
if (properties[column]) {
|
|
columnName = column;
|
|
|
|
if (properties[column].mysql)
|
|
columnName = properties[column].mysql.columnName;
|
|
}
|
|
|
|
let findColumn = Object.keys(properties).find(prop => {
|
|
return properties[prop].mysql && properties[prop].mysql.columnName === column;
|
|
});
|
|
|
|
if (findColumn)
|
|
columnName = properties[findColumn].mysql.columnName;
|
|
|
|
let type = await this.rawSql(
|
|
`SELECT DISTINCT column_type FROM information_schema.columns
|
|
WHERE table_name = ?
|
|
AND table_schema = IFNULL(?, DATABASE())
|
|
AND column_name = ?`,
|
|
[tableName, schema, columnName]
|
|
);
|
|
|
|
if (!type) return;
|
|
|
|
let setValues;
|
|
setValues = type[0].column_type;
|
|
setValues = setValues.replace(/set\((.*)\)/i, '$1');
|
|
setValues = setValues.replace(/'/g, '');
|
|
setValues = setValues.match(new RegExp(/(\w+)+/, 'ig'));
|
|
|
|
let values = [];
|
|
setValues.forEach(setValue => {
|
|
values.push({value: setValue});
|
|
});
|
|
|
|
return values;
|
|
};
|
|
};
|