Skip to content

Commit 1137041

Browse files
committed
fix: use serialization context in query builders
1 parent 5a4874a commit 1137041

File tree

10 files changed

+49
-22
lines changed

10 files changed

+49
-22
lines changed

packages/database/src/Builder/QueryBuilders/InsertQueryBuilder.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
use Closure;
66
use Tempest\Database\Builder\ModelInspector;
7+
use Tempest\Database\Config\DatabaseDialect;
8+
use Tempest\Database\Database;
79
use Tempest\Database\Exceptions\HasManyRelationCouldNotBeInsterted;
810
use Tempest\Database\Exceptions\HasOneRelationCouldNotBeInserted;
911
use Tempest\Database\Exceptions\ModelDidNotHavePrimaryColumn;
@@ -14,6 +16,7 @@
1416
use Tempest\Database\QueryStatements\InsertStatement;
1517
use Tempest\Database\Virtual;
1618
use Tempest\Intl;
19+
use Tempest\Mapper\Context;
1720
use Tempest\Mapper\SerializerFactory;
1821
use Tempest\Reflection\ClassReflector;
1922
use Tempest\Reflection\PropertyReflector;
@@ -22,6 +25,7 @@
2225
use Tempest\Support\Str\ImmutableString;
2326

2427
use function Tempest\Database\inspect;
28+
use function Tempest\get;
2529
use function Tempest\Support\str;
2630

2731
/**
@@ -40,6 +44,10 @@ final class InsertQueryBuilder implements BuildsQuery
4044

4145
public ModelInspector $model;
4246

47+
private Database $database {
48+
get => get(Database::class, $this->onDatabase);
49+
}
50+
4351
/**
4452
* @param class-string<TModel>|string|TModel $model
4553
*/
@@ -469,7 +477,13 @@ private function serializeValue(PropertyReflector $property, mixed $value): mixe
469477
return null;
470478
}
471479

472-
return $this->serializerFactory->forProperty($property)?->serialize($value) ?? $value;
480+
$context = match ($this->database->dialect) {
481+
DatabaseDialect::MYSQL => Context::DATABASE_MYSQL,
482+
DatabaseDialect::POSTGRESQL => Context::DATABASE_POSTGRESQL,
483+
DatabaseDialect::SQLITE => Context::DATABASE_SQLITE,
484+
};
485+
486+
return $this->serializerFactory->forProperty($property, $context)?->serialize($value) ?? $value;
473487
}
474488

475489
private function serializeIterableValue(string $key, mixed $value): mixed

packages/database/src/Builder/QueryBuilders/UpdateQueryBuilder.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
use Tempest\Database\Builder\ModelInspector;
66
use Tempest\Database\Builder\WhereOperator;
7+
use Tempest\Database\Config\DatabaseDialect;
8+
use Tempest\Database\Database;
79
use Tempest\Database\Exceptions\CouldNotUpdateRelation;
810
use Tempest\Database\Exceptions\HasManyRelationCouldNotBeUpdated;
911
use Tempest\Database\Exceptions\HasOneRelationCouldNotBeUpdated;
@@ -15,6 +17,7 @@
1517
use Tempest\Database\QueryStatements\WhereStatement;
1618
use Tempest\Database\Virtual;
1719
use Tempest\Intl;
20+
use Tempest\Mapper\Context;
1821
use Tempest\Mapper\SerializerFactory;
1922
use Tempest\Reflection\ClassReflector;
2023
use Tempest\Reflection\PropertyReflector;
@@ -45,6 +48,10 @@ final class UpdateQueryBuilder implements BuildsQuery, SupportsWhereStatements
4548

4649
private ?PrimaryKey $primaryKeyForRelations = null;
4750

