Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/perfmon/lib/ |
Upload File : |
<?php namespace Bitrix\Perfmon; class MysqliDatabase extends BaseDatabase { /** * @inheritDoc */ public function getTables($full = true) { $sqlHelper = $this->connection->getSqlHelper(); $dbName = $this->connection->getDatabase(); $tables = []; if ($full) { $tableList = $this->connection->query('show table status'); while ($table = $tableList->fetch()) { $tables[] = [ 'TABLE_NAME' => $table['Name'], 'ENGINE_TYPE' => $table['Comment'] === 'VIEW' ? 'VIEW' : $table['Engine'], 'NUM_ROWS' => $table['Rows'], 'BYTES' => $table['Data_length'], 'BYTES_INDEX' => $table['Index_length'], ]; } } else { $tableList = $this->connection->query('show tables from ' . $sqlHelper->quote($dbName)); while ($table = $tableList->fetch()) { $tables[] = [ 'TABLE_NAME' => $table['Tables_in_' . $dbName], 'ENGINE_TYPE' => '', 'NUM_ROWS' => '', 'BYTES' => '', 'BYTES_INDEX' => '', ]; } } $result = new \CDBResult(); $result->InitFromArray($tables); return $result; } /** * @inheritDoc */ protected function fillTableIndexes($tableName) { $table = $this->schema->tables->search($tableName); if (!$table) { $table = new \Bitrix\Perfmon\Sql\Table($tableName); $sqlHelper = $this->connection->getSqlHelper(); $strSql = 'SHOW INDEXES FROM ' . $sqlHelper->quote($tableName); $indexColumns = []; $unique = []; $fulltext = []; try { $indexList = $this->connection->query($strSql); while ($indexColumn = $indexList->fetch()) { $indexColumns[$indexColumn['Key_name']][$indexColumn['Seq_in_index']] = $indexColumn['Column_name']; $unique[$indexColumn['Key_name']] = !$indexColumn['Non_unique']; $fulltext[$indexColumn['Key_name']] = $indexColumn['Index_type'] === 'FULLTEXT'; } } catch (\Bitrix\Main\DB\SqlQueryException $_) { } foreach ($indexColumns as $indexName => $columns) { $index = new \Bitrix\Perfmon\Sql\Index($indexName, $unique[$indexName], $fulltext[$indexName]); $index->columns = array_values($columns); $table->indexes->add($index); } $this->schema->tables->add($table); } return $table; } /** * @inheritDoc */ public function getTableFields($tableName = false) { $sqlHelper = $this->connection->getSqlHelper(); $strSql = 'SHOW COLUMNS FROM ' . $sqlHelper->quote($tableName); $columnList = $this->connection->query($strSql); $result = []; $resultExt = []; while ($column = $columnList->fetch()) { $canSort = true; $match = []; if (preg_match('/^(varchar|char|varbinary)\\((\\d+)\\)/', $column['Type'], $match)) { $column['DATA_TYPE'] = 'string'; $column['DATA_LENGTH'] = $match[2]; if ($match[2] == 1 && ($column['Default'] === 'N' || $column['Default'] === 'Y')) { $column['ORM_DATA_TYPE'] = 'boolean'; } else { $column['ORM_DATA_TYPE'] = 'string'; } } elseif (preg_match('/^(varchar|char)/', $column['Type'])) { $column['DATA_TYPE'] = 'string'; $column['ORM_DATA_TYPE'] = 'string'; } elseif (preg_match('/^(text|longtext|mediumtext|longblob|mediumblob|blob)/', $column['Type'])) { $canSort = false; $column['DATA_TYPE'] = 'string'; $column['ORM_DATA_TYPE'] = 'text'; } elseif (preg_match('/^(datetime|timestamp)/', $column['Type'])) { $column['DATA_TYPE'] = 'datetime'; $column['ORM_DATA_TYPE'] = 'datetime'; } elseif (preg_match('/^(date)/', $column['Type'])) { $column['DATA_TYPE'] = 'date'; $column['ORM_DATA_TYPE'] = 'date'; } elseif (preg_match('/^(int|smallint|bigint|tinyint|mediumint)/', $column['Type'])) { $column['DATA_TYPE'] = 'int'; $column['ORM_DATA_TYPE'] = 'integer'; } elseif (preg_match('/^(float|double|decimal)/', $column['Type'])) { $column['DATA_TYPE'] = 'double'; $column['ORM_DATA_TYPE'] = 'float'; } else { $canSort = false; $column['DATA_TYPE'] = 'unknown'; $column['ORM_DATA_TYPE'] = 'UNKNOWN'; } $result[$column['Field']] = $column['DATA_TYPE']; $resultExt[$column['Field']] = [ 'type' => $column['DATA_TYPE'], 'length' => $column['DATA_LENGTH'] ?? null, 'nullable' => $column['Null'] !== 'NO', 'default' => $column['Default'], 'sortable' => $canSort, 'orm_type' => $column['ORM_DATA_TYPE'], 'increment' => ($column['Extra'] === 'auto_increment'), 'type~' => $column['Type'], ]; } return [$result, $resultExt]; } }