Changeset 68049 in spip-zone
- Timestamp:
- Dec 1, 2012, 12:18:26 PM (8 years ago)
- Location:
- _plugins_/sqlip_export/trunk
- Files:
-
- 5 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/sqlip_export/trunk/LISEZ_MOI.txt
r67852 r68049 2 2 3 3 L'idée: que SPIP génère un fichier utilisable ensuite dans phpmyadmin/adminer: drop tables, définitions, données. 4 J'ai fait ça par curiosité et parce que j'ai lu je ne sais où que les restaurations SPIP sqlite->MYSQL ne sont pas top. Ne nous méprenons pas: je suis sûr qu'elles fonctionnent mieux que ce truc malgré tout mais bon... Super exercice auto-formation sinon j'espère. 4 A ce jour (1/12/2012) les restaurations SPIP sqlite->MYSQL ne sont pas top. Une résolution stable et efficace n'est pas triviale. 5 J'ai tenté d'apporter une solution par curiosité et au titre d'exercice auto-formation. 6 7 RESSOURCES 8 - http://www.sqlite.org/docs.html 9 - itérateurs SPIP 5 10 6 11 7 12 LIMITES 8 13 9 Les bases ne doivent pas être trop grosses... PHP limite la durée du script et la taille du pauet en upload (mysql aussi) 14 - Les bases ne doivent pas être trop grosses... PHP limite la durée du script et la taille du pauet en upload (mysql aussi) 15 - La production d'un squelette peut-être longue et n'est pas le système le plus sûr pour cette tâche mais... C'est ce que je sais faire... Une solution en php basée sur SHOWTABLE et utilisant les fonctions intégrées de SPIP est souhaitable. Cette solution mériterait le nom de plugin "SQLITE2MYSQL", ce qui n'est pas le cas de celle-ci. 16 - Pas de détection du CHARSET d'origine => UTF-8 nécessaire au départ (cas par défaut en SQLite semble-t-il) et UTF-8 à l'arrivée. 10 17 11 18 12 19 TODO 13 20 14 * sqlite-mysql 15 - Implémenter les autres définitions de champs 16 - Implémenter l'autoincrément (un champs à auto incrément n'est pas forcément une clé primaire Suske !) 17 - zipper 18 - ... tout quoi 19 20 * autres versions : mysql-sqlite, mysql-mysql 21 * contenus 22 - comparer structure MySQl d'origine avec celle importée par ce plugin 23 - Implémenter plus correctement les définitions de champs 24 - ... 21 25 22 26 * Interface 23 - Prévoir découpage en sous fichiers car en upload après max_allowed_packet est souvent limité à 16Mb ou 32Mb si je lis bien (et puis php)27 - permettre découpage en sous fichiers pour bases plus grosses 24 28 - Une page dans le privé... 25 29 - mettre tout ça dans le privé 30 - zipper ? 26 31 27 * rêvons un peu 28 - des exports par tables avec aussi du csv toussa 32 -
_plugins_/sqlip_export/trunk/lang/paquet-sqlip_export_fr.php
r65427 r68049 4 4 $GLOBALS[$GLOBALS['idx_lang']] = array( 5 5 6 'prefix_description' => 'Ce plugin utilise un squelette et les itérateurs pour produire un fichier texte contenant les définitions de tables et les contenus d\'un site SPIP. A ce stade, il ne fonctionne que dans le sens sqlite -> MySQL. Pour produire la page, le webmestre doit appeler [->../spip.php?page=sqlite-mysql]', 7 'prefix_slogan' => 'Des dump SQL pour différents moteurs de base de données' 6 'prefix_description' => 'Appliqué sur un site installé en SQLite, permet de télécharger un fichier mysql-dump.csv importable sur un site installé en MySQL. Il utilise un squelette et les itérateurs pour produire ce fichier contenant les définitions de tables et les contenus du site en SQLite. Le tout se passe en CHARSET UTF-8. 7 8 Pour lancer le téléchargement, le webmestre doit appeler [->../spip.php?page=sqlite-mysql]', 9 'prefix_slogan' => 'Importez une base SQLite dans MySQL' 8 10 ); 9 11 ?> -
_plugins_/sqlip_export/trunk/paquet.xml
r68014 r68049 2 2 prefix='sqlip_export' 3 3 categorie='maintenance' 4 version='0. 0.3'4 version='0.1.0' 5 5 etat='experimental' 6 6 compatibilite="[3.0.4;3.0.*]" -
_plugins_/sqlip_export/trunk/plugin.xml
r68014 r68049 3 3 <slogan>Des dump SQL pour différents moteurs de base de données</slogan> 4 4 <auteur>Suske</auteur> 5 <version>0. 0.3</version>5 <version>0.1.0</version> 6 6 <etat>experimental</etat> 7 <description>Ce plugin utilise un squelette et les itérateurs pour produire un fichier texte contenant les définitions de tables et les contenus d'un site SPIP. A ce stade, il ne fonctionne que dans le sens sqlite -> MySQL. Pour produire la page, le webmestre doit appeler [->../spip.php?page=sqlite-mysql]</description> 7 <description>Appliqué sur un site installé en SQLite, ce plugin permet de télécharger un fichier mysql-dump.csv importable sur un site installé en MySQL. Il utilise un squelette et les itérateurs pour produire ce fichier contenant les définitions de tables et les contenus du site en SQLite. Le tout se passe en CHARSET "UTF-8". 8 9 Pour lancer le téléchargement, le webmestre doit appeler [->../spip.php?page=sqlite-mysql]</description> 8 10 <lien>http://www.spip.net</lien> 9 11 <prefix>sqlip_export</prefix> -
_plugins_/sqlip_export/trunk/sqlite-mysql.html
r68014 r68049 1 [(#AUTORISER{webmestre}|sinon_interdire_acces)]#CACHE{0} #HTTP_HEADER{Content-Type:text/plain; charset=#CHARSET} #HTTP_HEADER{Content-Disposition: attachment; filename="mysql-dump.sql"} 1 [(#AUTORISER{webmestre}|sinon_interdire_acces)] 2 #CACHE{0} #HTTP_HEADER{Content-Type:text/plain; charset=#CHARSET} 3 #HTTP_HEADER{Content-Disposition: attachment; filename="mysql-dump.sql"} 2 4 [(#REM) lister les tables et description sqlite] 3 5 [(#REM) array type=>table name=>nom table tbl_name=>nom_table rootpage=>2 sql=>CREATE TABLE name (...,PRIMARY KEY(key))] … … 8 10 [(#REM) liste des champs - RECUPERER AUTO INCREMENT !!! - on stocke aussi pour les insert] #SET{champs,#ARRAY} 9 11 <B_table_desc><BOUCLE_table_desc(DATA){source sql,#GET{req_table}}{", "}> 10 `#VALEUR{name}` [ (#VALEUR{type}|=={"TIMESTAMP"}|?{"timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP",#VALEUR{type}|strtolower}) ] [ (#VALEUR{notnull}|=={1}|?{"NOT NULL",""}) ] [ default (#VALEUR{dflt_value}|=={"''"}|?{"",#VALEUR{dflt_value}})]12 `#VALEUR{name}` [ (#VALEUR{type}|=={"TIMESTAMP"}|?{"timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP",#VALEUR{type}|strtolower}) ] [ (#VALEUR{notnull}|=={1}|?{"NOT NULL",""}) ][(#VALEUR{type}|=={"INTEGER"}|et{#VALEUR{name}|=={#GET{cle_primaire}}}|oui) AUTO_INCREMENT ] [ default (#VALEUR{dflt_value}|=={"''"}|?{"",#VALEUR{dflt_value}})] 11 13 [(#REM) et on stocke la liste des champs pour plus tard] #SET{champs,#GET{champs}|push{#VALEUR{name}}} 12 14 </BOUCLE_table_desc> 13 [(#REM) ensuite la clé primaire ][, (#GET{cle_primaire})]15 [(#REM) ensuite la clé primaire ][,PRIMARY KEY ((#GET{cle_primaire}))] 14 16 [(#REM) on cherche la liste des autres clés]#SET{req_keys,PRAGMA index_list( #GET{table} )} 15 17 <B_keys_liste>, … … 21 23 [(#REM) insérons-maintenant les valeurs]#SET{req_donnees,SELECT * FROM #GET{table}} 22 24 <B_lignes>INSERT INTO `#GET{table}` (<BOUCLE_champs(DATA){source tableau,#GET{champs}}{", "}>`#VALEUR`</BOUCLE_champs>) VALUES <BOUCLE_lignes(DATA){source sql,#GET{req_donnees}}{", "}><B_donnees>(<BOUCLE_donnees(DATA){source table,#VALEUR}{", "}>[(#VALEUR|?{['(#VALEUR|mysql_prep)'],"''"})]</BOUCLE_donnees>)</B_donnees></BOUCLE_lignes>;</B_lignes></BOUCLE_tables> 25 INSERT INTO `spip_meta` (`nom`, `valeur`, `impt`, `maj`) VALUES ('charset_collation_sql_base', 'utf8_general_ci', 'non', ''),('charset_sql_base', 'utf8', 'non', ''),('charset_sql_connexion', 'utf8', 'non', ''); 26 -
_plugins_/sqlip_export/trunk/sqlite-mysql_fonctions.php
r65427 r68049 6 6 $cle_primaire=substr($val,$position_cle); 7 7 $cle_primaire=str_replace("))",")",$cle_primaire); 8 if (preg_match(",PRIMARY KEY \(([^\)]+)\),Uims", $cle_primaire, $reg)) { 9 # echo "<br>".$reg[1]; 10 return $reg[1]; 11 } 8 12 } 9 13 return $cle_primaire; … … 29 33 30 34 ?> 35
Note: See TracChangeset
for help on using the changeset viewer.