From 9824540ed8e2c58f18c71b0299f59d1547600bea Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Sat, 11 Jan 2014 17:27:04 -0800 Subject: [PATCH] MongoDB: auto_increment --- adminer/drivers/mongo.inc.php | 10 +++++++++- adminer/drivers/simpledb.inc.php | 1 + adminer/edit.inc.php | 9 +++------ adminer/include/functions.inc.php | 8 +++++++- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/adminer/drivers/mongo.inc.php b/adminer/drivers/mongo.inc.php index 874bf100..9d9fe222 100644 --- a/adminer/drivers/mongo.inc.php +++ b/adminer/drivers/mongo.inc.php @@ -7,7 +7,7 @@ if (isset($_GET["mongo"])) { if (class_exists('MongoDB')) { class Min_DB { - var $extension = "Mongo", $error, $_link, $_db; + var $extension = "Mongo", $error, $last_id, $_link, $_db; function connect($server, $username, $password) { global $adminer; @@ -114,6 +114,8 @@ if (isset($_GET["mongo"])) { class Min_Driver extends Min_SQL { + public $primary = "_id"; + function select($table, $select, $where, $group, $order, $limit, $page, $print = false) { $select = ($select == array("*") ? array() @@ -137,6 +139,7 @@ if (isset($_GET["mongo"])) { $return = $this->_conn->_db->selectCollection($table)->insert($set); $this->_conn->errno = $return['code']; $this->_conn->error = $return['err']; + $this->_conn->last_id = $set['_id']; return !$return['err']; } catch (Exception $ex) { $this->_conn->error = $ex->getMessage(); @@ -302,6 +305,11 @@ if (isset($_GET["mongo"])) { return true; } + function last_id() { + global $connection; + return $connection->last_id; + } + function table($idf) { return $idf; } diff --git a/adminer/drivers/simpledb.inc.php b/adminer/drivers/simpledb.inc.php index 231791d3..fec66c00 100644 --- a/adminer/drivers/simpledb.inc.php +++ b/adminer/drivers/simpledb.inc.php @@ -118,6 +118,7 @@ if (isset($_GET["simpledb"])) { class Min_Driver extends Min_SQL { + public $primary = "itemName()"; function _chunkRequest($ids, $action, $params, $expand = array()) { global $connection; diff --git a/adminer/edit.inc.php b/adminer/edit.inc.php index d1ac2e9b..50a75e34 100644 --- a/adminer/edit.inc.php +++ b/adminer/edit.inc.php @@ -98,14 +98,11 @@ if ($_POST["save"]) { } if (!support("table") && !$fields) { - $id = ($jush == "mongo" ? "_id" : "itemName()"); // simpledb if (!$where) { // insert $result = $driver->select($TABLE, array("*"), $where, array("*"), array(), 1, 0); - if ($result) { - $row = $result->fetch_assoc(); - } + $row = ($result ? $result->fetch_assoc() : false); if (!$row) { - $row = array($id => ""); + $row = array($driver->primary => ""); } } if ($row) { @@ -113,7 +110,7 @@ if (!support("table") && !$fields) { if (!$where) { $row[$key] = null; } - $fields[$key] = array("field" => $key, "null" => ($key != $id), "auto_increment" => ($key == $id)); + $fields[$key] = array("field" => $key, "null" => ($key != $driver->primary), "auto_increment" => ($key == $driver->primary)); } } } diff --git a/adminer/include/functions.inc.php b/adminer/include/functions.inc.php index ed570541..51302394 100644 --- a/adminer/include/functions.inc.php +++ b/adminer/include/functions.inc.php @@ -907,6 +907,7 @@ function process_input($field) { * @return array */ function fields_from_edit() { + global $driver; $return = array(); foreach ((array) $_POST["field_keys"] as $key => $val) { if ($val != "") { @@ -917,7 +918,12 @@ function fields_from_edit() { } foreach ((array) $_POST["fields"] as $key => $val) { $name = bracket_escape($key, 1); // 1 - back - $return[$name] = array("field" => $name, "privileges" => array("insert" => 1, "update" => 1), "null" => 1); + $return[$name] = array( + "field" => $name, + "privileges" => array("insert" => 1, "update" => 1), + "null" => 1, + "auto_increment" => ($key == $driver->primary), + ); } return $return; }