From 90de11240762a08dddd593f3267948bddaac80ac Mon Sep 17 00:00:00 2001 From: Catherine Quamme Date: Wed, 2 Nov 2022 10:23:06 -0400 Subject: [PATCH] 0005565: Adding Character Set to Snapshot --- .../main/java/org/jumpmind/symmetric/util/SnapshotUtil.java | 5 +++++ .../org/jumpmind/db/platform/AbstractDatabasePlatform.java | 4 ++++ .../java/org/jumpmind/db/platform/IDatabasePlatform.java | 2 ++ .../db/platform/mariadb/MariaDBDatabasePlatform.java | 5 +++++ .../db/platform/mssql/MsSql2005DatabasePlatform.java | 6 ++++++ .../jumpmind/db/platform/mysql/MySqlDatabasePlatform.java | 5 +++++ .../jumpmind/db/platform/oracle/OracleDatabasePlatform.java | 6 ++++++ .../db/platform/postgresql/PostgreSqlDatabasePlatform.java | 6 ++++++ 8 files changed, 39 insertions(+) diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/util/SnapshotUtil.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/util/SnapshotUtil.java index 43d45fa745..e21aa3d3fd 100644 --- a/symmetric-client/src/main/java/org/jumpmind/symmetric/util/SnapshotUtil.java +++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/util/SnapshotUtil.java @@ -632,6 +632,11 @@ protected static void writeRuntimeStats(ISymmetricEngine engine, File tmpDir) { runtimeProperties.setProperty("hostname", AppUtils.getHostName()); runtimeProperties.setProperty("instance.id", engine.getClusterService().getInstanceId()); runtimeProperties.setProperty("server.id", engine.getClusterService().getServerId()); + try { + runtimeProperties.setProperty("charset.server", System.getProperty("file.encoding")); + runtimeProperties.setProperty("charset.database", engine.getTargetDialect().getTargetPlatform().getCharSetName()); + } catch (Exception e) { + } try { MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); ObjectName oName = new ObjectName("java.lang:type=OperatingSystem"); diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java index f6049e0f42..1c005b8784 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java @@ -1262,4 +1262,8 @@ public boolean supportsSliceTables() { public String getSliceTableSql(String columnName, int sliceNum, int totalSlices) { return ""; } + + public String getCharSetName() { + return ""; + } } diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java index fdc861b618..404f51f529 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java @@ -240,4 +240,6 @@ public Object[] getObjectValues(BinaryEncoding encoding, String[] values, public boolean supportsSliceTables(); public String getSliceTableSql(String columnName, int sliceNum, int totalSlices); + + public String getCharSetName(); } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mariadb/MariaDBDatabasePlatform.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mariadb/MariaDBDatabasePlatform.java index 5dbe5a632a..e3a3ee02a5 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mariadb/MariaDBDatabasePlatform.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mariadb/MariaDBDatabasePlatform.java @@ -39,4 +39,9 @@ public MariaDBDatabasePlatform(DataSource dataSource, protected MariaDBDdlReader createDdlReader() { return new MariaDBDdlReader(this); } + + @Override + public String getCharSetName() { + return (String) getSqlTemplate().queryForObject("SELECT CHARSET('a'), @@character_set_connection;", String.class); + } } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSql2005DatabasePlatform.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSql2005DatabasePlatform.java index 90cae5ba79..4154e16f76 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSql2005DatabasePlatform.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSql2005DatabasePlatform.java @@ -126,4 +126,10 @@ public boolean supportsSliceTables() { public String getSliceTableSql(String columnName, int sliceNum, int totalSlices) { return "ascii(substring(" + columnName + ", 1, 1)) % " + totalSlices + " = " + sliceNum; } + + @Override + public String getCharSetName() { + return (String) getSqlTemplate().queryForObject("select collation_name from sys.databases where name =\r\n" + + "db_name()", String.class); + } } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDatabasePlatform.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDatabasePlatform.java index 6bbb8c3912..7e1bb9d2eb 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDatabasePlatform.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mysql/MySqlDatabasePlatform.java @@ -331,4 +331,9 @@ public boolean supportsSliceTables() { public String getSliceTableSql(String columnName, int sliceNum, int totalSlices) { return "ascii(substring(" + columnName + ", 1, 1)) % " + totalSlices + " = " + sliceNum; } + + @Override + public String getCharSetName() { + return (String) getSqlTemplate().queryForObject("select @@character_set_database", String.class); + } } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java index ffce91e672..bb0049c2c5 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java @@ -290,4 +290,10 @@ public boolean supportsSliceTables() { public String getSliceTableSql(String columnName, int sliceNum, int totalSlices) { return "mod(ora_hash(rowid), " + totalSlices + ") = " + sliceNum; } + + @Override + public String getCharSetName() { + return (String) getSqlTemplate().queryForObject("select value from nls_database_parameters where\r\n" + + "parameter='NLS_CHARACTERSET'", String.class); + } } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDatabasePlatform.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDatabasePlatform.java index f7a25e3c1d..439af5f1db 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDatabasePlatform.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/postgresql/PostgreSqlDatabasePlatform.java @@ -385,4 +385,10 @@ public boolean canColumnBeUsedInWhereClause(Column column) { } return super.canColumnBeUsedInWhereClause(column); } + + @Override + public String getCharSetName() { + return (String) getSqlTemplate().queryForObject("select pg_encoding_to_char(encoding) from pg_database\r\n" + + "where datname = current_database()", String.class); + } }