Skip to content

Commit 348a6e8

Browse files
authored
feat: get table triggers from mariaDB (#189)
1 parent d39eda3 commit 348a6e8

2 files changed

Lines changed: 83 additions & 0 deletions

File tree

meta/src/main/java/com/databasir/core/meta/provider/MetaProviders.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.databasir.core.meta.provider;
22

33
import com.databasir.core.meta.provider.jdbc.*;
4+
import com.databasir.core.meta.provider.maria.MariaTriggerMetaProvider;
45
import com.databasir.core.meta.provider.mysql.MysqlTableTriggerMetaProvider;
56
import com.databasir.core.meta.provider.postgresql.PostgresqlTriggerMetaProvider;
67
import com.databasir.core.meta.provider.sqlserver.SqlServerColumnMetaProvider;
@@ -47,6 +48,9 @@ public static DatabaseMetaProvider of(Connection connection) {
4748
if (url.contains(":postgresql:") || url.contains(":pgsql:")) {
4849
return postgresql();
4950
}
51+
if (url.contains(":mariadb:")) {
52+
return mariaDB();
53+
}
5054
return jdbc();
5155
}
5256

@@ -91,4 +95,18 @@ private static DatabaseMetaProvider postgresql() {
9195
);
9296
return new JdbcDatabaseMetaProvider(tableMetaProvider);
9397
}
98+
99+
private static DatabaseMetaProvider mariaDB() {
100+
var columnMetaProvider = new JdbcColumnMetaProvider();
101+
var foreignKeyMetaProvider = new JdbcForeignKeyMetaProvider();
102+
var indexMetaProvider = new JdbcIndexMetaProvider();
103+
var triggerMetaProvider = new MariaTriggerMetaProvider();
104+
var tableMetaProvider = new JdbcTableMetaProvider(
105+
columnMetaProvider,
106+
indexMetaProvider,
107+
triggerMetaProvider,
108+
foreignKeyMetaProvider
109+
);
110+
return new JdbcDatabaseMetaProvider(tableMetaProvider);
111+
}
94112
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.databasir.core.meta.provider.maria;
2+
3+
import com.databasir.core.meta.data.TriggerMeta;
4+
import com.databasir.core.meta.provider.TriggerMetaProvider;
5+
import com.databasir.core.meta.provider.condition.TableCondition;
6+
import lombok.extern.slf4j.Slf4j;
7+
8+
import java.sql.Connection;
9+
import java.sql.PreparedStatement;
10+
import java.sql.ResultSet;
11+
import java.sql.SQLException;
12+
import java.util.ArrayList;
13+
import java.util.Collections;
14+
import java.util.List;
15+
import java.util.Objects;
16+
17+
@Slf4j
18+
public class MariaTriggerMetaProvider implements TriggerMetaProvider {
19+
@Override
20+
public List<TriggerMeta> selectTriggers(Connection connection, TableCondition condition) {
21+
String sql = "SELECT \n"
22+
+ " TRIGGER_NAME,\n"
23+
+ " TRIGGER_SCHEMA,\n"
24+
+ " TRIGGER_CATALOG,\n"
25+
+ " EVENT_OBJECT_CATALOG,\n"
26+
+ " EVENT_OBJECT_SCHEMA,\n"
27+
+ " EVENT_OBJECT_TABLE,\n"
28+
+ " ACTION_STATEMENT,\n"
29+
+ " ACTION_TIMING,\n"
30+
+ " EVENT_MANIPULATION,\n"
31+
+ " CREATED\n"
32+
+ "FROM information_schema.triggers "
33+
+ "WHERE TRIGGER_SCHEMA = ? AND EVENT_OBJECT_TABLE = ?";
34+
try {
35+
PreparedStatement preparedStatement = connection.prepareStatement(sql);
36+
// TODO : mariaDB's default database is 'def', the schema is equal to the user's input db name
37+
preparedStatement.setObject(1, condition.getDatabaseName());
38+
preparedStatement.setObject(2, condition.getTableName());
39+
ResultSet results = preparedStatement.executeQuery();
40+
List<TriggerMeta> triggers = new ArrayList<>();
41+
while (results.next()) {
42+
String name = Objects.requireNonNullElse(results.getString("TRIGGER_NAME"), "");
43+
String statement = results.getString("ACTION_STATEMENT");
44+
String timing = results.getString("ACTION_TIMING");
45+
String manipulation = results.getString("EVENT_MANIPULATION");
46+
String created = results.getString("CREATED");
47+
if (created == null) {
48+
created = "unknown";
49+
}
50+
TriggerMeta meta = TriggerMeta.builder()
51+
.name(name)
52+
.manipulation(manipulation)
53+
.timing(timing)
54+
.statement(statement)
55+
.createAt(created)
56+
.build();
57+
triggers.add(meta);
58+
}
59+
return triggers;
60+
} catch (SQLException e) {
61+
log.warn("get trigger meta failed", e);
62+
return Collections.emptyList();
63+
}
64+
}
65+
}

0 commit comments

Comments
 (0)