basic support for typeorm 0.1.0-alpha.50; package updates

This commit is contained in:
Kononnable 2017-10-08 21:48:21 +02:00
parent 7a1fb9aacf
commit 54fc6317d5
14 changed files with 965 additions and 564 deletions

View File

@ -13,7 +13,7 @@ services:
- docker
env:
- MSSQL_Skip=1 MSSQL_Host=localhost MSSQL_Port=1433 MSSQL_Username=sa MSSQL_Password=!Passw0rd MSSQL_Database=typeorm_mg POSTGRES_Skip=0 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=postgres POSTGRES_Password=!Passw0rd POSTGRES_Database=typeorm_mg MYSQL_Skip=0 MYSQL_Host=localhost MYSQL_Port=3306 MYSQL_Username=root MYSQL_Password=!Passw0rd MYSQL_Database=typeorm_mg MARIADB_Skip=0 MARIADB_Host=localhost MARIADB_Port=3307 MARIADB_Username=root MARIADB_Password=!Passw0rd MARIADB_Database=typeorm_mg
- MSSQL_Skip=0 MSSQL_Host=localhost MSSQL_Port=1433 MSSQL_Username=sa MSSQL_Password=!Passw0rd MSSQL_Database=typeorm_mg POSTGRES_Skip=0 POSTGRES_Host=localhost POSTGRES_Port=5432 POSTGRES_Username=postgres POSTGRES_Password=!Passw0rd POSTGRES_Database=typeorm_mg MYSQL_Skip=0 MYSQL_Host=localhost MYSQL_Port=3306 MYSQL_Username=root MYSQL_Password=!Passw0rd MYSQL_Database=typeorm_mg MARIADB_Skip=0 MARIADB_Host=localhost MARIADB_Port=3307 MARIADB_Username=root MARIADB_Password=!Passw0rd MARIADB_Database=typeorm_mg
before_install:
- sudo service mysql stop
@ -25,4 +25,4 @@ before_script:
- npm run typings-install
- npm link typescript
- tsc
# - sleep 20s
- sleep 30s

View File

@ -3,7 +3,7 @@ services:
# mysql
mysql:
image: "mysql:5.7.10"
image: "mysql:5.7.19"
container_name: "typeorm-mysql"
ports:
- "3306:3306"
@ -12,7 +12,7 @@ services:
# mariadb
mariadb:
image: "mariadb:10.1.16"
image: "mariadb:10.2.9"
container_name: "typeorm-mariadb"
ports:
- "3307:3306"
@ -21,7 +21,7 @@ services:
# postgres
postgres:
image: "postgres:9.6.1"
image: "postgres:10.0"
container_name: "typeorm-postgres"
ports:
- "5432:5432"
@ -29,11 +29,11 @@ services:
POSTGRES_PASSWORD: "!Passw0rd"
# mssql
# mssql:
# image: "microsoft/mssql-server-linux:ctp2-1"
# container_name: "typeorm-mssql"
# ports:
# - "1433:1433"
# environment:
# ACCEPT_EULA: "Y"
# SA_PASSWORD: "!Passw0rd"
mssql:
image: "microsoft/mssql-server-linux:2017-GA"
container_name: "typeorm-mssql"
ports:
- "1433:1433"
environment:
ACCEPT_EULA: "Y"
SA_PASSWORD: "!Passw0rd"

