<?php

namespace Doctrine\Tests\DBAL\Functional\Schema;

use Doctrine\DBAL\Schema\Index;
use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Schema\View;

class SQLAnywhereSchemaManagerTest extends SchemaManagerFunctionalTestCase
{
    public function testCreateAndListViews()
    {
        $this->createTestTable('view_test_table');

        $name = "doctrine_test_view";
        $sql = "SELECT * from DBA.view_test_table";

        $view = new View($name, $sql);

        $this->_sm->dropAndCreateView($view);

        $views = $this->_sm->listViews();

        $this->assertEquals(1, count($views), "Database has to have one view.");
        $this->assertInstanceOf('Doctrine\DBAL\Schema\View', $views[$name]);
        $this->assertEquals($name, $views[$name]->getName());
        $this->assertEquals($sql, $views[$name]->getSql());
    }

    public function testDropAndCreateAdvancedIndex()
    {
        $table = $this->getTestTable('test_create_advanced_index');
        $this->_sm->dropAndCreateTable($table);
        $this->_sm->dropAndCreateIndex(
            new Index('test', array('test'), true, false, array('clustered', 'with_nulls_not_distinct', 'for_olap_workload')),
            $table->getName()
        );

        $tableIndexes = $this->_sm->listTableIndexes('test_create_advanced_index');
        $this->assertInternalType('array', $tableIndexes);
        $this->assertEquals('test', $tableIndexes['test']->getName());
        $this->assertEquals(array('test'), $tableIndexes['test']->getColumns());
        $this->assertTrue($tableIndexes['test']->isUnique());
        $this->assertFalse($tableIndexes['test']->isPrimary());
        $this->assertTrue($tableIndexes['test']->hasFlag('clustered'));
        $this->assertTrue($tableIndexes['test']->hasFlag('with_nulls_not_distinct'));
        $this->assertTrue($tableIndexes['test']->hasFlag('for_olap_workload'));
    }

    public function testListTableColumnsWithFixedStringTypeColumn()
    {
        $table = new Table('list_table_columns_char');
        $table->addColumn('id', 'integer', array('notnull' => true));
        $table->addColumn('test', 'string', array('fixed' => true));
        $table->setPrimaryKey(array('id'));

        $this->_sm->dropAndCreateTable($table);

        $columns = $this->_sm->listTableColumns('list_table_columns_char');

        $this->assertArrayHasKey('test', $columns);
        $this->assertTrue($columns['test']->getFixed());
    }
}