issue: store main description as comment row
[minimedit.git] / database.inc.php
index aa864d03df32f5dadedba9441512331f5fe10d5c..12a82eb59badad8092c2ed8af8e84307ff90d249 100644 (file)
@@ -8,7 +8,10 @@ class DB
 
        function __construct($config, $options = [])
        {
-               $options += [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ];
+               $options += [
+                       PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+                       PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
+               ];
                $this->dbh = new PDO($config, NULL, NULL, $options);
        }
 
@@ -18,4 +21,49 @@ class DB
                $stmt->execute($params);
                return $stmt;
        }
+
+       function _value($val, &$params)
+       {
+               if (is_array($val)) {
+                       $sql = array_shift($val);
+                       $params = array_merge($params, $val);
+                       return $sql;
+               }
+
+               $params[] = $val;
+               return '?';
+       }
+
+       function set($table, $row, $filter = NULL)
+       {
+               $params = [];
+               if (is_null($filter)) {
+                       $cols = [];
+                       foreach ($row as $col => $val) {
+                               $cols[] = $this->_value($val, $params);
+                       }
+                       $sql = sprintf('INSERT INTO %s (%s) VALUES (%s) RETURNING id',
+                               '"'.$table.'"',
+                               implode(', ', array_keys($row)),
+                               implode(', ', $cols)
+                       );
+               }
+               else {
+                       $sql = 'UPDATE "'.$table.'"';
+                       $cols = [];
+                       foreach ($row as $col => $val) {
+                               $cols[] = $col . ' = ' . $this->_value($val, $params);
+                       }
+
+                       $sql .= ' SET ' . implode(', ', $cols);
+                       if (is_array($filter)) {
+                               $sql .= ' WHERE ' . array_shift($filter);
+                               $params = array_merge($params, $filter);
+                       }
+                       else {
+                               $sql .= ' ' . $filter;
+                       }
+               }
+               return $this->query($sql, $params);
+       }
 }