This commit is contained in:
Philipp 2022-07-13 00:27:39 +02:00
parent d74e57ef2c
commit 74c5c66cb5
No known key found for this signature in database
GPG key ID: 24A7501396EB5432

View file

@ -23,8 +23,18 @@ namespace Friendica\Util\Writer;
use Friendica\Database\Definition\ViewDefinition; use Friendica\Database\Definition\ViewDefinition;
/**
* SQL writer utility for the db view definition
*/
class ViewDefinitionSqlWriter class ViewDefinitionSqlWriter
{ {
/**
* Creates a complete SQL definition bases on a give View Definition class
*
* @param ViewDefinition $definition The View definition class
*
* @return string The SQL definition as a string
*/
public static function create(ViewDefinition $definition): string public static function create(ViewDefinition $definition): string
{ {
$sqlString = ''; $sqlString = '';
@ -40,11 +50,26 @@ class ViewDefinitionSqlWriter
return $sqlString; return $sqlString;
} }
/**
* Creates the SQL definition to drop a view
*
* @param string $viewName the view name
*
* @return string The SQL definition
*/
public static function dropView(string $viewName): string public static function dropView(string $viewName): string
{ {
return sprintf("DROP VIEW IF EXISTS `%s`", static::escape($viewName)) . ";\n"; return sprintf("DROP VIEW IF EXISTS `%s`", static::escape($viewName)) . ";\n";
} }
/**
* Creates the SQL definition to create a new view
*
* @param string $viewName The view name
* @param array $viewStructure The structure information of the view
*
* @return string The SQL definition
*/
public static function createView(string $viewName, array $viewStructure): string public static function createView(string $viewName, array $viewStructure): string
{ {
$sql_rows = []; $sql_rows = [];
@ -59,6 +84,13 @@ class ViewDefinitionSqlWriter
implode(",\n\t", $sql_rows) . "\n\t" . $viewStructure['query'] . ";\n\n"; implode(",\n\t", $sql_rows) . "\n\t" . $viewStructure['query'] . ";\n\n";
} }
/**
* Standard escaping for SQL definitions
*
* @param string $sqlString the SQL string to escape
*
* @return string escaped SQL string
*/
public static function escape(string $sqlString): string public static function escape(string $sqlString): string
{ {
return str_replace("'", "\\'", $sqlString); return str_replace("'", "\\'", $sqlString);