cycle / database

Database Abstraction Layer, Schema Introspection, Schema Generation, Query Builders
MIT License
53 stars 22 forks source link

šŸ› Parameters are duplicated for subquery when query cache is disabled #117

Closed smelesh closed 9 months ago

smelesh commented 1 year ago

No duplicates šŸ„².

Database

PostgreSQL

What happened?

When queryCache is disabled, sub-query parameters are duplicated in the result statement:

Scenario to reproduce the bug:

$db = new Database(
    name: 'default',
    prefix: '',
    driver: PostgresDriver::create(new PostgresDriverConfig(
        connection: new TcpConnectionConfig(
            database: 'test',
        ),
        queryCache: false,
    )),
);

$subSelect = $db->select()
    ->from('posts AS p')
    ->where('p.feed', 'news');

$select = $db->select()
    ->from(['users as u'])
    ->innerJoin($subSelect, 'p')->on('p.user_id', 'u.id')
    ->where('u.status', 'active');

$this->assertSameQueryWithParameters(
    'SELECT *
            FROM {users} AS {u}
            INNER JOIN (
              SELECT *
              FROM {posts} AS {p}
              WHERE {p}.{feed} = ?
            ) AS {p} ON {p}.{user_id} = {u}.{id}
          WHERE {u}.{status} = ?',
    ['news', 'active'],
    $select
);

Expected parameters: ['news', 'active'] Actual parameters: ['news', 'news', 'active']

Version

database 2.4.1
PHP 8.1
roxblnfk commented 9 months ago

Hi. Could you check MSSQL tests?

smelesh commented 9 months ago

Thanks. Fixed, see details in PR thread.