Skip to content

Commit ddb2e25

Browse files
authored
[INLONG-12056][SDK] TransformSDK supports the "not in" operator (#12057)
1 parent 02779aa commit ddb2e25

2 files changed

Lines changed: 35 additions & 6 deletions

File tree

  • inlong-sdk/transform-sdk/src

inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/operator/InOperator.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@ public class InOperator implements ExpressionOperator {
3939

4040
private final ValueParser left;
4141
private final List<ValueParser> right;
42+
private final boolean isNot;
4243

4344
public InOperator(InExpression expr) {
45+
this.isNot = expr.isNot();
4446
this.left = OperatorTools.buildParser(expr.getLeftExpression());
4547
ItemsList itemsList = expr.getRightItemsList();
4648
this.right = new ArrayList<>();
@@ -63,9 +65,17 @@ public InOperator(InExpression expr) {
6365
* @param rowIndex
6466
* @return
6567
*/
66-
@SuppressWarnings("rawtypes")
6768
@Override
6869
public boolean check(SourceData sourceData, int rowIndex, Context context) {
70+
if (isNot) {
71+
return !this.checkIn(sourceData, rowIndex, context);
72+
} else {
73+
return this.checkIn(sourceData, rowIndex, context);
74+
}
75+
}
76+
77+
@SuppressWarnings("rawtypes")
78+
private boolean checkIn(SourceData sourceData, int rowIndex, Context context) {
6979
Comparable leftValue = (Comparable) this.left.parse(sourceData, rowIndex, context);
7080
for (ValueParser parser : right) {
7181
Comparable rightValue = (Comparable) parser.parse(sourceData, rowIndex, context);

inlong-sdk/transform-sdk/src/test/java/org/apache/inlong/sdk/transform/process/operator/TestInOperator.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ public void testAndOperator() throws Exception {
4242
Assert.assertEquals(output1.get(0), "result=1");
4343
// case2: "3.14159265358979323846|5|4|8"
4444
List<String> output2 = processor.transform("3.14159265358979323846|5|4|8");
45-
Assert.assertEquals(1, output1.size());
45+
Assert.assertEquals(1, output2.size());
4646
Assert.assertEquals(output2.get(0), "result=1");
4747
// case3: "3.14159265358979323846|3|4|8"
4848
List<String> output3 = processor.transform("3.14159265358979323846|3|4|8");
49-
Assert.assertEquals(1, output1.size());
49+
Assert.assertEquals(1, output3.size());
5050
Assert.assertEquals(output3.get(0), "result=0");
5151

5252
transformSql = "select if(numeric3 IN (4,3.2),1,0) from source";
@@ -56,15 +56,34 @@ public void testAndOperator() throws Exception {
5656
.create(config, SourceDecoderFactory.createCsvDecoder(csvSource),
5757
SinkEncoderFactory.createKvEncoder(kvSink));
5858
List<String> output4 = processor.transform("3.14159265358979323846|4|4|8");
59-
Assert.assertEquals(1, output1.size());
59+
Assert.assertEquals(1, output4.size());
6060
Assert.assertEquals(output4.get(0), "result=1");
6161
// case5: "3.14159265358979323846|4|3.2|4"
6262
List<String> output5 = processor.transform("3.14159265358979323846|4|3.2|4");
63-
Assert.assertEquals(1, output1.size());
63+
Assert.assertEquals(1, output5.size());
6464
Assert.assertEquals(output5.get(0), "result=1");
6565
// case6: "3.14159265358979323846|4|3.2|8"
6666
List<String> output6 = processor.transform("3.14159265358979323846|4|4.2|8");
67-
Assert.assertEquals(1, output1.size());
67+
Assert.assertEquals(1, output6.size());
6868
Assert.assertEquals(output6.get(0), "result=0");
69+
70+
// not in
71+
transformSql = "select if(numeric3 not IN (4,3.2),1,0) from source";
72+
config = new TransformConfig(transformSql);
73+
// case7: "3.14159265358979323846|4|4|8"
74+
processor = TransformProcessor
75+
.create(config, SourceDecoderFactory.createCsvDecoder(csvSource),
76+
SinkEncoderFactory.createKvEncoder(kvSink));
77+
List<String> output7 = processor.transform("3.14159265358979323846|4|4|8");
78+
Assert.assertEquals(1, output7.size());
79+
Assert.assertEquals(output7.get(0), "result=0");
80+
// case8: "3.14159265358979323846|4|3.2|4"
81+
List<String> output8 = processor.transform("3.14159265358979323846|4|3.2|4");
82+
Assert.assertEquals(1, output8.size());
83+
Assert.assertEquals(output8.get(0), "result=0");
84+
// case9: "3.14159265358979323846|4|3.2|8"
85+
List<String> output9 = processor.transform("3.14159265358979323846|4|4.2|8");
86+
Assert.assertEquals(1, output9.size());
87+
Assert.assertEquals(output9.get(0), "result=1");
6988
}
7089
}

0 commit comments

Comments
 (0)