View Issue Details

IDProjectCategoryView StatusLast Update
0031532FPCDatabasepublic2018-05-08 17:39
ReporterFrank De prinsAssigned ToMichael Van Canneyt 
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
PlatformWindows 10 - 64 bitOSOS Version
Product VersionProduct Build 
Target Version3.2.0Fixed in Version3.1.1 
Summary0031532: Painting issue in DBGrid
DescriptionContents of DBGrid are painted incorrectly upon resizing
Steps To Reproduce- Run the attached application (the database file should be in the same folder as the executable)
- Resize the form by pulling down the bottom window edge
- Grid contents repaint OK
- Resize the form back to it's minimal height
- Now select another row than the first, originally selected one
- Make the form higher again by pulling down the bottom window edge
- Now the grid contents do not paint OK: the lower row(s) is/are painted multiple times.
Additional InformationCaused by FPC revision 26899.
TagsNo tags attached.
Fixed in Revision35618
FPCOldBugId
FPCTarget
Attached Files
  • DBGridIssue.7z (888,063 bytes)
  • 31532-bufdataset-1.patch (427 bytes)
    Index: bufdataset.pas
    ===================================================================
    --- bufdataset.pas	(revision 35595)
    +++ bufdataset.pas	(working copy)
    @@ -2877,10 +2877,7 @@
       else if (FBRecordCount = 0) or (State = dsInsert) then
         Result := 0
       else
    -    begin
    -    InternalSetToRecord(ActiveBuffer);
         Result := FCurrentIndex.RecNo;
    -    end;
     end;
     
     function TCustomBufDataset.IsCursorOpen: Boolean;
    
  • 31532-bufdataset-2.patch (4,264 bytes)
    Index: bufdataset.pas
    ===================================================================
    --- bufdataset.pas	(revision 35596)
    +++ bufdataset.pas	(working copy)
    @@ -125,6 +125,7 @@
         function GetIsInitialized: boolean; virtual; abstract;
         function GetSpareBuffer: TRecordBuffer; virtual; abstract;
         function GetSpareRecord: TRecordBuffer; virtual; abstract;
    +    function GetBookmarkRecNo(const ABuffer: PBufBookmark): Longint; virtual; abstract;
         function GetRecNo: Longint; virtual; abstract;
         procedure SetRecNo(ARecNo: Longint); virtual; abstract;
       public
    @@ -177,6 +178,7 @@
         procedure OrderCurrentRecord; virtual; abstract;
         procedure EndUpdate; virtual; abstract;
     
    +    property BookmarkRecNo[const ABuffer: PBufBookmark]: Longint read GetBookmarkRecNo;
         property SpareRecord : TRecordBuffer read GetSpareRecord;
         property SpareBuffer : TRecordBuffer read GetSpareBuffer;
         property CurrentRecord : TRecordBuffer read GetCurrentRecord;
    @@ -201,6 +203,7 @@
         function GetIsInitialized: boolean; override;
         function GetSpareBuffer: TRecordBuffer; override;
         function GetSpareRecord: TRecordBuffer; override;
    +    function GetBookmarkRecNo(const ABookmark: PBufBookmark): Longint; override;
         function GetRecNo: Longint; override;
         procedure SetRecNo(ARecNo: Longint); override;
       public
    @@ -254,6 +257,7 @@
         function GetIsInitialized: boolean; override;
         function GetSpareBuffer: TRecordBuffer; override;
         function GetSpareRecord: TRecordBuffer; override;
    +    function GetBookmarkRecNo(const ABookmark: PBufBookmark): Longint; override;
         function GetRecNo: Longint; override;
         procedure SetRecNo(ARecNo: Longint); override;
       public
    @@ -305,6 +309,7 @@
         function GetIsInitialized: boolean; override;
         function GetSpareBuffer: TRecordBuffer; override;
         function GetSpareRecord: TRecordBuffer; override;
    +    function GetBookmarkRecNo(const ABookmark: PBufBookmark): Longint; override;
         function GetRecNo: Longint; override;
         procedure SetRecNo(ARecNo: Longint); override;
       public
    @@ -1501,6 +1506,19 @@
       Result:=sizeof(TBufBookmark);
     end;
     
    +function TDoubleLinkedBufIndex.GetBookmarkRecNo(
    +  const ABookmark: PBufBookmark): Longint;
    +var ARecord : PBufRecLinkItem;
    +begin
    +  ARecord := ABookmark^.BookmarkData;
    +  Result := 1;
    +  while ARecord <> FFirstRecBuf do
    +    begin
    +    inc(Result);
    +    ARecord := ARecord[IndNr].prior;
    +    end;
    +end;
    +
     function TDoubleLinkedBufIndex.GetCurrentBuffer: Pointer;
     begin
       Result := pointer(FCurrentRecBuf) + FDataset.BufferOffset;
    @@ -1713,15 +1731,10 @@
     end;
     
     function TDoubleLinkedBufIndex.GetRecNo: Longint;
    -var ARecord : PBufRecLinkItem;
    +var ABookmark: TBufBookmark;
     begin
    -  ARecord := FCurrentRecBuf;
    -  Result := 1;
    -  while ARecord <> FFirstRecBuf do
    -    begin
    -    inc(Result);
    -    ARecord := ARecord[IndNr].prior;
    -    end;
    +  ABookmark.BookmarkData := FCurrentRecBuf;
    +  Result := GetBookmarkRecNo(@ABookmark);
     end;
     
     procedure TDoubleLinkedBufIndex.SetRecNo(ARecNo: Longint);
    @@ -2877,10 +2890,7 @@
       else if (FBRecordCount = 0) or (State = dsInsert) then
         Result := 0
       else
    -    begin
    -    InternalSetToRecord(ActiveBuffer);
    -    Result := FCurrentIndex.RecNo;
    -    end;
    +    Result := FCurrentIndex.BookmarkRecNo[PBufBookmark(ActiveBuffer+FRecordSize)];
     end;
     
     function TCustomBufDataset.IsCursorOpen: Boolean;
    @@ -3612,6 +3622,12 @@
       Result:=Sizeof(TBufBookmark);
     end;
     
    +function TArrayBufIndex.GetBookmarkRecNo(
    +  const ABookmark: PBufBookmark): Longint;
    +begin
    +  FCurrentRecInd:=GetRecordFromBookmark(ABookmark^)+1;
    +end;
    +
     function TArrayBufIndex.GetCurrentBuffer: Pointer;
     begin
       Result:=TRecordBuffer(FRecordArray[FCurrentRecInd]);
    @@ -3802,7 +3818,7 @@
       SetLength(FRecordArray,FInitialBuffers);
     end;
     
    -function TArrayBufIndex.GetRecNo: integer;
    +function TArrayBufIndex.GetRecNo: Longint;
     begin
       Result := FCurrentRecInd+1;
     end;
    @@ -4120,6 +4136,12 @@
       Result:=sizeof(TBufBookmark);
     end;
     
    +function TUniDirectionalBufIndex.GetBookmarkRecNo(
    +  const ABookmark: PBufBookmark): Longint;
    +begin
    +  DatabaseError(SUniDirectional);
    +end;
    +
     function TUniDirectionalBufIndex.GetCurrentBuffer: Pointer;
     begin
       result := FSPareBuffer;
    
    31532-bufdataset-2.patch (4,264 bytes)
  • bug31532.lpr (2,195 bytes)
  • bug31532-try1.patch (364 bytes)
    Index: src/base/bufdataset.pas
    ===================================================================
    --- src/base/bufdataset.pas	(revision 35611)
    +++ src/base/bufdataset.pas	(working copy)
    @@ -2878,7 +2878,7 @@
         Result := 0
       else
         begin
    -    InternalSetToRecord(ActiveBuffer);
    +    UpdateCursorPos;
         Result := FCurrentIndex.RecNo;
         end;
     end;
    
    bug31532-try1.patch (364 bytes)

