Bug 94777 - Base Reports to Multi-User (MariaDB) not locking to user
Summary: Base Reports to Multi-User (MariaDB) not locking to user
Status: CLOSED NOTOURBUG
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: Base (show other bugs)
Version:
(earliest affected)
4.2 all versions
Hardware: Other All
: medium normal
Assignee: Not Assigned
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-10-05 07:48 UTC by Andy Jordaan
Modified: 2016-06-13 08:44 UTC (History)
3 users (show)

See Also:
Crash report or crash signature:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andy Jordaan 2015-10-05 07:48:43 UTC
I am serving MYSQL on my Local but Remote Server to a number of terminals set up to connect a Libre Base front-end via JDBC

The server is a Ubuntu 14.04 asterisk box serving serving MYSQL to the asterisk that works well and I have only recently added the Database to serve the Libre Base. mysql which it does using the java JDBC

Each user can build their form document without any issues,

however,

It seems as if all sessions are merged when delivering reports, as in whoever has the lock , that's the report MYSQL serves, in other words user "A" gets user "B" reports if user "B" was the last to do something.

"SHOW PROCESSLIST;" indicates different thread-Id's for each user

The MYSQL started off as MyISAM then I converted to InnoDB

All users have their own copy of the Base on their terminal with their own user name

I have tried on a number of Macro's with the same results 

I created another test server,serving MariaDB with the same results

here are the macros I have used :

First Macro

Sub EVA_Report(event)
oButton = event.source.Model
sReportname = oButton.tag
oReport = ThisDatabaseDocument.ReportDocuments.GetByName(sReportName)
oReport.Open
end sub

Second Macro

Sub CreateReportCalledfromButton(oEvent as object)

    dim oCreateButton,oForm 
    dim oConnection,oReportsDocuments

    oCreateButton=oEvent.source.model
    oForm=oCreateButton.parent
    oConnection=oForm.Activeconnection
    oReportsDocuments=oConnection.parent.DatabaseDocument.ReportDocuments
    openReport(oConnection, oReportsDocuments, oCreateButton.tag , oForm.Filter)
         
End Sub

Function openReport(oConnection, oReportsDocuments,aReportName,sFilter) as object

Dim mPrintopts1() 

        
       dim aProp(3) as new com.sun.star.beans.PropertyValue
       dim aProp2
       dim oReportDesign
       aProp(1).Name = "ActiveConnection"
       aProp(1).Value = oConnection
       aProp(0).Name = "Hidden"
       aProp(0).Value = true   
       aProp(2).Name = "OpenMode"
       aProp(2).Value = "openDesign"
       let aProp2=aProp 
       oReportDesign=oReportsDocuments.loadComponentFromURL(aReportName ,"",0,aProp())
      
       aProp2(0).Value = TRUE
       aProp2(2).Value = "open"

oReportsDocuments.loadComponentFromURL(aReportName ,_blank,0,aProp2()).Print(mPrintopts1()) 

End Function
Comment 1 Alex Thurgood 2015-10-06 11:25:10 UTC
@Andy :
What are the privileges set in your JDBC driver ?
Which tables can each user see when they open the ODB file ?
Which version of the JDBC driver are you using ?

There are/were some known issues around JDBC driver privileges depending on LO version, and JDBC driver version, as I seem to recall.
Comment 2 Alex Thurgood 2015-10-06 11:26:45 UTC
@Andy : please test with more recent production versions of LibreOffice as well, so that we can have your feedback. LO42 is EOL (although unfortunately not necessarily from the distrib's point of view).
Comment 3 Andy Jordaan 2015-10-06 15:04:18 UTC
(In reply to Alex Thurgood from comment #2)
> @Andy : please test with more recent production versions of LibreOffice as
> well, so that we can have your feedback. LO42 is EOL (although unfortunately
> not necessarily from the distrib's point of view).

Hi Alex tested with :
LibreBase 5.0.1.2  I still get the same problem
LibreBase 5.0.2.2 I get Macro Problems (also I see that the Native MYSQL connection has been taken out)
Comment 4 Andy Jordaan 2015-10-06 15:20:39 UTC
(In reply to Alex Thurgood from comment #1)
> @Andy :
> What are the privileges set in your JDBC driver ?
> Which tables can each user see when they open the ODB file ?
> Which version of the JDBC driver are you using ?
> 
> There are/were some known issues around JDBC driver privileges depending on
> LO version, and JDBC driver version, as I seem to recall.

1. Hi Alex, I do not know where to set privileges for the JDBC driver, however each user has full rights to the Database.

2. The users can see the Full Database set to Tables should they go to the "Tables"section on the left

3. I have installed the lastest Oracle 1.8.0_60 java and I have pointed the class path to :/usr/share/java/mysql-connector-java-5.1.32.jar

(hope I haven't made a fool of myself here . . )
Comment 5 Alex Thurgood 2016-06-03 11:17:30 UTC
Thanks Andy.

Setting back to unconfirmed.
Comment 6 Alex Thurgood 2016-06-03 11:23:06 UTC
I'm afraid this is outside of my knowledge, so have reset to unconfirmed, added a few other base users on CC, hopefully they might be able to find time to look at your problem and give some advice.
Comment 7 Lionel Elie Mamane 2016-06-03 11:52:33 UTC
I don't understand the bug description. What do you mean:

  user "A" gets user "B" reports if user "B" was the last to do something.

If you mean the data shown by the reports, if they connect to the same database on the same server, well, yes, user A sees the changes to the data made by user B. This is by design of a multi-user database. This is not a bug.

If you mean that they each change the LibreOffice report *definitions*, but A sees changes (to report *definitions*) made by user B, then I'm very surprised, and I'd like to see detailed reproduction steps with odb and SQL dumps that you would attach here.
Comment 8 Robert Großkopf 2016-06-03 15:24:21 UTC
Could be the reporter will have a report, which is special for the user with the actual CONNECTION_ID(). Or should it be filtered by the USER()?

This isn't a Base-problem. This must be defined by the query, which defines the data for the report.
Comment 9 Alex Thurgood 2016-06-10 07:51:55 UTC
@Andy : could you try and answer Lionel's questions in comment 7 ?

Setting NEEDINFO
Comment 10 Andy Jordaan 2016-06-10 10:36:35 UTC
I am at fault here, I solved this issue a while ago and thought I published the solution wherever I requested help. (SORRY Community )

Here is a link to a detailed explanation : 
https://forum.openoffice.org/en/forum/viewtopic.php?f=13&t=79196
 the actual problem is the method used to filter the report, Villeroy's filter method of using a table that contains the last filter request is great , but not suited to multi-users. the every next user to use the table firstly removes the information you left in the table and the leaves his request in the table . hence if you pull your report a second time its pot luck as to what report you get.

The solution

Is to issue a SQL delete instruction in the macro to clear the Filter Table FIRST , THEN just let the Macro put the Documents filter value back in the Filter Table and pull reports as necessary.
I need to say here that this solution solved another problem I was having in the the Filter Table corrupted occasionally on simultaneous use and had multiple entry's in it that had to be cleared manually

The macro used is given in the link above with a much more detailed explanation

This solution is not elegant but it works