From 06d2939c54536044ce376c11eac612ab4532afe4 Mon Sep 17 00:00:00 2001 From: mxsm Date: Wed, 6 Dec 2023 00:12:34 +0800 Subject: [PATCH] Add spatial data type and license details, adjust source/sink settings --- .../dialect/mysql/MysqlDatabaseDialect.java | 2 + .../EventMeshDataTypeJsonDeserializer.java | 2 +- .../jdbc/type/DatabaseTypeDialect.java | 17 +++++++ .../eventmesh/BytesEventMeshDataType.java | 4 +- .../connector/jdbc/type/mysql/BitType.java | 17 +++++++ .../jdbc/type/mysql/BooleanType.java | 17 +++++++ .../connector/jdbc/type/mysql/BytesType.java | 49 +++++++++++++++++++ .../connector/jdbc/type/mysql/EnumType.java | 17 +++++++ .../connector/jdbc/type/mysql/SetType.java | 17 +++++++ .../jdbc/type/mysql/SpatialDataType.java | 39 +++++++++++++++ .../src/main/resources/server-config.yml | 4 +- 11 files changed, 181 insertions(+), 4 deletions(-) create mode 100644 eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BytesType.java create mode 100644 eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/SpatialDataType.java diff --git a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/dialect/mysql/MysqlDatabaseDialect.java b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/dialect/mysql/MysqlDatabaseDialect.java index 70bcb19ad7..7d1124ad31 100644 --- a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/dialect/mysql/MysqlDatabaseDialect.java +++ b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/dialect/mysql/MysqlDatabaseDialect.java @@ -41,6 +41,7 @@ import org.apache.eventmesh.connector.jdbc.table.catalog.mysql.MysqlOptions.MysqlTableOptions; import org.apache.eventmesh.connector.jdbc.type.Type; import org.apache.eventmesh.connector.jdbc.type.mysql.BitType; +import org.apache.eventmesh.connector.jdbc.type.mysql.BytesType; import org.apache.eventmesh.connector.jdbc.type.mysql.DecimalType; import org.apache.eventmesh.connector.jdbc.type.mysql.EnumType; import org.apache.eventmesh.connector.jdbc.type.mysql.IntType; @@ -113,6 +114,7 @@ public void init() { registerType(DecimalType.INSTANCE); //override YearEventMeshDateType registerType(YearType.INSTANCE); + registerType(BytesType.INSTANCE); } @Override diff --git a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/table/catalog/EventMeshDataTypeJsonDeserializer.java b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/table/catalog/EventMeshDataTypeJsonDeserializer.java index baf3509b00..0c481d4484 100644 --- a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/table/catalog/EventMeshDataTypeJsonDeserializer.java +++ b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/table/catalog/EventMeshDataTypeJsonDeserializer.java @@ -26,7 +26,7 @@ public EventMeshDataType deserialize(JsonParser jsonParser, DeserializationConte Iterator> fields = treeNode.fields(); while (fields.hasNext()) { Map.Entry field = fields.next(); - if (StringUtils.equals("dataType", field.getKey())) { + if (StringUtils.equals("eventMeshDataType", field.getKey())) { String value = field.getValue().asText(); return EventMeshTypeNameConverter.ofEventMeshDataType(value); } diff --git a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/DatabaseTypeDialect.java b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/DatabaseTypeDialect.java index 87daab34c6..2c93e95a32 100644 --- a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/DatabaseTypeDialect.java +++ b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/DatabaseTypeDialect.java @@ -1,3 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.apache.eventmesh.connector.jdbc.type; import org.apache.eventmesh.connector.jdbc.table.catalog.Column; diff --git a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/eventmesh/BytesEventMeshDataType.java b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/eventmesh/BytesEventMeshDataType.java index cbce2c7922..11d965e4e1 100644 --- a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/eventmesh/BytesEventMeshDataType.java +++ b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/eventmesh/BytesEventMeshDataType.java @@ -17,6 +17,8 @@ package org.apache.eventmesh.connector.jdbc.type.eventmesh; +import org.apache.eventmesh.connector.jdbc.dialect.DatabaseDialect; +import org.apache.eventmesh.connector.jdbc.table.catalog.Column; import org.apache.eventmesh.connector.jdbc.table.type.SQLType; import org.apache.eventmesh.connector.jdbc.type.AbstractType; @@ -28,7 +30,7 @@ public class BytesEventMeshDataType extends AbstractType { public static final BytesEventMeshDataType INSTANCE = new BytesEventMeshDataType(); - private BytesEventMeshDataType() { + public BytesEventMeshDataType() { super(byte[].class, SQLType.BINARY, "BYTES"); } diff --git a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BitType.java b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BitType.java index b8b60a1e76..879090eee8 100644 --- a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BitType.java +++ b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BitType.java @@ -1,3 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.apache.eventmesh.connector.jdbc.type.mysql; import org.apache.eventmesh.connector.jdbc.dialect.DatabaseDialect; diff --git a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BooleanType.java b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BooleanType.java index 46b47c6c4b..b32e7c68de 100644 --- a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BooleanType.java +++ b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BooleanType.java @@ -1,3 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.apache.eventmesh.connector.jdbc.type.mysql; import org.apache.eventmesh.connector.jdbc.dialect.DatabaseDialect; diff --git a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BytesType.java b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BytesType.java new file mode 100644 index 0000000000..50ad158d88 --- /dev/null +++ b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/BytesType.java @@ -0,0 +1,49 @@ +package org.apache.eventmesh.connector.jdbc.type.mysql; + +import org.apache.eventmesh.connector.jdbc.dialect.DatabaseDialect; +import org.apache.eventmesh.connector.jdbc.table.catalog.Column; +import org.apache.eventmesh.connector.jdbc.type.eventmesh.BytesEventMeshDataType; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + + +public class BytesType extends BytesEventMeshDataType { + + public static final BytesType INSTANCE = new BytesType(); + + private static final List BINARY_REGISTRATION_KEYS = Arrays.asList("BINARY", "binary", "VARBINARY", "varbinary"); + + private static final List BLOB_REGISTRATION_KEYS = Arrays.asList("TINYBLOB", "tinyblob", "BLOB", "blob", "MEDIUMBLOB", "mediumblob", + "LONGBLOB", "longblob"); + + @Override + public List ofRegistrationKeys() { + final List registrationCodes = super.ofRegistrationKeys(); + registrationCodes.addAll(BINARY_REGISTRATION_KEYS); + registrationCodes.addAll(BLOB_REGISTRATION_KEYS); + return registrationCodes; + } + + public String getDefaultValue(DatabaseDialect databaseDialect, Column column) { + //https://dev.mysql.com/doc/refman/8.0/en/blob.html + //BLOB and TEXT columns cannot have DEFAULT values + if (BLOB_REGISTRATION_KEYS.contains(column.getNativeType())) { + return ""; + } + // binary use hex string,e.g: 0x01020304 + return column.getDefaultValue() != null ? "Ox" + column.getDefaultValue() : "NULL"; + } + + public String getTypeName(Column column) { + if (BLOB_REGISTRATION_KEYS.contains(column.getNativeType())) { + return column.getNativeType(); + } + if (BINARY_REGISTRATION_KEYS.contains(column.getNativeType())) { + final int lengthValue = Optional.ofNullable(column.getColumnLength()).orElse(1L).intValue(); + return String.format("%s(%d)", column.getNativeType(), lengthValue); + } + return "binary(1)"; + } +} diff --git a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/EnumType.java b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/EnumType.java index 1661c8f76e..4b0e5df30e 100644 --- a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/EnumType.java +++ b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/EnumType.java @@ -1,3 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.apache.eventmesh.connector.jdbc.type.mysql; import org.apache.eventmesh.connector.jdbc.dialect.DatabaseDialect; diff --git a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/SetType.java b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/SetType.java index 972b506c3a..ee9f62bf65 100644 --- a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/SetType.java +++ b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/SetType.java @@ -1,3 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.apache.eventmesh.connector.jdbc.type.mysql; import org.apache.eventmesh.connector.jdbc.dialect.DatabaseDialect; diff --git a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/SpatialDataType.java b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/SpatialDataType.java new file mode 100644 index 0000000000..a531263445 --- /dev/null +++ b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/java/org/apache/eventmesh/connector/jdbc/type/mysql/SpatialDataType.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.connector.jdbc.type.mysql; + +import org.apache.eventmesh.connector.jdbc.table.type.SQLType; +import org.apache.eventmesh.connector.jdbc.type.AbstractType; + + +/** + * The SpatialDataType class is an abstract class that extends the AbstractType class. + * It represents a spatial data type for storing byte arrays. + * + *

+ * The SpatialDataType class provides constructors for specifying the type class, + * SQL type, and name of the spatial data type. + *

+ * + */ +public abstract class SpatialDataType extends AbstractType { + + public SpatialDataType(Class typeClass, SQLType sqlType, String name) { + super(typeClass, sqlType, name); + } +} diff --git a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/resources/server-config.yml b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/resources/server-config.yml index d9416e1ed2..0cd7b5b5ab 100644 --- a/eventmesh-connectors/eventmesh-connector-jdbc/src/main/resources/server-config.yml +++ b/eventmesh-connectors/eventmesh-connector-jdbc/src/main/resources/server-config.yml @@ -15,5 +15,5 @@ # limitations under the License. # -sourceEnable: false -sinkEnable: true +sourceEnable: true +sinkEnable: false