auraphp/Aura.SqlQuery

Quoting problem with cast() on postgres

Opened this issue · 2 comments

I'm on postgres and am writing a select that converts an integer field to varchar, so I can compare using "like". The 2.x branch misquotes the cast structure's datatype.

<?php
$select = $this->queryFactory->newSelect();
$select->cols(['street_number'])
        ->from('addresses')
        ->where('cast(street_number as varchar) like ?', '10%');
return $select->getStatement();
SELECT
    street_number
FROM
    "addresses"
WHERE
    cast(street_number AS "varchar) like :_1_"

3.x does this as well - the issue is with naive quoting on the AS statement - see

https://github.com/auraphp/Aura.SqlQuery/blob/3.x/src/Common/Quoter.php#L88

I'm doing a getStatement and regexing the fix out of the final query for now, as fixing this is not a small thing
Probably need to change the strripos check to be smarter( regex?) or change the CAST to be a pgsql specific builder

@auroraeosrose as you mentioned this recently, does this have the same problem for the PR #142 . Or does this resolve the issue ? If possible could you do a test on that branch ? There were some requests for releasing 3.x and I was just looking into the issues and PR's.