|
@@ -7,7 +7,7 @@
|
|
Author : Kike Pérez
|
|
Author : Kike Pérez
|
|
Version : 1.0
|
|
Version : 1.0
|
|
Created : 04/04/2019
|
|
Created : 04/04/2019
|
|
- Modified : 19/01/2022
|
|
|
|
|
|
+ Modified : 27/01/2022
|
|
|
|
|
|
This file is part of QuickLib: https://github.com/exilon/QuickLib
|
|
This file is part of QuickLib: https://github.com/exilon/QuickLib
|
|
|
|
|
|
@@ -145,12 +145,14 @@ type
|
|
TLinqQuery<T : class> = class(TInterfacedObject,ILinqQuery<T>)
|
|
TLinqQuery<T : class> = class(TInterfacedObject,ILinqQuery<T>)
|
|
private type
|
|
private type
|
|
arrayOfT = array of T;
|
|
arrayOfT = array of T;
|
|
|
|
+ TArrType = (atArray, atXArray, atList, atObjectList);
|
|
private
|
|
private
|
|
fWhereClause : TExpression;
|
|
fWhereClause : TExpression;
|
|
fOrderBy : TArray<string>;
|
|
fOrderBy : TArray<string>;
|
|
fOrderDirection : TOrderDirection;
|
|
fOrderDirection : TOrderDirection;
|
|
- //fPList : Pointer;
|
|
|
|
|
|
+ fPList : Pointer;
|
|
fList : arrayOfT;
|
|
fList : arrayOfT;
|
|
|
|
+ fArrType : TArrType;
|
|
function FormatParams(const aWhereClause : string; aWhereParams : array of const) : string;
|
|
function FormatParams(const aWhereClause : string; aWhereParams : array of const) : string;
|
|
procedure DoOrderBy(vArray : ArrayOfT);
|
|
procedure DoOrderBy(vArray : ArrayOfT);
|
|
function Compare(const aPropertyName : string; L, R : T) : Integer;
|
|
function Compare(const aPropertyName : string; L, R : T) : Integer;
|
|
@@ -205,30 +207,43 @@ end;
|
|
constructor TLinqQuery<T>.Create(aArray: TArray<T>);
|
|
constructor TLinqQuery<T>.Create(aArray: TArray<T>);
|
|
begin
|
|
begin
|
|
Clear;
|
|
Clear;
|
|
|
|
+ fPList := Pointer(aArray);
|
|
fList := aArray;
|
|
fList := aArray;
|
|
|
|
+ fArrType := TArrType.atArray;
|
|
end;
|
|
end;
|
|
|
|
|
|
{$IFNDEF FPC}
|
|
{$IFNDEF FPC}
|
|
constructor TLinqQuery<T>.Create(aObjectList: TObjectList<T>);
|
|
constructor TLinqQuery<T>.Create(aObjectList: TObjectList<T>);
|
|
begin
|
|
begin
|
|
Clear;
|
|
Clear;
|
|
- //Create(aObjectList.List);
|
|
|
|
- //fPList := Pointer(aObjectList.List);
|
|
|
|
- //fList := arrayOfT(fPList);
|
|
|
|
|
|
+ fPList := Pointer(aObjectList);
|
|
|
|
+ {$IFDEF DELPHIRX104_UP}
|
|
|
|
+ fList := aObjectList.PList^;
|
|
|
|
+ {$ELSE}
|
|
fList := aObjectList.List;
|
|
fList := aObjectList.List;
|
|
|
|
+ {$ENDIF}
|
|
|
|
+ fArrType := TArrType.atObjectList;
|
|
end;
|
|
end;
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
|
|
|
|
constructor TLinqQuery<T>.Create(aXArray: TxArray<T>);
|
|
constructor TLinqQuery<T>.Create(aXArray: TxArray<T>);
|
|
begin
|
|
begin
|
|
Clear;
|
|
Clear;
|
|
- fList := aXArray;
|
|
|
|
|
|
+ fPList := Pointer(aXArray);
|
|
|
|
+ fList := aXArray.PArray^;
|
|
|
|
+ fArrType := TArrType.atXArray;
|
|
end;
|
|
end;
|
|
|
|
|
|
constructor TLinqQuery<T>.Create(aList: TList<T>);
|
|
constructor TLinqQuery<T>.Create(aList: TList<T>);
|
|
begin
|
|
begin
|
|
Clear;
|
|
Clear;
|
|
|
|
+ fPList := Pointer(aList);
|
|
|
|
+ {$IFDEF DELPHIRX104_UP}
|
|
|
|
+ fList := aList.PList^;
|
|
|
|
+ {$ELSE}
|
|
fList := aList.ToArray;
|
|
fList := aList.ToArray;
|
|
|
|
+ {$ENDIF}
|
|
|
|
+ fArrType := TArrType.atList;
|
|
end;
|
|
end;
|
|
|
|
|
|
function TLinqQuery<T>.Compare(const aPropertyName: string; L, R: T): Integer;
|
|
function TLinqQuery<T>.Compare(const aPropertyName: string; L, R: T): Integer;
|
|
@@ -285,8 +300,22 @@ begin
|
|
begin
|
|
begin
|
|
if fWhereClause.Validate(fList[i]) then
|
|
if fWhereClause.Validate(fList[i]) then
|
|
begin
|
|
begin
|
|
- TObject(fList[i]).Free;
|
|
|
|
- //System.Delete(fList,i,1);
|
|
|
|
|
|
+ case fArrType of
|
|
|
|
+ TArrType.atArray, TArrType.atXArray :
|
|
|
|
+ begin
|
|
|
|
+ TObject(fList[i]).Free;
|
|
|
|
+ System.Delete(fList,i,1);
|
|
|
|
+ //fPList := Pointer(fList);
|
|
|
|
+ end;
|
|
|
|
+ TArrType.atList :
|
|
|
|
+ begin
|
|
|
|
+ TList<T>(fPList).Delete(i);
|
|
|
|
+ end;
|
|
|
|
+ TArrType.atObjectList :
|
|
|
|
+ begin
|
|
|
|
+ TObjectList<T>(fPList).Delete(i);
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
Inc(Result);
|
|
Inc(Result);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
@@ -588,7 +617,11 @@ end;
|
|
|
|
|
|
constructor TLinqArray<T>.Create(aArray: TArray<T>);
|
|
constructor TLinqArray<T>.Create(aArray: TArray<T>);
|
|
begin
|
|
begin
|
|
|
|
+ {$IFDEF DELPHIRX104_UP}
|
|
|
|
+ Pointer(fArray) := aArray;
|
|
|
|
+ {$ELSE}
|
|
fArray := aArray;
|
|
fArray := aArray;
|
|
|
|
+ {$ENDIF}
|
|
end;
|
|
end;
|
|
|
|
|
|
function TLinqArray<T>.Delete: Integer;
|
|
function TLinqArray<T>.Delete: Integer;
|