]>
Commit | Line | Data |
---|---|---|
ce3f39eb ER |
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 | ||
d3fe3298 ER |
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 | ||
a4d4cd54 ER |
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']])) { | |
d3fe3298 ER |
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 | |
ce3f39eb ER |
25 | @@ -16,6 +16,7 @@ |
26 | $lang['page'] = 'Page'; | |
27 | $lang['title'] = 'Page Name'; | |
28 | $lang['class'] = 'Page Class'; | |
29 | +$lang['rpm'] = 'RPM Package'; | |
d3fe3298 | 30 | $lang['lastmod'] = 'Last Modified'; |
ce3f39eb ER |
31 | |
32 | $lang['name'] = 'Type Alias'; | |
dc560557 ER |
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 | |
a4d4cd54 ER |
35 | @@ -584,6 +584,13 @@ |
36 | $select[] = 'pages.lastmod'; | |
37 | } elseif($key == '%title%') { | |
ce3f39eb | 38 | $select[] = "pages.page || '|' || pages.title"; |
a4d4cd54 | 39 | + } elseif($key == '%rpm%'){ |
ce3f39eb ER |
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 | + | |
a4d4cd54 ER |
46 | } else { |
47 | if(!isset($tables[$key])) { | |
48 | $tables[$key] = 'T' . (++$cnt); | |
dc560557 ER |
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); |