Case sensitive comparison of nonbinary string in MySQL metadata storage (#8758)

This commit is contained in:
yuanli 2019-10-31 11:48:08 +08:00 committed by Gian Merlino
parent ed6be81d12
commit bca649e492
2 changed files with 28 additions and 10 deletions

View File

@ -45,6 +45,7 @@ public class MySQLConnector extends SQLMetadataConnector
private static final String PAYLOAD_TYPE = "LONGBLOB";
private static final String SERIAL_TYPE = "BIGINT(20) AUTO_INCREMENT";
private static final String QUOTE_STRING = "`";
private static final String COLLATION = "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin";
private static final String MYSQL_JDBC_DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
private final DBI dbi;
@ -158,6 +159,12 @@ public class MySQLConnector extends SQLMetadataConnector
return SERIAL_TYPE;
}
@Override
protected String getCollation()
{
return COLLATION;
}
@Override
public String getQuoteString()
{

View File

@ -55,6 +55,7 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
{
private static final Logger log = new Logger(SQLMetadataConnector.class);
private static final String PAYLOAD_TYPE = "BLOB";
private static final String COLLATION = "";
static final int DEFAULT_MAX_TRIES = 10;
@ -93,6 +94,16 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
return PAYLOAD_TYPE;
}
/**
* The character set and collation for case-sensitive nonbinary string comparison
*
* @return the collation for the character set
*/
protected String getCollation()
{
return COLLATION;
}
/**
* Auto-incrementing SQL type to use for IDs
* Must be an integer type, which values will be automatically set by the database
@ -208,7 +219,7 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
StringUtils.format(
"CREATE TABLE %1$s (\n"
+ " id VARCHAR(255) NOT NULL,\n"
+ " dataSource VARCHAR(255) NOT NULL,\n"
+ " dataSource VARCHAR(255) %4$s NOT NULL,\n"
+ " created_date VARCHAR(255) NOT NULL,\n"
+ " start VARCHAR(255) NOT NULL,\n"
+ " %3$send%3$s VARCHAR(255) NOT NULL,\n"
@ -219,7 +230,7 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
+ " PRIMARY KEY (id),\n"
+ " UNIQUE (sequence_name_prev_id_sha1)\n"
+ ")",
tableName, getPayloadType(), getQuoteString()
tableName, getPayloadType(), getQuoteString(), getCollation()
),
StringUtils.format(
"CREATE INDEX idx_%1$s_datasource_end ON %1$s(dataSource, %2$send%2$s)",
@ -241,13 +252,13 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
ImmutableList.of(
StringUtils.format(
"CREATE TABLE %1$s (\n"
+ " dataSource VARCHAR(255) NOT NULL,\n"
+ " dataSource VARCHAR(255) %3$s NOT NULL,\n"
+ " created_date VARCHAR(255) NOT NULL,\n"
+ " commit_metadata_payload %2$s NOT NULL,\n"
+ " commit_metadata_sha1 VARCHAR(255) NOT NULL,\n"
+ " PRIMARY KEY (dataSource)\n"
+ ")",
tableName, getPayloadType()
tableName, getPayloadType(), getCollation()
)
)
);
@ -261,7 +272,7 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
StringUtils.format(
"CREATE TABLE %1$s (\n"
+ " id VARCHAR(255) NOT NULL,\n"
+ " dataSource VARCHAR(255) NOT NULL,\n"
+ " dataSource VARCHAR(255) %4$s NOT NULL,\n"
+ " created_date VARCHAR(255) NOT NULL,\n"
+ " start VARCHAR(255) NOT NULL,\n"
+ " %3$send%3$s VARCHAR(255) NOT NULL,\n"
@ -271,7 +282,7 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
+ " payload %2$s NOT NULL,\n"
+ " PRIMARY KEY (id)\n"
+ ")",
tableName, getPayloadType(), getQuoteString()
tableName, getPayloadType(), getQuoteString(), getCollation()
),
StringUtils.format("CREATE INDEX idx_%1$s_used ON %1$s(used)", tableName),
StringUtils.format(
@ -291,12 +302,12 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
StringUtils.format(
"CREATE TABLE %1$s (\n"
+ " id VARCHAR(255) NOT NULL,\n"
+ " dataSource VARCHAR(255) NOT NULL,\n"
+ " dataSource VARCHAR(255) %3$s NOT NULL,\n"
+ " version VARCHAR(255) NOT NULL,\n"
+ " payload %2$s NOT NULL,\n"
+ " PRIMARY KEY (id)\n"
+ ")",
tableName, getPayloadType()
tableName, getPayloadType(), getCollation()
),
StringUtils.format("CREATE INDEX idx_%1$s_datasource ON %1$s(dataSource)", tableName)
)
@ -329,13 +340,13 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
"CREATE TABLE %1$s (\n"
+ " id VARCHAR(255) NOT NULL,\n"
+ " created_date VARCHAR(255) NOT NULL,\n"
+ " datasource VARCHAR(255) NOT NULL,\n"
+ " datasource VARCHAR(255) %3$s NOT NULL,\n"
+ " payload %2$s NOT NULL,\n"
+ " status_payload %2$s NOT NULL,\n"
+ " active BOOLEAN NOT NULL DEFAULT FALSE,\n"
+ " PRIMARY KEY (id)\n"
+ ")",
tableName, getPayloadType()
tableName, getPayloadType(), getCollation()
),
StringUtils.format("CREATE INDEX idx_%1$s_active_created_date ON %1$s(active, created_date)", tableName)
)