• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

phpolar / model / 5449748827

pending completion
5449748827

Pull #12

github

web-flow
Merge 068a00ea6 into 190d9e203
Pull Request #12: refactor: use renamed core library

263 of 287 relevant lines covered (91.64%)

7.79 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/src/DataTypeDetectionTrait.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Phpolar\Model;
6

7
use Phpolar\StorageDriver\DataTypeUnknown;
8
use Phpolar\StorageDriver\StorageDriverInterface;
9
use Phpolar\StorageDriver\TypeName;
10
use ReflectionProperty;
11
use ReflectionNamedType;
12
use Stringable;
13

14
/**
15
 * Provides support for configuring column parameters used to create tables.
16
 */
17
trait DataTypeDetectionTrait
18
{
19
    /**
20
     * Uses the property type to determine the data type type.
21
     *
22
     * @api
23
     */
24
    public function getDataType(
25
        string $propName,
26
        StorageDriverInterface $storageDriver
27
    ): Stringable|DataTypeUnknown {
28
        $property = new ReflectionProperty($this, $propName);
10✔
29
        $propertyType = $property->getType();
10✔
30
        return match ($propertyType instanceof ReflectionNamedType) {
10✔
31
            true =>
10✔
32
                $this->getDataTypeFromDeclaredProperty($propertyType, $storageDriver),
10✔
33
            default =>
10✔
34
                $this->getDataTypeFromNotDeclaredProperty($property, $storageDriver),
10✔
35
        };
10✔
36
    }
37

38
    private function getDataTypeFromDeclaredProperty(
39
        ReflectionNamedType $propertyType,
40
        StorageDriverInterface $storageDriver,
41
    ): Stringable|DataTypeUnknown {
42
        $propertyTypeName = $propertyType->getName();
4✔
43
        $typeName = parseTypeName($propertyTypeName);
4✔
44
        return match ($typeName) {
4✔
45
            TypeName::Invalid => new DataTypeUnknown(),
4✔
46
            default => $storageDriver->getDataType($typeName),
4✔
47
        };
4✔
48
    }
49

50
    private function getDataTypeFromNotDeclaredProperty(
51
        ReflectionProperty $property,
52
        StorageDriverInterface $storageDriver,
53
    ): Stringable|DataTypeUnknown {
54
        return match ($property->isInitialized($this)) {
6✔
55
            true => match (is_object($value = $property->getValue($this))) {
6✔
56
                true => match (get_class($value)) {
6✔
57
                    "DateTimeImmutable", "DateTime" =>
6✔
58
                        $storageDriver->getDataType(TypeName::T_DateTime),
6✔
59
                    default => new DataTypeUnknown(),
6✔
60
                },
6✔
61
                default => $storageDriver->getDataType(parseTypeName(gettype($value))),
6✔
62
            },
6✔
63
            default => new DataTypeUnknown(),
6✔
64
        };
6✔
65
    }
66
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc