diff --git a/packages/tools/src/SqlDumper.ts b/packages/tools/src/SqlDumper.ts
index 04314dfc2..d778c038a 100644
--- a/packages/tools/src/SqlDumper.ts
+++ b/packages/tools/src/SqlDumper.ts
@@ -18,6 +18,7 @@ import type {
AlterProcessor,
SqlObjectInfo,
CallableObjectInfo,
+ SchedulerEventInfo,
} from 'dbgate-types';
import _isString from 'lodash/isString';
import _isNumber from 'lodash/isNumber';
@@ -431,6 +432,14 @@ export class SqlDumper implements AlterProcessor {
changeTriggerSchema(obj: TriggerInfo, newSchema: string) {}
renameTrigger(obj: TriggerInfo, newSchema: string) {}
+ createSchedulerEvent(obj: SchedulerEventInfo) {
+ this.putRaw(obj.createSql);
+ this.endCommand();
+ }
+ dropSchedulerEvent(obj: SchedulerEventInfo, { testIfExists = false }) {
+ this.putCmd('^drop ^event %f', obj);
+ }
+
dropConstraintCore(cnt: ConstraintInfo) {
this.putCmd('^alter ^table %f ^drop ^constraint %i', cnt, cnt.constraintName);
}
diff --git a/packages/tools/src/SqlGenerator.ts b/packages/tools/src/SqlGenerator.ts
index f3e1589a2..a5e3b1009 100644
--- a/packages/tools/src/SqlGenerator.ts
+++ b/packages/tools/src/SqlGenerator.ts
@@ -3,6 +3,7 @@ import type {
EngineDriver,
FunctionInfo,
ProcedureInfo,
+ SchedulerEventInfo,
TableInfo,
TriggerInfo,
ViewInfo,
@@ -49,12 +50,16 @@ interface SqlGeneratorOptions {
dropTriggers: boolean;
checkIfTriggerExists: boolean;
createTriggers: boolean;
+
+ dropSchedulerEvents: boolean;
+ checkIfSchedulerEventExists: boolean;
+ createSchedulerEvents: boolean;
}
interface SqlGeneratorObject {
schemaName: string;
pureName: string;
- objectTypeField: 'tables' | 'views' | 'procedures' | 'functions';
+ objectTypeField: 'tables' | 'views' | 'procedures' | 'functions' | 'triggers' | 'schedulerEvents';
}
export class SqlGenerator {
@@ -64,6 +69,7 @@ export class SqlGenerator {
private procedures: ProcedureInfo[];
private functions: FunctionInfo[];
private triggers: TriggerInfo[];
+ private schedulerEvents: SchedulerEventInfo[];
public dbinfo: DatabaseInfo;
public isTruncated = false;
public isUnhandledException = false;
@@ -83,6 +89,7 @@ export class SqlGenerator {
this.procedures = this.extract('procedures');
this.functions = this.extract('functions');
this.triggers = this.extract('triggers');
+ this.schedulerEvents = this.extract('schedulerEvents');
}
private handleException = error => {
@@ -104,6 +111,8 @@ export class SqlGenerator {
if (this.checkDumper()) return;
this.dropObjects(this.triggers, 'Trigger');
if (this.checkDumper()) return;
+ this.dropObjects(this.schedulerEvents, 'SchedulerEvent');
+ if (this.checkDumper()) return;
this.dropTables();
if (this.checkDumper()) return;
@@ -130,6 +139,8 @@ export class SqlGenerator {
if (this.checkDumper()) return;
this.createObjects(this.triggers, 'Trigger');
if (this.checkDumper()) return;
+ this.createObjects(this.schedulerEvents, 'SchedulerEvent');
+ if (this.checkDumper()) return;
} finally {
process.off('uncaughtException', this.handleException);
}
diff --git a/packages/web/src/modals/SqlGeneratorModal.svelte b/packages/web/src/modals/SqlGeneratorModal.svelte
index 632ec4447..ef4dbfa4c 100644
--- a/packages/web/src/modals/SqlGeneratorModal.svelte
+++ b/packages/web/src/modals/SqlGeneratorModal.svelte
@@ -74,7 +74,7 @@
$: generatePreview($valuesStore, $checkedObjectsStore);
$: objectList = _.flatten(
- ['tables', 'views', 'matviews', 'procedures', 'functions'].map(objectTypeField =>
+ ['tables', 'views', 'matviews', 'procedures', 'functions', 'triggers', 'schedulerEvents'].map(objectTypeField =>
_.sortBy(
(($dbinfo || {})[objectTypeField] || []).map(obj => ({ ...obj, objectTypeField })),
['schemaName', 'pureName']
@@ -214,8 +214,8 @@