Skip to content

Commit 6f4cac7

Browse files
authored
Refactor MySQLBinlogNumberDataTypeHandlerEngine (#32546)
* Add MySQLBinlogBinaryDataTypeHandler * Refactor MySQLBinlogNumberDataTypeHandlerEngine * Refactor MySQLBinlogNumberDataTypeHandlerEngine
1 parent 697f571 commit 6f4cac7

9 files changed

+67
-71
lines changed

kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/dumper/type/MySQLBinlogDataTypeHandler.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@
2020
import lombok.NoArgsConstructor;
2121
import org.apache.shardingsphere.data.pipeline.core.metadata.model.PipelineColumnMetaData;
2222
import org.apache.shardingsphere.data.pipeline.mysql.ingest.dumper.type.binary.MySQLBinlogBinaryDataTypeHandler;
23-
import org.apache.shardingsphere.data.pipeline.mysql.ingest.dumper.type.number.MySQLBinlogNumberDataTypeHandler;
23+
import org.apache.shardingsphere.data.pipeline.mysql.ingest.dumper.type.number.MySQLBinlogNumberDataTypeHandlerEngine;
2424
import org.apache.shardingsphere.db.protocol.mysql.packet.binlog.row.column.value.string.MySQLBinaryString;
25-
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
2625

2726
import java.io.Serializable;
2827
import java.util.Optional;
@@ -41,10 +40,13 @@ public final class MySQLBinlogDataTypeHandler {
4140
* @return handled column value
4241
*/
4342
public static Serializable handle(final PipelineColumnMetaData columnMetaData, final Serializable value) {
43+
if (null == value) {
44+
return null;
45+
}
4446
if (value instanceof MySQLBinaryString) {
4547
return MySQLBinlogBinaryDataTypeHandler.handle(columnMetaData, value);
4648
}
47-
Optional<MySQLBinlogNumberDataTypeHandler> dataTypeHandler = TypedSPILoader.findService(MySQLBinlogNumberDataTypeHandler.class, columnMetaData.getDataTypeName());
48-
return dataTypeHandler.isPresent() ? dataTypeHandler.get().handle(value) : value;
49+
Optional<Serializable> result = MySQLBinlogNumberDataTypeHandlerEngine.handle(columnMetaData, value);
50+
return result.orElse(value);
4951
}
5052
}

kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/dumper/type/number/MySQLBinlogNumberDataTypeHandler.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,12 @@
1717

1818
package org.apache.shardingsphere.data.pipeline.mysql.ingest.dumper.type.number;
1919

20-
import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
21-
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPI;
22-
2320
import java.io.Serializable;
2421

2522
/**
2623
* MySQL binlog number data type handler.
2724
*/
28-
@SingletonSPI
29-
public interface MySQLBinlogNumberDataTypeHandler extends TypedSPI {
25+
public interface MySQLBinlogNumberDataTypeHandler {
3026

3127
/**
3228
* Handle column value.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.shardingsphere.data.pipeline.mysql.ingest.dumper.type.number;
19+
20+
import lombok.NoArgsConstructor;
21+
import org.apache.shardingsphere.data.pipeline.core.metadata.model.PipelineColumnMetaData;
22+
import org.apache.shardingsphere.data.pipeline.mysql.ingest.dumper.type.number.impl.MySQLBinlogUnsignedBigintHandler;
23+
import org.apache.shardingsphere.data.pipeline.mysql.ingest.dumper.type.number.impl.MySQLBinlogUnsignedIntHandler;
24+
import org.apache.shardingsphere.data.pipeline.mysql.ingest.dumper.type.number.impl.MySQLBinlogUnsignedMediumintHandler;
25+
import org.apache.shardingsphere.data.pipeline.mysql.ingest.dumper.type.number.impl.MySQLBinlogUnsignedSmallintHandler;
26+
import org.apache.shardingsphere.data.pipeline.mysql.ingest.dumper.type.number.impl.MySQLBinlogUnsignedTinyintHandler;
27+
28+
import java.io.Serializable;
29+
import java.util.HashMap;
30+
import java.util.Map;
31+
import java.util.Optional;
32+
33+
/**
34+
* MySQL binlog number data type handler engine.
35+
*/
36+
@NoArgsConstructor(access = lombok.AccessLevel.PRIVATE)
37+
public final class MySQLBinlogNumberDataTypeHandlerEngine {
38+
39+
private static final Map<String, MySQLBinlogNumberDataTypeHandler> HANDLERS = new HashMap<>();
40+
41+
static {
42+
HANDLERS.put("TINYINT UNSIGNED", new MySQLBinlogUnsignedTinyintHandler());
43+
HANDLERS.put("SMALLINT UNSIGNED", new MySQLBinlogUnsignedSmallintHandler());
44+
HANDLERS.put("MEDIUMINT UNSIGNED", new MySQLBinlogUnsignedMediumintHandler());
45+
HANDLERS.put("INT UNSIGNED", new MySQLBinlogUnsignedIntHandler());
46+
HANDLERS.put("BIGINT UNSIGNED", new MySQLBinlogUnsignedBigintHandler());
47+
}
48+
49+
/**
50+
* Handle column value.
51+
*
52+
* @param columnMetaData column meta data
53+
* @param value column value
54+
* @return handled column value
55+
*/
56+
public static Optional<Serializable> handle(final PipelineColumnMetaData columnMetaData, final Serializable value) {
57+
String dataTypeName = columnMetaData.getDataTypeName();
58+
return HANDLERS.containsKey(dataTypeName) ? Optional.of(HANDLERS.get(dataTypeName).handle(value)) : Optional.empty();
59+
}
60+
}

kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/dumper/type/number/impl/MySQLBinlogUnsignedBigintHandler.java

-8
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,7 @@ public final class MySQLBinlogUnsignedBigintHandler implements MySQLBinlogNumber
3131

3232
@Override
3333
public Serializable handle(final Serializable value) {
34-
if (null == value) {
35-
return null;
36-
}
3734
long longValue = (long) value;
3835
return longValue < 0L ? BIGINT_MODULO.add(BigInteger.valueOf(longValue)) : longValue;
3936
}
40-
41-
@Override
42-
public String getType() {
43-
return "BIGINT UNSIGNED";
44-
}
4537
}

kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/dumper/type/number/impl/MySQLBinlogUnsignedIntHandler.java

-8
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,7 @@ public final class MySQLBinlogUnsignedIntHandler implements MySQLBinlogNumberDat
3030

3131
@Override
3232
public Serializable handle(final Serializable value) {
33-
if (null == value) {
34-
return null;
35-
}
3633
int intValue = (int) value;
3734
return intValue < 0 ? INT_MODULO + intValue : intValue;
3835
}
39-
40-
@Override
41-
public String getType() {
42-
return "INT UNSIGNED";
43-
}
4436
}

kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/dumper/type/number/impl/MySQLBinlogUnsignedMediumintHandler.java

-8
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,7 @@ public final class MySQLBinlogUnsignedMediumintHandler implements MySQLBinlogNum
3030

3131
@Override
3232
public Serializable handle(final Serializable value) {
33-
if (null == value) {
34-
return null;
35-
}
3633
int intValue = (int) value;
3734
return intValue < 0 ? MEDIUMINT_MODULO + intValue : intValue;
3835
}
39-
40-
@Override
41-
public String getType() {
42-
return "MEDIUMINT UNSIGNED";
43-
}
4436
}

kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/dumper/type/number/impl/MySQLBinlogUnsignedSmallintHandler.java

-8
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,7 @@ public final class MySQLBinlogUnsignedSmallintHandler implements MySQLBinlogNumb
3030

3131
@Override
3232
public Serializable handle(final Serializable value) {
33-
if (null == value) {
34-
return null;
35-
}
3633
short shortValue = (short) value;
3734
return shortValue < 0 ? SMALLINT_MODULO + shortValue : shortValue;
3835
}
39-
40-
@Override
41-
public String getType() {
42-
return "SMALLINT UNSIGNED";
43-
}
4436
}

kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/dumper/type/number/impl/MySQLBinlogUnsignedTinyintHandler.java

-8
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,7 @@ public final class MySQLBinlogUnsignedTinyintHandler implements MySQLBinlogNumbe
3030

3131
@Override
3232
public Serializable handle(final Serializable value) {
33-
if (null == value) {
34-
return null;
35-
}
3633
byte byteValue = (byte) value;
3734
return byteValue < 0 ? TINYINT_MODULO + byteValue : byteValue;
3835
}
39-
40-
@Override
41-
public String getType() {
42-
return "TINYINT UNSIGNED";
43-
}
4436
}

kernel/data-pipeline/dialect/mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.data.pipeline.mysql.ingest.dumper.type.number.MySQLBinlogNumberDataTypeHandler

-22
This file was deleted.

0 commit comments

Comments
 (0)