This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit a5b91276564f7ca9fc83fcad3ed92041422ef61f Author: zy-kkk <zhongy...@gmail.com> AuthorDate: Mon Mar 4 10:53:28 2024 +0800 [refactor](jdbc catalog) split sqlserver jdbc executor (#31679) --- .../org/apache/doris/jdbc/BaseJdbcExecutor.java | 13 +++ .../org/apache/doris/jdbc/JdbcExecutorFactory.java | 2 + .../org/apache/doris/jdbc/MySQLJdbcExecutor.java | 9 -- .../apache/doris/jdbc/SQLServerJdbcExecutor.java | 104 +++++++++++++++++++++ 4 files changed, 119 insertions(+), 9 deletions(-) diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/BaseJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/BaseJdbcExecutor.java index 4569ffab075..b24002b18a4 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/BaseJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/BaseJdbcExecutor.java @@ -525,4 +525,17 @@ public abstract class BaseJdbcExecutor implements JdbcExecutor { } return str.substring(0, end + 1); } + + protected String timeToString(java.sql.Time time) { + if (time == null) { + return null; + } else { + long milliseconds = time.getTime() % 1000L; + if (milliseconds > 0) { + return String.format("%s.%03d", time, milliseconds); + } else { + return time.toString(); + } + } + } } diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java index 21316a6a273..78522b8254c 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java @@ -26,6 +26,8 @@ public class JdbcExecutorFactory { return "org/apache/doris/jdbc/MySQLJdbcExecutor"; case ORACLE: return "org/apache/doris/jdbc/OracleJdbcExecutor"; + case SQLSERVER: + return "org/apache/doris/jdbc/SQLServerJdbcExecutor"; case DB2: return "org/apache/doris/jdbc/DB2JdbcExecutor"; default: diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java index 30b84ffbcde..bd5297836a6 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java @@ -279,13 +279,4 @@ public class MySQLJdbcExecutor extends BaseJdbcExecutor { } return hexString.toString(); } - - private String timeToString(java.sql.Time time) { - long milliseconds = time.getTime() % 1000L; - if (milliseconds > 0) { - return String.format("%s.%03d", time, milliseconds); - } else { - return time.toString(); - } - } } diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java new file mode 100644 index 00000000000..ec5d0e3d725 --- /dev/null +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/SQLServerJdbcExecutor.java @@ -0,0 +1,104 @@ +// 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.doris.jdbc; + +import org.apache.doris.common.jni.vec.ColumnType; +import org.apache.doris.common.jni.vec.ColumnType.Type; +import org.apache.doris.common.jni.vec.ColumnValueConverter; +import org.apache.doris.common.jni.vec.VectorTable; + +import java.sql.Date; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.LocalDateTime; + +public class SQLServerJdbcExecutor extends BaseJdbcExecutor { + public SQLServerJdbcExecutor(byte[] thriftParams) throws Exception { + super(thriftParams); + } + + @Override + protected void initializeBlock(int columnCount, String[] replaceStringList, int batchSizeNum, + VectorTable outputTable) { + for (int i = 0; i < columnCount; ++i) { + if (outputTable.getColumnType(i).getType() == Type.DATE + || outputTable.getColumnType(i).getType() == Type.DATEV2) { + block.add(new Date[batchSizeNum]); + } else if (outputTable.getColumnType(i).getType() == Type.DATETIME + || outputTable.getColumnType(i).getType() == Type.DATETIMEV2) { + block.add(new Timestamp[batchSizeNum]); + } else if (outputTable.getColumnType(i).getType() == Type.STRING) { + block.add(new Object[batchSizeNum]); + } else { + block.add(outputTable.getColumn(i).newObjectContainerArray(batchSizeNum)); + } + } + } + + @Override + protected Object getColumnValue(int columnIndex, ColumnType type, String[] replaceStringList) throws SQLException { + switch (type.getType()) { + case DECIMALV2: + case DECIMAL32: + case DECIMAL64: + case DECIMAL128: + return resultSet.getBigDecimal(columnIndex + 1); + case BOOLEAN: + case SMALLINT: + case INT: + case BIGINT: + case FLOAT: + case DOUBLE: + case DATE: + case DATEV2: + case DATETIME: + case DATETIMEV2: + case CHAR: + case VARCHAR: + case STRING: + return resultSet.getObject(columnIndex + 1); + default: + throw new IllegalArgumentException("Unsupported column type: " + type.getType()); + } + } + + @Override + protected ColumnValueConverter getOutputConverter(ColumnType columnType, String replaceString) { + switch (columnType.getType()) { + case DATE: + case DATEV2: + return createConverter( + input -> ((Date) input).toLocalDate(), LocalDate.class); + case DATETIME: + case DATETIMEV2: + return createConverter( + input -> ((Timestamp) input).toLocalDateTime(), LocalDateTime.class); + case STRING: + return createConverter(input -> { + if (input instanceof java.sql.Time) { + return timeToString((java.sql.Time) input); + } else { + return input.toString(); + } + }, String.class); + default: + return null; + } + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org