fix sqlite triggers query and trigger ddl query

This commit is contained in:
zgq
2024-03-11 19:15:07 +08:00
parent 73f420ec5e
commit 0e63ff1acb

View File

@ -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<Trigger> triggers(Connection connection, String databaseName, String schemaName) {
List<Trigger> 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<Database> databases(Connection connection) {
return Lists.newArrayList(Database.builder().name("main").build());
}
@Override
public List<Schema> schemas(Connection connection,String databaseName) {
public List<Schema> 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()