Skip to content

PHQL generating broken query for Oracle PDO if aliasing tables (extra AS in query) #11799

Closed
@Skydev0h

Description

@Skydev0h

Using PHQL to make a query with joins generates broken PDO query.
For example, next code:

$res = $this->modelsManager->executeQuery('select p.payOrderPosId, o.payDate, a.lastName ' . 
    'from HL\\PayOrderPos p join HL\\PayOrder o on p.payOrderId = o.payOrderId ' .
            'join HL\\Anketa a on a.anketaId = o.anketaId limit 50');

Generates the following query:

SELECT * FROM (SELECT Z1.*, ROWNUM PHALCON_RN FROM 
(SELECT p.PAY_ORDER_POS_ID AS payOrderPosId,
o.PAY_DATE AS payDate, a.LAST_NAME AS lastName FROM PAY_ORDER_POS AS p  
INNER JOIN PAY_ORDER AS o ON p.PAY_ORDER_ID = o.PAY_ORDER_ID 
INNER JOIN ANKETA AS a ON a.ANKETA_ID = o.ANKETA_ID) 
Z1 WHERE ROWNUM <= 50)
SELECT * FROM (SELECT Z1.*, ROWNUM PHALCON_RN FROM (SELECT p.PAY_ORDER_POS_ID AS payOrderPosId, o.PAY_DATE AS payDate, a.LAST_NAME AS lastName FROM PAY_ORDER_POS AS p  INNER JOIN PAY_ORDER AS o ON p.PAY_ORDER_ID = o.PAY_ORDER_ID INNER JOIN ANKETA AS a ON a.ANKETA_ID = o.ANKETA_ID) Z1 WHERE ROWNUM <= 50)

which results in error:
SQLSTATE[HY000]: General error: 907 OCIStmtExecute: ORA-00907: missing right parenthesis (/root/build/php-5.6.17/ext/pdo_oci/oci_statement.c:148)

Trying to query without limit gives another error:

$res = $this->modelsManager->executeQuery('select p.payOrderPosId, o.payDate, a.lastName ' . 
    'from HL\\PayOrderPos p join HL\\PayOrder o on p.payOrderId = o.payOrderId ' .
    'join HL\\Anketa a on a.anketaId = o.anketaId');
SELECT p.PAY_ORDER_POS_ID AS payOrderPosId, o.PAY_DATE AS payDate, a.LAST_NAME AS lastName 
FROM PAY_ORDER_POS AS p  
INNER JOIN PAY_ORDER AS o ON p.PAY_ORDER_ID = o.PAY_ORDER_ID 
INNER JOIN ANKETA AS a ON a.ANKETA_ID = o.ANKETA_ID
SELECT p.PAY_ORDER_POS_ID AS payOrderPosId, o.PAY_DATE AS payDate, a.LAST_NAME AS lastName FROM PAY_ORDER_POS AS p  INNER JOIN PAY_ORDER AS o ON p.PAY_ORDER_ID = o.PAY_ORDER_ID INNER JOIN ANKETA AS a ON a.ANKETA_ID = o.ANKETA_ID

SQLSTATE[HY000]: General error: 933 OCIStmtExecute: ORA-00933: SQL command not properly ended (/root/build/php-5.6.17/ext/pdo_oci/oci_statement.c:148)

Checking this with SQLDeveloper i figured that AS in the table naming should be omitted for Oracle. Therefore correct query is following:

SELECT p.PAY_ORDER_POS_ID AS payOrderPosId, o.PAY_DATE AS payDate, a.LAST_NAME AS lastName 
FROM PAY_ORDER_POS p  
INNER JOIN PAY_ORDER o ON p.PAY_ORDER_ID = o.PAY_ORDER_ID 
INNER JOIN ANKETA a ON a.ANKETA_ID = o.ANKETA_ID

A little more investigation is that the first error about "right paranthesis" is as well caused by extra "AS"es in the query.

Phalcon version: 2.1.0 RC 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions