Skip to content

Commit ed2e841

Browse files
committed
merge
2 parents 4608bc8 + 04462d7 commit ed2e841

27 files changed

Lines changed: 1171 additions & 228 deletions

File tree

chat2db-server/chat2db-plugins/chat2db-mariadb/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
<groupId>ai.chat2db</groupId>
1616
<artifactId>chat2db-spi</artifactId>
1717
</dependency>
18+
<dependency>
19+
<groupId>ai.chat2db</groupId>
20+
<artifactId>chat2db-mysql</artifactId>
21+
<version>2.0.0-SNAPSHOT</version>
22+
</dependency>
1823
</dependencies>
1924

2025
<artifactId>chat2db-mariadb</artifactId>

chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/MariaDBMetaData.java

Lines changed: 106 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.ArrayList;
55
import java.util.List;
66

7+
import ai.chat2db.plugin.mysql.MysqlMetaData;
78
import ai.chat2db.spi.MetaData;
89
import ai.chat2db.spi.jdbc.DefaultMetaService;
910
import ai.chat2db.spi.model.Function;
@@ -13,109 +14,109 @@
1314
import ai.chat2db.spi.sql.SQLExecutor;
1415
import jakarta.validation.constraints.NotEmpty;
1516

16-
public class MariaDBMetaData extends DefaultMetaService implements MetaData {
17-
18-
19-
private static String ROUTINES_SQL
20-
=
21-
"SELECT SPECIFIC_NAME, ROUTINE_COMMENT, ROUTINE_DEFINITION FROM information_schema.routines WHERE "
22-
+ "routine_type = '%s' AND ROUTINE_SCHEMA ='%s' AND "
23-
+ "routine_name = '%s';";
24-
25-
@Override
26-
public Function function(Connection connection, @NotEmpty String databaseName, String schemaName,
27-
String functionName) {
28-
29-
String sql = String.format(ROUTINES_SQL, "FUNCTION", databaseName, functionName);
30-
return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
31-
Function function = new Function();
32-
function.setDatabaseName(databaseName);
33-
function.setSchemaName(schemaName);
34-
function.setFunctionName(functionName);
35-
if (resultSet.next()) {
36-
function.setSpecificName(resultSet.getString("SPECIFIC_NAME"));
37-
function.setRemarks(resultSet.getString("ROUTINE_COMMENT"));
38-
function.setFunctionBody(resultSet.getString("ROUTINE_DEFINITION"));
39-
}
40-
return function;
41-
});
42-
43-
}
44-
45-
private static String TRIGGER_SQL
46-
= "SELECT TRIGGER_NAME,EVENT_MANIPULATION, ACTION_STATEMENT FROM INFORMATION_SCHEMA.TRIGGERS where "
47-
+ "TRIGGER_SCHEMA = '%s' AND TRIGGER_NAME = '%s';";
48-
49-
private static String TRIGGER_SQL_LIST
50-
= "SELECT TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS where TRIGGER_SCHEMA = '%s';";
51-
52-
@Override
53-
public List<Trigger> triggers(Connection connection, String databaseName, String schemaName) {
54-
List<Trigger> triggers = new ArrayList<>();
55-
String sql = String.format(TRIGGER_SQL_LIST, databaseName);
56-
return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
57-
while (resultSet.next()) {
58-
Trigger trigger = new Trigger();
59-
trigger.setTriggerName(resultSet.getString("TRIGGER_NAME"));
60-
trigger.setSchemaName(schemaName);
61-
trigger.setDatabaseName(databaseName);
62-
triggers.add(trigger);
63-
}
64-
return triggers;
65-
});
66-
}
67-
68-
@Override
69-
public Trigger trigger(Connection connection, @NotEmpty String databaseName, String schemaName,
70-
String triggerName) {
71-
72-
String sql = String.format(TRIGGER_SQL, databaseName, triggerName);
73-
return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
74-
Trigger trigger = new Trigger();
75-
trigger.setDatabaseName(databaseName);
76-
trigger.setSchemaName(schemaName);
77-
trigger.setTriggerName(triggerName);
78-
if (resultSet.next()) {
79-
trigger.setTriggerBody(resultSet.getString("ACTION_STATEMENT"));
80-
}
81-
return trigger;
82-
});
83-
}
84-
85-
@Override
86-
public Procedure procedure(Connection connection, @NotEmpty String databaseName, String schemaName,
87-
String procedureName) {
88-
String sql = String.format(ROUTINES_SQL, "PROCEDURE", databaseName, procedureName);
89-
return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
90-
Procedure procedure = new Procedure();
91-
procedure.setDatabaseName(databaseName);
92-
procedure.setSchemaName(schemaName);
93-
procedure.setProcedureName(procedureName);
94-
if (resultSet.next()) {
95-
procedure.setSpecificName(resultSet.getString("SPECIFIC_NAME"));
96-
procedure.setRemarks(resultSet.getString("ROUTINE_COMMENT"));
97-
procedure.setProcedureBody(resultSet.getString("ROUTINE_DEFINITION"));
98-
}
99-
return procedure;
100-
});
101-
}
102-
103-
private static String VIEW_SQL
104-
= "SELECT TABLE_SCHEMA AS DatabaseName, TABLE_NAME AS ViewName, VIEW_DEFINITION AS definition, CHECK_OPTION, "
105-
+ "IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '%s' AND TABLE_NAME = '%s';";
106-
107-
@Override
108-
public Table view(Connection connection, String databaseName, String schemaName, String viewName) {
109-
String sql = String.format(VIEW_SQL, databaseName, viewName);
110-
return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
111-
Table table = new Table();
112-
table.setDatabaseName(databaseName);
113-
table.setSchemaName(schemaName);
114-
table.setName(viewName);
115-
if (resultSet.next()) {
116-
table.setDdl(resultSet.getString("definition"));
117-
}
118-
return table;
119-
});
120-
}
17+
public class MariaDBMetaData extends MysqlMetaData implements MetaData {
18+
19+
20+
// private static String ROUTINES_SQL
21+
// =
22+
// "SELECT SPECIFIC_NAME, ROUTINE_COMMENT, ROUTINE_DEFINITION FROM information_schema.routines WHERE "
23+
// + "routine_type = '%s' AND ROUTINE_SCHEMA ='%s' AND "
24+
// + "routine_name = '%s';";
25+
//
26+
// @Override
27+
// public Function function(Connection connection, @NotEmpty String databaseName, String schemaName,
28+
// String functionName) {
29+
//
30+
// String sql = String.format(ROUTINES_SQL, "FUNCTION", databaseName, functionName);
31+
// return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
32+
// Function function = new Function();
33+
// function.setDatabaseName(databaseName);
34+
// function.setSchemaName(schemaName);
35+
// function.setFunctionName(functionName);
36+
// if (resultSet.next()) {
37+
// function.setSpecificName(resultSet.getString("SPECIFIC_NAME"));
38+
// function.setRemarks(resultSet.getString("ROUTINE_COMMENT"));
39+
// function.setFunctionBody(resultSet.getString("ROUTINE_DEFINITION"));
40+
// }
41+
// return function;
42+
// });
43+
//
44+
// }
45+
//
46+
// private static String TRIGGER_SQL
47+
// = "SELECT TRIGGER_NAME,EVENT_MANIPULATION, ACTION_STATEMENT FROM INFORMATION_SCHEMA.TRIGGERS where "
48+
// + "TRIGGER_SCHEMA = '%s' AND TRIGGER_NAME = '%s';";
49+
//
50+
// private static String TRIGGER_SQL_LIST
51+
// = "SELECT TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS where TRIGGER_SCHEMA = '%s';";
52+
//
53+
// @Override
54+
// public List<Trigger> triggers(Connection connection, String databaseName, String schemaName) {
55+
// List<Trigger> triggers = new ArrayList<>();
56+
// String sql = String.format(TRIGGER_SQL_LIST, databaseName);
57+
// return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
58+
// while (resultSet.next()) {
59+
// Trigger trigger = new Trigger();
60+
// trigger.setTriggerName(resultSet.getString("TRIGGER_NAME"));
61+
// trigger.setSchemaName(schemaName);
62+
// trigger.setDatabaseName(databaseName);
63+
// triggers.add(trigger);
64+
// }
65+
// return triggers;
66+
// });
67+
// }
68+
//
69+
// @Override
70+
// public Trigger trigger(Connection connection, @NotEmpty String databaseName, String schemaName,
71+
// String triggerName) {
72+
//
73+
// String sql = String.format(TRIGGER_SQL, databaseName, triggerName);
74+
// return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
75+
// Trigger trigger = new Trigger();
76+
// trigger.setDatabaseName(databaseName);
77+
// trigger.setSchemaName(schemaName);
78+
// trigger.setTriggerName(triggerName);
79+
// if (resultSet.next()) {
80+
// trigger.setTriggerBody(resultSet.getString("ACTION_STATEMENT"));
81+
// }
82+
// return trigger;
83+
// });
84+
// }
85+
//
86+
// @Override
87+
// public Procedure procedure(Connection connection, @NotEmpty String databaseName, String schemaName,
88+
// String procedureName) {
89+
// String sql = String.format(ROUTINES_SQL, "PROCEDURE", databaseName, procedureName);
90+
// return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
91+
// Procedure procedure = new Procedure();
92+
// procedure.setDatabaseName(databaseName);
93+
// procedure.setSchemaName(schemaName);
94+
// procedure.setProcedureName(procedureName);
95+
// if (resultSet.next()) {
96+
// procedure.setSpecificName(resultSet.getString("SPECIFIC_NAME"));
97+
// procedure.setRemarks(resultSet.getString("ROUTINE_COMMENT"));
98+
// procedure.setProcedureBody(resultSet.getString("ROUTINE_DEFINITION"));
99+
// }
100+
// return procedure;
101+
// });
102+
// }
103+
//
104+
// private static String VIEW_SQL
105+
// = "SELECT TABLE_SCHEMA AS DatabaseName, TABLE_NAME AS ViewName, VIEW_DEFINITION AS definition, CHECK_OPTION, "
106+
// + "IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '%s' AND TABLE_NAME = '%s';";
107+
//
108+
// @Override
109+
// public Table view(Connection connection, String databaseName, String schemaName, String viewName) {
110+
// String sql = String.format(VIEW_SQL, databaseName, viewName);
111+
// return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
112+
// Table table = new Table();
113+
// table.setDatabaseName(databaseName);
114+
// table.setSchemaName(schemaName);
115+
// table.setName(viewName);
116+
// if (resultSet.next()) {
117+
// table.setDdl(resultSet.getString("definition"));
118+
// }
119+
// return table;
120+
// });
121+
// }
121122
}

chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlMetaData.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public Procedure procedure(Connection connection, @NotEmpty String databaseName,
125125

126126
@Override
127127
public List<TableColumn> columns(Connection connection, String databaseName, String schemaName, String tableName) {
128-
String sql = String.format(SELECT_TABLE_COLUMNS, databaseName, tableName);
128+
String sql = String.format(SELECT_TABLE_COLUMNS, databaseName, tableName);
129129
List<TableColumn> tableColumns = new ArrayList<>();
130130
return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
131131
while (resultSet.next()) {
@@ -146,20 +146,20 @@ public List<TableColumn> columns(Connection connection, String databaseName, Str
146146
column.setDecimalDigits(resultSet.getInt("NUMERIC_SCALE"));
147147
column.setCharSetName(resultSet.getString("CHARACTER_SET_NAME"));
148148
column.setCollationName(resultSet.getString("COLLATION_NAME"));
149-
setColumnSize(column,resultSet.getString("COLUMN_TYPE"));
149+
setColumnSize(column, resultSet.getString("COLUMN_TYPE"));
150150
tableColumns.add(column);
151151
}
152152
return tableColumns;
153153
});
154154
}
155155

156-
private void setColumnSize(TableColumn column,String columnType){
156+
private void setColumnSize(TableColumn column, String columnType) {
157157
try {
158158
if (columnType.contains("(")) {
159159
String size = columnType.substring(columnType.indexOf("(") + 1, columnType.indexOf(")"));
160-
if("SET".equalsIgnoreCase(column.getColumnType())|| "ENUM".equalsIgnoreCase(column.getColumnType())){
160+
if ("SET".equalsIgnoreCase(column.getColumnType()) || "ENUM".equalsIgnoreCase(column.getColumnType())) {
161161
column.setValue(size);
162-
}else {
162+
} else {
163163
if (size.contains(",")) {
164164
String[] sizes = size.split(",");
165165
if (StringUtils.isNotBlank(sizes[0])) {
@@ -173,12 +173,11 @@ private void setColumnSize(TableColumn column,String columnType){
173173
}
174174
}
175175
}
176-
}catch (Exception e){
176+
} catch (Exception e) {
177177
}
178178
}
179179

180180

181-
182181
private static String VIEW_SQL
183182
= "SELECT TABLE_SCHEMA AS DatabaseName, TABLE_NAME AS ViewName, VIEW_DEFINITION AS definition, CHECK_OPTION, "
184183
+ "IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '%s' AND TABLE_NAME = '%s';";
@@ -271,4 +270,9 @@ public TableMeta getTableMeta(String databaseName, String schemaName, String tab
271270
.collations(MysqlCollationEnum.getCollations())
272271
.build();
273272
}
273+
274+
@Override
275+
public String getMetaDataName(String... names) {
276+
return Arrays.stream(names).map(name -> "`" + name + "`").collect(Collectors.joining("."));
277+
}
274278
}

chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/OracleMetaData.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,4 +281,9 @@ public TableMeta getTableMeta(String databaseName, String schemaName, String tab
281281
.collations(Lists.newArrayList())
282282
.build();
283283
}
284+
285+
@Override
286+
public String getMetaDataName(String... names) {
287+
return Arrays.stream(names).map(name -> "\"" + name + "\"").collect(Collectors.joining("."));
288+
}
284289
}

chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/builder/OracleSqlBuilder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ public String buildModifyTaleSql(Table oldTable, Table newTable) {
7979
if (StringUtils.isNotBlank(tableColumn.getEditStatus())) {
8080
OracleColumnTypeEnum typeEnum = OracleColumnTypeEnum.getByType(tableColumn.getColumnType());
8181
script.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(";\n");
82+
if(StringUtils.isNotBlank(tableColumn.getComment())){
83+
script.append("\n").append(buildComment(tableColumn)).append(";\n");
84+
}
8285
}
8386
}
8487

chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqliteMetaData.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import java.sql.Connection;
44
import java.sql.SQLException;
5+
import java.util.Arrays;
56
import java.util.List;
7+
import java.util.stream.Collectors;
68

79
import ai.chat2db.spi.MetaData;
810
import ai.chat2db.spi.jdbc.DefaultMetaService;
@@ -35,4 +37,9 @@ public List<Database> databases(Connection connection) {
3537
public List<Schema> schemas(Connection connection,String databaseName) {
3638
return Lists.newArrayList();
3739
}
40+
41+
@Override
42+
public String getMetaDataName(String... names) {
43+
return Arrays.stream(names).collect(Collectors.joining("."));
44+
}
3845
}

chat2db-server/chat2db-plugins/chat2db-sqlserver/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
<groupId>ai.chat2db</groupId>
1818
<artifactId>chat2db-spi</artifactId>
1919
</dependency>
20+
<dependency>
21+
<groupId>com.microsoft.sqlserver</groupId>
22+
<artifactId>mssql-jdbc</artifactId>
23+
<version>11.2.1.jre17</version>
24+
<scope>test</scope>
25+
</dependency>
2026
</dependencies>
2127

2228
</project>

0 commit comments

Comments
 (0)