191191import java .util .Objects ;
192192import java .util .Optional ;
193193import java .util .StringJoiner ;
194+ import java .util .concurrent .ConcurrentHashMap ;
194195import java .util .function .BiFunction ;
195196import java .util .stream .Collectors ;
196197import org .apache .calcite .rel .type .RelDataType ;
@@ -328,13 +329,13 @@ private PPLFuncImpTable(Builder builder, AggBuilder aggBuilder) {
328329 mapBuilder = ImmutableMap .builder ();
329330 builder .map .forEach ((k , v ) -> mapBuilder .put (k , List .copyOf (v )));
330331 this .functionRegistry = ImmutableMap .copyOf (mapBuilder .build ());
331- this .externalFunctionRegistry = new HashMap <>();
332+ this .externalFunctionRegistry = new ConcurrentHashMap <>();
332333
333334 final ImmutableMap .Builder <BuiltinFunctionName , AggHandler > aggMapBuilder =
334335 ImmutableMap .builder ();
335336 aggBuilder .map .forEach (aggMapBuilder ::put );
336337 this .aggFunctionRegistry = ImmutableMap .copyOf (aggMapBuilder .build ());
337- this .aggExternalFunctionRegistry = new HashMap <>();
338+ this .aggExternalFunctionRegistry = new ConcurrentHashMap <>();
338339 }
339340
340341 /**
@@ -346,12 +347,14 @@ private PPLFuncImpTable(Builder builder, AggBuilder aggBuilder) {
346347 public void registerExternalFunction (BuiltinFunctionName functionName , FunctionImp functionImp ) {
347348 CalciteFuncSignature signature =
348349 new CalciteFuncSignature (functionName .getName (), functionImp .getTypeChecker ());
349- if (externalFunctionRegistry .containsKey (functionName )) {
350- externalFunctionRegistry .get (functionName ).add (Pair .of (signature , functionImp ));
351- } else {
352- externalFunctionRegistry .put (
353- functionName , new ArrayList <>(List .of (Pair .of (signature , functionImp ))));
354- }
350+ externalFunctionRegistry .compute (
351+ functionName ,
352+ (name , existingList ) -> {
353+ List <Pair <CalciteFuncSignature , FunctionImp >> list =
354+ existingList == null ? new ArrayList <>() : new ArrayList <>(existingList );
355+ list .add (Pair .of (signature , functionImp ));
356+ return list ;
357+ });
355358 }
356359
357360 /**
0 commit comments