summaryrefslogtreecommitdiff
path: root/src/application/mystic/forum/Database.php
diff options
context:
space:
mode:
authorJonas Kohl2024-12-22 13:06:42 +0100
committerJonas Kohl2024-12-22 13:06:42 +0100
commit08e4128ddce9dcffe0a4224ae57ad664609935b2 (patch)
tree87f5160bfa5203d46c5c301d530e51d11cf5efe7 /src/application/mystic/forum/Database.php
parentbf15bdf4639c61d9855cc76b4e58463eabbd6760 (diff)
Add statisticsv0.7.0
Diffstat (limited to 'src/application/mystic/forum/Database.php')
-rw-r--r--src/application/mystic/forum/Database.php38
1 files changed, 27 insertions, 11 deletions
diff --git a/src/application/mystic/forum/Database.php b/src/application/mystic/forum/Database.php
index 632b2d6..1c2d710 100644
--- a/src/application/mystic/forum/Database.php
+++ b/src/application/mystic/forum/Database.php
@@ -17,12 +17,14 @@ use mystic\forum\orm\Entity;
use mystic\forum\utils\ArrayUtils;
use mystic\forum\utils\StringUtils;
use PgSql\Connection;
+use PgSql\Result;
use ReflectionClass;
use ReflectionNamedType;
use ReflectionProperty;
class Database {
private Connection $connection;
+ private int $queryCount = 0;
private const PRIMARY_KEY = 0b0000_0001;
private const NOT_NULL = 0b0000_0010;
@@ -38,6 +40,20 @@ class Database {
return hex2bin(substr($enc, 2));
}
+ public function getQueryCount(): int {
+ return $this->queryCount;
+ }
+
+ protected function queryParams(string $query, array $params): Result|false {
+ ++$this->queryCount;
+ return \pg_query_params ($this->connection, $query, $params);
+ }
+
+ protected function query(string $query): Result|false {
+ ++$this->queryCount;
+ return \pg_query ($this->connection, $query);
+ }
+
public static function generateId(int $length = 64): string {
static $charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
static $charsetLength = strlen($charset);
@@ -323,7 +339,7 @@ class Database {
foreach (self::getColumnValues($entity, $cols) as $i => $value)
$values[$i] = $value;
$query = "INSERT INTO $tableName VALUES (" . implode(",", ArrayUtils::fill(fn($i) => "$" . ($i + 1), count($cols))) . ");";
- $result = \pg_query_params($this->connection, $query, $values);
+ $result = $this->queryParams($query, $values);
if ($result === false)
throw new \RuntimeException("Insert failed: " . \pg_last_error($this->connection));
\pg_free_result($result);
@@ -338,7 +354,7 @@ class Database {
if ($primaryCol === null)
throw new \RuntimeException("Fetching an entity requires a primary key column to be specified");
$query = "SELECT * FROM $tableName WHERE $primaryCol = \$1 LIMIT 1;";
- $result = \pg_query_params($this->connection, $query, [ $entity->{$cols[$primaryCol]["propertyName"]} ]);
+ $result = $this->queryParams($query, [ $entity->{$cols[$primaryCol]["propertyName"]} ]);
if ($result === false)
throw new \RuntimeException("Fetch failed: " . \pg_last_error($this->connection));
$row = \pg_fetch_assoc($result);
@@ -371,7 +387,7 @@ class Database {
}
$whereClause = implode(" AND ", $whereClause);
$query = "SELECT * FROM $tableName WHERE $whereClause LIMIT 1;";
- $result = \pg_query_params($this->connection, $query, $columnValues);
+ $result = $this->queryParams($query, $columnValues);
if ($result === false)
throw new \RuntimeException("Fetch failed: " . \pg_last_error($this->connection));
$row = \pg_fetch_assoc($result);
@@ -388,7 +404,7 @@ class Database {
$reflClass = new ReflectionClass($entityClassName);
$cols = self::getColumns($reflClass);
$query = "SELECT * FROM $tableName;";
- $result = \pg_query($this->connection, $query);
+ $result = $this->query($query);
if ($result === false)
throw new \RuntimeException("Fetch failed: " . \pg_last_error($this->connection));
$items = [];
@@ -408,9 +424,9 @@ class Database {
$cols = self::getColumns($reflClass);
$query = "SELECT * FROM $tableName $customQuery;";
if ($customQueryParams === null)
- $result = \pg_query($this->connection, $query);
+ $result = $this->query($query);
else
- $result = \pg_query_params($this->connection, $query, $customQueryParams);
+ $result = $this->queryParams($query, $customQueryParams);
if ($result === false)
throw new \RuntimeException("Fetch failed: " . \pg_last_error($this->connection));
$items = [];
@@ -426,9 +442,9 @@ class Database {
public function execCustomQuery(string $query, ?array $customQueryParams = null, ?string $entityClassName = null): array {
if ($customQueryParams === null)
- $result = \pg_query($this->connection, $query);
+ $result = $this->query($query);
else
- $result = \pg_query_params($this->connection, $query, $customQueryParams);
+ $result = $this->queryParams($query, $customQueryParams);
if ($result === false)
throw new \RuntimeException("Query failed: " . \pg_last_error($this->connection));
$cols = null;
@@ -460,7 +476,7 @@ class Database {
if ($primaryCol === null)
throw new \RuntimeException("Deleting an entity requires a primary key column to be specified");
$query = "DELETE FROM $tableName WHERE $primaryCol = \$1;";
- $result = \pg_query_params($this->connection, $query, [ $entity->{$cols[$primaryCol]["propertyName"]} ]);
+ $result = $this->queryParams($query, [ $entity->{$cols[$primaryCol]["propertyName"]} ]);
if ($result === false)
throw new \RuntimeException("Deletion failed: " . \pg_last_error($this->connection));
$num_affected_rows = \pg_affected_rows($result);
@@ -489,7 +505,7 @@ class Database {
$colDef = implode(", ", $qCols);
$query = "UPDATE $tableName SET $colDef WHERE $primaryCol = \$1;";
//$theCols = ArrayUtils::assocFromPairs($filteredCols);
- $result = \pg_query_params($this->connection, $query, self::getColumnValues($entity, $cols));
+ $result = $this->queryParams($query, self::getColumnValues($entity, $cols));
if ($result === false)
throw new \RuntimeException("Update failed: " . \pg_last_error($this->connection));
$num_affected_rows = \pg_affected_rows($result);
@@ -503,7 +519,7 @@ class Database {
$query = "CREATE TABLE IF NOT EXISTS $tableName ();";
foreach ($colDefs as $colDef)
$query .= "ALTER TABLE $tableName ADD COLUMN IF NOT EXISTS $colDef;";
- $result = \pg_query($this->connection, $query);
+ $result = $this->query($query);
if ($result === false)
throw new \RuntimeException("Table creation failed: " . \pg_last_error($this->connection));
\pg_free_result($result);