Skip to content

Commit

Permalink
cs
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Sep 4, 2024
1 parent 7c4be75 commit caaaa42
Show file tree
Hide file tree
Showing 9 changed files with 77 additions and 73 deletions.
56 changes: 30 additions & 26 deletions src/Database/Driver.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ interface Driver
SupportSequence = 'sequence',
SupportSelectUngroupedColumns = 'ungrouped_cols',
SupportMultiInsertAsSelect = 'insert_as_select',
SupportMultiColumnAsOrCond = 'multi_column_as_or',
SupportMultiColumnAsOrCondition = 'multi_column_as_or',
SupportSubselect = 'subselect',
SupportSchema = 'schema';

Expand All @@ -32,6 +32,12 @@ interface Driver
SUPPORT_SUBSELECT = 'subselect',
SUPPORT_SCHEMA = 'schema';

/**
* Checks if the engine supports a specific feature.
* @param self::Support* $feature
*/
function isSupported(string $feature): bool;

/**
* Initializes connection.
*/
Expand All @@ -42,56 +48,54 @@ function initialize(Connection $connection, array $options): void;
*/
function convertException(\PDOException $e): DriverException;

/**
* Delimites identifier for use in a SQL statement.
*/
/********************* SQL utilities ****************d*g**/

/** Escapes an identifier for use in an SQL statement. */
function delimite(string $name): string;

/**
* Formats date-time for use in a SQL statement.
*/
/** Formats a date-time value for use in an SQL statement. */
function formatDateTime(\DateTimeInterface $value): string;

/**
* Formats date-time interval for use in a SQL statement.
*/
/** Formats a date-time interval for use in an SQL statement. */
function formatDateInterval(\DateInterval $value): string;

/**
* Encodes string for use in a LIKE statement.
*/
/** Encodes string for use in a LIKE statement. */
function formatLike(string $value, int $pos): string;

/**
* Injects LIMIT/OFFSET to the SQL query.
*/
/** Applies LIMIT and OFFSET clauses to an SQL query. */
function applyLimit(string &$sql, ?int $limit, ?int $offset): void;

/********************* reflection ****************d*g**/

/** @return list<array{name: string, fullName: string, view: bool}> */
/**
* Returns a list of all tables in the database.
* @return list<array{name: string, fullName: string, view: bool}>
*/
function getTables(): array;

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

/** @return list<array{name: string, columns: list<string>, unique: bool, primary: bool}> */
/**
* Returns information about indexes in a table.
* @return list<array{name: string, columns: list<string>, unique: bool, primary: bool}>
*/
function getIndexes(string $table): array;

/** @return list<array{name: string, local: string, table: string, foreign: string}> */
/**
* Returns information about foreign keys in a table.
* @return list<array{name: string, local: string, table: string, foreign: string}>
*/
function getForeignKeys(string $table): array;

/**
* Returns associative array of detected types (IStructure::FIELD_*) in result set.
* @return array<string, string>
*/
function getColumnTypes(\PDOStatement $statement): array;

/**
* Cheks if driver supports specific property
* @param self::Support* $item
*/
function isSupported(string $item): bool;
}


Expand Down
12 changes: 6 additions & 6 deletions src/Database/Drivers/MsSqlDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ public function initialize(Nette\Database\Connection $connection, array $options
}


public function isSupported(string $feature): bool
{
return $feature === self::SupportSubselect;
}


public function convertException(\PDOException $e): Nette\Database\DriverException
{
return Nette\Database\DriverException::from($e);
Expand Down Expand Up @@ -216,10 +222,4 @@ public function getColumnTypes(\PDOStatement $statement): array
{
return Nette\Database\Helpers::detectTypes($statement);
}


public function isSupported(string $item): bool
{
return $item === self::SupportSubselect;
}
}
20 changes: 10 additions & 10 deletions src/Database/Drivers/MySqlDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,16 @@ public function initialize(Nette\Database\Connection $connection, array $options
}


public function isSupported(string $feature): bool
{
// MULTI_COLUMN_AS_OR_COND due to mysql bugs:
// - http://bugs.mysql.com/bug.php?id=31188
// - http://bugs.mysql.com/bug.php?id=35819
// and more.
return $feature === self::SupportSelectUngroupedColumns || $feature === self::SupportMultiColumnAsOrCondition;
}


public function convertException(\PDOException $e): Nette\Database\DriverException
{
$code = $e->errorInfo[1] ?? null;
Expand Down Expand Up @@ -211,14 +221,4 @@ public function getColumnTypes(\PDOStatement $statement): array

return $types;
}