Relationships

has duplicate 0031530 resolvedMichael Van Canneyt FPC Painting issue in DBGrid 
related to 0031375 closedOndrej Pokorny Lazarus TDBGrid shows some rows repeated with TSQLQuery 

Activities

Frank De prins

2017-03-13 11:32

reporter  

DBGridIssue.7z (888,063 bytes)

Ondrej Pokorny

2017-03-13 11:58

developer   ~0098872

Confirmed. It's a regression. Lazarus 1.4.4 works fine whereas 1.6.0 and current trunk don't.

Bart Broersma

2017-03-13 12:24

reporter   ~0098874

I asked for the duplicate issue on fpc to be resolvedd and closed.

Ondrej Pokorny

2017-03-13 12:28

developer   ~0098877

Lazarus trunk + FPC trunk: BUG
Lazarus trunk + FPC 3.0.0: BUG
Lazarus trunk + FPC 2.6.4: works fine

-> The bug happened when switching from FPC 2.6 to 3.0.

So it's an FPC bug or Lazarus sources have to be fixed for FPC 3.0.0 changes.

Thaddy de Koning

2017-03-15 16:30

reporter   ~0098923

Last edited: 2017-03-15 16:33

View 4 revisions

Ondrej, bugs in visual components should always be entered against Lazarus and never in FPC. FPC does not HAVE visual controls. As a consequence, FPC maintainers will also not be able to fix it (officially). That task is for Lazarus maintainers.

