|
29 | 29 | import com.linkedin.hoptimator.jdbc.ddl.HoptimatorDdlParserImpl; |
30 | 30 | import com.linkedin.hoptimator.jdbc.ddl.SqlCreateMaterializedView; |
31 | 31 | import com.linkedin.hoptimator.jdbc.ddl.SqlCreateTrigger; |
| 32 | +import com.linkedin.hoptimator.jdbc.ddl.SqlDropTrigger; |
32 | 33 | import com.linkedin.hoptimator.jdbc.ddl.SqlPauseTrigger; |
33 | 34 | import com.linkedin.hoptimator.jdbc.ddl.SqlResumeTrigger; |
34 | 35 | import com.linkedin.hoptimator.util.DeploymentService; |
@@ -342,6 +343,42 @@ public void execute(SqlResumeTrigger resume, CalcitePrepare.Context context) { |
342 | 343 | updateTriggerPausedState(resume, resume.name, false); |
343 | 344 | } |
344 | 345 |
|
| 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 | + |
345 | 382 | private void updateTriggerPausedState(SqlNode sqlNode, SqlIdentifier triggerName, boolean paused) { |
346 | 383 | logger.info("Validating statement: {}", sqlNode); |
347 | 384 | try { |
|
0 commit comments