build() public static method

Builds an array of tokens by merging their raw value.
public static build ( string | Token[] | TokensList $list ) : string
$list string | Token[] | TokensList The tokens to be built.
return string
 /**
  * @return string
  */
 public function build()
 {
     $fields = '';
     if (!empty($this->fields)) {
         if (is_array($this->fields)) {
             $fields = CreateDefinition::build($this->fields) . ' ';
         } elseif ($this->fields instanceof ArrayObj) {
             $fields = ArrayObj::build($this->fields);
         }
     }
     if ($this->options->has('DATABASE')) {
         return 'CREATE ' . OptionsArray::build($this->options) . ' ' . Expression::build($this->name) . ' ' . OptionsArray::build($this->entityOptions);
     } elseif ($this->options->has('TABLE')) {
         $partition = '';
         if (!empty($this->partitionBy)) {
             $partition .= "\nPARTITION BY " . $this->partitionBy;
         }
         if (!empty($this->partitionsNum)) {
             $partition .= "\nPARTITIONS " . $this->partitionsNum;
         }
         if (!empty($this->subpartitionBy)) {
             $partition .= "\nSUBPARTITION BY " . $this->subpartitionBy;
         }
         if (!empty($this->subpartitionsNum)) {
             $partition .= "\nSUBPARTITIONS " . $this->subpartitionsNum;
         }
         if (!empty($this->partitions)) {
             $partition .= "\n" . PartitionDefinition::build($this->partitions);
         }
         return 'CREATE ' . OptionsArray::build($this->options) . ' ' . Expression::build($this->name) . ' ' . $fields . OptionsArray::build($this->entityOptions) . $partition;
     } elseif ($this->options->has('VIEW')) {
         return 'CREATE ' . OptionsArray::build($this->options) . ' ' . Expression::build($this->name) . ' ' . $fields . ' AS ' . TokensList::build($this->body) . ' ' . OptionsArray::build($this->entityOptions);
     } elseif ($this->options->has('TRIGGER')) {
         return 'CREATE ' . OptionsArray::build($this->options) . ' ' . Expression::build($this->name) . ' ' . OptionsArray::build($this->entityOptions) . ' ' . 'ON ' . Expression::build($this->table) . ' ' . 'FOR EACH ROW ' . TokensList::build($this->body);
     } elseif ($this->options->has('PROCEDURE') || $this->options->has('FUNCTION')) {
         $tmp = '';
         if ($this->options->has('FUNCTION')) {
             $tmp = 'RETURNS ' . DataType::build($this->return);
         }
         return 'CREATE ' . OptionsArray::build($this->options) . ' ' . Expression::build($this->name) . ' ' . ParameterDefinition::build($this->parameters) . ' ' . $tmp . ' ' . TokensList::build($this->body);
     } else {
         return 'CREATE ' . OptionsArray::build($this->options) . ' ' . Expression::build($this->name) . ' ' . TokensList::build($this->body);
     }
     return '';
 }
示例#2
0
 /**
  * @param AlterOperation $component The component to be built.
  * @param array          $options   Parameters for building.
  *
  * @return string
  */
 public static function build($component, array $options = array())
 {
     $ret = $component->options . ' ';
     if (isset($component->field) && $component->field !== '') {
         $ret .= $component->field . ' ';
     }
     $ret .= TokensList::build($component->unknown);
     return $ret;
 }
示例#3
0
 public static function replaceTokens($list, array $find, array $replace)
 {
     /**
      * Whether the first parameter is a list.
      *
      * @var bool
      */
     $isList = $list instanceof TokensList;
     // Parsing the tokens.
     if (!$isList) {
         $list = Lexer::getTokens($list);
     }
     /**
      * The list to be returned.
      *
      * @var array
      */
     $newList = array();
     /**
      * The length of the find pattern is calculated only once.
      *
      * @var int
      */
     $findCount = count($find);
     /**
      * The starting index of the pattern.
      *
      * @var int
      */
     $i = 0;
     while ($i < $list->count) {
         // A sequence may not start with a comment.
         if ($list->tokens[$i]->type === Token::TYPE_COMMENT) {
             $newList[] = $list->tokens[$i];
             ++$i;
             continue;
         }
         /**
          * The index used to parse `$list->tokens`.
          *
          * This index might be running faster than `$k` because some tokens
          * are skipped.
          *
          * @var int
          */
         $j = $i;
         /**
          * The index used to parse `$find`.
          *
          * This index might be running slower than `$j` because some tokens
          * are skipped.
          *
          * @var int
          */
         $k = 0;
         // Checking if the next tokens match the pattern described.
         while ($j < $list->count && $k < $findCount) {
             // Comments are being skipped.
             if ($list->tokens[$j]->type === Token::TYPE_COMMENT) {
                 ++$j;
             }
             if (!static::match($list->tokens[$j], $find[$k])) {
                 // This token does not match the pattern.
                 break;
             }
             // Going to next token and segment of find pattern.
             ++$j;
             ++$k;
         }
         // Checking if the sequence was found.
         if ($k === $findCount) {
             // Inserting new tokens.
             foreach ($replace as $token) {
                 $newList[] = $token;
             }
             // Skipping next `$findCount` tokens.
             $i = $j;
         } else {
             // Adding the same token.
             $newList[] = $list->tokens[$i];
             ++$i;
         }
     }
     return $isList ? new TokensList($newList) : TokensList::build($newList);
 }
示例#4
0
 /**
  * @param AlterOperation $component The component to be built.
  *
  * @return string
  */
 public static function build($component)
 {
     $ret = OptionsArray::build($component->options) . ' ';
     if (!empty($component->field)) {
         $ret .= Expression::build($component->field) . ' ';
     }
     $ret .= TokensList::build($component->unknown);
     return $ret;
 }
示例#5
0
 public function testBuild()
 {
     $list = new TokensList($this->tokens);
     $this->assertEquals('SELECT * FROM `test` ', TokensList::build($list));
 }