Skip to content

Commit 3ea90e4

Browse files
Add DROP TRIGGER Support
1 parent 15738da commit 3ea90e4

File tree

3 files changed

+54
-2
lines changed

3 files changed

+54
-2
lines changed

hoptimator-jdbc/src/main/java/com/linkedin/hoptimator/jdbc/HoptimatorDdlExecutor.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.linkedin.hoptimator.jdbc.ddl.HoptimatorDdlParserImpl;
3030
import com.linkedin.hoptimator.jdbc.ddl.SqlCreateMaterializedView;
3131
import com.linkedin.hoptimator.jdbc.ddl.SqlCreateTrigger;
32+
import com.linkedin.hoptimator.jdbc.ddl.SqlDropTrigger;
3233
import com.linkedin.hoptimator.jdbc.ddl.SqlPauseTrigger;
3334
import com.linkedin.hoptimator.jdbc.ddl.SqlResumeTrigger;
3435
import com.linkedin.hoptimator.util.DeploymentService;
@@ -342,6 +343,42 @@ public void execute(SqlResumeTrigger resume, CalcitePrepare.Context context) {
342343
updateTriggerPausedState(resume, resume.name, false);
343344
}
344345

346+
/** Executes a {@code DROP TRIGGER} command. */
347+
public void execute(SqlDropTrigger drop, CalcitePrepare.Context context) {
348+
logger.info("Validating statement: {}", drop);
349+
try {
350+
ValidationService.validateOrThrow(drop);
351+
} catch (SQLException e) {
352+
throw new DdlException(drop, e.getMessage(), e);
353+
}
354+
355+
if (drop.name.names.size() > 1) {
356+
throw new DdlException(drop, "Triggers cannot belong to a schema or database.");
357+
}
358+
String name = drop.name.names.get(0);
359+
360+
Trigger trigger = new Trigger(name, null, new ArrayList<>(), null, new HashMap<>());
361+
362+
Collection<Deployer> deployers = null;
363+
try {
364+
logger.info("Deleting trigger {}", name);
365+
deployers = DeploymentService.deployers(trigger, connection);
366+
DeploymentService.delete(deployers);
367+
logger.info("Deleted trigger {}", name);
368+
logger.info("DROP TRIGGER {} completed", name);
369+
} catch (Exception e) {
370+
if (deployers != null) {
371+
DeploymentService.restore(deployers);
372+
}
373+
// Handle IF EXISTS
374+
if (drop.ifExists && e.getMessage() != null && e.getMessage().contains("Error getting TableTrigger")) {
375+
logger.info("Trigger {} does not exist (IF EXISTS specified)", name);
376+
return;
377+
}
378+
throw new DdlException(drop, e.getMessage(), e);
379+
}
380+
}
381+
345382
private void updateTriggerPausedState(SqlNode sqlNode, SqlIdentifier triggerName, boolean paused) {
346383
logger.info("Validating statement: {}", sqlNode);
347384
try {

hoptimator-k8s/src/main/java/com/linkedin/hoptimator/k8s/K8sTriggerDeployer.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@ public void update() throws SQLException {
5454
super.update();
5555
}
5656

57+
@Override
58+
public void delete() throws SQLException {
59+
String canonicalName = K8sUtils.canonicalizeName(trigger.name());
60+
V1alpha1TableTrigger existingTrigger = triggerApi.get(canonicalName);
61+
if (existingTrigger == null) {
62+
throw new SQLException("Trigger " + trigger.name() + " not found.");
63+
}
64+
triggerApi.delete(existingTrigger);
65+
}
66+
5767
@Override
5868
protected V1alpha1TableTrigger toK8sObject() throws SQLException {
5969
String name = K8sUtils.canonicalizeName(trigger.name(), trigger.job().name());

hoptimator-k8s/src/test/resources/k8s-trigger-pause.id

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ select name, schema, "TABLE", paused from "k8s".table_triggers where name = 'tes
4646

4747
!ok
4848

49-
delete from "k8s".table_triggers where name = 'test';
50-
(1 row modified)
49+
drop trigger test;
50+
(0 rows modified)
51+
52+
!update
53+
54+
drop trigger if exists test;
55+
(0 rows modified)
5156

5257
!update

0 commit comments

Comments
 (0)