Commit 606d9430 authored by gaogao110's avatar gaogao110

修复phoenix bugs 以及优化sql处理方式

parent 9b8c5882
......@@ -12,7 +12,7 @@ public enum Dialect {
FLINKSQL("FlinkSql"),FLINKJAR("FlinkJar"),FLINKSQLENV("FlinkSqlEnv"),SQL("Sql"),JAVA("Java"),
MYSQL("Mysql"),ORACLE("Oracle"),SQLSERVER("SqlServer"),POSTGRESQL("PostGreSql"),CLICKHOUSE("ClickHouse"),
DORIS("Doris");
DORIS("Doris"),PHOENIX("Phoenix");
private String value;
......@@ -42,7 +42,7 @@ public enum Dialect {
public static boolean isSql(String value){
Dialect dialect = Dialect.get(value);
switch (dialect){
case SQL:case MYSQL:case ORACLE:case SQLSERVER:case POSTGRESQL:case CLICKHOUSE:case DORIS:
case SQL:case MYSQL:case ORACLE:case SQLSERVER:case POSTGRESQL:case CLICKHOUSE:case DORIS: case PHOENIX:
return true;
default:
return false;
......
package com.dlink.metadata.convert;
import com.dlink.assertion.Asserts;
import com.dlink.model.Column;
import com.dlink.model.ColumnType;
......@@ -23,6 +24,9 @@ public interface ITypeConvert {
String convertToDB(ColumnType columnType);
default Object convertValue(ResultSet results, String columnName, String javaType) throws SQLException {
if (Asserts.isNull(javaType)) {
return results.getString(columnName);
}
switch (javaType.toLowerCase()) {
case "string":
return results.getString(columnName);
......
......@@ -2,9 +2,6 @@ package com.dlink.metadata.driver;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.SQLStatementParser;
import com.alibaba.druid.sql.parser.Token;
import com.dlink.assertion.Asserts;
import com.dlink.constant.CommonConstant;
import com.dlink.metadata.query.IDBQuery;
......@@ -17,13 +14,7 @@ import com.dlink.utils.LogUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.*;
import java.util.*;
/**
......@@ -389,6 +380,12 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
}
}
/**
* 如果执行多条语句返回最后一条语句执行结果
* @param sql
* @param limit
* @return
*/
@Override
public JdbcSelectResult executeSql(String sql, Integer limit) {
List<SQLStatement> stmtList = SQLUtils.parseStatements(sql,config.getType().toLowerCase());
......@@ -396,11 +393,12 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
JdbcSelectResult result = JdbcSelectResult.buildResult();
for(SQLStatement item : stmtList){
String type = item.getClass().getSimpleName();
if(type.toUpperCase().contains("SELECT")||type.toUpperCase().contains("SHOW")||type.toUpperCase().contains("DESC")){
return query(item.toString(),limit);
if(type.toUpperCase().contains("SELECT")||type.toUpperCase().contains("SHOW")||type.toUpperCase().contains("DESC")||type.toUpperCase().contains("SQLEXPLAINSTATEMENT")){
result = query(item.toString(),limit);
}else if(type.toUpperCase().contains("INSERT")||type.toUpperCase().contains("UPDATE")||type.toUpperCase().contains("DELETE")){
try {
resList.add(executeUpdate(item.toString()));
result.setStatusList(resList);
} catch (Exception e) {
resList.add(0);
result.setStatusList(resList);
......@@ -411,6 +409,7 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
try {
execute(item.toString());
resList.add(1);
result.setStatusList(resList);
} catch (Exception e) {
resList.add(0);
result.setStatusList(resList);
......@@ -419,7 +418,6 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
}
}
}
result.setStatusList(resList);
result.success();
return result;
}
......
......@@ -32,6 +32,10 @@
<version>4.14.2-HBase-1.4</version>
<!-- <scope>test</scope>-->
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
......@@ -7,7 +7,7 @@ import com.dlink.model.ColumnType;
public class PhoenixTypeConvert implements ITypeConvert {
@Override
public ColumnType convert(Column column) {
if (Asserts.isNull(column)) {
if (Asserts.isNull(column)||Asserts.isNull(column.getType())) {
return ColumnType.STRING;
}
String t = column.getType().toLowerCase();
......
......@@ -5,9 +5,15 @@ import com.dlink.metadata.convert.ITypeConvert;
import com.dlink.metadata.convert.PhoenixTypeConvert;
import com.dlink.metadata.query.IDBQuery;
import com.dlink.metadata.query.PhoenixQuery;
import com.dlink.metadata.result.JdbcSelectResult;
import com.dlink.model.Column;
import com.dlink.model.Table;
import org.apache.commons.lang3.StringUtils;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
/**
*
......@@ -57,4 +63,46 @@ public class PhoenixDriver extends AbstractJdbcDriver {
sql.append(" ) ");
return sql.toString();
}
@Override
public Driver connect() {
try {
Class.forName(getDriverClass());
//TODO:phoenix连接配置,后续可设置为参数传入,以适应不同配置的集群
Properties properties = new Properties();
properties.put("phoenix.schema.isNamespaceMappingEnabled", "true");
properties.put("phoenix.schema.mapSystemTablesToNamespac", "true");
conn = DriverManager.getConnection(config.getUrl(), properties);
//设置为自动提交,否则upsert语句不生效
conn.setAutoCommit(true);
} catch (ClassNotFoundException | SQLException e) {
throw new RuntimeException(e);
}
return this;
}
/**
* 解决phoenix SQL多语句执行问题
* phoenix SQL中不能执行带;语句
* @param sql
* @return
*/
public String parsePhoenixSql(String sql) {
return StringUtils.remove(sql, ";");
}
@Override
public JdbcSelectResult query(String sql, Integer limit) {
return super.query(parsePhoenixSql(sql),limit);
}
@Override
public int executeUpdate(String sql) throws Exception {
return super.executeUpdate(parsePhoenixSql(sql));
}
@Override
public boolean execute(String sql) throws Exception {
return super.execute(parsePhoenixSql(sql));
}
}
......@@ -21,7 +21,7 @@ public class PhoenixTest {
DriverConfig config = new DriverConfig();
config.setName("phoenix");
config.setType("Phoenix");
config.setUrl("jdbc:phoenix:10.1.51.24:2181");
config.setUrl("jdbc:phoenix:zxbd-test-hbase:2181");
try {
driver = Driver.build(config);
} catch (Exception e) {
......
......@@ -60,6 +60,7 @@ const SimpleTaskForm: React.FC<UpdateFormProps> = (props) => {
<Option value={DIALECT.POSTGRESQL}>{DIALECT.POSTGRESQL}</Option>
<Option value={DIALECT.CLICKHOUSE}>{DIALECT.CLICKHOUSE}</Option>
<Option value={DIALECT.DORIS}>{DIALECT.DORIS}</Option>
<Option value={DIALECT.PHOENIX}>{DIALECT.PHOENIX}</Option>
<Option value={DIALECT.JAVA}>{DIALECT.JAVA}</Option>
<Option value={DIALECT.SQL}>{DIALECT.SQL}</Option>
</Select>
......
......@@ -19,6 +19,7 @@ export const DIALECT = {
POSTGRESQL: 'PostGreSql',
CLICKHOUSE: 'ClickHouse',
DORIS: 'Doris',
PHOENIX: 'Phoenix',
JAVA: 'Java',
};
......@@ -36,6 +37,7 @@ export const isSql = (dialect: string) => {
case DIALECT.SQLSERVER:
case DIALECT.POSTGRESQL:
case DIALECT.CLICKHOUSE:
case DIALECT.PHOENIX:
case DIALECT.DORIS:
return true;
default:
......@@ -55,6 +57,7 @@ export const isExecuteSql = (dialect: string) => {
case DIALECT.POSTGRESQL:
case DIALECT.CLICKHOUSE:
case DIALECT.DORIS:
case DIALECT.PHOENIX:
case DIALECT.FLINKSQL:
return true;
default:
......@@ -74,6 +77,7 @@ export const isTask = (dialect: string) => {
case DIALECT.POSTGRESQL:
case DIALECT.CLICKHOUSE:
case DIALECT.DORIS:
case DIALECT.PHOENIX:
case DIALECT.FLINKSQL:
case DIALECT.FLINKJAR:
return true;
......
......@@ -21,6 +21,8 @@ export const getIcon = (type: string)=>{
return (<Icon component={ClickHouseSvg} />);
case DIALECT.DORIS:
return (<Icon component={DorisSvg} />);
case DIALECT.PHOENIX:
return (<Icon component={PhoenixSvg} />);
case DIALECT.JAVA:
return (<Icon component={JavaSvg} />);
default:
......@@ -262,6 +264,10 @@ export const ClickHouseSvg = () => (
fill="#ffcc00" p-id="13213"></path>
</svg>
);
export const PhoenixSvg = () => (
<svg t="987654321" className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9314" width={svgSize} height={svgSize}><path d="M896 1024H128C57.6 1024 0 966.4 0 896V128C0 57.6 57.6 0 128 0h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128z" fill="#FFFFFF" p-id="1695"></path><path d="M726.4 216.533c39.467-129.066 55.467-141.866 55.467-141.866s-107.734 38.4-141.867 147.2C605.867 331.733 663.467 464 675.2 508.8c10.667 44.8 76.8 304-145.067 318.933C369.067 838.4 323.2 670.933 339.2 596.267c4.267-19.2 21.333-90.667 52.267-141.867C422.4 403.2 435.2 324.267 435.2 324.267s25.6 5.333 37.333-14.934c0 0-23.466 0-8.533-11.733 13.867-11.733 8.533-25.6 8.533-25.6s-25.6 17.067-52.266 3.2c-25.6-13.867-84.267-52.267-124.8 8.533 0 0-43.734 7.467-64 35.2 0 0 43.733-17.066 64-5.333 21.333 11.733 54.4 37.333 20.266 118.4C281.6 513.067 190.933 577.067 240 724.267c49.067 147.2 160 205.866 304 205.866S792.533 784 792.533 641.067c0-142.934-105.6-295.467-66.133-424.534zM487.467 541.867c-51.2-43.734-52.267-150.4-52.267-150.4-17.067 120.533-8.533 194.133 72.533 240C588.8 678.4 612.267 736 612.267 736c3.2-32-72.534-150.4-124.8-194.133z m145.066 179.2s32-109.867 0-208c-28.8-87.467-53.333-117.334-52.266-179.2 1.066-61.867 29.866-182.4 45.866-197.334 0 0-100.266 89.6-101.333 185.6-1.067 96 39.467 141.867 64 182.4 24.533 40.534 57.6 110.934 43.733 216.534zM522.667 214.4s-80 118.4-60.8 228.267C464 461.867 476.8 498.133 528 552.533c51.2 54.4 92.8 148.267 96 167.467 0 0-2.133-104.533-40.533-173.867C545.067 476.8 478.933 388.267 502.4 294.4c4.267-23.467 20.267-80 20.267-80z" fill="#EC4C2E" p-id="1696"></path></svg>
);
export const DorisSvg = () => (
<svg t="1640789853861" className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
p-id="13678" width={svgSize} height={svgSize}>
......
......@@ -56,10 +56,17 @@
<!-- `provided` for product environment ,`compile` for dev environment -->
<scope.runtime>provided</scope.runtime>
<scala.binary.version>2.11</scala.binary.version>
<protobuf-java.version>2.5.0</protobuf-java.version>
</properties>
<dependencyManagement>
<dependencies>
<!--解决mysql与phoenix依赖冲突-->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>${protobuf-java.version}</version>
</dependency>
<!-- hutool java工具类库 -->
<dependency>
<groupId>cn.hutool</groupId>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment