mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-07 06:27:51 +02:00
* Locate by default starts from 0th record. Add option to allow search from current. Fix date handling
This commit is contained in:
parent
c149455dce
commit
0a0fd7dfe0
@ -1002,7 +1002,7 @@ type
|
||||
TUpdateAction = (uaFail, uaAbort, uaSkip, uaRetry, uaApplied);
|
||||
TUpdateKind = (ukModify, ukInsert, ukDelete);
|
||||
|
||||
TLocateOption = (loCaseInsensitive, loPartialKey);
|
||||
TLocateOption = (loCaseInsensitive, loPartialKey, loFromCurrent);
|
||||
TLocateOptions = set of TLocateOption;
|
||||
TDataOperation = procedure of object;
|
||||
|
||||
@ -1293,10 +1293,10 @@ type
|
||||
procedure Append;
|
||||
procedure AppendRecord(const Values: array of jsValue);
|
||||
function BookmarkValid(ABookmark{%H-}: TBookmark): Boolean; virtual;
|
||||
function ConvertToDateTime(aValue : JSValue; ARaiseException : Boolean) : TDateTime; virtual;
|
||||
function ConvertDateTimeToNative(aValue : TDateTime) : JSValue; virtual;
|
||||
Class function DefaultConvertToDateTime(aValue : JSValue; ARaiseException{%H-} : Boolean) : TDateTime; virtual;
|
||||
Class function DefaultConvertDateTimeToNative(aValue : TDateTime) : JSValue; virtual;
|
||||
function ConvertToDateTime(aField : TField; aValue : JSValue; ARaiseException : Boolean) : TDateTime; virtual;
|
||||
function ConvertDateTimeToNative(aField : TField; aValue : TDateTime) : JSValue; virtual;
|
||||
Class function DefaultConvertToDateTime(aField : TField; aValue : JSValue; ARaiseException{%H-} : Boolean) : TDateTime; virtual;
|
||||
Class function DefaultConvertDateTimeToNative(aField : TField; aValue : TDateTime) : JSValue; virtual;
|
||||
Function BlobDataToBytes(aValue : JSValue) : TBytes; virtual;
|
||||
Class Function DefaultBlobDataToBytes(aValue : JSValue) : TBytes; virtual;
|
||||
Function BytesToBlobData(aValue : TBytes) : JSValue ; virtual;
|
||||
@ -3867,12 +3867,12 @@ end;
|
||||
|
||||
|
||||
|
||||
function TDataSet.ConvertToDateTime(aValue: JSValue; ARaiseException: Boolean): TDateTime;
|
||||
function TDataSet.ConvertToDateTime(aField: TField; aValue: JSValue; ARaiseException: Boolean): TDateTime;
|
||||
begin
|
||||
Result:=DefaultConvertToDateTime(aValue,ARaiseException);
|
||||
Result:=DefaultConvertToDateTime(aField,aValue,ARaiseException);
|
||||
end;
|
||||
|
||||
class function TDataSet.DefaultConvertToDateTime(aValue: JSValue; ARaiseException: Boolean): TDateTime;
|
||||
class function TDataSet.DefaultConvertToDateTime(aField: TField; aValue: JSValue; ARaiseException: Boolean): TDateTime;
|
||||
begin
|
||||
Result:=0;
|
||||
if IsString(aValue) then
|
||||
@ -3884,13 +3884,13 @@ begin
|
||||
Result:=TDateTime(AValue)
|
||||
end;
|
||||
|
||||
function TDataSet.ConvertDateTimeToNative(aValue : TDateTime) : JSValue;
|
||||
function TDataSet.ConvertDateTimeToNative(aField: TField; aValue : TDateTime) : JSValue;
|
||||
|
||||
begin
|
||||
Result:=DefaultConvertDateTimeToNative(aValue);
|
||||
Result:=DefaultConvertDateTimeToNative(aField, aValue);
|
||||
end;
|
||||
|
||||
Class function TDataSet.DefaultConvertDateTimeToNative(aValue : TDateTime) : JSValue;
|
||||
Class function TDataSet.DefaultConvertDateTimeToNative(aField : TField;aValue : TDateTime) : JSValue;
|
||||
|
||||
begin
|
||||
Result:=DateTimeToRFC3339(aValue);
|
||||
@ -6735,18 +6735,20 @@ end;
|
||||
|
||||
function TDateTimeField.ConvertToDateTime(aValue: JSValue; aRaiseError: Boolean): TDateTime;
|
||||
begin
|
||||
if Assigned(Dataset) then
|
||||
Result:=Dataset.ConvertToDateTime(aValue,aRaiseError)
|
||||
if JS.isNull(aValue) then
|
||||
Result:=0
|
||||
else if Assigned(Dataset) then
|
||||
Result:=Dataset.ConvertToDateTime(Self,aValue,aRaiseError)
|
||||
else
|
||||
Result:=TDataset.DefaultConvertToDateTime(aValue,aRaiseError);
|
||||
Result:=TDataset.DefaultConvertToDateTime(Self,aValue,aRaiseError);
|
||||
end;
|
||||
|
||||
function TDateTimeField.DateTimeToNativeDateTime(aValue: TDateTime): JSValue;
|
||||
begin
|
||||
if Assigned(Dataset) then
|
||||
Result:=Dataset.ConvertDateTimeToNative(aValue)
|
||||
Result:=Dataset.ConvertDateTimeToNative(Self,aValue)
|
||||
else
|
||||
Result:=TDataset.DefaultConvertDateTimeToNative(aValue);
|
||||
Result:=TDataset.DefaultConvertDateTimeToNative(Self,aValue);
|
||||
end;
|
||||
|
||||
function TDateTimeField.GetAsDateTime: TDateTime;
|
||||
@ -7107,9 +7109,9 @@ Var
|
||||
begin
|
||||
V:=GetData;
|
||||
if Assigned(Dataset) then
|
||||
Result:=Dataset.ConvertToDateTime(V,True)
|
||||
Result:=Dataset.ConvertToDateTime(Self,V,True)
|
||||
else
|
||||
Result:=TDataset.DefaultConvertToDateTime(V,True)
|
||||
Result:=TDataset.DefaultConvertToDateTime(Self,V,True)
|
||||
end;
|
||||
|
||||
function TVariantField.GetAsFloat: Double;
|
||||
|
@ -282,6 +282,7 @@ type
|
||||
procedure SetRows(AValue: TJSArray);
|
||||
procedure SetRowType(AValue: TJSONRowType);
|
||||
protected
|
||||
function ConvertDateTimeToNative(aField : TField; aValue : TDateTime) : JSValue; override;
|
||||
// Determine filter value type based on field type
|
||||
function FieldTypeToExpressionType(aDataType: TFieldType): TResultType; virtual;
|
||||
// Callback for IsNull filter function.
|
||||
@ -643,7 +644,7 @@ var
|
||||
|
||||
begin
|
||||
D1:=Dataset.ConvertDateTimeField(String(GetFieldValue(Rowindex)),Self.Field);
|
||||
D2:=TDateTime(aValue);
|
||||
D2:=Dataset.ConvertDateTimeField(String(aValue),Self.Field);
|
||||
Result:=Round(D1-D2);
|
||||
end;
|
||||
|
||||
@ -1085,6 +1086,15 @@ begin
|
||||
FRowType:=AValue;
|
||||
end;
|
||||
|
||||
function TBaseJSONDataSet.ConvertDateTimeToNative(aField : TField; aValue: TDateTime): JSValue;
|
||||
begin
|
||||
if jsISNan(aValue) then
|
||||
Result:=Null
|
||||
else
|
||||
Result:=FormatDateTimeField(aValue,aField)
|
||||
|
||||
end;
|
||||
|
||||
|
||||
function TBaseJSONDataSet.AllocRecordBuffer: TDataRecord;
|
||||
begin
|
||||
@ -1174,7 +1184,7 @@ begin
|
||||
Result:=TFPExpressionParser;
|
||||
end;
|
||||
|
||||
function TBaseJSONDataSet.GetFilterIsNull(Const Args : TExprParameterArray) : TFPExpressionResult;
|
||||
function TBaseJSONDataSet.GetFilterIsNull(const Args: TExprParameterArray): TFPExpressionResult;
|
||||
|
||||
begin
|
||||
Result.ResultType:=rtBoolean;
|
||||
@ -1201,7 +1211,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TBaseJSONDataSet.GetFilterField(Const AName : String) : TFPExpressionResult;
|
||||
function TBaseJSONDataSet.GetFilterField(const AName: String): TFPExpressionResult;
|
||||
|
||||
Var
|
||||
F : TField;
|
||||
@ -1265,7 +1275,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TBaseJSONDataSet.GetRecord(Var Buffer: TDataRecord; GetMode: TGetMode; DoCheck: Boolean): TGetResult;
|
||||
function TBaseJSONDataSet.GetRecord(var Buffer: TDataRecord; GetMode: TGetMode; DoCheck: Boolean): TGetResult;
|
||||
|
||||
Var
|
||||
BkmIdx : Integer;
|
||||
@ -1689,7 +1699,7 @@ begin
|
||||
inherited;
|
||||
end;
|
||||
|
||||
Function TBaseJSONDataSet.CreateIndexDefs : TJSONIndexDefs;
|
||||
function TBaseJSONDataSet.CreateIndexDefs: TJSONIndexDefs;
|
||||
|
||||
begin
|
||||
Result:=TJSONIndexDefs.Create(Self,Self,TJSONIndexDef);
|
||||
@ -1722,7 +1732,10 @@ begin
|
||||
Result:=-1;
|
||||
Comp:=RecordComparerClass.Create(Self,KeyFields,KeyValues,Options);
|
||||
try
|
||||
I:=FCurrent;
|
||||
if loFromCurrent in Options then
|
||||
I:=FCurrent
|
||||
else
|
||||
I:=0;
|
||||
RI:=FCurrentIndex.GetRecordIndex(I);
|
||||
While (Result=-1) and (RI<>-1) do
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user