1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.proxy.backend.connector.sane;
19
20 import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
21 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
22 import org.apache.shardingsphere.infra.executor.sql.execute.result.ExecuteResult;
23 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
24 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.raw.metadata.RawQueryResultColumnMetaData;
25 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.raw.metadata.RawQueryResultMetaData;
26 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.raw.type.RawMemoryQueryResult;
27 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.type.memory.row.MemoryQueryResultDataRow;
28 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
29 import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
30
31 import java.sql.SQLException;
32 import java.sql.Types;
33 import java.util.Collections;
34 import java.util.Optional;
35
36
37
38
39 public final class SaneQueryResultEngine {
40
41 private final DialectSaneQueryResultEngine dialectEngine;
42
43 public SaneQueryResultEngine(final DatabaseType databaseType) {
44 dialectEngine = DatabaseTypedSPILoader.findService(DialectSaneQueryResultEngine.class, databaseType).orElse(null);
45 }
46
47
48
49
50
51
52
53
54 public Optional<ExecuteResult> getSaneQueryResult(final SQLStatement sqlStatement, final SQLException ex) {
55 if (null == dialectEngine) {
56 return sqlStatement instanceof SelectStatement ? Optional.of(getDefaultQueryResult()) : Optional.empty();
57 }
58 return dialectEngine.getSaneQueryResult(sqlStatement, ex);
59 }
60
61 private QueryResult getDefaultQueryResult() {
62 RawQueryResultColumnMetaData queryResultColumnMetaData = new RawQueryResultColumnMetaData("", "", "", Types.VARCHAR, "VARCHAR", 255, 0);
63 MemoryQueryResultDataRow resultDataRow = new MemoryQueryResultDataRow(Collections.singletonList("1"));
64 return new RawMemoryQueryResult(new RawQueryResultMetaData(Collections.singletonList(queryResultColumnMetaData)), Collections.singletonList(resultDataRow));
65 }
66 }