Skip to content

Commit

Permalink
New Conditional Defines:
Browse files Browse the repository at this point in the history
USEFIREDAC
USEDBX
STARTEREDITION
  • Loading branch information
danieleteti committed Jan 3, 2017
1 parent 32e7a8d commit 4092b08
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 125 deletions.
187 changes: 75 additions & 112 deletions sources/ObjectsMappers.pas
Original file line number Diff line number Diff line change
Expand Up @@ -26,23 +26,29 @@

interface

{$I dmvcframework.inc}


uses
System.RTTI,
System.IOUtils,
DBXPLatform,
DB,
Generics.Collections,
{$IF CompilerVersion < 27}
Data.DBXJSON,
{$IFDEF USEDBX}
Data.SqlExpr,
DBXCommon,
{$ELSE}
System.JSON,
{$ENDIF}
{$IF CompilerVersion > 25}
{$IFEND}
{$IFDEF USEFIREDAC}
FireDAC.Comp.Client, FireDAC.Stan.Param,
{$IFEND}
MVCFramework.DuckTyping, System.SysUtils, System.Classes;
MVCFramework.DuckTyping, System.SysUtils, System.Classes
{$IFDEF SYSTEMJSON}
, System.JSON
{$ELSE}
, Data.DBXJSON
{$IFEND}
;

type
{ ***** Daniele Spinetti ***** }
Expand All @@ -63,10 +69,11 @@ Mapper = class
class var ctx: TRTTIContext;

private
{$IF CompilerVersion > 25}
{$IFDEF USEFIREDAC}
class function InternalExecuteFDQuery(AQuery: TFDQuery; AObject: TObject;
WithResult: boolean): Int64;
{$ELSE}
{$IFEND}
{$IFDEF USEDBX}
class function InternalExecuteSQLQuery(AQuery: TSQLQuery; AObject: TObject;
WithResult: boolean): Int64;
{$IFEND}
Expand Down Expand Up @@ -164,13 +171,13 @@ Mapper = class
(AList: TObjectList<T>; AJSONArray: TJSONArray;
AInstanceOwner: boolean = True;
AOwnsChildObjects: boolean = True); overload;
{$IF CompilerVersion <= 25}
{$IFDEF USEDBX}
class procedure ReaderToObject(AReader: TDBXReader; AObject: TObject);
class procedure ReaderToObjectList<T: class, constructor>
(AReader: TDBXReader; AObjectList: TObjectList<T>);
class procedure ReaderToJSONObject(AReader: TDBXReader;
AJSONObject: TJSONObject; AReaderInstanceOwner: boolean = True);
{$ENDIF}
{$IFEND}
class procedure DataSetToJSONObject(ADataSet: TDataSet;
AJSONObject: TJSONObject; ADataSetInstanceOwner: boolean = True;
AJSONObjectActionProc: TJSONObjectActionProc = nil;
Expand All @@ -186,12 +193,12 @@ Mapper = class
ACloseDataSetAfterScroll: boolean = True);
class function DataSetToJSONArrayOf<T: class, constructor>
(ADataSet: TDataSet): TJSONArray;
{$IF CompilerVersion <= 25}
{$IFDEF USEDBX}
class procedure ReaderToList<T: class, constructor>(AReader: TDBXReader;
AList: IWrappedList);
class procedure ReaderToJSONArray(AReader: TDBXReader;
AJSONArray: TJSONArray; AReaderInstanceOwner: boolean = True);
{$ENDIF}
{$IFEND}
class procedure DataSetToJSONArray(ADataSet: TDataSet;
AJSONArray: TJSONArray; ADataSetInstanceOwner: boolean = True;
AJSONObjectActionProc: TJSONObjectActionProc = nil;
Expand Down Expand Up @@ -227,17 +234,17 @@ Mapper = class
(AList: TObjectList<T>): TJSONArray;
class function GetProperty(Obj: TObject; const PropertyName: string)
: TValue; static;
{$IF CompilerVersion <= 25}
{$IFDEF USEDBX}
class function ExecuteSQLQueryNoResult(AQuery: TSQLQuery;
AObject: TObject): Int64;
class procedure ExecuteSQLQuery(AQuery: TSQLQuery; AObject: TObject = nil);
class function ExecuteSQLQueryAsObjectList<T: class, constructor>
(AQuery: TSQLQuery; AObject: TObject = nil): TObjectList<T>;
class function CreateQuery(AConnection: TSQLConnection; ASQL: string)
: TSQLQuery;
{$ENDIF}
{$IFEND}
{ FIREDAC RELATED METHODS }
{$IF CompilerVersion > 25}
{$IFDEF USEFIREDAC}
class function ExecuteFDQueryNoResult(AQuery: TFDQuery;
AObject: TObject): Int64;
class procedure ExecuteFDQuery(AQuery: TFDQuery; AObject: TObject);
Expand Down Expand Up @@ -283,7 +290,8 @@ TDataSetHelper = class helper for TDataSet
fpLowerCase); overload;
procedure LoadFromJSONArrayString(AJSONArrayString: string;
AIgnoredFields: TArray<string>; AFieldNamePolicy: TFieldNamePolicy = TFieldNamePolicy.fpLowerCase); overload;
procedure LoadFromJSONArrayString(AJSONArrayString: string; AFieldNamePolicy: TFieldNamePolicy = TFieldNamePolicy.fpLowerCase); overload;
procedure LoadFromJSONArrayString(AJSONArrayString: string;
AFieldNamePolicy: TFieldNamePolicy = TFieldNamePolicy.fpLowerCase); overload;
procedure LoadFromJSONArray(AJSONArray: TJSONArray;
AIgnoredFields: TArray<string>; AFieldNamePolicy: TFieldNamePolicy = TFieldNamePolicy.fpLowerCase); overload;
procedure LoadFromJSONObjectString(AJSONObjectString: string); overload;
Expand Down Expand Up @@ -387,23 +395,6 @@ MapperColumnAttribute = class(TCustomAttribute)
property IsPK: boolean read FIsPK write SetIsPK;
end;

