@@ -908,15 +908,20 @@ private String getTargetTableName(String tableNameString) {
908
908
private void processColumnFilters (NavigableSet <byte []> columnFilters ,
909
909
Map <byte [], NavigableSet <byte []>> familyMap ) {
910
910
for (Map .Entry <byte [], NavigableSet <byte []>> entry : familyMap .entrySet ()) {
911
+ byte [] family = entry .getKey ();
911
912
if (entry .getValue () != null ) {
912
913
for (byte [] columnName : entry .getValue ()) {
913
- String columnNameStr = Bytes .toString (columnName );
914
- columnNameStr = Bytes .toString (entry .getKey ()) + "." + columnNameStr ;
915
- columnFilters .add (columnNameStr .getBytes ());
914
+ byte [] newQualifier = new byte [family .length + 1 /* length of "." */ + columnName .length ];
915
+ System .arraycopy (family , 0 , newQualifier , 0 , family .length );
916
+ newQualifier [family .length ] = 0x2E ; // 0x2E in utf-8 is "."
917
+ System .arraycopy (columnName , 0 , newQualifier , family .length + 1 , columnName .length );
918
+ columnFilters .add (newQualifier );
916
919
}
917
920
} else {
918
- String columnNameStr = Bytes .toString (entry .getKey ()) + "." ;
919
- columnFilters .add (columnNameStr .getBytes ());
921
+ byte [] newQualifier = new byte [family .length + 1 /* length of "."*/ ];
922
+ System .arraycopy (family , 0 , newQualifier , 0 , family .length );
923
+ newQualifier [family .length ] = 0x2E ; // 0x2E in utf-8 is "."
924
+ columnFilters .add (newQualifier );
920
925
}
921
926
}
922
927
}
@@ -1874,7 +1879,7 @@ private ObHTableFilter buildObHTableFilter(byte[] filterString, TimeRange timeRa
1874
1879
if (columnQualifier == null ) {
1875
1880
obHTableFilter .addSelectColumnQualifier (new byte [0 ]);
1876
1881
} else {
1877
- obHTableFilter .addSelectColumnQualifier (columnQualifier );
1882
+ obHTableFilter .addSelectColumnQualifier (columnQualifier );
1878
1883
}
1879
1884
}
1880
1885
}
@@ -2012,6 +2017,14 @@ private QueryAndMutate buildDeleteQueryAndMutate(KeyValue kv,
2012
2017
KeyValue .Type kvType = KeyValue .Type .codeToType (kv .getType ().getCode ());
2013
2018
com .alipay .oceanbase .rpc .mutation .Mutation tableMutation = buildMutation (kv , operationType ,
2014
2019
isTableGroup , family , TTL );
2020
+ // construct new_kv otherwise filter will fail to match targeted columns
2021
+ byte [] oldQualifier = CellUtil .cloneQualifier (kv );
2022
+ byte [] newQualifier = new byte [family .length + 1 /* length of "." */ + oldQualifier .length ];
2023
+ System .arraycopy (family , 0 , newQualifier , 0 , family .length );
2024
+ newQualifier [family .length ] = 0x2E ; // 0x2E in utf-8 is "."
2025
+ System .arraycopy (oldQualifier , 0 , newQualifier , family .length + 1 , oldQualifier .length );
2026
+ kv = modifyQualifier (kv , newQualifier );
2027
+
2015
2028
ObNewRange range = new ObNewRange ();
2016
2029
ObTableQuery tableQuery = new ObTableQuery ();
2017
2030
tableQuery .setObKVParams (buildOBKVParams ((Scan ) null ));
@@ -2274,8 +2287,9 @@ private BatchOperation buildBatchOperation(String tableName, List<? extends Row>
2274
2287
List <Cell > keyValueList = entry .getValue ();
2275
2288
for (Cell kv : keyValueList ) {
2276
2289
singleOpResultNum ++;
2290
+
2277
2291
if (disExec ) {
2278
- batch .addOperation (buildDeleteQueryAndMutate ((KeyValue ) kv , DEL , false , family , Long .MAX_VALUE ));
2292
+ batch .addOperation (buildDeleteQueryAndMutate ((KeyValue ) kv , DEL , isTableGroup , family , Long .MAX_VALUE ));
2279
2293
} else {
2280
2294
batch .addOperation (buildMutation (kv , DEL , isTableGroup , family , Long .MAX_VALUE ));
2281
2295
}
0 commit comments