But if you know of an underlying issue that leads you to FPC, without any Lazarus code, produce a non-visual demo in pure FPC that reproduces the problem, if any.
Such a bug report belongs in FPC if that is the case.

Ondrej Pokorny

2017-03-15 16:44

developer   ~0098924

Yes, Thaddy, please help us and produce a non-visual demo in pure FPC to reproduce the problem so that it can be solved.

Ondrej Pokorny

2017-03-15 17:42

developer   ~0098928

The bug was caused by FPC r26899.

Ondrej Pokorny

2017-03-15 18:06

developer  

31532-bufdataset-1.patch (427 bytes)
Index: bufdataset.pas
===================================================================
--- bufdataset.pas	(revision 35595)
+++ bufdataset.pas	(working copy)
@@ -2877,10 +2877,7 @@
   else if (FBRecordCount = 0) or (State = dsInsert) then
     Result := 0
   else
-    begin
-    InternalSetToRecord(ActiveBuffer);
     Result := FCurrentIndex.RecNo;
-    end;
 end;
 
 function TCustomBufDataset.IsCursorOpen: Boolean;

Ondrej Pokorny

2017-03-15 18:09

developer   ~0098929

Last edited: 2017-03-15 18:10

View 2 revisions

The attached patch solves the issue. The problem is that RecNo getter function changes the current index bookmark - IMO without any reason (why should a property getter change the state of the component?).

Michael Van Canneyt

2017-03-15 18:42

administrator   ~0098931

I am assuming there was a reason for the call to InternalSetToRecord,
so I will first ask why it was there to begin with. But in general you are right that a getter should not change the state of the component.

Michael Van Canneyt

2017-03-17 09:22

administrator   ~0098957

Removing the call to InternalSetToRecord causes regressions in the testsuite.
So the patch cannot be applied as-is.

In order to investigate further, is it possible to provide an example that demonstrates the issue without LCL dependencies ?

Ondrej Pokorny

2017-03-17 10:56

developer   ~0098959

Last edited: 2017-03-17 10:58

View 2 revisions

The situation is quite funny. Before r26899 the testsuite obviously didn't include a test for the former behavior and so r26899 could change the behavior without introducing a regression formally (although the LCL depends on it).
Subsequently a test was added, which now means that changing the behavior back to pre-r26899 is a regression. (No offense what so ever.)

> In order to investigate further, is it possible to provide an example that demonstrates the issue without LCL dependencies ?

Well the issue is quite clear. The DBGrid depends on the fact that GetRecNo doesn't change the current bookmark. Pseudo-code:

var
  xBookMark1, xBookMark2: TBufBookmark;
