mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 19:39:20 +02:00
- Fixed date/time formats for sqldb and tdbf
- removed obsolete TSQLConnection.ObtainSQLStatementType - added check for empty sql-statements to sqldb git-svn-id: trunk@803 -
This commit is contained in:
parent
801428838f
commit
6318a55ca9
@ -489,78 +489,30 @@ begin
|
||||
Result:=nil;
|
||||
end;
|
||||
|
||||
function TDataSet.GetFieldData(Field: TField; Buffer: Pointer): Boolean;
|
||||
|
||||
begin
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
function TDataSet.GetFieldData(Field: TField; Buffer: Pointer;
|
||||
NativeFormat: Boolean): Boolean;
|
||||
|
||||
function ConvertData(Field: TField; Source: TDateTimeRec): TDateTime;
|
||||
var
|
||||
TimeStamp: TTimeStamp;
|
||||
begin
|
||||
case Field.DataType of
|
||||
ftDate:
|
||||
begin
|
||||
TimeStamp.Time := 0;
|
||||
TimeStamp.Date := Source.Date;
|
||||
end;
|
||||
ftTime:
|
||||
begin
|
||||
TimeStamp.Time := Source.Time;
|
||||
TimeStamp.Date := DateDelta;
|
||||
end;
|
||||
else
|
||||
try
|
||||
TimeStamp := MSecsToTimeStamp(Trunc(Source.DateTime));
|
||||
except
|
||||
TimeStamp.Time := 0;
|
||||
TimeStamp.Date := 0;
|
||||
end;
|
||||
end;
|
||||
// Result := TimeStampToDateTime(TimeStamp);
|
||||
Result := (TimeStamp.Date - DateDelta) + (TimeStamp.Time / MSecsPerDay);
|
||||
end;
|
||||
|
||||
var
|
||||
d: TDateTimeRec;
|
||||
begin
|
||||
if NativeFormat then
|
||||
Result := GetFieldData(Field, Buffer) else
|
||||
if Field.DataType in [ ftDate, ftDateTime, ftTime ] then begin
|
||||
Result := GetFieldData(Field, @d);
|
||||
if Result then
|
||||
TDateTime(Buffer^) := ConvertData(Field, d);
|
||||
end else
|
||||
Result := GetFieldData(Field, Buffer);
|
||||
Result := GetFieldData(Field, Buffer);
|
||||
end;
|
||||
|
||||
procedure TDataSet.SetFieldData(Field: TField; Buffer: Pointer);
|
||||
|
||||
begin
|
||||
// empty procedure
|
||||
end;
|
||||
|
||||
procedure TDataSet.SetFieldData(Field: TField; Buffer: Pointer;
|
||||
NativeFormat: Boolean);
|
||||
|
||||
function ConvertData(Field: TField; Data: TDateTime): TDateTimeRec;
|
||||
var
|
||||
TimeStamp: TTimeStamp;
|
||||
begin
|
||||
TimeStamp.Time := Trunc(Frac(Data) * MSecsPerDay);
|
||||
TimeStamp.Date := DateDelta + Trunc(System.Int(Data));
|
||||
// TimeStamp := DateTimeToTimeStamp(Data);
|
||||
case Field.DataType of
|
||||
ftDate: Result.Date := TimeStamp.Date;
|
||||
ftTime: Result.Time := TimeStamp.Time;
|
||||
else
|
||||
Result.DateTime := TimeStampToMSecs(TimeStamp);
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
d: TDateTimeRec;
|
||||
begin
|
||||
if NativeFormat then
|
||||
SetFieldData(Field, Buffer)
|
||||
else
|
||||
if Field.DataType in [ ftDate, ftDateTime, ftTime ] then begin
|
||||
d := ConvertData(Field, TDateTime(Buffer^));
|
||||
SetFieldData(Field, @d);
|
||||
end else
|
||||
SetFieldData(Field, Buffer);
|
||||
SetFieldData(Field, Buffer);
|
||||
end;
|
||||
|
||||
Function TDataset.GetField (Index : Longint) : TField;
|
||||
|
@ -1062,7 +1062,7 @@ type
|
||||
procedure GetBookmarkData(Buffer: PChar; Data: Pointer); virtual; abstract;
|
||||
function GetBookmarkFlag(Buffer: PChar): TBookmarkFlag; virtual; abstract;
|
||||
function GetDataSource: TDataSource; virtual;
|
||||
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; overload; virtual; abstract;
|
||||
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; overload; virtual;
|
||||
function GetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean): Boolean; overload; virtual;
|
||||
function GetRecord(Buffer: PChar; GetMode: TGetMode; DoCheck: Boolean): TGetResult; virtual; abstract;
|
||||
function GetRecordSize: Word; virtual; abstract;
|
||||
@ -1081,7 +1081,7 @@ type
|
||||
function IsCursorOpen: Boolean; virtual; abstract;
|
||||
procedure SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag); virtual; abstract;
|
||||
procedure SetBookmarkData(Buffer: PChar; Data: Pointer); virtual; abstract;
|
||||
procedure SetFieldData(Field: TField; Buffer: Pointer); overload; virtual; abstract;
|
||||
procedure SetFieldData(Field: TField; Buffer: Pointer); overload; virtual;
|
||||
procedure SetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean); overload; virtual;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
|
@ -558,7 +558,7 @@ begin
|
||||
Move (FValueBuffer^,Buffer^ ,DataSize);
|
||||
end
|
||||
else
|
||||
Result:=FDataset.GetFieldData(Self,Buffer,False);
|
||||
Result:=FDataset.GetFieldData(Self,Buffer);
|
||||
end;
|
||||
|
||||
function TField.GetDataSize: Word;
|
||||
|
@ -243,7 +243,6 @@ procedure TMySQLConnection.PrepareStatement(cursor: TSQLCursor;
|
||||
begin
|
||||
if assigned(AParams) and (AParams.count > 0) then
|
||||
DatabaseError('Parameters (not) yet supported for the MySQL SqlDB connection.',self);
|
||||
ObtainSQLStatementType(cursor,buf);
|
||||
With Cursor as TMysqlCursor do
|
||||
begin
|
||||
FStatement:=Buf;
|
||||
|
@ -381,7 +381,6 @@ var s : string;
|
||||
i : integer;
|
||||
|
||||
begin
|
||||
ObtainSQLStatementType(cursor,buf);
|
||||
with (cursor as TPQCursor) do
|
||||
begin
|
||||
FPrepared := False;
|
||||
|
@ -97,7 +97,6 @@ type
|
||||
procedure UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string); virtual;
|
||||
function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; virtual;
|
||||
function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; virtual;abstract;
|
||||
Procedure ObtainSQLStatementType(Cursor : TSQLCursor; SQLStr : string);
|
||||
public
|
||||
property Handle: Pointer read GetHandle;
|
||||
destructor Destroy; override;
|
||||
@ -198,7 +197,6 @@ type
|
||||
function GetCanModify: Boolean; override;
|
||||
function ApplyRecUpdate(UpdateKind : TUpdateKind) : boolean; override;
|
||||
Function IsPrepared : Boolean; virtual;
|
||||
procedure SetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean); overload; override;
|
||||
procedure SetFiltered(Value: Boolean); override;
|
||||
public
|
||||
procedure Prepare; virtual;
|
||||
@ -314,54 +312,6 @@ begin
|
||||
end; {case}
|
||||
end;
|
||||
|
||||
Procedure TSQLConnection.ObtainSQLStatementType(Cursor : TSQLCursor; SQLStr : string);
|
||||
|
||||
Var
|
||||
L : Integer;
|
||||
cmt : boolean;
|
||||
P,PE,PP : PChar;
|
||||
S : string;
|
||||
|
||||
begin
|
||||
L := Length(SQLstr);
|
||||
|
||||
if L=0 then
|
||||
begin
|
||||
DatabaseError(SErrNoStatement);
|
||||
exit;
|
||||
end;
|
||||
|
||||
P:=Pchar(SQLstr);
|
||||
PP:=P;
|
||||
Cmt:=False;
|
||||
While ((P-PP)<L) do
|
||||
begin
|
||||
if not (P^ in [' ',#13,#10,#9]) then
|
||||
begin
|
||||
if not Cmt then
|
||||
begin
|
||||
// Check for comment.
|
||||
Cmt:=(P^='/') and (((P-PP)<=L) and (P[1]='*'));
|
||||
if not (cmt) then
|
||||
Break;
|
||||
end
|
||||
else
|
||||
begin
|
||||
// Check for end of comment.
|
||||
Cmt:=Not( (P^='*') and (((P-PP)<=L) and (P[1]='/')) );
|
||||
If not cmt then
|
||||
Inc(p);
|
||||
end;
|
||||
end;
|
||||
inc(P);
|
||||
end;
|
||||
PE:=P+1;
|
||||
While ((PE-PP)<L) and (PE^ in ['0'..'9','a'..'z','A'..'Z','_']) do
|
||||
Inc(PE);
|
||||
Setlength(S,PE-P);
|
||||
Move(P^,S[1],(PE-P));
|
||||
Cursor.FStatementType := StrToStatementType(s);
|
||||
end;
|
||||
|
||||
function TSQLConnection.GetSchemaInfoSQL( SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string;
|
||||
|
||||
@ -529,12 +479,6 @@ begin
|
||||
Result := Assigned(FCursor) and FCursor.FPrepared;
|
||||
end;
|
||||
|
||||
procedure TSQLQuery.SetFieldData(Field: TField; Buffer: Pointer;
|
||||
NativeFormat: Boolean);
|
||||
begin
|
||||
SetFieldData(Field, Buffer);
|
||||
end;
|
||||
|
||||
Function TSQLQuery.AddFilter(SQLstr : string) : string;
|
||||
|
||||
begin
|
||||
@ -595,6 +539,9 @@ begin
|
||||
|
||||
FSQLBuf := TrimRight(FSQL.Text);
|
||||
|
||||
if FSQLBuf = '' then
|
||||
DatabaseError(SErrNoStatement);
|
||||
|
||||
SQLParser(FSQLBuf);
|
||||
|
||||
if filtered then
|
||||
|
Loading…
Reference in New Issue
Block a user