0) Problem
The elwikisource-20150602-stub-meta-current.xml.gz violates UNIQUE KEY constraint.
This makes trouble for INSERT commands.
- Database schema
CREATE TABLE page (
page_id int(10) unsigned NOT NULL AUTO_INCREMENT,
page_namespace int(11) NOT NULL,
page_title varbinary(255) NOT NULL,
...
PRIMARY KEY (page_id),
UNIQUE KEY name_title (page_namespace,page_title),
KEY page_random (page_random),
KEY page_len (page_len),
KEY page_redirect_namespace_len (page_is_redirect,page_namespace,page_len),
KEY page_latest (page_latest)
) ENGINE=InnoDB CHARSET=binary;
- Dump contents
(shell) emacs elwikisource-20150602-stub-meta-current.xml.gz
...
<namespace key="108" case="first-letter">Συγγραφέας</namespace>
...
<page>
<title>Συγγραφέας:Πλάτων</title>
<ns>0</ns>
<id>1422</id>
<redirect title="Πλάτων" />
...
<page>
<title>Πλάτων</title>
<ns>0</ns>
<id>21023</id>
<redirect title="Συγγραφέας:Πλάτων" />
...
- Database table contents
If I drop the UNIQUE KEY constraint, then I can INSERT both pages:
mysql> select page_id,page_namespace,page_title from elwikisource.page where page_namespace=0 and page_title='Πλάτων';
page_id | page_namespace | page_title |
1422 | 0 | Πλάτων |
21023 | 0 | Πλάτων |
But then we discover that Plato is not the only culprit. This dump file has ten such cases:
mysql> select page_namespace,page_title,count(page_id) as n from elwikisource.page group by page_namespace,page_title having n>1;
page_namespace | page_title | n |
0 | Main_Page | 2 |
0 | Αριστοτέλης | 2 |
0 | Δημοσθένης | 2 |
0 | Πέτρος_Κροπότκιν | 2 |
0 | Πλάτων | 2 |
0 | Σοφοκλής | 2 |
0 | Ἐπίκουρος | 2 |
0 | Ἐπίκτητος | 2 |
0 | Ἡράκλειτος_ὁ_Ἐφέσιος | 2 |
0 | Ὅμηρος | 2 |
Or better yet
mysql> select a.page_id,b.page_id,a.page_namespace,a.page_title from elwikisource.page as a, elwikisource.page as b where a.page_namespace=b.page_namespace and a.page_title=b.page_title and a.page_id<b.page_id order by a.page_id;
page_id | page_id | page_namespace | page_title |
1 | 8379 | 0 | Main_Page |
1411 | 1432 | 0 | Ἐπίκτητος |
1422 | 21023 | 0 | Πλάτων |
1425 | 1601 | 0 | Ὅμηρος |
1426 | 1982 | 0 | Ἐπίκουρος |
1427 | 21020 | 0 | Πέτρος_Κροπότκιν |
1428 | 21021 | 0 | Αριστοτέλης |
1434 | 21035 | 0 | Δημοσθένης |
1436 | 1753 | 0 | Ἡράκλειτος_ὁ_Ἐφέσιος |
1626 | 21028 | 0 | Σοφοκλής |
- Analysis
In nine cases, we see:
- a pair of <redirect>s that point to each other;
- where one <page> has the wrong value for <ns> (Συγγραφέας should be 108 not 0).
<id> | <ns> | <title> | <redirect> title= | <id> | <ns> | <title> | <redirect> title= | |
1411 | 0 | Ἐπίκτητος | Συγγραφέας:Επίκτητος | 1432 | 0 | Συγγραφέας:Ἐπίκτητος | Ἐπίκτητος | |
1422 | 0 | Συγγραφέας:Πλάτων | Πλάτων | 21023 | 0 | Πλάτων | Συγγραφέας:Πλάτων | |
1425 | 0 | Συγγραφέας:Όμηρος | Όμηρος | 1601 | 0 | Ὅμηρος | Συγγραφέας:Όμηρος | |
1426 | 0 | Συγγραφέας:Επίκουρος | Επίκουρος | 1982 | 0 | Ἐπίκουρος | Συγγραφέας:Επίκουρος | |
1427 | 0 | Συγγραφέας:Πέτρος Κροπότκιν | Πέτρος Κροπότκιν | 21020 | 0 | Πέτρος Κροπότκιν | Συγγραφέας:Πέτρος Κροπότκιν | |
1428 | 0 | Συγγραφέας:Αριστοτέλης | Αριστοτέλης | 21021 | 0 | Αριστοτέλης | Συγγραφέας:Αριστοτέλης | |
1434 | 0 | Συγγραφέας:Δημοσθένης | Δημοσθένης | 21035 | 0 | Δημοσθένης | Συγγραφέας:Δημοσθένης | |
1436 | 0 | Συγγραφέας:Ηράκλειτος | Ηράκλειτος | 1753 | 0 | Ἡράκλειτος ὁ Ἐφέσιος | Συγγραφέας:Ηράκλειτος | |
1626 | 0 | Συγγραφέας:Σοφοκλής | Σοφοκλής | 21028 | 0 | Σοφοκλής | Συγγραφέας:Σοφοκλής | |
The tenth case, Main_Page, I can fix myself.
- When you set up MediaWiki, a default Main_Page is installed.
- When you INSERT an XML dump, a second Main_Page is installed.
The fix is to DELETE the first Main_Page. This I will do in the next version of WP-MIRROR.