Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ai.chat2db.plugin.xugudb;

import ai.chat2db.plugin.xugudb.identifier.XugudbIdentifierProcessor;
import ai.chat2db.spi.IDbManager;
import ai.chat2db.spi.DefaultDBManager;
import ai.chat2db.community.domain.api.model.async.AsyncContext;
Expand Down Expand Up @@ -27,7 +28,7 @@ public class XUGUDBManager extends DefaultDBManager implements IDbManager {


private String format(String tableName) {
return "\"" + tableName + "\"";
return XugudbIdentifierProcessor.INSTANCE.quoteIdentifierAlways(tableName);
}


Expand All @@ -54,7 +55,7 @@ public void exportDatabase(Connection connection, String databaseName, String sc
}

private void exportTables(Connection connection, String schemaName, AsyncContext asyncContext) throws SQLException {
String sql = String.format(SQL_SELECT_TABLE_NAME_ALL_TABLES, schemaName);
String sql = String.format(SQL_SELECT_TABLE_NAME_ALL_TABLES, XugudbIdentifierProcessor.INSTANCE.escapeString(schemaName));
try (PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery()) {
while (resultSet.next()) {
String tableName = resultSet.getString("TABLE_NAME");
Expand All @@ -71,7 +72,7 @@ private void exportTable(Connection connection, String tableName, String schemaN
(SELECT dbms_metadata.get_ddl('TABLE', '%s', '%s') FROM dual) AS ddl
FROM dual;
""";
try (PreparedStatement statement = connection.prepareStatement(String.format(sql, tableName, tableName, schemaName)); ResultSet resultSet = statement.executeQuery()) {
try (PreparedStatement statement = connection.prepareStatement(String.format(sql, XugudbIdentifierProcessor.INSTANCE.escapeString(tableName), XugudbIdentifierProcessor.INSTANCE.escapeString(tableName), XugudbIdentifierProcessor.INSTANCE.escapeString(schemaName))); ResultSet resultSet = statement.executeQuery()) {
String formatSchemaName = format(schemaName);
String formatTableName = format(tableName);
if (resultSet.next()) {
Expand All @@ -82,7 +83,7 @@ private void exportTable(Connection connection, String tableName, String schemaN
String comment = resultSet.getString("comments");
if (StringUtils.isNotBlank(comment)) {
sqlBuilder.append(SQL_COMMENT_TABLE).append(formatSchemaName).append(".").append(formatTableName)
.append(" IS ").append("'").append(comment).append("';");
.append(" IS ").append("'").append(XugudbIdentifierProcessor.INSTANCE.escapeString(comment)).append("';");
}
asyncContext.write(sqlBuilder.toString());
exportTableColumnComment(connection, schemaName, tableName, asyncContext);
Expand All @@ -95,14 +96,14 @@ private void exportTable(Connection connection, String tableName, String schemaN

private void exportTableColumnComment(Connection connection, String schemaName, String tableName, AsyncContext asyncContext) throws SQLException {
String sql = String.format(SQL_SELECT_COLNAME_COMMENT_SYS_SYSCOLUMNCOMMENTS +
"where SCHNAME = '%s' and TVNAME = '%s'and TABLE_TYPE = 'TABLE';", schemaName, tableName);
"where SCHNAME = '%s' and TVNAME = '%s'and TABLE_TYPE = 'TABLE';", XugudbIdentifierProcessor.INSTANCE.escapeString(schemaName), XugudbIdentifierProcessor.INSTANCE.escapeString(tableName));
try (PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery()) {
while (resultSet.next()) {
String columnName = resultSet.getString("COLNAME");
String comment = resultSet.getString("COMMENT$");
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append(SQL_COMMENT_COLUMN).append(format(schemaName)).append(".").append(format(tableName))
.append(".").append(format(columnName)).append(" IS ").append("'").append(comment).append("';").append("\n");
.append(".").append(format(columnName)).append(" IS ").append("'").append(XugudbIdentifierProcessor.INSTANCE.escapeString(comment)).append("';").append("\n");
asyncContext.write(sqlBuilder.toString());
}
}
Expand All @@ -119,7 +120,7 @@ private void exportViews(Connection connection, String schemaName, AsyncContext
}

private void exportView(Connection connection, String viewName, String schemaName, AsyncContext asyncContext) throws SQLException {
String sql = String.format(SQL_SELECT_DBMS_METADATA_GET_DDL, viewName, schemaName);
String sql = String.format(SQL_SELECT_DBMS_METADATA_GET_DDL, XugudbIdentifierProcessor.INSTANCE.escapeString(viewName), XugudbIdentifierProcessor.INSTANCE.escapeString(schemaName));
try (PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery()) {
if (resultSet.next()) {
StringBuilder sqlBuilder = new StringBuilder();
Expand All @@ -139,7 +140,7 @@ private void exportProcedures(Connection connection, String schemaName, AsyncCon
}

private void exportProcedure(Connection connection, String schemaName, String procedureName, AsyncContext asyncContext) throws SQLException {
String sql = String.format(ROUTINES_SQL, "PROC", schemaName, procedureName);
String sql = String.format(ROUTINES_SQL, "PROC", XugudbIdentifierProcessor.INSTANCE.escapeString(schemaName), XugudbIdentifierProcessor.INSTANCE.escapeString(procedureName));
try (PreparedStatement statement = connection.prepareStatement(sql); ResultSet resultSet = statement.executeQuery()) {
if (resultSet.next()) {
StringBuilder sqlBuilder = new StringBuilder();
Expand All @@ -150,7 +151,7 @@ private void exportProcedure(Connection connection, String schemaName, String pr
}

private void exportTriggers(Connection connection, String schemaName, AsyncContext asyncContext) throws SQLException {
String sql = String.format(TRIGGER_SQL_LIST, schemaName);
String sql = String.format(TRIGGER_SQL_LIST, XugudbIdentifierProcessor.INSTANCE.escapeString(schemaName));
try (PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery()) {
while (resultSet.next()) {
String triggerName = resultSet.getString("TRIGGER_NAME");
Expand All @@ -160,7 +161,7 @@ private void exportTriggers(Connection connection, String schemaName, AsyncConte
}

private void exportTrigger(Connection connection, String schemaName, String triggerName, AsyncContext asyncContext) throws SQLException {
String sql = String.format(TRIGGER_SQL, schemaName, triggerName);
String sql = String.format(TRIGGER_SQL, XugudbIdentifierProcessor.INSTANCE.escapeString(schemaName), XugudbIdentifierProcessor.INSTANCE.escapeString(triggerName));
try (PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery()) {
if (resultSet.next()) {
StringBuilder sqlBuilder = new StringBuilder();
Expand All @@ -179,14 +180,14 @@ public void connectDatabase(Connection connection, String database) {
}
String schemaName = connectInfo.getSchemaName();
try {
DefaultSQLExecutor.getInstance().execute(connection, String.format(SQL_SET_SCHEMA, schemaName));
DefaultSQLExecutor.getInstance().execute(connection, String.format(SQL_SET_SCHEMA, format(schemaName)));
} catch (SQLException e) {
throw new RuntimeException(e);
}
}

@Override
public String dropTable(Connection connection, String databaseName, String schemaName, String tableName) {
return String.format(SQL_DROP_TABLE_EXISTS, tableName);
return String.format(SQL_DROP_TABLE_EXISTS, format(tableName));
}
}
Loading
Loading