quote($P);}function escape_string($X){return substr(q($X),1,-1);}function number($X){return preg_replace('~[^0-9]+~','',$X);}function number_type(){return'((?$W){unset($og[$y][$ce]);if(is_array($W)){$og[$y][stripslashes($ce)]=$W;$og[]=&$og[$y][stripslashes($ce)];}else$og[$y][stripslashes($ce)]=($Sc?$W:stripslashes($W));}}}}function bracket_escape($v,$Ca=false){static$mi=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return strtr($v,($Ca?array_flip($mi):$mi));}function min_version($Ti,$ye="",$g=null){global$f;if(!$g)$g=$f;$gh=$g->server_info;if($ye&&preg_match('~([\d.]+)-MariaDB~',$gh,$A)){$gh=$A[1];$Ti=$ye;}return$Ti&&version_compare($gh,$Ti)>=0;}function charset($f){return(min_version("5.5.3",0,$f)?"utf8mb4":"utf8");}function ini_bool($Od){$X=ini_get($Od);return(preg_match('~^(on|true|yes)$~i',$X)||(int)$X);}function sid(){static$I;if($I===null)$I=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$I;}function set_password($Si,$M,$V,$E){$_SESSION["pwds"][$Si][$M][$V]=($_COOKIE["adminer_key"]&&is_string($E)?array(encrypt_string($E,$_COOKIE["adminer_key"])):$E);}function get_password(){$I=get_session("pwds");if(is_array($I))$I=($_COOKIE["adminer_key"]?decrypt_string($I[0],$_COOKIE["adminer_key"]):false);return$I;}function get_val($G,$n=0){global$f;return$f->result($G,$n);}function get_vals($G,$d=0){global$f;$I=array();$H=$f->query($G);if(is_object($H)){while($J=$H->fetch_row())$I[]=$J[$d];}return$I;}function get_key_vals($G,$g=null,$jh=true){global$f;if(!is_object($g))$g=$f;$I=array();$H=$g->query($G);if(is_object($H)){while($J=$H->fetch_row()){if($jh)$I[$J[0]]=$J[1];else$I[]=$J[0];}}return$I;}function get_rows($G,$g=null,$m="

"){global$f;$pb=(is_object($g)?$g:$f);$I=array();$H=$pb->query($G);if(is_object($H)){while($J=$H->fetch_assoc())$I[]=$J;}elseif(!$H&&!is_object($g)&&$m&&(defined('Adminer\PAGE_HEADER')||$m=="-- "))echo$m.error()."\n";return$I;}function unique_array($J,$x){foreach($x as$w){if(preg_match("~PRIMARY|UNIQUE~",$w["type"])){$I=array();foreach($w["columns"]as$y){if(!isset($J[$y]))continue 2;$I[$y]=$J[$y];}return$I;}}}function escape_key($y){if(preg_match('(^([\w(]+)('.str_replace("_",".*",preg_quote(idf_escape("_"))).')([ \w)]+)$)',$y,$A))return$A[1].idf_escape(idf_unescape($A[2])).$A[3];return idf_escape($y);}function where($Z,$o=array()){global$f;$I=array();foreach((array)$Z["where"]as$y=>$X){$y=bracket_escape($y,1);$d=escape_key($y);$Qc=$o[$y]["type"];$I[]=$d.(JUSH=="sql"&&$Qc=="json"?" = CAST(".q($X)." AS JSON)":(JUSH=="sql"&&is_numeric($X)&&preg_match('~\.~',$X)?" LIKE ".q($X):(JUSH=="mssql"&&strpos($Qc,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$X)):" = ".unconvert_field($o[$y],q($X)))));if(JUSH=="sql"&&preg_match('~char|text~',$Qc)&&preg_match("~[^ -@]~",$X))$I[]="$d = ".q($X)." COLLATE ".charset($f)."_bin";}foreach((array)$Z["null"]as$y)$I[]=escape_key($y)." IS NULL";return implode(" AND ",$I);}function where_check($X,$o=array()){parse_str($X,$Ta);remove_slashes(array(&$Ta));return where($Ta,$o);}function where_link($t,$d,$Y,$rf="="){return"&where%5B$t%5D%5Bcol%5D=".urlencode($d)."&where%5B$t%5D%5Bop%5D=".urlencode(($Y!==null?$rf:"IS NULL"))."&where%5B$t%5D%5Bval%5D=".urlencode($Y);}function convert_fields($e,$o,$L=array()){$I="";foreach($e as$y=>$X){if($L&&!in_array(idf_escape($y),$L))continue;$wa=convert_field($o[$y]);if($wa)$I.=", $wa AS ".idf_escape($y);}return$I;}function cookie($B,$Y,$se=2592000){global$ba;return header("Set-Cookie: $B=".urlencode($Y).($se?"; expires=".gmdate("D, d M Y H:i:s",time()+$se)." GMT":"")."; path=".preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]).($ba?"; secure":"")."; HttpOnly; SameSite=lax",false);}function get_settings($xb){parse_str($_COOKIE[$xb],$kh);return$kh;}function get_setting($y,$xb="adminer_settings"){$kh=get_settings($xb);return$kh[$y];}function save_settings($kh,$xb="adminer_settings"){return cookie($xb,http_build_query($kh+get_settings($xb)));}function restart_session(){if(!ini_bool("session.use_cookies"))session_start();}function stop_session($Zc=false){$Ki=ini_bool("session.use_cookies");if(!$Ki||$Zc){session_write_close();if($Ki&&@ini_set("session.use_cookies",false)===false)session_start();}}function&get_session($y){return$_SESSION[$y][DRIVER][SERVER][$_GET["username"]];}function set_session($y,$X){$_SESSION[$y][DRIVER][SERVER][$_GET["username"]]=$X;}function auth_url($Si,$M,$V,$j=null){global$Zb;preg_match('~([^?]*)\??(.*)~',remove_from_uri(implode("|",array_keys($Zb))."|username|".($j!==null?"db|":"").session_name()),$A);return"$A[1]?".(sid()?SID."&":"").($Si!="server"||$M!=""?urlencode($Si)."=".urlencode($M)."&":"")."username=".urlencode($V).($j!=""?"&db=".urlencode($j):"").($A[2]?"&$A[2]":"");}function is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function redirect($ue,$Je=null){if($Je!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($ue!==null?$ue:$_SERVER["REQUEST_URI"]))][]=$Je;}if($ue!==null){if($ue=="")$ue=".";header("Location: $ue");exit;}}function query_redirect($G,$ue,$Je,$xg=true,$Cc=true,$Lc=false,$ai=""){global$f,$m,$b;if($Cc){$_h=microtime(true);$Lc=!$f->query($G);$ai=format_time($_h);}$uh="";if($G)$uh=$b->messageQuery($G,$ai,$Lc);if($Lc){$m=error().$uh.script("messagesPrint();");return false;}if($xg)redirect($ue,$Je.$uh);return true;}function queries($G){global$f;static$sg=array();static$_h;if(!$_h)$_h=microtime(true);if($G===null)return array(implode("\n",$sg),format_time($_h));$sg[]=(preg_match('~;$~',$G)?"DELIMITER ;;\n$G;\nDELIMITER ":$G).";";return$f->query($G);}function apply_queries($G,$S,$zc='Adminer\table'){foreach($S as$Q){if(!queries("$G ".$zc($Q)))return false;}return true;}function queries_redirect($ue,$Je,$xg){list($sg,$ai)=queries(null);return query_redirect($sg,$ue,$Je,$xg,false,!$xg,$ai);}function format_time($_h){return sprintf('%.3f s',max(0,microtime(true)-$_h));}function relative_uri(){return str_replace(":","%3a",preg_replace('~^[^?]*/([^?]*)~','\1',$_SERVER["REQUEST_URI"]));}function remove_from_uri($Nf=""){return substr(preg_replace("~(?<=[?&])($Nf".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function get_file($y,$Mb=false,$Qb=""){$Rc=$_FILES[$y];if(!$Rc)return null;foreach($Rc as$y=>$X)$Rc[$y]=(array)$X;$I='';foreach($Rc["error"]as$y=>$m){if($m)return$m;$B=$Rc["name"][$y];$ii=$Rc["tmp_name"][$y];$tb=file_get_contents($Mb&&preg_match('~\.gz$~',$B)?"compress.zlib://$ii":$ii);if($Mb){$_h=substr($tb,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$_h))$tb=iconv("utf-16","utf-8",$tb);elseif($_h=="\xEF\xBB\xBF")$tb=substr($tb,3);}$I.=$tb;if($Qb)$I.=(preg_match("($Qb\\s*\$)",$tb)?"":$Qb)."\n\n";}return$I;}function upload_error($m){$Fe=($m==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($m?'Unable to upload a file.'.($Fe?" ".sprintf('Maximum allowed file size is %sB.',$Fe):""):'File does not exist.');}function repeat_pattern($Xf,$qe){return str_repeat("$Xf{0,65535}",$qe/65535)."$Xf{0,".($qe%65535)."}";}function is_utf8($X){return(preg_match('~~u',$X)&&!preg_match('~[\0-\x8\xB\xC\xE-\x1F]~',$X));}function shorten_utf8($P,$qe=80,$Fh=""){if(!preg_match("(^(".repeat_pattern("[\t\r\n -\x{10FFFF}]",$qe).")($)?)u",$P,$A))preg_match("(^(".repeat_pattern("[\t\r\n -~]",$qe).")($)?)",$P,$A);return h($A[1]).$Fh.(isset($A[2])?"":"");}function format_number($X){return strtr(number_format($X,0,".",','),preg_split('~~u','0123456789',-1,PREG_SPLIT_NO_EMPTY));}function friendly_url($X){return preg_replace('~\W~i','-',$X);}function table_status1($Q,$Mc=false){$I=table_status($Q,$Mc);return($I?:array("Name"=>$Q));}function column_foreign_keys($Q){global$b;$I=array();foreach($b->foreignKeys($Q)as$q){foreach($q["source"]as$X)$I[$X][]=$q;}return$I;}function fields_from_edit(){global$l;$I=array();foreach((array)$_POST["field_keys"]as$y=>$X){if($X!=""){$X=bracket_escape($X);$_POST["function"][$X]=$_POST["field_funs"][$y];$_POST["fields"][$X]=$_POST["field_vals"][$y];}}foreach((array)$_POST["fields"]as$y=>$X){$B=bracket_escape($y,1);$I[$B]=array("field"=>$B,"privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>1,"auto_increment"=>($y==$l->primary),);}return$I;}function dump_headers($Cd,$Re=false){global$b;$I=$b->dumpHeaders($Cd,$Re);$Jf=$_POST["output"];if($Jf!="text")header("Content-Disposition: attachment; filename=".$b->dumpFilename($Cd).".$I".($Jf!="file"&&preg_match('~^[0-9a-z]+$~',$Jf)?".$Jf":""));session_write_close();ob_flush();flush();return$I;}function dump_csv($J){foreach($J as$y=>$X){if(preg_match('~["\n,;\t]|^0|\.\d*0$~',$X)||$X==="")$J[$y]='"'.str_replace('"','""',$X).'"';}echo implode(($_POST["format"]=="csv"?",":($_POST["format"]=="tsv"?"\t":";")),$J)."\r\n";}function apply_sql_function($s,$d){return($s?($s=="unixepoch"?"DATETIME($d, '$s')":($s=="count distinct"?"COUNT(DISTINCT ":strtoupper("$s("))."$d)"):$d);}function get_temp_dir(){$I=ini_get("upload_tmp_dir");if(!$I){if(function_exists('sys_get_temp_dir'))$I=sys_get_temp_dir();else{$p=@tempnam("","");if(!$p)return false;$I=dirname($p);unlink($p);}}return$I;}function file_open_lock($p){if(is_link($p))return;$r=@fopen($p,"c+");if(!$r)return;chmod($p,0660);if(!flock($r,LOCK_EX)){fclose($r);return;}return$r;}function file_write_unlock($r,$Gb){rewind($r);fwrite($r,$Gb);ftruncate($r,strlen($Gb));file_unlock($r);}function file_unlock($r){flock($r,LOCK_UN);fclose($r);}function password_file($h){$p=get_temp_dir()."/adminer.key";if(!$h&&!file_exists($p))return false;$r=file_open_lock($p);if(!$r)return false;$I=stream_get_contents($r);if(!$I){$I=rand_string();file_write_unlock($r,$I);}else file_unlock($r);return$I;}function rand_string(){return md5(uniqid(mt_rand(),true));}function select_value($X,$_,$n,$Zh){global$b;if(is_array($X)){$I="";foreach($X as$ce=>$W)$I.="".($X!=array_values($X)?"".h($ce):"")."".select_value($W,$_,$n,$Zh);return"$I
";}if(!$_)$_=$b->selectLink($X,$n);if($_===null){if(is_mail($X))$_="mailto:$X";if(is_url($X))$_=$X;}$I=$b->editVal($X,$n);if($I!==null){if(!is_utf8($I))$I="\0";elseif($Zh!=""&&is_shortable($n))$I=shorten_utf8($I,max(0,+$Zh));else$I=h($I);}return$b->selectVal($I,$_,$n,$X);}function is_mail($mc){$xa='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$Yb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$Xf="$xa+(\\.$xa+)*@($Yb?\\.)+$Yb";return is_string($mc)&&preg_match("(^$Xf(,\\s*$Xf)*\$)i",$mc);}function is_url($P){$Yb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return preg_match("~^(https?)://($Yb?\\.)+$Yb(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$P);}function is_shortable($n){return preg_match('~char|text|json|lob|geometry|point|linestring|polygon|string|bytea~',$n["type"]);}function count_rows($Q,$Z,$Wd,$nd){$G=" FROM ".table($Q).($Z?" WHERE ".implode(" AND ",$Z):"");return($Wd&&(JUSH=="sql"||count($nd)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$nd).")$G":"SELECT COUNT(*)".($Wd?" FROM (SELECT 1$G GROUP BY ".implode(", ",$nd).") x":$G));}function slow_query($G){global$b,$T,$l;$j=$b->database();$bi=$b->queryTimeout();$oh=$l->slowQuery($G,$bi);$g=null;if(!$oh&&support("kill")&&is_object($g=connect($b->credentials()))&&($j==""||$g->select_db($j))){$fe=$g->result(connection_id());echo script("var timeout = setTimeout(function () { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$fe&token=$T'); }, 1000 * $bi);");}ob_flush();flush();$I=@get_key_vals(($oh?:$G),$g,false);if($g){echo script("clearTimeout(timeout);");ob_flush();flush();}return$I;}function get_token(){$vg=rand(1,1e6);return($vg^$_SESSION["token"]).":$vg";}function verify_token(){list($T,$vg)=explode(":",$_POST["token"]);return($vg^$_SESSION["token"])==$T;}function lzw_decompress($Ha){$Ub=256;$Ia=8;$cb=array();$Gg=0;$Hg=0;for($t=0;$t=$Ia){$Hg-=$Ia;$cb[]=$Gg>>$Hg;$Gg&=(1<<$Hg)-1;$Ub++;if($Ub>>$Ia)$Ia++;}}$Tb=range("\0","\xFF");$I="";foreach($cb as$t=>$bb){$lc=$Tb[$bb];if(!isset($lc))$lc=$cj.$cj[0];$I.=$lc;if($t)$Tb[]=$cj.$lc[0];$cj=$lc;}return$I;}function script($rh,$li="\n"){return"$rh$li";}function script_src($Hi){return"\n";}function nonce(){return' nonce="'.get_nonce().'"';}function target_blank(){return' target="_blank" rel="noreferrer noopener"';}function h($P){return str_replace("\0","�",htmlspecialchars($P,ENT_QUOTES,'utf-8'));}function nl_br($P){return str_replace("\n","
",$P);}function checkbox($B,$Y,$Wa,$he="",$qf="",$ab="",$ie=""){$I="".($qf?script("qsl('input').onclick = function () { $qf };",""):"");return($he!=""||$ab?"$I".h($he)."":$I);}function optionlist($vf,$Yg=null,$Li=false){$I="";foreach($vf as$ce=>$W){$wf=array($ce=>$W);if(is_array($W)){$I.='';$wf=$W;}foreach($wf as$y=>$X)$I.=''.h($X);if(is_array($W))$I.='';}return$I;}function html_select($B,$vf,$Y="",$pf="",$ie=""){return"".($pf?script("qsl('select').onchange = function () { $pf };",""):"");}function html_radios($B,$vf,$Y=""){$I="";foreach($vf as$y=>$X)$I.="";return$I;}function confirm($Je="",$Zg="qsl('input')"){return script("$Zg.onclick = function () { return confirm('".($Je?js_escape($Je):'Are you sure?')."'); };","");}function print_fieldset($u,$pe,$Wi=false){echo"

","$pe",script("qsl('a').onclick = partial(toggle, 'fieldset-$u');",""),"","
\n";}function selectSearchPrint($Z,$e,$x){print_fieldset("search",'Search',$Z);foreach($x as$t=>$w){if($w["type"]=="FULLTEXT")echo"
(".implode(", ",array_map('Adminer\h',$w["columns"])).") AGAINST"," ",script("qsl('input').oninput = selectFieldChange;",""),checkbox("boolean[$t]",1,isset($_GET["boolean"][$t]),"BOOL"),"
\n";}$Ra="this.parentNode.firstChild.onchange();";foreach(array_merge((array)$_GET["where"],array(array()))as$t=>$X){if(!$X||("$X[col]$X[val]"!=""&&in_array($X["op"],$this->operators)))echo"
".select_input(" name='where[$t][col]'",$e,$X["col"],($X?"selectFieldChange":"selectAddRow"),"(".'anywhere'.")"),html_select("where[$t][op]",$this->operators,$X["op"],$Ra),"",script("mixin(qsl('input'), {oninput: function () { $Ra }, onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});",""),"
\n";}echo"\n";}function selectOrderPrint($xf,$e,$x){print_fieldset("sort",'Sort',$xf);$t=0;foreach((array)$_GET["order"]as$y=>$X){if($X!=""){echo"
".select_input(" name='order[$t]'",$e,$X,"selectFieldChange"),checkbox("desc[$t]",1,isset($_GET["desc"][$y]),'descending')."
\n";$t++;}}echo"
".select_input(" name='order[$t]'",$e,"","selectAddRow"),checkbox("desc[$t]",1,false,'descending')."
\n","\n";}function selectLimitPrint($z){echo"
".'Limit'."
","",script("qsl('input').oninput = selectFieldChange;",""),"
\n";}function selectLengthPrint($Zh){if($Zh!==null)echo"
".'Text length'."
","","
\n";}function selectActionPrint($x){echo"
".'Action'."
",""," ","\n","var indexColumns = ";$e=array();foreach($x as$w){$Eb=reset($w["columns"]);if($w["type"]!="FULLTEXT"&&$Eb)$e[$Eb]=1;}$e[""]=1;foreach($e as$y=>$X)json_row($y);echo";\n","selectFieldChange.call(qs('#form')['select']);\n","\n","
\n";}function selectCommandPrint(){return!information_schema(DB);}function selectImportPrint(){return!information_schema(DB);}function selectEmailPrint($nc,$e){}function selectColumnsProcess($e,$x){global$l;$L=array();$nd=array();foreach((array)$_GET["columns"]as$y=>$X){if($X["fun"]=="count"||($X["col"]!=""&&(!$X["fun"]||in_array($X["fun"],$l->functions)||in_array($X["fun"],$l->grouping)))){$L[$y]=apply_sql_function($X["fun"],($X["col"]!=""?idf_escape($X["col"]):"*"));if(!in_array($X["fun"],$l->grouping))$nd[]=$L[$y];}}return array($L,$nd);}function selectSearchProcess($o,$x){global$f,$l;$I=array();foreach($x as$t=>$w){if($w["type"]=="FULLTEXT"&&$_GET["fulltext"][$t]!="")$I[]="MATCH (".implode(", ",array_map('Adminer\idf_escape',$w["columns"])).") AGAINST (".q($_GET["fulltext"][$t]).(isset($_GET["boolean"][$t])?" IN BOOLEAN MODE":"").")";}foreach((array)$_GET["where"]as$y=>$X){if("$X[col]$X[val]"!=""&&in_array($X["op"],$this->operators)){$hg="";$ob=" $X[op]";if(preg_match('~IN$~',$X["op"])){$Hd=process_length($X["val"]);$ob.=" ".($Hd!=""?$Hd:"(NULL)");}elseif($X["op"]=="SQL")$ob=" $X[val]";elseif($X["op"]=="LIKE %%")$ob=" LIKE ".$this->processInput($o[$X["col"]],"%$X[val]%");elseif($X["op"]=="ILIKE %%")$ob=" ILIKE ".$this->processInput($o[$X["col"]],"%$X[val]%");elseif($X["op"]=="FIND_IN_SET"){$hg="$X[op](".q($X["val"]).", ";$ob=")";}elseif(!preg_match('~NULL$~',$X["op"]))$ob.=" ".$this->processInput($o[$X["col"]],$X["val"]);if($X["col"]!="")$I[]=$hg.$l->convertSearch(idf_escape($X["col"]),$X,$o[$X["col"]]).$ob;else{$hb=array();foreach($o as$B=>$n){if(isset($n["privileges"]["where"])&&(preg_match('~^[-\d.'.(preg_match('~IN$~',$X["op"])?',':'').']+$~',$X["val"])||!preg_match('~'.number_type().'|bit~',$n["type"]))&&(!preg_match("~[\x80-\xFF]~",$X["val"])||preg_match('~char|text|enum|set~',$n["type"]))&&(!preg_match('~date|timestamp~',$n["type"])||preg_match('~^\d+-\d+-\d+~',$X["val"])))$hb[]=$hg.$l->convertSearch(idf_escape($B),$X,$n).$ob;}$I[]=($hb?"(".implode(" OR ",$hb).")":"1 = 0");}}}return$I;}function selectOrderProcess($o,$x){$I=array();foreach((array)$_GET["order"]as$y=>$X){if($X!="")$I[]=(preg_match('~^((COUNT\(DISTINCT |[A-Z0-9_]+\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\)|COUNT\(\*\))$~',$X)?$X:idf_escape($X)).(isset($_GET["desc"][$y])?" DESC":"");}return$I;}function selectLimitProcess(){return(isset($_GET["limit"])?$_GET["limit"]:"50");}function selectLengthProcess(){return(isset($_GET["text_length"])?$_GET["text_length"]:"100");}function selectEmailProcess($Z,$bd){return false;}function selectQueryBuild($L,$Z,$nd,$xf,$z,$D){return"";}function messageQuery($G,$ai,$Lc=false){global$l;restart_session();$zd=&get_session("queries");if(!$zd[$_GET["db"]])$zd[$_GET["db"]]=array();if(strlen($G)>1e6)$G=preg_replace('~[\x80-\xFF]+$~','',substr($G,0,1e6))."\n…";$zd[$_GET["db"]][]=array($G,time(),$ai);$wh="sql-".count($zd[$_GET["db"]]);$I="".'SQL command'."\n";if(!$Lc&&($Yi=$l->warnings())){$u="warnings-".count($zd[$_GET["db"]]);$I="".'Warnings'.", $I\n";}return" ".@date("H:i:s").""." $I';}function editRowPrint($Q,$o,$J,$Fi){}function editFunctions($n){global$l;$I=($n["null"]?"NULL/":"");$Fi=isset($_GET["select"])||where($_GET);foreach($l->editFunctions as$y=>$id){if(!$y||(!isset($_GET["call"])&&$Fi)){foreach($id as$Xf=>$X){if(!$Xf||preg_match("~$Xf~",$n["type"]))$I.="/$X";}}if($y&&!preg_match('~set|blob|bytea|raw|file|bool~',$n["type"]))$I.="/SQL";}if($n["auto_increment"]&&!$Fi)$I='Auto Increment';return explode("/",$I);}function editInput($Q,$n,$ya,$Y){if($n["type"]=="enum")return(isset($_GET["select"])?" ":"").($n["null"]?" ":"").enum_input("radio",$ya,$n,$Y,$Y===0?0:null);return"";}function editHint($Q,$n,$Y){return"";}function processInput($n,$Y,$s=""){if($s=="SQL")return$Y;$B=$n["field"];$I=q($Y);if(preg_match('~^(now|getdate|uuid)$~',$s))$I="$s()";elseif(preg_match('~^current_(date|timestamp)$~',$s))$I=$s;elseif(preg_match('~^([+-]|\|\|)$~',$s))$I=idf_escape($B)." $s $I";elseif(preg_match('~^[+-] interval$~',$s))$I=idf_escape($B)." $s ".(preg_match("~^(\\d+|'[0-9.: -]') [A-Z_]+\$~i",$Y)?$Y:$I);elseif(preg_match('~^(addtime|subtime|concat)$~',$s))$I="$s(".idf_escape($B).", $I)";elseif(preg_match('~^(md5|sha1|password|encrypt)$~',$s))$I="$s($I)";return unconvert_field($n,$I);}function dumpOutput(){$I=array('text'=>'open','file'=>'save');if(function_exists('gzencode'))$I['gz']='gzip';return$I;}function dumpFormat(){return(support("dump")?array('sql'=>'SQL'):array())+array('csv'=>'CSV,','csv;'=>'CSV;','tsv'=>'TSV');}function dumpDatabase($j){}function dumpTable($Q,$Dh,$Zd=0){if($_POST["format"]!="sql"){echo"\xef\xbb\xbf";if($Dh)dump_csv(array_keys(fields($Q)));}else{if($Zd==2){$o=array();foreach(fields($Q)as$B=>$n)$o[]=idf_escape($B)." $n[full_type]";$h="CREATE TABLE ".table($Q)." (".implode(", ",$o).")";}else$h=create_sql($Q,$_POST["auto_increment"],$Dh);set_utf8mb4($h);if($Dh&&$h){if($Dh=="DROP+CREATE"||$Zd==1)echo"DROP ".($Zd==2?"VIEW":"TABLE")." IF EXISTS ".table($Q).";\n";if($Zd==1)$h=remove_definer($h);echo"$h;\n\n";}}}function dumpData($Q,$Dh,$G){global$f;if($Dh){$Ce=(JUSH=="sqlite"?0:1048576);$o=array();$Ed=false;if($_POST["format"]=="sql"){if($Dh=="TRUNCATE+INSERT")echo truncate_sql($Q).";\n";$o=fields($Q);if(JUSH=="mssql"){foreach($o as$n){if($n["auto_increment"]){echo"SET IDENTITY_INSERT ".table($Q)." ON;\n";$Ed=true;break;}}}}$H=$f->query($G,1);if($H){$Rd="";$Ma="";$ee=array();$jd=array();$Fh="";$Oc=($Q!=''?'fetch_assoc':'fetch_row');while($J=$H->$Oc()){if(!$ee){$Qi=array();foreach($J as$X){$n=$H->fetch_field();if($o[$n->name]['generated']){$jd[$n->name]=true;continue;}$ee[]=$n->name;$y=idf_escape($n->name);$Qi[]="$y = VALUES($y)";}$Fh=($Dh=="INSERT+UPDATE"?"\nON DUPLICATE KEY UPDATE ".implode(", ",$Qi):"").";\n";}if($_POST["format"]!="sql"){if($Dh=="table"){dump_csv($ee);$Dh="INSERT";}dump_csv($J);}else{if(!$Rd)$Rd="INSERT INTO ".table($Q)." (".implode(", ",array_map('Adminer\idf_escape',$ee)).") VALUES";foreach($J as$y=>$X){if($jd[$y]){unset($J[$y]);continue;}$n=$o[$y];$J[$y]=($X!==null?unconvert_field($n,preg_match(number_type(),$n["type"])&&!preg_match('~\[~',$n["full_type"])&&is_numeric($X)?$X:q(($X===false?0:$X))):"NULL");}$Qg=($Ce?"\n":" ")."(".implode(",\t",$J).")";if(!$Ma)$Ma=$Rd.$Qg;elseif(strlen($Ma)+4+strlen($Qg)+strlen($Fh)<$Ce)$Ma.=",$Qg";else{echo$Ma.$Fh;$Ma=$Rd.$Qg;}}}if($Ma)echo$Ma.$Fh;}elseif($_POST["format"]=="sql")echo"-- ".str_replace("\n"," ",$f->error)."\n";if($Ed)echo"SET IDENTITY_INSERT ".table($Q)." OFF;\n";}}function dumpFilename($Cd){return friendly_url($Cd!=""?$Cd:(SERVER!=""?SERVER:"localhost"));}function dumpHeaders($Cd,$Re=false){$Jf=$_POST["output"];$Gc=(preg_match('~sql~',$_POST["format"])?"sql":($Re?"tar":"csv"));header("Content-Type: ".($Jf=="gz"?"application/x-gzip":($Gc=="tar"?"application/x-tar":($Gc=="sql"||$Jf!="file"?"text/plain":"text/csv")."; charset=utf-8")));if($Jf=="gz"){ob_start(function($P){return gzencode($P);},1e6);}return$Gc;}function dumpFooter(){if($_POST["format"]=="sql")echo"-- ".gmdate("Y-m-d H:i:s e")."\n";}function importServerPath(){return"adminer.sql";}function homepage(){echo'

',$this->name(),' ',$ia,' ',(version_compare($ia,$_COOKIE["adminer_version"])<0?h($_COOKIE["adminer_version"]):""),'

';if($Pe=="auth"){$Jf="";foreach((array)$_SESSION["pwds"]as$Si=>$hh){foreach($hh as$M=>$Ni){$B=h(get_setting("vendor-$M")?:$Zb[$Si]);foreach($Ni as$V=>$E){if($E!==null){$Lb=$_SESSION["db"][$Si][$M][$V];foreach(($Lb?array_keys($Lb):array(""))as$j)$Jf.="
  • ($B) ".h($V.($M!=""?"@".$this->serverName($M):"").($j!=""?" - $j":""))."\n";}}}}if($Jf)echo"\n".script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");}else{$S=array();if($_GET["ns"]!==""&&!$Pe&&DB!=""){$f->select_db(DB);$S=table_status('',true);}$this->syntaxHighlighting($S);$this->databasesPrint($Pe);$la=array();if(DB==""||!$Pe){if(support("sql")){$la[]="".'SQL command'."";$la[]="".'Import'."";}$la[]="".'Export'."";}$Id=$_GET["ns"]!==""&&!$Pe&&DB!="";if($Id)$la[]='".'Create table'."";echo($la?"

    ".'No tables.'."

    \n";}}}function syntaxHighlighting($S){global$f;echo script_src(preg_replace("~\\?.*~","",ME)."?file=jush.js&version=5.0.6");if(support("sql")){echo"\n";if($S){$te=array();foreach($S as$Q=>$U)$te[]=preg_quote($Q,'/');echo"var jushLinks = { ".JUSH.": [ '".js_escape(ME).(support("table")?"table=":"select=")."\$&', /\\b(".implode("|",$te).")\\b/g ] };\n";foreach(array("bac","bra","sqlite_quo","mssql_bra")as$X)echo"jushLinks.$X = jushLinks.".JUSH.";\n";}echo"\n";}echo script("bodyLoad('".(is_object($f)?preg_replace('~^(\d\.?\d).*~s','\1',$f->server_info):"")."'".($f->maria?", true":"").");");}function databasesPrint($Pe){global$b,$f;$i=$this->databases();if(DB&&$i&&!in_array(DB,$i))array_unshift($i,DB);echo'

    ';hidden_fields_get();$Jb=script("mixin(qsl('select'), {onmousedown: dbMouseDown, onchange: dbChange});");echo"".'DB'.": ".($i?html_select("db",array(""=>"")+$i,DB).$Jb:"\n"),"\n";if(support("scheme")){if($Pe!="db"&&DB!=""&&$f->select_db(DB)){echo"
    ".'Schema'.": ".html_select("ns",array(""=>"")+$b->schemas(),$_GET["ns"]).$Jb;if($_GET["ns"]!="")set_schema($_GET["ns"]);}}foreach(array("import","sql","schema","dump","privileges")as$X){if(isset($_GET[$X])){echo"";break;}}echo"

    \n";}function tablesPrint($S){echo"\n";}}$b=(function_exists('adminer_object')?adminer_object():new Adminer);$Zb=array("server"=>"MySQL / MariaDB")+$Zb;if(!defined('Adminer\DRIVER')){define('Adminer\DRIVER',"server");if(extension_loaded("mysqli")){class Db extends \MySQLi{var$extension="MySQLi";function __construct(){parent::init();}function connect($M="",$V="",$E="",$Ib=null,$bg=null,$ph=null){global$b;mysqli_report(MYSQLI_REPORT_OFF);list($Ad,$bg)=explode(":",$M,2);$zh=$b->connectSsl();if($zh)$this->ssl_set($zh['key'],$zh['cert'],$zh['ca'],'','');$I=@$this->real_connect(($M!=""?$Ad:ini_get("mysqli.default_host")),($M.$V!=""?$V:ini_get("mysqli.default_user")),($M.$V.$E!=""?$E:ini_get("mysqli.default_pw")),$Ib,(is_numeric($bg)?$bg:ini_get("mysqli.default_port")),(!is_numeric($bg)?$bg:$ph),($zh?($zh['verify']!==false?2048:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,false);return$I;}function set_charset($Sa){if(parent::set_charset($Sa))return true;parent::set_charset('utf8');return$this->query("SET NAMES $Sa");}function result($G,$n=0){$H=$this->query($G);if(!$H)return false;$J=$H->fetch_array();return$J[$n];}function quote($P){return"'".$this->escape_string($P)."'";}}}elseif(extension_loaded("mysql")&&!((ini_bool("sql.safe_mode")||ini_bool("mysql.allow_local_infile"))&&extension_loaded("pdo_mysql"))){class Db{var$extension="MySQL",$server_info,$affected_rows,$errno,$error;private$link,$result;function connect($M,$V,$E){if(ini_bool("mysql.allow_local_infile")){$this->error=sprintf('Disable %s or enable %s or %s extensions.',"'mysql.allow_local_infile'","MySQLi","PDO_MySQL");return false;}$this->link=@mysql_connect(($M!=""?$M:ini_get("mysql.default_host")),("$M$V"!=""?$V:ini_get("mysql.default_user")),("$M$V$E"!=""?$E:ini_get("mysql.default_password")),true,131072);if($this->link)$this->server_info=mysql_get_server_info($this->link);else$this->error=mysql_error();return(bool)$this->link;}function set_charset($Sa){if(function_exists('mysql_set_charset')){if(mysql_set_charset($Sa,$this->link))return true;mysql_set_charset('utf8',$this->link);}return$this->query("SET NAMES $Sa");}function quote($P){return"'".mysql_real_escape_string($P,$this->link)."'";}function select_db($Ib){return mysql_select_db($Ib,$this->link);}function query($G,$yi=false){$H=@($yi?mysql_unbuffered_query($G,$this->link):mysql_query($G,$this->link));$this->error="";if(!$H){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return false;}if($H===true){$this->affected_rows=mysql_affected_rows($this->link);$this->info=mysql_info($this->link);return true;}return new Result($H);}function multi_query($G){return$this->result=$this->query($G);}function store_result(){return$this->result;}function next_result(){return false;}function result($G,$n=0){$H=$this->query($G);return($H?$H->fetch_column($n):false);}}class Result{var$num_rows;private$result,$offset=0;function __construct($H){$this->result=$H;$this->num_rows=mysql_num_rows($H);}function fetch_assoc(){return mysql_fetch_assoc($this->result);}function fetch_row(){return mysql_fetch_row($this->result);}function fetch_column($n){return($this->num_rows?mysql_result($this->result,0,$n):false);}function fetch_field(){$I=mysql_fetch_field($this->result,$this->offset++);$I->orgtable=$I->table;$I->orgname=$I->name;$I->charsetnr=($I->blob?63:0);return$I;}function __destruct(){mysql_free_result($this->result);}}}elseif(extension_loaded("pdo_mysql")){class Db extends PdoDb{var$extension="PDO_MySQL";function connect($M,$V,$E){global$b;$vf=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);$zh=$b->connectSsl();if($zh){if($zh['key'])$vf[\PDO::MYSQL_ATTR_SSL_KEY]=$zh['key'];if($zh['cert'])$vf[\PDO::MYSQL_ATTR_SSL_CERT]=$zh['cert'];if($zh['ca'])$vf[\PDO::MYSQL_ATTR_SSL_CA]=$zh['ca'];if(isset($zh['verify']))$vf[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$zh['verify'];}$this->dsn("mysql:charset=utf8;host=".str_replace(":",";unix_socket=",preg_replace('~:(\d)~',';port=\1',$M)),$V,$E,$vf);return true;}function set_charset($Sa){$this->query("SET NAMES $Sa");}function select_db($Ib){return$this->query("USE ".idf_escape($Ib));}function query($G,$yi=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$yi);return parent::query($G,$yi);}}}class Driver extends SqlDriver{static$fg=array("MySQLi","MySQL","PDO_MySQL");static$be="sql";var$unsigned=array("unsigned","zerofill","unsigned zerofill");var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","REGEXP","IN","FIND_IN_SET","IS NULL","NOT LIKE","NOT REGEXP","NOT IN","IS NOT NULL","SQL");var$functions=array("char_length","date","from_unixtime","lower","round","floor","ceil","sec_to_time","time_to_sec","upper");var$grouping=array("avg","count","count distinct","group_concat","max","min","sum");function __construct($f){parent::__construct($f);$this->types=array('Numbers'=>array("tinyint"=>3,"smallint"=>5,"mediumint"=>8,"int"=>10,"bigint"=>20,"decimal"=>66,"float"=>12,"double"=>21),'Date and time'=>array("date"=>10,"datetime"=>19,"timestamp"=>19,"time"=>10,"year"=>4),'Strings'=>array("char"=>255,"varchar"=>65535,"tinytext"=>255,"text"=>65535,"mediumtext"=>16777215,"longtext"=>4294967295),'Lists'=>array("enum"=>65535,"set"=>64),'Binary'=>array("bit"=>20,"binary"=>255,"varbinary"=>65535,"tinyblob"=>255,"blob"=>65535,"mediumblob"=>16777215,"longblob"=>4294967295),'Geometry'=>array("geometry"=>0,"point"=>0,"linestring"=>0,"polygon"=>0,"multipoint"=>0,"multilinestring"=>0,"multipolygon"=>0,"geometrycollection"=>0),);$this->editFunctions=array(array("char"=>"md5/sha1/password/encrypt/uuid","binary"=>"md5/sha1","date|time"=>"now",),array(number_type()=>"+/-","date"=>"+ interval/- interval","time"=>"addtime/subtime","char|text"=>"concat",));if(min_version('5.7.8',10.2,$f))$this->types['Strings']["json"]=4294967295;if(min_version('',10.7,$f)){$this->types['Strings']["uuid"]=128;$this->editFunctions[0]['uuid']='uuid';}if(min_version(9,'',$f)){$this->types['Numbers']["vector"]=16383;$this->editFunctions[0]['vector']='string_to_vector';}if(min_version(5.7,10.2,$f))$this->generated=array("STORED","VIRTUAL");}function unconvertFunction($n){return(preg_match("~binary~",$n["type"])?"UNHEX":($n["type"]=="bit"?doc_link(array('sql'=>'bit-value-literals.html'),"b''"):(preg_match("~geometry|point|linestring|polygon~",$n["type"])?"GeomFromText":"")));}function insert($Q,$N){return($N?parent::insert($Q,$N):queries("INSERT INTO ".table($Q)." ()\nVALUES ()"));}function insertUpdate($Q,$K,$F){$e=array_keys(reset($K));$hg="INSERT INTO ".table($Q)." (".implode(", ",$e).") VALUES\n";$Qi=array();foreach($e as$y)$Qi[$y]="$y = VALUES($y)";$Fh="\nON DUPLICATE KEY UPDATE ".implode(", ",$Qi);$Qi=array();$qe=0;foreach($K as$N){$Y="(".implode(", ",$N).")";if($Qi&&(strlen($hg)+$qe+strlen($Y)+strlen($Fh)>1e6)){if(!queries($hg.implode(",\n",$Qi).$Fh))return false;$Qi=array();$qe=0;}$Qi[]=$Y;$qe+=strlen($Y)+2;}return queries($hg.implode(",\n",$Qi).$Fh);}function slowQuery($G,$bi){if(min_version('5.7.8','10.1.2')){if($this->conn->maria)return"SET STATEMENT max_statement_time=$bi FOR $G";elseif(preg_match('~^(SELECT\b)(.+)~is',$G,$A))return"$A[1] /*+ MAX_EXECUTION_TIME(".($bi*1000).") */ $A[2]";}}function convertSearch($v,$X,$n){return(preg_match('~char|text|enum|set~',$n["type"])&&!preg_match("~^utf8~",$n["collation"])&&preg_match('~[\x80-\xFF]~',$X['val'])?"CONVERT($v USING ".charset($this->conn).")":$v);}function warnings(){$H=$this->conn->query("SHOW WARNINGS");if($H&&$H->num_rows){ob_start();select($H);return ob_get_clean();}}function tableHelp($B,$Zd=false){$xe=$this->conn->maria;if(information_schema(DB))return strtolower("information-schema-".($xe?"$B-table/":str_replace("_","-",$B)."-table.html"));if(DB=="mysql")return($xe?"mysql$B-table/":"system-schema.html");}function hasCStyleEscapes(){static$Oa;if($Oa===null){$xh=$this->conn->result("SHOW VARIABLES LIKE 'sql_mode'",1);$Oa=(strpos($xh,'NO_BACKSLASH_ESCAPES')===false);}return$Oa;}}function idf_escape($v){return"`".str_replace("`","``",$v)."`";}function table($v){return idf_escape($v);}function connect($Ab){global$Zb;$f=new Db;if($f->connect($Ab[0],$Ab[1],$Ab[2])){$f->set_charset(charset($f));$f->query("SET sql_quote_show_create = 1, autocommit = 1");$f->maria=preg_match('~MariaDB~',$f->server_info);$Zb[DRIVER]=($f->maria?"MariaDB":"MySQL");return$f;}$I=$f->error;if(function_exists('iconv')&&!is_utf8($I)&&strlen($Qg=iconv("windows-1250","utf-8",$I))>strlen($I))$I=$Qg;return$I;}function get_databases($Yc){$I=get_session("dbs");if($I===null){$G="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$I=($Yc?slow_query($G):get_vals($G));restart_session();set_session("dbs",$I);stop_session();}return$I;}function limit($G,$Z,$z,$C=0,$ch=" "){return" $G$Z".($z!==null?$ch."LIMIT $z".($C?" OFFSET $C":""):"");}function limit1($Q,$G,$Z,$ch="\n"){return limit($G,$Z,1,0,$ch);}function db_collation($j,$gb){$I=null;$h=get_val("SHOW CREATE DATABASE ".idf_escape($j),1);if(preg_match('~ COLLATE ([^ ]+)~',$h,$A))$I=$A[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$h,$A))$I=$gb[$A[1]][-1];return$I;}function engines(){$I=array();foreach(get_rows("SHOW ENGINES")as$J){if(preg_match("~YES|DEFAULT~",$J["Support"]))$I[]=$J["Engine"];}return$I;}function logged_user(){return get_val("SELECT USER()");}function tables_list(){return get_key_vals("SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME");}function count_tables($i){$I=array();foreach($i as$j)$I[$j]=count(get_vals("SHOW TABLES IN ".idf_escape($j)));return$I;}function table_status($B="",$Mc=false){$I=array();foreach(get_rows($Mc?"SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($B!=""?"AND TABLE_NAME = ".q($B):"ORDER BY Name"):"SHOW TABLE STATUS".($B!=""?" LIKE ".q(addcslashes($B,"%_\\")):""))as$J){if($J["Engine"]=="InnoDB")$J["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$J["Comment"]);if(!isset($J["Engine"]))$J["Comment"]="";if($B!=""){$J["Name"]=$B;return$J;}$I[$J["Name"]]=$J;}return$I;}function is_view($R){return$R["Engine"]===null;}function fk_support($R){return preg_match('~InnoDB|IBMDB2I~i',$R["Engine"])||(preg_match('~NDB~i',$R["Engine"])&&min_version(5.6));}function fields($Q){global$f;$xe=$f->maria;$I=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($Q)." ORDER BY ORDINAL_POSITION")as$J){$n=$J["COLUMN_NAME"];$U=$J["COLUMN_TYPE"];$kd=$J["GENERATION_EXPRESSION"];$Jc=$J["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$Jc,$jd);preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$U,$_e);$k=$J["COLUMN_DEFAULT"];if($k!=""){$Yd=preg_match('~text|json~',$_e[1]);if(!$xe&&$Yd)$k=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($k));if($xe||$Yd){$k=($k=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($A){return stripslashes(str_replace("''","'",$A[1]));},$k));}if(!$xe&&preg_match('~binary~',$_e[1])&&preg_match('~^0x(\w*)$~',$k,$A))$k=pack("H*",$A[1]);}$I[$n]=array("field"=>$n,"full_type"=>$U,"type"=>$_e[1],"length"=>$_e[2],"unsigned"=>ltrim($_e[3].$_e[4]),"default"=>($jd?($xe?$kd:stripslashes($kd)):$k),"null"=>($J["IS_NULLABLE"]=="YES"),"auto_increment"=>($Jc=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$Jc,$A)?$A[1]:""),"collation"=>$J["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$J[PRIVILEGES],where,order")),"comment"=>$J["COLUMN_COMMENT"],"primary"=>($J["COLUMN_KEY"]=="PRI"),"generated"=>($jd[1]=="PERSISTENT"?"STORED":$jd[1]),);}return$I;}function indexes($Q,$g=null){$I=array();foreach(get_rows("SHOW INDEX FROM ".table($Q),$g)as$J){$B=$J["Key_name"];$I[$B]["type"]=($B=="PRIMARY"?"PRIMARY":($J["Index_type"]=="FULLTEXT"?"FULLTEXT":($J["Non_unique"]?($J["Index_type"]=="SPATIAL"?"SPATIAL":"INDEX"):"UNIQUE")));$I[$B]["columns"][]=$J["Column_name"];$I[$B]["lengths"][]=($J["Index_type"]=="SPATIAL"?null:$J["Sub_part"]);$I[$B]["descs"][]=null;}return$I;}function foreign_keys($Q){global$l;static$Xf='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$I=array();$zb=get_val("SHOW CREATE TABLE ".table($Q),1);if($zb){preg_match_all("~CONSTRAINT ($Xf) FOREIGN KEY ?\\(((?:$Xf,? ?)+)\\) REFERENCES ($Xf)(?:\\.($Xf))? \\(((?:$Xf,? ?)+)\\)(?: ON DELETE ($l->onActions))?(?: ON UPDATE ($l->onActions))?~",$zb,$Ae,PREG_SET_ORDER);foreach($Ae as$A){preg_match_all("~$Xf~",$A[2],$rh);preg_match_all("~$Xf~",$A[5],$Th);$I[idf_unescape($A[1])]=array("db"=>idf_unescape($A[4]!=""?$A[3]:$A[4]),"table"=>idf_unescape($A[4]!=""?$A[4]:$A[3]),"source"=>array_map('Adminer\idf_unescape',$rh[0]),"target"=>array_map('Adminer\idf_unescape',$Th[0]),"on_delete"=>($A[6]?:"RESTRICT"),"on_update"=>($A[7]?:"RESTRICT"),);}}return$I;}function view($B){return array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($B),1)));}function collations(){$I=array();foreach(get_rows("SHOW COLLATION")as$J){if($J["Default"])$I[$J["Charset"]][-1]=$J["Collation"];else$I[$J["Charset"]][]=$J["Collation"];}ksort($I);foreach($I as$y=>$X)asort($I[$y]);return$I;}function information_schema($j){return($j=="information_schema")||(min_version(5.5)&&$j=="performance_schema");}function error(){global$f;return h(preg_replace('~^You have an error.*syntax to use~U',"Syntax error",$f->error));}function create_database($j,$fb){return queries("CREATE DATABASE ".idf_escape($j).($fb?" COLLATE ".q($fb):""));}function drop_databases($i){$I=apply_queries("DROP DATABASE",$i,'Adminer\idf_escape');restart_session();set_session("dbs",null);return$I;}function rename_database($B,$fb){$I=false;if(create_database($B,$fb)){$S=array();$Vi=array();foreach(tables_list()as$Q=>$U){if($U=='VIEW')$Vi[]=$Q;else$S[]=$Q;}$I=(!$S&&!$Vi)||move_tables($S,$Vi,$B);drop_databases($I?array(DB):array());}return$I;}function auto_increment(){$Aa=" PRIMARY KEY";if($_GET["create"]!=""&&$_POST["auto_increment_col"]){foreach(indexes($_GET["create"])as$w){if(in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"],$w["columns"],true)){$Aa="";break;}if($w["type"]=="PRIMARY")$Aa=" UNIQUE";}}return" AUTO_INCREMENT$Aa";}function alter_table($Q,$B,$o,$ad,$lb,$qc,$fb,$_a,$Tf){global$f;$c=array();foreach($o as$n){if($n[1]){$k=$n[1][3];if(preg_match('~ GENERATED~',$k)){$n[1][3]=($f->maria?"":$n[1][2]);$n[1][2]=$k;}$c[]=($Q!=""?($n[0]!=""?"CHANGE ".idf_escape($n[0]):"ADD"):" ")." ".implode($n[1]).($Q!=""?$n[2]:"");}else$c[]="DROP ".idf_escape($n[0]);}$c=array_merge($c,$ad);$O=($lb!==null?" COMMENT=".q($lb):"").($qc?" ENGINE=".q($qc):"").($fb?" COLLATE ".q($fb):"").($_a!=""?" AUTO_INCREMENT=$_a":"");if($Q=="")return queries("CREATE TABLE ".table($B)." (\n".implode(",\n",$c)."\n)$O$Tf");if($Q!=$B)$c[]="RENAME TO ".table($B);if($O)$c[]=ltrim($O);return($c||$Tf?queries("ALTER TABLE ".table($Q)."\n".implode(",\n",$c).$Tf):true);}function alter_indexes($Q,$c){foreach($c as$y=>$X)$c[$y]=($X[2]=="DROP"?"\nDROP INDEX ".idf_escape($X[1]):"\nADD $X[0] ".($X[0]=="PRIMARY"?"KEY ":"").($X[1]!=""?idf_escape($X[1])." ":"")."(".implode(", ",$X[2]).")");return queries("ALTER TABLE ".table($Q).implode(",",$c));}function truncate_tables($S){return apply_queries("TRUNCATE TABLE",$S);}function drop_views($Vi){return queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$Vi)));}function drop_tables($S){return queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$S)));}function move_tables($S,$Vi,$Th){global$f;$Eg=array();foreach($S as$Q)$Eg[]=table($Q)." TO ".idf_escape($Th).".".table($Q);if(!$Eg||queries("RENAME TABLE ".implode(", ",$Eg))){$Pb=array();foreach($Vi as$Q)$Pb[table($Q)]=view($Q);$f->select_db($Th);$j=idf_escape(DB);foreach($Pb as$B=>$Ui){if(!queries("CREATE VIEW $B AS ".str_replace(" $j."," ",$Ui["select"]))||!queries("DROP VIEW $j.$B"))return false;}return true;}return false;}function copy_tables($S,$Vi,$Th){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($S as$Q){$B=($Th==DB?table("copy_$Q"):idf_escape($Th).".".table($Q));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $B"))||!queries("CREATE TABLE $B LIKE ".table($Q))||!queries("INSERT INTO $B SELECT * FROM ".table($Q)))return false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$J){$ri=$J["Trigger"];if(!queries("CREATE TRIGGER ".($Th==DB?idf_escape("copy_$ri"):idf_escape($Th).".".idf_escape($ri))." $J[Timing] $J[Event] ON $B FOR EACH ROW\n$J[Statement];"))return false;}}foreach($Vi as$Q){$B=($Th==DB?table("copy_$Q"):idf_escape($Th).".".table($Q));$Ui=view($Q);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $B"))||!queries("CREATE VIEW $B AS $Ui[select]"))return false;}return true;}function trigger($B){if($B=="")return array();$K=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($B));return reset($K);}function triggers($Q){$I=array();foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$J)$I[$J["Trigger"]]=array($J["Timing"],$J["Event"]);return$I;}function trigger_options(){return array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("FOR EACH ROW"),);}function routine($B,$U){global$l;$ta=array("bool","boolean","integer","double precision","real","dec","numeric","fixed","national char","national varchar");$sh="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";$sc=$l->enumLength;$wi="((".implode("|",array_merge(array_keys($l->types()),$ta)).")\\b(?:\\s*\\(((?:[^'\")]|$sc)++)\\))?"."\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s,]+)['\"]?)?";$Xf="$sh*(".($U=="FUNCTION"?"":$l->inout).")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$wi";$h=get_val("SHOW CREATE $U ".idf_escape($B),2);preg_match("~\\(((?:$Xf\\s*,?)*)\\)\\s*".($U=="FUNCTION"?"RETURNS\\s+$wi\\s+":"")."(.*)~is",$h,$A);$o=array();preg_match_all("~$Xf\\s*,?~is",$A[1],$Ae,PREG_SET_ORDER);foreach($Ae as$Nf)$o[]=array("field"=>str_replace("``","`",$Nf[2]).$Nf[3],"type"=>strtolower($Nf[5]),"length"=>preg_replace_callback("~$sc~s",'Adminer\normalize_enum',$Nf[6]),"unsigned"=>strtolower(preg_replace('~\s+~',' ',trim("$Nf[8] $Nf[7]"))),"null"=>1,"full_type"=>$Nf[4],"inout"=>strtoupper($Nf[1]),"collation"=>strtolower($Nf[9]),);return array("fields"=>$o,"comment"=>get_val("SELECT ROUTINE_COMMENT FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_NAME = ".q($B)),)+($U!="FUNCTION"?array("definition"=>$A[11]):array("returns"=>array("type"=>$A[12],"length"=>$A[13],"unsigned"=>$A[15],"collation"=>$A[16]),"definition"=>$A[17],"language"=>"SQL",));}function routines(){return get_rows("SELECT ROUTINE_NAME AS SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE()");}function routine_languages(){return array();}function routine_id($B,$J){return idf_escape($B);}function last_id(){return get_val("SELECT LAST_INSERT_ID()");}function explain($f,$G){return$f->query("EXPLAIN ".(min_version(5.1)&&!min_version(5.7)?"PARTITIONS ":"").$G);}function found_rows($R,$Z){return($Z||$R["Engine"]!="InnoDB"?null:$R["Rows"]);}function create_sql($Q,$_a,$Dh){$I=get_val("SHOW CREATE TABLE ".table($Q),1);if(!$_a)$I=preg_replace('~ AUTO_INCREMENT=\d+~','',$I);return$I;}function truncate_sql($Q){return"TRUNCATE ".table($Q);}function use_sql($Ib){return"USE ".idf_escape($Ib);}function trigger_sql($Q){$I="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")),null,"-- ")as$J)$I.="\nCREATE TRIGGER ".idf_escape($J["Trigger"])." $J[Timing] $J[Event] ON ".table($J["Table"])." FOR EACH ROW\n$J[Statement];;\n";return$I;}function show_variables(){return get_key_vals("SHOW VARIABLES");}function process_list(){return get_rows("SHOW FULL PROCESSLIST");}function show_status(){return get_key_vals("SHOW STATUS");}function convert_field($n){if(preg_match("~binary~",$n["type"]))return"HEX(".idf_escape($n["field"]).")";if($n["type"]=="bit")return"BIN(".idf_escape($n["field"])." + 0)";if(preg_match("~geometry|point|linestring|polygon~",$n["type"]))return(min_version(8)?"ST_":"")."AsWKT(".idf_escape($n["field"]).")";}function unconvert_field($n,$I){if(preg_match("~binary~",$n["type"]))$I="UNHEX($I)";if($n["type"]=="bit")$I="CONVERT(b$I, UNSIGNED)";if(preg_match("~geometry|point|linestring|polygon~",$n["type"])){$hg=(min_version(8)?"ST_":"");$I=$hg."GeomFromText($I, $hg"."SRID($n[field]))";}return$I;}function support($Nc){return!preg_match("~scheme|sequence|type|view_trigger|materializedview".(min_version(8)?"":"|descidx".(min_version(5.1)?"":"|event|partitioning")).(min_version('8.0.16','10.2.1')?"":"|check")."~",$Nc);}function kill_process($X){return queries("KILL ".number($X));}function connection_id(){return"SELECT CONNECTION_ID()";}function max_connections(){return get_val("SELECT @@max_connections");}}define('Adminer\JUSH',Driver::$be);define('Adminer\SERVER',$_GET[DRIVER]);define('Adminer\DB',$_GET["db"]);define('Adminer\ME',preg_replace('~\?.*~','',relative_uri()).'?'.(sid()?SID.'&':'').(SERVER!==null?DRIVER."=".urlencode(SERVER).'&':'').(isset($_GET["username"])?"username=".urlencode($_GET["username"]).'&':'').(DB!=""?'db='.urlencode(DB).'&'.(isset($_GET["ns"])?"ns=".urlencode($_GET["ns"])."&":""):''));if(!ob_get_level())ob_start(null,4096);function page_header($di,$m="",$La=array(),$ei=""){global$ca,$ia,$b,$Zb;page_headers();if(is_ajax()&&$m){page_messages($m);exit;}$fi=$di.($ei!=""?": $ei":"");$gi=strip_tags($fi.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".$b->name());echo' ',$gi,' ';$Cb=$b->css();$Fb=(count($Cb)==1?!!preg_match('~-dark~',$Cb[0]):null);if($Fb!==false)echo"\n";echo"\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=5.0.6");if($b->head($Fb))echo"\n","\n";foreach($Cb as$X)echo"\n";echo"\n\n";$p=get_temp_dir()."/adminer.version";if(!$_COOKIE["adminer_version"]&&function_exists('openssl_verify')&&file_exists($p)&&filemtime($p)+86400>time()){$Ti=unserialize(file_get_contents($p));$qg="-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqWOVuF5uw7/+Z70djoK RlHIZFZPO0uYRezq90+7Amk+FDNd7KkL5eDve+vHRJBLAszF/7XKXe11xwliIsFs DFWQlsABVZB3oisKCBEuI71J4kPH8dKGEWR9jDHFw3cWmoH3PmqImX6FISWbG3B8 h7FIx3jEaw5ckVPVTeo5JRm/1DZzJxjyDenXvBQ/6o9DgZKeNDgxwKzH+sw9/YCO jHnq1cFpOIISzARlrHMa/43YfeNRAm/tsBXjSxembBPo7aQZLAWHmaj5+K19H10B nCpz9Y++cipkVEiKRGih4ZEvjoFysEOdRLj6WiD/uUNky4xGeA6LaJqh5XpkFkcQ fQIDAQAB -----END PUBLIC KEY----- ";if(openssl_verify($Ti["version"],base64_decode($Ti["signature"]),$qg)==1)$_COOKIE["adminer_version"]=$Ti["version"];}echo script("mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick".(isset($_COOKIE["adminer_version"])?"":", onload: partial(verifyVersion, '$ia', '".js_escape(ME)."', '".get_token()."')")."}); document.body.className = document.body.className.replace(/ nojs/, ' js'); var offlineMessage = '".js_escape('You are offline.')."'; var thousandsSeparator = '".js_escape(',')."';"),"\n",script("mixin(qs('#help'), {onmouseover: function () { helpOpen = 1; }, onmouseout: helpMouseout});"),"
    \n";if($La!==null){$_=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'

    $fi

    \n","\n";restart_session();page_messages($m);$i=&get_session("dbs");if(DB!=""&&$i&&!in_array(DB,$i,true))$i=null;stop_session();define('Adminer\PAGE_HEADER',1);}function page_headers(){global$b;header("Content-Type: text/html; charset=utf-8");header("Cache-Control: no-cache");header("X-Frame-Options: deny");header("X-XSS-Protection: 0");header("X-Content-Type-Options: nosniff");header("Referrer-Policy: origin-when-cross-origin");foreach($b->csp()as$Bb){$xd=array();foreach($Bb as$y=>$X)$xd[]="$y $X";header("Content-Security-Policy: ".implode("; ",$xd));}$b->headers();}function csp(){return array(array("script-src"=>"'self' 'unsafe-inline' 'nonce-".get_nonce()."' 'strict-dynamic'","connect-src"=>"'self'","frame-src"=>"https://www.adminer.org","object-src"=>"'none'","base-uri"=>"'none'","form-action"=>"'self'",),);}function get_nonce(){static$af;if(!$af)$af=base64_encode(rand_string());return$af;}function page_messages($m){$Gi=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$Ne=$_SESSION["messages"][$Gi];if($Ne){echo"
    ".implode("
    \n
    ",$Ne)."
    ".script("messagesPrint();");unset($_SESSION["messages"][$Gi]);}if($m)echo"
    $m
    \n";}function page_footer($Pe=""){global$b,$T;echo'
    ';if($Pe!="auth")echo'

    ',h($_GET["username"])."\n",'

    ';echo script("setupSubmitHighlight(document);");}function int32($Te){while($Te>=2147483648)$Te-=4294967296;while($Te<=-2147483649)$Te+=4294967296;return(int)$Te;}function long2str($W,$Xi){$Qg='';foreach($W as$X)$Qg.=pack('V',$X);if($Xi)return substr($Qg,0,end($W));return$Qg;}function str2long($Qg,$Xi){$W=array_values(unpack('V*',str_pad($Qg,4*ceil(strlen($Qg)/4),"\0")));if($Xi)$W[]=strlen($Qg);return$W;}function xxtea_mx($ej,$dj,$Gh,$ce){return int32((($ej>>5&0x7FFFFFF)^$dj<<2)+(($dj>>3&0x1FFFFFFF)^$ej<<4))^int32(($Gh^$dj)+($ce^$ej));}function encrypt_string($Bh,$y){if($Bh=="")return"";$y=array_values(unpack("V*",pack("H*",md5($y))));$W=str2long($Bh,true);$Te=count($W)-1;$ej=$W[$Te];$dj=$W[0];$rg=floor(6+52/($Te+1));$Gh=0;while($rg-->0){$Gh=int32($Gh+0x9E3779B9);$hc=$Gh>>2&3;for($Lf=0;$Lf<$Te;$Lf++){$dj=$W[$Lf+1];$Se=xxtea_mx($ej,$dj,$Gh,$y[$Lf&3^$hc]);$ej=int32($W[$Lf]+$Se);$W[$Lf]=$ej;}$dj=$W[0];$Se=xxtea_mx($ej,$dj,$Gh,$y[$Lf&3^$hc]);$ej=int32($W[$Te]+$Se);$W[$Te]=$ej;}return long2str($W,false);}function decrypt_string($Bh,$y){if($Bh=="")return"";if(!$y)return false;$y=array_values(unpack("V*",pack("H*",md5($y))));$W=str2long($Bh,false);$Te=count($W)-1;$ej=$W[$Te];$dj=$W[0];$rg=floor(6+52/($Te+1));$Gh=int32($rg*0x9E3779B9);while($Gh){$hc=$Gh>>2&3;for($Lf=$Te;$Lf>0;$Lf--){$ej=$W[$Lf-1];$Se=xxtea_mx($ej,$dj,$Gh,$y[$Lf&3^$hc]);$dj=int32($W[$Lf]-$Se);$W[$Lf]=$dj;}$ej=$W[$Te];$Se=xxtea_mx($ej,$dj,$Gh,$y[$Lf&3^$hc]);$dj=int32($W[0]-$Se);$W[0]=$dj;$Gh=int32($Gh-0x9E3779B9);}return long2str($W,true);}$f='';$wd=$_SESSION["token"];if(!$wd)$_SESSION["token"]=rand(1,1e6);$T=get_token();$Zf=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$X){list($y)=explode(":",$X);$Zf[$y]=$X;}}function add_invalid_login(){global$b;$Fa=get_temp_dir()."/adminer.invalid";foreach(glob("$Fa*")?:array($Fa)as$p){$r=file_open_lock($p);if($r)break;}if(!$r)$r=file_open_lock("$Fa-".rand_string());if(!$r)return;$Ud=unserialize(stream_get_contents($r));$ai=time();if($Ud){foreach($Ud as$Vd=>$X){if($X[0]<$ai)unset($Ud[$Vd]);}}$Td=&$Ud[$b->bruteForceKey()];if(!$Td)$Td=array($ai+30*60,0);$Td[1]++;file_write_unlock($r,serialize($Ud));}function check_invalid_login(){global$b;$Ud=array();foreach(glob(get_temp_dir()."/adminer.invalid*")as$p){$r=file_open_lock($p);if($r){$Ud=unserialize(stream_get_contents($r));file_unlock($r);break;}}$Td=($Ud?$Ud[$b->bruteForceKey()]:array());$Ze=($Td[1]>29?$Td[0]-time():0);if($Ze>0)auth_error(lang(array('Too many unsuccessful logins, try again in %d minute.','Too many unsuccessful logins, try again in %d minutes.'),ceil($Ze/60)));}$za=$_POST["auth"];if($za){session_regenerate_id();$Si=$za["driver"];$M=$za["server"];$V=$za["username"];$E=(string)$za["password"];$j=$za["db"];set_password($Si,$M,$V,$E);$_SESSION["db"][$Si][$M][$V][$j]=true;if($za["permanent"]){$y=implode("-",array_map('base64_encode',array($Si,$M,$V,$j)));$lg=$b->permanentLogin(true);$Zf[$y]="$y:".base64_encode($lg?encrypt_string($E,$lg):"");cookie("adminer_permanent",implode(" ",$Zf));}if(count($_POST)==1||DRIVER!=$Si||SERVER!=$M||$_GET["username"]!==$V||DB!=$j)redirect(auth_url($Si,$M,$V,$j));}elseif($_POST["logout"]&&(!$wd||verify_token())){foreach(array("pwds","db","dbs","queries")as$y)set_session($y,null);unset_permanent();redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1),'Logout successful.'.' '.'Thanks for using Adminer, consider donating.');}elseif($Zf&&!$_SESSION["pwds"]){session_regenerate_id();$lg=$b->permanentLogin();foreach($Zf as$y=>$X){list(,$Za)=explode(":",$X);list($Si,$M,$V,$j)=array_map('base64_decode',explode("-",$y));set_password($Si,$M,$V,decrypt_string(base64_decode($Za),$lg));$_SESSION["db"][$Si][$M][$V][$j]=true;}}function unset_permanent(){global$Zf;foreach($Zf as$y=>$X){list($Si,$M,$V,$j)=array_map('base64_decode',explode("-",$y));if($Si==DRIVER&&$M==SERVER&&$V==$_GET["username"]&&$j==DB)unset($Zf[$y]);}cookie("adminer_permanent",implode(" ",$Zf));}function auth_error($m){global$b,$wd;$ih=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$ih]||$_GET[$ih])&&!$wd)$m='Session expired, please login again.';else{restart_session();add_invalid_login();$E=get_password();if($E!==null){if($E===false)$m.=($m?'
    ':'').sprintf('Master password expired. Implement %s method to make it permanent.',target_blank(),'permanentLogin()');set_password(DRIVER,SERVER,$_GET["username"],null);}unset_permanent();}}if(!$_COOKIE[$ih]&&$_GET[$ih]&&ini_bool("session.use_only_cookies"))$m='Session support must be enabled.';$Of=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$Of["lifetime"]);page_header('Login',$m,null);echo"
    \n","
    ";if(hidden_fields($_POST,array("auth")))echo"

    ".'The action will be performed after successful login with the same credentials.'."\n";echo"

    \n";$b->loginForm();echo"
    \n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent();page_header('No extension',sprintf('None of the supported PHP extensions (%s) are available.',implode(", ",Driver::$fg)),false);page_footer("auth");exit;}stop_session(true);if(isset($_GET["username"])&&is_string(get_password())){list($Ad,$bg)=explode(":",SERVER,2);if(preg_match('~^\s*([-+]?\d+)~',$bg,$A)&&($A[1]<1024||$A[1]>65535))auth_error('Connecting to privileged ports is not allowed.');check_invalid_login();$f=connect($b->credentials());if(is_object($f)){$l=new Driver($f);if($b->operators===null)$b->operators=$l->operators;if(isset($f->maria)||$f->cockroach)save_settings(array("vendor-".SERVER=>$Zb[DRIVER]));}}$ve=null;if(!is_object($f)||($ve=$b->login($_GET["username"],get_password()))!==true){$m=(is_string($f)?nl_br(h($f)):(is_string($ve)?$ve:'Invalid credentials.'));auth_error($m.(preg_match('~^ | $~',get_password())?'
    '.'There is a space in the input password which might be the cause.':''));}if($_POST["logout"]&&$wd&&!verify_token()){page_header('Logout','Invalid CSRF token. Send the form again.');page_footer("db");exit;}if($za&&$_POST["token"])$_POST["token"]=$T;$m='';if($_POST){if(!verify_token()){$Od="max_input_vars";$Ge=ini_get($Od);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$y){$X=ini_get($y);if($X&&(!$Ge||$X<$Ge)){$Od=$y;$Ge=$X;}}}$m=(!$_POST["token"]&&$Ge?sprintf('Maximum number of allowed fields exceeded. Please increase %s.',"'$Od'"):'Invalid CSRF token. Send the form again.'.' '.'If you did not send this request from Adminer then close this page.');}}elseif($_SERVER["REQUEST_METHOD"]=="POST"){$m=sprintf('Too big POST data. Reduce the data or increase the %s configuration directive.',"'post_max_size'");if(isset($_GET["sql"]))$m.=' '.'You can upload a big SQL file via FTP and import it from server.';}function select($H,$g=null,$Af=array(),$z=0){$te=array();$x=array();$e=array();$Ja=array();$xi=array();$I=array();for($t=0;(!$z||$t<$z)&&($J=$H->fetch_row());$t++){if(!$t){echo"
    \n","\n","";for($ae=0;$aefetch_field();$B=$n->name;$_f=$n->orgtable;$zf=$n->orgname;$I[$n->table]=$_f;if($Af&&JUSH=="sql")$te[$ae]=($B=="table"?"table=":($B=="possible_keys"?"indexes=":null));elseif($_f!=""){if(!isset($x[$_f])){$x[$_f]=array();foreach(indexes($_f,$g)as$w){if($w["type"]=="PRIMARY"){$x[$_f]=array_flip($w["columns"]);break;}}$e[$_f]=$x[$_f];}if(isset($e[$_f][$zf])){unset($e[$_f][$zf]);$x[$_f][$zf]=$ae;$te[$ae]=$_f;}}if($n->charsetnr==63)$Ja[$ae]=true;$xi[$ae]=$n->type;echo"name!=$zf?" title='".h(($_f!=""?"$_f.":"").$zf)."'":"").">".h($B).($Af?doc_link(array('sql'=>"explain-output.html#explain_".strtolower($B),'mariadb'=>"explain/#the-columns-in-explain-select",)):"");}echo"\n";}echo"";foreach($J as$y=>$X){$_="";if(isset($te[$y])&&!$e[$te[$y]]){if($Af&&JUSH=="sql"){$Q=$J[array_search("table=",$te)];$_=ME.$te[$y].urlencode($Af[$Q]!=""?$Af[$Q]:$Q);}else{$_=ME."edit=".urlencode($te[$y]);foreach($x[$te[$y]]as$db=>$ae)$_.="&where".urlencode("[".bracket_escape($db)."]")."=".urlencode($J[$ae]);}}elseif(is_url($X))$_=$X;if($X===null)$X="NULL";elseif($Ja[$y]&&!is_utf8($X))$X="".lang(array('%d byte','%d bytes'),strlen($X))."";else{$X=h($X);if($xi[$y]==254)$X="$X";}if($_)$X="$X";echo"$X";}}echo($t?"
    \n
    ":"

    ".'No rows.')."\n";return$I;}function referencable_primary($ah){$I=array();foreach(table_status('',true)as$Lh=>$Q){if($Lh!=$ah&&fk_support($Q)){foreach(fields($Lh)as$n){if($n["primary"]){if($I[$Lh]){unset($I[$Lh]);break;}$I[$Lh]=$n;}}}}return$I;}function textarea($B,$Y,$K=10,$hb=80){echo"";}function select_input($ya,$vf,$Y="",$pf="",$ag=""){$Sh=($vf?"select":"input");return"<$Sh$ya".($vf?">

    ".sprintf('%s version: %s through PHP extension %s',$Zb[DRIVER],"".h($f->server_info)."","$f->extension")."\n","

    ".sprintf('Logged as: %s',"".h(logged_user())."")."\n";$i=$b->databases();if($i){$Ug=support("scheme");$gb=collations();echo"

    \n","\n",script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),"".(support("database")?"\n";$i=($_GET["dbsize"]?count_tables($i):array_flip($i));foreach($i as$j=>$S){$Lg=h(ME)."db=".urlencode($j);$u=h("Db-".$j);echo"".(support("database")?"
    ":"")."".'Database'.(get_session("dbs")!==null?" - ".'Refresh'."":"")."".'Collation'."".'Tables'."".'Size'." - ".'Compute'."".script("qsl('a').onclick = partial(ajaxSetHtml, '".js_escape(ME)."script=connect');","")."
    ".checkbox("db[]",$j,in_array($j,(array)$_POST["db"]),"","","",$u):""),"".h($j)."";$fb=h(db_collation($j,$gb));echo"".(support("database")?"$fb":$fb),"".($_GET["dbsize"]?$S:"?")."","".($_GET["dbsize"]?db_size($j):"?"),"\n";}echo"
    \n",(support("database")?"\n":""),"\n","
    \n",script("tableCheck();");}}page_footer("db");exit;}if(support("scheme")){if(DB!=""&&$_GET["ns"]!==""){if(!isset($_GET["ns"]))redirect(preg_replace('~ns=[^&]*&~','',ME)."ns=".get_schema());if(!set_schema($_GET["ns"])){header("HTTP/1.1 404 Not Found");page_header('Schema'.": ".h($_GET["ns"]),'Invalid schema.',true);page_footer("ns");exit;}}}class TmpFile{private$handler,$size;function __construct(){$this->handler=tmpfile();}function write($ub){$this->size+=strlen($ub);fwrite($this->handler,$ub);}function send(){fseek($this->handler,0);fpassthru($this->handler);fclose($this->handler);}}if(isset($_GET["select"])&&($_POST["edit"]||$_POST["clone"])&&!$_POST["save"])$_GET["edit"]=$_GET["select"];if(isset($_GET["callf"]))$_GET["call"]=$_GET["callf"];if(isset($_GET["function"]))$_GET["procedure"]=$_GET["function"];if(isset($_GET["download"])){$a=$_GET["download"];$o=fields($a);header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=".friendly_url("$a-".implode("_",$_GET["where"])).".".friendly_url($_GET["field"]));$L=array(idf_escape($_GET["field"]));$H=$l->select($a,$L,array(where($_GET,$o)),$L);$J=($H?$H->fetch_row():array());echo$l->value($J[0],$o[$_GET["field"]]);exit;}elseif(isset($_GET["table"])){$a=$_GET["table"];$o=fields($a);if(!$o)$m=error();$R=table_status1($a,true);$B=$b->tableName($R);page_header(($o&&is_view($R)?$R['Engine']=='materialized view'?'Materialized view':'View':'Table').": ".($B!=""?$B:h($a)),$m);$Kg=array();foreach($o as$y=>$n)$Kg+=$n["privileges"];$b->selectLinks($R,(isset($Kg["insert"])||!support("table")?"":null));$lb=$R["Comment"];if($lb!="")echo"

    ".'Comment'.": ".h($lb)."\n";if($o)$b->tableStructurePrint($o);if(support("indexes")&&$l->supportsIndex($R)){echo"

    ".'Indexes'."

    \n";$x=indexes($a);if($x)$b->tableIndexesPrint($x);echo'

    ".'Foreign keys'."

    \n";$cd=foreign_keys($a);if($cd){echo"\n","\n";foreach($cd as$B=>$q){echo"","
    ".'Source'."".'Target'."".'ON DELETE'."".'ON UPDATE'."
    ".implode(", ",array_map('Adminer\h',$q["source"]))."";$_=($q["db"]!=""?preg_replace('~db=[^&]*~',"db=".urlencode($q["db"]),ME):($q["ns"]!=""?preg_replace('~ns=[^&]*~',"ns=".urlencode($q["ns"]),ME):ME));echo"".($q["db"]!=""&&$q["db"]!=DB?"".h($q["db"]).".":"").($q["ns"]!=""&&$q["ns"]!=$_GET["ns"]?"".h($q["ns"]).".":"").h($q["table"])."","(".implode(", ",array_map('Adminer\h',$q["target"])).")","".h($q["on_delete"]),"".h($q["on_update"]),''.'Alter'.'',"\n";}echo"
    \n";}echo'

    ".'Checks'."

    \n";$Ua=$l->checkConstraints($a);if($Ua){echo"\n";foreach($Ua as$y=>$X)echo"","
    ".h($X),"".'Alter'."","\n";echo"
    \n";}echo'

    ".'Triggers'."

    \n";$ui=triggers($a);if($ui){echo"\n";foreach($ui as$y=>$X)echo"
    ".h($X[0])."".h($X[1])."".h($y)."".'Alter'."\n";echo"
    \n";}echo'
    qs(\'#schema\').onselectstart = function () { return false; }; var tablePos = {',implode(",",$Oh)."\n",'}; var em = qs(\'#schema\').offsetHeight / ',$ji,'; document.onmousemove = schemaMousemove; document.onmouseup = partialArg(schemaMouseup, \'',js_escape(DB),'\'); ';foreach($Sg as$B=>$Q){echo"
    ",''.h($B)."",script("qsl('div').onmousedown = schemaMousedown;");foreach($Q["fields"]as$n){$X=''.h($n["field"]).'';echo"
    ".($n["primary"]?"$X":$X);}foreach((array)$Q["references"]as$Uh=>$Bg){foreach($Bg as$me=>$yg){$ne=$me-$Nh[$B][1];$t=0;foreach($yg[0]as$rh)echo"\n
    "."
    ";}}foreach((array)$Ag[$B]as$Uh=>$Bg){foreach($Bg as$me=>$e){$ne=$me-$Nh[$B][1];$t=0;foreach($e as$Th)echo"\n
    "."
    "."
    ";}}echo"\n
    \n";}foreach($Sg as$B=>$Q){foreach((array)$Q["references"]as$Uh=>$Bg){foreach($Bg as$me=>$yg){$Oe=$ji;$Ee=-10;foreach($yg[0]as$y=>$rh){$dg=$Q["pos"][0]+$Q["fields"][$rh]["pos"];$eg=$Sg[$Uh]["pos"][0]+$Sg[$Uh]["fields"][$yg[1][$y]]["pos"];$Oe=min($Oe,$dg,$eg);$Ee=max($Ee,$dg,$eg);}echo"
    \n";}}}echo'
    ';$Kb=array('','USE','DROP+CREATE','CREATE');$Ph=array('','DROP+CREATE','CREATE');$Hb=array('','TRUNCATE+INSERT','INSERT');if(JUSH=="sql")$Hb[]='INSERT+UPDATE';$J=get_settings("adminer_export");if(!$J)$J=array("output"=>"text","format"=>"sql","db_style"=>(DB!=""?"":"CREATE"),"table_style"=>"DROP+CREATE","data_style"=>"INSERT");if(!isset($J["events"])){$J["routines"]=$J["events"]=($_GET["dump"]=="");$J["triggers"]=$J["table_style"];}echo"
    ".'Output'."".html_radios("output",$b->dumpOutput(),$J["output"])."\n","
    ".'Format'."".html_radios("format",$b->dumpFormat(),$J["format"])."\n",(JUSH=="sqlite"?"":"
    ".'Database'."".html_select('db_style',$Kb,$J["db_style"]).(support("type")?checkbox("types",1,$J["types"],'User types'):"").(support("routine")?checkbox("routines",1,$J["routines"],'Routines'):"").(support("event")?checkbox("events",1,$J["events"],'Events'):"")),"
    ".'Tables'."".html_select('table_style',$Ph,$J["table_style"]).checkbox("auto_increment",1,$J["auto_increment"],'Auto Increment').(support("trigger")?checkbox("triggers",1,$J["triggers"],'Triggers'):""),"
    ".'Data'."".html_select('data_style',$Hb,$J["data_style"]),'

    ',script("qsl('table').onclick = dumpClick;");$ig=array();if(DB!=""){$Wa=($a!=""?"":" checked");echo"","\n";$Vi="";$Qh=tables_list();foreach($Qh as$B=>$U){$hg=preg_replace('~_.*~','',$B);$Wa=($a==""||$a==(substr($a,-1)=="%"?"$hg%":$B));$kg="\n";$i=$b->databases();if($i){foreach($i as$j){if(!information_schema($j)){$hg=preg_replace('~_.*~','',$j);echo"
    ".script("qs('#check-tables').onclick = partial(formCheck, /^tables\\[/);",""),"".script("qs('#check-data').onclick = partial(formCheck, /^data\\[/);",""),"
    ".checkbox("tables[]",$B,$Wa,$B,"","block");if($U!==null&&!preg_match('~table~i',$U))$Vi.="$kg\n";else echo"$kg\n";$ig[$hg]++;}echo$Vi;if($Qh)echo script("ajaxSetHtml('".js_escape(ME)."script=db');");}else{echo"
    ","",script("qs('#check-databases').onclick = partial(formCheck, /^databases\\[/);",""),"
    ".checkbox("databases[]",$j,$a==""||$a=="$hg%",$j,"","block")."\n";$ig[$hg]++;}}}else echo"
    ";}echo'

    ';$Tc=true;foreach($ig as$y=>$X){if($y!=""&&$X>1){echo($Tc?"

    ":" ")."".h($y)."";$Tc=false;}}}elseif(isset($_GET["privileges"])){page_header('Privileges');echo'

    \n";hidden_fields_get();echo"\n",($ld?"":"\n"),"\n","\n";while($J=$H->fetch_assoc())echo'
    ".'Username'."".'Server'."
    '.h($J["User"])."".h($J["Host"]).''.'Edit'."\n";if(!$ld||DB!="")echo"
    \n";echo"
    \n","

    \n";}elseif(isset($_GET["sql"])){if(!$m&&$_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers("sql");$b->dumpTable("","");$b->dumpData("","table",$_POST["query"]);$b->dumpFooter();exit;}restart_session();$_d=&get_session("queries");$zd=&$_d[DB];if(!$m&&$_POST["clear"]){$zd=array();redirect(remove_from_uri("history"));}page_header((isset($_GET["import"])?'Import':'SQL command'),$m);if(!$m&&$_POST){$r=false;if(!isset($_GET["import"]))$G=$_POST["query"];elseif($_POST["webfile"]){$vh=$b->importServerPath();$r=@fopen((file_exists($vh)?$vh:"compress.zlib://$vh.gz"),"rb");$G=($r?fread($r,1e6):false);}else$G=get_file("sql_file",true,";");if(is_string($G)){if(function_exists('memory_get_usage')&&($Ie=ini_bytes("memory_limit"))!="-1")@ini_set("memory_limit",max($Ie,2*strlen($G)+memory_get_usage()+8e6));if($G!=""&&strlen($G)<1e6){$rg=$G.(preg_match("~;[ \t\r\n]*\$~",$G)?"":";");if(!$zd||reset(end($zd))!=$rg){restart_session();$zd[]=array($rg,time());set_session("queries",$_d);stop_session();}}$sh="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";$Qb=";";$C=0;$pc=true;$g=connect($b->credentials());if(is_object($g)&&DB!=""){$g->select_db(DB);if($_GET["ns"]!="")set_schema($_GET["ns"],$g);}$kb=0;$xc=array();$Pf='[\'"'.(JUSH=="sql"?'`#':(JUSH=="sqlite"?'`[':(JUSH=="mssql"?'[':''))).']|/\*|-- |$'.(JUSH=="pgsql"?'|\$[^$]*\$':'');$ki=microtime(true);$oa=get_settings("adminer_import");$gc=$b->dumpFormat();unset($gc["sql"]);while($G!=""){if(!$C&&preg_match("~^$sh*+DELIMITER\\s+(\\S+)~i",$G,$A)){$Qb=$A[1];$G=substr($G,strlen($A[0]));}else{preg_match('('.preg_quote($Qb)."\\s*|$Pf)",$G,$A,PREG_OFFSET_CAPTURE,$C);list($ed,$cg)=$A[0];if(!$ed&&$r&&!feof($r))$G.=fread($r,1e5);else{if(!$ed&&rtrim($G)=="")break;$C=$cg+strlen($ed);if($ed&&rtrim($ed)!=$Qb){$Pa=$l->hasCStyleEscapes()||(JUSH=="pgsql"&&($cg>0&&strtolower($G[$cg-1])=="e"));$Xf=($ed=='/*'?'\*/':($ed=='['?']':(preg_match('~^-- |^#~',$ed)?"\n":preg_quote($ed).($Pa?"|\\\\.":""))));while(preg_match("($Xf|\$)s",$G,$A,PREG_OFFSET_CAPTURE,$C)){$Qg=$A[0][0];if(!$Qg&&$r&&!feof($r))$G.=fread($r,1e5);else{$C=$A[0][1]+strlen($Qg);if(!$Qg||$Qg[0]!="\\")break;}}}else{$pc=false;$rg=substr($G,0,$cg);$kb++;$kg="
    ".$b->sqlCommandQuery($rg)."
    \n";if(JUSH=="sqlite"&&preg_match("~^$sh*+ATTACH\\b~i",$rg,$A)){echo$kg,"

    ".'ATTACH queries are not supported.'."\n";$xc[]=" $kb";if($_POST["error_stops"])break;}else{if(!$_POST["only_errors"]){echo$kg;ob_flush();flush();}$_h=microtime(true);if($f->multi_query($rg)&&is_object($g)&&preg_match("~^$sh*+USE\\b~i",$rg))$g->query($rg);do{$H=$f->store_result();if($f->error){echo($_POST["only_errors"]?$kg:""),"

    ".'Error in query'.($f->errno?" ($f->errno)":"").": ".error()."\n";$xc[]=" $kb";if($_POST["error_stops"])break 2;}else{$ai=" (".format_time($_h).")".(strlen($rg)<1000?" ".'Edit'."":"");$qa=$f->affected_rows;$Yi=($_POST["only_errors"]?"":$l->warnings());$Zi="warnings-$kb";if($Yi)$ai.=", ".'Warnings'."".script("qsl('a').onclick = partial(toggle, '$Zi');","");$Ec=null;$Fc="explain-$kb";if(is_object($H)){$z=$_POST["limit"];$Af=select($H,$g,array(),$z);if(!$_POST["only_errors"]){echo"

    \n";$cf=$H->num_rows;echo"

    ".($cf?($z&&$cf>$z?sprintf('%d / ',$z):"").lang(array('%d row','%d rows'),$cf):""),$ai;if($g&&preg_match("~^($sh|\\()*+SELECT\\b~i",$rg)&&($Ec=explain($g,$rg)))echo", Explain".script("qsl('a').onclick = partial(toggle, '$Fc');","");$u="export-$kb";echo", ".'Export'."".script("qsl('a').onclick = partial(toggle, '$u');","")."\n"."

    \n";}}else{if(preg_match("~^$sh*+(CREATE|DROP|ALTER)$sh++(DATABASE|SCHEMA)\\b~i",$rg)){restart_session();set_session("dbs",null);stop_session();}if(!$_POST["only_errors"])echo"

    ".lang(array('Query executed OK, %d row affected.','Query executed OK, %d rows affected.'),$qa)."$ai\n";}echo($Yi?"

    \n":"");if($Ec){echo"\n";}}$_h=microtime(true);}while($f->next_result());}$G=substr($G,$C);$C=0;}}}}if($pc)echo"

    ".'No commands to execute.'."\n";elseif($_POST["only_errors"])echo"

    ".lang(array('%d query executed OK.','%d queries executed OK.'),$kb-count($xc))," (".format_time($ki).")\n";elseif($xc&&$kb>1)echo"

    ".'Error in query'.": ".implode("",$xc)."\n";}else echo"

    ".upload_error($G)."\n";}echo'

    ';$Cc="";if(!isset($_GET["import"])){$rg=$_GET["sql"];if($_POST)$rg=$_POST["query"];elseif($_GET["history"]=="all")$rg=$zd;elseif($_GET["history"]!="")$rg=$zd[$_GET["history"]][0];echo"

    ";textarea("query",$rg,20);echo script(($_POST?"":"qs('textarea').focus();\n")."qs('#form').onsubmit = partial(sqlSubmit, qs('#form'), '".js_escape(remove_from_uri("sql|limit|error_stops|only_errors|history"))."');"),"

    $Cc\n",'Limit rows'.": \n";}else{echo"

    ".'File upload'."
    ";$rd=(extension_loaded("zlib")?"[.gz]":"");echo(ini_bool("file_uploads")?"SQL$rd (< ".ini_get("upload_max_filesize")."B): \n$Cc":'File uploads are disabled.'),"
    \n";$Gd=$b->importServerPath();if($Gd)echo"
    ".'From server'."
    ",sprintf('Webserver file %s',"".h($Gd)."$rd"),' ',"
    \n";echo"

    ";}echo checkbox("error_stops",1,($_POST?$_POST["error_stops"]:isset($_GET["import"])||$_GET["error_stops"]),'Stop on error')."\n",checkbox("only_errors",1,($_POST?$_POST["only_errors"]:isset($_GET["import"])||$_GET["only_errors"]),'Show only errors')."\n","\n";if(!isset($_GET["import"])&&$zd){print_fieldset("history",'History',$_GET["history"]!="");for($X=end($zd);$X;$X=prev($zd)){$y=key($zd);list($rg,$ai,$kc)=$X;echo''.'Edit'.""." ".@date("H:i:s",$ai).""." ".shorten_utf8(ltrim(str_replace("\n"," ",str_replace("\r","",preg_replace('~^(#|-- ).*~m','',$rg)))),80,"").($kc?" ($kc)":"")."
    \n";}echo"\n","".'Edit all'."\n","\n";}echo'

    ';}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$o=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$o):""):where($_GET,$o));$Fi=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($o as$B=>$n){if(!isset($n["privileges"][$Fi?"update":"insert"])||$b->fieldName($n)==""||$n["generated"])unset($o[$B]);}if($_POST&&!$m&&!isset($_GET["select"])){$ue=$_POST["referer"];if($_POST["insert"])$ue=($Fi?null:$_SERVER["REQUEST_URI"]);elseif(!preg_match('~^.+&select=.+$~',$ue))$ue=ME."select=".urlencode($a);$x=indexes($a);$Ai=unique_array($_GET["where"],$x);$ug="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($ue,'Item has been deleted.',$l->delete($a,$ug,!$Ai));else{$N=array();foreach($o as$B=>$n){$X=process_input($n);if($X!==false&&$X!==null)$N[idf_escape($B)]=$X;}if($Fi){if(!$N)redirect($ue);queries_redirect($ue,'Item has been updated.',$l->update($a,$N,$ug,!$Ai));if(is_ajax()){page_headers();page_messages($m);exit;}}else{$H=$l->insert($a,$N);$le=($H?last_id():0);queries_redirect($ue,sprintf('Item%s has been inserted.',($le?" $le":"")),$H);}}}$J=null;if($_POST["save"])$J=(array)$_POST["fields"];elseif($Z){$L=array();foreach($o as$B=>$n){if(isset($n["privileges"]["select"])){$wa=($_POST["clone"]&&$n["auto_increment"]?"''":convert_field($n));$L[]=($wa?"$wa AS ":"").idf_escape($B);}}$J=array();if(!support("table"))$L=array("*");if($L){$H=$l->select($a,$L,array($Z),$L,array(),(isset($_GET["select"])?2:1));if(!$H)$m=error();else{$J=$H->fetch_assoc();if(!$J)$J=false;}if(isset($_GET["select"])&&(!$J||$H->fetch_assoc()))$J=null;}}if(!support("table")&&!$o){if(!$Z){$H=$l->select($a,array("*"),$Z,array("*"));$J=($H?$H->fetch_assoc():false);if(!$J)$J=array($l->primary=>"");}if($J){foreach($J as$y=>$X){if(!$Z)$J[$y]=null;$o[$y]=array("field"=>$y,"null"=>($y!=$l->primary),"auto_increment"=>($y==$l->primary));}}}edit_form($a,$o,$J,$Fi);}elseif(isset($_GET["create"])){$a=$_GET["create"];$Rf=array();foreach(array('HASH','LINEAR HASH','KEY','LINEAR KEY','RANGE','LIST')as$y)$Rf[$y]=$y;$_g=referencable_primary($a);$cd=array();foreach($_g as$Lh=>$n)$cd[str_replace("`","``",$Lh)."`".str_replace("`","``",$n["field"])]=$Lh;$Df=array();$R=array();if($a!=""){$Df=fields($a);$R=table_status($a);if(!$R)$m='No tables.';}$J=$_POST;$J["fields"]=(array)$J["fields"];if($J["auto_increment_col"])$J["fields"][$J["auto_increment_col"]]["auto_increment"]=true;if($_POST)save_settings(array("comments"=>$_POST["comments"],"defaults"=>$_POST["defaults"]));if($_POST&&!process_fields($J["fields"])&&!$m){if($_POST["drop"])queries_redirect(substr(ME,0,-1),'Table has been dropped.',drop_tables(array($a)));else{$o=array();$ua=array();$Ji=false;$ad=array();$Cf=reset($Df);$sa=" FIRST";foreach($J["fields"]as$y=>$n){$q=$cd[$n["type"]];$vi=($q!==null?$_g[$q]:$n);if($n["field"]!=""){if(!$n["generated"])$n["default"]=null;$pg=process_field($n,$vi);$ua[]=array($n["orig"],$pg,$sa);if(!$Cf||$pg!==process_field($Cf,$Cf)){$o[]=array($n["orig"],$pg,$sa);if($n["orig"]!=""||$sa)$Ji=true;}if($q!==null)$ad[idf_escape($n["field"])]=($a!=""&&JUSH!="sqlite"?"ADD":" ").format_foreign_key(array('table'=>$cd[$n["type"]],'source'=>array($n["field"]),'target'=>array($vi["field"]),'on_delete'=>$n["on_delete"],));$sa=" AFTER ".idf_escape($n["field"]);}elseif($n["orig"]!=""){$Ji=true;$o[]=array($n["orig"]);}if($n["orig"]!=""){$Cf=next($Df);if(!$Cf)$sa="";}}$Tf="";if(support("partitioning")){if(isset($Rf[$J["partition_by"]])){$Of=array();foreach($J as$y=>$X){if(preg_match('~^partition~',$y))$Of[$y]=$X;}foreach($Of["partition_names"]as$y=>$B){if($B==""){unset($Of["partition_names"][$y]);unset($Of["partition_values"][$y]);}}if($Of!=get_partitions_info($a)){$Uf=array();if($Of["partition_by"]=='RANGE'||$Of["partition_by"]=='LIST'){foreach($Of["partition_names"]as$y=>$B){$Y=$Of["partition_values"][$y];$Uf[]="\n PARTITION ".idf_escape($B)." VALUES ".($Of["partition_by"]=='RANGE'?"LESS THAN":"IN").($Y!=""?" ($Y)":" MAXVALUE");}}$Tf.="\nPARTITION BY $Of[partition_by]($Of[partition])";if($Uf)$Tf.=" (".implode(",",$Uf)."\n)";elseif($Of["partitions"])$Tf.=" PARTITIONS ".(+$Of["partitions"]);}}elseif(preg_match("~partitioned~",$R["Create_options"]))$Tf.="\nREMOVE PARTITIONING";}$Je='Table has been altered.';if($a==""){cookie("adminer_engine",$J["Engine"]);$Je='Table has been created.';}$B=trim($J["name"]);queries_redirect(ME.(support("table")?"table=":"select=").urlencode($B),$Je,alter_table($a,$B,(JUSH=="sqlite"&&($Ji||$ad)?$ua:$o),$ad,($J["Comment"]!=$R["Comment"]?$J["Comment"]:null),($J["Engine"]&&$J["Engine"]!=$R["Engine"]?$J["Engine"]:""),($J["Collation"]&&$J["Collation"]!=$R["Collation"]?$J["Collation"]:""),($J["Auto_increment"]!=""?number($J["Auto_increment"]):""),$Tf));}}page_header(($a!=""?'Alter table':'Create table'),$m,array("table"=>$a),h($a));if(!$_POST){$xi=$l->types();$J=array("Engine"=>$_COOKIE["adminer_engine"],"fields"=>array(array("field"=>"","type"=>(isset($xi["int"])?"int":(isset($xi["integer"])?"integer":"")),"on_update"=>"")),"partition_names"=>array(""),);if($a!=""){$J=$R;$J["name"]=$a;$J["fields"]=array();if(!$_GET["auto_increment"])$J["Auto_increment"]="";foreach($Df as$n){$n["generated"]=$n["generated"]?:(isset($n["default"])?"DEFAULT":"");$J["fields"][]=$n;}if(support("partitioning")){$J+=get_partitions_info($a);$J["partition_names"][]="";$J["partition_values"][]="";}}}$gb=collations();$rc=engines();foreach($rc as$qc){if(!strcasecmp($qc,$J["Engine"])){$J["Engine"]=$qc;break;}}echo'

    ';if(support("columns")||$a==""){echo'Table name'."\n",($rc?html_select("Engine",array(""=>"(".'engine'.")")+$rc,$J["Engine"]).on_help("getTarget(event).value",1).script("qsl('select').onchange = helpClose;")."\n":"");if($gb)echo"".optionlist($gb)."",(preg_match("~sqlite|mssql~",JUSH)?"":"");echo"\n";}if(support("columns")){echo"

    \n","\n";edit_fields($J["fields"],$gb,"TABLE",$cd);echo"
    \n",script("editFields();"),"
    \n

    \n",'Auto Increment'.": \n",checkbox("defaults",1,($_POST?$_POST["defaults"]:get_setting("defaults")),'Default values',"columnShow(this.checked, 5)","jsonly");$nb=($_POST?$_POST["comments"]:get_setting("comments"));echo(support("comment")?checkbox("comments",1,$nb,'Comment',"editingCommentsClick(this, true);","jsonly").' '.(preg_match('~\n~',$J["Comment"])?"":''):''),'

    ';}echo' ';if($a!="")echo'',confirm(sprintf('Drop %s?',$a));if(support("partitioning")){$Sf=preg_match('~RANGE|LIST~',$J["partition_by"]);print_fieldset("partition",'Partition by',$J["partition_by"]);echo"

    ".html_select("partition_by",array(""=>"")+$Rf,$J["partition_by"]).on_help("getTarget(event).value.replace(/./, 'PARTITION BY \$&')",1).script("qsl('select').onchange = partitionByChange;"),"()\n",'Partitions'.": \n","\n","\n";foreach($J["partition_names"]as$y=>$X)echo'','\n\n";}echo'

    ';}elseif(isset($_GET["indexes"])){$a=$_GET["indexes"];$Kd=array("PRIMARY","UNIQUE","INDEX");$R=table_status($a,true);if(preg_match('~MyISAM|M?aria'.(min_version(5.6,'10.0.5')?'|InnoDB':'').'~i',$R["Engine"]))$Kd[]="FULLTEXT";if(preg_match('~MyISAM|M?aria'.(min_version(5.7,'10.2.2')?'|InnoDB':'').'~i',$R["Engine"]))$Kd[]="SPATIAL";$x=indexes($a);$F=array();if(JUSH=="mongo"){$F=$x["_id_"];unset($Kd[0]);unset($x["_id_"]);}$J=$_POST;if($J)save_settings(array("index_options"=>$J["options"]));if($_POST&&!$m&&!$_POST["add"]&&!$_POST["drop_col"]){$c=array();foreach($J["indexes"]as$w){$B=$w["name"];if(in_array($w["type"],$Kd)){$e=array();$re=array();$Sb=array();$N=array();ksort($w["columns"]);foreach($w["columns"]as$y=>$d){if($d!=""){$qe=$w["lengths"][$y];$Rb=$w["descs"][$y];$N[]=idf_escape($d).($qe?"(".(+$qe).")":"").($Rb?" DESC":"");$e[]=$d;$re[]=($qe?:null);$Sb[]=$Rb;}}$Dc=$x[$B];if($Dc){ksort($Dc["columns"]);ksort($Dc["lengths"]);ksort($Dc["descs"]);if($w["type"]==$Dc["type"]&&array_values($Dc["columns"])===$e&&(!$Dc["lengths"]||array_values($Dc["lengths"])===$re)&&array_values($Dc["descs"])===$Sb){unset($x[$B]);continue;}}if($e)$c[]=array($w["type"],$B,$N);}}foreach($x as$B=>$Dc)$c[]=array($Dc["type"],$B,"DROP");if(!$c)redirect(ME."table=".urlencode($a));queries_redirect(ME."table=".urlencode($a),'Indexes have been altered.',alter_indexes($a,$c));}page_header('Indexes',$m,array("table"=>$a),h($a));$o=array_keys(fields($a));if($_POST["add"]){foreach($J["indexes"]as$y=>$w){if($w["columns"][count($w["columns"])]!="")$J["indexes"][$y]["columns"][]="";}$w=end($J["indexes"]);if($w["type"]||array_filter($w["columns"],'strlen'))$J["indexes"][]=array("columns"=>array(1=>""));}if(!$J){foreach($x as$y=>$w){$x[$y]["name"]=$y;$x[$y]["columns"][]="";}$x[]=array("columns"=>array(1=>""));$J["indexes"]=$x;}$re=(JUSH=="sql"||JUSH=="mssql");$lh=($_POST?$_POST["options"]:get_setting("index_options"));echo'
    ';if($F){echo"
    Index Type ','Column'.($re?" (".'length'.")":"");if($re||support("descidx"))echo checkbox("options",1,$lh,'Options',"indexOptionsShow(this.checked)","jsonly")."\n";echo'Name
    PRIMARY";foreach($F["columns"]as$y=>$d)echo select_input(" disabled",$o,$d)," ";echo"\n";}$ae=1;foreach($J["indexes"]as$w){if(!$_POST["drop_col"]||$ae!=key($_POST["drop_col"])){echo"
    ".html_select("indexes[$ae][type]",array(-1=>"")+$Kd,$w["type"],($ae==count($J["indexes"])?"indexesAddRow.call(this);":""),"label-type"),"";ksort($w["columns"]);$t=1;foreach($w["columns"]as$y=>$d){echo"".select_input(" name='indexes[$ae][columns][$t]' title='".'Column'."'",($o?array_combine($o,$o):$o),$d,"partial(".($t==count($w["columns"])?"indexesAddColumn":"indexesChangeColumn").", '".js_escape(JUSH=="sql"?"":$_GET["indexes"]."_")."')"),"",($re?"":""),(support("descidx")?checkbox("indexes[$ae][descs][$t]",1,$w["descs"][$y],'descending'):"")," ";$t++;}echo"\n","".script("qsl('input').onclick = partial(editingRemoveRow, 'indexes\$1[type]');");}$ae++;}echo'

    ';}elseif(isset($_GET["database"])){$J=$_POST;if($_POST&&!$m&&!isset($_POST["add_x"])){$B=trim($J["name"]);if($_POST["drop"]){$_GET["db"]="";queries_redirect(remove_from_uri("db|database"),'Database has been dropped.',drop_databases(array(DB)));}elseif(DB!==$B){if(DB!=""){$_GET["db"]=$B;queries_redirect(preg_replace('~\bdb=[^&]*&~','',ME)."db=".urlencode($B),'Database has been renamed.',rename_database($B,$J["collation"]));}else{$i=explode("\n",str_replace("\r","",$B));$Eh=true;$ke="";foreach($i as$j){if(count($i)==1||$j!=""){if(!create_database($j,$J["collation"]))$Eh=false;$ke=$j;}}restart_session();set_session("dbs",null);queries_redirect(ME."db=".urlencode($ke),'Database has been created.',$Eh);}}else{if(!$J["collation"])redirect(substr(ME,0,-1));query_redirect("ALTER DATABASE ".idf_escape($B).(preg_match('~^[a-z0-9_]+$~i',$J["collation"])?" COLLATE $J[collation]":""),substr(ME,0,-1),'Database has been altered.');}}page_header(DB!=""?'Alter database':'Create database',$m,array(),h(DB));$gb=collations();$B=DB;if($_POST)$B=$J["name"];elseif(DB!="")$J["collation"]=db_collation(DB,$gb);elseif(JUSH=="sql"){foreach(get_vals("SHOW GRANTS")as$ld){if(preg_match('~ ON (`(([^\\\\`]|``|\\\\.)*)%`\.\*)?~',$ld,$A)&&$A[1]){$B=stripcslashes(idf_unescape("`$A[2]`"));break;}}}echo'

    ',($_POST["add_x"]||strpos($B,"\n")?'
    ':'')."\n".($gb?html_select("collation",array(""=>"(".'collation'.")")+$gb,$J["collation"]).doc_link(array('sql'=>"charset-charsets.html",'mariadb'=>"supported-character-sets-and-collations/",'mssql'=>"relational-databases/system-functions/sys-fn-helpcollations-transact-sql",)):""),' ';if(DB!="")echo"".confirm(sprintf('Drop %s?',DB))."\n";elseif(!$_POST["add_x"]&&$_GET["db"]=="")echo"\n";echo'

    ';}elseif(isset($_GET["scheme"])){$J=$_POST;if($_POST&&!$m){$_=preg_replace('~ns=[^&]*&~','',ME)."ns=";if($_POST["drop"])query_redirect("DROP SCHEMA ".idf_escape($_GET["ns"]),$_,'Schema has been dropped.');else{$B=trim($J["name"]);$_.=urlencode($B);if($_GET["ns"]=="")query_redirect("CREATE SCHEMA ".idf_escape($B),$_,'Schema has been created.');elseif($_GET["ns"]!=$B)query_redirect("ALTER SCHEMA ".idf_escape($_GET["ns"])." RENAME TO ".idf_escape($B),$_,'Schema has been altered.');else redirect($_);}}page_header($_GET["ns"]!=""?'Alter schema':'Create schema',$m);if(!$J)$J["name"]=$_GET["ns"];echo'

    ';if($_GET["ns"]!="")echo"".confirm(sprintf('Drop %s?',$_GET["ns"]))."\n";echo'

    ';}elseif(isset($_GET["call"])){$da=($_GET["name"]?:$_GET["call"]);page_header('Call'.": ".h($da),$m);$Mg=routine($_GET["call"],(isset($_GET["callf"])?"FUNCTION":"PROCEDURE"));$Hd=array();$If=array();foreach($Mg["fields"]as$t=>$n){if(substr($n["inout"],-3)=="OUT")$If[$t]="@".idf_escape($n["field"])." AS ".idf_escape($n["field"]);if(!$n["inout"]||substr($n["inout"],0,2)=="IN")$Hd[]=$t;}if(!$m&&$_POST){$Qa=array();foreach($Mg["fields"]as$y=>$n){if(in_array($y,$Hd)){$X=process_input($n);if($X===false)$X="''";if(isset($If[$y]))$f->query("SET @".idf_escape($n["field"])." = $X");}$Qa[]=(isset($If[$y])?"@".idf_escape($n["field"]):$X);}$G=(isset($_GET["callf"])?"SELECT":"CALL")." ".table($da)."(".implode(", ",$Qa).")";$_h=microtime(true);$H=$f->multi_query($G);$qa=$f->affected_rows;echo$b->selectQuery($G,$_h,!$H);if(!$H)echo"

    ".error()."\n";else{$g=connect($b->credentials());if(is_object($g))$g->select_db(DB);do{$H=$f->store_result();if(is_object($H))select($H,$g);else echo"

    ".lang(array('Routine has been called, %d row affected.','Routine has been called, %d rows affected.'),$qa)." ".@date("H:i:s")."\n";}while($f->next_result());if($If)select($f->query("SELECT ".implode(", ",$If)));}}echo'

    ';if($Hd){echo"\n";foreach($Hd as$y){$n=$Mg["fields"][$y];$B=$n["field"];echo"
    ".$b->fieldName($n);$Y=$_POST["fields"][$B];if($Y!=""){if($n["type"]=="set")$Y=implode(",",$Y);}input($n,$Y,(string)$_POST["function"][$B]);echo"\n";}echo"
    \n";}echo'

    ';function
    pre_tr($Qg){return
    preg_replace('~^~m','',preg_replace('~\|~','',preg_replace('~\|$~m',"",rtrim($Qg))));}$Q='(\+--[-+]+\+\n)';$J='(\| .* \|\n)';echo
    preg_replace_callback("~^$Q?$J$Q?($J*)$Q?~m",function($A){$Uc=pre_tr($A[2]);return"\n".($A[1]?"$Uc\n":$Uc).pre_tr($A[4])."\n
    ";},preg_replace('~(\n( -|mysql)> )(.+)~',"\\1\\3",preg_replace('~(.+)\n---+\n~',"\\1\n",h($Mg['comment']))));echo'
    ';}elseif(isset($_GET["foreign"])){$a=$_GET["foreign"];$B=$_GET["name"];$J=$_POST;if($_POST&&!$m&&!$_POST["add"]&&!$_POST["change"]&&!$_POST["change-js"]){if(!$_POST["drop"]){$J["source"]=array_filter($J["source"],'strlen');ksort($J["source"]);$Th=array();foreach($J["source"]as$y=>$X)$Th[$y]=$J["target"][$y];$J["target"]=$Th;}if(JUSH=="sqlite")$H=recreate_table($a,$a,array(),array(),array(" $B"=>($J["drop"]?"":" ".format_foreign_key($J))));else{$c="ALTER TABLE ".table($a);$H=($B==""||queries("$c DROP ".(JUSH=="sql"?"FOREIGN KEY ":"CONSTRAINT ").idf_escape($B)));if(!$J["drop"])$H=queries("$c ADD".format_foreign_key($J));}queries_redirect(ME."table=".urlencode($a),($J["drop"]?'Foreign key has been dropped.':($B!=""?'Foreign key has been altered.':'Foreign key has been created.')),$H);if(!$J["drop"])$m="$m
    ".'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.';}page_header('Foreign key',$m,array("table"=>$a),h($a));if($_POST){ksort($J["source"]);if($_POST["add"])$J["source"][]="";elseif($_POST["change"]||$_POST["change-js"])$J["target"]=array();}elseif($B!=""){$cd=foreign_keys($a);$J=$cd[$B];$J["source"][]="";}else{$J["table"]=$a;$J["source"]=array("");}echo'
    ';$rh=array_keys(fields($a));if($J["db"]!="")$f->select_db($J["db"]);if($J["ns"]!=""){$Ef=get_schema();set_schema($J["ns"]);}$zg=array_keys(array_filter(table_status('',true),'Adminer\fk_support'));$Th=array_keys(fields(in_array($J["table"],$zg)?$J["table"]:reset($zg)));$pf="this.form['change-js'].value = '1'; this.form.submit();";echo"

    ".'Target table'.": ".html_select("table",$zg,$J["table"],$pf)."\n";if(support("scheme")){$Tg=array_filter($b->schemas(),function($Sg){return!preg_match('~^information_schema$~i',$Sg);});echo'Schema'.": ".html_select("ns",$Tg,$J["ns"]!=""?$J["ns"]:$_GET["ns"],$pf);if($J["ns"]!="")set_schema($Ef);}elseif(JUSH!="sqlite"){$Lb=array();foreach($b->databases()as$j){if(!information_schema($j))$Lb[]=$j;}echo'DB'.": ".html_select("db",$Lb,$J["db"]!=""?$J["db"]:$_GET["db"],$pf);}echo'

    ';$ae=0;foreach($J["source"]as$y=>$X){echo"","
    SourceTarget
    ".html_select("source[".(+$y)."]",array(-1=>"")+$rh,$X,($ae==count($J["source"])-1?"foreignAddRow.call(this);":""),"label-source"),"".html_select("target[".(+$y)."]",$Th,$J["target"][$y],"","label-target");$ae++;}echo'

    ON DELETE: ',html_select("on_delete",array(-1=>"")+explode("|",$l->onActions),$J["on_delete"]),' ON UPDATE: ',html_select("on_update",array(-1=>"")+explode("|",$l->onActions),$J["on_update"]),doc_link(array('sql'=>"innodb-foreign-key-constraints.html",'mariadb'=>"foreign-keys/",'pgsql'=>"sql-createtable.html#SQL-CREATETABLE-REFERENCES",'mssql'=>"t-sql/statements/create-table-transact-sql",'oracle'=>"SQLRF01111",)),'

    ';if($B!="")echo'',confirm(sprintf('Drop %s?',$B));echo'

    ';}elseif(isset($_GET["view"])){$a=$_GET["view"];$J=$_POST;$Ff="VIEW";if(JUSH=="pgsql"&&$a!=""){$O=table_status($a);$Ff=strtoupper($O["Engine"]);}if($_POST&&!$m){$B=trim($J["name"]);$wa=" AS\n$J[select]";$ue=ME."table=".urlencode($B);$Je='View has been altered.';$U=($_POST["materialized"]?"MATERIALIZED VIEW":"VIEW");if(!$_POST["drop"]&&$a==$B&&JUSH!="sqlite"&&$U=="VIEW"&&$Ff=="VIEW")query_redirect((JUSH=="mssql"?"ALTER":"CREATE OR REPLACE")." VIEW ".table($B).$wa,$ue,$Je);else{$Vh=$B."_adminer_".uniqid();drop_create("DROP $Ff ".table($a),"CREATE $U ".table($B).$wa,"DROP $U ".table($B),"CREATE $U ".table($Vh).$wa,"DROP $U ".table($Vh),($_POST["drop"]?substr(ME,0,-1):$ue),'View has been dropped.',$Je,'View has been created.',$a,$B);}}if(!$_POST&&$a!=""){$J=view($a);$J["name"]=$a;$J["materialized"]=($Ff!="VIEW");if(!$m)$m=error();}page_header(($a!=""?'Alter view':'Create view'),$m,array("table"=>$a),h($a));echo'

    Name: ',(support("materializedview")?" ".checkbox("materialized",1,$J["materialized"],'Materialized view'):""),'

    ';textarea("select",$J["select"]);echo'

    ';if($a!="")echo'',confirm(sprintf('Drop %s?',$a));echo'

    ';}elseif(isset($_GET["event"])){$aa=$_GET["event"];$Sd=array("YEAR","QUARTER","MONTH","DAY","HOUR","MINUTE","WEEK","SECOND","YEAR_MONTH","DAY_HOUR","DAY_MINUTE","DAY_SECOND","HOUR_MINUTE","HOUR_SECOND","MINUTE_SECOND");$Ah=array("ENABLED"=>"ENABLE","DISABLED"=>"DISABLE","SLAVESIDE_DISABLED"=>"DISABLE ON SLAVE");$J=$_POST;if($_POST&&!$m){if($_POST["drop"])query_redirect("DROP EVENT ".idf_escape($aa),substr(ME,0,-1),'Event has been dropped.');elseif(in_array($J["INTERVAL_FIELD"],$Sd)&&isset($Ah[$J["STATUS"]])){$Rg="\nON SCHEDULE ".($J["INTERVAL_VALUE"]?"EVERY ".q($J["INTERVAL_VALUE"])." $J[INTERVAL_FIELD]".($J["STARTS"]?" STARTS ".q($J["STARTS"]):"").($J["ENDS"]?" ENDS ".q($J["ENDS"]):""):"AT ".q($J["STARTS"]))." ON COMPLETION".($J["ON_COMPLETION"]?"":" NOT")." PRESERVE";queries_redirect(substr(ME,0,-1),($aa!=""?'Event has been altered.':'Event has been created.'),queries(($aa!=""?"ALTER EVENT ".idf_escape($aa).$Rg.($aa!=$J["EVENT_NAME"]?"\nRENAME TO ".idf_escape($J["EVENT_NAME"]):""):"CREATE EVENT ".idf_escape($J["EVENT_NAME"]).$Rg)."\n".$Ah[$J["STATUS"]]." COMMENT ".q($J["EVENT_COMMENT"]).rtrim(" DO\n$J[EVENT_DEFINITION]",";").";"));}}page_header(($aa!=""?'Alter event'.": ".h($aa):'Create event'),$m);if(!$J&&$aa!=""){$K=get_rows("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = ".q(DB)." AND EVENT_NAME = ".q($aa));$J=reset($K);}echo'
    Name
    Start
    End
    Every ',html_select("INTERVAL_FIELD",$Sd,$J["INTERVAL_FIELD"]),'
    Status',html_select("STATUS",$Ah,$J["STATUS"]),'
    Comment
    ',checkbox("ON_COMPLETION","PRESERVE",$J["ON_COMPLETION"]=="PRESERVE",'On completion preserve'),'

    ';textarea("EVENT_DEFINITION",$J["EVENT_DEFINITION"]);echo'

    ';if($aa!="")echo'',confirm(sprintf('Drop %s?',$aa));echo'

    ';}elseif(isset($_GET["procedure"])){$da=($_GET["name"]?:$_GET["procedure"]);$Mg=(isset($_GET["function"])?"FUNCTION":"PROCEDURE");$J=$_POST;$J["fields"]=(array)$J["fields"];if($_POST&&!process_fields($J["fields"])&&!$m){$Bf=routine($_GET["procedure"],$Mg);$Vh="$J[name]_adminer_".uniqid();drop_create("DROP $Mg ".routine_id($da,$Bf),create_routine($Mg,$J),"DROP $Mg ".routine_id($J["name"],$J),create_routine($Mg,array("name"=>$Vh)+$J),"DROP $Mg ".routine_id($Vh,$J),substr(ME,0,-1),'Routine has been dropped.','Routine has been altered.','Routine has been created.',$da,$J["name"]);}page_header(($da!=""?(isset($_GET["function"])?'Alter function':'Alter procedure').": ".h($da):(isset($_GET["function"])?'Create function':'Create procedure')),$m);if(!$_POST&&$da!=""){$J=routine($_GET["procedure"],$Mg);$J["name"]=$da;}$gb=get_vals("SHOW CHARACTER SET");sort($gb);$Ng=routine_languages();echo($gb?"".optionlist($gb)."":""),'

    Name: ',($Ng?'Language'.": ".html_select("language",$Ng,$J["language"])."\n":""),'

    ';edit_fields($J["fields"],$gb,$Mg);if(isset($_GET["function"])){echo"
    ".'Return type';edit_type("returns",$J["returns"],$gb,array(),(JUSH=="pgsql"?array("void","trigger"):array()));}echo'
    ',script("editFields();"),'

    ';textarea("definition",$J["definition"]);echo'

    ';if($da!="")echo'',confirm(sprintf('Drop %s?',$da));echo'

    ';}elseif(isset($_GET["sequence"])){$fa=$_GET["sequence"];$J=$_POST;if($_POST&&!$m){$_=substr(ME,0,-1);$B=trim($J["name"]);if($_POST["drop"])query_redirect("DROP SEQUENCE ".idf_escape($fa),$_,'Sequence has been dropped.');elseif($fa=="")query_redirect("CREATE SEQUENCE ".idf_escape($B),$_,'Sequence has been created.');elseif($fa!=$B)query_redirect("ALTER SEQUENCE ".idf_escape($fa)." RENAME TO ".idf_escape($B),$_,'Sequence has been altered.');else redirect($_);}page_header($fa!=""?'Alter sequence'.": ".h($fa):'Create sequence',$m);if(!$J)$J["name"]=$fa;echo'

    ';if($fa!="")echo"".confirm(sprintf('Drop %s?',$fa))."\n";echo'

    ';}elseif(isset($_GET["type"])){$ga=$_GET["type"];$J=$_POST;if($_POST&&!$m){$_=substr(ME,0,-1);if($_POST["drop"])query_redirect("DROP TYPE ".idf_escape($ga),$_,'Type has been dropped.');else query_redirect("CREATE TYPE ".idf_escape(trim($J["name"]))." $J[as]",$_,'Type has been created.');}page_header($ga!=""?'Alter type'.": ".h($ga):'Create type',$m);if(!$J)$J["as"]="AS ";echo'

    ';if($ga!=""){$xi=$l->types();$vc=type_values($xi[$ga]);if($vc)echo"ENUM (".h($vc).")\n

    ";echo"".confirm(sprintf('Drop %s?',$ga))."\n";}else{echo'Name'.": \n",doc_link(array('pgsql'=>"datatype-enum.html",),"?");textarea("as",$J["as"]);echo"

    \n";}echo'

    ';}elseif(isset($_GET["check"])){$a=$_GET["check"];$B=$_GET["name"];$J=$_POST;if($J&&!$m){if(JUSH=="sqlite")$H=recreate_table($a,$a,array(),array(),array(),0,array(),$B,($J["drop"]?"":$J["clause"]));else{$H=($B==""||queries("ALTER TABLE ".table($a)." DROP CONSTRAINT ".idf_escape($B)));if(!$J["drop"])$H=queries("ALTER TABLE ".table($a)." ADD".($J["name"]!=""?" CONSTRAINT ".idf_escape($J["name"]):"")." CHECK ($J[clause])");}queries_redirect(ME."table=".urlencode($a),($J["drop"]?'Check has been dropped.':($B!=""?'Check has been altered.':'Check has been created.')),$H);}page_header(($B!=""?'Alter check'.": ".h($B):'Create check'),$m,array("table"=>$a));if(!$J){$Xa=$l->checkConstraints($a);$J=array("name"=>$B,"clause"=>$Xa[$B]);}echo'

    ';if(JUSH!="sqlite")echo'Name'.': ';echo doc_link(array('sql'=>"create-table-check-constraints.html",'mariadb'=>"constraint/",'pgsql'=>"ddl-constraints.html#DDL-CONSTRAINTS-CHECK-CONSTRAINTS",'mssql'=>"relational-databases/tables/create-check-constraints",'sqlite'=>"lang_createtable.html#check_constraints",),"?"),'

    ';textarea("clause",$J["clause"]);echo'

    ';if($B!="")echo'',confirm(sprintf('Drop %s?',$B));echo'

    ';}elseif(isset($_GET["trigger"])){$a=$_GET["trigger"];$B=$_GET["name"];$ti=trigger_options();$J=(array)trigger($B,$a)+array("Trigger"=>$a."_bi");if($_POST){if(!$m&&in_array($_POST["Timing"],$ti["Timing"])&&in_array($_POST["Event"],$ti["Event"])&&in_array($_POST["Type"],$ti["Type"])){$mf=" ON ".table($a);$ac="DROP TRIGGER ".idf_escape($B).(JUSH=="pgsql"?$mf:"");$ue=ME."table=".urlencode($a);if($_POST["drop"])query_redirect($ac,$ue,'Trigger has been dropped.');else{if($B!="")queries($ac);queries_redirect($ue,($B!=""?'Trigger has been altered.':'Trigger has been created.'),queries(create_trigger($mf,$_POST)));if($B!="")queries(create_trigger($mf,$J+array("Type"=>reset($ti["Type"]))));}}$J=$_POST;}page_header(($B!=""?'Alter trigger'.": ".h($B):'Create trigger'),$m,array("table"=>$a));echo'
    Time',html_select("Timing",$ti["Timing"],$J["Timing"],"triggerChange(/^".preg_quote($a,"/")."_[ba][iud]$/, '".js_escape($a)."', this.form);"),'
    Event',html_select("Event",$ti["Event"],$J["Event"],"this.form['Timing'].onchange();"),(in_array("UPDATE OF",$ti["Event"])?" ":""),'
    Type',html_select("Type",$ti["Type"],$J["Type"]),'

    Name: ',script("qs('#form')['Timing'].onchange();"),'

    ';textarea("Statement",$J["Statement"]);echo'

    ';if($B!="")echo'',confirm(sprintf('Drop %s?',$B));echo'

    ';}elseif(isset($_GET["user"])){$ha=$_GET["user"];$ng=array(""=>array("All privileges"=>""));foreach(get_rows("SHOW PRIVILEGES")as$J){foreach(explode(",",($J["Privilege"]=="Grant option"?"":$J["Context"]))as$vb)$ng[$vb][$J["Privilege"]]=$J["Comment"];}$ng["Server Admin"]+=$ng["File access on server"];$ng["Databases"]["Create routine"]=$ng["Procedures"]["Create routine"];unset($ng["Procedures"]["Create routine"]);$ng["Columns"]=array();foreach(array("Select","Insert","Update","References")as$X)$ng["Columns"][$X]=$ng["Tables"][$X];unset($ng["Server Admin"]["Usage"]);foreach($ng["Tables"]as$y=>$X)unset($ng["Databases"][$y]);$We=array();if($_POST){foreach($_POST["objects"]as$y=>$X)$We[$X]=(array)$We[$X]+(array)$_POST["grants"][$y];}$md=array();$kf="";if(isset($_GET["host"])&&($H=$f->query("SHOW GRANTS FOR ".q($ha)."@".q($_GET["host"])))){while($J=$H->fetch_row()){if(preg_match('~GRANT (.*) ON (.*) TO ~',$J[0],$A)&&preg_match_all('~ *([^(,]*[^ ,(])( *\([^)]+\))?~',$A[1],$Ae,PREG_SET_ORDER)){foreach($Ae as$X){if($X[1]!="USAGE")$md["$A[2]$X[2]"][$X[1]]=true;if(preg_match('~ WITH GRANT OPTION~',$J[0]))$md["$A[2]$X[2]"]["GRANT OPTION"]=true;}}if(preg_match("~ IDENTIFIED BY PASSWORD '([^']+)~",$J[0],$A))$kf=$A[1];}}if($_POST&&!$m){$lf=(isset($_GET["host"])?q($ha)."@".q($_GET["host"]):"''");if($_POST["drop"])query_redirect("DROP USER $lf",ME."privileges=",'User has been dropped.');else{$Ye=q($_POST["user"])."@".q($_POST["host"]);$Vf=$_POST["pass"];if($Vf!=''&&!$_POST["hashed"]&&!min_version(8)){$Vf=get_val("SELECT PASSWORD(".q($Vf).")");$m=!$Vf;}$_b=false;if(!$m){if($lf!=$Ye){$_b=queries((min_version(5)?"CREATE USER":"GRANT USAGE ON *.* TO")." $Ye IDENTIFIED BY ".(min_version(8)?"":"PASSWORD ").q($Vf));$m=!$_b;}elseif($Vf!=$kf)queries("SET PASSWORD FOR $Ye = ".q($Vf));}if(!$m){$Jg=array();foreach($We as$ef=>$ld){if(isset($_GET["grant"]))$ld=array_filter($ld);$ld=array_keys($ld);if(isset($_GET["grant"]))$Jg=array_diff(array_keys(array_filter($We[$ef],'strlen')),$ld);elseif($lf==$Ye){$if=array_keys((array)$md[$ef]);$Jg=array_diff($if,$ld);$ld=array_diff($ld,$if);unset($md[$ef]);}if(preg_match('~^(.+)\s*(\(.*\))?$~U',$ef,$A)&&(!grant("REVOKE",$Jg,$A[2]," ON $A[1] FROM $Ye")||!grant("GRANT",$ld,$A[2]," ON $A[1] TO $Ye"))){$m=true;break;}}}if(!$m&&isset($_GET["host"])){if($lf!=$Ye)queries("DROP USER $lf");elseif(!isset($_GET["grant"])){foreach($md as$ef=>$Jg){if(preg_match('~^(.+)(\(.*\))?$~U',$ef,$A))grant("REVOKE",array_keys($Jg),$A[2]," ON $A[1] FROM $Ye");}}}queries_redirect(ME."privileges=",(isset($_GET["host"])?'User has been altered.':'User has been created.'),!$m);if($_b)$f->query("DROP USER $Ye");}}page_header((isset($_GET["host"])?'Username'.": ".h("$ha@$_GET[host]"):'Create user'),$m,array("privileges"=>array('','Privileges')));$J=$_POST;if($J)$md=$We;else{$J=$_GET+array("host"=>get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)"));$J["pass"]=$kf;if($kf!="")$J["hashed"]=true;$md[(DB==""||$md?"":idf_escape(addcslashes(DB,"%_\\"))).".*"]=array();}echo'
    Server
    Username
    Password ',($J["hashed"]?"":script("typePassword(qs('#pass'));")),(min_version(8)?"":checkbox("hashed",1,$J["hashed"],'Hashed',"typePassword(this.form['pass'], this.checked);")),'
    ',"\n","\n";foreach(array(""=>"","Server Admin"=>'Server',"Databases"=>'Database',"Tables"=>'Table',"Columns"=>'Column',"Procedures"=>'Routine',)as$vb=>$Rb){foreach((array)$ng[$vb]as$mg=>$lb){echo"$Rb'.h($mg);$t=0;foreach($md as$ef=>$ld){$B="'grants[$t][".h(strtoupper($mg))."]'";$Y=$ld[strtoupper($mg)];if($vb=="Server Admin"&&$ef!=(isset($md["*.*"])?"*.*":".*"))echo"
    ".'Privileges'.doc_link(array('sql'=>"grant.html#priv_level"));$t=0;foreach($md as$ef=>$ld){echo''.($ef!="*.*"?"":"*.*");$t++;}echo"
    ";elseif(isset($_GET["grant"]))echo"";else echo"";$t++;}}}echo"
    \n",'

    ';if(isset($_GET["host"]))echo'',confirm(sprintf('Drop %s?',"$ha@$_GET[host]"));echo'

    ';}elseif(isset($_GET["processlist"])){if(support("kill")){if($_POST&&!$m){$ge=0;foreach((array)$_POST["kill"]as$X){if(kill_process($X))$ge++;}queries_redirect(ME."processlist=",lang(array('%d process has been killed.','%d processes have been killed.'),$ge),$ge||!$_POST["kill"]);}}page_header('Process list',$m);echo'
    ',script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");$t=-1;foreach(process_list()as$t=>$J){if(!$t){echo"".(support("kill")?"\n";}echo"".(support("kill")?"
    ":"");foreach($J as$y=>$X)echo"$y".doc_link(array('sql'=>"show-processlist.html#processlist_".strtolower($y),'pgsql'=>"monitoring-stats.html#PG-STAT-ACTIVITY-VIEW",'oracle'=>"REFRN30223",));echo"
    ".checkbox("kill[]",$J[JUSH=="sql"?"Id":"pid"],0):"");foreach($J as$y=>$X)echo"".((JUSH=="sql"&&$y=="Info"&&preg_match("~Query|Killed~",$J["Command"])&&$X!="")||(JUSH=="pgsql"&&$y=="current_query"&&$X!="")||(JUSH=="oracle"&&$y=="sql_text"&&$X!="")?"".shorten_utf8($X,100,"").' '.'Clone'.'':h($X));echo"\n";}echo'

    ';if(support("kill"))echo($t+1)."/".sprintf('%d in total',max_connections()),"

    \n";echo'

    ',script("tableCheck();");}elseif(isset($_GET["select"])){$a=$_GET["select"];$R=table_status1($a);$x=indexes($a);$o=fields($a);$cd=column_foreign_keys($a);$gf=$R["Oid"];$pa=get_settings("adminer_import");$Kg=array();$e=array();$Wg=array();$yf=array();$Zh=null;foreach($o as$y=>$n){$B=$b->fieldName($n);$Ue=html_entity_decode(strip_tags($B),ENT_QUOTES);if(isset($n["privileges"]["select"])&&$B!=""){$e[$y]=$Ue;if(is_shortable($n))$Zh=$b->selectLengthProcess();}if(isset($n["privileges"]["where"])&&$B!="")$Wg[$y]=$Ue;if(isset($n["privileges"]["order"])&&$B!="")$yf[$y]=$Ue;$Kg+=$n["privileges"];}list($L,$nd)=$b->selectColumnsProcess($e,$x);$L=array_unique($L);$nd=array_unique($nd);$Wd=count($nd)selectSearchProcess($o,$x);$xf=$b->selectOrderProcess($o,$x);$z=$b->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$Bi=>$J){$wa=convert_field($o[key($J)]);$L=array($wa?:idf_escape(key($J)));$Z[]=where_check($Bi,$o);$I=$l->select($a,$L,$Z,$L);if($I)echo reset($I->fetch_row());}exit;}$F=$Di=null;foreach($x as$w){if($w["type"]=="PRIMARY"){$F=array_flip($w["columns"]);$Di=($L?$F:array());foreach($Di as$y=>$X){if(in_array(idf_escape($y),$L))unset($Di[$y]);}break;}}if($gf&&!$F){$F=$Di=array($gf=>0);$x[]=array("type"=>"PRIMARY","columns"=>array($gf));}if($_POST&&!$m){$bj=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$Xa=array();foreach($_POST["check"]as$Ta)$Xa[]=where_check($Ta,$o);$bj[]="((".implode(") OR (",$Xa)."))";}$bj=($bj?"\nWHERE ".implode(" AND ",$bj):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);$b->dumpTable($a,"");$gd=($L?implode(", ",$L):"*").convert_fields($e,$o,$L)."\nFROM ".table($a);$pd=($nd&&$Wd?"\nGROUP BY ".implode(", ",$nd):"").($xf?"\nORDER BY ".implode(", ",$xf):"");$G="SELECT $gd$bj$pd";if(is_array($_POST["check"])&&!$F){$_i=array();foreach($_POST["check"]as$X)$_i[]="(SELECT".limit($gd,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$o).$pd,1).")";$G=implode(" UNION ALL ",$_i);}$b->dumpData($a,"table",$G);$b->dumpFooter();exit;}if(!$b->selectEmailProcess($Z,$cd)){if($_POST["save"]||$_POST["delete"]){$H=true;$qa=0;$N=array();if(!$_POST["delete"]){foreach($_POST["fields"]as$B=>$X){$X=process_input($o[$B]);if($X!==null&&($_POST["clone"]||$X!==false))$N[idf_escape($B)]=($X!==false?$X:idf_escape($B));}}if($_POST["delete"]||$N){if($_POST["clone"])$G="INTO ".table($a)." (".implode(", ",array_keys($N)).")\nSELECT ".implode(", ",$N)."\nFROM ".table($a);if($_POST["all"]||($F&&is_array($_POST["check"]))||$Wd){$H=($_POST["delete"]?$l->delete($a,$bj):($_POST["clone"]?queries("INSERT $G$bj"):$l->update($a,$N,$bj)));$qa=$f->affected_rows;}else{foreach((array)$_POST["check"]as$X){$aj="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$o);$H=($_POST["delete"]?$l->delete($a,$aj,1):($_POST["clone"]?queries("INSERT".limit1($a,$G,$aj)):$l->update($a,$N,$aj,1)));if(!$H)break;$qa+=$f->affected_rows;}}}$Je=lang(array('%d item has been affected.','%d items have been affected.'),$qa);if($_POST["clone"]&&$H&&$qa==1){$le=last_id();if($le)$Je=sprintf('Item%s has been inserted.'," $le");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page":""),$Je,$H);if(!$_POST["delete"]){$gg=(array)$_POST["fields"];edit_form($a,array_intersect_key($o,$gg),$gg,!$_POST["clone"]);page_footer();exit;}}elseif(!$_POST["import"]){if(!$_POST["val"])$m='Ctrl+click on a value to modify it.';else{$H=true;$qa=0;foreach($_POST["val"]as$Bi=>$J){$N=array();foreach($J as$y=>$X){$y=bracket_escape($y,1);$N[idf_escape($y)]=(preg_match('~char|text~',$o[$y]["type"])||$X!=""?$b->processInput($o[$y],$X):"NULL");}$H=$l->update($a,$N," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($Bi,$o),!$Wd&&!$F," ");if(!$H)break;$qa+=$f->affected_rows;}queries_redirect(remove_from_uri(),lang(array('%d item has been affected.','%d items have been affected.'),$qa),$H);}}elseif(!is_string($Rc=get_file("csv_file",true)))$m=upload_error($Rc);elseif(!preg_match('~~u',$Rc))$m='File must be in UTF-8 encoding.';else{save_settings(array("output"=>$pa["output"],"format"=>$_POST["separator"]),"adminer_import");$H=true;$hb=array_keys($o);preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$Rc,$Ae);$qa=count($Ae[0]);$l->begin();$ch=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$K=array();foreach($Ae[0]as$y=>$X){preg_match_all("~((?>\"[^\"]*\")+|[^$ch]*)$ch~",$X.$ch,$Be);if(!$y&&!array_diff($Be[1],$hb)){$hb=$Be[1];$qa--;}else{$N=array();foreach($Be[1]as$t=>$db)$N[idf_escape($hb[$t])]=($db==""&&$o[$hb[$t]]["null"]?"NULL":q(preg_match('~^".*"$~s',$db)?str_replace('""','"',substr($db,1,-1)):$db));$K[]=$N;}}$H=(!$K||$l->insertUpdate($a,$K,$F));if($H)$l->commit();queries_redirect(remove_from_uri("page"),lang(array('%d row has been imported.','%d rows have been imported.'),$qa),$H);$l->rollback();}}}$Lh=$b->tableName($R);if(is_ajax()){page_headers();ob_start();}else page_header('Select'.": $Lh",$m);$N=null;if(isset($Kg["insert"])||!support("table")){$Of=array();foreach((array)$_GET["where"]as$X){if(isset($cd[$X["col"]])&&count($cd[$X["col"]])==1&&($X["op"]=="="||(!$X["op"]&&(is_array($X["val"])||!preg_match('~[_%]~',$X["val"])))))$Of["set"."[".bracket_escape($X["col"])."]"]=$X["val"];}$N=$Of?"&".http_build_query($Of):"";}$b->selectLinks($R,$N);if(!$e&&support("table"))echo"

    ".'Unable to select the table'.($o?".":": ".error())."\n";else{echo"

    \n","
    ";hidden_fields_get();echo(DB!=""?''.(isset($_GET["ns"])?'':""):""),'',"
    \n";$b->selectColumnsPrint($L,$e);$b->selectSearchPrint($Z,$Wg,$x);$b->selectOrderPrint($xf,$yf,$x);$b->selectLimitPrint($z);$b->selectLengthPrint($Zh);$b->selectActionPrint($x);echo"
    \n";$D=$_GET["page"];if($D=="last"){$fd=get_val(count_rows($a,$Z,$Wd,$nd));$D=floor(max(0,$fd-1)/$z);}$Xg=$L;$od=$nd;if(!$Xg){$Xg[]="*";$wb=convert_fields($e,$o,$L);if($wb)$Xg[]=substr($wb,2);}foreach($L as$y=>$X){$n=$o[idf_unescape($X)];if($n&&($wa=convert_field($n)))$Xg[$y]="$wa AS $X";}if(!$Wd&&$Di){foreach($Di as$y=>$X){$Xg[]=idf_escape($y);if($od)$od[]=idf_escape($y);}}$H=$l->select($a,$Xg,$Z,$od,$xf,$z,$D,true);if(!$H)echo"

    ".error()."\n";else{if(JUSH=="mssql"&&$D)$H->seek($z*$D);$oc=array();echo"

    \n";$K=array();while($J=$H->fetch_assoc()){if($D&&JUSH=="oracle")unset($J["RNUM"]);$K[]=$J;}if($_GET["page"]!="last"&&$z!=""&&$nd&&$Wd&&JUSH=="sql")$fd=get_val(" SELECT FOUND_ROWS()");if(!$K)echo"

    ".'No rows.'."\n";else{$Ea=$b->backwardKeys($a,$Lh);echo"

    ","",script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});"),"".(!$nd&&$L?"":"\n";if(is_ajax())ob_end_clean();foreach($b->rowDescriptions($K,$cd)as$Te=>$J){$Ai=unique_array($K[$Te],$x);if(!$Ai){$Ai=array();foreach($K[$Te]as$y=>$X){if(!preg_match('~^(COUNT\((\*|(DISTINCT )?`(?:[^`]|``)+`)\)|(AVG|GROUP_CONCAT|MAX|MIN|SUM)\(`(?:[^`]|``)+`\))$~',$y))$Ai[$y]=$X;}}$Bi="";foreach($Ai as$y=>$X){if((JUSH=="sql"||JUSH=="pgsql")&&preg_match('~char|text|enum|set~',$o[$y]["type"])&&strlen($X)>64){$y=(strpos($y,'(')?$y:idf_escape($y));$y="MD5(".(JUSH!='sql'||preg_match("~^utf8~",$o[$y]["collation"])?$y:"CONVERT($y USING ".charset($f).")").")";$X=md5($X);}$Bi.="&".($X!==null?urlencode("where[".bracket_escape($y)."]")."=".urlencode($X===false?"f":$X):"null%5B%5D=".urlencode($y));}echo"".(!$nd&&$L?"":"\n";}if(is_ajax())exit;echo"
    ".script("qs('#all-page').onclick = partial(formCheck, /check/);","")." ".'Modify'."");$Ve=array();$id=array();reset($L);$wg=1;foreach($K[0]as$y=>$X){if(!isset($Di[$y])){$X=$_GET["columns"][key($L)];$n=$o[$L?($X?$X["col"]:current($L)):$y];$B=($n?$b->fieldName($n,$wg):($X["fun"]?"*":h($y)));if($B!=""){$wg++;$Ve[$y]=$B;$d=idf_escape($y);$Bd=remove_from_uri('(order|desc)[^=]*|page').'&order%5B0%5D='.urlencode($y);$Rb="&desc%5B0%5D=1";$qh=isset($n["privileges"]["order"]);echo"".script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});","");$hd=apply_sql_function($X["fun"],$B);echo($qh?''."$hd":$hd),"";}$id[$y]=$X["fun"];next($L);}}$re=array();if($_GET["modify"]){foreach($K as$J){foreach($J as$y=>$X)$re[$y]=max($re[$y],min(40,strlen(utf8_decode($X))));}}echo($Ea?"".'Relations':"")."
    ".checkbox("check[]",substr($Bi,1),in_array(substr($Bi,1),(array)$_POST["check"])).($Wd||information_schema(DB)?"":" ".'edit'.""));foreach($J as$y=>$X){if(isset($Ve[$y])){$n=$o[$y];$X=$l->value($X,$n);if($X!=""&&(!isset($oc[$y])||$oc[$y]!=""))$oc[$y]=(is_mail($X)?$Ve[$y]:"");$_="";if(preg_match('~blob|bytea|raw|file~',$n["type"])&&$X!="")$_=ME.'download='.urlencode($a).'&field='.urlencode($y).$Bi;if(!$_&&$X!==null){foreach((array)$cd[$y]as$q){if(count($cd[$y])==1||end($q["source"])==$y){$_="";foreach($q["source"]as$t=>$rh)$_.=where_link($t,$q["target"][$t],$K[$Te][$rh]);$_=($q["db"]!=""?preg_replace('~([?&]db=)[^&]+~','\1'.urlencode($q["db"]),ME):ME).'select='.urlencode($q["table"]).$_;if($q["ns"])$_=preg_replace('~([?&]ns=)[^&]+~','\1'.urlencode($q["ns"]),$_);if(count($q["source"])==1)break;}}}if($y=="COUNT(*)"){$_=ME."select=".urlencode($a);$t=0;foreach((array)$_GET["where"]as$W){if(!array_key_exists($W["col"],$Ai))$_.=where_link($t++,$W["col"],$W["val"],$W["op"]);}foreach($Ai as$ce=>$W)$_.=where_link($t++,$ce,$W);}$X=select_value($X,$_,$n,$Zh);$u=h("val[$Bi][".bracket_escape($y)."]");$Y=$_POST["val"][$Bi][bracket_escape($y)];$jc=!is_array($J[$y])&&is_utf8($X)&&$K[$Te][$y]==$J[$y]&&!$id[$y]&&!$n["generated"];$Xh=preg_match('~text|json|lob~',$n["type"]);echo"".($Xh?"":"");}else{$we=strpos($X,"");echo" data-text='".($we?2:($Xh?1:0))."'".($jc?"":" data-warning='".h('Use edit link to modify this value.')."'").">$X";}}}if($Ea)echo"";$b->backwardKeysPrint($Ea,$K[$Te]);echo"
    \n","
    \n";}if(!is_ajax()){if($K||$D){$Bc=true;if($_GET["page"]!="last"){if($z==""||(count($K)<$z&&($K||!$D)))$fd=($D?$D*$z:0)+count($K);elseif(JUSH!="sql"||!$Wd){$fd=($Wd?false:found_rows($R,$Z));if($fd$z||$D));if($Mf)echo(($fd===false?count($K)+1:$fd-$D*$z)>$z?'

    '.'Load more data'.''.script("qsl('a').onclick = partial(selectLoadMore, ".(+$z).", '".'Loading'."…');",""):''),"\n";}echo"

    \n";if($b->selectImportPrint())echo"
    ","".'Import'."",script("qsl('a').onclick = partial(toggle, 'import');",""),"","
    ";echo"\n","\n",(!$nd&&$L?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["variables"])){$O=isset($_GET["status"]);page_header($O?'Status':'Variables');$Ri=($O?show_status():show_variables());if(!$Ri)echo"

    ".'No rows.'."\n";else{echo"\n";foreach($Ri as$y=>$X)echo"","
    ".h($y)."","".nl_br(h($X));echo"
    \n";}}elseif(isset($_GET["script"])){header("Content-Type: text/javascript; charset=utf-8");if($_GET["script"]=="db"){$Hh=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach(table_status()as$B=>$R){json_row("Comment-$B",h($R["Comment"]));if(!is_view($R)){foreach(array("Engine","Collation")as$y)json_row("$y-$B",h($R[$y]));foreach($Hh+array("Auto_increment"=>0,"Rows"=>0)as$y=>$X){if($R[$y]!=""){$X=format_number($R[$y]);if($X>=0)json_row("$y-$B",($y=="Rows"&&$X&&$R["Engine"]==(JUSH=="pgsql"?"table":"InnoDB")?"~ $X":$X));if(isset($Hh[$y]))$Hh[$y]+=($R["Engine"]!="InnoDB"||$y!="Data_free"?$R[$y]:0);}elseif(array_key_exists($y,$R))json_row("$y-$B","?");}}}foreach($Hh as$y=>$X)json_row("sum-$y",format_number($X));json_row("");}elseif($_GET["script"]=="kill")$f->query("KILL ".number($_POST["kill"]));else{foreach(count_tables($b->databases())as$j=>$X){json_row("tables-$j",$X);json_row("size-$j",db_size($j));}json_row("");}exit;}else{$Rh=array_merge((array)$_POST["tables"],(array)$_POST["views"]);if($Rh&&!$m&&!$_POST["search"]){$H=true;$Je="";if(JUSH=="sql"&&$_POST["tables"]&&count($_POST["tables"])>1&&($_POST["drop"]||$_POST["truncate"]||$_POST["copy"]))queries("SET foreign_key_checks = 0");if($_POST["truncate"]){if($_POST["tables"])$H=truncate_tables($_POST["tables"]);$Je='Tables have been truncated.';}elseif($_POST["move"]){$H=move_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$Je='Tables have been moved.';}elseif($_POST["copy"]){$H=copy_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$Je='Tables have been copied.';}elseif($_POST["drop"]){if($_POST["views"])$H=drop_views($_POST["views"]);if($H&&$_POST["tables"])$H=drop_tables($_POST["tables"]);$Je='Tables have been dropped.';}elseif(JUSH=="sqlite"&&$_POST["check"]){foreach((array)$_POST["tables"]as$Q){foreach(get_rows("PRAGMA integrity_check(".q($Q).")")as$J)$Je.="".h($Q).": ".h($J["integrity_check"])."
    ";}}elseif(JUSH!="sql"){$H=(JUSH=="sqlite"?queries("VACUUM"):apply_queries("VACUUM".($_POST["optimize"]?"":" ANALYZE"),$_POST["tables"]));$Je='Tables have been optimized.';}elseif(!$_POST["tables"])$Je='No tables.';elseif($H=queries(($_POST["optimize"]?"OPTIMIZE":($_POST["check"]?"CHECK":($_POST["repair"]?"REPAIR":"ANALYZE")))." TABLE ".implode(", ",array_map('Adminer\idf_escape',$_POST["tables"])))){while($J=$H->fetch_assoc())$Je.="".h($J["Table"]).": ".h($J["Msg_text"])."
    ";}queries_redirect(substr(ME,0,-1),$Je,$H);}page_header(($_GET["ns"]==""?'Database'.": ".h(DB):'Schema'.": ".h($_GET["ns"])),$m,true);if($b->homepage()){if($_GET["ns"]!==""){echo"

    ".'Tables and views'."

    \n";$Qh=tables_list();if(!$Qh)echo"

    ".'No tables.'."\n";else{echo"

    \n";if(support("table")){echo"
    ".'Search data in tables'."
    ","",script("qsl('input').onkeydown = partialArg(bodyKeydown, 'search');","")," \n","
    \n";if($_POST["search"]&&$_POST["query"]!=""){$_GET["where"][0]["op"]=$l->convertOperator("LIKE %%");search_tables();}}echo"
    \n","\n",script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),'','\n";$S=0;foreach($Qh as$B=>$U){$Ui=($U!==null&&!preg_match('~table|sequence~i',$U));$u=h("Table-".$B);echo'
    '.script("qs('#check-all').onclick = partial(formCheck, /^(tables|views)\[/);",""),''.'Table',''.'Engine'.doc_link(array('sql'=>'storage-engines.html')),''.'Collation'.doc_link(array('sql'=>'charset-charsets.html','mariadb'=>'supported-character-sets-and-collations/')),''.'Data Length'.doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT','oracle'=>'REFRN20286')),''.'Index Length'.doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT')),''.'Data Free'.doc_link(array('sql'=>'show-table-status.html')),''.'Auto Increment'.doc_link(array('sql'=>'example-auto-increment.html','mariadb'=>'auto_increment/')),''.'Rows'.doc_link(array('sql'=>'show-table-status.html','pgsql'=>'catalog-pg-class.html#CATALOG-PG-CLASS','oracle'=>'REFRN20286')),(support("comment")?''.'Comment'.doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE')):''),"
    '.checkbox(($Ui?"views[]":"tables[]"),$B,in_array($B,$Rh,true),"","","",$u),''.(support("table")||support("indexes")?"".h($B).'':h($B));if($Ui)echo''.(preg_match('~materialized~i',$U)?'Materialized view':'View').'','?';else{foreach(array("Engine"=>array(),"Collation"=>array(),"Data_length"=>array("create",'Alter table'),"Index_length"=>array("indexes",'Alter indexes'),"Data_free"=>array("edit",'New item'),"Auto_increment"=>array("auto_increment=1&create",'Alter table'),"Rows"=>array("select",'Select data'),)as$y=>$_){$u=" id='$y-".h($B)."'";echo($_?"".(support("table")||$y=="Rows"||(support("indexes")&&$y!="Data_length")?"?":"?"):"");}$S++;}echo(support("comment")?"":""),"\n";}echo"
    ".sprintf('%d in total',count($Qh)),"".h(JUSH=="sql"?get_val("SELECT @@default_storage_engine"):""),"".h(db_collation(DB,collations()));foreach(array("Data_length","Index_length","Data_free")as$y)echo"";echo"\n","
    \n","
    \n";if(!information_schema(DB)){echo"\n";}echo"
    \n",script("tableCheck();");}echo'

    ".'Routines'."

    \n";$Og=routines();if($Og){echo"\n",'\n";foreach($Og as$J){$B=($J["SPECIFIC_NAME"]==$J["ROUTINE_NAME"]?"":"&name=".urlencode($J["ROUTINE_NAME"]));echo'','
    '.'Name'.''.'Type'.''.'Return type'."
    '.h($J["ROUTINE_NAME"]).'',''.h($J["ROUTINE_TYPE"]),''.h($J["DTD_IDENTIFIER"]),''.'Alter'."";}echo"
    \n";}echo'

    ".'Sequences'."

    \n";$fh=get_vals("SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema() ORDER BY sequence_name");if($fh){echo"\n","\n";foreach($fh as$X)echo"
    ".'Name'."
    ".h($X)."\n";echo"
    \n";}echo"

    ".'User types'."

    \n";$Mi=types();if($Mi){echo"\n","\n";foreach($Mi as$X)echo"
    ".'Name'."
    ".h($X)."\n";echo"
    \n";}echo"

    ".'Events'."

    \n";$K=get_rows("SHOW EVENTS");if($K){echo"\n","\n";foreach($K as$J)echo"","
    ".'Name'."".'Schedule'."".'Start'."".'End'."
    ".h($J["Name"]),"".($J["Execute at"]?'At given time'."".$J["Execute at"]:'Every'." ".$J["Interval value"]." ".$J["Interval field"]."$J[Starts]"),"$J[Ends]",''.'Alter'.'';echo"
    \n";$_c=get_val("SELECT @@event_scheduler");if($_c&&$_c!="ON")echo"

    event_scheduler: ".h($_c)."\n";}echo'