Skip to content

Commit 21043ab

Browse files
committed
Use SQL read statement instead of simple list of escaped field names
1 parent 07aa380 commit 21043ab

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

src/Pool.php

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,10 @@ public function getGeneratedTypeFields(string $type): array
437437
return $this->types[$this->requireRegisteredType($type)]['generated_fields'];
438438
}
439439

440+
public function getTypeSqlReadStatements(string $type): array
441+
{
442+
return $this->types[$this->requireRegisteredType($type)]['sql_read_statements'];
443+
}
440444
public function getTypeProperty(string $type, string $property, callable $callback): mixed
441445
{
442446
$registered_type = $this->requireRegisteredType($type);
@@ -456,7 +460,7 @@ private function getSelectOneByType(string $type): string
456460
if (empty($this->types[$type]['sql_select_by_ids'])) {
457461
$this->types[$type]['sql_select_by_ids'] = sprintf(
458462
'SELECT %s FROM %s WHERE `id` IN ? ORDER BY `id`',
459-
$this->getEscapedTypeFields($type),
463+
$this->getTypeFieldsReadStatement($type),
460464
$this->getTypeTable($type, true)
461465
);
462466
}
@@ -491,21 +495,21 @@ public function getTypeFieldsReadStatement(string $type): string
491495
{
492496
return $this->getTypeProperty(
493497
$type,
494-
'escaped_fields',
498+
'field_read_statements',
495499
function () use ($type) {
496500
$table_name = $this->getTypeTable($type, true);
497501

498-
$escaped_field_names = [];
502+
$field_read_statements = [];
499503

500-
foreach ($this->getTypeFields($type) as $field_name) {
501-
$escaped_field_names[] = $table_name . '.' . $this->connection->escapeFieldName($field_name);
504+
foreach ($this->getTypeSqlReadStatements($type) as $sql_read_statement) {
505+
$field_read_statements[] = $sql_read_statement;
502506
}
503507

504508
foreach ($this->getGeneratedTypeFields($type) as $field_name) {
505-
$escaped_field_names[] = $table_name . '.' . $this->connection->escapeFieldName($field_name);
509+
$field_read_statements[] = $table_name . '.' . $this->connection->escapeFieldName($field_name);
506510
}
507511

508-
return implode(',', $escaped_field_names);
512+
return implode(',', $field_read_statements);
509513
}
510514
);
511515
}
@@ -671,6 +675,7 @@ public function registerType(string ...$types): PoolInterface
671675
'table_name' => $default_properties['table_name'],
672676
'fields' => $default_properties['entity_fields'],
673677
'generated_fields' => $default_properties['generated_entity_fields'],
678+
'sql_read_statements' => $default_properties['sql_read_statements'],
674679
'order_by' => $default_properties['order_by'],
675680
];
676681
}

test/src/GeneratedFieldsTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ public function testPoolIncludesGeneratedFieldsInTypeFieldsList()
117117
$escaped_type_fields = $this->pool->getEscapedTypeFields(StatsSnapshot::class);
118118
$this->assertIsString($escaped_type_fields);
119119
$this->assertStringContainsString('is_used_on_day', $escaped_type_fields);
120+
121+
$type_fields_read_statement = $this->pool->getTypeFieldsReadStatement(StatsSnapshot::class);
122+
$this->assertIsString($type_fields_read_statement);
123+
$this->assertStringContainsString('is_used_on_day', $type_fields_read_statement);
120124
}
121125

122126
public function testGeneratedFieldsAreHydrated()

0 commit comments

Comments
 (0)