Skip to content

Commit d719d46

Browse files
authored
Fix some data types are not supported in Mode AggregationFunction
1 parent 867a457 commit d719d46

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/IoTDBModeIT.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,17 @@ public class IoTDBModeIT {
4949
"CREATE TIMESERIES root.db.d1.s4 WITH DATATYPE=FLOAT, ENCODING=PLAIN",
5050
"CREATE TIMESERIES root.db.d1.s5 WITH DATATYPE=DOUBLE, ENCODING=PLAIN",
5151
"CREATE TIMESERIES root.db.d1.s6 WITH DATATYPE=TEXT, ENCODING=PLAIN",
52+
"CREATE TIMESERIES root.db.d1.s7 WITH DATATYPE=BLOB, ENCODING=PLAIN",
53+
"CREATE TIMESERIES root.db.d1.s8 WITH DATATYPE=STRING, ENCODING=PLAIN",
54+
"CREATE TIMESERIES root.db.d1.s9 WITH DATATYPE=TIMESTAMP, ENCODING=PLAIN",
55+
"CREATE TIMESERIES root.db.d1.s10 WITH DATATYPE=DATE, ENCODING=PLAIN",
5256
"CREATE TIMESERIES root.db.d2.s1 WITH DATATYPE=INT32, ENCODING=PLAIN",
5357
"CREATE TIMESERIES root.db.d2.s2 WITH DATATYPE=INT64, ENCODING=PLAIN",
5458
"CREATE TIMESERIES root.db.d2.s3 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN",
5559
"CREATE TIMESERIES root.db.d2.s4 WITH DATATYPE=FLOAT, ENCODING=PLAIN",
5660
"CREATE TIMESERIES root.db.d2.s5 WITH DATATYPE=DOUBLE, ENCODING=PLAIN",
5761
"CREATE TIMESERIES root.db.d2.s6 WITH DATATYPE=TEXT, ENCODING=PLAIN",
58-
"INSERT INTO root.db.d1(timestamp,s1,s2,s3,s4,s5,s6) values(1, 1, 1, true, 1, 1, \"1\")",
62+
"INSERT INTO root.db.d1(timestamp,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10) values(1, 1, 1, true, 1, 1, \"1\", X'12', 'test', 1, '2025-10-15')",
5963
"INSERT INTO root.db.d1(timestamp,s1,s2,s3,s4,s5,s6) values(2, 2, 2, false, 2, 2, \"2\")",
6064
"INSERT INTO root.db.d1(timestamp,s1,s2,s3,s4,s5,s6) values(3, 2, 2, false, 2, 2, \"2\")",
6165
"INSERT INTO root.db.d1(timestamp,s1,s2,s3,s4,s5,s6) values(10000000000, 1, 1, true, 1, 1, \"1\")",
@@ -98,13 +102,27 @@ public void testModeWithDifferentTypes() {
98102
mode("root.db.d1.s4"),
99103
mode("root.db.d1.s5"),
100104
mode("root.db.d1.s6"),
105+
mode("root.db.d1.s7"),
106+
mode("root.db.d1.s8"),
107+
mode("root.db.d1.s9"),
108+
mode("root.db.d1.s10"),
101109
};
102-
String[] retArray = new String[] {"1,1,true,1.0,1.0,1,"};
110+
String[] retArray =
111+
new String[] {"1,1,true,1.0,1.0,1,0x12,test,1970-01-01T00:00:00.001Z,2025-10-15,"};
103112
resultSetEqualTest(
104-
"select mode(s1),mode(s2),mode(s3),mode(s4),mode(s5),mode(s6) from root.db.d1",
113+
"select mode(s1),mode(s2),mode(s3),mode(s4),mode(s5),mode(s6),mode(s7),mode(s8),mode(s9),mode(s10) from root.db.d1",
105114
expectedHeader,
106115
retArray);
107116

117+
expectedHeader =
118+
new String[] {
119+
mode("root.db.d1.s1"),
120+
mode("root.db.d1.s2"),
121+
mode("root.db.d1.s3"),
122+
mode("root.db.d1.s4"),
123+
mode("root.db.d1.s5"),
124+
mode("root.db.d1.s6"),
125+
};
108126
retArray = new String[] {"2,2,false,2.0,2.0,2,"};
109127
resultSetEqualTest(
110128
"select mode(s1),mode(s2),mode(s3),mode(s4),mode(s5),mode(s6) from root.db.d1 where time < 10",

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/AccumulatorFactory.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,20 +149,20 @@ private static Accumulator createModeAccumulator(TSDataType tsDataType) {
149149
switch (tsDataType) {
150150
case BOOLEAN:
151151
return new BooleanModeAccumulator();
152+
case BLOB:
153+
case STRING:
152154
case TEXT:
153155
return new BinaryModeAccumulator();
156+
case DATE:
154157
case INT32:
155158
return new IntModeAccumulator();
159+
case TIMESTAMP:
156160
case INT64:
157161
return new LongModeAccumulator();
158162
case FLOAT:
159163
return new FloatModeAccumulator();
160164
case DOUBLE:
161165
return new DoubleModeAccumulator();
162-
case BLOB:
163-
case STRING:
164-
case TIMESTAMP:
165-
case DATE:
166166
default:
167167
throw new IllegalArgumentException("Unknown data type: " + tsDataType);
168168
}

0 commit comments

Comments
 (0)