Go to file
Pedro Amorim 4593ad7751 Bug 37389: ExtendedAttributes mixin
This is what we're doing here:

- Creating a new mixin called ExtendedAttributes.pm
- Moving the extended_attributes 'join' logic out of REST/Plugin/Query and instead applying it to the aforementioned Mixin. Moving this to this level allows for this consistent behavior to happen on all search queries including, but not limited to, search queries happening on the REST API.
- Applying this Mixin to Patrons and ILL::Requests (we don't apply it to AdditionalFields.pm here yet because no AdditionalFields supporting classes have the extended_attributes accessor yet, I'll tackle this when rebasing 35287)

- The aforementioned mixin does the following:
-- Generates dynamic accessors for extended_attributes e.g. if there is a borrower attribute with code 'height', the 'extended_attributes_height' accessor is generated dynamically if a search with 'prefetch'=>'extended_attributes' AND the extended_attribute.code = 'height' is performed.
-- Rewrites the 'join' entries in the query to have the aliases as above.
-- Rewrites the WHERE conditions to match the above ruleset.

Example:

A DBIX search query as follows:

[
        {
            '-and' => [
                [
                    {
                        'extended_attributes.attribute' => { 'like' => 'abc%' },
                        'extended_attributes.code'      => 'CODE_1'
                    }
                ],
                [
                    {
                        'extended_attributes.code'      => 'CODE_2',
                        'extended_attributes.attribute' => { 'like' => '123%' }
                    }
                ]
            ]
        }
    ]

Results in the following SQL:

    SELECT
      `me`.`borrowernumber`
    FROM
      `borrowers` `me`
      LEFT JOIN `borrower_attributes` `extended_attributes_CODE_1` ON (
        `extended_attributes_CODE_1`.`borrowernumber` = `me`.`borrowernumber`
        AND `extended_attributes_CODE_1`.`code` = ?
      )
      LEFT JOIN `borrower_attributes` `extended_attributes_CODE_2` ON (
        `extended_attributes_CODE_2`.`borrowernumber` = `me`.`borrowernumber`
        AND `extended_attributes_CODE_2`.`code` = ?
      )
    WHERE
      (
        (
          (
            `extended_attributes_CODE_1`.`attribute` LIKE ?
            AND `extended_attributes_CODE_1`.`code` = ?
          )
          AND (
            `extended_attributes_CODE_2`.`attribute` LIKE ?
            AND `extended_attributes_CODE_2`.`code` = ?
          )
        )
      )

What fixes the performance issue that originated this work is the 'AND `extended_attributes_CODE_1`.`code` = ?' that was missing on the LEFT JOIN.

All of the above is explained using Borrowers and Borrower attributes, but it all also applies to ILL::Requests and ILL::Request::Attributes.

