Beispiel #1
0
 public function insert($force_insert = false)
 {
     global $app;
     $dirty = remove_if_not(function ($c) use($force_insert) {
         return isset($c["id"]) && !isset($c["virtual"]) && ($force_insert || $c["dirty"]);
     }, $this->_values);
     if (!empty($dirty)) {
         if ($this->_values[$this->_keycol]["value"] && !$force_insert) {
             return $this->update($dirty);
         } else {
             $column_names = [];
             $column_refs = [];
             $values = [];
             foreach ($dirty as $dirtycol) {
                 $colon = ":{$dirtycol['id']}";
                 $ref = $dirtycol["type"] == self::COMPRESSED_STRING ? "COMPRESS({$colon})" : $colon;
                 $column_names[] = $app->db()->quote($dirtycol["id"]);
                 $column_refs[] = $ref;
                 $columns[] = $dirtycol;
                 $values[$colon] = $dirtycol["value"];
             }
             $sql = "INSERT INTO {$app->db()->quote($this->_name)} (" . join(", ", $column_names) . ") VALUES (" . join(", ", $column_refs) . ")";
             $app->db()->query($dirty, $sql, $values);
             $this->cleanSlots();
             return $this->_values[$this->_keycol]["value"] = $app->db()->lastInsertID();
         }
     } else {
         return $this->_values[$this->_keycol]["value"];
     }
 }
 public static function Retrieve(callable $func)
 {
     $class = get_called_class();
     self::Memoise($class);
     return remove_if_not($func, self::$_memo[$class]);
 }