Command/CreateFullTextIndexesCommand.php
author ymh <ymh.work@gmail.com>
Thu, 27 Oct 2011 21:26:30 +0200
changeset 19 7051e55a3131
child 23 b435f8055cb4
permissions -rw-r--r--
add missing file, dynamic implementation...
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/*
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * This file is part of the WikiTagBundle package.
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * (c) IRI <http://www.iri.centrepompidou.fr/>
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 *
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * For the full copyright and license information, please view the LICENSE
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * file that was distributed with this source code.
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 */
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
namespace IRI\Bundle\WikiTagBundle\Command;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
use Symfony\Component\Console\Input\InputArgument;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
use Symfony\Component\Console\Input\InputInterface;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
use Symfony\Component\Console\Input\InputOption;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
use Symfony\Component\Console\Output\OutputInterface;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
use Mandango\Mondator\Definition\Definition;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
use Mandango\Mondator\Definition\Property;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
use Mandango\Mondator\Definition\Method;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
use Mandango\Mondator\Dumper;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
class CreateFullTextIndexesCommand extends ContainerAwareCommand
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
{
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    protected function configure()
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    {
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
        parent::configure();
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
        
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        $this
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
            ->setName('wikitag:create-fulltext-indexes')
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
            ->setDescription('Generate the full text indexes for the document table')
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
            ->addArgument('path', InputArgument::OPTIONAL, 'The generation path')
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
            ->addOption("simulate","S",InputOption::VALUE_NONE, "Simulate generation");
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    }
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    protected function execute(InputInterface $input, OutputInterface $output)
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    {
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
        $file = $input->getArgument('path');
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
        $simulate = $input->getOption('simulate');
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        if(is_null($file) || strlen($file) == 0)
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        {
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
            $simulate = true;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
        }
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
        
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        $sql_code = "";
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
        $fields = $this->getContainer()->getParameter('wiki_tag.fields');
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        $def_columns = array();
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
        foreach ( $fields as $name => $field_def)
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        {
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
            if(isset($field_def['type']))
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
            {
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
                $type = $field_def['type'];
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
            }
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
            if(!isset($type) || is_null($type) || strlen($type) == 0)
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
            {
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
                $type = "text";
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
            }
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
            
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
            if($type === 'text')
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
            {
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
                $def_column = "$name(4096)";
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
            }
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
            else
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
            {
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
                $def_column = $name;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
            }
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
            $def_columns[] = $def_column;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
            
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
            $sql_code .= "ALTER IGNORE TABLE wikitag_document DROP INDEX ${name}_document_fulltext_idx;\n";
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
            $sql_code .= "ALTER TABLE wikitag_document ADD FULLTEXT INDEX ${name}_document_fulltext_idx ($def_column);\n";
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
        }
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
        
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
        $sql_code .= "ALTER IGNORE TABLE wikitag_document DROP INDEX all_document_fulltext_idx;\n";
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        $sql_code .= "ALTER TABLE wikitag_document ADD FULLTEXT INDEX all_document_fulltext_idx (".join(",", $def_columns).");\n";
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
        
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
        if($simulate)
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
        {
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
            $output->writeln($sql_code);
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        }
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        else
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        {
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
            $output->writeln("Creating Indexes in $file");
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
            
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
            if(!file_exists(dirname($file)) && !mkdir(dirname($file),0777,true))
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
            {
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
                $output->writeln("Impossible to create folder exitiing.");
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
                die;
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
            }
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
            file_put_contents($file, $sql_code);
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
        }
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    }
7051e55a3131 add missing file, dynamic implementation...
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
}