Selaa lähdekoodia

- 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 -

joost 20 vuotta sitten
vanhempi
commit
6318a55ca9

+ 14 - 62
fcl/db/dataset.inc

@@ -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;
+begin
+  Result := GetFieldData(Field, Buffer);
+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);
+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;

+ 2 - 2
fcl/db/db.pp

@@ -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;

+ 1 - 1
fcl/db/fields.inc

@@ -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;

+ 0 - 1
fcl/db/sqldb/mysql/mysql4conn.pas

@@ -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;

+ 0 - 1
fcl/db/sqldb/postgres/pqconnection.pp

@@ -381,7 +381,6 @@ var s : string;
     i : integer;
 
 begin
-  ObtainSQLStatementType(cursor,buf);
   with (cursor as TPQCursor) do
     begin
     FPrepared := False;

+ 3 - 56
fcl/db/sqldb/sqldb.pp

@@ -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