2022-04-12 17:59:22 +02:00
|
|
|
import * as mysql from 'mysql2/promise';
|
2022-04-12 17:08:05 +02:00
|
|
|
import * as pg from 'pg';
|
2022-04-15 23:13:23 +02:00
|
|
|
import MysqlExporter from 'src/main/libs/exporters/sql/MysqlExporter';
|
|
|
|
import PostgreSQLExporter from 'src/main/libs/exporters/sql/PostgreSQLExporter';
|
2022-04-17 12:01:07 +02:00
|
|
|
import MySQLImporter from 'src/main/libs/importers/sql/MySQLlImporter';
|
2022-04-15 23:13:23 +02:00
|
|
|
import PostgreSQLImporter from 'src/main/libs/importers/sql/PostgreSQLImporter';
|
2022-04-12 17:08:05 +02:00
|
|
|
import SSHConfig from 'ssh2-promise/lib/sshConfig';
|
|
|
|
import { MySQLClient } from '../../main/libs/clients/MySQLClient';
|
|
|
|
import { PostgreSQLClient } from '../../main/libs/clients/PostgreSQLClient';
|
|
|
|
import { SQLiteClient } from '../../main/libs/clients/SQLiteClient';
|
|
|
|
|
|
|
|
export type Client = MySQLClient | PostgreSQLClient | SQLiteClient
|
|
|
|
export type ClientCode = 'mysql' | 'maria' | 'pg' | 'sqlite'
|
2022-04-15 23:13:23 +02:00
|
|
|
export type Exporter = MysqlExporter | PostgreSQLExporter
|
|
|
|
export type Importer = MySQLImporter | PostgreSQLImporter
|
2022-04-12 17:08:05 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Pasameters needed to create a new Antares connection to a database
|
|
|
|
*/
|
|
|
|
export interface ClientParams {
|
|
|
|
client: ClientCode;
|
|
|
|
params:
|
|
|
|
mysql.ConnectionOptions & {schema: string; ssl?: mysql.SslOptions; ssh?: SSHConfig; readonly: boolean}
|
|
|
|
| pg.ClientConfig & {schema: string; ssl?: mysql.SslOptions; ssh?: SSHConfig; readonly: boolean}
|
|
|
|
| { databasePath: string; readonly: boolean };
|
|
|
|
poolSize?: number;
|
|
|
|
logger?: () => void;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Paramenets insered by user in connection mask
|
|
|
|
*/
|
|
|
|
export interface ConnectionParams {
|
|
|
|
uid: string;
|
|
|
|
name?: string;
|
|
|
|
client: ClientCode;
|
|
|
|
host: string;
|
|
|
|
database?: string;
|
|
|
|
schema?: string;
|
|
|
|
databasePath?: string;
|
|
|
|
port: number;
|
|
|
|
user: string;
|
|
|
|
password: string;
|
|
|
|
ask: boolean;
|
|
|
|
readonly: boolean;
|
|
|
|
ssl: boolean;
|
|
|
|
cert?: string;
|
|
|
|
key?: string;
|
|
|
|
ca?: string;
|
|
|
|
untrustedConnection: boolean;
|
|
|
|
ciphers?: string;
|
|
|
|
ssh: boolean;
|
|
|
|
sshHost?: string;
|
|
|
|
sshUser?: string;
|
|
|
|
sshPass?: string;
|
|
|
|
sshKey?: string;
|
|
|
|
sshPort?: number;
|
|
|
|
sshPassphrase?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Tables
|
|
|
|
export interface TableField {
|
|
|
|
name: string;
|
|
|
|
key: string;
|
|
|
|
type: string;
|
|
|
|
schema: string;
|
|
|
|
numPrecision?: number;
|
|
|
|
numLength?: number;
|
|
|
|
datePrecision?: number;
|
|
|
|
charLength?: number;
|
|
|
|
numScale?: number;
|
|
|
|
nullable?: boolean;
|
|
|
|
unsigned?: boolean;
|
|
|
|
zerofill?: boolean;
|
|
|
|
order?: number;
|
|
|
|
default?: number | string;
|
|
|
|
enumValues?: string;
|
|
|
|
charset?: string;
|
|
|
|
collation?: string;
|
|
|
|
autoIncrement?: boolean;
|
2022-04-14 09:15:16 +02:00
|
|
|
isArray?: boolean;
|
2022-04-12 17:08:05 +02:00
|
|
|
onUpdate?: string;
|
|
|
|
comment?: string;
|
|
|
|
after?: string;
|
|
|
|
orgName?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TableIndex {
|
|
|
|
name: string;
|
|
|
|
fields: string[];
|
|
|
|
type: string;
|
|
|
|
comment?: string;
|
|
|
|
indexType?: string;
|
|
|
|
indexComment?: string;
|
|
|
|
cardinality?: number;
|
|
|
|
oldType?: string;
|
|
|
|
oldName?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TableForeign {
|
|
|
|
constraintName: string;
|
|
|
|
refSchema: string;
|
|
|
|
table: string;
|
|
|
|
refTable: string;
|
|
|
|
field: string;
|
|
|
|
refField: string;
|
|
|
|
onUpdate: string;
|
|
|
|
onDelete: string;
|
|
|
|
oldName?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TableOptions {
|
|
|
|
name: string;
|
2022-04-14 18:25:13 +02:00
|
|
|
type?: 'table' | 'view';
|
2022-04-12 17:08:05 +02:00
|
|
|
engine?: string;
|
|
|
|
comment?: string;
|
|
|
|
collation?: string;
|
|
|
|
autoIncrement?: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface CreateTableParams {
|
|
|
|
/** Connection UID */
|
2022-04-14 18:25:13 +02:00
|
|
|
uid?: string;
|
2022-04-12 17:08:05 +02:00
|
|
|
schema: string;
|
|
|
|
fields: TableField[];
|
|
|
|
foreigns: TableForeign[];
|
|
|
|
indexes: TableIndex[];
|
|
|
|
options: TableOptions;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface AlterTableParams {
|
|
|
|
/** Connection UID */
|
2022-04-14 18:25:13 +02:00
|
|
|
uid?: string;
|
2022-04-12 17:08:05 +02:00
|
|
|
schema: string;
|
|
|
|
table: string;
|
|
|
|
additions: TableField[];
|
|
|
|
changes: TableField[];
|
|
|
|
deletions: TableField[];
|
2022-04-14 18:25:13 +02:00
|
|
|
tableStructure: {
|
|
|
|
name: string;
|
|
|
|
fields: TableField[];
|
|
|
|
foreigns: TableForeign[];
|
|
|
|
indexes: TableIndex[];
|
|
|
|
};
|
2022-04-12 17:08:05 +02:00
|
|
|
indexChanges: {
|
|
|
|
additions: TableIndex[];
|
|
|
|
changes: TableIndex[];
|
|
|
|
deletions: TableIndex[];
|
|
|
|
};
|
|
|
|
foreignChanges: {
|
|
|
|
additions: TableForeign[];
|
|
|
|
changes: TableForeign[];
|
|
|
|
deletions: TableForeign[];
|
|
|
|
};
|
|
|
|
options: TableOptions;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Views
|
|
|
|
export interface CreateViewParams {
|
|
|
|
schema: string;
|
|
|
|
name: string;
|
|
|
|
algorithm: string;
|
|
|
|
definer: string;
|
|
|
|
security: string;
|
|
|
|
sql: string;
|
|
|
|
updateOption: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface AlterViewParams extends CreateViewParams {
|
|
|
|
oldName?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Triggers
|
|
|
|
export interface CreateTriggerParams {
|
|
|
|
definer?: string;
|
|
|
|
schema: string;
|
|
|
|
name: string;
|
|
|
|
activation: string;
|
|
|
|
event: string;
|
|
|
|
table: string;
|
|
|
|
sql: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface AlterTriggerParams extends CreateTriggerParams {
|
|
|
|
oldName?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Routines & Functions
|
|
|
|
export interface FunctionParam {
|
|
|
|
context: string;
|
|
|
|
name: string;
|
|
|
|
type: string;
|
|
|
|
length: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface CreateRoutineParams {
|
|
|
|
name: string;
|
|
|
|
parameters?: FunctionParam[];
|
|
|
|
definer: string;
|
|
|
|
schema: string;
|
|
|
|
deterministic: boolean;
|
|
|
|
dataAccess: string;
|
|
|
|
security: string;
|
|
|
|
comment?: string;
|
2022-04-14 09:15:16 +02:00
|
|
|
language?: string;
|
2022-04-12 17:08:05 +02:00
|
|
|
sql: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface AlterRoutineParams extends CreateRoutineParams {
|
|
|
|
oldName?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface CreateFunctionParams {
|
|
|
|
name: string;
|
|
|
|
parameters?: FunctionParam[];
|
|
|
|
definer: string;
|
|
|
|
schema: string;
|
|
|
|
deterministic: boolean;
|
|
|
|
dataAccess: string;
|
|
|
|
security: string;
|
|
|
|
comment?: string;
|
|
|
|
sql: string;
|
|
|
|
returns: string;
|
|
|
|
returnsLength: number;
|
2022-04-14 09:15:16 +02:00
|
|
|
language?: string;
|
2022-04-12 17:08:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface AlterFunctionParams extends CreateFunctionParams {
|
|
|
|
oldName?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Events
|
|
|
|
export interface CreateEventParams {
|
|
|
|
definer?: string;
|
|
|
|
schema: string;
|
|
|
|
name: string;
|
|
|
|
execution: string;
|
|
|
|
every: string[];
|
|
|
|
starts: string;
|
|
|
|
ends: string;
|
|
|
|
at: string;
|
|
|
|
preserve: string;
|
|
|
|
state: string;
|
|
|
|
comment: string;
|
|
|
|
sql: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface AlterEventParams extends CreateEventParams {
|
|
|
|
oldName?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Query
|
|
|
|
export interface QueryBuilderObject {
|
|
|
|
schema: string;
|
|
|
|
select: string[];
|
|
|
|
from: string;
|
|
|
|
where: string[];
|
|
|
|
groupBy: string[];
|
|
|
|
orderBy: string[];
|
2022-04-15 14:56:13 +02:00
|
|
|
limit: number;
|
|
|
|
offset: number;
|
2022-04-12 17:08:05 +02:00
|
|
|
join: string[];
|
|
|
|
update: string[];
|
2022-04-15 14:56:13 +02:00
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
|
insert: {[key: string]: any}[];
|
2022-04-12 17:08:05 +02:00
|
|
|
delete: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface QueryParams {
|
|
|
|
nest?: boolean;
|
|
|
|
details?: boolean;
|
|
|
|
split?: boolean;
|
|
|
|
comments?: boolean;
|
|
|
|
autocommit?: boolean;
|
|
|
|
schema?: string;
|
|
|
|
tabUid?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface QueryField {
|
|
|
|
name: string;
|
|
|
|
alias: string;
|
|
|
|
orgName: string;
|
|
|
|
schema: string;
|
|
|
|
table: string;
|
|
|
|
tableAlias: string;
|
|
|
|
orgTable: string;
|
|
|
|
type: string;
|
|
|
|
length: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface QueryForeign {
|
|
|
|
schema: string;
|
|
|
|
table: string;
|
|
|
|
field: string;
|
|
|
|
position: number;
|
|
|
|
constraintPosition: number;
|
|
|
|
constraintName: string;
|
|
|
|
refSchema: string;
|
|
|
|
refTable: string;
|
|
|
|
refField: string;
|
|
|
|
onUpdate: string;
|
|
|
|
onDelete: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
|
export interface QueryResult<T = any> {
|
|
|
|
rows: T[];
|
|
|
|
report: { affectedRows: number };
|
|
|
|
fields: QueryField[];
|
|
|
|
keys: QueryForeign[];
|
|
|
|
duration: number;
|
|
|
|
}
|