type fixes

This commit is contained in:
Yuri Kuznetsov
2022-03-10 12:17:04 +02:00
parent 3ffebd2d8d
commit d5ee58cbbc
11 changed files with 171 additions and 21 deletions
@@ -54,23 +54,40 @@ class Converter
private $relationManager;
private $entityDefs;
/**
* @var ?array<string,mixed>
*/
private $entityDefs = null;
/**
* @var string
*/
protected $defaultFieldType = 'varchar';
/**
* @var string
*/
protected $defaultNaming = 'postfix';
/**
* @var array<string,int>
*/
protected $defaultLength = [
'varchar' => 255,
'int' => 11,
];
/**
* @var array<string,mixed>
*/
protected $defaultValue = [
'bool' => false,
];
/**
* params mapping: entityDefs => ORM
* Mapping entityDefs => ORM.
*
* @var array<string,mixed>
*/
protected $fieldAccordances = [
'type' => 'type',
@@ -95,6 +112,9 @@ class Converter
'dependeeAttributeList' => 'dependeeAttributeList',
];
/**
* @var array<string,mixed>
*/
protected $idParams = [
'dbType' => 'varchar',
'len' => 24,
@@ -102,6 +122,8 @@ class Converter
/**
* Permitted entityDefs parameters which will be copied to ormMetadata.
*
* @var string[]
*/
protected $permittedEntityOptions = [
'indexes',
@@ -131,7 +153,8 @@ class Converter
}
/**
* @return array
* @param bool $reload
* @return array<string,mixed>
*/
protected function getEntityDefs($reload = false)
{
@@ -164,6 +187,8 @@ class Converter
/**
* Covert metadata > entityDefs to ORM metadata.
*
* @return array<string,mixed>
*/
public function process(): array
{
@@ -198,6 +223,10 @@ class Converter
return $ormMetadata;
}
/**
* @param array<string,mixed> $entityMetadata
* @return array<string,mixed>
*/
protected function convertEntity(string $entityType, array $entityMetadata): array
{
$ormMetadata = [];
@@ -248,6 +277,10 @@ class Converter
return $ormMetadata;
}
/**
* @param array<string,mixed> $ormMetadata
* @return array<string,mixed>
*/
protected function afterFieldsProcess(array $ormMetadata): array
{
foreach ($ormMetadata as $entityType => &$entityParams) {
@@ -309,6 +342,10 @@ class Converter
return $ormMetadata;
}
/**
* @param array<string,mixed> $ormMetadata
* @return array<string,mixed>
*/
protected function afterProcess(array $ormMetadata): array
{
foreach ($ormMetadata as $entityType => &$entityParams) {
@@ -328,6 +365,9 @@ class Converter
return $ormMetadata;
}
/**
* @param array<string,mixed> $data
*/
protected function obtainForeignType(array $data, string $entityType, string $attribute): ?string
{
$params = $data[$entityType]['fields'][$attribute] ?? [];
@@ -352,6 +392,10 @@ class Converter
return $foreignParams['type'] ?? null;
}
/**
* @param array<string,mixed> $entityMetadata
* @return array<string,mixed>
*/
protected function convertFields(string $entityType, array &$entityMetadata): array
{
// List of unmerged fields with default field definitions in $output.
@@ -421,6 +465,9 @@ class Converter
/**
* Correct fields definitions based on Espo\Custom\Core\Utils\Database\Orm\Fields.
*
* @param array<string,mixed> $ormMetadata
* @return array<string,mixed>
*/
protected function correctFields(string $entityType, array $ormMetadata): array
{
@@ -513,6 +560,11 @@ class Converter
return $ormMetadata;
}
/**
* @param array<string,mixed> $attributeParams
* @param ?array<string,mixed> $fieldTypeMetadata
* @return array<string,mixed>|false
*/
protected function convertField(
string $entityType,
string $attribute,
@@ -559,6 +611,11 @@ class Converter
return $fieldDefs;
}
/**
* @param array<string,mixed> $entityMetadata
* @param array<string,mixed> $ormMetadata
* @return array<string,mixed>
*/
protected function convertLinks(string $entityType, array $entityMetadata, array $ormMetadata): array
{
if (!isset($entityMetadata['links'])) {
@@ -582,6 +639,10 @@ class Converter
return $relationships;
}
/**
* @param array<string,mixed> $attributeParams
* @return array<string,mixed>
*/
protected function getInitValues(array $attributeParams)
{
$values = [];
@@ -617,6 +678,10 @@ class Converter
return $values;
}
/**
* @param array<string,mixed> $ormMetadata
* @return void
*/
protected function applyFullTextSearch(array &$ormMetadata, string $entityType)
{
if (!$this->getDatabaseHelper()->doesTableSupportFulltext(Util::toUnderScore($entityType))) {
@@ -682,6 +747,11 @@ class Converter
}
}
/**
* @param array<string,mixed> $ormMetadata
* @param string $entityType
* @return void
*/
protected function applyIndexes(&$ormMetadata, $entityType)
{
if (isset($ormMetadata[$entityType]['fields'])) {
@@ -715,6 +785,10 @@ class Converter
}
}
/**
* @param array<string,mixed> $defs
* @return array<string,mixed>
*/
protected function createAdditionalEntityTypes(string $entityType, array $defs): array
{
if (empty($defs['additionalTables'])) {
@@ -726,6 +800,10 @@ class Converter
return $additionalDefs;
}
/**
* @param array<string,mixed> $defs
* @return array<string,mixed>
*/
protected function createRelationsEntityDefs(string $entityType, array $defs): array
{
$result = [];
@@ -32,11 +32,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
class Base extends \Espo\Core\Utils\Database\Orm\Base
{
/**
* Start process Orm converting for fields.
* ORM conversion for fields.
*
* @param string $itemName Field name
* @param string $itemName A field name.
* @param string $entityName
* @return array
* @return array<string,mixed>
*/
public function process($itemName, $entityName)
{
@@ -55,8 +55,13 @@ class Base extends \Espo\Core\Utils\Database\Orm\Base
return $convertedDefs;
}
/**
* @param string $fieldName
* @param string $entityType
* @return array<string,mixed>
*/
protected function load($fieldName, $entityType)
{
return [];
}
}
@@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
class Currency extends Base
{
/**
* @param string $fieldName
* @param string $entityType
* @return array<string,mixed>
*/
protected function load($fieldName, $entityType)
{
$alias = $fieldName . 'CurrencyRate';
@@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
class Email extends Base
{
/**
* @param string $fieldName
* @param string $entityType
* @return array<string,mixed>
*/
protected function load($fieldName, $entityType)
{
$foreignJoinAlias = "{$fieldName}{$entityType}{alias}Foreign";
@@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
class File extends Base
{
/**
* @param string $fieldName
* @param string $entityName
* @return array<string,mixed>
*/
protected function load($fieldName, $entityName)
{
$fieldParams = $this->getFieldParams();
@@ -58,8 +63,12 @@ class File extends Base
$data[$entityName]['fields'][$fieldName.'Name']['type'] = 'varchar';
}
if (!empty($fieldParams['defaultAttributes']) && array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes'])) {
$data[$entityName]['fields'][$fieldName.'Id']['default'] = $fieldParams['defaultAttributes'][$fieldName.'Id'];
if (
!empty($fieldParams['defaultAttributes']) &&
array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes'])
) {
$data[$entityName]['fields'][$fieldName.'Id']['default'] =
$fieldParams['defaultAttributes'][$fieldName.'Id'];
}
if (empty($fieldParams['notStorable'])) {
@@ -67,16 +76,16 @@ class File extends Base
$data[$entityName]['fields'][$fieldName . 'Name']['foreign'] = 'name';
$linkName = $fieldName;
$data[$entityName]['relations'] = array();
$data[$entityName]['relations'][$linkName] = array(
$data[$entityName]['relations'] = [];
$data[$entityName]['relations'][$linkName] = [
'type' => 'belongsTo',
'entity' => 'Attachment',
'key' => $linkName.'Id',
'foreignKey' => 'id',
'foreign' => null
);
'foreign' => null,
];
}
return $data;
}
}
}
@@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
class Link extends Base
{
/**
* @param string $fieldName
* @param string $entityName
* @return array<string,mixed>
*/
protected function load($fieldName, $entityName)
{
$fieldParams = $this->getFieldParams();
@@ -63,8 +68,12 @@ class Link extends Base
$data[$entityName]['fields'][$fieldName.'Id']['notStorable'] = true;
}
if (!empty($fieldParams['defaultAttributes']) && array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes'])) {
$data[$entityName]['fields'][$fieldName.'Id']['default'] = $fieldParams['defaultAttributes'][$fieldName.'Id'];
if (
!empty($fieldParams['defaultAttributes']) &&
array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes'])
) {
$data[$entityName]['fields'][$fieldName.'Id']['default'] =
$fieldParams['defaultAttributes'][$fieldName.'Id'];
}
return $data;
@@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
class LinkMultiple extends Base
{
/**
* @param string $fieldName
* @param string $entityName
* @return array<string,mixed>
*/
protected function load($fieldName, $entityName)
{
$data = [
@@ -65,12 +70,14 @@ class LinkMultiple extends Base
if (array_key_exists('orderBy', $fieldParams)) {
$data[$entityName]['fields'][$fieldName . 'Ids']['orderBy'] = $fieldParams['orderBy'];
if (array_key_exists('orderDirection', $fieldParams)) {
$data[$entityName]['fields'][$fieldName . 'Ids']['orderDirection'] = $fieldParams['orderDirection'];
}
}
$columns = $this->getMetadata()->get("entityDefs.{$entityName}.fields.{$fieldName}.columns");
if (!empty($columns)) {
$data[$entityName]['fields'][$fieldName . 'Columns'] = [
'type' => 'jsonObject',
@@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
class LinkOne extends Base
{
/**
* @param string $fieldName
* @param string $entityType
* @return array<string,mixed>
*/
protected function load($fieldName, $entityType)
{
$fieldParams = $this->getFieldParams();
@@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
class LinkParent extends Base
{
/**
* @param string $fieldName
* @param string $entityName
* @return array<string,mixed>
*/
protected function load($fieldName, $entityName)
{
$data = [
@@ -69,11 +74,20 @@ class LinkParent extends Base
$fieldParams = $this->getFieldParams();
if (!empty($fieldParams['defaultAttributes']) && array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes'])) {
$data[$entityName]['fields'][$fieldName.'Id']['default'] = $fieldParams['defaultAttributes'][$fieldName.'Id'];
if (
!empty($fieldParams['defaultAttributes']) &&
array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes'])
) {
$data[$entityName]['fields'][$fieldName.'Id']['default'] =
$fieldParams['defaultAttributes'][$fieldName.'Id'];
}
if (!empty($fieldParams['defaultAttributes']) && array_key_exists($fieldName.'Type', $fieldParams['defaultAttributes'])) {
$data[$entityName]['fields'][$fieldName.'Type']['default'] = $fieldParams['defaultAttributes'][$fieldName.'Type'];
if (
!empty($fieldParams['defaultAttributes']) &&
array_key_exists($fieldName.'Type', $fieldParams['defaultAttributes'])
) {
$data[$entityName]['fields'][$fieldName.'Type']['default'] =
$fieldParams['defaultAttributes'][$fieldName.'Type'];
}
return $data;
@@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
class PersonName extends Base
{
/**
* @param string $fieldName
* @param string $entityType
* @return array<string,mixed>
*/
protected function load($fieldName, $entityType)
{
$format = $this->config->get('personNameFormat');
@@ -73,6 +78,7 @@ class PersonName extends Base
if (empty($fieldNameTrimmed)) {
$fullList[] = "'" . $subFieldName . "'";
continue;
}
@@ -172,10 +178,12 @@ class PersonName extends Base
];
}
/**
* @param string[] $fullList
*/
protected function getSelect(array $fullList, ?string $alias = null): string
{
foreach ($fullList as &$item) {
$rowItem = trim($item, " '");
if (empty($rowItem)) {
@@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
class Phone extends Base
{
/**
* @param string $fieldName
* @param string $entityType
* @return array<string,mixed>
*/
protected function load($fieldName, $entityType)
{
$foreignJoinAlias = "{$fieldName}{$entityType}{alias}Foreign";