/* *************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2017 *
+ * Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (!_sqlite_modifier_table(
$table,
array($colonne_origine => ""),
- '',
+ array(),
$serveur)
) {
return false;
// artillerie lourde pour sqlite2 !
} else {
$table_dest = trim(substr($do, 9));
- if (!_sqlite_modifier_table(array($table => $table_dest), '', '', $serveur)) {
+ if (!_sqlite_modifier_table(array($table => $table_dest), '', array(), $serveur)) {
spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR);
return false;
}
$def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
- # rustine pour DECIMAL(10,2)
- if (false !== strpos($k, ')')) {
+ // rustine pour DECIMAL(10,2)
+ // s'il y a une parenthèse fermante dans la clé
+ // ou dans la définition sans qu'il n'y ait une ouverture avant
+ if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
$fields[$k_precedent] .= ',' . $k . ' ' . $def;
continue;
}
// il faut passer par des create index
// Il gere par contre primary key !
// Soit la PK est definie dans les cles, soit dans un champs
- $c = ""; // le champ de cle primaire
- if (!isset($cles[$pk = "PRIMARY KEY"]) or !$c = $cles[$pk]) {
- foreach ($champs as $k => $v) {
- if (false !== stripos($v, $pk)) {
- $c = $k;
- // on n'en a plus besoin dans field, vu que defini dans key
- $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
- break;
- }
+ // soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !)
+ $pk = "PRIMARY KEY";
+ // le champ de cle primaire
+ $c = !empty($cles[$pk]) ? $cles[$pk] : '';
+
+ foreach ($champs as $k => $v) {
+ if (false !== stripos($v, $pk)) {
+ $c = $k;
+ // on n'en a plus besoin dans field, vu que defini dans key
+ $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
+ break;
}
}
+
if ($c) {
$keys = "\n\t\t$pk ($c)";
}
$ifnotexists = ' IF NOT EXISTS';
} else {
/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
- $a = spip_sqlite_showtable($table, $serveur);
+ $a = spip_sqlite_showtable($nom, $serveur);
if (isset($a['key']['KEY ' . $nom])) {
return true;
}
// mais ceux-ci ne sont pas utilises dans le core
$tables[$table] = array();
+ $now = _sqlite_func_now();
foreach ($desc['field'] as $k => $v) {
if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
- $tables[$table][$k] = "datetime('now')";
+ $tables[$table][$k] = _sqlite_calculer_cite($now, $v);
}
}
}