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

Reply via email to