begin
  TCustomBufDataset(MyDataSet).FCurrentIndex.StoreCurrentRecIntoBookmark(@xBookMark1);
  MyPos := MyDataSet.RecNo; // read RecNo
  TCustomBufDataset(MyDataSet).FCurrentIndex.StoreCurrentRecIntoBookmark(@xBookMark2);
  if CompareBufBookmarks(xBookMark1, xBookMark2)<>0 then
    raise Exception.Create('error');
end;

Nevertheless, I assume the LCL needs a workaround anyway having in mind long FPC release cycles and the fact that 3.0.2 was released recently. I tried to fix it on LCL-level but it's impossible without changing the FPC code because the needed properties and calls are in private section. This code works for me (see TCustomDBGrid.GetScrollbarParams):

type
  TMyCustomBufDataset = class(TCustomBufDataset);
var
  xBookMark: TBufBookmark;
begin
  // [...]
  if FDataLink.DataSet is TCustomBufDataset then // store bookmark
    TMyCustomBufDataset(FDataLink.DataSet).FCurrentIndex.StoreCurrentRecIntoBookmark(@xBookMark);
  aPos := FDataLink.DataSet.RecNo - 1; // get RecNo is 1 based - it changes the current bookmark
  if FDataLink.DataSet is TCustomBufDataset then // restore bookmark
    TMyCustomBufDataset(FDataLink.DataSet).InternalGotoBookmark(@xBookMark);
  // [...]
end;

But as I said before it's not possible to make it compile without changing FPC sources. I cannot use public functions like GetBookmark/GotoBookmark because they call various extra methods.

=> r26899 changed the behavior without even the possibility to get the old behavior back.

Michael Van Canneyt

2017-03-17 11:12

administrator   ~0098960

Ondrej, I will investigate further.

I didn't ask which test failed and whether this test existed before r26899 or after r26899. I will do so.

Michael Van Canneyt

2017-03-17 11:20

administrator   ~0098962

Further investigation reveals that TestBug6893 fails.
This test was introduced long before r26899, in rev 19916.
So r26899 did not change the test behaviour, the implementation preserved it.

That it changed other behaviour (bookmark changing) is indeed not good, and we'll have to test that.

Ondrej Pokorny

2017-03-17 12:18

developer   ~0098965

Thanks for the info! It looks more complicated then I assumed. Yes, we need to simulate the call sequence from the DB grid and create a test case.

Ondrej Pokorny

2017-03-17 13:54

developer  

31532-bufdataset-2.patch (4,264 bytes)
Index: bufdataset.pas
===================================================================
--- bufdataset.pas	(revision 35596)
+++ bufdataset.pas	(working copy)
@@ -125,6 +125,7 @@
     function GetIsInitialized: boolean; virtual; abstract;
     function GetSpareBuffer: TRecordBuffer; virtual; abstract;
     function GetSpareRecord: TRecordBuffer; virtual; abstract;
+    function GetBookmarkRecNo(const ABuffer: PBufBookmark): Longint; virtual; abstract;
     function GetRecNo: Longint; virtual; abstract;
     procedure SetRecNo(ARecNo: Longint); virtual; abstract;
   public
@@ -177,6 +178,7 @@
     procedure OrderCurrentRecord; virtual; abstract;
     procedure EndUpdate; virtual; abstract;
 
+    property BookmarkRecNo[const ABuffer: PBufBookmark]: Longint read GetBookmarkRecNo;
     property SpareRecord : TRecordBuffer read GetSpareRecord;
     property SpareBuffer : TRecordBuffer read GetSpareBuffer;
     property CurrentRecord : TRecordBuffer read GetCurrentRecord;
@@ -201,6 +203,7 @@
     function GetIsInitialized: boolean; override;
     function GetSpareBuffer: TRecordBuffer; override;
     function GetSpareRecord: TRecordBuffer; override;
+    function GetBookmarkRecNo(const ABookmark: PBufBookmark): Longint; override;
     function GetRecNo: Longint; override;
     procedure SetRecNo(ARecNo: Longint); override;
   public
@@ -254,6 +257,7 @@
     function GetIsInitialized: boolean; override;
     function GetSpareBuffer: TRecordBuffer; override;
     function GetSpareRecord: TRecordBuffer; override;
