New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

json-schema-table

Package Overview
Dependencies
Maintainers
1
Versions
43
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

json-schema-table - npm Package Compare versions

Comparing version 1.0.9 to 1.0.10

10

package.json
{
"name": "json-schema-table",
"version": "1.0.9",
"version": "1.0.10",
"description": "Creates and maintains a SQL table structure",

@@ -25,7 +25,7 @@ "homepage": "",

"chai": "^3.4.1",
"eslint-config-google": "^0.7.1",
"eslint-config-google": "^0.9.1",
"gulp": "^3.9.1",
"gulp-coveralls": "^0.1.4",
"gulp-eslint": "^3.0.1",
"gulp-istanbul": "^1.1.1",
"gulp-eslint": "^4.0.0",
"gulp-istanbul": "^1.1.2",
"gulp-mocha": "3.0.1",

@@ -35,3 +35,3 @@ "gulp-nsp": "^2.4.1",

"mssql-cr-layer": "^2.0.0",
"pg-cr-layer": "^2.0.2",
"pg-cr-layer": "^2.0.3",
"pretty-hrtime": "^1.0.2"

@@ -38,0 +38,0 @@ },

@@ -96,2 +96,18 @@ /* eslint-disable max-len */

function getDbMetadata(dialect, tableName, dbSchemaName) {
function isRedshift() {
return new Promise(function(resolve, reject) {
if (dialect.db.dialect !== 'postgres') {
resolve(false);
} else {
dialect.db.isRedshift()
.then(function(res) {
resolve(res);
})
.catch(function(err) {
reject(err);
});
}
});
}
var dbToProperty = dialect.db.dialect === 'mssql' ? mssqlToProperty : postgresToProperty;

@@ -105,68 +121,79 @@ var metadata = {

var catalog = dialect.db.dialect === 'mssql' ? 'db_name()' : 'current_database()';
return dialect.db.query('SELECT pk.CONSTRAINT_NAME as constraint_name,pk.TABLE_NAME as table_name,' +
'pk.COLUMN_NAME as column_name,' +
'rfk.TABLE_NAME as ref_table_name,rfk.COLUMN_NAME as ref_column_name,' +
'c.DATA_TYPE as data_type,c.CHARACTER_MAXIMUM_LENGTH as character_maximum_length,' +
'c.NUMERIC_PRECISION as numeric_precision,c.NUMERIC_SCALE as numerico_scale ' +
'FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE as pk ' +
'INNER JOIN INFORMATION_SCHEMA.COLUMNS as c ON pk.COLUMN_NAME=c.COLUMN_NAME AND pk.TABLE_NAME=c.TABLE_NAME AND ' +
'pk.TABLE_CATALOG=c.TABLE_CATALOG AND pk.TABLE_SCHEMA=c.TABLE_SCHEMA ' +
'LEFT OUTER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as rk ON pk.CONSTRAINT_NAME=rk.CONSTRAINT_NAME AND ' +
'pk.TABLE_CATALOG=rk.CONSTRAINT_CATALOG AND pk.TABLE_SCHEMA=rk.CONSTRAINT_SCHEMA ' +
'LEFT OUTER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE as rfk ON rk.UNIQUE_CONSTRAINT_NAME=rfk.CONSTRAINT_NAME ' +
'AND pk.ORDINAL_POSITION=rfk.ORDINAL_POSITION AND ' +
'pk.TABLE_CATALOG=rfk.TABLE_CATALOG AND pk.TABLE_SCHEMA=rfk.TABLE_SCHEMA ' +
'WHERE pk.TABLE_CATALOG=' + catalog +
'AND pk.TABLE_SCHEMA=\'' + dbSchemaName + '\'' +
'ORDER BY pk.TABLE_NAME,pk.CONSTRAINT_NAME,pk.ORDINAL_POSITION')
.then(function(recordset) {
var constraints = {};
recordset.map(function(record) {
var constraint =
constraints[record.constraint_name] = constraints[record.constraint_name] || {
table: record.table_name,
references: record.ref_table_name,
columns: []
};
constraint.columns.push(dbToProperty(record));
});
return constraints;
})
.then(function(constraints) {
_.forEach(constraints, function(constraint, constraintName) {
var constraintType = constraintName.substr(0, 2).toLowerCase();
switch (constraintType) {
case 'pk':
metadata.tablesWithPrimaryKey[constraint.table] = constraint.columns;
break;
case 'fk':
var fk = metadata.tablesWithForeignKeys[constraint.table] =
metadata.tablesWithForeignKeys[constraint.table] || [];
fk.push({
table: constraint.references,
columns: constraint.columns
});
break;
case 'uk':
var uk = metadata.tablesWithUniqueKeys[constraint.table] =
metadata.tablesWithUniqueKeys[constraint.table] || [];
uk.push(constraint.columns);
break;
}
});
return dialect.db.query('SELECT COLUMN_NAME as column_name,IS_NULLABLE as is_nullable,' +
'DATA_TYPE as data_type,' +
'CHARACTER_MAXIMUM_LENGTH as character_maximum_length,NUMERIC_PRECISION as numeric_precision,' +
'NUMERIC_SCALE as numeric_scale FROM ' +
'INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=\'' + tableName + '\'' +
'AND TABLE_CATALOG=' + catalog +
'AND TABLE_SCHEMA=\'' + dbSchemaName + '\'');
})
.then(function(recordset) {
recordset.map(function(record) {
metadata.columns[record.column_name] =
dbToProperty(record);
});
return metadata;
return isRedshift()
.then(function(rs) {
if (!rs) {
return dialect.db.query('SELECT pk.CONSTRAINT_NAME as constraint_name,pk.TABLE_NAME as table_name,' +
'pk.COLUMN_NAME as column_name,' +
'rfk.TABLE_NAME as ref_table_name,rfk.COLUMN_NAME as ref_column_name,' +
'c.DATA_TYPE as data_type,c.CHARACTER_MAXIMUM_LENGTH as character_maximum_length,' +
'c.NUMERIC_PRECISION as numeric_precision,c.NUMERIC_SCALE as numerico_scale ' +
'FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE as pk ' +
'INNER JOIN INFORMATION_SCHEMA.COLUMNS as c ON pk.COLUMN_NAME=c.COLUMN_NAME AND pk.TABLE_NAME=c.TABLE_NAME AND ' +
'pk.TABLE_CATALOG=c.TABLE_CATALOG AND pk.TABLE_SCHEMA=c.TABLE_SCHEMA ' +
'LEFT OUTER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as rk ON pk.CONSTRAINT_NAME=rk.CONSTRAINT_NAME AND ' +
'pk.TABLE_CATALOG=rk.CONSTRAINT_CATALOG AND pk.TABLE_SCHEMA=rk.CONSTRAINT_SCHEMA ' +
'LEFT OUTER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE as rfk ON rk.UNIQUE_CONSTRAINT_NAME=rfk.CONSTRAINT_NAME ' +
'AND pk.ORDINAL_POSITION=rfk.ORDINAL_POSITION AND ' +
'pk.TABLE_CATALOG=rfk.TABLE_CATALOG AND pk.TABLE_SCHEMA=rfk.TABLE_SCHEMA ' +
'WHERE pk.TABLE_CATALOG=' + catalog +
'AND pk.TABLE_SCHEMA=\'' + dbSchemaName + '\'' +
'ORDER BY pk.TABLE_NAME,pk.CONSTRAINT_NAME,pk.ORDINAL_POSITION')
.then(function(recordset) {
var constraints = {};
recordset.map(function(record) {
if (!constraints[record.constraint_name]) {
constraints[record.constraint_name] = {
table: record.table_name,
references: record.ref_table_name,
columns: []
};
}
var constraint = constraints[record.constraint_name];
constraint.columns.push(dbToProperty(record));
});
return constraints;
});
} else {
// Redshift does not support PK or FK constraints so just return an empty array.
return Promise.resolve({});
}
})
.then(function(constraints) {
_.forEach(constraints, function(constraint, constraintName) {
var constraintType = constraintName.substr(0, 2).toLowerCase();
switch (constraintType) {
case 'pk':
metadata.tablesWithPrimaryKey[constraint.table] = constraint.columns;
break;
case 'fk':
var fk = metadata.tablesWithForeignKeys[constraint.table] =
metadata.tablesWithForeignKeys[constraint.table] || [];
fk.push({
table: constraint.references,
columns: constraint.columns
});
break;
case 'uk':
var uk = metadata.tablesWithUniqueKeys[constraint.table] =
metadata.tablesWithUniqueKeys[constraint.table] || [];
uk.push(constraint.columns);
break;
}
});
return dialect.db.query('SELECT COLUMN_NAME as column_name,IS_NULLABLE as is_nullable,' +
'DATA_TYPE as data_type,' +
'CHARACTER_MAXIMUM_LENGTH as character_maximum_length,NUMERIC_PRECISION as numeric_precision,' +
'NUMERIC_SCALE as numeric_scale FROM ' +
'INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=\'' + tableName + '\'' +
'AND TABLE_CATALOG=' + catalog +
'AND TABLE_SCHEMA=\'' + dbSchemaName + '\'');
})
.then(function(recordset) {
recordset.map(function(record) {
metadata.columns[record.column_name] =
dbToProperty(record);
});
return metadata;
});
}

@@ -707,7 +734,7 @@

var found = false;
var hash = (key.join('')).toLowerCase();
var hash = key.join('').toLowerCase();
_.forEach(existentKeys, function(uk) {
var ukHash = (uk.reduce(function(columns, column) {
var ukHash = uk.reduce(function(columns, column) {
return columns + column.name;
}, '')).toLowerCase();
}, '').toLowerCase();
if (hash === ukHash) {

@@ -714,0 +741,0 @@ found = true;

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc