ApplyLobsterCreateTablesOnly.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import java.nio.charset.StandardCharsets;
  2. import java.nio.file.Files;
  3. import java.nio.file.Path;
  4. import java.sql.Connection;
  5. import java.sql.DriverManager;
  6. import java.sql.Statement;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.regex.Matcher;
  10. import java.util.regex.Pattern;
  11. /** Apply only CREATE TABLE IF NOT EXISTS blocks from lobster schema sync (skip ALTER on missing tables). */
  12. public class ApplyLobsterCreateTablesOnly {
  13. private static final String URL = "jdbc:mysql://cq-cdb-8fjmemkb.sql.tencentcdb.com:27220/ylrz_saas"
  14. + "?useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true";
  15. private static final String USER = "root";
  16. private static final String PWD = "Ylrz_1q2w3e4r5t6y";
  17. public static void main(String[] args) throws Exception {
  18. String sqlFile = "d:/ylrz_saas_new/java/fs-service/src/main/resources/db/tenant-initTable-migration-lobster-schema-sync.sql";
  19. String content = Files.readString(Path.of(sqlFile), StandardCharsets.UTF_8);
  20. List<String> creates = extractCreateTableStatements(content);
  21. System.out.println("Found " + creates.size() + " CREATE TABLE statements");
  22. try (Connection c = DriverManager.getConnection(URL, USER, PWD);
  23. Statement st = c.createStatement()) {
  24. for (String ddl : creates) {
  25. String name = ddl.replaceAll("(?s).*CREATE TABLE IF NOT EXISTS `([^`]+)`.*", "$1");
  26. try {
  27. st.execute(ddl);
  28. System.out.println("OK " + name);
  29. } catch (Exception e) {
  30. System.out.println("FAIL " + name + ": " + e.getMessage());
  31. }
  32. }
  33. st.execute("CREATE TABLE IF NOT EXISTS lobster_tool_config ("
  34. + "id BIGINT AUTO_INCREMENT PRIMARY KEY,"
  35. + "company_id BIGINT NOT NULL DEFAULT 0,"
  36. + "tool_name VARCHAR(128) NOT NULL,"
  37. + "tool_type VARCHAR(64) DEFAULT NULL,"
  38. + "description VARCHAR(500) DEFAULT NULL,"
  39. + "config_json TEXT,"
  40. + "enabled TINYINT NOT NULL DEFAULT 1,"
  41. + "deleted TINYINT NOT NULL DEFAULT 0,"
  42. + "create_time DATETIME DEFAULT CURRENT_TIMESTAMP,"
  43. + "UNIQUE KEY uk_company_tool (company_id, tool_name)"
  44. + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
  45. System.out.println("OK lobster_tool_config (explicit)");
  46. }
  47. }
  48. private static List<String> extractCreateTableStatements(String content) {
  49. List<String> out = new ArrayList<>();
  50. Pattern p = Pattern.compile("CREATE TABLE IF NOT EXISTS `[^`]+` \\([\\s\\S]*?\\) ENGINE=InnoDB[^;]*;", Pattern.CASE_INSENSITIVE);
  51. Matcher m = p.matcher(content);
  52. while (m.find()) {
  53. out.add(m.group());
  54. }
  55. return out;
  56. }
  57. }