Skip to content

Commit e309eb1

Browse files
committed
Allow other value of data type can be converted to value of Binary data type when find type is not consistence in the column of tsblock.
1 parent 0b286ad commit e309eb1

File tree

7 files changed

+129
-0
lines changed

7 files changed

+129
-0
lines changed

java/common/src/main/java/org/apache/tsfile/utils/TsPrimitiveType.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.tsfile.write.UnSupportedDataTypeException;
2323

2424
import java.io.Serializable;
25+
import java.nio.charset.StandardCharsets;
2526
import java.util.Arrays;
2627

2728
public abstract class TsPrimitiveType implements Serializable {
@@ -198,6 +199,11 @@ public void setBoolean(boolean val) {
198199
this.value = val;
199200
}
200201

202+
@Override
203+
public Binary getBinary() {
204+
return new Binary(String.valueOf(this.value), StandardCharsets.UTF_8);
205+
}
206+
201207
@Override
202208
public void setObject(Object val) {
203209
if (val instanceof Boolean) {
@@ -280,6 +286,11 @@ public float getFloat() {
280286
return (float) value;
281287
}
282288

289+
@Override
290+
public Binary getBinary() {
291+
return new Binary(String.valueOf(this.value), StandardCharsets.UTF_8);
292+
}
293+
283294
@Override
284295
public void setInt(int val) {
285296
this.value = val;
@@ -357,6 +368,11 @@ public double getDouble() {
357368
return (double) value;
358369
}
359370

371+
@Override
372+
public Binary getBinary() {
373+
return new Binary(String.valueOf(this.value), StandardCharsets.UTF_8);
374+
}
375+
360376
@Override
361377
public void setLong(long val) {
362378
this.value = val;
@@ -434,6 +450,11 @@ public double getDouble() {
434450
return (double) value;
435451
}
436452

453+
@Override
454+
public Binary getBinary() {
455+
return new Binary(String.valueOf(this.value), StandardCharsets.UTF_8);
456+
}
457+
437458
@Override
438459
public void setFloat(float val) {
439460
this.value = val;
@@ -506,6 +527,11 @@ public double getDouble() {
506527
return value;
507528
}
508529

530+
@Override
531+
public Binary getBinary() {
532+
return new Binary(String.valueOf(this.value), StandardCharsets.UTF_8);
533+
}
534+
509535
@Override
510536
public void setDouble(double val) {
511537
this.value = val;

java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BooleanColumn.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import org.apache.tsfile.block.column.Column;
2323
import org.apache.tsfile.block.column.ColumnEncoding;
2424
import org.apache.tsfile.enums.TSDataType;
25+
import org.apache.tsfile.utils.Binary;
2526
import org.apache.tsfile.utils.RamUsageEstimator;
2627
import org.apache.tsfile.utils.TsPrimitiveType;
2728

29+
import java.nio.charset.StandardCharsets;
2830
import java.util.Arrays;
2931
import java.util.Optional;
3032

@@ -93,11 +95,26 @@ public boolean getBoolean(int position) {
9395
return values[position + arrayOffset];
9496
}
9597

98+
@Override
99+
public Binary getBinary(int position) {
100+
Binary[] binaries = getBinaries();
101+
return binaries.length > 0 ? binaries[position + arrayOffset] : null;
102+
}
103+
96104
@Override
97105
public boolean[] getBooleans() {
98106
return values;
99107
}
100108

109+
@Override
110+
public Binary[] getBinaries() {
111+
Binary[] binaries = new Binary[values.length];
112+
for (int i = 0; i < values.length; i++) {
113+
binaries[i] = new Binary(String.valueOf(values[i]), StandardCharsets.UTF_8);
114+
}
115+
return binaries;
116+
}
117+
101118
@Override
102119
public Object getObject(int position) {
103120
return getBoolean(position);

java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/DoubleColumn.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import org.apache.tsfile.block.column.Column;
2323
import org.apache.tsfile.block.column.ColumnEncoding;
2424
import org.apache.tsfile.enums.TSDataType;
25+
import org.apache.tsfile.utils.Binary;
2526
import org.apache.tsfile.utils.RamUsageEstimator;
2627
import org.apache.tsfile.utils.TsPrimitiveType;
2728

29+
import java.nio.charset.StandardCharsets;
2830
import java.util.Arrays;
2931
import java.util.Optional;
3032

@@ -94,11 +96,26 @@ public double getDouble(int position) {
9496
return values[position + arrayOffset];
9597
}
9698

99+
@Override
100+
public Binary getBinary(int position) {
101+
Binary[] binaries = getBinaries();
102+
return binaries.length > 0 ? binaries[position + arrayOffset] : null;
103+
}
104+
97105
@Override
98106
public double[] getDoubles() {
99107
return values;
100108
}
101109

110+
@Override
111+
public Binary[] getBinaries() {
112+
Binary[] binaries = new Binary[values.length];
113+
for (int i = 0; i < values.length; i++) {
114+
binaries[i] = new Binary(String.valueOf(values[i]), StandardCharsets.UTF_8);
115+
}
116+
return binaries;
117+
}
118+
102119
@Override
103120
public Object getObject(int position) {
104121
return getDouble(position);

java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/FloatColumn.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import org.apache.tsfile.block.column.Column;
2323
import org.apache.tsfile.block.column.ColumnEncoding;
2424
import org.apache.tsfile.enums.TSDataType;
25+
import org.apache.tsfile.utils.Binary;
2526
import org.apache.tsfile.utils.RamUsageEstimator;
2627
import org.apache.tsfile.utils.TsPrimitiveType;
2728

29+
import java.nio.charset.StandardCharsets;
2830
import java.util.Arrays;
2931
import java.util.Optional;
3032

@@ -100,6 +102,12 @@ public double getDouble(int position) {
100102
return values[position + arrayOffset];
101103
}
102104

105+
@Override
106+
public Binary getBinary(int position) {
107+
Binary[] binaries = getBinaries();
108+
return binaries.length > 0 ? binaries[position + arrayOffset] : null;
109+
}
110+
103111
@Override
104112
public float[] getFloats() {
105113
return values;
@@ -114,6 +122,15 @@ public double[] getDoubles() {
114122
return doubles;
115123
}
116124

125+
@Override
126+
public Binary[] getBinaries() {
127+
Binary[] binaries = new Binary[values.length];
128+
for (int i = 0; i < values.length; i++) {
129+
binaries[i] = new Binary(String.valueOf(values[i]), StandardCharsets.UTF_8);
130+
}
131+
return binaries;
132+
}
133+
117134
@Override
118135
public Object getObject(int position) {
119136
return getFloat(position);

java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/IntColumn.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import org.apache.tsfile.block.column.Column;
2323
import org.apache.tsfile.block.column.ColumnEncoding;
2424
import org.apache.tsfile.enums.TSDataType;
25+
import org.apache.tsfile.utils.Binary;
2526
import org.apache.tsfile.utils.RamUsageEstimator;
2627
import org.apache.tsfile.utils.TsPrimitiveType;
2728

29+
import java.nio.charset.StandardCharsets;
2830
import java.util.Arrays;
2931
import java.util.Optional;
3032

@@ -110,6 +112,12 @@ public double getDouble(int position) {
110112
return values[position + arrayOffset];
111113
}
112114

115+
@Override
116+
public Binary getBinary(int position) {
117+
Binary[] binaries = getBinaries();
118+
return binaries.length > 0 ? binaries[position + arrayOffset] : null;
119+
}
120+
113121
@Override
114122
public int[] getInts() {
115123
return values;
@@ -142,6 +150,15 @@ public double[] getDoubles() {
142150
return result;
143151
}
144152

153+
@Override
154+
public Binary[] getBinaries() {
155+
Binary[] binaries = new Binary[values.length];
156+
for (int i = 0; i < values.length; i++) {
157+
binaries[i] = new Binary(String.valueOf(values[i]), StandardCharsets.UTF_8);
158+
}
159+
return binaries;
160+
}
161+
145162
@Override
146163
public Object getObject(int position) {
147164
return getInt(position);

java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/LongColumn.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import org.apache.tsfile.block.column.Column;
2323
import org.apache.tsfile.block.column.ColumnEncoding;
2424
import org.apache.tsfile.enums.TSDataType;
25+
import org.apache.tsfile.utils.Binary;
2526
import org.apache.tsfile.utils.RamUsageEstimator;
2627
import org.apache.tsfile.utils.TsPrimitiveType;
2728

29+
import java.nio.charset.StandardCharsets;
2830
import java.util.Arrays;
2931
import java.util.Optional;
3032

@@ -100,6 +102,12 @@ public double getDouble(int position) {
100102
return values[position + arrayOffset];
101103
}
102104

105+
@Override
106+
public Binary getBinary(int position) {
107+
Binary[] binaries = getBinaries();
108+
return binaries.length > 0 ? binaries[position + arrayOffset] : null;
109+
}
110+
103111
@Override
104112
public long[] getLongs() {
105113
return values;
@@ -114,6 +122,15 @@ public double[] getDoubles() {
114122
return doubles;
115123
}
116124

125+
@Override
126+
public Binary[] getBinaries() {
127+
Binary[] binaries = new Binary[values.length];
128+
for (int i = 0; i < values.length; i++) {
129+
binaries[i] = new Binary(String.valueOf(values[i]), StandardCharsets.UTF_8);
130+
}
131+
return binaries;
132+
}
133+
117134
@Override
118135
public Object getObject(int position) {
119136
return getLong(position);

java/tsfile/src/test/java/org/apache/tsfile/read/common/ColumnTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,13 @@
3838
import org.apache.tsfile.read.common.block.column.RunLengthEncodedColumn;
3939
import org.apache.tsfile.read.common.block.column.TimeColumn;
4040
import org.apache.tsfile.read.common.block.column.TimeColumnBuilder;
41+
import org.apache.tsfile.utils.Binary;
4142
import org.apache.tsfile.utils.BytesUtils;
4243

4344
import org.junit.Assert;
4445
import org.junit.Test;
4546

47+
import java.nio.charset.StandardCharsets;
4648
import java.util.Optional;
4749

4850
public class ColumnTest {
@@ -224,7 +226,11 @@ public void booleanColumnFilterPositionsTest() {
224226
Assert.assertTrue(columnByGetPositions instanceof DictionaryColumn);
225227
Assert.assertEquals(2, columnByGetPositions.getPositionCount());
226228
Assert.assertFalse(columnByGetPositions.getBoolean(0));
229+
Assert.assertEquals(
230+
new Binary("false", StandardCharsets.UTF_8), columnByGetPositions.getBinary(0));
227231
Assert.assertTrue(columnByGetPositions.getBoolean(1));
232+
Assert.assertEquals(
233+
new Binary("true", StandardCharsets.UTF_8), columnByGetPositions.getBinary(1));
228234

229235
Column columnByCopyPositions = originalColumn.copyPositions(selectedPositions, 1, 2);
230236
Assert.assertEquals(2, columnByCopyPositions.getPositionCount());
@@ -242,7 +248,9 @@ public void doubleColumnSubColumnTest() {
242248
doubleColumn1 = (DoubleColumn) doubleColumn1.subColumn(5);
243249
Assert.assertEquals(5, doubleColumn1.getPositionCount());
244250
Assert.assertEquals(5.0, doubleColumn1.getDouble(0), 0.001);
251+
Assert.assertEquals(new Binary("5.0", StandardCharsets.UTF_8), doubleColumn1.getBinary(0));
245252
Assert.assertEquals(9.0, doubleColumn1.getDouble(4), 0.001);
253+
Assert.assertEquals(new Binary("9.0", StandardCharsets.UTF_8), doubleColumn1.getBinary(4));
246254

247255
DoubleColumn doubleColumn2 = (DoubleColumn) doubleColumn1.subColumn(3);
248256
Assert.assertEquals(2, doubleColumn2.getPositionCount());
@@ -303,7 +311,9 @@ public void floatColumnSubColumnTest() {
303311
floatColumn1 = (FloatColumn) floatColumn1.subColumn(5);
304312
Assert.assertEquals(5, floatColumn1.getPositionCount());
305313
Assert.assertEquals(5.0, floatColumn1.getFloat(0), 0.001);
314+
Assert.assertEquals(new Binary("5.0", StandardCharsets.UTF_8), floatColumn1.getBinary(0));
306315
Assert.assertEquals(9.0, floatColumn1.getFloat(4), 0.001);
316+
Assert.assertEquals(new Binary("9.0", StandardCharsets.UTF_8), floatColumn1.getBinary(4));
307317

308318
FloatColumn floatColumn2 = (FloatColumn) floatColumn1.subColumn(3);
309319
Assert.assertEquals(2, floatColumn2.getPositionCount());
@@ -414,6 +424,10 @@ public void intColumnFilterPositionsTest() {
414424
Assert.assertEquals(2, columnByCopyPositions.getPositionCount());
415425
Assert.assertEquals(3, columnByCopyPositions.getInt(0));
416426
Assert.assertEquals(5, columnByCopyPositions.getInt(1));
427+
Assert.assertEquals(
428+
new Binary("3", StandardCharsets.UTF_8), columnByCopyPositions.getBinary(0));
429+
Assert.assertEquals(
430+
new Binary("5", StandardCharsets.UTF_8), columnByCopyPositions.getBinary(1));
417431
}
418432

419433
@Test
@@ -427,11 +441,15 @@ public void longColumnSubColumnTest() {
427441
Assert.assertEquals(5, longColumn1.getPositionCount());
428442
Assert.assertEquals(5, longColumn1.getLong(0));
429443
Assert.assertEquals(9, longColumn1.getLong(4));
444+
Assert.assertEquals(new Binary("5", StandardCharsets.UTF_8), longColumn1.getBinary(0));
445+
Assert.assertEquals(new Binary("9", StandardCharsets.UTF_8), longColumn1.getBinary(4));
430446

431447
LongColumn longColumn2 = (LongColumn) longColumn1.subColumn(3);
432448
Assert.assertEquals(2, longColumn2.getPositionCount());
433449
Assert.assertEquals(8, longColumn2.getLong(0));
434450
Assert.assertEquals(9, longColumn2.getLong(1));
451+
Assert.assertEquals(new Binary("8", StandardCharsets.UTF_8), longColumn2.getBinary(0));
452+
Assert.assertEquals(new Binary("9", StandardCharsets.UTF_8), longColumn2.getBinary(1));
435453

436454
Assert.assertSame(longColumn1.getLongs(), longColumn2.getLongs());
437455
}

0 commit comments

Comments
 (0)