20260911173133
This commit is contained in:
1 parent
3838ed74b1
commit
f3ad727f1c
60 files changed
+4971
-6621
No files matched your search
@@ -0,0 +1,62 @@
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.Statement;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* One-off migration: adds b_i18n varchar(150) null to dbo.s_power
|
||||
* (i18n resource key for permission point names, see FMS新系统核心表结构设计.md 14.1).
|
||||
* Idempotent: skips the ALTER TABLE when the column already exists.
|
||||
*/
|
||||
public final class AddSPowerI18nColumn {
|
||||
public static void main(String[] args) throws Exception {
|
||||
Path apiRoot = Path.of("").toAbsolutePath().normalize();
|
||||
Path configPath = apiRoot.resolve("config/dbconfigs/g3hd.properties").normalize();
|
||||
|
||||
Properties properties = new Properties();
|
||||
try (InputStream input = Files.newInputStream(configPath)) {
|
||||
properties.load(input);
|
||||
}
|
||||
|
||||
try (Connection connection = DriverManager.getConnection(
|
||||
required(properties, "url"),
|
||||
required(properties, "username"),
|
||||
required(properties, "password"))) {
|
||||
if (!"FMS".equalsIgnoreCase(connection.getCatalog())) {
|
||||
throw new IllegalStateException("Refusing to alter database: " + connection.getCatalog());
|
||||
}
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
boolean exists;
|
||||
try (ResultSet rows = statement.executeQuery(
|
||||
"SELECT CASE WHEN COL_LENGTH(N'dbo.s_power', N'b_i18n') IS NULL THEN 0 ELSE 1 END")) {
|
||||
rows.next();
|
||||
exists = rows.getInt(1) == 1;
|
||||
}
|
||||
if (exists) {
|
||||
System.out.println("SKIP|dbo.s_power.b_i18n already exists");
|
||||
} else {
|
||||
statement.executeUpdate("ALTER TABLE dbo.s_power ADD b_i18n varchar(150) NULL");
|
||||
System.out.println("APPLIED|ALTER TABLE dbo.s_power ADD b_i18n varchar(150) NULL");
|
||||
}
|
||||
try (ResultSet rows = statement.executeQuery(
|
||||
"SELECT c.name, t.name, c.max_length, c.is_nullable "
|
||||
+ "FROM sys.columns c JOIN sys.types t ON t.user_type_id = c.user_type_id "
|
||||
+ "WHERE c.object_id = OBJECT_ID(N'dbo.s_power') AND c.name = N'b_i18n'")) {
|
||||
if (!rows.next()) throw new IllegalStateException("Column b_i18n not found after migration");
|
||||
System.out.println("VERIFY|" + rows.getString(1) + "|" + rows.getString(2)
|
||||
+ "(" + rows.getInt(3) + ")|nullable=" + rows.getInt(4));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String required(Properties properties, String key) {
|
||||
String value = properties.getProperty(key);
|
||||
if (value == null || value.isBlank()) throw new IllegalStateException("Missing property: " + key);
|
||||
return value;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user