auraphp / Aura.SqlQuery

Independent query builders for MySQL, PostgreSQL, SQLite, and Microsoft SQL Server.
MIT License
452 stars 86 forks source link

Quoting problem with cast() on postgres #157

Open inghamn opened 6 years ago

inghamn commented 6 years ago

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_"
auroraeosrose commented 2 years ago

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

harikt commented 2 years ago

@auroraeosrose as you mentioned this recently, does this have the same problem for the PR https://github.com/auraphp/Aura.SqlQuery/pull/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.