Co-authored-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
(cherry picked from commit 3b613fb73f)
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2024-08-29 17:42:21 +00:00
C4 Bug 37476: Fix reserved word error on Serials.pm on MySQL 8 2024-08-29 16:59:24 +00:00
Koha Bug 37389: ExtendedAttributes mixin 2024-08-29 17:42:21 +00:00
acqui Bug 37343: Fixed search for vendors when transferring an item in acquistions 2024-08-28 19:43:10 +00:00
admin Bug 37411: Fixed exporting to CSV file 2024-08-29 17:32:58 +00:00
api Bug 29509: Update swagger specification and add permissions to users 2024-08-28 19:58:39 +00:00
authorities Bug 25387: (QA follow-up) Tidy 2024-07-18 20:03:17 +00:00
basket Bug 34478: Add 'op' to sendbasketform 2024-03-01 10:58:53 +01:00
bin
…
bookings Bug 35574: Bookings tab from biblio details should only require manage_bookings permission 2023-12-18 15:21:04 +01:00
catalogue Bug 37425: Check for existence of biblio object before fetching cover images 2024-08-28 20:35:18 +00:00
cataloguing Bug 37371: Move Maskito init to onReady in dateaccessioned.pl 2024-08-28 19:34:10 +00:00
circ Bug 37400 - In returns.pl don't search for a patron unless needed 2024-08-28 20:04:16 +00:00
clubs Bug 34478: Manual fix - add op clubs/templates-add-modify 2024-03-01 10:57:55 +01:00
course_reserves Bug 28762: Use Koha::Course in course-details controller 2024-08-28 20:20:33 +00:00
debian Bug 33563: Add comments for Elasticsearch security config 2024-07-18 19:57:49 +00:00
docs Bug 37003: (follow-up) Amend 22.11 RMaint 2024-07-18 19:44:01 +00:00
erm Bug 32922: Remove space in shebang 2023-02-20 09:44:06 -03:00
errors Bug 36148: Improve error handling and restore programming errors 2024-03-01 11:01:06 +01:00
etc Bug 33563: Add comments for Elasticsearch security config 2024-07-18 19:57:49 +00:00
ill Bug 35106: CSRF fix 2024-04-29 18:53:09 +02:00
installer Bug 37419: DBRev 24.05.03.003 2024-08-29 17:25:35 +00:00
koha-tmpl Bug 33453: Change the button class of the record cashup modal to btn-primary 2024-08-29 17:40:01 +00:00
labels Bug 36931: Fix label-item-search.pl by removing CSRF requirement 2024-05-24 15:36:46 +02:00
lib Bug 35681: Use ::Bootstrap version of FromANSI 2024-05-02 16:47:39 +02:00
members Bug 33849: Do not reset new patrons home library when error occurs 2024-05-13 10:36:09 +02:00
misc Bug 37303: Replace po2json with a JS version 2024-08-29 16:48:45 +00:00
offline_circ Bug 34478: Changes for offline_circ 2024-03-01 10:58:34 +01:00
opac Bug 37370: Return 400 if OpacExportOptions does not contain the passed format 2024-08-12 15:35:11 -03:00
patron_lists Bug 34478: Changes for patron_lists/add-modify 2024-03-01 10:57:41 +01:00
patroncards Bug 36877: (follow-up) Fix op eq edit to op eq edit_form in edit-batch.pl 2024-05-17 12:03:52 +02:00
plugins Bug 30897: Add option to disable automated restart 2024-04-11 16:53:42 +02:00
pos Bug 33478: Apply formatting to RECEIPT 2024-04-26 20:15:44 +02:00
preservation Bug 34030: Add a "print slips" action links to print in batch 2023-10-23 11:33:55 -03:00
recalls Bug 33478: Apply formatting to RECALL_REQUESTER_DET 2024-04-26 20:15:45 +02:00
reports Bug 37508: Don't return Internal server error when running report 2024-08-12 15:35:16 -03:00
reserve Bug 30579: Disentangle multi-hold and single bib forms 2024-05-07 15:53:57 +02:00
reviews Bug 37074: Comment approval and un-approval should be CSRF-protected 2024-07-25 14:08:54 +00:00
rotating_collections Bug 34478: Manual fix - add op - rotating_collections/addItems 2024-03-01 10:57:33 +01:00
serials Bug 37247: Fix display of "closed" 2024-07-25 14:24:53 +00:00
services
…
skel
…
suggestion Bug 34963: Restore the ability to blank fields when editing a suggestion 2024-04-19 18:06:36 +02:00
svc Bug 37508: Throw error if password column is detected in SQL report 2024-08-12 15:35:12 -03:00
t Bug 37389: Add tests 2024-08-29 17:42:21 +00:00
tags Bug 34478: Add 'op' to tags/review 2024-03-01 10:58:25 +01:00
tools Bug 37488: Validate paths in datalink.txt/idlink.txt files 2024-08-12 15:35:09 -03:00
virtualshelves Bug 37285: (QA follow-up) Perl Tidy 2024-08-29 15:06:09 +00:00
xt Bug 37302: Set test to failed if swagger-cli missing 2024-08-28 20:06:11 +00:00
.editorconfig
…
.eslintrc.json Bug 36400: Centralize {js,ts,vue} formatting config in .prettierrc.js 2024-04-22 08:57:39 +02:00
.gitignore Bug 36546: (QA follow-up) Add bundle spec to .gitignore 2024-04-30 15:55:37 -03:00
.htaccess
…
.mailmap Bug 36943: (follow-up) 24.05.00 - Update .mailmap 2024-05-24 15:36:40 +02:00
.perlcriticrc
…
.perltidyrc Bug 30002: Adjust perltidy 2023-06-08 08:32:42 -03:00
.prettierrc.js Bug 36400: (follow-up) remove option editorconfig from .prettierrc.js 2024-04-22 08:57:40 +02:00
.proverc.dist
…
.stylelintrc.json
…
INSTALL
…
Koha.pm Bug 37419: DBRev 24.05.03.003 2024-08-29 17:25:35 +00:00
LICENSE
…
MANIFEST.SKIP
…
Makefile.PL Bug 36546: Deploy swagger_bundle.json via make 2024-04-30 14:32:10 +02:00
README
…
README.md
…
README.robots
…
about.pl Bug 37260: Check message broker for both 'about' and 'sysinfo' tabs 2024-08-28 19:38:52 +00:00
app.psgi Bug 36149: Add userenv middleware to app.psgi 2024-05-14 15:04:37 -03:00
build-resources.PL Bug 32609: Use the current yarn.lock to generate node_modules 2023-02-10 11:07:57 -03:00
changelanguage.pl
…
cpanfile Bug 25159: Add ability to specify a pre-modified version of action log data and store as diff 2024-05-02 16:47:42 +02:00
cypress.config.ts Bug 36012: Extend cypress's requestTimeout value 2024-03-22 15:07:36 +01:00
fix-perl-path.PL
…
gulpfile.js Bug 36730: (Bug 35428 follow-up) po files (sometimes) fail to update 2024-05-07 15:53:44 +02:00
help.pl
…
kohaversion.pl
…
mainpage.pl Bug 30493: (QA follow-up) Fix for the only_my_library case as well 2024-07-18 19:31:50 +00:00
package.json Bug 37303: Replace po2json with a JS version 2024-08-29 16:48:45 +00:00
rewrite-config.PL
…
tsconfig.json Bug 32030: Move cypress to t - fix build_js/watch_js 2022-11-08 09:44:52 -03:00
webpack.config.js Bug 35919: Add record sources admin page 2024-04-26 17:06:04 +02:00
yarn.lock Bug 37303: Update yarn.lock after adding new dependency to packages.json 2024-08-29 16:49:30 +00:00

README.md

Koha is a free software integrated library system (ILS).

Koha is distributed under the GNU GPL version 3 or later.

Note: Koha does not accept pull requests from git hosting sites.

Note: This project has its own bug tracker, to report a bug or submit a patch visit http://bugs.koha-community.org.

For guidelines on submitting patches for Koha please visit https://wiki.koha-community.org/wiki/SubmitingAPatch

The developers handbook can be found at https://wiki.koha-community.org/wiki/Developer_handbook

http://koha-community.org/

Koha Logo