403Webshell
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 :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/perfmon/lib/mysqlidatabase.php
<?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];
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit