From a103617ce89995bafbd6bdfa02795851015b5d68 Mon Sep 17 00:00:00 2001 From: Fabio Di Stasio Date: Tue, 21 Jun 2022 17:54:47 +0200 Subject: [PATCH] refactor: ts and composition api on missing components --- src/common/interfaces/antares.ts | 74 +- src/common/interfaces/tableApis.ts | 29 + src/main/libs/clients/MySQLClient.ts | 52 +- .../components/ModalAskParameters.vue | 7 +- src/renderer/components/ModalHistory.vue | 15 +- .../components/WorkspaceTabNewFunction.vue | 35 +- .../components/WorkspaceTabNewTable.vue | 6 +- .../components/WorkspaceTabNewTrigger.vue | 6 +- .../components/WorkspaceTabNewView.vue | 14 +- .../components/WorkspaceTabPropsFunction.vue | 569 +++++---- .../WorkspaceTabPropsFunctionParamsModal.vue | 223 ++-- .../components/WorkspaceTabPropsRoutine.vue | 548 +++++---- .../WorkspaceTabPropsRoutineParamsModal.vue | 223 ++-- .../components/WorkspaceTabPropsScheduler.vue | 444 ++++--- .../WorkspaceTabPropsSchedulerTimingModal.vue | 91 +- .../components/WorkspaceTabPropsTable.vue | 960 ++++++++-------- .../WorkspaceTabPropsTableContext.vue | 88 +- .../WorkspaceTabPropsTableFields.vue | 248 ++-- .../WorkspaceTabPropsTableForeignModal.vue | 339 +++--- .../WorkspaceTabPropsTableIndexesModal.vue | 227 ++-- .../components/WorkspaceTabPropsTableRow.vue | 504 ++++---- .../components/WorkspaceTabPropsTrigger.vue | 478 ++++---- .../WorkspaceTabPropsTriggerFunction.vue | 459 +++----- .../components/WorkspaceTabPropsView.vue | 401 +++---- src/renderer/components/WorkspaceTabQuery.vue | 652 +++++------ .../WorkspaceTabQueryEmptyState.vue | 29 +- .../components/WorkspaceTabQueryTable.vue | 1023 +++++++++-------- .../WorkspaceTabQueryTableContext.vue | 77 +- .../components/WorkspaceTabQueryTableRow.vue | 796 ++++++------- src/renderer/components/WorkspaceTabTable.vue | 537 +++++---- .../components/WorkspaceTabTableFilters.vue | 148 ++- ...{useResultTables.js => useResultTables.ts} | 24 +- src/renderer/ipc-api/Functions.ts | 2 +- src/renderer/ipc-api/Routines.ts | 2 +- src/renderer/ipc-api/Schedulers.ts | 6 +- src/renderer/ipc-api/Schema.ts | 2 +- src/renderer/ipc-api/Tables.ts | 8 +- src/renderer/mixins/tableTabs.js | 53 - 38 files changed, 4553 insertions(+), 4846 deletions(-) rename src/renderer/composables/{useResultTables.js => useResultTables.ts} (61%) delete mode 100644 src/renderer/mixins/tableTabs.js diff --git a/src/common/interfaces/antares.ts b/src/common/interfaces/antares.ts index 2b80f534..6a504d7a 100644 --- a/src/common/interfaces/antares.ts +++ b/src/common/interfaces/antares.ts @@ -92,13 +92,15 @@ export interface TableInfos { collation: string; } +export type TableOptions = Partial; + export interface TableField { // eslint-disable-next-line camelcase _antares_id?: string; name: string; - key: string; type: string; schema: string; + table?: string; numPrecision?: number; numLength?: number; datePrecision?: number; @@ -109,6 +111,7 @@ export interface TableField { zerofill?: boolean; order?: number; default?: string; + defaultType?: string; enumValues?: string; charset?: string; collation?: string; @@ -118,7 +121,11 @@ export interface TableField { comment?: string; after?: string; orgName?: string; - length?: number; + length?: number | false; + alias: string; + tableAlias: string; + orgTable: string; + key?: 'pri' | 'uni'; } export interface TableIndex { @@ -136,6 +143,8 @@ export interface TableIndex { } export interface TableForeign { + // eslint-disable-next-line camelcase + _antares_id?: string; constraintName: string; refSchema: string; table: string; @@ -147,15 +156,6 @@ export interface TableForeign { oldName?: string; } -export interface TableOptions { - name: string; - type?: 'table' | 'view'; - engine?: string; - comment?: string; - collation?: string; - autoIncrement?: number; -} - export interface CreateTableParams { /** Connection UID */ uid?: string; @@ -236,15 +236,12 @@ export interface CreateTriggerParams { export interface AlterTriggerParams extends CreateTriggerParams { oldName?: string; } -export interface TriggerFunctionInfos { - name: string; - type: string; - security: string; -} // Routines & Functions export interface FunctionParam { + // eslint-disable-next-line camelcase + _antares_id: string; context: string; name: string; type: string; @@ -267,9 +264,11 @@ export interface RoutineInfos { parameters?: FunctionParam[]; // eslint-disable-next-line @typescript-eslint/no-explicit-any returns?: any; + returnsLength?: number; } export type FunctionInfos = RoutineInfos +export type TriggerFunctionInfos = FunctionInfos export interface CreateRoutineParams { name: string; @@ -309,29 +308,6 @@ export interface AlterFunctionParams extends CreateFunctionParams { // Events export interface EventInfos { - name: string; - definition: string; - type: string; - definer: string; - body: string; - starts: string; - ends: string; - enabled: boolean; - executeAt: string; - intervalField: string; - intervalValue: string; - onCompletion: string; - originator: string; - sqlMode: string; - created: string; - updated: string; - lastExecuted: string; - comment: string; - charset: string; - timezone: string; -} - -export interface CreateEventParams { definer?: string; schema: string; name: string; @@ -340,12 +316,15 @@ export interface CreateEventParams { starts: string; ends: string; at: string; - preserve: string; + preserve: boolean; state: string; comment: string; + enabled?: boolean; sql: string; } +export type CreateEventParams = EventInfos; + export interface AlterEventParams extends CreateEventParams { oldName?: string; } @@ -397,17 +376,10 @@ export interface QueryParams { tabUid?: string; } -export interface QueryField { - name: string; - alias: string; - orgName: string; - schema: string; - table: string; - tableAlias: string; - orgTable: string; - type: string; - length: number; -} +/** + * @deprecated Use TableFIeld + */ +export type QueryField = TableField export interface QueryForeign { schema: string; diff --git a/src/common/interfaces/tableApis.ts b/src/common/interfaces/tableApis.ts index f3aacd22..1b008a99 100644 --- a/src/common/interfaces/tableApis.ts +++ b/src/common/interfaces/tableApis.ts @@ -1,5 +1,34 @@ import { UsableLocale } from '@faker-js/faker'; +export interface TableUpdateParams { + uid: string; + schema: string; + table: string; + primary?: string; + id: number | string; + content: number | string | boolean | Date | Blob | null; + type: string; + field: string; +} + +export interface TableDeleteParams { + uid: string; + schema: string; + table: string; + primary?: string; + field: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + rows: {[key: string]: any}; +} + +export interface TableFilterClausole { + active: boolean; + field: string; + op: '=' | '!=' | '>' | '<' | '>=' | '<=' | 'IN' | 'NOT IN' | 'LIKE' | 'BETWEEN' | 'IS NULL' | 'IS NOT NULL'; + value: ''; + value2: ''; +} + export interface InsertRowsParams { uid: string; schema: string; diff --git a/src/main/libs/clients/MySQLClient.ts b/src/main/libs/clients/MySQLClient.ts index 4d3c7be9..36233b99 100644 --- a/src/main/libs/clients/MySQLClient.ts +++ b/src/main/libs/clients/MySQLClient.ts @@ -381,25 +381,18 @@ export class MySQLClient extends AntaresCore { const remappedSchedulers: antares.EventInfos[] = schedulers.filter(scheduler => scheduler.Db === db.Database).map(scheduler => { return { name: scheduler.EVENT_NAME, - definition: scheduler.EVENT_DEFINITION, - type: scheduler.EVENT_TYPE, + schema: scheduler.Db, + sql: scheduler.EVENT_DEFINITION, + execution: scheduler.EVENT_TYPE === 'RECURRING' ? 'EVERY' : 'ONCE', definer: scheduler.DEFINER, - body: scheduler.EVENT_BODY, starts: scheduler.STARTS, ends: scheduler.ENDS, + state: scheduler.STATUS === 'ENABLED' ? 'ENABLE' : scheduler.STATE === 'DISABLED' ? 'DISABLE' : 'DISABLE ON SLAVE', enabled: scheduler.STATUS === 'ENABLED', - executeAt: scheduler.EXECUTE_AT, - intervalField: scheduler.INTERVAL_FIELD, - intervalValue: scheduler.INTERVAL_VALUE, - onCompletion: scheduler.ON_COMPLETION, - originator: scheduler.ORIGINATOR, - sqlMode: scheduler.SQL_MODE, - created: scheduler.CREATED, - updated: scheduler.LAST_ALTERED, - lastExecuted: scheduler.LAST_EXECUTED, - comment: scheduler.EVENT_COMMENT, - charset: scheduler.CHARACTER_SET_CLIENT, - timezone: scheduler.TIME_ZONE + at: scheduler.EXECUTE_AT, + every: [scheduler.INTERVAL_FIELD, scheduler.INTERVAL_VALUE], + preserve: scheduler.ON_COMPLETION.includes('PRESERVE'), + comment: scheduler.EVENT_COMMENT }; }); @@ -930,19 +923,22 @@ export class MySQLClient extends AntaresCore { } async getViewInformations ({ schema, view }: { schema: string; view: string }) { - const sql = `SHOW CREATE VIEW \`${schema}\`.\`${view}\``; - const results = await this.raw(sql); + const { rows: algorithm } = await this.raw(`SHOW CREATE VIEW \`${schema}\`.\`${view}\``); + const { rows: viewInfo } = await this.raw(` + SELECT * + FROM INFORMATION_SCHEMA.VIEWS + WHERE TABLE_SCHEMA = '${schema}' + AND TABLE_NAME = '${view}' + `); - return results.rows.map(row => { - return { - algorithm: row['Create View'].match(/(?<=CREATE ALGORITHM=).*?(?=\s)/gs)[0], - definer: row['Create View'].match(/(?<=DEFINER=).*?(?=\s)/gs)[0], - security: row['Create View'].match(/(?<=SQL SECURITY ).*?(?=\s)/gs)[0], - updateOption: row['Create View'].match(/(?<=WITH ).*?(?=\s)/gs) ? row['Create View'].match(/(?<=WITH ).*?(?=\s)/gs)[0] : '', - sql: row['Create View'].match(/(?<=AS ).*?$/gs)[0], - name: row.View - }; - })[0]; + return { + algorithm: algorithm[0]['Create View'].match(/(?<=CREATE ALGORITHM=).*?(?=\s)/gs)[0], + definer: viewInfo[0].DEFINER, + security: viewInfo[0].SECURITY_TYPE, + updateOption: viewInfo[0].CHECK_OPTION === 'NONE' ? '' : viewInfo[0].CHECK_OPTION, + sql: viewInfo[0].VIEW_DEFINITION, + name: viewInfo[0].TABLE_NAME + }; } async dropView (params: { schema: string; view: string }) { @@ -955,7 +951,7 @@ export class MySQLClient extends AntaresCore { USE \`${view.schema}\`; ALTER ALGORITHM = ${view.algorithm}${view.definer ? ` DEFINER=${view.definer}` : ''} SQL SECURITY ${view.security} - params \`${view.schema}\`.\`${view.oldName}\` AS ${view.sql} ${view.updateOption ? `WITH ${view.updateOption} CHECK OPTION` : ''} + VIEW \`${view.schema}\`.\`${view.oldName}\` AS ${view.sql} ${view.updateOption ? `WITH ${view.updateOption} CHECK OPTION` : ''} `; if (view.name !== view.oldName) diff --git a/src/renderer/components/ModalAskParameters.vue b/src/renderer/components/ModalAskParameters.vue index b44c3e73..a61f93e0 100644 --- a/src/renderer/components/ModalAskParameters.vue +++ b/src/renderer/components/ModalAskParameters.vue @@ -50,14 +50,11 @@ diff --git a/src/renderer/components/WorkspaceTabPropsFunctionParamsModal.vue b/src/renderer/components/WorkspaceTabPropsFunctionParamsModal.vue index 78078537..fe0f8240 100644 --- a/src/renderer/components/WorkspaceTabPropsFunctionParamsModal.vue +++ b/src/renderer/components/WorkspaceTabPropsFunctionParamsModal.vue @@ -1,6 +1,6 @@ -