+    function GetBookmarkRecNo(const ABookmark: PBufBookmark): Longint; override;
     function GetRecNo: Longint; override;
     procedure SetRecNo(ARecNo: Longint); override;
   public
@@ -305,6 +309,7 @@
     function GetIsInitialized: boolean; override;
     function GetSpareBuffer: TRecordBuffer; override;
     function GetSpareRecord: TRecordBuffer; override;
+    function GetBookmarkRecNo(const ABookmark: PBufBookmark): Longint; override;
     function GetRecNo: Longint; override;
     procedure SetRecNo(ARecNo: Longint); override;
   public
@@ -1501,6 +1506,19 @@
   Result:=sizeof(TBufBookmark);
 end;
 
+function TDoubleLinkedBufIndex.GetBookmarkRecNo(
+  const ABookmark: PBufBookmark): Longint;
+var ARecord : PBufRecLinkItem;
+begin
+  ARecord := ABookmark^.BookmarkData;
+  Result := 1;
+  while ARecord <> FFirstRecBuf do
+    begin
+    inc(Result);
+    ARecord := ARecord[IndNr].prior;
+    end;
+end;
+
 function TDoubleLinkedBufIndex.GetCurrentBuffer: Pointer;
 begin
   Result := pointer(FCurrentRecBuf) + FDataset.BufferOffset;
@@ -1713,15 +1731,10 @@
 end;
 
 function TDoubleLinkedBufIndex.GetRecNo: Longint;
-var ARecord : PBufRecLinkItem;
+var ABookmark: TBufBookmark;
 begin
-  ARecord := FCurrentRecBuf;
-  Result := 1;
-  while ARecord <> FFirstRecBuf do
-    begin
-    inc(Result);
-    ARecord := ARecord[IndNr].prior;
-    end;
+  ABookmark.BookmarkData := FCurrentRecBuf;
+  Result := GetBookmarkRecNo(@ABookmark);
 end;
 
 procedure TDoubleLinkedBufIndex.SetRecNo(ARecNo: Longint);
@@ -2877,10 +2890,7 @@
   else if (FBRecordCount = 0) or (State = dsInsert) then
     Result := 0
   else
-    begin
-    InternalSetToRecord(ActiveBuffer);
-    Result := FCurrentIndex.RecNo;
-    end;
+    Result := FCurrentIndex.BookmarkRecNo[PBufBookmark(ActiveBuffer+FRecordSize)];
 end;
 
 function TCustomBufDataset.IsCursorOpen: Boolean;
@@ -3612,6 +3622,12 @@
   Result:=Sizeof(TBufBookmark);
 end;
 
+function TArrayBufIndex.GetBookmarkRecNo(
+  const ABookmark: PBufBookmark): Longint;
+begin
+  FCurrentRecInd:=GetRecordFromBookmark(ABookmark^)+1;
+end;
+
 function TArrayBufIndex.GetCurrentBuffer: Pointer;
 begin
   Result:=TRecordBuffer(FRecordArray[FCurrentRecInd]);
@@ -3802,7 +3818,7 @@
   SetLength(FRecordArray,FInitialBuffers);
 end;
 
-function TArrayBufIndex.GetRecNo: integer;
+function TArrayBufIndex.GetRecNo: Longint;
 begin
   Result := FCurrentRecInd+1;
 end;
@@ -4120,6 +4136,12 @@
   Result:=sizeof(TBufBookmark);
 end;
 
+function TUniDirectionalBufIndex.GetBookmarkRecNo(
+  const ABookmark: PBufBookmark): Longint;
+begin
+  DatabaseError(SUniDirectional);
+end;
+
 function TUniDirectionalBufIndex.GetCurrentBuffer: Pointer;
 begin
   result := FSPareBuffer;
31532-bufdataset-2.patch (4,264 bytes)

Ondrej Pokorny

2017-03-17 14:06

developer   ~0098966

