예제 #1
0
파일: create.php 프로젝트: nursit/SPIP
/**
 * Creer une table,
 * ou ajouter les champs manquants si elle existe deja
 *
 * http://doc.spip.org/@creer_ou_upgrader_table
 *
 * @param string $table
 * @param array $desc
 * @param bool|string $autoinc
 *   'auto' pour detecter automatiquement si le champ doit etre autoinc ou non
 *   en fonction de la table
 * @param bool $upgrade
 * @param string $serveur
 * @return void
 */
function creer_ou_upgrader_table($table, $desc, $autoinc, $upgrade = false, $serveur = '')
{
    $sql_desc = $upgrade ? sql_showtable($table, true, $serveur) : false;
    if (!$sql_desc) {
        if ($autoinc === 'auto') {
            $autoinc = base_determine_autoinc($table, $desc);
        }
        sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur);
    } else {
        // ajouter les champs manquants
        // on ne supprime jamais les champs, car c'est dangereux
        // c'est toujours a faire manuellement
        $last = '';
        foreach ($desc['field'] as $field => $type) {
            if (!isset($sql_desc['field'][$field])) {
                sql_alter("TABLE {$table} ADD {$field} {$type}" . ($last ? " AFTER {$last}" : ""), $serveur);
            }
            $last = $field;
        }
        foreach ($desc['key'] as $key => $type) {
            // Ne pas oublier les cas des cles non nommees dans la declaration et qui sont retournees
            // par le showtable sous la forme d'un index de tableau "KEY $type" et non "KEY"
            if (!isset($sql_desc['key'][$key]) and !isset($sql_desc['key']["{$key} {$type}"])) {
                sql_alter("TABLE {$table} ADD {$key} ({$type})", $serveur);
            }
            $last = $field;
        }
    }
}
예제 #2
0
파일: create.php 프로젝트: JLuc/SPIP
/**
 * Créer une table,
 * ou ajouter les champs manquants si elle existe déjà
 *
 * @param string $table
 * @param array $desc
 * @param bool|string $autoinc
 *   'auto' pour detecter automatiquement si le champ doit etre autoinc ou non
 *   en fonction de la table
 * @param bool $upgrade
 * @param string $serveur
 * @return void
 */
