![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/DB/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\DB; /** * The Database expression converter */ class ExpressionConverter { /** * Maximum length for many MySql identifiers, including database, table, trigger, and column names */ public const MYSQL_IDENTIFIER_LEN = 64; /** * Dictionary maps common words in identifiers to abbreviations * * @var array */ protected static $_translateMap = [ 'address' => 'addr', 'admin' => 'adm', 'attribute' => 'attr', 'enterprise' => 'ent', 'catalog' => 'cat', 'category' => 'ctgr', 'customer' => 'cstr', 'notification' => 'ntfc', 'product' => 'prd', 'session' => 'sess', 'user' => 'usr', 'entity' => 'entt', 'datetime' => 'dtime', 'decimal' => 'dec', 'varchar' => 'vchr', 'index' => 'idx', 'compare' => 'cmp', 'bundle' => 'bndl', 'option' => 'opt', 'gallery' => 'glr', 'media' => 'mda', 'value' => 'val', 'link' => 'lnk', 'title' => 'ttl', 'super' => 'spr', 'label' => 'lbl', 'website' => 'ws', 'aggregat' => 'aggr', 'minimal' => 'min', 'inventory' => 'inv', 'status' => 'sts', 'agreement' => 'agrt', 'layout' => 'lyt', 'resource' => 'res', 'directory' => 'dir', 'downloadable' => 'dl', 'element' => 'elm', 'fieldset' => 'fset', 'checkout' => 'chkt', 'newsletter' => 'nlttr', 'shipping' => 'shpp', 'calculation' => 'calc', 'search' => 'srch', 'query' => 'qr', ]; /** * Shorten name by abbreviating words * * @param string $name * @return string */ public static function shortName($name) { return $name !== null ? strtr($name, self::$_translateMap) : ''; } /** * Add an abbreviation to the dictionary, or replace if it already exists * * @param string $from * @param string $to * @return void */ public static function addTranslate($from, $to) { self::$_translateMap[$from] = $to; } /** * Retrieves shorten entity name. * * Shorten the name of a MySql identifier, by abbreviating common words and hashing if necessary. Prepends the * given prefix to clarify what kind of entity the identifier represents, in case hashing is used. * * @param string $entityName * @param string $prefix * @return string */ public static function shortenEntityName($entityName, $prefix) { if ($entityName !== null && strlen($entityName) > self::MYSQL_IDENTIFIER_LEN) { $shortName = ExpressionConverter::shortName($entityName); if (strlen($shortName) > self::MYSQL_IDENTIFIER_LEN) { // md5() here is not for cryptographic use. // phpcs:ignore Magento2.Security.InsecureFunction $hash = md5($entityName); if (strlen($prefix . $hash) > self::MYSQL_IDENTIFIER_LEN) { $entityName = self::trimHash($hash, $prefix, self::MYSQL_IDENTIFIER_LEN); } else { $entityName = $prefix . $hash; } } else { $entityName = $shortName; } } return $entityName; } /** * Remove superfluous characters from hash * * @param string $hash * @param string $prefix * @param int $maxCharacters * @return string */ private static function trimHash( string $hash, string $prefix, int $maxCharacters ): string { $diff = strlen($hash) + strlen($prefix) - $maxCharacters; $superfluous = intdiv($diff, 2); $odd = $diff % 2; return substr($hash, $superfluous, - ($superfluous + $odd)); } }