basic support for typeorm 0.1.0-alpha.50; package updates
This commit is contained in:
parent
7a1fb9aacf
commit
54fc6317d5
@ -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
|
||||
|
@ -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
1158
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
48
package.json
48
package.json
@ -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"
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
})
|
||||
})
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
})
|
||||
})
|
||||
|
@ -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);
|
||||
})
|
||||
})
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
});
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user