From 0b000042e2727446657e53c93e31a6eb981d2dbc Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 8 Apr 2017 01:45:00 +0200 Subject: [PATCH] changed PrimaryGeneratedColumn to Column, added decimal scale, precision --- src/drivers/MssqlDriver.ts | 18 ++++++++++-------- src/entity.mst | 7 +++---- src/models/ColumnInfo.ts | 6 ++++-- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index f0c88d5..1f171d3 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -12,12 +12,9 @@ export class MssqlDriver extends AbstractDriver { return; } let pIndex=primaryIndex //typescript error? pIndex:IndexInfo; primaryIndex:IndexInfo|undefined - let Column = entity.Columns.find(col=>col.name==pIndex.columns[0].name) - if(!Column){ - console.error(`Not found ${entity.EntityName} PK column.`) - return; - } - Column.isPrimary=true; + entity.Columns.forEach(col=>{ + if(pIndex.columns.some( cIndex=> cIndex.name==col.name)) col.isPrimary=true + }) }); } @@ -37,8 +34,11 @@ export class MssqlDriver extends AbstractDriver { } async GetCoulmnsFromEntity(entities: EntityInfo[]) { let request = new MSSQL.Request(this.Connection) - let response: { TABLE_NAME: string, COLUMN_NAME: string, COLUMN_DEFAULT: string, IS_NULLABLE: string, DATA_TYPE: string, CHARACTER_MAXIMUM_LENGTH: number }[] - = await request.query("SELECT TABLE_NAME,COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS"); + let response: { TABLE_NAME: string, COLUMN_NAME: string, COLUMN_DEFAULT: string, + IS_NULLABLE: string, DATA_TYPE: string, CHARACTER_MAXIMUM_LENGTH: number, + NUMERIC_PRECISION:number,NUMERIC_SCALE:number }[] + = await request.query(`SELECT TABLE_NAME,COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE, + DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE FROM INFORMATION_SCHEMA.COLUMNS`); entities.forEach((ent) => { response.filter((filterVal) => { return filterVal.TABLE_NAME == ent.EntityName; @@ -111,6 +111,8 @@ export class MssqlDriver extends AbstractDriver { case "decimal": colInfo.ts_type = "number" colInfo.sql_type = "decimal" + colInfo.numericPrecision=resp.NUMERIC_PRECISION + colInfo.numericScale=resp.NUMERIC_SCALE break; // case "xml": // colInfo.ts_type = "number" diff --git a/src/entity.mst b/src/entity.mst index e8c9dcb..b973030 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -1,4 +1,4 @@ -import {Index,Entity, PrimaryColumn,PrimaryGeneratedColumn, Column, OneToMany, ManyToOne, JoinTable} from "typeorm"; +import {Index,Entity, PrimaryColumn, Column, OneToMany, ManyToOne, JoinTable} from "typeorm"; @Entity() {{#Indexes}}{{^isPrimaryKey}}@Index("{{name}}",[{{#columns}}"{{name}}",{{/columns}}]{{#isUnique}},{unique:true}{{/isUnique}}) @@ -6,8 +6,7 @@ import {Index,Entity, PrimaryColumn,PrimaryGeneratedColumn, Column, OneToMany, M {{#Columns}} - {{^isPrimary}}@Column("{{sql_type}}",{ {{#is_nullable}}nullable:true,{{/is_nullable}}{{#char_max_lenght}}length:{{char_max_lenght}},{{/char_max_lenght}}}) - {{/isPrimary}}{{#isPrimary}}@PrimaryGeneratedColumn("{{sql_type}}") - {{/isPrimary}}{{name}}:{{ts_type}}; + @Column("{{sql_type}}",{ {{#is_nullable}}nullable:true,{{/is_nullable}}{{#char_max_lenght}}length:{{char_max_lenght}},{{/char_max_lenght}}{{#default}}default:{{default}},{{/default}}{{#numericPrecision}}precision:{numericPrecision},{{/numericPrecision}}{{#numericScale}}scale:{{numericScale}},{{/numericScale}}{{#isPrimary}}primary:{{isPrimary}},{{/isPrimary}}}) + {{name}}:{{ts_type}}; {{/Columns}} } \ No newline at end of file diff --git a/src/models/ColumnInfo.ts b/src/models/ColumnInfo.ts index c9f4f71..228d2cd 100644 --- a/src/models/ColumnInfo.ts +++ b/src/models/ColumnInfo.ts @@ -3,13 +3,15 @@ */ interface ColumnInfo { name: string, - default: string, + default: string|null, is_nullable: boolean, ts_type: 'number' | 'string' | 'boolean', sql_type: "string" | "text" | "number" | "integer" | "int" | "smallint" | "bigint" | "float" | "double" | "decimal" | "date" | "time" | "datetime" | "boolean" | "json", char_max_lenght: number|null, - isPrimary:boolean + isPrimary:boolean, + numericPrecision:number|null, + numericScale:number|null }