Skip to content

Commit c24e3b1

Browse files
authored
[Improve][Connector-V2] Add pre-check starrocks version before exeucte alter table field name (#8237)
1 parent 2f1c54e commit c24e3b1

File tree

2 files changed

+54
-24
lines changed
  • seatunnel-connectors-v2/connector-starrocks

2 files changed

+54
-24
lines changed

Diff for: seatunnel-connectors-v2/connector-starrocks/pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
<mysql.version>8.0.16</mysql.version>
3737
<starrocks.thrift.sdk.version>1.0.1</starrocks.thrift.sdk.version>
3838
<arrow.version>5.0.0</arrow.version>
39+
<mavenartifact.version>3.6.3</mavenartifact.version>
3940
</properties>
4041

4142
<dependencies>
@@ -70,6 +71,11 @@
7071
<artifactId>starrocks-thrift-sdk</artifactId>
7172
<version>${starrocks.thrift.sdk.version}</version>
7273
</dependency>
74+
<dependency>
75+
<groupId>org.apache.maven</groupId>
76+
<artifactId>maven-artifact</artifactId>
77+
<version>${mavenartifact.version}</version>
78+
</dependency>
7379
</dependencies>
7480

7581
</project>

Diff for: seatunnel-connectors-v2/connector-starrocks/src/main/java/org/apache/seatunnel/connectors/seatunnel/starrocks/util/SchemaUtils.java

+48-24
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,20 @@
3232
import org.apache.seatunnel.connectors.seatunnel.starrocks.datatypes.StarRocksType;
3333
import org.apache.seatunnel.connectors.seatunnel.starrocks.datatypes.StarRocksTypeConverter;
3434

35+
import org.apache.maven.artifact.versioning.ComparableVersion;
36+
3537
import lombok.extern.slf4j.Slf4j;
3638

3739
import java.sql.Connection;
40+
import java.sql.ResultSet;
3841
import java.sql.SQLException;
3942
import java.sql.Statement;
4043

4144
@Slf4j
4245
public class SchemaUtils {
4346

47+
private static final String MIN_VERSION_TABLE_CHANGE_COLUMN = "3.3.2";
48+
4449
private SchemaUtils() {}
4550

4651
/**
@@ -111,33 +116,52 @@ && columnExists(
111116
public static void applySchemaChange(
112117
Connection connection, TablePath tablePath, AlterTableChangeColumnEvent event)
113118
throws SQLException {
114-
StringBuilder sqlBuilder =
115-
new StringBuilder()
116-
.append("ALTER TABLE")
117-
.append(" ")
118-
.append(tablePath.getFullName())
119+
ComparableVersion targetVersion = new ComparableVersion(MIN_VERSION_TABLE_CHANGE_COLUMN);
120+
ComparableVersion currentVersion;
121+
try (Statement statement = connection.createStatement();
122+
ResultSet resultSet =
123+
statement.executeQuery("SELECT CURRENT_VERSION() as version")) {
124+
resultSet.next();
125+
String version = resultSet.getString(1);
126+
log.debug("starrocks version: {}", version);
127+
String versionOne = version.split(" ")[0];
128+
currentVersion = new ComparableVersion(versionOne);
129+
}
130+
131+
if (currentVersion.compareTo(targetVersion) >= 0) {
132+
StringBuilder sqlBuilder =
133+
new StringBuilder()
134+
.append("ALTER TABLE")
135+
.append(" ")
136+
.append(tablePath.getFullName())
137+
.append(" ")
138+
.append("RENAME COLUMN")
139+
.append(" ")
140+
.append(quoteIdentifier(event.getOldColumn()))
141+
.append(" TO ")
142+
.append(quoteIdentifier(event.getColumn().getName()));
143+
if (event.getColumn().getComment() != null) {
144+
sqlBuilder
119145
.append(" ")
120-
.append("RENAME COLUMN")
146+
.append("COMMENT ")
147+
.append("'")
148+
.append(event.getColumn().getComment())
149+
.append("'");
150+
}
151+
if (event.getAfterColumn() != null) {
152+
sqlBuilder
121153
.append(" ")
122-
.append(quoteIdentifier(event.getOldColumn()))
123-
.append(" TO ")
124-
.append(quoteIdentifier(event.getColumn().getName()));
125-
if (event.getColumn().getComment() != null) {
126-
sqlBuilder
127-
.append(" ")
128-
.append("COMMENT ")
129-
.append("'")
130-
.append(event.getColumn().getComment())
131-
.append("'");
132-
}
133-
if (event.getAfterColumn() != null) {
134-
sqlBuilder.append(" ").append("AFTER ").append(quoteIdentifier(event.getAfterColumn()));
135-
}
154+
.append("AFTER ")
155+
.append(quoteIdentifier(event.getAfterColumn()));
156+
}
136157

137-
String changeColumnSQL = sqlBuilder.toString();
138-
try (Statement statement = connection.createStatement()) {
139-
log.info("Executing change column SQL: " + changeColumnSQL);
140-
statement.execute(changeColumnSQL);
158+
String changeColumnSQL = sqlBuilder.toString();
159+
try (Statement statement = connection.createStatement()) {
160+
log.info("Executing change column SQL: " + changeColumnSQL);
161+
statement.execute(changeColumnSQL);
162+
}
163+
} else {
164+
log.warn("versions prior to starrocks 3.3.2 do not support rename column operations");
141165
}
142166
}
143167

0 commit comments

Comments
 (0)