Skip to content

Commit 46abbb0

Browse files
wt0530githubgxll
authored andcommitted
[fix][dingo-calcite] Remove the case sensitivity restrictions on column and index names
1 parent 480acc3 commit 46abbb0

File tree

23 files changed

+35
-74
lines changed

23 files changed

+35
-74
lines changed

dingo-calcite/src/main/java/io/dingodb/calcite/DingoDdlExecutor.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ public void execute(SqlCreateTable createT, CalcitePrepare.Context context) {
471471
}
472472

473473
// Distinct column
474-
long distinctColCnt = columns.stream().map(ColumnDefinition::getName).distinct().count();
474+
long distinctColCnt = columns.stream().map(c -> c.getName().toUpperCase()).distinct().count();
475475
long realColCnt = columns.size();
476476
if (distinctColCnt != realColCnt) {
477477
throw DINGO_RESOURCE.duplicateColumn().ex();
@@ -1836,16 +1836,13 @@ public void execute(SqlAlterRenameIndex sqlAlterRenameIndex, CalcitePrepare.Cont
18361836
}
18371837
String originIndexName = sqlAlterRenameIndex.originIndexName;
18381838
boolean hasIndex = table.getIndexes().stream()
1839-
.anyMatch(indexTable -> caseSensitive() ? indexTable.getName().equals(originIndexName)
1840-
: indexTable.getName().equalsIgnoreCase(originIndexName));
1839+
.anyMatch(indexTable -> indexTable.getName().equalsIgnoreCase(originIndexName));
18411840
if (!hasIndex) {
18421841
throw DingoErrUtil.newStdErr(ErrKeyDoesNotExist, originIndexName, tableName);
18431842
}
18441843

18451844
hasIndex = table.getIndexes().stream()
1846-
.anyMatch(indexTable -> caseSensitive() ? indexTable.getName()
1847-
.equals(sqlAlterRenameIndex.toIndexName)
1848-
: indexTable.getName().equalsIgnoreCase(sqlAlterRenameIndex.toIndexName));
1845+
.anyMatch(indexTable -> indexTable.getName().equalsIgnoreCase(sqlAlterRenameIndex.toIndexName));
18491846
if (hasIndex) {
18501847
throw DingoErrUtil.newStdErr(ErrDupKeyName, sqlAlterRenameIndex.toIndexName);
18511848
}

dingo-calcite/src/main/java/io/dingodb/calcite/DingoSqlToRelConverter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ private Blackboard createInsertBlackboard(
233233
) {
234234
final Map<String, RexNode> nameToNameMap = new HashMap<>();
235235

236+
int j = 0;
236237
final List<ColumnStrategy> strategies = targetTable.getColumnStrategies();
237238
final List<String> targetFields = targetTable.getRowType().getFieldNames();
238239
for (String targetColumnName : targetColumnNames) {
@@ -243,7 +244,7 @@ private Blackboard createInsertBlackboard(
243244
break;
244245
default:
245246
nameToNameMap.put(targetColumnName,
246-
rexBuilder.makeFieldAccess(sourceRef, i));
247+
rexBuilder.makeFieldAccess(sourceRef, j++));
247248
}
248249
}
249250
return createBlackboard(null, nameToNameMap, false);

dingo-calcite/src/main/java/io/dingodb/calcite/DingoTable.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
import java.util.concurrent.ConcurrentHashMap;
6464
import java.util.stream.Collectors;
6565

66-
import static io.dingodb.common.util.NameCaseUtils.caseSensitive;
6766
import static io.dingodb.common.util.NameCaseUtils.convertName;
6867

6968
@Slf4j
@@ -108,7 +107,7 @@ public SubSnapshotSchema getSchema() {
108107

109108
public IndexTable getIndexDefinition(String name) {
110109
return indexTableDefinitions.stream()
111-
.filter(i -> caseSensitive() ? i.getName().equals(name) : i.getName().equalsIgnoreCase(name))
110+
.filter(i -> i.getName().equalsIgnoreCase(name))
112111
.findAny()
113112
.orElse(null);
114113
}

dingo-calcite/src/main/java/io/dingodb/calcite/executor/ShowTableStatusExecutor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import java.util.List;
3131
import java.util.stream.Collectors;
3232

33+
import static io.dingodb.common.util.NameCaseUtils.caseSensitive;
34+
3335
public class ShowTableStatusExecutor extends QueryExecutor {
3436

3537
String schema;
@@ -49,7 +51,7 @@ public Iterator<Object[]> getIterator() {
4951
return is.getSchemaMap()
5052
.entrySet()
5153
.stream()
52-
.filter(e -> e.getKey().equalsIgnoreCase(schema))
54+
.filter(e -> caseSensitive() ? e.getKey().equals(schema) : e.getKey().equalsIgnoreCase(schema))
5355
.flatMap(e -> {
5456
Collection<Table> tables = e.getValue().getTables().values();
5557
return tables.stream()

dingo-calcite/src/main/java/io/dingodb/calcite/meta/DingoCostModelV1.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,7 @@ public static double getAvgRowSize(List<Column> selectionCds, Table td, String s
108108
AtomicBoolean hasStats = new AtomicBoolean(false);
109109
if (tableStats != null) {
110110
tableStats.getStatsNormalList().forEach(statsNormal -> {
111-
if (caseSensitive() ? cd.getName().equals(statsNormal.getColumnName())
112-
: cd.getName().equalsIgnoreCase(statsNormal.getColumnName())) {
111+
if (cd.getName().equalsIgnoreCase(statsNormal.getColumnName())) {
113112
avgRowSize.addAndGet(statsNormal.getAvgColSize());
114113
hasStats.set(true);
115114
}

dingo-calcite/src/main/java/io/dingodb/calcite/rule/DingoGetByIndexRule.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import io.dingodb.calcite.DingoParserContext;
2020
import io.dingodb.calcite.DingoTable;
21-
import io.dingodb.calcite.rel.DingoForUpdate;
2221
import io.dingodb.calcite.rel.DingoGetByIndex;
2322
import io.dingodb.calcite.rel.DingoGetByKeys;
2423
import io.dingodb.calcite.rel.LogicalDingoTableScan;
@@ -32,9 +31,7 @@
3231
import io.dingodb.common.CommonId;
3332
import io.dingodb.common.log.LogUtils;
3433
import io.dingodb.common.meta.SchemaState;
35-
import io.dingodb.common.mysql.scope.ScopeVariables;
3634
import io.dingodb.common.type.TupleMapping;
37-
import io.dingodb.meta.entity.Column;
3835
import io.dingodb.meta.entity.IndexTable;
3936
import io.dingodb.meta.entity.IndexType;
4037
import io.dingodb.meta.entity.Table;
@@ -44,7 +41,6 @@
4441
import org.apache.calcite.plan.RelTraitSet;
4542
import org.apache.calcite.rel.RelNode;
4643
import org.apache.calcite.rel.convert.ConverterRule;
47-
import org.apache.calcite.rel.hint.RelHint;
4844
import org.apache.calcite.rex.RexBuilder;
4945
import org.apache.calcite.rex.RexCall;
5046
import org.apache.calcite.rex.RexInputRef;
@@ -65,8 +61,6 @@
6561
import java.util.Set;
6662
import java.util.stream.Collectors;
6763

68-
import static io.dingodb.common.util.NameCaseUtils.caseSensitive;
69-
7064
@Slf4j
7165
public class DingoGetByIndexRule extends ConverterRule {
7266
public static final Config DEFAULT = Config.INSTANCE

dingo-calcite/src/main/java/io/dingodb/calcite/rule/DingoVectorIndexRule.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,6 @@ default DingoVectorIndexRule toRule() {
297297

298298
private static Pair<Integer, Integer> getVectorIndex(DingoTable dingoTable, int dimension) {
299299
List<IndexTable> indexes = dingoTable.getTable().getIndexes();
300-
boolean caseSensitive = caseSensitive();
301300
for (IndexTable index : indexes) {
302301

303302
if (!index.getIndexType().isVector) {
@@ -314,11 +313,9 @@ private static Pair<Integer, Integer> getVectorIndex(DingoTable dingoTable, int
314313
int vectorIndex = 0;
315314
for (int i = 0; i < dingoTable.getTable().getColumns().size(); i ++) {
316315
Column column = dingoTable.getTable().getColumns().get(i);
317-
if (caseSensitive ? column.getName().equals(vectorIdColName)
318-
: column.getName().equalsIgnoreCase(vectorIdColName)) {
316+
if (column.getName().equalsIgnoreCase(vectorIdColName)) {
319317
vectorIdIndex = i;
320-
} else if (caseSensitive ? column.getName().equals(vectorColName)
321-
: column.getName().equalsIgnoreCase(vectorColName)) {
318+
} else if (column.getName().equalsIgnoreCase(vectorColName)) {
322319
vectorIndex = i;
323320
}
324321
}

dingo-calcite/src/main/java/io/dingodb/calcite/runtime/DingoResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public interface DingoResource {
126126
@BaseMessage("Tenant ''{0}'' not found")
127127
ExInst<DingoSqlException> tenantNotFound(String a0);
128128

129-
@BaseMessage("Error 1060 (42S21): Duplicate column names are not allowed in table definition")
129+
@BaseMessage("Error 1060 (42S21): Duplicate column names are not allowed in table definition, even if the cases are different")
130130
ExInst<DingoSqlException> duplicateColumn();
131131

132132
@BaseMessage("Error 1105 (HY000): Check illegalArgumentException")

dingo-calcite/src/main/java/io/dingodb/calcite/stats/SelectivityEstimator.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,14 @@ private static CalculateStatistic extractColStats(Pair<String, Column> statsIden
119119
if (StatsCache.statsMap.containsKey(statsIdentifier.getLeft())) {
120120
TableStats stats = StatsCache.statsMap.get(statsIdentifier.getLeft());
121121
for (int i = 0; i < stats.getHistogramList().size(); i ++) {
122-
if (stats.getHistogramList().get(i).getColumnName().equals(statsIdentifier.getRight().getName())) {
122+
if (stats.getHistogramList().get(i).getColumnName()
123+
.equalsIgnoreCase(statsIdentifier.getRight().getName())) {
123124
return stats.getHistogramList().get(i);
124125
}
125126
}
126127
for (int i = 0; i < stats.getCountMinSketchList().size(); i ++) {
127-
if (stats.getCountMinSketchList().get(i).getColumnName().equals(statsIdentifier.getRight().getName())) {
128+
if (stats.getCountMinSketchList().get(i).getColumnName()
129+
.equalsIgnoreCase(statsIdentifier.getRight().getName())) {
128130
return stats.getCountMinSketchList().get(i);
129131
}
130132
}

dingo-calcite/src/main/java/io/dingodb/calcite/stats/task/AnalyzeTask.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,8 @@ private void typeMetricAdaptor(Table td,
240240
AtomicInteger index = new AtomicInteger();
241241
td.getColumns().forEach(columnDefinition -> {
242242
index.incrementAndGet();
243-
if (columnList != null && !columnList.isEmpty() && !columnList.contains(columnDefinition.getName())) {
243+
if (columnList != null && !columnList.isEmpty() && !columnList.stream().map(String::toUpperCase).toList()
244+
.contains(columnDefinition.getName().toUpperCase())) {
244245
return;
245246
}
246247
boolean allowStats = false;

0 commit comments

Comments
 (0)