Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Postgre][Entity] cast boolean in entity from PostgreSQL is always true #7483

Open
shishamo opened this issue May 6, 2023 · 10 comments
Open
Labels
enhancement PRs that improve existing functionalities

Comments

@shishamo
Copy link

shishamo commented May 6, 2023

PHP Version

8.1

CodeIgniter4 Version

4.3.4

CodeIgniter4 Installation Method

Composer (as dependency to an existing project)

Which operating systems have you tested for this bug?

macOS

Which server did you use?

apache

Database

PostgreSQL 15.2

What happened?

When try to cast boolean value in entity when use PostgreSQL the value is always true

When check the entity the value true is set as string t, and the value false is set as string f

The BooleanCast cast as (bool) $value so the value always returns true

Steps to Reproduce

class TestEntity extends BaseEntity
{
    protected $casts = [
        'bolean_value'  => 'boolean',
    ];
    protected $datamap = [
        'boleanValue' => 'bolean_value',
    ];
}
class TestModel extends APIBaseModel
{
    protected $table = 'postgresql_table';
    protected $returnType = TestEntity::class;
}
class TestController extends BaseController
{
    protected $modelName = TestModel::class;

    public function find(): Response
    {
        return $this->respond($this->model->first());
    }
}

Expected Output

{
    "boleanValue": false
}

When postgresql DB entry is false but always returns true

Anything else?

No response

@shishamo shishamo added the bug Verified issues on the current code behavior or pull requests that will fix them label May 6, 2023
@shishamo
Copy link
Author

shishamo commented Jun 6, 2023

@kenjis is there any update to that issue?

@kenjis kenjis changed the title Bug: cast boolean in entity from PostgreSQL is always true Bug: [Entity] cast boolean in entity from PostgreSQL is always true Jun 6, 2023
@kenjis
Copy link
Member

kenjis commented Jun 6, 2023

No. I think this is not a bug. The current implementation does not support PostgreSQL bool type.
Supporting it needs an enhancement.
If you need it, try to send a PR to 4.4 branch.

@kenjis kenjis added enhancement PRs that improve existing functionalities and removed bug Verified issues on the current code behavior or pull requests that will fix them labels Jun 6, 2023
@iRedds
Copy link
Collaborator

iRedds commented Jun 6, 2023

You can extend the BooleanCast class and cast the type you need.

@kenjis Entity is a representation of data and is not directly related to the DBMS. I don't think this is a good solution.

@kenjis
Copy link
Member

kenjis commented Jun 6, 2023

@iRedds What do you mean? You think adding PostgreBooleanCast is better?
I think it is better that BooleanCast supports PostgreSQL boolean type column if possible.

@shishamo
Copy link
Author

shishamo commented Jun 6, 2023

<?php

namespace App\Entities\Cast;

use CodeIgniter\Entity\Cast\BooleanCast as BaseCast;

class BooleanCast extends BaseCast
{
    public static function get($value, array $params = []): bool
    {
        if ($value === 't') {
            return true;
        }
        if ($value === 'f') {
            return false;
        }

        return parent::get($value, $params);
    }
}

Actually this is what i have done in my own extended cast.

But i was wondering why it is not handled by CI by default because the Postgre driver exists

@iRedds
Copy link
Collaborator

iRedds commented Jun 6, 2023

@kenjis I think it should be left as is.

@kenjis
Copy link
Member

kenjis commented Jun 6, 2023

@iRedds CI4 supports PostgreSQL but the Entity cannot support boolean type column.
Isn't it a missing feature?

@iRedds
Copy link
Collaborator

iRedds commented Jun 6, 2023

@kenjis But Entity is not part of the database layer. And the desired result can be obtained through a getter or custom type casting.
Now, if we didn’t have the opportunity to get the desired result, then this would be a missing function.

@kenjis kenjis changed the title Bug: [Entity] cast boolean in entity from PostgreSQL is always true [Entity] cast boolean in entity from PostgreSQL is always true Jan 31, 2024
@kenjis
Copy link
Member

kenjis commented Feb 5, 2024

#8243 would solve this issue.

@kenjis kenjis changed the title [Entity] cast boolean in entity from PostgreSQL is always true [Postgre][Entity] cast boolean in entity from PostgreSQL is always true Feb 5, 2024
@shishamo
Copy link
Author

shishamo commented Feb 8, 2024

Thank you @kenjis ~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement PRs that improve existing functionalities
Projects
None yet
Development

No branches or pull requests

3 participants