Michael, I was indeed wrong. The first patch was wrong because it retrieved the current index RecNo instead of retrieving the ActiveRecord RecNo. I fixed it in 31532-bufdataset-2.patch. Now the pre-r26899 and post-r26899 behavior are the same. I'll try to simulate the issue and create a test case for the regression so that it doesn't happen anymore.

As I see it's essential to have a good test suite - without TestBug6893 the 1.patch would break existing code if applied. Unfortunately a test case for this regression isn't yet implemented.

Michael Van Canneyt

2017-03-17 15:05

administrator   ~0098969

@Ondrej, I looked at your patch. I can see it does not change the state of the component. However, it is an invasive patch, so I think one (or more) test(s) are in order before committing this patch, to avoid regressions in the future.

As soon as you provide a test, I will add it and apply the patch .

Ondrej Pokorny

2017-03-17 16:00

developer  

bug31532.lpr (2,195 bytes)

Ondrej Pokorny

2017-03-17 16:03

developer   ~0098970

Here you go: bug31532.lpr. Use the DB file from DBGridIssue.7z.
For UseRecNo=False the tests are OK, for UseRecNo=True the tests fail.

The problem is that calling RecNo after setting BufferCount corrupts the buffers.

Ondrej Pokorny

2017-03-17 16:18

developer   ~0098971

[The problem is that calling RecNo after setting BufferCount corrupts the buffers], which brings me to the idea that maybe the issue has to be solved with a different approach.

