diff --git a/node_modules/loopback-connector-mysql/lib/discovery.js b/node_modules/loopback-connector-mysql/lib/discovery.js index 615c54d..728feb7 100644 --- a/node_modules/loopback-connector-mysql/lib/discovery.js +++ b/node_modules/loopback-connector-mysql/lib/discovery.js @@ -157,34 +157,87 @@ function mixinDiscovery(MySQL, mysql) { MySQL.prototype.buildQueryColumns = function(schema, table, options = {}) { let sql = null; if (schema) { - sql = paginateSQL('SELECT table_schema AS "owner",' + - ' table_name AS "tableName",' + - ' column_name AS "columnName",' + - ' data_type AS "dataType",' + - ' character_maximum_length AS "dataLength",' + - ' numeric_precision AS "dataPrecision",' + - ' numeric_scale AS "dataScale",' + - ' column_type AS "columnType",' + - ' is_nullable = \'YES\' AS "nullable",' + - ' CASE WHEN extra LIKE \'%auto_increment%\' THEN 1 ELSE 0 END AS "generated"' + - ' FROM information_schema.columns' + - ' WHERE table_schema=' + mysql.escape(schema) + - (table ? ' AND table_name=' + mysql.escape(table) : ''), - 'table_name, ordinal_position', {}); + sql = paginateSQL( + `SELECT + cols.table_schema AS "owner", + cols.table_name AS "tableName", + cols.column_name AS "columnName", + cols.data_type AS "dataType", + cols.character_maximum_length AS "dataLength", + cols.numeric_precision AS "dataPrecision", + cols.numeric_scale AS "dataScale", + cols.column_type AS "columnType", + cols.is_nullable = 'YES' AS "nullable", + CASE WHEN cols.extra LIKE '%auto_increment%' THEN 1 ELSE 0 END AS "generated", + indexes.index_name AS "indexName", + indexes.non_unique AS "nonUnique", + indexes.seq_in_index AS "seqInIndex", + indexes.cardinality AS "cardinality", + indexes.index_type AS "indexType", + CASE WHEN fk.column_name IS NOT NULL THEN 1 ELSE 0 END AS "isForeignKey" + FROM + information_schema.columns cols + LEFT JOIN + information_schema.statistics indexes + ON + cols.table_schema = indexes.table_schema + AND cols.table_name = indexes.table_name + AND cols.column_name = indexes.column_name + LEFT JOIN + information_schema.KEY_COLUMN_USAGE fk + ON + cols.table_schema = fk.table_schema + AND cols.table_name = fk.table_name + AND cols.column_name = fk.column_name + AND fk.referenced_table_name IS NOT NULL + WHERE + cols.table_schema = ${mysql.escape(schema)} + ${table ? ' AND cols.table_name = ' + mysql.escape(table) : ''} + `, + 'cols.table_name, cols.ordinal_position', + {}, + ); } else { - sql = paginateSQL('SELECT table_schema AS "owner",' + - ' table_name AS "tableName",' + - ' column_name AS "columnName",' + - ' data_type AS "dataType",' + - ' character_maximum_length AS "dataLength",' + - ' numeric_precision AS "dataPrecision",' + - ' numeric_scale AS "dataScale",' + - ' column_type AS "columnType",' + - ' is_nullable = \'YES\' AS "nullable",' + - ' CASE WHEN extra LIKE \'%auto_increment%\' THEN 1 ELSE 0 END AS "generated"' + - ' FROM information_schema.columns' + - (table ? ' WHERE table_name=' + mysql.escape(table) : ''), - 'table_name, ordinal_position', {}); + sql = paginateSQL( + `SELECT + cols.table_schema AS "owner", + cols.table_name AS "tableName", + cols.column_name AS "columnName", + cols.data_type AS "dataType", + cols.character_maximum_length AS "dataLength", + cols.numeric_precision AS "dataPrecision", + cols.numeric_scale AS "dataScale", + cols.column_type AS "columnType", + cols.is_nullable = 'YES' AS "nullable", + CASE WHEN cols.extra LIKE '%auto_increment%' THEN 1 ELSE 0 END AS "generated", + indexes.index_name AS "indexName", + indexes.seq_in_index AS "indexColumnOrder", + indexes.non_unique AS "nonUnique", + indexes.cardinality AS "cardinality", + indexes.index_type AS "indexType", + CASE WHEN fk.column_name IS NOT NULL THEN 1 ELSE 0 END AS "isForeignKey" + FROM + information_schema.columns AS cols + LEFT JOIN + information_schema.statistics AS indexes + ON + cols.table_schema = indexes.table_schema + AND cols.table_name = indexes.table_name + AND cols.column_name = indexes.column_name + LEFT JOIN + information_schema.KEY_COLUMN_USAGE AS fk + ON + cols.table_schema = fk.table_schema + AND cols.table_name = fk.table_name + AND cols.column_name = fk.column_name + AND fk.referenced_table_name IS NOT NULL + WHERE + cols.table_schema = ${mysql.escape(schema)} + ${table ? ' AND cols.table_name = ' + mysql.escape(table) : ''} + `, + 'cols.table_name, cols.ordinal_position', + {}, + ); } if (options.orderBy) { sql += ' ORDER BY ' + options.orderBy;