Exemplo n.º 1
0
function spip_pg_quote($v, $type = '')
{
    if (!is_array($v)) {
        return spip_pg_cite($v, $type);
    }
    // si c'est un tableau, le parcourir en propageant le type
    foreach ($v as $k => $r) {
        $v[$k] = spip_pg_quote($r, $type);
    }
    return join(",", $v);
}
Exemplo n.º 2
0
Arquivo: pg.php Projeto: rhertzog/lcs
function spip_pg_replace($table, $values, $desc, $serveur='',$requeter=true) {
	if (!$values) {spip_log("replace vide $table"); return 0;}
	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
	$prefixe = $connexion['prefixe'];
	$link = $connexion['link'];
	$db = $connexion['db'];

	if (!$desc) $desc = description_table($table);
	if (!$desc) die("$table insertion sans description");
	$prim = $desc['key']['PRIMARY KEY'];
	$ids = preg_split('/,\s*/', $prim);
	$noprims = $prims = array();
	foreach($values as $k=>$v) {
		$values[$k] = $v = spip_pg_cite($v, $desc['field'][$k]);

		if (!in_array($k, $ids))
			$noprims[$k]= "$k=$v";
		else $prims[$k]= "$k=$v";
	}

	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
	$values = spip_pg_ajouter_champs_timestamp($table, $values, $desc, $serveur);
	
	$where = join(' AND ', $prims);
	if (!$where) {
		return spip_pg_insert($table, "(".join(',',array_keys($values)).")", "(".join(',', $values).")", $desc, $serveur);
	}
	$couples = join(',', $noprims);

	$seq = spip_pg_sequence($table);
	if ($prefixe) {
		$table = preg_replace('/^spip/', $prefixe, $table);
		$seq = preg_replace('/^spip/', $prefixe, $seq);
	}

	$connexion['last'] = $q = "UPDATE $table SET $couples WHERE $where";
	if ($couples) {
	  $couples = spip_pg_query_simple($link, $q);
#	  spip_log($q);
	  if (!$couples) return false;
	  $couples = pg_affected_rows($couples);
	}
	if (!$couples) {
		$ret = !$seq ? '' :
		  (" RETURNING nextval('$seq') < $prim");
		$connexion['last'] = $q = "INSERT INTO $table (" . join(',',array_keys($values)) . ') VALUES (' .join(',', $values) . ")$ret";
		$couples = spip_pg_query_simple($link, $q);
	    if (!$couples) {
		return false;
	    } elseif ($ret) {
	      $r = pg_fetch_array($couples, NULL, PGSQL_NUM);
	      if ($r[0]) {
		$connexion['last'] = $q = "SELECT setval('$seq', $prim) from $table";
		// Le code de SPIP met parfois la sequence a 0 (dans l'import)
		// MySQL n'en dit rien, on fait pareil pour PG
		$r = @pg_query($link, $q);
	      }
	    }
	}

	return $couples;
}