@@ -282,9 +282,10 @@ component {
282282 local .rv = " " ;
283283 local .addedProperties = " " ;
284284 local .addedPropertiesByModel = {};
285- local .iEnd = ListLen (arguments .list );
285+ local .selectArray = $splitByCommasOutsideFunctions (arguments .list );
286+ local .iEnd = arrayLen (local .selectArray );
286287 for (local .i = 1 ; local .i <= local .iEnd ; local .i ++ ) {
287- local .iItem = Trim (ListGetAt ( arguments . list , local .i ) );
288+ local .iItem = Trim (local .selectArray [ i ] );
288289
289290 // look for duplicates
290291 local .duplicateCount = ListValueCountNoCase (local .addedProperties , local .iItem );
@@ -920,4 +921,45 @@ component {
920921 }
921922 return local .rv ;
922923 }
924+
925+ public array function $splitByCommasOutsideFunctions (required string list ) {
926+ local .rv = [];
927+ local .temp = " " ;
928+ local .insideFunction = false ;
929+ local .bracketCount = 0 ;
930+
931+ for (i = 1 ; i <= len (arguments .list ); i ++ ) {
932+ local .char = mid (arguments .list , i , 1 );
933+
934+ // Check if we are entering or exiting a function's parentheses
935+ if (local .char == " (" ) {
936+ local .bracketCount ++ ;
937+ } else if (local .char == " )" ) {
938+ local .bracketCount -- ;
939+ }
940+
941+ // Determine if we are inside a function (any content enclosed by parentheses)
942+ if (local .bracketCount > 0 ) {
943+ local .insideFunction = true ;
944+ } else if (local .bracketCount == 0 ) {
945+ local .insideFunction = false ;
946+ }
947+
948+ // Split based on commas outside functions
949+ if (local .char == " ," && ! local .insideFunction ) {
950+ arrayAppend (local .rv , trim (local .temp ));
951+ local .temp = " " ;
952+ } else {
953+ local .temp & = local .char ;
954+ }
955+ }
956+
957+ // Append the final segment
958+ if (len (trim (local .temp ))) {
959+ arrayAppend (local .rv , trim (local .temp ));
960+ }
961+
962+ return local .rv ;
963+ }
964+
923965}
0 commit comments