1158
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -24,38 +24,38 @@
},
"homepage": "https://github.com/Kononnable/typeorm-model-generator#readme",
"dependencies": {
"@types/mysql": "0.0.34",
"@types/pg": "^6.1.41",
"handlebars": "^4.0.10",
"mssql": "^3.3.0",
"mssql": "^4.0.4",
"mysql": "^2.14.1",
"pg": "^6.4.0",
"reflect-metadata": "^0.1.10",
"typeorm": "0.0.10",
"typescript": "^2.4.0",
"yargs": "^7.0.2"
"typeorm": "^0.1.0-alpha.50",
"typescript": "^2.5.3",
"yargs": "^9.0.1"
},
"devDependencies": {
"@types/chai": "^3.5.2",
"@types/chai-as-promised": "0.0.30",
"@types/chai-subset": "^1.3.0",
"@types/fs-extra": "^3.0.0",
"@types/handlebars": "^4.0.32",
"@types/mocha": "^2.2.41",
"@types/mssql": "^3.3.0",
"@types/node": "^7.0.39",
"@types/sinon": "^2.1.3",
"chai": "^3.5.0",
"chai-as-promised": "^6.0.0",
"chai-subset": "^1.5.0",
"codecov": "^2.1.0",
"@types/mysql": "0.0.34",
"@types/pg": "^6.1.41",
"@types/chai": "^4.0.4",
"@types/chai-as-promised": "7.1.0",
"@types/chai-subset": "^1.3.1",
"@types/fs-extra": "^4.0.2",
"@types/handlebars": "^4.0.36",
"@types/mocha": "^2.2.43",
"@types/mssql": "^4.0.4",
"@types/node": "^8.0.33",
"@types/sinon": "^2.3.5",
"chai": "^4.1.2",
"chai-as-promised": "^7.1.1",
"chai-subset": "^1.6.0",
"codecov": "^2.3.0",
"dotenv": "^4.0.0",
"fs-extra": "^3.0.1",
"fs-extra": "^4.0.2",
"istanbul": "^0.4.5",
"mocha": "^3.3.0",
"mocha": "^4.0.1",
"remap-istanbul": "^0.9.5",
"sinon": "^2.2.0",
"sinon-chai": "^2.10.0",
"typings": "^2.1.0"
"sinon": "^4.0.1",
"sinon-chai": "^2.14.0",
"typings": "^2.1.1"
}
}

View File

@ -59,6 +59,7 @@ export class MariaDbDriver extends AbstractDriver {
case "int":
colInfo.ts_type = "number"
colInfo.sql_type = "int"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "tinyint":
if (resp.NUMERIC_PRECISION == 3) {
@ -67,11 +68,13 @@ export class MariaDbDriver extends AbstractDriver {
} else {
colInfo.ts_type = "number"
colInfo.sql_type = "smallint"
}
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
}
break;
case "smallint":
colInfo.ts_type = "number"
colInfo.sql_type = "smallint"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "bit":
colInfo.ts_type = "boolean"
@ -80,10 +83,12 @@ export class MariaDbDriver extends AbstractDriver {
case "float":
colInfo.ts_type = "number"
colInfo.sql_type = "float"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "bigint":
colInfo.ts_type = "number"
colInfo.sql_type = "bigint"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "date":
colInfo.ts_type = "Date"
@ -115,11 +120,13 @@ export class MariaDbDriver extends AbstractDriver {
break;
case "varchar":
colInfo.ts_type = "string"
colInfo.sql_type = "string"
colInfo.sql_type = "varchar"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "nvarchar":
colInfo.ts_type = "string"
colInfo.sql_type = "string"
colInfo.sql_type = "nvarchar"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "money":
colInfo.ts_type = "number"
@ -128,16 +135,19 @@ export class MariaDbDriver extends AbstractDriver {
case "real":
colInfo.ts_type = "number"
colInfo.sql_type = "double"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "double":
colInfo.ts_type = "number"
colInfo.sql_type = "double"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "decimal":
colInfo.ts_type = "number"
colInfo.sql_type = "decimal"
colInfo.numericPrecision = resp.NUMERIC_PRECISION
colInfo.numericScale = resp.NUMERIC_SCALE
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "xml":
colInfo.ts_type = "string"
@ -147,7 +157,6 @@ export class MariaDbDriver extends AbstractDriver {
console.error("Unknown column type:" + resp.DATA_TYPE);
break;
}
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
if (colInfo.sql_type) ent.Columns.push(colInfo);
})
})

View File

