/** * Creates trigger object from tokens. * <p> * Current position should point to the name of the trigger. * * @param Tokenizer $tokenizer Tokens collection. * * @return Trigger */ public static function create(Tokenizer $tokenizer) { $name = $tokenizer->getCurrentToken()->text; $trigger = new self($name); $tokenizer->resetState(); $definition = ''; while (!$tokenizer->endOfInput()) { $definition .= $tokenizer->getCurrentToken()->text; $tokenizer->nextToken(); } $trigger->setBody($definition); return $trigger; }
/** * Fills some schema part with information from one DDL statement. * * @param Tokenizer $tokenizer Statement tokens. * * @return void * @throws NotSupportedException */ protected function executeStatement(Tokenizer $tokenizer) { /** @var Table $table */ $tokenizer->resetState(); $tokenizer->skipWhiteSpace(); if ($tokenizer->testUpperText('CREATE')) { $this->executeCreate($tokenizer); } elseif ($tokenizer->testUpperText('INSERT')) { //skip insert into } elseif ($tokenizer->testUpperText('SET')) { //skip set identity_insert } elseif ($tokenizer->testUpperText('ALTER')) { $this->executeAlter($tokenizer); } elseif ($tokenizer->testUpperText('IF')) { $tokenizer->skipWhiteSpace(); if ($tokenizer->testUpperText('OBJECT_ID')) { while (!$tokenizer->endOfInput()) { if ($tokenizer->nextToken()->upper === 'CREATE') { break; } } $tokenizer->nextToken(); $tokenizer->skipWhiteSpace(); if ($tokenizer->testUpperText('TABLE')) { $this->executeCreateTable($tokenizer); } else { throw new NotSupportedException("'CREATE TABLE' expected. line:" . $tokenizer->getCurrentToken()->line); } } elseif ($tokenizer->testUpperText('NOT')) { $tokenizer->skipWhiteSpace(); if ($tokenizer->testUpperText('EXISTS')) { while (!$tokenizer->endOfInput()) { if ($tokenizer->nextToken()->upper === 'CREATE') { break; } } $tokenizer->nextToken(); $tokenizer->skipWhiteSpace(); if ($tokenizer->testUpperText('UNIQUE')) { $unique = true; $tokenizer->skipWhiteSpace(); } else { $unique = false; } if ($tokenizer->testUpperText('INDEX')) { $this->executeCreateIndex($tokenizer, $unique); } else { throw new NotSupportedException("'CREATE INDEX' expected. line:" . $tokenizer->getCurrentToken()->line); } } else { throw new NotSupportedException("'NOT EXISTS' expected. line:" . $tokenizer->getCurrentToken()->line); } } else { throw new NotSupportedException("'OBJECT_ID' expected. line:" . $tokenizer->getCurrentToken()->line); } } elseif (!$tokenizer->endOfInput()) { throw new NotSupportedException("'CREATE' expected. line:" . $tokenizer->getCurrentToken()->line); } }