0) Problem
The `elwikisource-20150602-stub-meta-current.xml.gz` violates `UNIQUE KEY` constraint.
This makes trouble for `INSERT` commands.
1. 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;`
2. 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="Συγγραφέας:Πλάτων" />`
`...`
3. 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| Σοφοκλής|
4. 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.