OracleDB support #9
This commit is contained in:
parent
4c6cfe58cf
commit
d0fe49b9b8
@ -45,5 +45,5 @@ services:
|
||||
# ports:
|
||||
# - "1521:1521"
|
||||
# environment:
|
||||
# DB_SID: "ORCLCDB"
|
||||
# SYS_PASSWORD: "Oradoc_db1"
|
||||
# DB_SID: "sys"
|
||||
# SYS_PASSWORD: "ORCLCDB"
|
||||
|
6
package-lock.json
generated
6
package-lock.json
generated
@ -6056,9 +6056,9 @@
|
||||
}
|
||||
},
|
||||
"oracledb": {
|
||||
"version": "2.0.15",
|
||||
"resolved": "https://registry.npmjs.org/oracledb/-/oracledb-2.0.15.tgz",
|
||||
"integrity": "sha1-9+IBtp+ngjUIFV6fNKumXVdCbx0="
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/oracledb/-/oracledb-2.2.0.tgz",
|
||||
"integrity": "sha512-ywwalyryeJYb5dr1JScyPcNxCeN0zExrKLtorSdptBZqhfS5Dp9KLgGOExc+XMMfEejXGtC/RfiDxKaGn6+VJA=="
|
||||
},
|
||||
"orchestrator": {
|
||||
"version": "0.3.8",
|
||||
|
@ -25,7 +25,7 @@
|
||||
"handlebars": "^4.0.11",
|
||||
"mssql": "^4.0.4",
|
||||
"mysql": "^2.15.0",
|
||||
"oracledb": "^2.0.15",
|
||||
"oracledb": "^2.2.0",
|
||||
"pg": "^7.4.0",
|
||||
"reflect-metadata": "^0.1.10",
|
||||
"typeorm": "0.2.0-alpha.44",
|
||||
|
@ -23,13 +23,13 @@ export class OracleDriver extends AbstractDriver {
|
||||
}
|
||||
|
||||
async GetAllTables(schema: string): Promise<EntityInfo[]> {
|
||||
let response: any[][] = (await this.Connection.execute(
|
||||
let response: { TABLE_NAME: string }[] = (await this.Connection.execute(
|
||||
` SELECT TABLE_NAME FROM all_tables WHERE owner = (select user from dual)`
|
||||
)).rows!;
|
||||
let ret: EntityInfo[] = <EntityInfo[]>[];
|
||||
response.forEach(val => {
|
||||
let ent: EntityInfo = new EntityInfo();
|
||||
ent.EntityName = val[0];
|
||||
ent.EntityName = val.TABLE_NAME;
|
||||
ent.Columns = <ColumnInfo[]>[];
|
||||
ent.Indexes = <IndexInfo[]>[];
|
||||
ret.push(ent);
|
||||
@ -40,39 +40,153 @@ export class OracleDriver extends AbstractDriver {
|
||||
entities: EntityInfo[],
|
||||
schema: string
|
||||
): Promise<EntityInfo[]> {
|
||||
let response: any[][] = (await this.Connection
|
||||
.execute(`SELECT TABLE_NAME, COLUMN_NAME, DATA_DEFAULT, NULLABLE, DATA_TYPE, DATA_LENGTH,
|
||||
DATA_PRECISION, DATA_SCALE, IDENTITY_COLUMN
|
||||
FROM USER_TAB_COLUMNS`)).rows!;
|
||||
let response: {
|
||||
TABLE_NAME: string;
|
||||
COLUMN_NAME: string;
|
||||
DATA_DEFAULT: string;
|
||||
NULLABLE: string;
|
||||
DATA_TYPE: string;
|
||||
DATA_LENGTH: number;
|
||||
DATA_PRECISION: number;
|
||||
DATA_SCALE: number;
|
||||
IDENTITY_COLUMN: string;
|
||||
IS_UNIQUE: Number;
|
||||
}[] = (await this.Connection
|
||||
.execute(`SELECT utc.TABLE_NAME, utc.COLUMN_NAME, DATA_DEFAULT, NULLABLE, DATA_TYPE, DATA_LENGTH,
|
||||
DATA_PRECISION, DATA_SCALE, IDENTITY_COLUMN,
|
||||
(select count(*) from USER_CONS_COLUMNS ucc
|
||||
JOIN USER_CONSTRAINTS uc ON uc.CONSTRAINT_NAME = ucc.CONSTRAINT_NAME and uc.CONSTRAINT_TYPE='U'
|
||||
where ucc.column_name = utc.COLUMN_NAME AND ucc.table_name = utc.TABLE_NAME) IS_UNIQUE
|
||||
FROM USER_TAB_COLUMNS utc`)).rows!;
|
||||
|
||||
entities.forEach(ent => {
|
||||
response
|
||||
.filter(filterVal => {
|
||||
return filterVal[0] == ent.EntityName;
|
||||
return filterVal.TABLE_NAME == ent.EntityName;
|
||||
})
|
||||
.forEach(resp => {
|
||||
let colInfo: ColumnInfo = new ColumnInfo();
|
||||
colInfo.name = resp[1];
|
||||
colInfo.is_nullable = resp[3] == "Y" ? true : false;
|
||||
colInfo.is_generated = resp[8] == "YES" ? true : false;
|
||||
colInfo.default = resp[2];
|
||||
switch (resp[4].toLowerCase()) {
|
||||
case "number":
|
||||
colInfo.ts_type = "number";
|
||||
colInfo.sql_type = "int";
|
||||
colInfo.lenght = resp[5] > 0 ? resp[5] : null;
|
||||
colInfo.name = resp.COLUMN_NAME;
|
||||
colInfo.is_nullable = resp.NULLABLE == "Y" ? true : false;
|
||||
colInfo.is_generated =
|
||||
resp.IDENTITY_COLUMN == "YES" ? true : false;
|
||||
colInfo.default =
|
||||
!resp.DATA_DEFAULT || resp.DATA_DEFAULT.includes('"')
|
||||
? null
|
||||
: resp.DATA_DEFAULT;
|
||||
colInfo.is_unique = resp.IS_UNIQUE > 0;
|
||||
resp.DATA_TYPE = resp.DATA_TYPE.replace(/\([0-9]+\)/g, "");
|
||||
colInfo.sql_type = resp.DATA_TYPE.toLowerCase();
|
||||
switch (resp.DATA_TYPE.toLowerCase()) {
|
||||
case "char":
|
||||
colInfo.ts_type = "string";
|
||||
break;
|
||||
case "nchar":
|
||||
colInfo.ts_type = "string";
|
||||
break;
|
||||
case "nvarchar2":
|
||||
colInfo.ts_type = "string";
|
||||
break;
|
||||
case "varchar2":
|
||||
colInfo.ts_type = "string";
|
||||
break;
|
||||
case "long":
|
||||
colInfo.ts_type = "string";
|
||||
break;
|
||||
case "raw":
|
||||
colInfo.ts_type = "Buffer";
|
||||
break;
|
||||
case "long raw":
|
||||
colInfo.ts_type = "Buffer";
|
||||
break;
|
||||
case "number":
|
||||
colInfo.ts_type = "number";
|
||||
break;
|
||||
case "numeric":
|
||||
colInfo.ts_type = "number";
|
||||
break;
|
||||
case "float":
|
||||
colInfo.ts_type = "number";
|
||||
break;
|
||||
case "dec":
|
||||
colInfo.ts_type = "number";
|
||||
break;
|
||||
case "decimal":
|
||||
colInfo.ts_type = "number";
|
||||
break;
|
||||
case "integer":
|
||||
colInfo.ts_type = "number";
|
||||
break;
|
||||
case "int":
|
||||
colInfo.ts_type = "number";
|
||||
break;
|
||||
case "smallint":
|
||||
colInfo.ts_type = "number";
|
||||
break;
|
||||
case "real":
|
||||
colInfo.ts_type = "number";
|
||||
break;
|
||||
case "double precision":
|
||||
colInfo.ts_type = "number";
|
||||
break;
|
||||
case "date":
|
||||
colInfo.ts_type = "Date";
|
||||
break;
|
||||
case "timestamp":
|
||||
colInfo.ts_type = "Date";
|
||||
break;
|
||||
case "timestamp with time zone":
|
||||
colInfo.ts_type = "Date";
|
||||
break;
|
||||
case "timestamp with local time zone":
|
||||
colInfo.ts_type = "Date";
|
||||
break;
|
||||
case "interval year to month":
|
||||
colInfo.ts_type = "string";
|
||||
break;
|
||||
case "interval day to second":
|
||||
colInfo.ts_type = "string";
|
||||
break;
|
||||
case "bfile":
|
||||
colInfo.ts_type = "Buffer";
|
||||
break;
|
||||
case "blob":
|
||||
colInfo.ts_type = "Buffer";
|
||||
break;
|
||||
case "clob":
|
||||
colInfo.ts_type = "string";
|
||||
break;
|
||||
case "nclob":
|
||||
colInfo.ts_type = "string";
|
||||
break;
|
||||
case "rowid":
|
||||
colInfo.ts_type = "number";
|
||||
break;
|
||||
case "urowid":
|
||||
colInfo.ts_type = "number";
|
||||
colInfo.sql_type = "smallint";
|
||||
colInfo.lenght = resp[5] > 0 ? resp[5] : null;
|
||||
break;
|
||||
default:
|
||||
TomgUtils.LogError(
|
||||
"Unknown column type:" + resp[4]
|
||||
"Unknown column type:" + resp.DATA_TYPE
|
||||
);
|
||||
break;
|
||||
}
|
||||
if (
|
||||
this.ColumnTypesWithPrecision.some(
|
||||
v => v == colInfo.sql_type
|
||||
)
|
||||
) {
|
||||
colInfo.numericPrecision = resp.DATA_PRECISION;
|
||||
colInfo.numericScale = resp.DATA_SCALE;
|
||||
}
|
||||
if (
|
||||
this.ColumnTypesWithLength.some(
|
||||
v => v == colInfo.sql_type
|
||||
)
|
||||
) {
|
||||
colInfo.lenght =
|
||||
resp.DATA_LENGTH > 0 ? resp.DATA_LENGTH : null;
|
||||
}
|
||||
|
||||
if (colInfo.sql_type) ent.Columns.push(colInfo);
|
||||
});
|
||||
@ -83,8 +197,14 @@ export class OracleDriver extends AbstractDriver {
|
||||
entities: EntityInfo[],
|
||||
schema: string
|
||||
): Promise<EntityInfo[]> {
|
||||
let response: any[][] = (await this.Connection
|
||||
.execute(`SELECT ind.TABLE_NAME, ind.INDEX_NAME, col.COLUMN_NAME,ind.UNIQUENESS, CASE WHEN uc.CONSTRAINT_NAME IS NULL THEN 0 ELSE 1 END
|
||||
let response: {
|
||||
COLUMN_NAME: string;
|
||||
TABLE_NAME: string;
|
||||
INDEX_NAME: string;
|
||||
UNIQUENESS: string;
|
||||
ISPRIMARYKEY: number;
|
||||
}[] = (await this.Connection
|
||||
.execute(`SELECT ind.TABLE_NAME, ind.INDEX_NAME, col.COLUMN_NAME,ind.UNIQUENESS, CASE WHEN uc.CONSTRAINT_NAME IS NULL THEN 0 ELSE 1 END ISPRIMARYKEY
|
||||
FROM USER_INDEXES ind
|
||||
JOIN USER_IND_COLUMNS col ON ind.INDEX_NAME=col.INDEX_NAME
|
||||
LEFT JOIN USER_CONSTRAINTS uc ON uc.INDEX_NAME = ind.INDEX_NAME
|
||||
@ -93,29 +213,27 @@ export class OracleDriver extends AbstractDriver {
|
||||
entities.forEach(ent => {
|
||||
response
|
||||
.filter(filterVal => {
|
||||
return filterVal[0] == ent.EntityName;
|
||||
return filterVal.TABLE_NAME == ent.EntityName;
|
||||
})
|
||||
.forEach(resp => {
|
||||
let indexInfo: IndexInfo = <IndexInfo>{};
|
||||
let indexColumnInfo: IndexColumnInfo = <IndexColumnInfo>{};
|
||||
if (
|
||||
ent.Indexes.filter(filterVal => {
|
||||
return filterVal.name == resp[1];
|
||||
return filterVal.name == resp.INDEX_NAME;
|
||||
}).length > 0
|
||||
) {
|
||||
indexInfo = ent.Indexes.filter(filterVal => {
|
||||
return filterVal.name == resp[1];
|
||||
return filterVal.name == resp.INDEX_NAME;
|
||||
})[0];
|
||||
} else {
|
||||
indexInfo.columns = <IndexColumnInfo[]>[];
|
||||
indexInfo.name = resp[1];
|
||||
indexInfo.isUnique = resp[3] == "UNIQUE" ? true : false;
|
||||
indexInfo.isPrimaryKey = resp[4] == 1 ? true : false;
|
||||
indexInfo.name = resp.INDEX_NAME;
|
||||
indexInfo.isUnique = resp.UNIQUENESS == "UNIQUE";
|
||||
indexInfo.isPrimaryKey = resp.ISPRIMARYKEY == 1;
|
||||
ent.Indexes.push(indexInfo);
|
||||
}
|
||||
indexColumnInfo.name = resp[2];
|
||||
// indexColumnInfo.isIncludedColumn = resp.is_included_column == 1 ? true : false;
|
||||
// indexColumnInfo.isDescending = resp.is_descending_key == 1 ? true : false;
|
||||
indexColumnInfo.name = resp.COLUMN_NAME;
|
||||
indexInfo.columns.push(indexColumnInfo);
|
||||
});
|
||||
});
|
||||
@ -126,36 +244,44 @@ export class OracleDriver extends AbstractDriver {
|
||||
entities: EntityInfo[],
|
||||
schema: string
|
||||
): Promise<EntityInfo[]> {
|
||||
let response: any[][] = (await this.Connection
|
||||
.execute(`select owner.TABLE_NAME ownTbl,ownCol.POSITION,ownCol.COLUMN_NAME,
|
||||
child.TABLE_NAME,childCol.COLUMN_NAME,
|
||||
let response: {
|
||||
OWNER_TABLE_NAME: string;
|
||||
OWNER_POSITION: string;
|
||||
OWNER_COLUMN_NAME: string;
|
||||
CHILD_TABLE_NAME: string;
|
||||
CHILD_COLUMN_NAME: string;
|
||||
DELETE_RULE: "RESTRICT" | "CASCADE" | "SET NULL" | "NO ACTION";
|
||||
CONSTRAINT_NAME: string;
|
||||
}[] = (await this.Connection
|
||||
.execute(`select owner.TABLE_NAME OWNER_TABLE_NAME,ownCol.POSITION OWNER_POSITION,ownCol.COLUMN_NAME OWNER_COLUMN_NAME,
|
||||
child.TABLE_NAME CHILD_TABLE_NAME ,childCol.COLUMN_NAME CHILD_COLUMN_NAME,
|
||||
owner.DELETE_RULE,
|
||||
4,owner.CONSTRAINT_NAME
|
||||
owner.CONSTRAINT_NAME
|
||||
from user_constraints owner
|
||||
join user_constraints child on owner.r_constraint_name=child.CONSTRAINT_NAME and child.constraint_type in ('P','U')
|
||||
JOIN USER_CONS_COLUMNS ownCol ON owner.CONSTRAINT_NAME = ownCol.CONSTRAINT_NAME
|
||||
JOIN USER_CONS_COLUMNS childCol ON child.CONSTRAINT_NAME = childCol.CONSTRAINT_NAME AND ownCol.POSITION=childCol.POSITION
|
||||
ORDER BY ownTbl ASC, owner.CONSTRAINT_NAME ASC, ownCol.POSITION ASC`))
|
||||
ORDER BY OWNER_TABLE_NAME ASC, owner.CONSTRAINT_NAME ASC, OWNER_POSITION ASC`))
|
||||
.rows!;
|
||||
|
||||
let relationsTemp: RelationTempInfo[] = <RelationTempInfo[]>[];
|
||||
response.forEach(resp => {
|
||||
let rels = relationsTemp.find(val => {
|
||||
return val.object_id == resp[6];
|
||||
return val.object_id == resp.CONSTRAINT_NAME;
|
||||
});
|
||||
if (rels == undefined) {
|
||||
rels = <RelationTempInfo>{};
|
||||
rels.ownerColumnsNames = [];
|
||||
rels.referencedColumnsNames = [];
|
||||
rels.actionOnDelete = resp[5];
|
||||
rels.actionOnDelete = resp.DELETE_RULE;
|
||||
rels.actionOnUpdate = "NO ACTION";
|
||||
rels.object_id = resp[6];
|
||||
rels.ownerTable = resp[0];
|
||||
rels.referencedTable = resp[3];
|
||||
rels.object_id = resp.CONSTRAINT_NAME;
|
||||
rels.ownerTable = resp.OWNER_TABLE_NAME;
|
||||
rels.referencedTable = resp.CHILD_TABLE_NAME;
|
||||
relationsTemp.push(rels);
|
||||
}
|
||||
rels.ownerColumnsNames.push(resp[2]);
|
||||
rels.referencedColumnsNames.push(resp[4]);
|
||||
rels.ownerColumnsNames.push(resp.OWNER_COLUMN_NAME);
|
||||
rels.referencedColumnsNames.push(resp.CHILD_COLUMN_NAME);
|
||||
});
|
||||
relationsTemp.forEach(relationTmp => {
|
||||
let ownerEntity = entities.find(entitity => {
|
||||
@ -298,20 +424,32 @@ export class OracleDriver extends AbstractDriver {
|
||||
password: string,
|
||||
ssl: boolean
|
||||
) {
|
||||
let config: any /*Oracle.IConnectionAttributes*/ = {
|
||||
user: user,
|
||||
password: password,
|
||||
// connectString: `${server}:${port}/ORCLCDB.localdomain/${database}`,
|
||||
connectString: `${server}:${port}/${database}`,
|
||||
externalAuth: ssl
|
||||
};
|
||||
|
||||
let config: any;
|
||||
if (user == String(process.env.ORACLE_UsernameSys)) {
|
||||
config /*Oracle.IConnectionAttributes*/ = {
|
||||
user: user,
|
||||
password: password,
|
||||
// connectString: `${server}:${port}/ORCLCDB.localdomain/${database}`,
|
||||
connectString: `${server}:${port}/${database}`,
|
||||
externalAuth: ssl,
|
||||
privilege: this.Oracle.SYSDBA
|
||||
};
|
||||
} else {
|
||||
config /*Oracle.IConnectionAttributes*/ = {
|
||||
user: user,
|
||||
password: password,
|
||||
// connectString: `${server}:${port}/ORCLCDB.localdomain/${database}`,
|
||||
connectString: `${server}:${port}/${database}`,
|
||||
externalAuth: ssl
|
||||
};
|
||||
}
|
||||
let that = this;
|
||||
let promise = new Promise<boolean>((resolve, reject) => {
|
||||
this.Oracle.getConnection(config, function(err, connection) {
|
||||
if (!err) {
|
||||
//Connection successfull
|
||||
that.Connection = connection;
|
||||
|
||||
resolve(true);
|
||||
} else {
|
||||
TomgUtils.LogError(
|
||||
@ -327,10 +465,23 @@ export class OracleDriver extends AbstractDriver {
|
||||
await promise;
|
||||
}
|
||||
|
||||
async CreateDB(dbName: string) {}
|
||||
async CreateDB(dbName: string) {
|
||||
var x = await this.Connection.execute(
|
||||
`CREATE USER ${dbName} IDENTIFIED BY ${String(
|
||||
process.env.ORACLE_Password
|
||||
)}`
|
||||
);
|
||||
|
||||
var y = await this.Connection.execute(`GRANT CONNECT TO ${dbName}`);
|
||||
}
|
||||
async UseDB(dbName: string) {}
|
||||
async DropDB(dbName: string) {}
|
||||
async DropDB(dbName: string) {
|
||||
var x = await this.Connection.execute(`DROP USER ${dbName} CASCADE`);
|
||||
}
|
||||
async CheckIfDBExists(dbName: string): Promise<boolean> {
|
||||
return true;
|
||||
var x = await this.Connection.execute(
|
||||
`select count(*) as CNT from dba_users where username='${dbName.toUpperCase()}'`
|
||||
);
|
||||
return x.rows[0][0] > 0 || x.rows[0].CNT;
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,8 @@ import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, Man
|
||||
{{^relations}} @Column("{{sql_type}}",{ {{#is_generated}}
|
||||
generated:true,{{/is_generated}}{{#is_nullable}}
|
||||
nullable:true,{{/is_nullable}}{{^is_nullable}}
|
||||
nullable:false,{{/is_nullable}}{{#lenght}}
|
||||
nullable:false,{{/is_nullable}}{{#is_unique}}
|
||||
unique: true,{{/is_unique}}{{#lenght}}
|
||||
length:{{.}},{{/lenght}}{{#width}}
|
||||
width:{{.}},{{/width}}{{#default}}
|
||||
default:"{{.}}",{{/default}}{{#numericPrecision}}
|
||||
|
@ -39,7 +39,7 @@ var argv = Yargs.usage(
|
||||
.option("e", {
|
||||
alias: "engine",
|
||||
describe: "Database engine.",
|
||||
choices: ["mssql", "postgres", "mysql", "mariadb"],
|
||||
choices: ["mssql", "postgres", "mysql", "mariadb", "oracle"],
|
||||
default: "mssql"
|
||||
})
|
||||
.option("o", {
|
||||
|
@ -7,6 +7,7 @@ export class ColumnInfo {
|
||||
name: string = "";
|
||||
default: string | null = null;
|
||||
is_nullable: boolean = false;
|
||||
is_unique: boolean = false;
|
||||
ts_type:
|
||||
| "number"
|
||||
| "string"
|
||||
|
@ -106,6 +106,7 @@ describe('MssqlDriver', function () {
|
||||
sql_type: 'int',
|
||||
ts_type: 'number',
|
||||
enumOptions: null,
|
||||
is_unique:false,
|
||||
relations: <RelationInfo[]>[]
|
||||
})
|
||||
let result = await driver.GetCoulmnsFromEntity(entities, 'schema');
|
||||
|
@ -24,6 +24,7 @@ describe("Platform specyfic types", async function () {
|
||||
if (process.env.MYSQL_Skip == '0') dbDrivers.push('mysql')
|
||||
if (process.env.MARIADB_Skip == '0') dbDrivers.push('mariadb')
|
||||
if (process.env.MSSQL_Skip == '0') dbDrivers.push('mssql')
|
||||
if (process.env.ORACLE_Skip == '0') dbDrivers.push('oracle')
|
||||
|
||||
|
||||
let examplesPathJS = path.resolve(process.cwd(), 'dist/test/integration/entityTypes')
|
||||
@ -55,6 +56,9 @@ describe("Platform specyfic types", async function () {
|
||||
case 'mariadb':
|
||||
engine = await GTU.createMariaDBModels(filesOrgPathJS, resultsPath)
|
||||
break;
|
||||
case 'oracle':
|
||||
engine = await GTU.createOracleDBModels(filesOrgPathJS, resultsPath)
|
||||
break;
|
||||
|
||||
default:
|
||||
console.log(`Unknown engine type`);
|
||||
|
99
test/integration/entityTypes/oracle/entity/Post.ts
Normal file
99
test/integration/entityTypes/oracle/entity/Post.ts
Normal file
@ -0,0 +1,99 @@
|
||||
import { Entity, PrimaryColumn, Column } from "typeorm";
|
||||
|
||||
@Entity("Post")
|
||||
export class Post {
|
||||
|
||||
@PrimaryColumn()
|
||||
id: number;
|
||||
|
||||
@Column()
|
||||
name: string;
|
||||
|
||||
@Column("char")
|
||||
char: string;
|
||||
|
||||
@Column("nchar")
|
||||
nchar: string;
|
||||
|
||||
@Column("nvarchar2")
|
||||
nvarchar2: string;
|
||||
|
||||
@Column("varchar2")
|
||||
varchar2: string;
|
||||
|
||||
@Column("long")
|
||||
long: string;
|
||||
|
||||
@Column("raw")
|
||||
raw: Buffer;
|
||||
|
||||
// @Column("long raw")
|
||||
// long_raw: Buffer;
|
||||
|
||||
@Column("number")
|
||||
number: number;
|
||||
|
||||
@Column("numeric")
|
||||
numeric: number;
|
||||
|
||||
@Column("float")
|
||||
float: number;
|
||||
|
||||
@Column("dec")
|
||||
dec: number;
|
||||
|
||||
@Column("decimal")
|
||||
decimal: number;
|
||||
|
||||
@Column("integer")
|
||||
integer: number;
|
||||
|
||||
@Column("int")
|
||||
int: number;
|
||||
|
||||
@Column("smallint")
|
||||
smallint: number;
|
||||
|
||||
@Column("real")
|
||||
real: number;
|
||||
|
||||
@Column("double precision")
|
||||
double_precision: number;
|
||||
|
||||
@Column("date")
|
||||
date: Date;
|
||||
|
||||
@Column("timestamp")
|
||||
timestamp: Date;
|
||||
|
||||
@Column("timestamp with time zone")
|
||||
timestamp_with_time_zone: Date;
|
||||
|
||||
@Column("timestamp with local time zone")
|
||||
timestamp_with_local_time_zone: Date;
|
||||
|
||||
@Column("interval year to month")
|
||||
interval_year_to_month: string;
|
||||
|
||||
@Column("interval day to second")
|
||||
interval_day_to_second: string;
|
||||
|
||||
@Column("bfile")
|
||||
bfile: Buffer;
|
||||
|
||||
@Column("blob")
|
||||
blob: Buffer;
|
||||
|
||||
@Column("clob")
|
||||
clob: string;
|
||||
|
||||
@Column("nclob")
|
||||
nclob: string;
|
||||
|
||||
@Column("rowid")
|
||||
rowid: number;
|
||||
|
||||
@Column("urowid")
|
||||
urowid: number;
|
||||
|
||||
}
|
@ -9,8 +9,8 @@ export class EverythingEntity {
|
||||
@Column()
|
||||
name: string;
|
||||
|
||||
@Column("text")
|
||||
text: string;
|
||||
// @Column("text")
|
||||
// text: string;
|
||||
|
||||
@Column({ length: 32 })
|
||||
shortTextColumn: string;
|
||||
|
@ -24,7 +24,7 @@ export class Post {
|
||||
onDelete: 'CASCADE'
|
||||
})
|
||||
@JoinColumn()
|
||||
@Index({ unique: true })
|
||||
// @Index({ unique: true })
|
||||
category: PostCategory;
|
||||
|
||||
// post has relation with details. cascade inserts here means if new PostDetails instance will be set to this
|
||||
@ -33,7 +33,7 @@ export class Post {
|
||||
cascade: true
|
||||
})
|
||||
@JoinColumn()
|
||||
@Index({ unique: true })
|
||||
// @Index({ unique: true })
|
||||
details: PostDetails;
|
||||
|
||||
// post has relation with details. cascade update here means if new PostDetail instance will be set to this relation
|
||||
@ -42,7 +42,7 @@ export class Post {
|
||||
cascade: true,
|
||||
})
|
||||
@JoinColumn()
|
||||
@Index({ unique: true })
|
||||
// @Index({ unique: true })
|
||||
image: PostImage;
|
||||
|
||||
// post has relation with details. cascade update here means if new PostDetail instance will be set to this relation
|
||||
@ -51,7 +51,7 @@ export class Post {
|
||||
onDelete: 'CASCADE'
|
||||
})
|
||||
@JoinColumn()
|
||||
@Index({ unique: true })
|
||||
// @Index({ unique: true })
|
||||
metadata: PostMetadata | null;
|
||||
|
||||
// post has relation with details. full cascades here
|
||||
@ -60,13 +60,13 @@ export class Post {
|
||||
onDelete: 'CASCADE'
|
||||
})
|
||||
@JoinColumn()
|
||||
@Index({ unique: true })
|
||||
// @Index({ unique: true })
|
||||
information: PostInformation;
|
||||
|
||||
// post has relation with details. not cascades here. means cannot be persisted, updated or removed
|
||||
@OneToOne(type => PostAuthor, author => author.post)
|
||||
@JoinColumn()
|
||||
@Index({ unique: true })
|
||||
// @Index({ unique: true })
|
||||
author: PostAuthor;
|
||||
|
||||
}
|
||||
|
@ -241,10 +241,11 @@ export async function createMariaDBModels(filesOrgPath: string, resultsPath: str
|
||||
export async function createOracleDBModels(filesOrgPath: string, resultsPath: string): Promise<Engine> {
|
||||
let driver: AbstractDriver;
|
||||
driver = new OracleDriver();
|
||||
await driver.ConnectToServer(String(process.env.ORACLE_Database), String(process.env.ORACLE_Host), Number(process.env.ORACLE_Port), String(process.env.ORACLE_Username), String(process.env.ORACLE_Password), yn(process.env.ORACLE_SSL));
|
||||
await driver.ConnectToServer(String(process.env.ORACLE_Database), String(process.env.ORACLE_Host), Number(process.env.ORACLE_Port), String(process.env.ORACLE_UsernameSys), String(process.env.ORACLE_PasswordSys), yn(process.env.ORACLE_SSL));
|
||||
|
||||
if (! await driver.CheckIfDBExists(String(process.env.ORACLE_Database)))
|
||||
await driver.CreateDB(String(process.env.ORACLE_Database));
|
||||
if (await driver.CheckIfDBExists(String(process.env.ORACLE_Username)))
|
||||
await driver.DropDB(String(process.env.ORACLE_Username));
|
||||
await driver.CreateDB(String(process.env.ORACLE_Username));
|
||||
await driver.DisconnectFromServer();
|
||||
|
||||
let connOpt: ConnectionOptions = {
|
||||
@ -281,11 +282,8 @@ export async function createOracleDBModels(filesOrgPath: string, resultsPath: st
|
||||
convertCaseEntity: 'none',
|
||||
convertCaseFile: 'none',
|
||||
convertCaseProperty: 'none',
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
return engine;
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,10 @@
|
||||
"strictNullChecks": true,
|
||||
"moduleResolution": "node",
|
||||
"outDir": "dist",
|
||||
"newLine": "LF"
|
||||
"newLine": "LF",
|
||||
"lib": [
|
||||
"es2017"
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
"src",
|
||||
|
Loading…
Reference in New Issue
Block a user