Changeset 68049 in spip-zone


Ignore:
Timestamp:
Dec 1, 2012, 12:18:26 PM (7 years ago)
Author:
suske@…
Message:

auto increments + metas chasret utf8 dans mysql / v. 0.1.0 première version utilisable (le spip MySQl s'affiche correctement et est éditable). LISEZ_MOI.txt

Location:
_plugins_/sqlip_export/trunk
Files:
5 edited
1 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/sqlip_export/trunk/LISEZ_MOI.txt

    r67852 r68049  
    22
    33L'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.
     4A ce jour (1/12/2012) les restaurations SPIP sqlite->MYSQL ne sont pas top. Une résolution stable et efficace n'est pas triviale.
     5J'ai tenté d'apporter une solution par curiosité et au titre d'exercice auto-formation.
     6
     7RESSOURCES
     8- http://www.sqlite.org/docs.html
     9- itérateurs SPIP
    510
    611
    712LIMITES
    813
    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.
    1017
    1118
    1219TODO
    1320
    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- ...
    2125
    2226* 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
    2428- Une page dans le privé...
    2529- mettre tout ça dans le privé
     30- zipper ?
    2631
    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  
    44$GLOBALS[$GLOBALS['idx_lang']] = array(
    55
    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
     8Pour lancer le téléchargement, le webmestre doit appeler [->../spip.php?page=sqlite-mysql]',
     9        'prefix_slogan' => 'Importez une base SQLite dans MySQL'
    810);
    911?>
  • _plugins_/sqlip_export/trunk/paquet.xml

    r68014 r68049  
    22   prefix='sqlip_export'
    33   categorie='maintenance'
    4    version='0.0.3'
     4   version='0.1.0'
    55   etat='experimental'
    66   compatibilite="[3.0.4;3.0.*]"
  • _plugins_/sqlip_export/trunk/plugin.xml

    r68014 r68049  
    33        <slogan>Des dump SQL pour diff&#233;rents moteurs de base de donn&#233;es</slogan>
    44        <auteur>Suske</auteur>
    5         <version>0.0.3</version>
     5        <version>0.1.0</version>
    66        <etat>experimental</etat>
    7         <description>Ce plugin utilise un squelette et les it&#233;rateurs pour produire un fichier texte contenant les d&#233;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&#233;rateurs pour produire ce fichier contenant les d&#233;finitions de tables et les contenus du site en SQLite. Le tout se passe en CHARSET "UTF-8".
     8
     9Pour lancer le téléchargement, le webmestre doit appeler [->../spip.php?page=sqlite-mysql]</description>
    810        <lien>http://www.spip.net</lien>
    911        <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"}
    24[(#REM) lister les tables et description sqlite]
    35[(#REM) array type=>table name=>nom table tbl_name=>nom_table rootpage=>2  sql=>CREATE TABLE name (...,PRIMARY KEY(key))]
     
    810[(#REM) liste des champs - RECUPERER AUTO INCREMENT !!! - on stocke aussi pour les insert] #SET{champs,#ARRAY}
    911<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}})]
    1113[(#REM) et on stocke la liste des champs pour plus tard] #SET{champs,#GET{champs}|push{#VALEUR{name}}}
    1214</BOUCLE_table_desc>
    13 [(#REM) ensuite la clé primaire ][,(#GET{cle_primaire})]
     15[(#REM) ensuite la clé primaire ][,PRIMARY KEY ((#GET{cle_primaire}))]
    1416[(#REM) on cherche la liste des autres clés]#SET{req_keys,PRAGMA index_list( #GET{table} )}
    1517<B_keys_liste>,
     
    2123[(#REM) insérons-maintenant les valeurs]#SET{req_donnees,SELECT * FROM  #GET{table}}
    2224<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>
     25INSERT 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  
    66$cle_primaire=substr($val,$position_cle);
    77$cle_primaire=str_replace("))",")",$cle_primaire);
     8if (preg_match(",PRIMARY KEY \(([^\)]+)\),Uims", $cle_primaire, $reg)) {
     9#       echo "<br>".$reg[1];
     10        return  $reg[1];
     11}
    812}
    913return $cle_primaire;
     
    2933
    3034?>
     35
Note: See TracChangeset for help on using the changeset viewer.