51+
private Database $database {
52+
get => get(Database::class, $this->onDatabase);
53+
}
54+
4855
public ImmutableArray $wheres {
4956
get => $this->update->where;
5057
}
@@ -253,7 +260,13 @@ private function resolveRelationValue(PropertyReflector $property, string $colum
253260

254261
private function serializeValue(PropertyReflector $property, mixed $value): mixed
255262
{
256-
$serializer = $this->serializerFactory->forProperty($property);
263+
$context = match ($this->database->dialect) {
264+
DatabaseDialect::MYSQL => Context::DATABASE_MYSQL,
265+
DatabaseDialect::POSTGRESQL => Context::DATABASE_POSTGRESQL,
266+
DatabaseDialect::SQLITE => Context::DATABASE_SQLITE,
267+
};
268+
269+
$serializer = $this->serializerFactory->forProperty($property, $context);
257270

258271
if ($value !== null && $serializer !== null) {
259272
return $serializer->serialize($value);

packages/database/src/Serializers/MysqlBooleanSerializer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
#[Context(Context::DATABASE_MYSQL)]
1212
final class MysqlBooleanSerializer implements Serializer
1313
{
14-
public static function for(): string
14+
public static function for(): array
1515
{
16-
return 'bool';
16+
return ['bool', 'boolean'];
1717
}
1818

1919
public function serialize(mixed $input): string

packages/database/src/Serializers/PostgresBooleanSerializer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
#[Context(Context::DATABASE_POSTGRESQL)]
1212
final class PostgresBooleanSerializer implements Serializer
1313
{
14-
public static function for(): string
14+
public static function for(): array
1515
{
16-
return 'bool';
16+
return ['bool', 'boolean'];
1717
}
1818

1919
public function serialize(mixed $input): string

packages/database/src/Serializers/SqliteBooleanSerializer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
#[Context(Context::DATABASE_SQLITE)]
1212
final class SqliteBooleanSerializer implements Serializer
1313
{
14-
public static function for(): string
14+
public static function for(): array
1515
{
16-
return 'bool';
16+
return ['bool', 'boolean'];
1717
}
1818

1919
public function serialize(mixed $input): string

tests/Integration/Database/DtoSerialization/BasicDtoSerializationTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ final class BasicDtoSerializationTest extends FrameworkIntegrationTestCase
2121
{
2222
public function test_simple_dto_serialization(): void
2323
{
24-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
24+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
2525
public string $name = '001_simple_character';
2626

2727
public function up(): QueryStatement
@@ -53,7 +53,7 @@ public function up(): QueryStatement
5353

5454
public function test_simple_dto_serialization_with_named_arguments(): void
5555
{
56-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
56+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
5757
public string $name = '001_simple_character_named_args';
5858

5959
public function up(): QueryStatement
@@ -85,7 +85,7 @@ public function up(): QueryStatement
8585

8686
public function test_dto_with_enums(): void
8787
{
88-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
88+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
8989
public string $name = '002_character_class_infos';
9090

9191
public function up(): QueryStatement
@@ -121,7 +121,7 @@ public function up(): QueryStatement
121121

122122
public function test_dto_with_custom_serialization_name(): void
123123
{
124-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
124+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
125125
public string $name = '003_settings';
126126

127127
public function up(): QueryStatement

tests/Integration/Database/DtoSerialization/NestedDtoSerializationTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ final class NestedDtoSerializationTest extends FrameworkIntegrationTestCase
2020
{
2121
public function test_deeply_nested_dtos(): void
2222
{
23-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
23+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
2424
public string $name = '001_spell_structure';
2525

2626
public function up(): QueryStatement
@@ -82,7 +82,7 @@ public function up(): QueryStatement
8282

8383
public function test_nested_dtos_with_mixed_types(): void
8484
{
85-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
85+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
8686
public string $name = '002_grimoire';
8787

8888
public function up(): QueryStatement

tests/Integration/Database/DtoSerialization/SerializeAsTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public function test_serialize_as_simple_object(): void
2222
$config = $this->container->get(MapperConfig::class);
2323
$config->serializeAs(SimpleSpell::class, 'simple-spell');
2424

25-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
25+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
2626
public string $name = '001_spell_library';
2727

2828
public function up(): QueryStatement
@@ -65,7 +65,7 @@ public function test_serialize_as_nested_objects(): void
6565
$config->serializeAs(MageProfile::class, 'mage-profile');
6666
$config->serializeAs(SimpleSpell::class, 'simple-spell');
6767

68-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
68+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
6969
public string $name = '002_mage_profiles';
7070

7171
public function up(): QueryStatement
@@ -113,7 +113,7 @@ public function test_serialize_as_with_arrays(): void
113113
$config->serializeAs(SpellCollection::class, 'spell-collection');
114114
$config->serializeAs(SimpleSpell::class, 'simple-spell');
115115

116-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
116+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
117117
public string $name = '003_collections';
118118

119119
public function up(): QueryStatement
@@ -166,7 +166,7 @@ public function test_serialize_as_without_explicit_casters(): void
166166
$config = $this->container->get(MapperConfig::class);
167167
$config->serializeAs(MagicItem::class, 'magic-item');
168168

169-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
169+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
170170
public string $name = '004_inventory';
171171

172172
public function up(): QueryStatement

tests/Integration/Database/DtoSerialization/TopLevelArraySerializationTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ final class TopLevelArraySerializationTest extends FrameworkIntegrationTestCase
2020
{
2121
public function test_top_level_array_of_simple_dtos_serialization(): void
2222
{
23-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
23+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
2424
public string $name = '001_array_containers';
2525

2626
public function up(): QueryStatement
@@ -62,7 +62,7 @@ public function up(): QueryStatement
6262

6363
public function test_top_level_array_of_nested_dtos_serialization(): void
6464
{
65-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
65+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
6666
public string $name = '002_array_containers_nested';
6767

6868
public function up(): QueryStatement
@@ -105,7 +105,7 @@ public function up(): QueryStatement
105105

106106
public function test_empty_top_level_array(): void
107107
{
108-
$this->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
108+
$this->database->migrate(CreateMigrationsTable::class, new class implements MigratesUp {
109109
public string $name = '003_array_containers_empty';
110110

111111
public function up(): QueryStatement

tests/Integration/Database/GroupedWhereMethodsTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ protected function setUp(): void
2424
{
2525
parent::setUp();
2626

27-
$this->migrate(CreateMigrationsTable::class, CreateProductTable::class);
27+
$this->database->migrate(CreateMigrationsTable::class, CreateProductTable::class);
2828
$this->seedTestData();
2929
}
3030

0 commit comments

Comments
 (0)