You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2023/12/11 12:25:29 UTC
(doris) branch master updated: [fix](statistics)Escape load stats sql (#28117)
This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new cd3d31ba133 [fix](statistics)Escape load stats sql (#28117)
cd3d31ba133 is described below
commit cd3d31ba1339567670dfb1d7fab7e79fdd40ea65
Author: Jibing-Li <64...@users.noreply.github.com>
AuthorDate: Mon Dec 11 20:25:18 2023 +0800
[fix](statistics)Escape load stats sql (#28117)
Escape load stats sql, because column name may contain special characters.
---
.../apache/doris/statistics/OlapAnalysisTask.java | 4 ++--
.../doris/statistics/StatisticsRepository.java | 4 ++--
.../java/org/apache/doris/statistics/StatsId.java | 4 ++--
.../suites/statistics/analyze_stats.groovy | 28 ++++++++++++++++++++++
4 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
index 4d414563ebd..50042e4610f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
@@ -112,7 +112,7 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
params.put("dbId", String.valueOf(db.getId()));
params.put("tblId", String.valueOf(tbl.getId()));
params.put("idxId", String.valueOf(info.indexId));
- params.put("colId", String.valueOf(info.colName));
+ params.put("colId", StatisticsUtil.escapeSQL(String.valueOf(info.colName)));
params.put("dataSizeFunction", getDataSizeFunction(col, false));
params.put("dbName", db.getFullName());
params.put("colName", info.colName);
@@ -184,7 +184,7 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
params.put("dbId", String.valueOf(db.getId()));
params.put("tblId", String.valueOf(tbl.getId()));
params.put("idxId", String.valueOf(info.indexId));
- params.put("colId", String.valueOf(info.colName));
+ params.put("colId", StatisticsUtil.escapeSQL(String.valueOf(info.colName)));
params.put("dataSizeFunction", getDataSizeFunction(col, false));
params.put("catalogName", catalog.getName());
params.put("dbName", db.getFullName());
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
index 4512bf1feff..6e429f033f8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
@@ -142,7 +142,7 @@ public class StatisticsRepository {
private static ResultRow queryColumnStatisticById(long tblId, String colName, boolean isHistogram) {
Map<String, String> map = new HashMap<>();
String id = constructId(tblId, -1, colName);
- map.put("id", id);
+ map.put("id", StatisticsUtil.escapeSQL(id));
List<ResultRow> rows = isHistogram ? StatisticsUtil.executeQuery(FETCH_COLUMN_HISTOGRAM_TEMPLATE, map) :
StatisticsUtil.executeQuery(FETCH_COLUMN_STATISTIC_TEMPLATE, map);
int size = rows.size();
@@ -336,7 +336,7 @@ public class StatisticsRepository {
Map<String, String> params = new HashMap<>();
params.put("tblId", String.valueOf(tableId));
params.put("idxId", String.valueOf(idxId));
- params.put("colId", colName);
+ params.put("colId", StatisticsUtil.escapeSQL(colName));
return StatisticsUtil.execStatisticQuery(new StringSubstitutor(params)
.replace(QUERY_COLUMN_STATISTICS));
diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsId.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsId.java
index a636054cc07..21395638cd6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsId.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsId.java
@@ -69,12 +69,12 @@ public class StatsId {
public String toSQL() {
StringJoiner sj = new StringJoiner(",");
- sj.add(StatisticsUtil.quote(id));
+ sj.add(StatisticsUtil.quote(StatisticsUtil.escapeSQL(id)));
sj.add(String.valueOf(catalogId));
sj.add(String.valueOf(dbId));
sj.add(String.valueOf(tblId));
sj.add(String.valueOf(idxId));
- sj.add(StatisticsUtil.quote(colId));
+ sj.add(StatisticsUtil.quote(StatisticsUtil.escapeSQL(colId)));
sj.add(partId);
return sj.toString();
}
diff --git a/regression-test/suites/statistics/analyze_stats.groovy b/regression-test/suites/statistics/analyze_stats.groovy
index f9a5ede91be..e09cfd8118a 100644
--- a/regression-test/suites/statistics/analyze_stats.groovy
+++ b/regression-test/suites/statistics/analyze_stats.groovy
@@ -1434,4 +1434,32 @@ PARTITION `p599` VALUES IN (599)
assertEquals("0.0", result[0][5])
assertEquals("N/A", result[0][6])
assertEquals("N/A", result[0][7])
+
+ // Test analyze column with special character in name.
+ sql """
+ CREATE TABLE region (
+ `r_regionkey` int NOT NULL,
+ `r'name` VARCHAR(25) NOT NULL,
+ `r_comment` VARCHAR(152)
+ )ENGINE=OLAP
+ DUPLICATE KEY(`r_regionkey`)
+ COMMENT "OLAP"
+ DISTRIBUTED BY HASH(`r_regionkey`) BUCKETS 1
+ PROPERTIES (
+ "replication_num" = "1"
+ );
+ """
+ sql """insert into region values(1,'name1', 'comment1') """
+ sql """insert into region values(2,'name2', 'comment2') """
+ sql """insert into region values(3,'name3', 'comment3') """
+ sql """ANALYZE TABLE region WITH SYNC"""
+ result = sql """show column stats region (`r'name`);"""
+ assertEquals(1, result.size())
+ assertEquals("r'name", result[0][0])
+ assertEquals("3.0", result[0][1])
+ assertEquals("3.0", result[0][2])
+ assertEquals("0.0", result[0][3])
+ assertEquals("\'name1\'", result[0][6])
+ assertEquals("\'name3\'", result[0][7])
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org