<?php

namespace Doctrine\Tests\DBAL\Functional\Driver\OCI8;

use Doctrine\DBAL\Driver\OCI8\Driver;
use Doctrine\Tests\DbalFunctionalTestCase;

class StatementTest extends DbalFunctionalTestCase
{
    protected function setUp()
    {
        if (! extension_loaded('oci8')) {
            $this->markTestSkipped('oci8 is not installed.');
        }

        parent::setUp();

        if (! $this->_conn->getDriver() instanceof Driver) {
            $this->markTestSkipped('oci8 only test.');
        }
    }

    /**
     * @dataProvider queryConversionProvider
     */
    public function testQueryConversion($query, array $params, array $expected)
    {
        $this->assertEquals(
            $expected,
            $this->_conn->executeQuery($query, $params)->fetch()
        );
    }

    public static function queryConversionProvider()
    {
        return array(
            'simple' => array(
                'SELECT ? COL1 FROM DUAL',
                array(1),
                array(
                    'COL1' => 1,
                ),
            ),
            'literal-with-placeholder' => array(
                "SELECT '?' COL1, ? COL2 FROM DUAL",
                array(2),
                array(
                    'COL1' => '?',
                    'COL2' => 2,
                ),
            ),
            'literal-with-quotes' => array(
                "SELECT ? COL1, '?\"?''?' \"COL?\" FROM DUAL",
                array(3),
                array(
                    'COL1' => 3,
                    'COL?' => '?"?\'?',
                ),
            ),
            'placeholder-at-the-end' => array(
                'SELECT ? COL1 FROM DUAL WHERE 1 = ?',
                array(4, 1),
                array(
                    'COL1' => 4,
                ),
            ),
            'multi-line-literal' => array(
                "SELECT 'Hello,
World?!' COL1 FROM DUAL WHERE 1 = ?",
                array(1),
                array(
                    'COL1' => 'Hello,
World?!',
                ),
            ),
            'empty-literal' => array(
                "SELECT '' COL1 FROM DUAL",
                array(),
                array(
                    'COL1' => '',
                ),
            ),
        );
    }
}