@ -24,7 +24,7 @@ export class MssqlDriver extends AbstractDriver {
async GetAllTables(): Promise<EntityInfo[]> {
let request = new MSSQL.Request(this.Connection)
let response: { TABLE_SCHEMA: string, TABLE_NAME: string }[]
= await request.query("SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'");
= (await request.query("SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'")).recordset;
let ret: EntityInfo[] = <EntityInfo[]>[];
response.forEach((val) => {
let ent: EntityInfo = new EntityInfo();
@ -42,9 +42,9 @@ export class MssqlDriver extends AbstractDriver {
IS_NULLABLE: string, DATA_TYPE: string, CHARACTER_MAXIMUM_LENGTH: number,
NUMERIC_PRECISION: number, NUMERIC_SCALE: number, IsIdentity: number
}[]
= await request.query(`SELECT TABLE_NAME,COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE,
= (await request.query(`SELECT TABLE_NAME,COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE,
DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE,
COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') IsIdentity FROM INFORMATION_SCHEMA.COLUMNS`);
COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') IsIdentity FROM INFORMATION_SCHEMA.COLUMNS`)).recordset;
entities.forEach((ent) => {
response.filter((filterVal) => {
return filterVal.TABLE_NAME == ent.EntityName;
@ -58,14 +58,17 @@ export class MssqlDriver extends AbstractDriver {
case "int":
colInfo.ts_type = "number"
colInfo.sql_type = "int"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "tinyint":
colInfo.ts_type = "number"
colInfo.sql_type = "smallint"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "smallint":
colInfo.ts_type = "number"
colInfo.sql_type = "smallint"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "bit":
colInfo.ts_type = "boolean"
@ -74,10 +77,12 @@ export class MssqlDriver extends AbstractDriver {
case "float":
colInfo.ts_type = "number"
colInfo.sql_type = "float"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "bigint":
colInfo.ts_type = "number"
colInfo.sql_type = "bigint"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "date":
colInfo.ts_type = "Date"
@ -94,10 +99,12 @@ export class MssqlDriver extends AbstractDriver {
case "char":
colInfo.ts_type = "string"
colInfo.sql_type = "text"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "nchar":
colInfo.ts_type = "string"
colInfo.sql_type = "text"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "text":
colInfo.ts_type = "string"
@ -109,11 +116,13 @@ export class MssqlDriver extends AbstractDriver {
break;
case "varchar":
colInfo.ts_type = "string"
colInfo.sql_type = "string"
colInfo.sql_type = "varchar"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "nvarchar":
colInfo.ts_type = "string"
colInfo.sql_type = "string"
colInfo.sql_type = "nvarchar"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "money":
colInfo.ts_type = "number"
@ -122,12 +131,14 @@ export class MssqlDriver extends AbstractDriver {
case "real":
colInfo.ts_type = "number"
colInfo.sql_type = "double"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "decimal":
colInfo.ts_type = "number"
colInfo.sql_type = "decimal"
colInfo.numericPrecision = resp.NUMERIC_PRECISION
colInfo.numericScale = resp.NUMERIC_SCALE
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "xml":
colInfo.ts_type = "string"
@ -137,7 +148,7 @@ export class MssqlDriver extends AbstractDriver {
console.error("Unknown column type:" + resp.DATA_TYPE);
break;
}
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
if (colInfo.sql_type) ent.Columns.push(colInfo);
})
})
@ -149,7 +160,7 @@ export class MssqlDriver extends AbstractDriver {
TableName: string, IndexName: string, ColumnName: string, is_unique: number,
is_primary_key: number//, is_descending_key: number//, is_included_column: number
}[]
= await request.query(`SELECT
= (await request.query(`SELECT
TableName = t.name,
IndexName = ind.name,
ColumnName = col.name,
@ -168,7 +179,7 @@ INNER JOIN
WHERE
t.is_ms_shipped = 0
ORDER BY
t.name, ind.name, ind.index_id, ic.key_ordinal;`);
t.name, ind.name, ind.index_id, ic.key_ordinal;`)).recordset;
entities.forEach((ent) => {
response.filter((filterVal) => {
return filterVal.TableName == ent.EntityName;
@ -206,7 +217,7 @@ ORDER BY
onDelete: "RESTRICT" | "CASCADE" | "SET NULL",
onUpdate: "RESTRICT" | "CASCADE" | "SET NULL", object_id: number
}[]
= await request.query(`select
= (await request.query(`select
parentTable.name as TableWithForeignKey,
fkc.constraint_column_id as FK_PartNo,
parentColumn.name as ForeignKeyColumn,
@ -230,7 +241,7 @@ inner join
where
fk.is_disabled=0 and fk.is_ms_shipped=0
order by
TableWithForeignKey, FK_PartNo`);
TableWithForeignKey, FK_PartNo`)).recordset;
let relationsTemp: RelationTempInfo[] = <RelationTempInfo[]>[];
response.forEach((resp) => {
let rels = relationsTemp.find((val) => {
@ -342,7 +353,7 @@ order by
await this.Connection.close();
}
private Connection: MSSQL.Connection;
private Connection: MSSQL.ConnectionPool;
async ConnectToServer(database: string, server: string, port: number, user: string, password: string) {
let config: MSSQL.config = {
database: database,
@ -359,7 +370,7 @@ order by
let promise = new Promise<boolean>(
(resolve, reject) => {
this.Connection = new MSSQL.Connection(config, (err) => {
this.Connection = new MSSQL.ConnectionPool(config, (err) => {
if (!err) {
//Connection successfull
resolve(true)
@ -391,6 +402,6 @@ order by
async CheckIfDBExists(dbName: string): Promise<boolean> {
let request = new MSSQL.Request(this.Connection);
let resp = await request.query(`SELECT name FROM master.sys.databases WHERE name = N'${dbName}' `)
return resp.length > 0;
return resp.recordset.length > 0;
}
}

View File

@ -59,6 +59,7 @@ export class MysqlDriver extends AbstractDriver {
case "int":
colInfo.ts_type = "number"
colInfo.sql_type = "int"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "tinyint":
if (resp.NUMERIC_PRECISION == 3) {
@ -67,11 +68,13 @@ export class MysqlDriver extends AbstractDriver {
} else {
colInfo.ts_type = "number"
colInfo.sql_type = "smallint"
}
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
}
break;
case "smallint":
colInfo.ts_type = "number"
colInfo.sql_type = "smallint"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "bit":
colInfo.ts_type = "boolean"
@ -80,10 +83,12 @@ export class MysqlDriver extends AbstractDriver {
case "float":
colInfo.ts_type = "number"
colInfo.sql_type = "float"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "bigint":
colInfo.ts_type = "number"
colInfo.sql_type = "bigint"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "date":
colInfo.ts_type = "Date"
@ -115,11 +120,13 @@ export class MysqlDriver extends AbstractDriver {
break;
case "varchar":
colInfo.ts_type = "string"
colInfo.sql_type = "string"
colInfo.sql_type = "varchar"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "nvarchar":
colInfo.ts_type = "string"
colInfo.sql_type = "string"
colInfo.sql_type = "nvarchar"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "money":
colInfo.ts_type = "number"
@ -128,16 +135,19 @@ export class MysqlDriver extends AbstractDriver {
case "real":
colInfo.ts_type = "number"
colInfo.sql_type = "double"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "double":
colInfo.ts_type = "number"
colInfo.sql_type = "double"
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "decimal":
colInfo.ts_type = "number"
colInfo.sql_type = "decimal"
colInfo.numericPrecision = resp.NUMERIC_PRECISION
colInfo.numericScale = resp.NUMERIC_SCALE
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
break;
case "xml":
colInfo.ts_type = "string"
@ -147,7 +157,6 @@ export class MysqlDriver extends AbstractDriver {
console.error("Unknown column type:" + resp.DATA_TYPE);
break;
}
colInfo.char_max_lenght = resp.CHARACTER_MAXIMUM_LENGTH > 0 ? resp.CHARACTER_MAXIMUM_LENGTH : null;
if (colInfo.sql_type) ent.Columns.push(colInfo);
})
})

View File

@ -63,10 +63,12 @@ export class PostgresDriver extends AbstractDriver {
case "integer":
colInfo.ts_type = "number"
colInfo.sql_type = "int"
colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null;
break;
case "character varying":
colInfo.ts_type = "string"
colInfo.sql_type = "text"
colInfo.sql_type = "character varying"
colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null;
break;
case "text":
colInfo.ts_type = "string"
@ -75,10 +77,12 @@ export class PostgresDriver extends AbstractDriver {
case "smallint":
colInfo.ts_type = "number"
colInfo.sql_type = "smallint"
colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null;
break;
case "bigint":
colInfo.ts_type = "number"
colInfo.sql_type = "bigint"
colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null;
break;
case "date":
colInfo.ts_type = "Date"
@ -91,14 +95,17 @@ export class PostgresDriver extends AbstractDriver {
case "double precision":
colInfo.ts_type = "number"
colInfo.sql_type = "double"
colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null;
break;
case "real":
colInfo.ts_type = "number"
colInfo.sql_type = "float"
colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null;
break;
case "numeric":
colInfo.ts_type = "number"
colInfo.sql_type = "decimal"
colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length: null;
break;
case "time without time zone":
colInfo.ts_type = "Date"
@ -121,7 +128,7 @@ export class PostgresDriver extends AbstractDriver {
console.error("Unknown column type:" + resp.data_type);
break;
}
colInfo.char_max_lenght = resp.character_maximum_length > 0 ? resp.character_maximum_length : null;
if (colInfo.sql_type) ent.Columns.push(colInfo);
})
})

View File

@ -1,4 +1,5 @@
import { RelationInfo } from './RelationInfo'
import { ColumnType } from 'typeorm';
/**
* ColumnInfo
*/
@ -7,8 +8,7 @@ export class ColumnInfo {
default: string | null = null;
is_nullable: boolean = false;
ts_type: 'number' | 'string' | 'boolean' | 'Date' | 'any';
sql_type: "string" | "text" | "number" | "integer" | "int" | "smallint" | "bigint" |
"float" | "double" | "decimal" | "date" | "time" | "datetime" | "boolean" | "json";
sql_type: ColumnType;
char_max_lenght: number | null = null;
isPrimary: boolean = false;
is_generated: boolean = false;

View File

@ -5,7 +5,21 @@ import * as MSSQL from 'mssql'
import { EntityInfo } from './../../src/models/EntityInfo'
import { ColumnInfo } from './../../src/models/ColumnInfo'
import { RelationInfo } from './../../src/models/RelationInfo'
import { Table, IColumnMetadata } from "mssql";
class fakeResponse implements MSSQL.IResult<any> {
recordsets: MSSQL.IRecordSet<any>[];
recordset: MSSQL.IRecordSet<any>;
rowsAffected: number[];
output: { [key: string]: any; };
}
class fakeRecordset extends Array<any> implements MSSQL.IRecordSet<any>{
columns: IColumnMetadata;
toTable(): Table{
return new Table();
}
}
describe('MssqlDriver', function () {
let driver: MssqlDriver
@ -34,8 +48,11 @@ describe('MssqlDriver', function () {
.returns(
{
query: (q) => {
let response = <{ TABLE_SCHEMA: string, TABLE_NAME: string }[]>[];
response.push({ TABLE_SCHEMA: 'schema', TABLE_NAME: 'name' })
let response=new fakeResponse();
response.recordset=new fakeRecordset();
response.recordset.push({ TABLE_SCHEMA: 'schema', TABLE_NAME: 'name' })
return response;
}
}
@ -54,12 +71,9 @@ describe('MssqlDriver', function () {
.returns(
{
query: (q) => {
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, IsIdentity:number
}[]>[]
response.push({
let response=new fakeResponse();
response.recordset=new fakeRecordset();
response.recordset.push({
TABLE_NAME: 'name', CHARACTER_MAXIMUM_LENGTH: 0,
COLUMN_DEFAULT: 'a', COLUMN_NAME: 'name', DATA_TYPE: 'int',
IS_NULLABLE: 'YES', NUMERIC_PRECISION: 0, NUMERIC_SCALE: 0,

View File

@ -1,9 +1,9 @@
import {Column, Entity,PrimaryColumn,Index} from "typeorm";
import {Column, Entity,PrimaryGeneratedColumn,Index,Generated} from "typeorm";
@Entity("Post")
export class Post {
@PrimaryColumn("int", { generated: true })
@PrimaryGeneratedColumn()
id: number;
@Column()

View File

@ -2,7 +2,7 @@ import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn, Index } f
@Entity("EverythingEntity")
export class EverythingEntity {
//TODO: change to check column types per database engine
@PrimaryGeneratedColumn()
id: number;
@ -30,11 +30,11 @@ export class EverythingEntity {
@Column("bigint")
bigintColumn: number;
@Column("float")
floatColumn: number;
// @Column("float")
// floatColumn: number;
@Column("double")
doubleColumn: number;
// @Column("double")
// doubleColumn: number;
@Column("decimal")
decimalColumn: number;
@ -48,14 +48,14 @@ export class EverythingEntity {
@Column("time")
timeColumn: Date;
@Column("boolean")
isBooleanColumn: boolean;
// @Column("boolean")
// isBooleanColumn: boolean;
@Column("boolean")
isSecondBooleanColumn: boolean;
// @Column("boolean")
// isSecondBooleanColumn: boolean;
@Column("json")
jsonColumn: any;
// @Column("json")
// jsonColumn: any;
// @Column()
// alsoJson: any;

View File

@ -6,7 +6,6 @@ import path = require('path')
import { Engine } from "./../../src/Engine";
import { AbstractDriver } from "./../../src/drivers/AbstractDriver";
import { MssqlDriver } from "./../../src/drivers/MssqlDriver";
import { DriverType } from "typeorm/driver/DriverOptions";
import { expect } from "chai";
import * as Sinon from 'sinon'
import { EntityFileToJson } from "../utils/EntityFileToJson";
@ -28,7 +27,7 @@ describe("integration tests", async function () {
let examplesPathTS = path.resolve(process.cwd(), 'test/integration/examples')
let files = fs.readdirSync(examplesPathTS)
let dbDrivers: DriverType[] = []
let dbDrivers: string[] = []
if (process.env.POSTGRES_Skip == '0') dbDrivers.push('postgres')
if (process.env.MYSQL_Skip == '0') dbDrivers.push('mysql')
if (process.env.MARIADB_Skip == '0') dbDrivers.push('mariadb')
@ -107,23 +106,22 @@ async function createMSSQLModels(filesOrgPath: string, resultsPath: string): Pro
let driver: AbstractDriver;
driver = new MssqlDriver();
await driver.ConnectToServer(`master`, process.env.MSSQL_Host, process.env.MSSQL_Port, process.env.MSSQL_Username, process.env.MSSQL_Password);
await driver.ConnectToServer(`master`, String(process.env.MSSQL_Host), Number(process.env.MSSQL_Port), String(process.env.MSSQL_Username), String(process.env.MSSQL_Password));
if (! await driver.CheckIfDBExists(process.env.MSSQL_Database))
await driver.CreateDB(process.env.MSSQL_Database);
if (! await driver.CheckIfDBExists(String(process.env.MSSQL_Database)))
await driver.CreateDB(String(process.env.MSSQL_Database));
await driver.DisconnectFromServer();
let connOpt: ConnectionOptions = {
driver: {
database: process.env.MSSQL_Database,
host: process.env.MSSQL_Host,
password: process.env.MSSQL_Password,
type: 'mssql',
username: process.env.MSSQL_Username,
port: process.env.MSSQL_Port
},
dropSchemaOnConnection: true,
autoSchemaSync: true,
database: String(process.env.MSSQL_Database),
host: String(process.env.MSSQL_Host),
password: String(process.env.MSSQL_Password),
type: 'mssql',
username: String(process.env.MSSQL_Username),
port: Number(process.env.MSSQL_Port),
dropSchema: true,
synchronize: true,
entities: [path.resolve(filesOrgPath, '*.js')],
}
let conn = await createConnection(connOpt)
@ -135,11 +133,11 @@ async function createMSSQLModels(filesOrgPath: string, resultsPath: string): Pro
driver = new MssqlDriver();
let engine = new Engine(
driver, {
host: process.env.MSSQL_Host,
port: process.env.MSSQL_Port,
databaseName: process.env.MSSQL_Database,
user: process.env.MSSQL_Username,
password: process.env.MSSQL_Password,
host: String(process.env.MSSQL_Host),
port: Number(process.env.MSSQL_Port),
databaseName: String(process.env.MSSQL_Database),
user: String(process.env.MSSQL_Username),
password: String(process.env.MSSQL_Password),
databaseType: 'mssql',
resultsPath: resultsPath
});
@ -151,23 +149,21 @@ async function createMSSQLModels(filesOrgPath: string, resultsPath: string): Pro
async function createPostgresModels(filesOrgPath: string, resultsPath: string): Promise<Engine> {
let driver: AbstractDriver;
driver = new PostgresDriver();
await driver.ConnectToServer(`postgres`, process.env.POSTGRES_Host, process.env.POSTGRES_Port, process.env.POSTGRES_Username, process.env.POSTGRES_Password);
await driver.ConnectToServer(`postgres`, String(process.env.POSTGRES_Host), Number(process.env.POSTGRES_Port), String(process.env.POSTGRES_Username), String(process.env.POSTGRES_Password));
if (! await driver.CheckIfDBExists(process.env.POSTGRES_Database))
await driver.CreateDB(process.env.POSTGRES_Database);
if (! await driver.CheckIfDBExists(String(process.env.POSTGRES_Database)))
await driver.CreateDB(String(process.env.POSTGRES_Database));
await driver.DisconnectFromServer();
let connOpt: ConnectionOptions = {
driver: {
database: process.env.POSTGRES_Database,
host: process.env.POSTGRES_Host,
password: process.env.POSTGRES_Password,
type: 'postgres',
username: process.env.POSTGRES_Username,
port: process.env.POSTGRES_Port
},
dropSchemaOnConnection: true,
autoSchemaSync: true,
database: String(process.env.POSTGRES_Database),
host: String(process.env.POSTGRES_Host),
password: String(process.env.POSTGRES_Password),
type: 'postgres',
username: String(process.env.POSTGRES_Username),
port: Number(process.env.POSTGRES_Port),
dropSchema: true,
synchronize: true,
entities: [path.resolve(filesOrgPath, '*.js')],
}
let conn = await createConnection(connOpt)
@ -178,11 +174,11 @@ async function createPostgresModels(filesOrgPath: string, resultsPath: string):
driver = new PostgresDriver();
let engine = new Engine(
driver, {
host: process.env.POSTGRES_Host,
port: process.env.POSTGRES_Port,
databaseName: process.env.POSTGRES_Database,
user: process.env.POSTGRES_Username,
password: process.env.POSTGRES_Password,
host: String(process.env.POSTGRES_Host),
port: Number(process.env.POSTGRES_Port),
databaseName: String(process.env.POSTGRES_Database),
user: String(process.env.POSTGRES_Username),
password: String(process.env.POSTGRES_Password),
databaseType: 'postgres',
resultsPath: resultsPath
});
@ -195,23 +191,21 @@ async function createPostgresModels(filesOrgPath: string, resultsPath: string):
async function createMysqlModels(filesOrgPath: string, resultsPath: string): Promise<Engine> {
let driver: AbstractDriver;
driver = new MysqlDriver();
await driver.ConnectToServer(`mysql`, process.env.MYSQL_Host, process.env.MYSQL_Port, process.env.MYSQL_Username, process.env.MYSQL_Password);
await driver.ConnectToServer(`mysql`, String(process.env.MYSQL_Host), Number(process.env.MYSQL_Port), String(process.env.MYSQL_Username), String(process.env.MYSQL_Password));
if (! await driver.CheckIfDBExists(process.env.MYSQL_Database))
await driver.CreateDB(process.env.MYSQL_Database);
if (! await driver.CheckIfDBExists(String(process.env.MYSQL_Database)))
await driver.CreateDB(String(process.env.MYSQL_Database));
await driver.DisconnectFromServer();
let connOpt: ConnectionOptions = {
driver: {
database: process.env.MYSQL_Database,
host: process.env.MYSQL_Host,
password: process.env.MYSQL_Password,
type: 'mysql',
username: process.env.MYSQL_Username,
port: process.env.MYSQL_Port
},
dropSchemaOnConnection: true,
autoSchemaSync: true,
database: String(process.env.MYSQL_Database),
host: String(process.env.MYSQL_Host),
password: String(process.env.MYSQL_Password),
type: 'mysql',
username: String(process.env.MYSQL_Username),
port: Number(process.env.MYSQL_Port),
dropSchema: true,
synchronize: true,
entities: [path.resolve(filesOrgPath, '*.js')],
}
let conn = await createConnection(connOpt)
@ -222,11 +216,11 @@ async function createMysqlModels(filesOrgPath: string, resultsPath: string): Pro
driver = new MysqlDriver();
let engine = new Engine(
driver, {
host: process.env.MYSQL_Host,
port: process.env.MYSQL_Port,
databaseName: process.env.MYSQL_Database,
user: process.env.MYSQL_Username,
password: process.env.MYSQL_Password,
host: String(process.env.MYSQL_Host),
port: Number(process.env.MYSQL_Port),
databaseName: String(process.env.MYSQL_Database),
user: String(process.env.MYSQL_Username),
password: String(process.env.MYSQL_Password),
databaseType: 'mysql',
resultsPath: resultsPath
});
@ -238,23 +232,22 @@ async function createMysqlModels(filesOrgPath: string, resultsPath: string): Pro
async function createMariaDBModels(filesOrgPath: string, resultsPath: string): Promise<Engine> {
let driver: AbstractDriver;
driver = new MariaDbDriver();
await driver.ConnectToServer(`mysql`, process.env.MARIADB_Host, process.env.MARIADB_Port, process.env.MARIADB_Username, process.env.MARIADB_Password);
await driver.ConnectToServer(`mysql`, String(process.env.MARIADB_Host), Number(process.env.MARIADB_Port), String(process.env.MARIADB_Username), String(process.env.MARIADB_Password));
if (! await driver.CheckIfDBExists(process.env.MARIADB_Database))
await driver.CreateDB(process.env.MARIADB_Database);
if (! await driver.CheckIfDBExists(String(process.env.MARIADB_Database)))
await driver.CreateDB(String(process.env.MARIADB_Database));
await driver.DisconnectFromServer();
let connOpt: ConnectionOptions = {
driver: {
database: process.env.MARIADB_Database,
host: process.env.MARIADB_Host,
password: process.env.MARIADB_Password,
type: 'mariadb',
username: process.env.MARIADB_Username,
port: process.env.MARIADB_Port
},
dropSchemaOnConnection: true,
autoSchemaSync: true,
database: String(process.env.MARIADB_Database),
host: String(process.env.MARIADB_Host),
password: String(process.env.MARIADB_Password),
type: 'mariadb',
username: String(process.env.MARIADB_Username),
port: Number(process.env.MARIADB_Port),
dropSchema: true,
synchronize: true,
entities: [path.resolve(filesOrgPath, '*.js')],
}
let conn = await createConnection(connOpt)
@ -265,11 +258,11 @@ async function createMariaDBModels(filesOrgPath: string, resultsPath: string): P
driver = new MariaDbDriver();
let engine = new Engine(
driver, {
host: process.env.MARIADB_Host,
port: process.env.MARIADB_Port,
databaseName: process.env.MARIADB_Database,
user: process.env.MARIADB_Username,
password: process.env.MARIADB_Password,
host: String(process.env.MARIADB_Host),
port: Number(process.env.MARIADB_Port),
databaseName: String(process.env.MARIADB_Database),
user: String(process.env.MARIADB_Username),
password: String(process.env.MARIADB_Password),
databaseType: 'mariadb',
resultsPath: resultsPath
});

View File

@ -271,6 +271,20 @@ export class EntityFileToJson {
console.log(`[EntityFileToJson:convert] Line not recognized in entity ${retVal.entityName}:`)
console.log(`${trimmedLine}`)
}
retVal.columns=retVal.columns.map(col=>{
if (col.columnName.endsWith('Id'))
col.columnName=col.columnName.substr(0,col.columnName.length-2)
return col;
})
retVal.indicies=retVal.indicies.map(ind=>{
ind.columnNames=ind.columnNames.map(colName=>{
if (colName.endsWith('Id'))
colName=colName.substr(0,colName.length-2)
return colName;
})
return ind;
})
return retVal;
}
isPartOfMultilineStatement(statement: string) {