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 PAYLOAD_TYPE = "LONGBLOB";
private static final String SERIAL_TYPE = "BIGINT(20) AUTO_INCREMENT"; private static final String SERIAL_TYPE = "BIGINT(20) AUTO_INCREMENT";
private static final String QUOTE_STRING = "`"; 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 static final String MYSQL_JDBC_DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
private final DBI dbi; private final DBI dbi;
@ -158,6 +159,12 @@ public class MySQLConnector extends SQLMetadataConnector
return SERIAL_TYPE; return SERIAL_TYPE;
} }
@Override
protected String getCollation()
{
return COLLATION;
}
@Override @Override
public String getQuoteString() 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 Logger log = new Logger(SQLMetadataConnector.class);
private static final String PAYLOAD_TYPE = "BLOB"; private static final String PAYLOAD_TYPE = "BLOB";
private static final String COLLATION = "";
static final int DEFAULT_MAX_TRIES = 10; static final int DEFAULT_MAX_TRIES = 10;
@ -93,6 +94,16 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
return PAYLOAD_TYPE; 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 * Auto-incrementing SQL type to use for IDs
* Must be an integer type, which values will be automatically set by the database * 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( StringUtils.format(
"CREATE TABLE %1$s (\n" "CREATE TABLE %1$s (\n"
+ " id VARCHAR(255) NOT NULL,\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" + " created_date VARCHAR(255) NOT NULL,\n"
+ " start VARCHAR(255) NOT NULL,\n" + " start VARCHAR(255) NOT NULL,\n"
+ " %3$send%3$s 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" + " PRIMARY KEY (id),\n"
+ " UNIQUE (sequence_name_prev_id_sha1)\n" + " UNIQUE (sequence_name_prev_id_sha1)\n"
+ ")", + ")",
tableName, getPayloadType(), getQuoteString() tableName, getPayloadType(), getQuoteString(), getCollation()
), ),
StringUtils.format( StringUtils.format(
"CREATE INDEX idx_%1$s_datasource_end ON %1$s(dataSource, %2$send%2$s)", "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( ImmutableList.of(
StringUtils.format( StringUtils.format(
"CREATE TABLE %1$s (\n" "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" + " created_date VARCHAR(255) NOT NULL,\n"
+ " commit_metadata_payload %2$s NOT NULL,\n" + " commit_metadata_payload %2$s NOT NULL,\n"
+ " commit_metadata_sha1 VARCHAR(255) NOT NULL,\n" + " commit_metadata_sha1 VARCHAR(255) NOT NULL,\n"
+ " PRIMARY KEY (dataSource)\n" + " PRIMARY KEY (dataSource)\n"
+ ")", + ")",
tableName, getPayloadType() tableName, getPayloadType(), getCollation()
) )
) )
); );
@ -261,7 +272,7 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
StringUtils.format( StringUtils.format(
"CREATE TABLE %1$s (\n" "CREATE TABLE %1$s (\n"
+ " id VARCHAR(255) NOT NULL,\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" + " created_date VARCHAR(255) NOT NULL,\n"
+ " start VARCHAR(255) NOT NULL,\n" + " start VARCHAR(255) NOT NULL,\n"
+ " %3$send%3$s 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" + " payload %2$s NOT NULL,\n"
+ " PRIMARY KEY (id)\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("CREATE INDEX idx_%1$s_used ON %1$s(used)", tableName),
StringUtils.format( StringUtils.format(
@ -291,12 +302,12 @@ public abstract class SQLMetadataConnector implements MetadataStorageConnector
StringUtils.format( StringUtils.format(
"CREATE TABLE %1$s (\n" "CREATE TABLE %1$s (\n"
+ " id VARCHAR(255) NOT NULL,\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" + " version VARCHAR(255) NOT NULL,\n"
+ " payload %2$s NOT NULL,\n" + " payload %2$s NOT NULL,\n"
+ " PRIMARY KEY (id)\n" + " PRIMARY KEY (id)\n"
+ ")", + ")",
tableName, getPayloadType() tableName, getPayloadType(), getCollation()
), ),
StringUtils.format("CREATE INDEX idx_%1$s_datasource ON %1$s(dataSource)", tableName) 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" "CREATE TABLE %1$s (\n"
+ " id VARCHAR(255) NOT NULL,\n" + " id VARCHAR(255) NOT NULL,\n"
+ " created_date 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" + " payload %2$s NOT NULL,\n"
+ " status_payload %2$s NOT NULL,\n" + " status_payload %2$s NOT NULL,\n"
+ " active BOOLEAN NOT NULL DEFAULT FALSE,\n" + " active BOOLEAN NOT NULL DEFAULT FALSE,\n"
+ " PRIMARY KEY (id)\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) StringUtils.format("CREATE INDEX idx_%1$s_active_created_date ON %1$s(active, created_date)", tableName)
) )