Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
improved phpDoc types
  • Loading branch information
dg committed Mar 9, 2026
commit 587def9600c0e6d3994b5c5bb1591d2b0e897b1d
4 changes: 4 additions & 0 deletions src/Bridges/DatabaseTracy/ConnectionPanel.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ class ConnectionPanel implements Tracy\IBarPanel
public float $performanceScale = 0.25;
private float $totalTime = 0;
private int $count = 0;

/** @var list<array{Connection, string, ?array<mixed>, list<array<string, mixed>>, ?float, ?int, ?string}> */
private array $queries = [];
private Tracy\BlueScreen $blueScreen;

Expand Down Expand Up @@ -61,6 +63,7 @@ public function __construct(Connection $connection, Tracy\BlueScreen $blueScreen
}


/** @param Nette\Database\ResultSet|\PDOException $result */
private function logQuery(Connection $connection, $result): void
{
if ($this->disabled) {
Expand Down Expand Up @@ -91,6 +94,7 @@ private function logQuery(Connection $connection, $result): void
}


/** @return array{tab: string, panel: string}|null */
public static function renderException(?\Throwable $e): ?array
{
if (!$e instanceof \PDOException) {
Expand Down
16 changes: 14 additions & 2 deletions src/Database/Connection.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class Connection
private int $transactionDepth = 0;


/** @param array<mixed> $options */
public function __construct(
private readonly string $dsn,
#[\SensitiveParameter]
Expand Down Expand Up @@ -131,6 +132,7 @@ public function getReflection(): Reflection

/**
* Sets callback for row preprocessing.
* @param ?(callable(array<mixed>, ResultSet): array<mixed>) $normalizer
*/
public function setRowNormalizer(?callable $normalizer): static
{
Expand Down Expand Up @@ -210,6 +212,7 @@ public function rollBack(): void

/**
* Executes callback inside a transaction.
* @param callable(static): mixed $callback
*/
public function transaction(callable $callback): mixed
{
Expand Down Expand Up @@ -257,7 +260,11 @@ public function query(#[Language('SQL')] string $sql, #[Language('GenericSQL')]
}


/** @deprecated use query() */
/**
* @deprecated use query()
* @param literal-string $sql
* @param array<mixed> $params
*/
public function queryArgs(string $sql, array $params): ResultSet
{
return $this->query($sql, ...$params);
Expand All @@ -266,7 +273,7 @@ public function queryArgs(string $sql, array $params): ResultSet

/**
* @param literal-string $sql
* @return array{string, array}
* @return array{string, array<mixed>}
*/
public function preprocess(string $sql, ...$params): array
{
Expand Down Expand Up @@ -299,6 +306,7 @@ public function fetch(#[Language('SQL')] string $sql, #[Language('GenericSQL')]
/**
* Shortcut for query()->fetchAssoc()
* @param literal-string $sql
* @return ?array<mixed>
*/
public function fetchAssoc(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array
{
Expand All @@ -319,6 +327,7 @@ public function fetchField(#[Language('SQL')] string $sql, #[Language('GenericSQ
/**
* Shortcut for query()->fetchList()
* @param literal-string $sql
* @return ?list<mixed>
*/
public function fetchList(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array
{
Expand All @@ -329,6 +338,7 @@ public function fetchList(#[Language('SQL')] string $sql, #[Language('GenericSQL
/**
* Shortcut for query()->fetchList()
* @param literal-string $sql
* @return ?list<mixed>
*/
public function fetchFields(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array
{
Expand All @@ -339,6 +349,7 @@ public function fetchFields(#[Language('SQL')] string $sql, #[Language('GenericS
/**
* Shortcut for query()->fetchPairs()
* @param literal-string $sql
* @return array<mixed, mixed>
*/
public function fetchPairs(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): array
{
Expand All @@ -349,6 +360,7 @@ public function fetchPairs(#[Language('SQL')] string $sql, #[Language('GenericSQ
/**
* Shortcut for query()->fetchAll()
* @param literal-string $sql
* @return list<Row>
*/
public function fetchAll(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): array
{
Expand Down
5 changes: 3 additions & 2 deletions src/Database/Conventions.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ interface Conventions
{
/**
* Returns primary key for table.
* @return string|list<string>|null
*/
function getPrimary(string $table): string|array|null;

Expand All @@ -25,7 +26,7 @@ function getPrimary(string $table): string|array|null;
* Example:
* (author, book) returns [book, author_id]
*
* @return array|null [referenced table, referenced column]
* @return ?array{string, string}
* @throws AmbiguousReferenceKeyException
*/
function getHasManyReference(string $table, string $key): ?array;
Expand All @@ -36,7 +37,7 @@ function getHasManyReference(string $table, string $key): ?array;
* (book, author) returns [author, author_id]
* (book, translator) returns [author, translator_id]
*
* @return array|null [referenced table, referencing column]
* @return ?array{string, string}
*/
function getBelongsToReference(string $table, string $key): ?array;
}
Expand Down
3 changes: 2 additions & 1 deletion src/Database/Driver.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ function isSupported(string $feature): bool;

/**
* Initializes connection.
* @param array<string, mixed> $options
*/
function initialize(Connection $connection, array $options): void;

Expand Down Expand Up @@ -73,7 +74,7 @@ function getTables(): array;

/**
* Returns metadata for all columns in a table.
* @return list<array{name: string, table: string, nativetype: string, size: ?int, nullable: bool, default: mixed, autoincrement: bool, primary: bool, comment: ?string, vendor: array}>
* @return list<array{name: string, table: string, nativetype: string, size: ?int, nullable: bool, default: mixed, autoincrement: bool, primary: bool, comment: ?string, vendor: array<string, mixed>}>
*/
function getColumns(string $table): array;

Expand Down
3 changes: 3 additions & 0 deletions src/Database/DriverException.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
class DriverException extends \PDOException
{
public ?string $queryString = null;

/** @var array<mixed>|null */
public ?array $params = null;


Expand Down Expand Up @@ -56,6 +58,7 @@ public function getQueryString(): ?string
}


/** @return array<mixed>|null */
public function getParameters(): ?array
{
return $this->params;
Expand Down
22 changes: 20 additions & 2 deletions src/Database/Explorer.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public function rollBack(): void
}


/** @param callable(static): mixed $callback */
public function transaction(callable $callback): mixed
{
return $this->connection->transaction(fn() => $callback($this));
Expand All @@ -71,7 +72,11 @@ public function query(#[Language('SQL')] string $sql, #[Language('GenericSQL')]
}


/** @deprecated use query() */
/**
* @deprecated use query()
* @param literal-string $sql
* @param array<mixed> $params
*/
public function queryArgs(string $sql, array $params): ResultSet
{
return $this->connection->query($sql, ...$params);
Expand Down Expand Up @@ -106,13 +111,21 @@ public function getConventions(): Conventions
}


/**
* @param array<string, mixed> $data
* @param Table\Selection<Table\ActiveRow> $selection
*/
public function createActiveRow(array $data, Table\Selection $selection): Table\ActiveRow
{
return new Table\ActiveRow($data, $selection);
}


/** @internal */
/**
* @internal
* @param Table\Selection<Table\ActiveRow> $refSelection
* @return Table\GroupedSelection<Table\ActiveRow>
*/
public function createGroupedSelection(
Table\Selection $refSelection,
string $table,
Expand All @@ -139,6 +152,7 @@ public function fetch(#[Language('SQL')] string $sql, #[Language('GenericSQL')]
/**
* Shortcut for query()->fetchAssoc()
* @param literal-string $sql
* @return ?array<mixed>
*/
public function fetchAssoc(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array
{
Expand All @@ -159,6 +173,7 @@ public function fetchField(#[Language('SQL')] string $sql, #[Language('GenericSQ
/**
* Shortcut for query()->fetchList()
* @param literal-string $sql
* @return ?list<mixed>
*/
public function fetchList(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array
{
Expand All @@ -169,6 +184,7 @@ public function fetchList(#[Language('SQL')] string $sql, #[Language('GenericSQL
/**
* Shortcut for query()->fetchList()
* @param literal-string $sql
* @return ?list<mixed>
*/
public function fetchFields(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array
{
Expand All @@ -179,6 +195,7 @@ public function fetchFields(#[Language('SQL')] string $sql, #[Language('GenericS
/**
* Shortcut for query()->fetchPairs()
* @param literal-string $sql
* @return array<mixed, mixed>
*/
public function fetchPairs(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): array
{
Expand All @@ -189,6 +206,7 @@ public function fetchPairs(#[Language('SQL')] string $sql, #[Language('GenericSQ
/**
* Shortcut for query()->fetchAll()
* @param literal-string $sql
* @return list<Row>
*/
public function fetchAll(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): array
{
Expand Down
16 changes: 13 additions & 3 deletions src/Database/Helpers.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class Helpers
/** maximum SQL length */
public static int $maxLength = 100;

/** @var array<string, string> */
public static array $typePatterns = [
'^_' => IStructure::FIELD_TEXT, // PostgreSQL arrays
'(TINY|SMALL|SHORT|MEDIUM|BIG|LONG)(INT)?|INT(EGER|\d+| IDENTITY| UNSIGNED)?|(SMALL|BIG|)SERIAL\d*|COUNTER|YEAR|BYTE|LONGLONG|UNSIGNED BIG INT' => IStructure::FIELD_INTEGER,
Expand Down Expand Up @@ -85,6 +86,7 @@ public static function dumpResult(ResultSet $result): void

/**
* Returns syntax highlighted SQL command.
* @param ?array<mixed> $params
*/
public static function dumpSql(string $sql, ?array $params = null, ?Connection $connection = null): string
{
Expand Down Expand Up @@ -164,6 +166,7 @@ public static function dumpSql(string $sql, ?array $params = null, ?Connection $

/**
* Returns column types from result set.
* @return array<string, string> column name => type
*/
public static function detectTypes(\PDOStatement $statement): array
{
Expand Down Expand Up @@ -200,7 +203,11 @@ public static function detectType(string $type): string
}


/** @internal */
/**
* @internal
* @param array<mixed> $row
* @return array<mixed>
*/
public static function normalizeRow(
array $row,
ResultSet $resultSet,
Expand Down Expand Up @@ -245,7 +252,7 @@ public static function normalizeRow(

/**
* Imports SQL dump from file.
* @param ?array<callable(int, ?float): void> $onProgress Called after each query
* @param ?(callable(int, ?float): void) $onProgress Called after each query
* @return int Number of executed commands
* @throws Nette\FileNotFoundException
*/
Expand Down Expand Up @@ -323,6 +330,9 @@ public static function initializeTracy(

/**
* Converts rows to key-value pairs.
* @param array<Row|Table\ActiveRow|array<string, mixed>> $rows
* @param string|int|(\Closure(Row|Table\ActiveRow|array<string, mixed>): array{0: mixed, 1?: mixed})|null $key
* @return array<mixed, mixed>
*/
public static function toPairs(array $rows, string|int|\Closure|null $key, string|int|null $value): array
{
Expand Down Expand Up @@ -388,7 +398,7 @@ public static function findDuplicates(\PDOStatement $statement): string
}


/** @return array{type: ?string, length: ?null, scale: ?null, parameters: ?string} */
/** @return array{type: ?string, length: ?int, scale: ?int, parameters: ?string} */
public static function parseColumnType(string $type): array
{
preg_match('/^([^(]+)(?:\((?:(\d+)(?:,(\d+))?|([^)]+))\))?/', $type, $m, PREG_UNMATCHED_AS_NULL);
Expand Down
6 changes: 5 additions & 1 deletion src/Database/IStructure.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,19 @@ interface IStructure

/**
* Returns tables list.
* @return list<array{name: string, fullName?: string, view: bool}>
*/
function getTables(): array;

/**
* Returns table columns list.
* @return list<array{name: string, table: string, nativetype: string, size: ?int, nullable: bool, default: mixed, autoincrement: bool, primary: bool, vendor: array<string, mixed>}>
*/
function getColumns(string $table): array;

/**
* Returns table primary key.
* @return string|string[]|null
* @return string|list<string>|null
*/
function getPrimaryKey(string $table): string|array|null;

Expand All @@ -55,12 +57,14 @@ function getPrimaryKeySequence(string $table): ?string;
/**
* Returns hasMany reference.
* If a targetTable is not provided, returns references for all tables.
* @return array<string, list<string>>|null table name => list of referencing columns
*/
function getHasManyReference(string $table): ?array;

/**
* Returns belongsTo reference.
* If a column is not provided, returns references for all columns.
* @return ?array<string, string> column name => referenced table name
*/
function getBelongsToReference(string $table): ?array;

Expand Down
2 changes: 1 addition & 1 deletion src/Database/Reflection.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public function __construct(
}


/** @return Table[] */
/** @return list<Table> */
public function getTables(): array
{
return array_values($this->tables);
Expand Down
1 change: 1 addition & 0 deletions src/Database/Reflection/Column.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public function __construct(
public readonly bool $autoIncrement = false,
public readonly bool $primary = false,
public readonly ?string $comment = null,
/** @var array<string, mixed> */
public readonly array $vendor = [],
) {
}
Expand Down
4 changes: 2 additions & 2 deletions src/Database/Reflection/ForeignKey.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ final class ForeignKey
/** @internal */
public function __construct(
public readonly Table $foreignTable,
/** @var Column[] */
/** @var list<Column> */
public readonly array $localColumns,
/** @var Column[] */
/** @var list<Column> */
public readonly array $foreignColumns,
public readonly ?string $name = null,
) {
Expand Down
2 changes: 1 addition & 1 deletion src/Database/Reflection/Index.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ final class Index
{
/** @internal */
public function __construct(
/** @var Column[] */
/** @var list<Column> */
public readonly array $columns,
public readonly bool $unique = false,
public readonly bool $primary = false,
Expand Down
Loading