From 52e8c0344bcef3c8b4135fee3d2dd5f2da16c120 Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Tue, 3 Aug 2010 17:47:26 +0200 Subject: [PATCH] CSV import for MS SQL --- adminer/drivers/mssql.inc.php | 16 ++++++++++++++++ adminer/drivers/pgsql.inc.php | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/adminer/drivers/mssql.inc.php b/adminer/drivers/mssql.inc.php index 69679282..83764e77 100644 --- a/adminer/drivers/mssql.inc.php +++ b/adminer/drivers/mssql.inc.php @@ -476,6 +476,22 @@ WHERE OBJECT_NAME(indexes.object_id) = " . $connection2->quote($table) return queries("INSERT INTO " . table($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : "DEFAULT VALUES")); } + function insert_update($table, $set, $primary) { + $update = array(); + $where = array(); + foreach ($set as $key => $val) { + $update[] = "$key = $val"; + if (isset($primary[idf_unescape($key)])) { + $where[] = "$key = $val"; + } + } + // can use only one query for all rows with different API + return queries("MERGE " . table($table) . " USING (VALUES(" . implode(", ", $set) . ")) AS source (c" . implode(", c", range(1, count($set))) . ") ON " . implode(" AND ", $where) //! source, c1 - possible conflict + . " WHEN MATCHED THEN UPDATE SET " . implode(", ", $update) + . " WHEN NOT MATCHED THEN INSERT (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ");" // ; is mandatory + ); + } + function last_id() { global $connection; return $connection->result("SELECT SCOPE_IDENTITY()"); // @@IDENTITY can return trigger INSERT diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index b4d615b6..02e60b01 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -473,7 +473,7 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . $connection->qu $where = array(); foreach ($set as $key => $val) { $update[] = "$key = $val"; - if (isset($primary[$key])) { + if (isset($primary[idf_unescape($key)])) { $where[] = "$key = $val"; } }