1<?php 2/** 3 * `SET` statement. 4 */ 5 6declare(strict_types=1); 7 8namespace PhpMyAdmin\SqlParser\Statements; 9 10use PhpMyAdmin\SqlParser\Components\OptionsArray; 11use PhpMyAdmin\SqlParser\Components\SetOperation; 12use PhpMyAdmin\SqlParser\Statement; 13 14use function trim; 15 16/** 17 * `SET` statement. 18 */ 19class SetStatement extends Statement 20{ 21 /** 22 * The clauses of this statement, in order. 23 * 24 * @see Statement::$CLAUSES 25 * 26 * @var array 27 */ 28 public static $CLAUSES = [ 29 'SET' => [ 30 'SET', 31 3, 32 ], 33 '_END_OPTIONS' => [ 34 '_END_OPTIONS', 35 1, 36 ], 37 ]; 38 39 /** 40 * Possible exceptions in SET statement. 41 * 42 * @var array 43 */ 44 public static $OPTIONS = [ 45 'CHARSET' => [ 46 3, 47 'var', 48 ], 49 'CHARACTER SET' => [ 50 3, 51 'var', 52 ], 53 'NAMES' => [ 54 3, 55 'var', 56 ], 57 'PASSWORD' => [ 58 3, 59 'expr', 60 ], 61 'SESSION' => 3, 62 'GLOBAL' => 3, 63 'PERSIST' => 3, 64 'PERSIST_ONLY' => 3, 65 '@@SESSION' => 3, 66 '@@GLOBAL' => 3, 67 '@@PERSIST' => 3, 68 '@@PERSIST_ONLY' => 3, 69 ]; 70 71 /** @var array */ 72 public static $END_OPTIONS = [ 73 'COLLATE' => [ 74 1, 75 'var', 76 ], 77 'DEFAULT' => 1, 78 ]; 79 80 /** 81 * Options used in current statement. 82 * 83 * @var OptionsArray[] 84 */ 85 public $options; 86 87 /** 88 * The end options of this query. 89 * 90 * @see static::$END_OPTIONS 91 * 92 * @var OptionsArray 93 */ 94 public $end_options; 95 96 /** 97 * The updated values. 98 * 99 * @var SetOperation[] 100 */ 101 public $set; 102 103 /** 104 * @return string 105 */ 106 public function build() 107 { 108 $ret = 'SET ' . OptionsArray::build($this->options) 109 . ' ' . SetOperation::build($this->set) 110 . ' ' . OptionsArray::build($this->end_options); 111 112 return trim($ret); 113 } 114} 115