TGridColumnAlign = (caLeft, caCenter, caRight);

GridColumnProps = class(TCustomAttribute)
private
FCaption: string;
FAlign: TGridColumnAlign;
FWidth: Integer;
function GetAlignAsString: string;

public
constructor Create(ACaption: string; AAlign: TGridColumnAlign = caCenter;
AWidth: Integer = -1);
property Caption: string read FCaption;
property Align: TGridColumnAlign read FAlign;
property AlignAsString: string read GetAlignAsString;
property Width: Integer read FWidth;
end;

function ISODateTimeToString(ADateTime: TDateTime): string;
function ISODateToString(ADate: TDateTime): string;
Expand Down Expand Up @@ -434,7 +425,7 @@ implementation
{$IF CompilerVersion >= 28}
System.NetEncoding,
// so that the old functions in Soap.EncdDecd can be inlined
{$ENDIF}
{$IFEND}
Soap.EncdDecd;

const
Expand Down Expand Up @@ -523,7 +514,7 @@ function ISOStrToDate(const DateAsString: string): TDate;
StrToInt(Copy(DateAsString, 6, 2)), StrToInt(Copy(DateAsString, 9, 2)));
end;

{$IF CompilerVersion <= 25}
{$IFDEF USEDBX}


class function Mapper.InternalExecuteSQLQuery(AQuery: TSQLQuery;
Expand Down Expand Up @@ -1194,10 +1185,10 @@ class function Mapper.ObjectToJSONObject(AObject: TObject;
SS: TStringStream;
_attrser: MapperSerializeAsString;
SerEnc: TEncoding;
// attr: MapperItemsClassType;
// ListCount: Integer;
// ListItems: TRttiMethod;
// ListItemValue: TValue;
// attr: MapperItemsClassType;
// ListCount: Integer;
// ListItems: TRttiMethod;
// ListItemValue: TValue;
begin
ThereAreIgnoredProperties := Length(AIgnoredProperties) > 0;
JSONObject := TJSONObject.Create;
Expand Down Expand Up @@ -1287,9 +1278,9 @@ class function Mapper.ObjectToJSONObject(AObject: TObject;
begin
if TDuckTypedList.CanBeWrappedAsList(o) then
begin
if true {Mapper.HasAttribute<MapperItemsClassType>(_property, attr) or
if True { Mapper.HasAttribute<MapperItemsClassType>(_property, attr) or
Mapper.HasAttribute<MapperItemsClassType>
(_property.PropertyType, attr)} then
(_property.PropertyType, attr) } then
begin
list := WrapAsList(o);
if Assigned(list) then
Expand All @@ -1302,36 +1293,36 @@ class function Mapper.ObjectToJSONObject(AObject: TObject;
Arr.AddElement(ObjectToJSONObject(Obj));
end;
end
// else // Ezequiel J. Müller convert regular list
// begin
// ListCount := ctx.GetType(o.ClassInfo).GetProperty('Count')
// .GetValue(o).AsInteger;
// ListItems := ctx.GetType(o.ClassInfo)
// .GetIndexedProperty('Items').ReadMethod;
// if (ListCount > 0) and (ListItems <> nil) then
// begin
// Arr := TJSONArray.Create;
// JSONObject.AddPair(f, Arr);
// for I := 0 to ListCount - 1 do
// begin
// ListItemValue := ListItems.Invoke(o, [I]);
// case ListItemValue.TypeInfo.Kind of
// tkInteger:
// Arr.AddElement
// (TJSONNumber.Create(ListItemValue.AsInteger));
// tkInt64:
// Arr.AddElement
// (TJSONNumber.Create(ListItemValue.AsInt64));
// tkFloat:
// Arr.AddElement
// (TJSONNumber.Create(ListItemValue.AsExtended));
// tkString, tkLString, tkWString, tkUString:
// Arr.AddElement
// (TJSONString.Create(ListItemValue.AsString));
// end;
// end;
// end;
// end;
// else // Ezequiel J. Müller convert regular list
// begin
// ListCount := ctx.GetType(o.ClassInfo).GetProperty('Count')
// .GetValue(o).AsInteger;
// ListItems := ctx.GetType(o.ClassInfo)
// .GetIndexedProperty('Items').ReadMethod;
// if (ListCount > 0) and (ListItems <> nil) then
// begin
// Arr := TJSONArray.Create;
// JSONObject.AddPair(f, Arr);
// for I := 0 to ListCount - 1 do
// begin
// ListItemValue := ListItems.Invoke(o, [I]);
// case ListItemValue.TypeInfo.Kind of
// tkInteger:
// Arr.AddElement
// (TJSONNumber.Create(ListItemValue.AsInteger));
// tkInt64:
// Arr.AddElement
// (TJSONNumber.Create(ListItemValue.AsInt64));
// tkFloat:
// Arr.AddElement
// (TJSONNumber.Create(ListItemValue.AsExtended));
// tkString, tkLString, tkWString, tkUString:
// Arr.AddElement
// (TJSONString.Create(ListItemValue.AsString));
// end;
// end;
// end;
// end;
end
else if o is TStream then
begin
Expand Down Expand Up @@ -1485,7 +1476,7 @@ class function Mapper.ObjectToJSONObjectFieldsString(AObject: TObject;
Result := LJObj.ToJSON;
{$ELSE}
Result := LJObj.ToString
{$ENDIF}
{$IFEND}
finally
LJObj.Free;
end;
Expand Down Expand Up @@ -2462,7 +2453,7 @@ class function Mapper.JSONObjectFieldsToObject(AJSONObject
{$ELSE}
if not AJSONObject.TryGetValue<TJSONString>(DMVC_CLASSNAME, lJClassName) then
raise EMapperException.Create('No $classname property in the JSON object');
{$ENDIF}
{$IFEND}
LObj := TRTTIUtils.CreateObject(lJClassName.Value);
try
InternalJSONObjectFieldsToObject(ctx, AJSONObject, LObj);
Expand Down Expand Up @@ -2566,7 +2557,7 @@ class procedure Mapper.JSONObjectToDataSet(AJSONObject: TJSONObject;
{$ELSE} // Delphi XE7 introduces method "ToJSON" to fix some old bugs...
ADataSet.Fields[I].AsCurrency :=
StrToCurr((v as TJSONNumber).ToJSON, fs);
{$ENDIF}
{$IFEND}
end;
TFieldType.ftFMTBcd:
begin
Expand Down Expand Up @@ -2798,8 +2789,7 @@ class procedure Mapper.DataSetToObjectList<T>(ADataSet: TDataSet;
// FreeAndNil(ADataSet);
// end;

{$IF CompilerVersion > 25}

{$IFDEF USEFIREDAC}

class procedure Mapper.ObjectToFDParameters(AFDParams: TFDParams;
AObject: TObject; AParamPrefix: string);
Expand Down Expand Up @@ -2915,8 +2905,9 @@ class procedure Mapper.ExecuteFDQuery(AQuery: TFDQuery; AObject: TObject);
begin
InternalExecuteFDQuery(AQuery, AObject, True);
end;
{$ENDIF}
{$IF CompilerVersion <= 25}
{$IFEND}

{$IFDEF USEDBX}


class function Mapper.ExecuteSQLQueryNoResult(AQuery: TSQLQuery;
Expand All @@ -2938,6 +2929,7 @@ class function Mapper.ExecuteSQLQueryAsObjectList<T>(AQuery: TSQLQuery;
DataSetToObjectList<T>(AQuery, Result);
end;
{$IFEND}

{ MappedField }

constructor MapperColumnAttribute.Create(AFieldName: string; AIsPK: boolean);
Expand All @@ -2956,35 +2948,6 @@ procedure MapperColumnAttribute.SetIsPK(const Value: boolean);
begin
FIsPK := Value;
end;
{ GridColumnProps }

constructor GridColumnProps.Create(ACaption: string; AAlign: TGridColumnAlign;
AWidth: Integer);
begin
inherited Create;
FCaption := ACaption;
FAlign := AAlign;

{$IF CompilerVersion >= 23.0}
FWidth := System.Math.Max(AWidth, 50);

{$ELSE}
FWidth := Math.Max(AWidth, 50);

{$IFEND}
end;

function GridColumnProps.GetAlignAsString: string;
begin
case FAlign of
caLeft:
Result := 'left';
caCenter:
Result := 'center';
caRight:
Result := 'right';
end;
end;

{ JSONSer }

Expand Down Expand Up @@ -3062,11 +3025,11 @@ function TDataSetHelper.AsJSONArrayString: string;
begin
Arr := AsJSONArray;
try
{$IF CompilerVersion >= 28}
{$IFDEF SYSTEMJSON}
Result := Arr.ToJSON;
{$ELSE}
Result := Arr.ToString;
{$ENDIF}
{$IFEND}
finally
Arr.Free;
end;
Expand Down Expand Up @@ -3104,11 +3067,11 @@ function TDataSetHelper.AsJSONObjectString(AReturnEmptyStringIfEOF
end
else
try
{$IF CompilerVersion >= 28}
{$IFDEF SYSTEMJSON}
Result := JObj.ToJSON;
{$ELSE}
Result := JObj.ToString
{$ENDIF}
{$IFEND}
finally
JObj.Free;
end;
Expand Down
16 changes: 16 additions & 0 deletions sources/dmvcframework.inc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@
{
http://delphi.wikia.com/wiki/CompilerVersion_Constant
}

{ ---- Enable this if you are on DELPHI STARTED EDITION --------- }
{.$DEFINE STARTEREDITION}
{ ------------ DO NOT CHANGE UNDER THIS LINE -------------------- }

{$IF CompilerVersion >= 27} // XE6
{$DEFINE SYSTEMJSON}
{$DEFINE WEBAPACHEHTTP}
Expand All @@ -33,3 +38,14 @@
{$IF CompilerVersion >= 28} // XE7
{$DEFINE SYSTEMNETENCODING}
{$ENDIF}

{$IF CompilerVersion >= 27} // XE6
{$DEFINE USEFIREDAC}
{$ELSE}
{$DEFINE USEDBX} //XE3, XE4, XE5
{$ENDIF}

{$IFDEF STARTEREDITION}
{$UNDEF USEFIREDAC}
{$UNDEF USEDBX}
{$ENDIF}

0 comments on commit 4092b08

Please sign in to comment.