Support for custom drivers

This commit is contained in:
jipengfei-jpf
2023-06-23 18:25:41 +08:00
parent e4466fb34d
commit 5047569358
96 changed files with 2604 additions and 2 deletions

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>ai.chat2db</groupId>
<artifactId>chat2db-plugins</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>ai.chat2db</groupId>
<artifactId>chat2db-spi</artifactId>
</dependency>
</dependencies>
<artifactId>chat2db-redis</artifactId>
</project>

View File

@ -0,0 +1,45 @@
package ai.chat2db.plugin.redis;
import ai.chat2db.spi.DBManage;
public class RedisDBManage implements DBManage {
@Override
public void connectDatabase(String database) {
}
@Override
public void modifyDatabase(String databaseName, String newDatabaseName) {
}
@Override
public void createDatabase(String databaseName) {
}
@Override
public void dropDatabase(String databaseName) {
}
@Override
public void createSchema(String databaseName, String schemaName) {
}
@Override
public void dropSchema(String databaseName, String schemaName) {
}
@Override
public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
}
@Override
public void dropTable(String databaseName, String schemaName, String tableName) {
}
}

View File

@ -0,0 +1,60 @@
package ai.chat2db.plugin.redis;
import ai.chat2db.spi.MetaData;
import ai.chat2db.spi.jdbc.DefaultMetaService;
import ai.chat2db.spi.model.Table;
import ai.chat2db.spi.sql.SQLExecutor;
import jakarta.validation.constraints.NotEmpty;
import org.apache.commons.lang3.StringUtils;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class RedisMetaData extends DefaultMetaService implements MetaData {
@Override
public String tableDDL(@NotEmpty String databaseName, String schemaName, @NotEmpty String tableName) {
return "";
}
@Override
public List<String> databases() {
List<String> databases = new ArrayList<>();
return SQLExecutor.getInstance().executeSql("config get databases", resultSet -> {
try {
if (resultSet.next()) {
Object count = resultSet.getObject(2);
if(StringUtils.isNotBlank(count.toString())) {
for (int i = 0; i < Integer.parseInt(count.toString()); i++) {
databases.add(String.valueOf(i));
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
return databases;
});
}
@Override
public List<Table> tables(String databaseName, String schemaName, String tableName) {
return SQLExecutor.getInstance().executeSql("scan 0 MATCH * COUNT 1000", resultSet -> {
List<Table> tables = new ArrayList<>();
try {
while (resultSet.next()) {
ArrayList list = (ArrayList)resultSet.getObject(2);
for (Object object : list) {
Table table = new Table();
table.setName(object.toString());
tables.add(table);
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
return tables;
});
}
}

View File

@ -0,0 +1,26 @@
package ai.chat2db.plugin.redis;
import ai.chat2db.plugin.redis.builder.DBConfigBuilder;
import ai.chat2db.spi.DBManage;
import ai.chat2db.spi.MetaData;
import ai.chat2db.spi.Plugin;
import ai.chat2db.spi.config.DBConfig;
public class RedisPlugin implements Plugin {
@Override
public DBConfig getDBConfig() {
return DBConfigBuilder.buildDBConfig();
}
@Override
public MetaData getMetaData() {
return new RedisMetaData();
}
@Override
public DBManage getDBManage() {
return new RedisDBManage();
}
}

View File

@ -0,0 +1,21 @@
package ai.chat2db.plugin.redis.builder;
import ai.chat2db.spi.config.DBConfig;
import ai.chat2db.spi.config.DriverConfig;
import com.google.common.collect.Lists;
public class DBConfigBuilder {
public static DBConfig buildDBConfig() {
DBConfig dbConfig = new DBConfig();
dbConfig.setName("Redis");
dbConfig.setDbType("REDIS");
DriverConfig driverConfig = new DriverConfig();
driverConfig.setJdbcDriver("sredis-jdbc-driver-1.3.jar");
driverConfig.setJdbcDriverClass("jdbc.RedisDriver");
driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/redis-jdbc-driver-1.3.jar"));
driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
dbConfig.setDefaultDriverConfig(driverConfig);
dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
return dbConfig;
}
}

View File

@ -0,0 +1 @@
ai.chat2db.plugin.redis.RedisPlugin