Fixed an issue that would cause "text" fields to show up as varchar with length -1 in MS SQL (#6055)

Fixes #5944
This commit is contained in:
Rijk van Zanten
2021-06-03 22:35:07 -04:00
committed by GitHub
parent babe6cdc08
commit 85d33d9ffc
10 changed files with 63 additions and 48 deletions

View File

@@ -98,6 +98,11 @@ export default function getLocalType(
return 'decimal';
}
/** Handle MS SQL varchar(MAX) (eg TEXT) types */
if (column.data_type === 'nvarchar' && column.max_length === -1) {
return 'text';
}
if (field?.special?.includes('json')) return 'json';
if (field?.special?.includes('hash')) return 'hash';
if (field?.special?.includes('csv')) return 'csv';

View File

@@ -65,7 +65,7 @@ export const useCollectionsStore = createStore({
this.translateCollections();
},
translateCollections() {
this.state.collections = this.state.collections.map((collection: CollectionRaw) => {
this.state.collections = this.state.collections.map((collection: Collection) => {
let name: string | VueI18n.TranslateResult;
if (i18n.te(`collection_names.${collection.collection}`)) {

View File

@@ -30,5 +30,5 @@ export interface CollectionRaw {
export interface Collection extends CollectionRaw {
name: string | VueI18n.TranslateResult;
icon: string;
color: string | null;
color?: string | null;
}

88
package-lock.json generated
View File

@@ -54,17 +54,17 @@
},
"api": {
"name": "directus",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "GPL-3.0-only",
"dependencies": {
"@directus/app": "9.0.0-rc.71",
"@directus/drive": "9.0.0-rc.71",
"@directus/drive-azure": "9.0.0-rc.71",
"@directus/drive-gcs": "9.0.0-rc.71",
"@directus/drive-s3": "9.0.0-rc.71",
"@directus/format-title": "9.0.0-rc.71",
"@directus/schema": "9.0.0-rc.71",
"@directus/specs": "9.0.0-rc.71",
"@directus/app": "9.0.0-rc.72",
"@directus/drive": "9.0.0-rc.72",
"@directus/drive-azure": "9.0.0-rc.72",
"@directus/drive-gcs": "9.0.0-rc.72",
"@directus/drive-s3": "9.0.0-rc.72",
"@directus/format-title": "9.0.0-rc.72",
"@directus/schema": "9.0.0-rc.72",
"@directus/specs": "9.0.0-rc.72",
"@godaddy/terminus": "^4.7.2",
"argon2": "^0.28.1",
"async": "^3.2.0",
@@ -324,10 +324,10 @@
},
"app": {
"name": "@directus/app",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"devDependencies": {
"@directus/docs": "9.0.0-rc.71",
"@directus/format-title": "9.0.0-rc.71",
"@directus/docs": "9.0.0-rc.72",
"@directus/format-title": "9.0.0-rc.72",
"@fullcalendar/core": "^5.7.0",
"@fullcalendar/daygrid": "^5.7.0",
"@fullcalendar/interaction": "^5.7.0",
@@ -461,7 +461,7 @@
},
"docs": {
"name": "@directus/docs",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "ISC",
"devDependencies": {
"directory-tree": "^2.2.9",
@@ -50782,11 +50782,11 @@
},
"packages/cli": {
"name": "@directus/cli",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "MIT",
"dependencies": {
"@directus/format-title": "9.0.0-rc.71",
"@directus/sdk": "9.0.0-rc.71",
"@directus/format-title": "9.0.0-rc.72",
"@directus/sdk": "9.0.0-rc.72",
"@types/yargs": "^16.0.1",
"app-module-path": "^2.2.0",
"chalk": "^4.1.0",
@@ -51009,7 +51009,7 @@
}
},
"packages/create-directus-project": {
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "GPL-3.0-only",
"dependencies": {
"chalk": "^4.1.1",
@@ -51078,7 +51078,7 @@
},
"packages/drive": {
"name": "@directus/drive",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "MIT",
"dependencies": {
"fs-extra": "^10.0.0",
@@ -51097,11 +51097,11 @@
},
"packages/drive-azure": {
"name": "@directus/drive-azure",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "MIT",
"dependencies": {
"@azure/storage-blob": "^12.2.1",
"@directus/drive": "9.0.0-rc.71",
"@directus/drive": "9.0.0-rc.72",
"normalize-path": "^3.0.0"
},
"devDependencies": {
@@ -51142,10 +51142,10 @@
},
"packages/drive-gcs": {
"name": "@directus/drive-gcs",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "MIT",
"dependencies": {
"@directus/drive": "9.0.0-rc.71",
"@directus/drive": "9.0.0-rc.72",
"@google-cloud/storage": "^5.8.5",
"normalize-path": "^3.0.0"
},
@@ -51173,10 +51173,10 @@
},
"packages/drive-s3": {
"name": "@directus/drive-s3",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "MIT",
"dependencies": {
"@directus/drive": "9.0.0-rc.71",
"@directus/drive": "9.0.0-rc.72",
"aws-sdk": "^2.911.0",
"normalize-path": "^3.0.0"
},
@@ -51241,7 +51241,7 @@
},
"packages/format-title": {
"name": "@directus/format-title",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "MIT",
"devDependencies": {
"@rollup/plugin-commonjs": "^19.0.0",
@@ -51260,7 +51260,7 @@
},
"packages/gatsby-source-directus": {
"name": "@directus/gatsby-source-directus",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "MIT",
"dependencies": {
"@directus/sdk-js": "^9.0.0-rc.53",
@@ -53915,7 +53915,7 @@
},
"packages/schema": {
"name": "@directus/schema",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "GPL-3.0",
"dependencies": {
"knex-schema-inspector": "^1.3.0",
@@ -53928,7 +53928,7 @@
},
"packages/sdk": {
"name": "@directus/sdk",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "MIT",
"dependencies": {
"axios": "^0.21.1"
@@ -54156,7 +54156,7 @@
},
"packages/specs": {
"name": "@directus/specs",
"version": "9.0.0-rc.71",
"version": "9.0.0-rc.72",
"license": "GPL-3.0",
"dependencies": {
"openapi3-ts": "^2.0.1"
@@ -55787,8 +55787,8 @@
"@directus/app": {
"version": "file:app",
"requires": {
"@directus/docs": "9.0.0-rc.71",
"@directus/format-title": "9.0.0-rc.71",
"@directus/docs": "9.0.0-rc.72",
"@directus/format-title": "9.0.0-rc.72",
"@fullcalendar/core": "^5.7.0",
"@fullcalendar/daygrid": "^5.7.0",
"@fullcalendar/interaction": "^5.7.0",
@@ -55900,8 +55900,8 @@
"@directus/cli": {
"version": "file:packages/cli",
"requires": {
"@directus/format-title": "9.0.0-rc.71",
"@directus/sdk": "9.0.0-rc.71",
"@directus/format-title": "9.0.0-rc.72",
"@directus/sdk": "9.0.0-rc.72",
"@types/figlet": "^1.5.0",
"@types/fs-extra": "^9.0.11",
"@types/jest": "^26.0.23",
@@ -56129,7 +56129,7 @@
"version": "file:packages/drive-azure",
"requires": {
"@azure/storage-blob": "^12.2.1",
"@directus/drive": "9.0.0-rc.71",
"@directus/drive": "9.0.0-rc.72",
"@types/fs-extra": "^9.0.11",
"@types/jest": "^26.0.22",
"@types/node": "^15.9.0",
@@ -56165,7 +56165,7 @@
"@directus/drive-gcs": {
"version": "file:packages/drive-gcs",
"requires": {
"@directus/drive": "9.0.0-rc.71",
"@directus/drive": "9.0.0-rc.72",
"@google-cloud/storage": "^5.8.5",
"@lukeed/uuid": "^2.0.0",
"@types/fs-extra": "^9.0.11",
@@ -56191,7 +56191,7 @@
"@directus/drive-s3": {
"version": "file:packages/drive-s3",
"requires": {
"@directus/drive": "9.0.0-rc.71",
"@directus/drive": "9.0.0-rc.72",
"@lukeed/uuid": "^2.0.0",
"@types/fs-extra": "^9.0.11",
"@types/jest": "^26.0.22",
@@ -70968,14 +70968,14 @@
"directus": {
"version": "file:api",
"requires": {
"@directus/app": "9.0.0-rc.71",
"@directus/drive": "9.0.0-rc.71",
"@directus/drive-azure": "9.0.0-rc.71",
"@directus/drive-gcs": "9.0.0-rc.71",
"@directus/drive-s3": "9.0.0-rc.71",
"@directus/format-title": "9.0.0-rc.71",
"@directus/schema": "9.0.0-rc.71",
"@directus/specs": "9.0.0-rc.71",
"@directus/app": "9.0.0-rc.72",
"@directus/drive": "9.0.0-rc.72",
"@directus/drive-azure": "9.0.0-rc.72",
"@directus/drive-gcs": "9.0.0-rc.72",
"@directus/drive-s3": "9.0.0-rc.72",
"@directus/format-title": "9.0.0-rc.72",
"@directus/schema": "9.0.0-rc.72",
"@directus/specs": "9.0.0-rc.72",
"@godaddy/terminus": "^4.7.2",
"@keyv/redis": "^2.1.2",
"@types/async": "^3.2.6",

View File

@@ -14,6 +14,7 @@ export default class MSSQL extends KnexMSSQL implements SchemaInspector {
c.COLUMN_DEFAULT as default_value,
c.IS_NULLABLE as is_nullable,
c.DATA_TYPE as data_type,
c.CHARACTER_MAXIMUM_LENGTH as max_length,
pk.PK_SET as column_key,
COLUMNPROPERTY(OBJECT_ID(c.TABLE_SCHEMA + '.' + c.TABLE_NAME), c.COLUMN_NAME, 'IsIdentity') as is_identity
FROM

View File

@@ -13,6 +13,7 @@ export default class MySQL extends KnexMySQL implements SchemaInspector {
C.IS_NULLABLE as is_nullable,
C.COLUMN_TYPE as data_type,
C.COLUMN_KEY as column_key,
C.CHARACTER_MAXIMUM_LENGTH as max_length,
C.EXTRA as extra
FROM
INFORMATION_SCHEMA.COLUMNS AS C

View File

@@ -40,6 +40,7 @@ export default class Oracle extends KnexOracle implements SchemaInspector {
NUMERIC_PRECISION: number | null;
NUMERIC_SCALE: number | null;
COLUMN_KEY: string;
MAX_LENGTH: number | null;
};
type RawColumnLowercase = {
@@ -51,6 +52,7 @@ export default class Oracle extends KnexOracle implements SchemaInspector {
numeric_precision: number | null;
numeric_scale: number | null;
column_key: string;
max_length: number | null;
};
const columns = await this.knex.raw<RawColumn[]>(`
@@ -62,7 +64,8 @@ export default class Oracle extends KnexOracle implements SchemaInspector {
"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
"USER_CONSTRAINTS"."CONSTRAINT_TYPE" AS COLUMN_KEY,
"USER_TAB_COLUMNS"."CHAR_LENGTH" as MAX_LENGTH
FROM
"USER_TAB_COLUMNS"
LEFT JOIN "USER_CONS_COLUMNS" ON "USER_TAB_COLUMNS"."TABLE_NAME" = "USER_CONS_COLUMNS"."TABLE_NAME"

View File

@@ -15,6 +15,7 @@ export default class Postgres extends KnexPostgres implements SchemaInspector {
c.column_default as default_value,
c.is_nullable,
c.data_type,
c.character_maximum_length as max_length,
c.is_identity
FROM
information_schema.columns c

View File

@@ -1,4 +1,6 @@
import KnexSQLite from 'knex-schema-inspector/dist/dialects/sqlite';
import extractMaxLength from 'knex-schema-inspector/lib/utils/extract-max-length';
import extractType from 'knex-schema-inspector/lib/utils/extract-type';
import { SchemaOverview } from '../types/overview';
import { SchemaInspector } from '../types/schema';
@@ -39,7 +41,8 @@ export default class SQLite extends KnexSQLite implements SchemaInspector {
? 'AUTO_INCREMENT'
: column.dflt_value,
is_nullable: column.notnull == 0,
data_type: column.type,
data_type: extractType(column.type),
max_length: extractMaxLength(column.type),
numeric_precision: null,
numeric_scale: null,
};

View File

@@ -10,6 +10,7 @@ export type SchemaOverview = {
data_type: string;
numeric_precision: number | null;
numeric_scale: number | null;
max_length: number | null;
};
};
};