diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqliteMetaData.java b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqliteMetaData.java index 4fb72270..9aa68a90 100644 --- a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqliteMetaData.java +++ b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqliteMetaData.java @@ -1,11 +1,5 @@ package ai.chat2db.plugin.sqlite; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - import ai.chat2db.plugin.sqlite.builder.SqliteBuilder; import ai.chat2db.plugin.sqlite.type.SqliteCollationEnum; import ai.chat2db.plugin.sqlite.type.SqliteColumnTypeEnum; @@ -17,15 +11,57 @@ import ai.chat2db.spi.jdbc.DefaultMetaService; import ai.chat2db.spi.model.Database; import ai.chat2db.spi.model.Schema; import ai.chat2db.spi.model.TableMeta; +import ai.chat2db.spi.model.Trigger; import ai.chat2db.spi.sql.SQLExecutor; import com.google.common.collect.Lists; import org.apache.commons.lang3.StringUtils; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public class SqliteMetaData extends DefaultMetaService implements MetaData { + + + public static final String TRIGGER_LIST_SQL = "SELECT * FROM sqlite_master WHERE type = 'trigger';"; + public static String TRIGGER_DDL_SQL = "SELECT * FROM sqlite_master WHERE type = 'trigger' and name='%s';"; + + @Override + public List triggers(Connection connection, String databaseName, String schemaName) { + List triggers = new ArrayList<>(); + return SQLExecutor.getInstance().execute(connection, TRIGGER_LIST_SQL, resultSet -> { + while (resultSet.next()) { + Trigger trigger = new Trigger(); + String triggerName = resultSet.getString("name"); + trigger.setTriggerName(triggerName); + trigger.setDatabaseName(databaseName); + triggers.add(trigger); + } + return triggers; + }); + } + + @Override + public Trigger trigger(Connection connection, String databaseName, String schemaName, String triggerName) { + Trigger trigger = new Trigger(); + String sql = String.format(TRIGGER_DDL_SQL, triggerName); + return SQLExecutor.getInstance().execute(connection, sql, resultSet -> { + while (resultSet.next()) { + trigger.setTriggerName(triggerName); + trigger.setDatabaseName(databaseName); + trigger.setTriggerBody(resultSet.getString("sql")); + } + return trigger; + }); + } + @Override public String tableDDL(Connection connection, String databaseName, String schemaName, String tableName) { String sql = "SELECT sql FROM sqlite_master WHERE type='table' AND name='" + tableName + "'"; - return SQLExecutor.getInstance().execute(connection,sql, resultSet -> { + return SQLExecutor.getInstance().execute(connection, sql, resultSet -> { try { if (resultSet.next()) { return resultSet.getString("sql"); @@ -36,13 +72,14 @@ public class SqliteMetaData extends DefaultMetaService implements MetaData { return null; }); } + @Override public List databases(Connection connection) { return Lists.newArrayList(Database.builder().name("main").build()); } @Override - public List schemas(Connection connection,String databaseName) { + public List schemas(Connection connection, String databaseName) { return Lists.newArrayList(); } @@ -50,6 +87,7 @@ public class SqliteMetaData extends DefaultMetaService implements MetaData { public SqlBuilder getSqlBuilder() { return new SqliteBuilder(); } + @Override public TableMeta getTableMeta(String databaseName, String schemaName, String tableName) { return TableMeta.builder()