function creer_ou_upgrader_table($table, $desc, $autoinc, $upgrade = false, $serveur = '')
{
    #spip_log("creer_ou_upgrader_table table=$table autoinc=$autoinc upgrade=$upgrade","dbinstall"._LOG_INFO_IMPORTANTE);
    $sql_desc = $upgrade ? sql_showtable($table, true, $serveur) : false;
    #if (!$sql_desc) $sql_desc = false;
    #spip_log("table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE);
    if (!$sql_desc) {
        if ($autoinc === 'auto') {
            $autoinc = base_determine_autoinc($table, $desc);
        }
        #spip_log("sql_create $table autoinc=$autoinc","dbinstall"._LOG_INFO_IMPORTANTE);
        sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur);
        // verifier la bonne installation de la table (php-fpm es-tu la ?)
        $sql_desc = sql_showtable($table, true, $serveur);
        #if (!$sql_desc) $sql_desc = false;
        #spip_log("Resultat table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE);
        if (!$sql_desc) {
            // on retente avec un sleep ?
            sleep(1);
            sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur);
            $sql_desc = sql_showtable($table, true, $serveur);
            #if (!$sql_desc) $sql_desc = false;
            #spip_log("Resultat table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE);
            if (!$sql_desc) {
                spip_log("Echec creation table {$table}", "maj" . _LOG_CRITIQUE);
            }
        }
    } else {
        #spip_log("sql_alter $table ... (on s'en fiche)","dbinstall"._LOG_INFO_IMPORTANTE);
        // ajouter les champs manquants
        // on ne supprime jamais les champs, car c'est dangereux
        // c'est toujours a faire manuellement
        $last = '';
        foreach ($desc['field'] as $field => $type) {
            if (!isset($sql_desc['field'][$field])) {
                sql_alter("TABLE {$table} ADD {$field} {$type}" . ($last ? " AFTER {$last}" : ""), $serveur);
            }
            $last = $field;
        }
        foreach ($desc['key'] as $key => $type) {
            // Ne pas oublier les cas des cles non nommees dans la declaration et qui sont retournees
            // par le showtable sous la forme d'un index de tableau "KEY $type" et non "KEY"
            if (!isset($sql_desc['key'][$key]) and !isset($sql_desc['key']["{$key} {$type}"])) {
                sql_alter("TABLE {$table} ADD {$key} ({$type})", $serveur);
            }
            $last = $field;
        }
    }
}
예제 #3
0
function insere_1_init($request) {

//  table des translations

	$res = insere_1bis_init($request);
	$desc = $GLOBALS['tables_principales'][_SPIP_TRANSLATE];
	$v = sql_create(_SPIP_TRANSLATE, $desc['field'], $desc['key'], true);
	if (!$v) {
		spip_log("echec de la creation de la table de fusion");
		return  false; 
	}
	// au cas ou la derniere fois ce serait terminee anormalement
	$d = sql_delete(_SPIP_TRANSLATE);
	spip_log("init " . _SPIP_TRANSLATE . " : $d");
	return $res;
}
예제 #4
0
파일: create.php 프로젝트: rhertzog/lcs
function creer_ou_upgrader_table($table,$desc,$autoinc,$upgrade=false,$serveur='') {
	$sql_desc = $upgrade ? sql_showtable($table,true,$serveur) : false;
	if (!$sql_desc)
		sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur);
	else {
		// ajouter les champs manquants
		$last = '';
		foreach($desc['field'] as $field=>$type){
			if (!isset($sql_desc['field'][$field]))
				sql_alter("TABLE $table ADD $field $type".($last?" AFTER $last":""),$serveur);
			$last = $field;
		}
		foreach($desc['key'] as $key=>$type){
			if (!isset($sql_desc['key'][$key]))
				sql_alter("TABLE $table ADD $key ($type)",$serveur);
			$last = $field;
		}

	}
}
예제 #5
0
파일: v019.php 프로젝트: nursit/SPIP
function maj_1_950($installee)
{
    // oubli de gerer le prefixe lors l'introduction de l'abstraction
    // => Relancer les MAJ concernees si la version dont on part les avait fait
    if ($installee >= 1.946) {
        serie_alter('950a', $GLOBALS['maj'][1946]);
    }
    if ($installee >= 1.947) {
        serie_alter('950b', $GLOBALS['maj'][1947]);
    }
    if ($installee >= 1.949) {
        @serie_alter('950c', $GLOBALS['maj'][1949]);
    }
    global $tables_auxiliaires;
    include_spip('base/auxiliaires');
    $v = $tables_auxiliaires[$k = 'spip_urls'];
    sql_create($k, $v['field'], $v['key'], false, false);
    foreach (array('article' => 'id_article', 'rubrique' => 'id_rubrique', 'breve' => 'id_breve', 'auteur' => 'id_auteur', 'mot' => 'id_mot', 'syndic' => 'id_syndic') as $type => $id_objet) {
        $table = $type == 'syndic' ? $type : $type . "s";
        $date = $type == 'breve' ? 'date_heure' : ($type == 'auteur' ? 'maj' : ($type == 'mot' ? 'maj' : 'date'));
        $q = @sql_select("url_propre AS url, {$id_objet} AS id_objet, '{$type}' AS type, {$date} as date", "spip_{$table}", "url_propre<>''");
        if (!$q) {
            return;
        }
        // anormal, mais ne pas boucler en erreur
        while ($r = sql_fetch($q)) {
            sql_replace('spip_urls', $r);
        }
        spip_log("table {$table} : " . sql_count($q) . " urls propres copiees");
        sql_alter("TABLE spip_{$table} DROP INDEX `url_propre`");
        sql_alter("TABLE spip_{$table} DROP `url_propre`");
    }
}
예제 #6
0
/**
 * Mise à jour 12008 : Réunir en une seule table les liens de documents
 * spip_documents_articles et spip_documents_forum
 */
