Skip to content

Commit 9e659bd

Browse files
committed
minor perf opt,
used Activator.CreateInstance instead of MakeGenericType, because SharpLab IL seems smaller,
1 parent 584313d commit 9e659bd

5 files changed

Lines changed: 203 additions & 133 deletions

File tree

src/SQLProvider.Common/SqlRuntime.Common.fs

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -804,57 +804,46 @@ type GroupResultItems<'key, 'SqlEntity>(keyname:String*String*String*String*Stri
804804
match columnName with
805805
| None -> (keyname |> fun (x,_,_,_,_,_,_) -> x).ToUpperInvariant()
806806
| Some c -> c.ToUpperInvariant()
807+
808+
// Pre-compute the filter strings to avoid repeated string operations
809+
let fetchColFilter = "_" + fetchCol
810+
let itemTypeFilter = itemType + "_"
811+
812+
let filterColumnValues (columnValues: seq<string * obj>) =
813+
columnValues |> Seq.filter(fun (s,k) ->
814+
let sUp = s.ToUpperInvariant()
815+
(sUp.Contains fetchColFilter || columnName.IsNone) &&
816+
sUp.Contains itemTypeFilter)
817+
807818
let itms =
808819
match box distinctItem with
809820
| :? SqlEntity ->
810821
let ent = unbox<SqlEntity> distinctItem
811-
ent.ColumnValues
812-
|> Seq.filter(fun (s,k) ->
813-
let sUp = s.ToUpperInvariant()
814-
(sUp.Contains("_"+fetchCol) || columnName.IsNone) &&
815-
(sUp.Contains(itemType+"_")))
822+
filterColumnValues ent.ColumnValues
816823
| :? Tuple<SqlEntity,SqlEntity> ->
817824
let ent1, ent2 = unbox<SqlEntity*SqlEntity> distinctItem
818825
Seq.concat [| ent1.ColumnValues; ent2.ColumnValues; |]
819-
|> Seq.distinct |> Seq.filter(fun (s,k) ->
820-
let sUp = s.ToUpperInvariant()
821-
(sUp.Contains("_"+fetchCol) || columnName.IsNone) &&
822-
(sUp.Contains(itemType+"_")))
826+
|> Seq.distinct |> filterColumnValues
823827
| :? Tuple<SqlEntity,SqlEntity,SqlEntity> ->
824828
let ent1, ent2, ent3 = unbox<SqlEntity*SqlEntity*SqlEntity> distinctItem
825829
Seq.concat [| ent1.ColumnValues; ent2.ColumnValues; ent3.ColumnValues;|]
826-
|> Seq.distinct |> Seq.filter(fun (s,k) ->
827-
let sUp = s.ToUpperInvariant()
828-
(sUp.Contains("_"+fetchCol) || columnName.IsNone) &&
829-
(sUp.Contains(itemType+"_")))
830+
|> Seq.distinct |> filterColumnValues
830831
| :? Tuple<SqlEntity,SqlEntity,SqlEntity,SqlEntity> ->
831832
let ent1, ent2, ent3, ent4 = unbox<SqlEntity*SqlEntity*SqlEntity*SqlEntity> distinctItem
832833
Seq.concat [| ent1.ColumnValues; ent2.ColumnValues; ent3.ColumnValues;ent4.ColumnValues;|]
833-
|> Seq.distinct |> Seq.filter(fun (s,k) ->
834-
let sUp = s.ToUpperInvariant()
835-
(sUp.Contains("_"+fetchCol) || columnName.IsNone) &&
836-
(sUp.Contains(itemType+"_")))
834+
|> Seq.distinct |> filterColumnValues
837835
| :? Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject<SqlEntity,SqlEntity> ->
838836
let ent = unbox<Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject<SqlEntity,SqlEntity>> distinctItem
839837
Seq.concat [| ent.Item1.ColumnValues; ent.Item2.ColumnValues; |]
840-
|> Seq.distinct |> Seq.filter(fun (s,k) ->
841-
let sUp = s.ToUpperInvariant()
842-
(sUp.Contains("_"+fetchCol) || columnName.IsNone) &&
843-
(sUp.Contains(itemType+"_")))
838+
|> Seq.distinct |> filterColumnValues
844839
| :? Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject<SqlEntity,SqlEntity,SqlEntity> ->
845840
let ent = unbox<Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject<SqlEntity,SqlEntity,SqlEntity>> distinctItem
846841
Seq.concat [| ent.Item1.ColumnValues; ent.Item2.ColumnValues; ent.Item3.ColumnValues; |]
847-
|> Seq.distinct |> Seq.filter(fun (s,k) ->
848-
let sUp = s.ToUpperInvariant()
849-
(sUp.Contains("_"+fetchCol) || columnName.IsNone) &&
850-
(sUp.Contains(itemType+"_")))
842+
|> Seq.distinct |> filterColumnValues
851843
| :? Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject<SqlEntity,SqlEntity,SqlEntity,SqlEntity> ->
852844
let ent = unbox<Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject<SqlEntity,SqlEntity,SqlEntity,SqlEntity>> distinctItem
853845
Seq.concat [| ent.Item1.ColumnValues; ent.Item2.ColumnValues; ent.Item3.ColumnValues; ent.Item4.ColumnValues; |]
854-
|> Seq.distinct |> Seq.filter(fun (s,k) ->
855-
let sUp = s.ToUpperInvariant()
856-
(sUp.Contains("_"+fetchCol) || columnName.IsNone) &&
857-
(sUp.Contains(itemType+"_")))
846+
|> Seq.distinct |> filterColumnValues
858847
| _ -> failwith ("Unknown aggregate item: " + typeof<'SqlEntity>.Name)
859848
let itm =
860849
if Seq.isEmpty itms then

0 commit comments

Comments
 (0)