public function isSupported(string $item): bool
{
// MULTI_COLUMN_AS_OR_COND due to mysql bugs:
// - http://bugs.mysql.com/bug.php?id=31188
// - http://bugs.mysql.com/bug.php?id=35819
// and more.
return $item === self::SupportSelectUngroupedColumns || $item === self::SupportMultiColumnAsOrCond;
}
}
12 changes: 6 additions & 6 deletions src/Database/Drivers/OciDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ public function initialize(Nette\Database\Connection $connection, array $options
}


public function isSupported(string $feature): bool
{
return $feature === self::SupportSequence || $feature === self::SupportSubselect;
}


public function convertException(\PDOException $e): Nette\Database\DriverException
{
$code = $e->errorInfo[1] ?? null;
Expand Down Expand Up @@ -133,10 +139,4 @@ public function getColumnTypes(\PDOStatement $statement): array
{
return [];
}


public function isSupported(string $item): bool
{
return $item === self::SupportSequence || $item === self::SupportSubselect;
}
}
12 changes: 6 additions & 6 deletions src/Database/Drivers/OdbcDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ public function initialize(Nette\Database\Connection $connection, array $options
}


public function isSupported(string $feature): bool
{
return $feature === self::SupportSubselect;
}


public function convertException(\PDOException $e): Nette\Database\DriverException
{
return Nette\Database\DriverException::from($e);
Expand Down Expand Up @@ -104,10 +110,4 @@ public function getColumnTypes(\PDOStatement $statement): array
{
return [];
}


public function isSupported(string $item): bool
{
return $item === self::SupportSubselect;
}
}
12 changes: 6 additions & 6 deletions src/Database/Drivers/PgSqlDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ public function initialize(Nette\Database\Connection $connection, array $options
}


public function isSupported(string $feature): bool
{
return $feature === self::SupportSequence || $feature === self::SupportSubselect || $feature === self::SupportSchema;
}


public function convertException(\PDOException $e): Nette\Database\DriverException
{
$code = $e->errorInfo[0] ?? null;
Expand Down Expand Up @@ -244,12 +250,6 @@ public function getColumnTypes(\PDOStatement $statement): array
}


public function isSupported(string $item): bool
{
return $item === self::SupportSequence || $item === self::SupportSubselect || $item === self::SupportSchema;
}


/**
* Converts: schema.name => "schema"."name"
*/
Expand Down
12 changes: 6 additions & 6 deletions src/Database/Drivers/SqliteDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ public function initialize(Nette\Database\Connection $connection, array $options
}


public function isSupported(string $feature): bool
{
return $feature === self::SupportMultiInsertAsSelect || $feature === self::SupportSubselect || $feature === self::SupportMultiColumnAsOrCondition;
}


public function convertException(\PDOException $e): Nette\Database\DriverException
{
$code = $e->errorInfo[1] ?? null;
Expand Down Expand Up @@ -243,10 +249,4 @@ public function getColumnTypes(\PDOStatement $statement): array

return $types;
}


public function isSupported(string $item): bool
{
return $item === self::SupportMultiInsertAsSelect || $item === self::SupportSubselect || $item === self::SupportMultiColumnAsOrCond;
}
}
12 changes: 6 additions & 6 deletions src/Database/Drivers/SqlsrvDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ public function initialize(Nette\Database\Connection $connection, array $options
}


public function isSupported(string $feature): bool
{
return $feature === self::SupportSubselect;
}


public function convertException(\PDOException $e): Nette\Database\DriverException
{
return Nette\Database\DriverException::from($e);
Expand Down Expand Up @@ -234,10 +240,4 @@ public function getColumnTypes(\PDOStatement $statement): array

return $types;
}


public function isSupported(string $item): bool
{
return $item === self::SupportSubselect;
}
}
2 changes: 1 addition & 1 deletion src/Database/Table/SqlBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -808,7 +808,7 @@ protected function addConditionComposition(
array &$conditionsParameters,
): bool
{
if ($this->driver->isSupported(Driver::SupportMultiColumnAsOrCond)) {
if ($this->driver->isSupported(Driver::SupportMultiColumnAsOrCondition)) {
$conditionFragment = '(' . implode(' = ? AND ', $columns) . ' = ?) OR ';
$condition = substr(str_repeat($conditionFragment, count($parameters)), 0, -4);
return $this->addCondition($condition, [Nette\Utils\Arrays::flatten($parameters)], $conditions, $conditionsParameters);
Expand Down

0 comments on commit caaaa42

Please sign in to comment.