function maj_12008()
{
    // Creer spip_documents_liens
    global $tables_auxiliaires;
    include_spip('base/auxiliaires');
    $v = $tables_auxiliaires[$k = 'spip_documents_liens'];
    sql_create($k, $v['field'], $v['key'], false, false);
    // Recopier les donnees
    foreach (array('article', 'breve', 'rubrique', 'auteur', 'forum') as $l) {
        if ($s = sql_select('*', 'spip_documents_' . $l . 's') or $s = sql_select('*', 'spip_documents_' . $l)) {
            $tampon = array();
            while ($t = sql_fetch($s)) {
                // transformer id_xx=N en (id_objet=N, objet=xx)
                $t['id_objet'] = $t["id_{$l}"];
                $t['objet'] = $l;
                unset($t["id_{$l}"]);
                unset($t['maj']);
                $tampon[] = $t;
                if (count($tampon) > 10000) {
                    sql_insertq_multi('spip_documents_liens', $tampon);
                    $tampon = array();
                }
            }
            if (count($tampon)) {
                sql_insertq_multi('spip_documents_liens', $tampon);
            }
        }
    }
}
예제 #7
0
/**
 * Marquer la procédure de dump comme finie
 *
 * @param string $status_file
 *     Fichier qui mémorise les infos utiles concernant la sauvegarde en cours
 * @param string $action
 *     Type d'action supplémentaire à réaliser :
 *
 *     - restaurer : supprimer la structure qui était stockée dans le dump
 *     - 'auvegarder : stocker dans le dump la structure de la base source
 */
function dump_end($status_file, $action = '')
{
    $status_file = _DIR_TMP . basename($status_file) . ".txt";
    if (!lire_fichier($status_file, $status) or !($status = unserialize($status))) {
        return;
    }
    switch ($action) {
        case 'restaurer':
            // supprimer la structure qui etait stockee dans le dump
            sql_delete('spip_meta', "nom='dump_structure_temp'");
            break;
        case 'sauvegarder':
            // stocker dans le dump la structure de la base source
            $structure = array();
            foreach ($status['tables_copiees'] as $t => $n) {
                $structure[$t] = sql_showtable($t, true);
            }
            dump_serveur($status['connect']);
            spip_connect('dump');
            // si spip_meta n'a pas ete backup elle n'est pas dans le dump, il faut la creer pour y stocker cette meta
            if (!sql_showtable("spip_meta", true, "dump")) {
                $desc = sql_showtable("spip_meta", true);
                sql_create("spip_meta", $desc['field'], $desc['key'], false, false, "dump");
            }
            sql_delete('spip_meta', "nom='dump_structure_temp'", 'dump');
            #enlever une vieille structure deja la, au cas ou
            sql_insertq('spip_meta', array('nom' => 'dump_structure_temp', 'valeur' => serialize($structure), 'impt' => 'non'), array(), 'dump');
            break;
    }
    $status['etape'] = 'fini';
    ecrire_fichier($status_file, serialize($status));
}
예제 #8
0
파일: upgrade.php 프로젝트: rhertzog/lcs
function upgrade_test() {
	sql_drop_table("spip_test", true);
	sql_create("spip_test", array('a' => 'int'));
	sql_alter("TABLE spip_test ADD b INT");
	sql_insertq('spip_test', array('b' => 1), array('field'=>array('b' => 'int')));
	$result = sql_select('b', "spip_test");
	// ne pas garder le resultat de la requete sinon sqlite3 
	// ne peut pas supprimer la table spip_test lors du sql_alter qui suit
	// car cette table serait alors 'verouillee'
	$result = $result?true:false; 
	sql_alter("TABLE spip_test DROP b");
	return $result;
}