feat: query to fetch unique columns
Signed-off-by: Muhammad Aaqil <aaqilcs102@gmail.com>
This commit is contained in:
parent
ae3cf25e77
commit
7cd52a06f8
|
@ -1308,6 +1308,40 @@ DataSource.prototype.discoverPrimaryKeys = function(modelName, options, cb) {
|
||||||
return cb.promise;
|
return cb.promise;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Discover unique keys for a given modelName.
|
||||||
|
* Callback function return value is an object that can have the following properties:
|
||||||
|
*
|
||||||
|
*| Key | Type | Description |
|
||||||
|
*|-----|------|-------------|
|
||||||
|
*| owner |String | Table schema or owner (may be null). Owner defaults to current user.
|
||||||
|
*| tableName |String| Table name
|
||||||
|
*| columnName |String| Column name
|
||||||
|
* See [ID Properties](./Model-definition-JSON-file.html#id-properties) for more
|
||||||
|
* information.
|
||||||
|
* @param {String} modelName The model name
|
||||||
|
* @options {Object} options The options
|
||||||
|
* @param {Function} [cb] The callback function
|
||||||
|
* @returns {Promise} A promise with an array of Primary Keys (Property[])
|
||||||
|
*/
|
||||||
|
DataSource.prototype.discoverUniqueKeys = function(modelName, options, cb) {
|
||||||
|
this.freeze();
|
||||||
|
|
||||||
|
if (cb === undefined && typeof options === 'function') {
|
||||||
|
cb = options;
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
options = options || {};
|
||||||
|
cb = cb || utils.createPromiseCallback();
|
||||||
|
|
||||||
|
if (this.connector.discoverUniqueKeys) {
|
||||||
|
this.connector.discoverUniqueKeys(modelName, options, cb);
|
||||||
|
} else if (cb) {
|
||||||
|
process.nextTick(cb);
|
||||||
|
}
|
||||||
|
return cb.promise;
|
||||||
|
};
|
||||||
|
|
||||||
/*! Method will be completely removed in LoopBack.next
|
/*! Method will be completely removed in LoopBack.next
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
|
@ -1619,7 +1653,8 @@ DataSource.prototype.discoverSchemas = function(tableName, options, cb) {
|
||||||
|
|
||||||
const tasks = [
|
const tasks = [
|
||||||
this.discoverModelProperties.bind(this, tableName, options),
|
this.discoverModelProperties.bind(this, tableName, options),
|
||||||
this.discoverPrimaryKeys.bind(this, tableName, options)];
|
this.discoverPrimaryKeys.bind(this, tableName, options),
|
||||||
|
this.discoverUniqueKeys.bind(this, tableName, options)];
|
||||||
|
|
||||||
const followingRelations = options.associations || options.relations;
|
const followingRelations = options.associations || options.relations;
|
||||||
if (followingRelations) {
|
if (followingRelations) {
|
||||||
|
@ -1633,6 +1668,14 @@ DataSource.prototype.discoverSchemas = function(tableName, options, cb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const columns = results[0];
|
const columns = results[0];
|
||||||
|
const uniqueKeyArray = results[2] || [];
|
||||||
|
|
||||||
|
let uniqueKeys = [];
|
||||||
|
|
||||||
|
uniqueKeyArray.forEach(key => {
|
||||||
|
uniqueKeys.push(key['columnName']);
|
||||||
|
});
|
||||||
|
|
||||||
if (!columns || columns.length === 0) {
|
if (!columns || columns.length === 0) {
|
||||||
cb(new Error(g.f('Table \'%s\' does not exist.', tableName)));
|
cb(new Error(g.f('Table \'%s\' does not exist.', tableName)));
|
||||||
return cb.promise;
|
return cb.promise;
|
||||||
|
@ -1649,6 +1692,7 @@ DataSource.prototype.discoverSchemas = function(tableName, options, cb) {
|
||||||
debug('Primary keys: ', pks);
|
debug('Primary keys: ', pks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uniqueKeys = uniqueKeys.filter(item => !pks.hasOwnProperty(item));
|
||||||
const schema = {
|
const schema = {
|
||||||
name: nameMapper('table', tableName),
|
name: nameMapper('table', tableName),
|
||||||
options: {
|
options: {
|
||||||
|
@ -1677,6 +1721,9 @@ DataSource.prototype.discoverSchemas = function(tableName, options, cb) {
|
||||||
if (pks[item.columnName]) {
|
if (pks[item.columnName]) {
|
||||||
schema.properties[propName].id = pks[item.columnName];
|
schema.properties[propName].id = pks[item.columnName];
|
||||||
}
|
}
|
||||||
|
if (uniqueKeys.includes(propName)) {
|
||||||
|
schema.properties[propName]['index'] = {unique: true};
|
||||||
|
}
|
||||||
const dbSpecific = schema.properties[propName][dbType] = {
|
const dbSpecific = schema.properties[propName][dbType] = {
|
||||||
columnName: item.columnName,
|
columnName: item.columnName,
|
||||||
dataType: item.dataType,
|
dataType: item.dataType,
|
||||||
|
|
Loading…
Reference in New Issue