diff -r 6f16b9fd6a17 -r 7051e55a3131 Command/CreateFullTextIndexesCommand.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Command/CreateFullTextIndexesCommand.php Thu Oct 27 21:26:30 2011 +0200 @@ -0,0 +1,95 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace IRI\Bundle\WikiTagBundle\Command; + + +use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Mandango\Mondator\Definition\Definition; +use Mandango\Mondator\Definition\Property; +use Mandango\Mondator\Definition\Method; +use Mandango\Mondator\Dumper; + +class CreateFullTextIndexesCommand extends ContainerAwareCommand +{ + protected function configure() + { + parent::configure(); + + $this + ->setName('wikitag:create-fulltext-indexes') + ->setDescription('Generate the full text indexes for the document table') + ->addArgument('path', InputArgument::OPTIONAL, 'The generation path') + ->addOption("simulate","S",InputOption::VALUE_NONE, "Simulate generation"); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $file = $input->getArgument('path'); + $simulate = $input->getOption('simulate'); + if(is_null($file) || strlen($file) == 0) + { + $simulate = true; + } + + $sql_code = ""; + $fields = $this->getContainer()->getParameter('wiki_tag.fields'); + $def_columns = array(); + foreach ( $fields as $name => $field_def) + { + if(isset($field_def['type'])) + { + $type = $field_def['type']; + } + if(!isset($type) || is_null($type) || strlen($type) == 0) + { + $type = "text"; + } + + if($type === 'text') + { + $def_column = "$name(4096)"; + } + else + { + $def_column = $name; + } + $def_columns[] = $def_column; + + $sql_code .= "ALTER IGNORE TABLE wikitag_document DROP INDEX ${name}_document_fulltext_idx;\n"; + $sql_code .= "ALTER TABLE wikitag_document ADD FULLTEXT INDEX ${name}_document_fulltext_idx ($def_column);\n"; + } + + $sql_code .= "ALTER IGNORE TABLE wikitag_document DROP INDEX all_document_fulltext_idx;\n"; + $sql_code .= "ALTER TABLE wikitag_document ADD FULLTEXT INDEX all_document_fulltext_idx (".join(",", $def_columns).");\n"; + + + if($simulate) + { + $output->writeln($sql_code); + } + else + { + $output->writeln("Creating Indexes in $file"); + + if(!file_exists(dirname($file)) && !mkdir(dirname($file),0777,true)) + { + $output->writeln("Impossible to create folder exitiing."); + die; + } + file_put_contents($file, $sql_code); + } + + } +} \ No newline at end of file