This is an automated email from the ASF dual-hosted git repository.

jiafengzheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris-manager.git


The following commit(s) were added to refs/heads/master by this push:
     new 017d70e  replace doris http query client with jdbc (#25)
017d70e is described below

commit 017d70e957a8e3e346aadfa2035f276ec3e4a799
Author: LiRui <[email protected]>
AuthorDate: Wed Mar 30 16:54:12 2022 +0800

    replace doris http query client with jdbc (#25)
    
    replace doris http query client with jdbc
---
 .../doris/stack/connector/PaloQueryClient.java     | 211 +++++++--------------
 .../model/response/construct/NativeQueryResp.java  |   1 +
 2 files changed, 65 insertions(+), 147 deletions(-)

diff --git 
a/manager/manager/src/main/java/org/apache/doris/stack/connector/PaloQueryClient.java
 
b/manager/manager/src/main/java/org/apache/doris/stack/connector/PaloQueryClient.java
index d43720f..9e4a89e 100644
--- 
a/manager/manager/src/main/java/org/apache/doris/stack/connector/PaloQueryClient.java
+++ 
b/manager/manager/src/main/java/org/apache/doris/stack/connector/PaloQueryClient.java
@@ -19,24 +19,19 @@ package org.apache.doris.stack.connector;
 
 import static 
org.apache.doris.stack.constant.ConstantDef.PALO_ANALYZER_USER_PASSWORD;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-
-import org.apache.doris.stack.dao.PermissionsGroupRoleRepository;
-import org.apache.doris.stack.entity.PermissionsGroupRoleEntity;
-import org.apache.doris.stack.model.palo.PaloResponseEntity;
+import org.apache.doris.stack.driver.JdbcSampleClient;
 import org.apache.doris.stack.model.response.construct.NativeQueryResp;
 import org.apache.doris.stack.entity.ClusterInfoEntity;
-import org.apache.doris.stack.exception.PaloRequestException;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import lombok.extern.slf4j.Slf4j;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.Statement;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 @Component
 @Slf4j
@@ -49,8 +44,7 @@ public class PaloQueryClient extends PaloClient {
     }
 
     @Autowired
-    private PermissionsGroupRoleRepository groupRoleRepository;
-
+    private JdbcSampleClient jdbcClient;
     /**
      * Create an ordinary analyst Palo large account user
      * @param ns
@@ -63,7 +57,7 @@ public class PaloQueryClient extends PaloClient {
 
         try {
             String createSql = "create user '" + userName + "'@'%' IDENTIFIED 
BY '" + passwd + "'";
-            executeSQLNew(createSql, ns, db, entity);
+            executeSQL(createSql, ns, db, entity);
 
             //            String permissionSql = "GRANT SELECT_PRIV ON *.* TO 
'" + userName + "'@'%'";
             //            executeSQL(permissionSql, ns, db, entity);
@@ -98,7 +92,7 @@ public class PaloQueryClient extends PaloClient {
             String createSql =
                     "CREATE USER '" + userName + "'@'%' IDENTIFIED BY '" + 
PALO_ANALYZER_USER_PASSWORD + "' DEFAULT ROLE 'admin'";
 
-            executeCreateAdminUserSQL(createSql, ns, db, entity);
+            executeSQL(createSql, ns, db, entity);
         } catch (Exception e) {
             log.warn("create user exception {}.", e.getMessage());
             throw e;
@@ -122,154 +116,77 @@ public class PaloQueryClient extends PaloClient {
         }
     }
 
-    // execute sql by admin user, not cluster root
     public NativeQueryResp executeSQL(String sql, String ns, String db, 
ClusterInfoEntity entity) throws Exception {
-        String url = getHostUrl(entity.getAddress(), entity.getHttpPort());
-        StringBuffer buffer = new StringBuffer();
-        buffer.append(url);
-        buffer.append("/api/query/");
-        buffer.append(ns);
-        buffer.append("/");
-        buffer.append(db);
-        url = buffer.toString();
-        log.debug("Send execute sql {} request, url is {}.", sql, url);
-
-        PermissionsGroupRoleEntity groupRoleEntity = 
groupRoleRepository.findById(entity.getAdminGroupId()).get();
-
-        Map<String, String> headers = Maps.newHashMap();
-        setHeaders(headers);
-        setAuthHeaders(headers, groupRoleEntity.getPaloUserName(), 
groupRoleEntity.getPassword());
-
-        Map<String, String> responseBody = Maps.newHashMap();
-        responseBody.put("stmt", sql);
-
-        PaloResponseEntity response = poolManager.doPost(url, headers, 
responseBody);
-
-        if (response.getCode() != REQUEST_SUCCESS_CODE) {
-            // SQL execution error
-            throw new PaloRequestException("Query palo error:" + 
response.getData());
-        }
 
-        JSONObject jsonObject = JSON.parseObject(response.getData());
-        NativeQueryResp resp = new NativeQueryResp();
-        String type = jsonObject.getString("type");
-        resp.setType(type);
-        int time = jsonObject.getInteger("time");
-        resp.setTime(time);
-
-        if (type.equals(NativeQueryResp.Type.result_set.name())) {
-            List<List<String>> dataResult = Lists.newArrayList();
-            String dataStr = jsonObject.getString("data");
-            List<String> dataList = JSON.parseArray(dataStr, String.class);
-            for (String data : dataList) {
-                List<String> dataInfo = JSON.parseArray(data, String.class);
-                dataResult.add(dataInfo);
-            }
-            resp.setData(dataResult);
-
-            String metaStr = jsonObject.getString("meta");
-            List<NativeQueryResp.Meta> metaList = JSON.parseArray(metaStr, 
NativeQueryResp.Meta.class);
-            resp.setMeta(metaList);
+        Statement stmt = jdbcClient.getStatement(entity.getAddress(), 
entity.getQueryPort(),
+                entity.getUser(), entity.getPasswd(), db);
+        try {
+            NativeQueryResp res = executeSql(stmt, sql);
+            return res;
+        } catch (Exception e) {
+            log.error("execute sql {} exception: {}", sql, e);
+            throw  e;
+        } finally {
+            jdbcClient.closeStatement(stmt);
         }
-        return resp;
     }
 
-    // execute sql by admin user, not cluster root
-    public NativeQueryResp executeSQLNew(String sql, String ns, String db, 
ClusterInfoEntity entity) throws Exception {
-        String url = getHostUrl(entity.getAddress(), entity.getHttpPort());
-        StringBuffer buffer = new StringBuffer();
-        buffer.append(url);
-        buffer.append("/api/query/");
-        buffer.append(ns);
-        buffer.append("/");
-        buffer.append(db);
-        url = buffer.toString();
-        log.debug("Send execute sql {} request, url is {}.", sql, url);
-
-        Map<String, String> headers = Maps.newHashMap();
-        setHeaders(headers);
-        setAuthHeaders(headers, entity.getUser(), entity.getPasswd());
-
-        Map<String, String> responseBody = Maps.newHashMap();
-        responseBody.put("stmt", sql);
-
-        PaloResponseEntity response = poolManager.doPost(url, headers, 
responseBody);
-
-        if (response.getCode() != REQUEST_SUCCESS_CODE) {
-            // SQL execution error
-            throw new PaloRequestException("Query palo error:" + 
response.getData());
+    public NativeQueryResp executeSql(Statement stmt, String sql) throws 
Exception {
+        log.info("execute sql: {}", sql);
+
+        long startTimeMs = System.currentTimeMillis();
+        boolean isResultSet = true;
+        try {
+            isResultSet = stmt.execute(sql);
+        } catch (Exception e) {
+            log.error("execute sql {} exception: {}", sql, e);
+            throw e;
         }
 
-        JSONObject jsonObject = JSON.parseObject(response.getData());
+        long endTimeMs = System.currentTimeMillis();
+
         NativeQueryResp resp = new NativeQueryResp();
-        String type = jsonObject.getString("type");
-        resp.setType(type);
-        int time = jsonObject.getInteger("time");
-        resp.setTime(time);
-
-        if (type.equals(NativeQueryResp.Type.result_set.name())) {
-            List<List<String>> dataResult = Lists.newArrayList();
-            String dataStr = jsonObject.getString("data");
-            List<String> dataList = JSON.parseArray(dataStr, String.class);
-            for (String data : dataList) {
-                List<String> dataInfo = JSON.parseArray(data, String.class);
-                dataResult.add(dataInfo);
-            }
-            resp.setData(dataResult);
 
-            String metaStr = jsonObject.getString("meta");
-            List<NativeQueryResp.Meta> metaList = JSON.parseArray(metaStr, 
NativeQueryResp.Meta.class);
-            resp.setMeta(metaList);
-        }
-        return resp;
-    }
+        log.info("is result set {}", isResultSet);
 
-    // only for create admin user of the space
-    public NativeQueryResp executeCreateAdminUserSQL(String sql, String ns, 
String db, ClusterInfoEntity entity) throws Exception {
-        String url = getHostUrl(entity.getAddress(), entity.getHttpPort());
-        StringBuffer buffer = new StringBuffer();
-        buffer.append(url);
-        buffer.append("/api/query/");
-        buffer.append(ns);
-        buffer.append("/");
-        buffer.append(db);
-        url = buffer.toString();
-        log.debug("Send execute sql {} request, url is {}.", sql, url);
-
-        Map<String, String> headers = Maps.newHashMap();
-        setHeaders(headers);
-        setAuthHeaders(headers, entity.getUser(), entity.getPasswd());
-
-        Map<String, String> responseBody = Maps.newHashMap();
-        responseBody.put("stmt", sql);
-
-        PaloResponseEntity response = poolManager.doPost(url, headers, 
responseBody);
-
-        if (response.getCode() != REQUEST_SUCCESS_CODE) {
-            // SQL execution error
-            throw new PaloRequestException("Query palo error:" + 
response.getData());
+        if (isResultSet) {
+            resp.setType(NativeQueryResp.Type.result_set.name());
+        } else {
+            resp.setType(NativeQueryResp.Type.exec_status.name());
         }
 
-        JSONObject jsonObject = JSON.parseObject(response.getData());
-        NativeQueryResp resp = new NativeQueryResp();
-        String type = jsonObject.getString("type");
-        resp.setType(type);
-        int time = jsonObject.getInteger("time");
-        resp.setTime(time);
-
-        if (type.equals(NativeQueryResp.Type.result_set.name())) {
-            List<List<String>> dataResult = Lists.newArrayList();
-            String dataStr = jsonObject.getString("data");
-            List<String> dataList = JSON.parseArray(dataStr, String.class);
-            for (String data : dataList) {
-                List<String> dataInfo = JSON.parseArray(data, String.class);
-                dataResult.add(dataInfo);
+        // time type should be long?
+        resp.setTime((int) (endTimeMs - startTimeMs));
+
+        if (resp.getType().equals(NativeQueryResp.Type.result_set.name())) {
+            ResultSet res = stmt.getResultSet();
+
+            // get meta info
+            ResultSetMetaData meta = res.getMetaData();
+
+            List<NativeQueryResp.Meta> metaList = new ArrayList<>();
+
+            for (int i = 1; i <= meta.getColumnCount(); i++) {
+                String colName = meta.getColumnName(i);
+                String colType = meta.getColumnTypeName(i);
+                log.debug("{} column {} type is {}", i, colName, colType);
+                metaList.add(new NativeQueryResp.Meta(colName, colType));
             }
-            resp.setData(dataResult);
 
-            String metaStr = jsonObject.getString("meta");
-            List<NativeQueryResp.Meta> metaList = JSON.parseArray(metaStr, 
NativeQueryResp.Meta.class);
             resp.setMeta(metaList);
+
+            // get result info
+            List<List<String>> tableData = new ArrayList<>();
+            while (res.next()) {
+                List<String> row = new ArrayList<>();
+                for (int i = 1; i <= meta.getColumnCount(); i++) {
+                    row.add(res.getString(i));
+                }
+                tableData.add(row);
+                log.debug("add row {}", row);
+            }
+
+            resp.setData(tableData);
         }
         return resp;
     }
diff --git 
a/manager/manager/src/main/java/org/apache/doris/stack/model/response/construct/NativeQueryResp.java
 
b/manager/manager/src/main/java/org/apache/doris/stack/model/response/construct/NativeQueryResp.java
index 557d734..a7abaae 100644
--- 
a/manager/manager/src/main/java/org/apache/doris/stack/model/response/construct/NativeQueryResp.java
+++ 
b/manager/manager/src/main/java/org/apache/doris/stack/model/response/construct/NativeQueryResp.java
@@ -48,6 +48,7 @@ public class NativeQueryResp {
      * Meta
      */
     @Data
+    @AllArgsConstructor
     public static class Meta {
 
         private String name;

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to