@directus/schema
Advanced tools
Comparing version 9.0.0-rc.45 to 9.0.0-rc.46
@@ -79,8 +79,8 @@ "use strict"; | ||
return __awaiter(this, void 0, void 0, function () { | ||
var columns, overview, _loop_1, _i, _b, column; | ||
return __generator(this, function (_c) { | ||
switch (_c.label) { | ||
case 0: return [4 /*yield*/, this.knex.raw("\n\t\t\tSELECT\n\t\t\t\tc.TABLE_NAME as table_name,\n\t\t\t\tc.COLUMN_NAME as column_name,\n\t\t\t\tc.COLUMN_DEFAULT as default_value,\n\t\t\t\tc.IS_NULLABLE as is_nullable,\n\t\t\t\tc.DATA_TYPE as data_type,\n\t\t\t\tpk.PK_SET as column_key\n\t\t\tFROM\n\t\t\t\t[" + this.knex.client.database() + "].INFORMATION_SCHEMA.COLUMNS as c\n\t\t\tLEFT JOIN (\n\t\t\t\tSELECT\n\t\t\t\t\tPK_SET = CASE WHEN CONSTRAINT_NAME LIKE '%pk%' THEN 'PRIMARY' ELSE NULL END\n\t\t\t\tFROM [" + this.knex.client.database() + "].INFORMATION_SCHEMA.KEY_COLUMN_USAGE\n\t\t\t) as pk\n\t\t\tON [c].[TABLE_NAME] = [pk].[CONSTRAINT_TABLE_NAME]\n\t\t\tAND [c].[TABLE_CATALOG] = [pk].[CONSTRAINT_CATALOG]\n\t\t\tAND [c].[COLUMN_NAME] = [pk].[CONSTRAINT_COLUMN_NAME]\n\t\t\t")]; | ||
var columns, overview, _loop_1, this_1, _i, columns_1, column; | ||
return __generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: return [4 /*yield*/, this.knex.raw("\n\t\t\tSELECT\n\t\t\t\tc.TABLE_NAME as table_name,\n\t\t\t\tc.COLUMN_NAME as column_name,\n\t\t\t\tc.COLUMN_DEFAULT as default_value,\n\t\t\t\tc.IS_NULLABLE as is_nullable,\n\t\t\t\tc.DATA_TYPE as data_type,\n\t\t\t\tpk.PK_SET as column_key\n\t\t\tFROM\n\t\t\t\t[" + this.knex.client.database() + "].INFORMATION_SCHEMA.COLUMNS as c\n\t\t\tLEFT JOIN (\n\t\t\t\tSELECT\n\t\t\t\t\tPK_SET = CASE WHEN CONSTRAINT_NAME LIKE '%pk%' THEN 'PRIMARY' ELSE NULL END,\n\t\t\t\t\tTABLE_NAME,\n\t\t\t\t\tCONSTRAINT_CATALOG,\n\t\t\t\t\tCOLUMN_NAME\n\t\t\t\tFROM [" + this.knex.client.database() + "].INFORMATION_SCHEMA.KEY_COLUMN_USAGE\n\t\t\t) as pk\n\t\t\tON [c].[TABLE_NAME] = [pk].[TABLE_NAME]\n\t\t\tAND [c].[TABLE_CATALOG] = [pk].[CONSTRAINT_CATALOG]\n\t\t\tAND [c].[COLUMN_NAME] = [pk].[COLUMN_NAME]\n\t\t\t")]; | ||
case 1: | ||
columns = _c.sent(); | ||
columns = _b.sent(); | ||
overview = {}; | ||
@@ -90,3 +90,3 @@ _loop_1 = function (column) { | ||
overview[column.table_name] = { | ||
primary: (_a = columns[0].find(function (nested) { | ||
primary: (_a = columns.find(function (nested) { | ||
return nested.table_name === column.table_name && nested.column_key === 'PRIMARY'; | ||
@@ -97,6 +97,7 @@ })) === null || _a === void 0 ? void 0 : _a.column_name, | ||
} | ||
overview[column.table_name].columns[column.column_name] = __assign(__assign({}, column), { is_nullable: column.is_nullable === 'YES' }); | ||
overview[column.table_name].columns[column.column_name] = __assign(__assign({}, column), { default_value: this_1.parseDefaultValue(column.default_value), is_nullable: column.is_nullable === 'YES' }); | ||
}; | ||
for (_i = 0, _b = columns[0]; _i < _b.length; _i++) { | ||
column = _b[_i]; | ||
this_1 = this; | ||
for (_i = 0, columns_1 = columns; _i < columns_1.length; _i++) { | ||
column = columns_1[_i]; | ||
_loop_1(column); | ||
@@ -103,0 +104,0 @@ } |
@@ -80,3 +80,3 @@ "use strict"; | ||
switch (_c.label) { | ||
case 0: return [4 /*yield*/, this.knex.raw("\n\t\t\tSELECT\n\t\t\t\tc.TABLE_NAME as table_name,\n\t\t\t\tc.COLUMN_NAME as column_name,\n\t\t\t\tc.DATA_DEFAULT as default_value,\n\t\t\t\tc.NULLABLE as is_nullable,\n\t\t\t\tc.DATA_TYPE as data_type,\n\t\t\t\tpk.CONSTRAINT_TYPE as column_key\n\t\t\tFROM DBA_TAB_COLUMNS as c\n\t\t\tLEFT JOIN all_constraints as pk\n\t\t\t\tON c.TABLE_NAME = pk.TABLE_NAME\n\t\t\t\tAND c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME\n\t\t\t\tAND c.OWNER = pk.OWNER\n\t\t\t")]; | ||
case 0: return [4 /*yield*/, this.knex.raw("\n\t\t\tSELECT\n\t\t\t\t\"USER_TAB_COLUMNS\".\"TABLE_NAME\" AS table_name,\n\t\t\t\t\"USER_TAB_COLUMNS\".\"COLUMN_NAME\" AS column_name,\n\t\t\t\t\"USER_TAB_COLUMNS\".\"DATA_DEFAULT\" AS default_value,\n\t\t\t\t\"USER_TAB_COLUMNS\".\"NULLABLE\" AS is_nullable,\n\t\t\t\t\"USER_TAB_COLUMNS\".\"DATA_TYPE\" AS data_type,\n\t\t\t\t\"USER_TAB_COLUMNS\".\"DATA_PRECISION\" AS numeric_precision,\n\t\t\t\t\"USER_TAB_COLUMNS\".\"DATA_SCALE\" AS numeric_scale,\n\t\t\t\t\"USER_CONSTRAINTS\".\"CONSTRAINT_TYPE\" AS column_key\n\t\t\tFROM\n\t\t\t\t\"USER_TAB_COLUMNS\"\n\t\t\t\tLEFT JOIN \"USER_CONS_COLUMNS\" ON \"USER_TAB_COLUMNS\".\"TABLE_NAME\" = \"USER_CONS_COLUMNS\".\"TABLE_NAME\"\n\t\t\t\t\tAND \"USER_TAB_COLUMNS\".\"COLUMN_NAME\" = \"USER_CONS_COLUMNS\".\"COLUMN_NAME\"\n\t\t\t\tLEFT JOIN \"USER_CONSTRAINTS\" ON \"USER_CONS_COLUMNS\".\"CONSTRAINT_NAME\" = \"USER_CONSTRAINTS\".\"CONSTRAINT_NAME\";\n\t\t")]; | ||
case 1: | ||
@@ -83,0 +83,0 @@ columns = _c.sent(); |
@@ -75,7 +75,7 @@ "use strict"; | ||
Postgres.prototype.overview = function () { | ||
var _a; | ||
var _a, _b; | ||
return __awaiter(this, void 0, void 0, function () { | ||
var _b, columnsResult, primaryKeysResult, columns, primaryKeys, overview, _loop_1, this_1, _i, columns_1, column; | ||
return __generator(this, function (_c) { | ||
switch (_c.label) { | ||
var _c, columnsResult, primaryKeysResult, columns, primaryKeys, overview, _loop_1, this_1, _i, columns_1, column; | ||
return __generator(this, function (_d) { | ||
switch (_d.label) { | ||
case 0: return [4 /*yield*/, Promise.all([ | ||
@@ -88,3 +88,3 @@ // Only select columns from BASE TABLEs to exclude views (Postgres views | ||
case 1: | ||
_b = _c.sent(), columnsResult = _b[0], primaryKeysResult = _b[1]; | ||
_c = _d.sent(), columnsResult = _c[0], primaryKeysResult = _c[1]; | ||
columns = columnsResult.rows; | ||
@@ -99,3 +99,5 @@ primaryKeys = primaryKeysResult.rows; | ||
}; | ||
overview[column.table_name].columns[column.column_name] = __assign(__assign({}, column), { default_value: this_1.parseDefaultValue(column.default_value), is_nullable: column.is_nullable === 'YES' }); | ||
overview[column.table_name].columns[column.column_name] = __assign(__assign({}, column), { default_value: ((_b = column.default_value) === null || _b === void 0 ? void 0 : _b.startsWith('nextval(')) | ||
? 'AUTO_INCREMENT' | ||
: this_1.parseDefaultValue(column.default_value), is_nullable: column.is_nullable === 'YES' }); | ||
}; | ||
@@ -102,0 +104,0 @@ this_1 = this; |
{ | ||
"name": "@directus/schema", | ||
"version": "9.0.0-rc.45", | ||
"version": "9.0.0-rc.46", | ||
"description": "Utility for extracting information about existing DB schema", | ||
@@ -48,5 +48,5 @@ "main": "dist/index.js", | ||
"dependencies": { | ||
"knex-schema-inspector": "^1.1.0" | ||
"knex-schema-inspector": "^1.2.0" | ||
}, | ||
"gitHead": "87ed604f1872ffb3c4b01a36a4a6554cd08fe385" | ||
"gitHead": "33f36d2485e12973145d292cdcf343b909f8ed82" | ||
} |
@@ -22,15 +22,20 @@ import KnexMSSQL from 'knex-schema-inspector/dist/dialects/mssql'; | ||
SELECT | ||
PK_SET = CASE WHEN CONSTRAINT_NAME LIKE '%pk%' THEN 'PRIMARY' ELSE NULL END | ||
PK_SET = CASE WHEN CONSTRAINT_NAME LIKE '%pk%' THEN 'PRIMARY' ELSE NULL END, | ||
TABLE_NAME, | ||
CONSTRAINT_CATALOG, | ||
COLUMN_NAME | ||
FROM [${this.knex.client.database()}].INFORMATION_SCHEMA.KEY_COLUMN_USAGE | ||
) as pk | ||
ON [c].[TABLE_NAME] = [pk].[CONSTRAINT_TABLE_NAME] | ||
ON [c].[TABLE_NAME] = [pk].[TABLE_NAME] | ||
AND [c].[TABLE_CATALOG] = [pk].[CONSTRAINT_CATALOG] | ||
AND [c].[COLUMN_NAME] = [pk].[CONSTRAINT_COLUMN_NAME] | ||
AND [c].[COLUMN_NAME] = [pk].[COLUMN_NAME] | ||
` | ||
); | ||
const overview: SchemaOverview = {}; | ||
for (const column of columns[0]) { | ||
for (const column of columns) { | ||
if (column.table_name in overview === false) { | ||
overview[column.table_name] = { | ||
primary: columns[0].find((nested: { column_key: string; table_name: string }) => { | ||
primary: columns.find((nested: { column_key: string; table_name: string }) => { | ||
return nested.table_name === column.table_name && nested.column_key === 'PRIMARY'; | ||
@@ -41,9 +46,12 @@ })?.column_name, | ||
} | ||
overview[column.table_name].columns[column.column_name] = { | ||
...column, | ||
default_value: this.parseDefaultValue(column.default_value), | ||
is_nullable: column.is_nullable === 'YES', | ||
}; | ||
} | ||
return overview; | ||
} | ||
} |
@@ -7,19 +7,21 @@ import KnexOracle from 'knex-schema-inspector/dist/dialects/oracledb'; | ||
async overview() { | ||
const columns = await this.knex.raw( | ||
` | ||
const columns = await this.knex.raw(` | ||
SELECT | ||
c.TABLE_NAME as table_name, | ||
c.COLUMN_NAME as column_name, | ||
c.DATA_DEFAULT as default_value, | ||
c.NULLABLE as is_nullable, | ||
c.DATA_TYPE as data_type, | ||
pk.CONSTRAINT_TYPE as column_key | ||
FROM DBA_TAB_COLUMNS as c | ||
LEFT JOIN all_constraints as pk | ||
ON c.TABLE_NAME = pk.TABLE_NAME | ||
AND c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME | ||
AND c.OWNER = pk.OWNER | ||
` | ||
); | ||
"USER_TAB_COLUMNS"."TABLE_NAME" AS table_name, | ||
"USER_TAB_COLUMNS"."COLUMN_NAME" AS column_name, | ||
"USER_TAB_COLUMNS"."DATA_DEFAULT" AS default_value, | ||
"USER_TAB_COLUMNS"."NULLABLE" AS is_nullable, | ||
"USER_TAB_COLUMNS"."DATA_TYPE" AS data_type, | ||
"USER_TAB_COLUMNS"."DATA_PRECISION" AS numeric_precision, | ||
"USER_TAB_COLUMNS"."DATA_SCALE" AS numeric_scale, | ||
"USER_CONSTRAINTS"."CONSTRAINT_TYPE" AS column_key | ||
FROM | ||
"USER_TAB_COLUMNS" | ||
LEFT JOIN "USER_CONS_COLUMNS" ON "USER_TAB_COLUMNS"."TABLE_NAME" = "USER_CONS_COLUMNS"."TABLE_NAME" | ||
AND "USER_TAB_COLUMNS"."COLUMN_NAME" = "USER_CONS_COLUMNS"."COLUMN_NAME" | ||
LEFT JOIN "USER_CONSTRAINTS" ON "USER_CONS_COLUMNS"."CONSTRAINT_NAME" = "USER_CONSTRAINTS"."CONSTRAINT_NAME"; | ||
`); | ||
const overview: SchemaOverview = {}; | ||
for (const column of columns[0]) { | ||
@@ -34,2 +36,3 @@ if (column.table_name in overview === false) { | ||
} | ||
overview[column.table_name].columns[column.column_name] = { | ||
@@ -36,0 +39,0 @@ ...column, |
@@ -67,3 +67,5 @@ import KnexPostgres from 'knex-schema-inspector/dist/dialects/postgres'; | ||
...column, | ||
default_value: this.parseDefaultValue(column.default_value), | ||
default_value: column.default_value?.startsWith('nextval(') | ||
? 'AUTO_INCREMENT' | ||
: this.parseDefaultValue(column.default_value), | ||
is_nullable: column.is_nullable === 'YES', | ||
@@ -70,0 +72,0 @@ }; |
@@ -19,6 +19,9 @@ import KnexSQLite from 'knex-schema-inspector/dist/dialects/sqlite'; | ||
).map(({ name }) => name); | ||
const tables = await this.tables(); | ||
const overview: SchemaOverview = {}; | ||
for (const table of tables) { | ||
const columns = await this.knex.raw<RawColumn[]>(`PRAGMA table_info(??)`, table); | ||
if (table in overview === false) { | ||
@@ -30,2 +33,3 @@ overview[table] = { | ||
} | ||
for (const column of columns) { | ||
@@ -32,0 +36,0 @@ overview[table].columns[column.name] = { |
112662
35
1874
Updatedknex-schema-inspector@^1.2.0