Other methods calling "InternalSetToRecord(ActiveBuffer)" (InternalDelete, InternalPost) may be affected as well. (I didn't test.)

But this is a job for fcl-db maintainers since the fcl-only test code was delivered...

LacaK

2017-03-17 21:31

developer  

bug31532-try1.patch (364 bytes)
Index: src/base/bufdataset.pas
===================================================================
--- src/base/bufdataset.pas	(revision 35611)
+++ src/base/bufdataset.pas	(working copy)
@@ -2878,7 +2878,7 @@
     Result := 0
   else
     begin
-    InternalSetToRecord(ActiveBuffer);
+    UpdateCursorPos;
     Result := FCurrentIndex.RecNo;
     end;
 end;
bug31532-try1.patch (364 bytes)

LacaK

2017-03-17 21:32

developer   ~0098984

Can you test "bug31532-try1.patch"

Ondrej Pokorny

2017-03-17 22:12

developer   ~0098987

bug31532-try1.patch cannot be used because it changes the current record, which must not happen (OK, bug31532.lpr doesn't include this condition, but if you try the original LCL project you'll see it).

LacaK

2017-03-18 12:40

developer   ~0099008

I cannot reproduce bug with LCL project (FPC 3.0.2 and Lazarus 1.6.4)
Can you please adjust test program to include another test which will fail?

Ondrej Pokorny

2017-03-18 13:12

developer   ~0099010

>> I cannot reproduce bug with LCL project (FPC 3.0.2 and Lazarus 1.6.4)

Do you mean with bug31532-try1.patch or without bug31532-try1.patch?

LacaK

2017-03-18 13:42

developer   ~0099012

Firstly I have mean both, but later I was able to reproduce WITHOUT patch. With patch I can not reporoduce now ...

Ondrej Pokorny

2017-03-18 13:56

developer   ~0099013

The problem with your patch is that the last row is selected automatically.

Ondrej Pokorny

2017-03-18 14:35

developer   ~0099014

@LacaK: sorry, I was wrong. I forgot one test line in LCL code that caused this.

Your patch is OK! Furthermore, if I call UpdateCursorPos from LCL DBGrid, the bug is fixed as well. Thank you!

Michael Van Canneyt

2017-03-18 15:16

administrator   ~0099016

Applied Laco's patch.

The test program is unfortunately useless for the test suite, it uses a custom database :/

Please test and close if OK.

Issue History

Date Modified Username Field Change
2017-03-13 11:32 Frank De prins New Issue
2017-03-13 11:32 Frank De prins File Added: DBGridIssue.7z
2017-03-13 11:58 Ondrej Pokorny LazTarget => -
2017-03-13 11:58 Ondrej Pokorny Note Added: 0098872
2017-03-13 11:58 Ondrej Pokorny Status new => confirmed
2017-03-13 12:23 Bart Broersma Relationship added has duplicate 0031530
2017-03-13 12:24 Bart Broersma Note Added: 0098874
2017-03-13 12:28 Ondrej Pokorny Note Added: 0098877
2017-03-15 15:51 Ondrej Pokorny Summary Painting issue in DBGrid (was mistakingly posted under FPC project already) => Painting issue in DBGrid
2017-03-15 16:30 Thaddy de Koning Note Added: 0098923
2017-03-15 16:31 Thaddy de Koning Note Edited: 0098923 View Revisions
2017-03-15 16:32 Thaddy de Koning Note Edited: 0098923 View Revisions
2017-03-15 16:33 Thaddy de Koning Note Edited: 0098923 View Revisions
2017-03-15 16:44 Ondrej Pokorny Note Added: 0098924
2017-03-15 17:38 Ondrej Pokorny Additional Information Updated View Revisions
2017-03-15 17:38 Ondrej Pokorny Project Lazarus => FPC
2017-03-15 17:42 Ondrej Pokorny Note Added: 0098928
2017-03-15 18:06 Ondrej Pokorny File Added: 31532-bufdataset-1.patch
2017-03-15 18:09 Ondrej Pokorny Note Added: 0098929
2017-03-15 18:10 Ondrej Pokorny Note Edited: 0098929 View Revisions
2017-03-15 18:39 Michael Van Canneyt Assigned To => Michael Van Canneyt
2017-03-15 18:39 Michael Van Canneyt Status confirmed => assigned
2017-03-15 18:42 Michael Van Canneyt Note Added: 0098931
2017-03-15 18:48 Michael Van Canneyt Category LCL => Database Components
2017-03-15 18:48 Michael Van Canneyt Product Version 1.6.4 =>
2017-03-17 09:22 Michael Van Canneyt Note Added: 0098957
2017-03-17 09:22 Michael Van Canneyt Status assigned => feedback
2017-03-17 10:56 Ondrej Pokorny Note Added: 0098959
2017-03-17 10:58 Ondrej Pokorny Note Edited: 0098959 View Revisions
2017-03-17 11:12 Michael Van Canneyt Note Added: 0098960
2017-03-17 11:20 Michael Van Canneyt Note Added: 0098962
2017-03-17 12:18 Ondrej Pokorny Note Added: 0098965
2017-03-17 13:54 Ondrej Pokorny File Added: 31532-bufdataset-2.patch
2017-03-17 14:06 Ondrej Pokorny Note Added: 0098966
2017-03-17 15:05 Michael Van Canneyt Note Added: 0098969
2017-03-17 16:00 Ondrej Pokorny File Added: bug31532.lpr
2017-03-17 16:03 Ondrej Pokorny Note Added: 0098970
2017-03-17 16:18 Ondrej Pokorny Note Added: 0098971
2017-03-17 21:31 LacaK File Added: bug31532-try1.patch
2017-03-17 21:32 LacaK Note Added: 0098984
2017-03-17 22:12 Ondrej Pokorny Note Added: 0098987
2017-03-18 12:40 LacaK Note Added: 0099008
2017-03-18 13:12 Ondrej Pokorny Note Added: 0099010
2017-03-18 13:42 LacaK Note Added: 0099012
2017-03-18 13:56 Ondrej Pokorny Note Added: 0099013
2017-03-18 14:35 Ondrej Pokorny Note Added: 0099014
2017-03-18 15:16 Michael Van Canneyt Fixed in Revision => 35618
2017-03-18 15:16 Michael Van Canneyt Note Added: 0099016
2017-03-18 15:16 Michael Van Canneyt Status feedback => resolved
2017-03-18 15:16 Michael Van Canneyt Fixed in Version => 3.1.1
2017-03-18 15:16 Michael Van Canneyt Resolution open => fixed
2017-03-18 15:16 Michael Van Canneyt Target Version => 3.2.0
2017-03-29 22:29 Michl Relationship added related to 0031375