diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-09 10:55:03 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-09 13:09:38 +0100 |
| commit | 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch) | |
| tree | 5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/libraries/classes/SystemDatabase.php | |
| parent | 7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff) | |
| download | ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2 ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip | |
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/SystemDatabase.php')
| -rw-r--r-- | srcs/phpmyadmin/libraries/classes/SystemDatabase.php | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/libraries/classes/SystemDatabase.php b/srcs/phpmyadmin/libraries/classes/SystemDatabase.php new file mode 100644 index 0000000..8dc5174 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/SystemDatabase.php @@ -0,0 +1,137 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * hold PhpMyAdmin\SystemDatabase class + * + * @package PhpMyAdmin + */ +declare(strict_types=1); + +namespace PhpMyAdmin; + +use mysqli_result; +use PhpMyAdmin\DatabaseInterface; +use PhpMyAdmin\Relation; +use PhpMyAdmin\Util; + +/** + * Class SystemDatabase + * + * @package PhpMyAdmin + */ +class SystemDatabase +{ + /** + * @var DatabaseInterface + */ + protected $dbi; + + /** + * @var Relation + */ + private $relation; + + /** + * Get instance of SystemDatabase + * + * @param DatabaseInterface $dbi Database interface for the system database + * + */ + public function __construct(DatabaseInterface $dbi) + { + $this->dbi = $dbi; + $this->relation = new Relation($this->dbi); + } + + /** + * Get existing data on transformations applied for + * columns in a particular table + * + * @param string $db Database name looking for + * + * @return mysqli_result Result of executed SQL query + */ + public function getExistingTransformationData($db) + { + $cfgRelation = $this->relation->getRelationsParam(); + + // Get the existing transformation details of the same database + // from pma__column_info table + $pma_transformation_sql = sprintf( + "SELECT * FROM %s.%s WHERE `db_name` = '%s'", + Util::backquote($cfgRelation['db']), + Util::backquote($cfgRelation['column_info']), + $GLOBALS['dbi']->escapeString($db) + ); + + return $this->dbi->tryQuery($pma_transformation_sql); + } + + /** + * Get SQL query for store new transformation details of a VIEW + * + * @param object $pma_transformation_data Result set of SQL execution + * @param array $column_map Details of VIEW columns + * @param string $view_name Name of the VIEW + * @param string $db Database name of the VIEW + * + * @return string SQL query for new transformations + */ + public function getNewTransformationDataSql( + $pma_transformation_data, + array $column_map, + $view_name, + $db + ) { + $cfgRelation = $this->relation->getRelationsParam(); + + // Need to store new transformation details for VIEW + $new_transformations_sql = sprintf( + "INSERT INTO %s.%s (" + . "`db_name`, `table_name`, `column_name`, " + . "`comment`, `mimetype`, `transformation`, " + . "`transformation_options`) VALUES", + Util::backquote($cfgRelation['db']), + Util::backquote($cfgRelation['column_info']) + ); + + $column_count = 0; + $add_comma = false; + + while ($data_row = $this->dbi->fetchAssoc($pma_transformation_data)) { + foreach ($column_map as $column) { + if ($data_row['table_name'] != $column['table_name'] + || $data_row['column_name'] != $column['refering_column'] + ) { + continue; + } + + $new_transformations_sql .= sprintf( + "%s ('%s', '%s', '%s', '%s', '%s', '%s', '%s')", + $add_comma ? ', ' : '', + $db, + $view_name, + isset($column['real_column']) + ? $column['real_column'] + : $column['refering_column'], + $data_row['comment'], + $data_row['mimetype'], + $data_row['transformation'], + $GLOBALS['dbi']->escapeString( + $data_row['transformation_options'] + ) + ); + + $add_comma = true; + $column_count++; + break; + } + + if ($column_count == count($column_map)) { + break; + } + } + + return ($column_count > 0) ? $new_transformations_sql : ''; + } +} |
