$this->types[lang('User types')] = array_flip($types);
}
- function insertSql($table, $set) {
+ function insertReturning($table) {
$auto_increment = array_filter(fields($table), function ($field) {
return $field['auto_increment'];
});
- return parent::insertSql($table, $set) . (count($auto_increment) == 1 ? " RETURNING " . idf_escape(key($auto_increment)) : "");
+ return (count($auto_increment) == 1 ? " RETURNING " . idf_escape(key($auto_increment)) : "");
}
function insertUpdate($table, $rows, $primary) {
}
function last_id($result) {
- return (is_object($result) ? $result->fetch_column(0) : 0);
+ return (is_object($result) && $result->num_rows ? $result->fetch_column(0) : 0);
}
function explain($connection, $query) {
* @return bool
*/
function insert($table, $set) {
- return queries($this->insertSql($table, $set));
+ return queries("INSERT INTO " . table($table) . ($set
+ ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")"
+ : " DEFAULT VALUES"
+ ) . $this->insertReturning($table));
}
- /** Get SQL query to insert data into table
+ /** Get RETURNING clause for INSERT queries, PostgreSQL specific
* @param string
- * @param array same as insert()
* @return string
*/
- protected function insertSql($table, $set) {
- return "INSERT INTO " . table($table) . ($set
- ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")"
- : " DEFAULT VALUES"
- );
+ function insertReturning($table) {
+ return "";
}
/** Insert or update data in table
$result = ($_POST["delete"]
? $driver->delete($TABLE, $where_check)
: ($_POST["clone"]
- ? queries("INSERT $query$where_check")
+ ? queries("INSERT $query$where_check" . $driver->insertReturning($TABLE))
: $driver->update($TABLE, $set, $where_check)
)
);