]> git.pld-linux.org Git - packages/dokuwiki-plugin-data.git/blob - separate-rpmdb.patch
Re-order LEFT JOIN pages before LEFT JOIN rpm
[packages/dokuwiki-plugin-data.git] / separate-rpmdb.patch
1 Separate rpmdb data to rpmdb table, left join via %rpm% field name on demand.
2
3 As the rpmdb data is huge comparing to other data, it's best we keep it
4 in separate table, if it is still a performance problem, we could use
5 separate datafile.
6
7 You need to create 'rpm' table manually:
8 CREATE TABLE rpmdb (eid INTEGER PRIMARY KEY, pid INTEGER, value);
9
10 Handling it automatically would mean have to renumber upstream patches each
11 time...
12
13 --- dokuwiki-plugin-data-20160311/helper.php~   2016-11-22 23:06:06.000000000 +0200
14 +++ dokuwiki-plugin-data-20160311/helper.php    2016-11-22 23:06:44.267324645 +0200
15 @@ -385,6 +385,7 @@
16              '%title%'   => array('page', 'title'),
17              '%pageid%'  => array('title', 'page'),
18              '%class%'   => array('class'),
19 +            '%rpm%'     => array('rpm'),
20              '%lastmod%' => array('lastmod', 'timestamp')
21          );
22          if(isset($specials[$column['title']])) {
23 --- dokuwiki-plugin-data-20120227/lang/en/lang.php~     2012-02-27 16:32:51.000000000 +0200
24 +++ dokuwiki-plugin-data-20120227/lang/en/lang.php      2012-03-13 13:12:04.190745746 +0200
25 @@ -16,6 +16,7 @@
26  $lang['page']      = 'Page';
27  $lang['title']     = 'Page Name';
28  $lang['class']     = 'Page Class';
29 +$lang['rpm']       = 'RPM Package';
30  $lang['lastmod']   = 'Last Modified';
31  
32  $lang['name']      = 'Type Alias';
33 --- dokuwiki-plugin-data-20160311/syntax/table.php      2016-11-22 23:08:01.967907897 +0200
34 +++ dokuwiki-plugin-data-20220727/syntax/table.php      2023-04-25 15:27:50.645943694 +0300
35 @@ -584,6 +584,13 @@
36                  $select[] = 'pages.lastmod';
37              } elseif($key == '%title%') {
38                  $select[] = "pages.page || '|' || pages.title";
39 +            } elseif($key == '%rpm%'){
40 +                if(!isset($tables[$key])){
41 +                    $tables[$key] = 'T'.(++$cnt);
42 +                    $from  .= ' LEFT JOIN rpmdb AS '.$tables[$key].' ON '.$tables[$key].'.pid = pages.pid';
43 +                }
44 +                $select[] = "group_concat(".$tables[$key].".value,'\n')";
45 +
46              } else {
47                  if(!isset($tables[$key])) {
48                      $tables[$key] = 'T' . (++$cnt);
49 @@ -686,6 +693,21 @@
50                  GROUP BY W1.pid
51                  $order";
52  
53 +        // Re-order LEFT JOIN pages before LEFT JOIN rpm
54 +        $sql = preg_replace_callback('/
55 +            (?P<before>.+)
56 +            (?P<rpmdb>LEFT\sJOIN\srpmdb\sAS\sT\d+\sON\sT\d+.pid\s=\spages.pid\s+)
57 +            (?P<pages>LEFT\sJOIN\spages\sON\sW\d+\.pid\s*=pages\.pid\s+)
58 +            (?P<after>.+)
59 +        /xm', function ($m) {
60 +            return implode("", [
61 +                $m['before'],
62 +                $m['pages'],
63 +                $m['rpmdb'],
64 +                $m['after'],
65 +            ]);
66 +        }, $sql);
67 +
68          // offset and limit
69          if($data['limit']) {
70              $sql .= ' LIMIT ' . ($data['limit'] + 1);
This page took 0.058766 seconds and 3 git commands to generate.