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]); }