You are not logged in.
Pages: 1
R := TSQLRecord.Create([], 4294967296 + 1);
Client.Add(R, true, true);
R.FillPrepare(Client);
R.FillOne;
ShowMessage(Int64ToUtf8(R.ID));
Shows '1'!
Overflow occurred somewhere in the round-trip. TSQLRecordFill.Fill suspected.
Edit:
List of suspected assignments:
mORMot.pas (18361,12) PID := GetInteger(IDColumn[aP]) else
mORMot.pas (18362,12) PID := GetInteger(PPUTF8Char(PtrInt(aPP)-FieldIndexNextPtr)^);
mORMot.pas (18371,17) result := GetInteger(IDColumn[i])-PID else
mORMot.pas (18372,17) result := GetInteger(PPUTF8Char(PtrInt(CI)-FieldIndexNextPtr)^)-PID;
mORMot.pas (18381,17) result := GetInteger(IDColumn[J])-PID else
mORMot.pas (18382,17) result := GetInteger(PPUTF8Char(PtrInt(CJ)-FieldIndexNextPtr)^)-PID;
mORMot.pas (18568,18) result := GetInteger(IDColumn[A])-GetInteger(IDColumn[b]);
mORMot.pas (21898,22) Dest.ID := GetInteger(aTableRow[TableIndex]) else
mORMot.pas (21909,21) aDest.ID := GetInteger(aTableRow[TableIndex]) else
mORMot.pas (22281,14) fID := GetInteger(Value) else begin
mORMot.pas (32040,14) aID := GetInteger(U^);
mORMot.pas (34423,12) V := GetInteger(PropValue,err);
mORMot.pas (34518,14) V := GetInteger(PropValue,err);
mORMot.pas (35965,14) aID := GetInteger(pointer(fProcessRest.OneFieldValue(Table,'RowID',
Last edited by alpinistbg (2015-01-16 15:56:14)
Offline
I've done another pass of fixes for TID = Int64 support.
See http://synopse.info/fossil/info/ad3b484a43
Note that the V := GetInteger() when deserializing a TSQLRecord published property has not been changed, since the current implementation using PtrInt = NativeInt is OK.
See also http://synopse.info/fossil/info/533ccc611f which includes a regression test for Add+Retrieve of huge IDs.
Thanks for the feedback!
Online
Pages: 1