From d1b6cb637437a11348a32677628e80071ef4dfe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Cap=C3=B3?= Date: Thu, 10 Apr 2025 16:54:03 +0200 Subject: [PATCH] update adminer and hide errors --- adminer.php | 1247 ++++++++++++++++++++++++++------------------------- index.php | 2 +- 2 files changed, 634 insertions(+), 615 deletions(-) diff --git a/adminer.php b/adminer.php index 831b3e9..cf68f01 100644 --- a/adminer.php +++ b/adminer.php @@ -5,18 +5,18 @@ * @copyright 2007 Jakub Vrana * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 * @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other) -* @version 5.1.1 +* @version 5.2.0 */namespace Adminer;const -VERSION="5.1.1";error_reporting(24575);set_error_handler(function($xc,$zc){return!!preg_match('~^Undefined (array key|offset|index)~',$zc);},E_WARNING|E_NOTICE);$Tc=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($Tc||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$Oi=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($Oi)$$X=$Oi;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function -connection($g=null){return($g?:Db::$be);}function +VERSION="5.2.0";error_reporting(24575);set_error_handler(function($_c,$Bc){return!!preg_match('~^Undefined (array key|offset|index)~',$Bc);},E_WARNING|E_NOTICE);$Wc=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($Wc||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$Wi=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($Wi)$$X=$Wi;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function +connection($g=null){return($g?:Db::$ee);}function adminer(){return -Adminer::$be;}function +Adminer::$ee;}function driver(){return -Driver::$be;}function -connect(array$Bb){$J=Driver::connect($Bb[0],$Bb[1],$Bb[2]);return(is_object($J)?$J:null);}function -idf_unescape($u){if(!preg_match('~^[`\'"[]~',$u))return$u;$te=substr($u,-1);return -str_replace($te.$te,$te,substr($u,1,-1));}function +Driver::$ee;}function +connect(){$Cb=adminer()->credentials();$J=Driver::connect($Cb[0],$Cb[1],$Cb[2]);return(is_object($J)?$J:null);}function +idf_unescape($u){if(!preg_match('~^[`\'"[]~',$u))return$u;$xe=substr($u,-1);return +str_replace($xe.$xe,$xe,substr($u,1,-1));}function q($Q){return connection()->quote($Q);}function escape_string($X){return @@ -25,87 +25,87 @@ idx($va,$x,$k=null){return($va&&array_key_exists($x,$va)?$va[$x]:$k);}function number($X){return preg_replace('~[^0-9]+~','',$X);}function number_type(){return'((?$W){unset($_g[$x][$me]);if(is_array($W)){$_g[$x][stripslashes($me)]=$W;$_g[]=&$_g[$x][stripslashes($me)];}else$_g[$x][stripslashes($me)]=($Tc?$W:stripslashes($W));}}}}function -bracket_escape($u,$Ca=false){static$zi=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return -strtr($u,($Ca?array_flip($zi):$zi));}function -min_version($fj,$Ee="",$g=null){$g=connection($g);$th=$g->server_info;if($Ee&&preg_match('~([\d.]+)-MariaDB~',$th,$B)){$th=$B[1];$fj=$Ee;}return$fj&&version_compare($th,$fj)>=0;}function +remove_slashes(array$Eg,$Wc=false){if(function_exists("get_magic_quotes_gpc")&&get_magic_quotes_gpc()){while(list($x,$X)=each($Eg)){foreach($X +as$pe=>$W){unset($Eg[$x][$pe]);if(is_array($W)){$Eg[$x][stripslashes($pe)]=$W;$Eg[]=&$Eg[$x][stripslashes($pe)];}else$Eg[$x][stripslashes($pe)]=($Wc?$W:stripslashes($W));}}}}function +bracket_escape($u,$Ca=false){static$Fi=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return +strtr($u,($Ca?array_flip($Fi):$Fi));}function +min_version($nj,$Ie="",$g=null){$g=connection($g);$zh=$g->server_info;if($Ie&&preg_match('~([\d.]+)-MariaDB~',$zh,$B)){$zh=$B[1];$nj=$Ie;}return$nj&&version_compare($zh,$nj)>=0;}function charset(Db$f){return(min_version("5.5.3",0,$f)?"utf8mb4":"utf8");}function -ini_bool($Wd){$X=ini_get($Wd);return(preg_match('~^(on|true|yes)$~i',$X)||(int)$X);}function +ini_bool($Zd){$X=ini_get($Zd);return(preg_match('~^(on|true|yes)$~i',$X)||(int)$X);}function sid(){static$J;if($J===null)$J=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$J;}function -set_password($ej,$N,$V,$F){$_SESSION["pwds"][$ej][$N][$V]=($_COOKIE["adminer_key"]&&is_string($F)?array(encrypt_string($F,$_COOKIE["adminer_key"])):$F);}function +set_password($mj,$N,$V,$F){$_SESSION["pwds"][$mj][$N][$V]=($_COOKIE["adminer_key"]&&is_string($F)?array(encrypt_string($F,$_COOKIE["adminer_key"])):$F);}function get_password(){$J=get_session("pwds");if(is_array($J))$J=($_COOKIE["adminer_key"]?decrypt_string($J[0],$_COOKIE["adminer_key"]):false);return$J;}function get_val($H,$m=0,$qb=null){$qb=connection($qb);$I=$qb->query($H);if(!is_object($I))return false;$K=$I->fetch_row();return($K?$K[$m]:false);}function get_vals($H,$d=0){$J=array();$I=connection()->query($H);if(is_object($I)){while($K=$I->fetch_row())$J[]=$K[$d];}return$J;}function -get_key_vals($H,$g=null,$wh=true){$g=connection($g);$J=array();$I=$g->query($H);if(is_object($I)){while($K=$I->fetch_row()){if($wh)$J[$K[0]]=$K[1];else$J[]=$K[0];}}return$J;}function +get_key_vals($H,$g=null,$Bh=true){$g=connection($g);$J=array();$I=$g->query($H);if(is_object($I)){while($K=$I->fetch_row()){if($Bh)$J[$K[0]]=$K[1];else$J[]=$K[0];}}return$J;}function get_rows($H,$g=null,$l="

"){$qb=connection($g);$J=array();$I=$qb->query($H);if(is_object($I)){while($K=$I->fetch_assoc())$J[]=$K;}elseif(!$I&&!$g&&$l&&(defined('Adminer\PAGE_HEADER')||$l=="-- "))echo$l.error()."\n";return$J;}function unique_array($K,array$w){foreach($w as$v){if(preg_match("~PRIMARY|UNIQUE~",$v["type"])){$J=array();foreach($v["columns"]as$x){if(!isset($K[$x]))continue 2;$J[$x]=$K[$x];}return$J;}}}function escape_key($x){if(preg_match('(^([\w(]+)('.str_replace("_",".*",preg_quote(idf_escape("_"))).')([ \w)]+)$)',$x,$B))return$B[1].idf_escape(idf_unescape($B[2])).$B[3];return idf_escape($x);}function -where(array$Z,array$n=array()){$J=array();foreach((array)$Z["where"]as$x=>$X){$x=bracket_escape($x,true);$d=escape_key($x);$m=idx($n,$x,array());$Rc=$m["type"];$J[]=$d.(JUSH=="sql"&&$Rc=="json"?" = CAST(".q($X)." AS JSON)":(JUSH=="sql"&&is_numeric($X)&&preg_match('~\.~',$X)?" LIKE ".q($X):(JUSH=="mssql"&&strpos($Rc,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$X)):" = ".unconvert_field($m,q($X)))));if(JUSH=="sql"&&preg_match('~char|text~',$Rc)&&preg_match("~[^ -@]~",$X))$J[]="$d = ".q($X)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$x)$J[]=escape_key($x)." IS NULL";return +where(array$Z,array$n=array()){$J=array();foreach((array)$Z["where"]as$x=>$X){$x=bracket_escape($x,true);$d=escape_key($x);$m=idx($n,$x,array());$Uc=$m["type"];$J[]=$d.(JUSH=="sql"&&$Uc=="json"?" = CAST(".q($X)." AS JSON)":(JUSH=="sql"&&is_numeric($X)&&preg_match('~\.~',$X)?" LIKE ".q($X):(JUSH=="mssql"&&strpos($Uc,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$X)):" = ".unconvert_field($m,q($X)))));if(JUSH=="sql"&&preg_match('~char|text~',$Uc)&&preg_match("~[^ -@]~",$X))$J[]="$d = ".q($X)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$x)$J[]=escape_key($x)." IS NULL";return implode(" AND ",$J);}function where_check($X,array$n=array()){parse_str($X,$Va);remove_slashes(array(&$Va));return where($Va,$n);}function -where_link($s,$d,$Y,$Bf="="){return"&where%5B$s%5D%5Bcol%5D=".urlencode($d)."&where%5B$s%5D%5Bop%5D=".urlencode(($Y!==null?$Bf:"IS NULL"))."&where%5B$s%5D%5Bval%5D=".urlencode($Y);}function +where_link($s,$d,$Y,$Ff="="){return"&where%5B$s%5D%5Bcol%5D=".urlencode($d)."&where%5B$s%5D%5Bop%5D=".urlencode(($Y!==null?$Ff:"IS NULL"))."&where%5B$s%5D%5Bval%5D=".urlencode($Y);}function convert_fields(array$e,array$n,array$M=array()){$J="";foreach($e as$x=>$X){if($M&&!in_array(idf_escape($x),$M))continue;$wa=convert_field($n[$x]);if($wa)$J .=", $wa AS ".idf_escape($x);}return$J;}function -cookie($C,$Y,$_e=2592000){header("Set-Cookie: $C=".urlencode($Y).($_e?"; expires=".gmdate("D, d M Y H:i:s",time()+$_e)." GMT":"")."; path=".preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]).(HTTPS?"; secure":"")."; HttpOnly; SameSite=lax",false);}function -get_settings($zb){parse_str($_COOKIE[$zb],$xh);return$xh;}function -get_setting($x,$zb="adminer_settings"){$xh=get_settings($zb);return$xh[$x];}function -save_settings(array$xh,$zb="adminer_settings"){cookie($zb,http_build_query($xh+get_settings($zb)));}function +cookie($C,$Y,$De=2592000){header("Set-Cookie: $C=".urlencode($Y).($De?"; expires=".gmdate("D, d M Y H:i:s",time()+$De)." GMT":"")."; path=".preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]).(HTTPS?"; secure":"")."; HttpOnly; SameSite=lax",false);}function +get_settings($zb){parse_str($_COOKIE[$zb],$Ch);return$Ch;}function +get_setting($x,$zb="adminer_settings"){$Ch=get_settings($zb);return$Ch[$x];}function +save_settings(array$Ch,$zb="adminer_settings"){$Y=http_build_query($Ch+get_settings($zb));cookie($zb,$Y);$_COOKIE[$zb]=$Y;}function restart_session(){if(!ini_bool("session.use_cookies")&&(!function_exists('session_status')||session_status()==1))session_start();}function -stop_session($bd=false){$Wi=ini_bool("session.use_cookies");if(!$Wi||$bd){session_write_close();if($Wi&&@ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($x){return$_SESSION[$x][DRIVER][SERVER][$_GET["username"]];}function +stop_session($ed=false){$ej=ini_bool("session.use_cookies");if(!$ej||$ed){session_write_close();if($ej&&@ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($x){return$_SESSION[$x][DRIVER][SERVER][$_GET["username"]];}function set_session($x,$X){$_SESSION[$x][DRIVER][SERVER][$_GET["username"]]=$X;}function -auth_url($ej,$N,$V,$j=null){$Si=remove_from_uri(implode("|",array_keys(SqlDriver::$ac))."|username|ext|".($j!==null?"db|":"").($ej=='mssql'||$ej=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$Si,$B);return"$B[1]?".(sid()?SID."&":"").($ej!="server"||$N!=""?urlencode($ej)."=".urlencode($N)."&":"").($_GET["ext"]?"ext=".urlencode($_GET["ext"])."&":"")."username=".urlencode($V).($j!=""?"&db=".urlencode($j):"").($B[2]?"&$B[2]":"");}function +auth_url($mj,$N,$V,$j=null){$aj=remove_from_uri(implode("|",array_keys(SqlDriver::$dc))."|username|ext|".($j!==null?"db|":"").($mj=='mssql'||$mj=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$aj,$B);return"$B[1]?".(sid()?SID."&":"").($mj!="server"||$N!=""?urlencode($mj)."=".urlencode($N)."&":"").($_GET["ext"]?"ext=".urlencode($_GET["ext"])."&":"")."username=".urlencode($V).($j!=""?"&db=".urlencode($j):"").($B[2]?"&$B[2]":"");}function is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function -redirect($A,$Re=null){if($Re!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($A!==null?$A:$_SERVER["REQUEST_URI"]))][]=$Re;}if($A!==null){if($A=="")$A=".";header("Location: $A");exit;}}function -query_redirect($H,$A,$Re,$Ig=true,$Dc=true,$Mc=false,$mi=""){if($Dc){$Lh=microtime(true);$Mc=!connection()->query($H);$mi=format_time($Lh);}$Fh=($H?adminer()->messageQuery($H,$mi,$Mc):"");if($Mc){adminer()->error -.=error().$Fh.script("messagesPrint();")."
";return -false;}if($Ig)redirect($A,$Re.$Fh);return +redirect($A,$Ve=null){if($Ve!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($A!==null?$A:$_SERVER["REQUEST_URI"]))][]=$Ve;}if($A!==null){if($A=="")$A=".";header("Location: $A");exit;}}function +query_redirect($H,$A,$Ve,$Ng=true,$Gc=true,$Pc=false,$ti=""){if($Gc){$Rh=microtime(true);$Pc=!connection()->query($H);$ti=format_time($Rh);}$Lh=($H?adminer()->messageQuery($H,$ti,$Pc):"");if($Pc){adminer()->error +.=error().$Lh.script("messagesPrint();")."
";return +false;}if($Ng)redirect($A,$Ve.$Lh);return true;}class -Queries{static$Dg=array();static$Lh=0;}function -queries($H){if(!Queries::$Lh)Queries::$Lh=microtime(true);Queries::$Dg[]=(preg_match('~;$~',$H)?"DELIMITER ;;\n$H;\nDELIMITER ":$H).";";return +Queries{static$Ig=array();static$Rh=0;}function +queries($H){if(!Queries::$Rh)Queries::$Rh=microtime(true);Queries::$Ig[]=(preg_match('~;$~',$H)?"DELIMITER ;;\n$H;\nDELIMITER ":$H).";";return connection()->query($H);}function -apply_queries($H,array$T,$_c='Adminer\table'){foreach($T -as$R){if(!queries("$H ".$_c($R)))return +apply_queries($H,array$T,$Cc='Adminer\table'){foreach($T +as$R){if(!queries("$H ".$Cc($R)))return false;}return true;}function -queries_redirect($A,$Re,$Ig){$Dg=implode("\n",Queries::$Dg);$mi=format_time(Queries::$Lh);return -query_redirect($Dg,$A,$Re,$Ig,false,!$Ig,$mi);}function -format_time($Lh){return -sprintf('%.3f s',max(0,microtime(true)-$Lh));}function +queries_redirect($A,$Ve,$Ng){$Ig=implode("\n",Queries::$Ig);$ti=format_time(Queries::$Rh);return +query_redirect($Ig,$A,$Ve,$Ng,false,!$Ng,$ti);}function +format_time($Rh){return +sprintf('%.3f s',max(0,microtime(true)-$Rh));}function relative_uri(){return str_replace(":","%3a",preg_replace('~^[^?]*/([^?]*)~','\1',$_SERVER["REQUEST_URI"]));}function -remove_from_uri($Yf=""){return -substr(preg_replace("~(?<=[?&])($Yf".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function -get_file($x,$Nb=false,$Rb=""){$Sc=$_FILES[$x];if(!$Sc)return -null;foreach($Sc -as$x=>$X)$Sc[$x]=(array)$X;$J='';foreach($Sc["error"]as$x=>$l){if($l)return$l;$C=$Sc["name"][$x];$ui=$Sc["tmp_name"][$x];$vb=file_get_contents($Nb&&preg_match('~\.gz$~',$C)?"compress.zlib://$ui":$ui);if($Nb){$Lh=substr($vb,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$Lh))$vb=iconv("utf-16","utf-8",$vb);elseif($Lh=="\xEF\xBB\xBF")$vb=substr($vb,3);}$J -.=$vb;if($Rb)$J -.=(preg_match("($Rb\\s*\$)",$vb)?"":$Rb)."\n\n";}return$J;}function -upload_error($l){$Me=($l==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($l?'Unable to upload a file.'.($Me?" ".sprintf('Maximum allowed file size is %sB.',$Me):""):'File does not exist.');}function -repeat_pattern($ig,$y){return -str_repeat("$ig{0,65535}",$y/65535)."$ig{0,".($y%65535)."}";}function +remove_from_uri($cg=""){return +substr(preg_replace("~(?<=[?&])($cg".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function +get_file($x,$Ob=false,$Tb=""){$Vc=$_FILES[$x];if(!$Vc)return +null;foreach($Vc +as$x=>$X)$Vc[$x]=(array)$X;$J='';foreach($Vc["error"]as$x=>$l){if($l)return$l;$C=$Vc["name"][$x];$Ai=$Vc["tmp_name"][$x];$vb=file_get_contents($Ob&&preg_match('~\.gz$~',$C)?"compress.zlib://$Ai":$Ai);if($Ob){$Rh=substr($vb,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$Rh))$vb=iconv("utf-16","utf-8",$vb);elseif($Rh=="\xEF\xBB\xBF")$vb=substr($vb,3);}$J +.=$vb;if($Tb)$J +.=(preg_match("($Tb\\s*\$)",$vb)?"":$Tb)."\n\n";}return$J;}function +upload_error($l){$Qe=($l==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($l?'Unable to upload a file.'.($Qe?" ".sprintf('Maximum allowed file size is %sB.',$Qe):""):'File does not exist.');}function +repeat_pattern($mg,$y){return +str_repeat("$mg{0,65535}",$y/65535)."$mg{0,".($y%65535)."}";}function is_utf8($X){return(preg_match('~~u',$X)&&!preg_match('~[\0-\x8\xB\xC\xE-\x1F]~',$X));}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($R,$Nc=false){$J=table_status($R,$Nc);return($J?reset($J):array("Name"=>$R));}function +table_status1($R,$Qc=false){$J=table_status($R,$Qc);return($J?reset($J):array("Name"=>$R));}function column_foreign_keys($R){$J=array();foreach(adminer()->foreignKeys($R)as$p){foreach($p["source"]as$X)$J[$X][]=$p;}return$J;}function fields_from_edit(){$J=array();foreach((array)$_POST["field_keys"]as$x=>$X){if($X!=""){$X=bracket_escape($X);$_POST["function"][$X]=$_POST["field_funs"][$x];$_POST["fields"][$X]=$_POST["field_vals"][$x];}}foreach((array)$_POST["fields"]as$x=>$X){$C=bracket_escape($x,true);$J[$C]=array("field"=>$C,"privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>1,"auto_increment"=>($x==driver()->primary),);}return$J;}function -dump_headers($Jd,$bf=false){$J=adminer()->dumpHeaders($Jd,$bf);$Uf=$_POST["output"];if($Uf!="text")header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($Jd).".$J".($Uf!="file"&&preg_match('~^[0-9a-z]+$~',$Uf)?".$Uf":""));session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$J;}function +dump_headers($Md,$ff=false){$J=adminer()->dumpHeaders($Md,$ff);$Yf=$_POST["output"];if($Yf!="text")header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($Md).".$J".($Yf!="file"&&preg_match('~^[0-9a-z]+$~',$Yf)?".$Yf":""));session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$J;}function dump_csv(array$K){foreach($K as$x=>$X){if(preg_match('~["\n,;\t]|^0|\.\d*0$~',$X)||$X==="")$K[$x]='"'.str_replace('"','""',$X).'"';}echo implode(($_POST["format"]=="csv"?",":($_POST["format"]=="tsv"?"\t":";")),$K)."\r\n";}function apply_sql_function($r,$d){return($r?($r=="unixepoch"?"DATETIME($d, '$r')":($r=="count distinct"?"COUNT(DISTINCT ":strtoupper("$r("))."$d)"):$d);}function get_temp_dir(){$J=ini_get("upload_tmp_dir");if(!$J){if(function_exists('sys_get_temp_dir'))$J=sys_get_temp_dir();else{$o=@tempnam("","");if(!$o)return'';$J=dirname($o);unlink($o);}}return$J;}function file_open_lock($o){if(is_link($o))return;$q=@fopen($o,"c+");if(!$q)return;chmod($o,0660);if(!flock($q,LOCK_EX)){fclose($q);return;}return$q;}function -file_write_unlock($q,$Hb){rewind($q);fwrite($q,$Hb);ftruncate($q,strlen($Hb));file_unlock($q);}function +file_write_unlock($q,$Ib){rewind($q);fwrite($q,$Ib);ftruncate($q,strlen($Ib));file_unlock($q);}function file_unlock($q){flock($q,LOCK_UN);fclose($q);}function first(array$va){return reset($va);}function @@ -113,27 +113,27 @@ password_file($h){$o=get_temp_dir()."/adminer.key";if(!$h&&!file_exists($o))retu file_unlock($q);return$J;}function rand_string(){return md5(uniqid(strval(mt_rand()),true));}function -select_value($X,$_,array$m,$li){if(is_array($X)){$J="";foreach($X -as$me=>$W)$J -.="".($X!=array_values($X)?"".h($me):"")."".select_value($W,$_,$m,$li);return"$J
";}if(!$_)$_=adminer()->selectLink($X,$m);if($_===null){if(is_mail($X))$_="mailto:$X";if(is_url($X))$_=$X;}$J=adminer()->editVal($X,$m);if($J!==null){if(!is_utf8($J))$J="\0";elseif($li!=""&&is_shortable($m))$J=shorten_utf8($J,max(0,+$li));else$J=h($J);}return +select_value($X,$_,array$m,$si){if(is_array($X)){$J="";foreach($X +as$pe=>$W)$J +.="".($X!=array_values($X)?"".h($pe):"")."".select_value($W,$_,$m,$si);return"$J
";}if(!$_)$_=adminer()->selectLink($X,$m);if($_===null){if(is_mail($X))$_="mailto:$X";if(is_url($X))$_=$X;}$J=adminer()->editVal($X,$m);if($J!==null){if(!is_utf8($J))$J="\0";elseif($si!=""&&is_shortable($m))$J=shorten_utf8($J,max(0,+$si));else$J=h($J);}return adminer()->selectVal($J,$_,$m,$X);}function -is_mail($nc){$xa='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$Zb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$ig="$xa+(\\.$xa+)*@($Zb?\\.)+$Zb";return -is_string($nc)&&preg_match("(^$ig(,\\s*$ig)*\$)i",$nc);}function -is_url($Q){$Zb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return -preg_match("~^(https?)://($Zb?\\.)+$Zb(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$Q);}function +is_mail($qc){$xa='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$cc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$mg="$xa+(\\.$xa+)*@($cc?\\.)+$cc";return +is_string($qc)&&preg_match("(^$mg(,\\s*$mg)*\$)i",$qc);}function +is_url($Q){$cc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return +preg_match("~^(https?)://($cc?\\.)+$cc(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$Q);}function is_shortable(array$m){return preg_match('~char|text|json|lob|geometry|point|linestring|polygon|string|bytea~',$m["type"]);}function -count_rows($R,array$Z,$ge,array$pd){$H=" FROM ".table($R).($Z?" WHERE ".implode(" AND ",$Z):"");return($ge&&(JUSH=="sql"||count($pd)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$pd).")$H":"SELECT COUNT(*)".($ge?" FROM (SELECT 1$H GROUP BY ".implode(", ",$pd).") x":$H));}function -slow_query($H){$j=adminer()->database();$ni=adminer()->queryTimeout();$Ah=driver()->slowQuery($H,$ni);$g=null;if(!$Ah&&support("kill")){$g=connect(adminer()->credentials());if($g&&($j==""||$g->select_db($j))){$pe=get_val(connection_id(),0,$g);echo -script("const timeout = setTimeout(() => { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$pe&token=".get_token()."'); }, 1000 * $ni);");}}ob_flush();flush();$J=@get_key_vals(($Ah?:$H),$g,false);if($g){echo +count_rows($R,array$Z,$je,array$sd){$H=" FROM ".table($R).($Z?" WHERE ".implode(" AND ",$Z):"");return($je&&(JUSH=="sql"||count($sd)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$sd).")$H":"SELECT COUNT(*)".($je?" FROM (SELECT 1$H GROUP BY ".implode(", ",$sd).") x":$H));}function +slow_query($H){$j=adminer()->database();$ui=adminer()->queryTimeout();$Gh=driver()->slowQuery($H,$ui);$g=null;if(!$Gh&&support("kill")){$g=connect();if($g&&($j==""||$g->select_db($j))){$se=get_val(connection_id(),0,$g);echo +script("const timeout = setTimeout(() => { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$se&token=".get_token()."'); }, 1000 * $ui);");}}ob_flush();flush();$J=@get_key_vals(($Gh?:$H),$g,false);if($g){echo script("clearTimeout(timeout);");ob_flush();flush();}return$J;}function -get_token(){$Gg=rand(1,1e6);return($Gg^$_SESSION["token"]).":$Gg";}function -verify_token(){list($vi,$Gg)=explode(":",$_POST["token"]);return($Gg^$_SESSION["token"])==$vi;}function -lzw_decompress($Ia){$Vb=256;$Ja=8;$eb=array();$Tg=0;$Ug=0;for($s=0;$s=$Ja){$Ug-=$Ja;$eb[]=$Tg>>$Ug;$Tg&=(1<<$Ug)-1;$Vb++;if($Vb>>$Ja)$Ja++;}}$Ub=range("\0","\xFF");$J="";$oj="";foreach($eb -as$s=>$db){$mc=$Ub[$db];if(!isset($mc))$mc=$oj.$oj[0];$J -.=$mc;if($s)$Ub[]=$oj.$mc[0];$oj=$mc;}return$J;}function -script($Ch,$yi="\n"){return"$Ch$yi";}function -script_src($Ti){return"\n";}function +get_token(){$Lg=rand(1,1e6);return($Lg^$_SESSION["token"]).":$Lg";}function +verify_token(){list($Bi,$Lg)=explode(":",$_POST["token"]);return($Lg^$_SESSION["token"])==$Bi;}function +lzw_decompress($Ia){$Yb=256;$Ja=8;$eb=array();$Yg=0;$Zg=0;for($s=0;$s=$Ja){$Zg-=$Ja;$eb[]=$Yg>>$Zg;$Yg&=(1<<$Zg)-1;$Yb++;if($Yb>>$Ja)$Ja++;}}$Xb=range("\0","\xFF");$J="";$wj="";foreach($eb +as$s=>$db){$pc=$Xb[$db];if(!isset($pc))$pc=$wj.$wj[0];$J +.=$pc;if($s)$Xb[]=$wj.$pc[0];$wj=$pc;}return$J;}function +script($Ih,$Ei="\n"){return"$Ih$Ei";}function +script_src($bj,$Qb=false){return"\n";}function nonce(){return' nonce="'.get_nonce().'"';}function input_hidden($C,$Y=""){return"\n";}function input_token(){return @@ -143,72 +143,72 @@ h($Q){return str_replace("\0","�",htmlspecialchars($Q,ENT_QUOTES,'utf-8'));}function nl_br($Q){return str_replace("\n","
",$Q);}function -checkbox($C,$Y,$Ya,$re="",$Af="",$cb="",$se=""){$J="".($Af?script("qsl('input').onclick = function () { $Af };",""):"");return($re!=""||$cb?"$J".h($re)."":$J);}function -optionlist($Ff,$lh=null,$Xi=false){$J="";foreach($Ff -as$me=>$W){$Gf=array($me=>$W);if(is_array($W)){$J -.='';$Gf=$W;}foreach($Gf +checkbox($C,$Y,$Ya,$ue="",$Ef="",$cb="",$we=""){$J="".($Ef?script("qsl('input').onclick = function () { $Ef };",""):"");return($ue!=""||$cb?"$J".h($ue)."":$J);}function +optionlist($Jf,$rh=null,$fj=false){$J="";foreach($Jf +as$pe=>$W){$Kf=array($pe=>$W);if(is_array($W)){$J +.='';$Kf=$W;}foreach($Kf as$x=>$X)$J -.=''.h($X);if(is_array($W))$J +.=''.h($X);if(is_array($W))$J .='';}return$J;}function -html_select($C,array$Ff,$Y="",$_f="",$se=""){return"".($_f?script("qsl('select').onchange = function () { $_f };",""):"");}function -html_radios($C,array$Ff,$Y=""){$J="";foreach($Ff +html_select($C,array$Jf,$Y="",$Df="",$we=""){static$ue=0;$ve="";if(!$we&&substr($Jf[""],0,1)=="("){$ue++;$we="label-$ue";$ve="

","$ye",script("qsl('a').onclick = partial(toggle, 'fieldset-$t');",""),"","
\n";}function -selectOrderPrint(array$Hf,array$e,array$w){print_fieldset("sort",'Sort',$Hf);$s=0;foreach((array)$_GET["order"]as$x=>$X){if($X!=""){echo"
".select_input(" name='order[$s]'",$e,$X,"selectFieldChange"),checkbox("desc[$s]",1,isset($_GET["desc"][$x]),'descending')."
\n";$s++;}}echo"
".select_input(" name='order[$s]'",$e,"","selectAddRow"),checkbox("desc[$s]",1,false,'descending')."
\n","\n";}function +selectOrderPrint(array$Lf,array$e,array$w){print_fieldset("sort",'Sort',$Lf);$s=0;foreach((array)$_GET["order"]as$x=>$X){if($X!=""){echo"
".select_input(" name='order[$s]'",$e,$X,"selectFieldChange"),checkbox("desc[$s]",1,isset($_GET["desc"][$x]),'descending')."
\n";$s++;}}echo"
".select_input(" name='order[$s]'",$e,"","selectAddRow"),checkbox("desc[$s]",1,false,'descending')."
\n","\n";}function selectLimitPrint($z){echo"
".'Limit'."
","",script("qsl('input').oninput = selectFieldChange;",""),"
\n";}function -selectLengthPrint($li){if($li!==null)echo"
".'Text length'."
","","
\n";}function +selectLengthPrint($si){if($si!==null)echo"
".'Text length'."
","","
\n";}function selectActionPrint(array$w){echo"
".'Action'."
",""," ","\n","const indexColumns = ";$e=array();foreach($w -as$v){$Fb=reset($v["columns"]);if($v["type"]!="FULLTEXT"&&$Fb)$e[$Fb]=1;}$e[""]=1;foreach($e +as$v){$Gb=reset($v["columns"]);if($v["type"]!="FULLTEXT"&&$Gb)$e[$Gb]=1;}$e[""]=1;foreach($e as$x=>$X)json_row($x);echo";\n","selectFieldChange.call(qs('#form')['select']);\n","\n","
\n";}function selectCommandPrint(){return!information_schema(DB);}function selectImportPrint(){return!information_schema(DB);}function -selectEmailPrint(array$oc,array$e){}function -selectColumnsProcess(array$e,array$w){$M=array();$pd=array();foreach((array)$_GET["columns"]as$x=>$X){if($X["fun"]=="count"||($X["col"]!=""&&(!$X["fun"]||in_array($X["fun"],driver()->functions)||in_array($X["fun"],driver()->grouping)))){$M[$x]=apply_sql_function($X["fun"],($X["col"]!=""?idf_escape($X["col"]):"*"));if(!in_array($X["fun"],driver()->grouping))$pd[]=$M[$x];}}return -array($M,$pd);}function +selectEmailPrint(array$rc,array$e){}function +selectColumnsProcess(array$e,array$w){$M=array();$sd=array();foreach((array)$_GET["columns"]as$x=>$X){if($X["fun"]=="count"||($X["col"]!=""&&(!$X["fun"]||in_array($X["fun"],driver()->functions)||in_array($X["fun"],driver()->grouping)))){$M[$x]=apply_sql_function($X["fun"],($X["col"]!=""?idf_escape($X["col"]):"*"));if(!in_array($X["fun"],driver()->grouping))$sd[]=$M[$x];}}return +array($M,$sd);}function selectSearchProcess(array$n,array$w){$J=array();foreach($w -as$s=>$v){if($v["type"]=="FULLTEXT"&&$_GET["fulltext"][$s]!="")$J[]="MATCH (".implode(", ",array_map('Adminer\idf_escape',$v["columns"])).") AGAINST (".q($_GET["fulltext"][$s]).(isset($_GET["boolean"][$s])?" IN BOOLEAN MODE":"").")";}foreach((array)$_GET["where"]as$x=>$X){if("$X[col]$X[val]"!=""&&in_array($X["op"],adminer()->operators())){$tg="";$pb=" $X[op]";if(preg_match('~IN$~',$X["op"])){$Od=process_length($X["val"]);$pb -.=" ".($Od!=""?$Od:"(NULL)");}elseif($X["op"]=="SQL")$pb=" $X[val]";elseif($X["op"]=="LIKE %%")$pb=" LIKE ".adminer()->processInput($n[$X["col"]],"%$X[val]%");elseif($X["op"]=="ILIKE %%")$pb=" ILIKE ".adminer()->processInput($n[$X["col"]],"%$X[val]%");elseif($X["op"]=="FIND_IN_SET"){$tg="$X[op](".q($X["val"]).", ";$pb=")";}elseif(!preg_match('~NULL$~',$X["op"]))$pb -.=" ".adminer()->processInput($n[$X["col"]],$X["val"]);if($X["col"]!="")$J[]=$tg.driver()->convertSearch(idf_escape($X["col"]),$X,$n[$X["col"]]).$pb;else{$ib=array();foreach($n -as$C=>$m){if(isset($m["privileges"]["where"])&&(preg_match('~^[-\d.'.(preg_match('~IN$~',$X["op"])?',':'').']+$~',$X["val"])||!preg_match('~'.number_type().'|bit~',$m["type"]))&&(!preg_match("~[\x80-\xFF]~",$X["val"])||preg_match('~char|text|enum|set~',$m["type"]))&&(!preg_match('~date|timestamp~',$m["type"])||preg_match('~^\d+-\d+-\d+~',$X["val"])))$ib[]=$tg.driver()->convertSearch(idf_escape($C),$X,$m).$pb;}$J[]=($ib?"(".implode(" OR ",$ib).")":"1 = 0");}}}return$J;}function +as$s=>$v){if($v["type"]=="FULLTEXT"&&$_GET["fulltext"][$s]!="")$J[]="MATCH (".implode(", ",array_map('Adminer\idf_escape',$v["columns"])).") AGAINST (".q($_GET["fulltext"][$s]).(isset($_GET["boolean"][$s])?" IN BOOLEAN MODE":"").")";}foreach((array)$_GET["where"]as$x=>$X){if("$X[col]$X[val]"!=""&&in_array($X["op"],adminer()->operators())){$yg="";$pb=" $X[op]";if(preg_match('~IN$~',$X["op"])){$Rd=process_length($X["val"]);$pb +.=" ".($Rd!=""?$Rd:"(NULL)");}elseif($X["op"]=="SQL")$pb=" $X[val]";elseif($X["op"]=="LIKE %%")$pb=" LIKE ".adminer()->processInput(idx($n,$X["col"],array()),"%$X[val]%");elseif($X["op"]=="ILIKE %%")$pb=" ILIKE ".adminer()->processInput($n[$X["col"]],"%$X[val]%");elseif($X["op"]=="FIND_IN_SET"){$yg="$X[op](".q($X["val"]).", ";$pb=")";}elseif(!preg_match('~NULL$~',$X["op"]))$pb +.=" ".adminer()->processInput($n[$X["col"]],$X["val"]);if($X["col"]!="")$J[]=$yg.driver()->convertSearch(idf_escape($X["col"]),$X,$n[$X["col"]]).$pb;else{$ib=array();foreach($n +as$C=>$m){if(isset($m["privileges"]["where"])&&(preg_match('~^[-\d.'.(preg_match('~IN$~',$X["op"])?',':'').']+$~',$X["val"])||!preg_match('~'.number_type().'|bit~',$m["type"]))&&(!preg_match("~[\x80-\xFF]~",$X["val"])||preg_match('~char|text|enum|set~',$m["type"]))&&(!preg_match('~date|timestamp~',$m["type"])||preg_match('~^\d+-\d+-\d+~',$X["val"])))$ib[]=$yg.driver()->convertSearch(idf_escape($C),$X,$m).$pb;}$J[]=($ib?"(".implode(" OR ",$ib).")":"1 = 0");}}}return$J;}function selectOrderProcess(array$n,array$w){$J=array();foreach((array)$_GET["order"]as$x=>$X){if($X!="")$J[]=(preg_match('~^((COUNT\(DISTINCT |[A-Z0-9_]+\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\)|COUNT\(\*\))$~',$X)?$X:idf_escape($X)).(isset($_GET["desc"][$x])?" DESC":"");}return$J;}function selectLimitProcess(){return(isset($_GET["limit"])?intval($_GET["limit"]):50);}function selectLengthProcess(){return(isset($_GET["text_length"])?"$_GET[text_length]":"100");}function -selectEmailProcess(array$Z,array$dd){return +selectEmailProcess(array$Z,array$gd){return false;}function -selectQueryBuild(array$M,array$Z,array$pd,array$Hf,$z,$E){return"";}function -messageQuery($H,$mi,$Mc=false){restart_session();$Cd=&get_session("queries");if(!idx($Cd,$_GET["db"]))$Cd[$_GET["db"]]=array();if(strlen($H)>1e6)$H=preg_replace('~[\x80-\xFF]+$~','',substr($H,0,1e6))."\n…";$Cd[$_GET["db"]][]=array($H,time(),$mi);$Hh="sql-".count($Cd[$_GET["db"]]);$J="".'SQL command'."\n";if(!$Mc&&($kj=driver()->warnings())){$t="warnings-".count($Cd[$_GET["db"]]);$J="".'Warnings'.", $J\n";}return" ".@date("H:i:s").""." $J';}function -editRowPrint($R,array$n,$K,$Ri){}function -editFunctions(array$m){$J=($m["null"]?"NULL/":"");$Ri=isset($_GET["select"])||where($_GET);foreach(array(driver()->insertFunctions,driver()->editFunctions)as$x=>$kd){if(!$x||(!isset($_GET["call"])&&$Ri)){foreach($kd -as$ig=>$X){if(!$ig||preg_match("~$ig~",$m["type"]))$J -.="/$X";}}if($x&&$kd&&!preg_match('~set|blob|bytea|raw|file|bool~',$m["type"]))$J -.="/SQL";}if($m["auto_increment"]&&!$Ri)$J='Auto Increment';return +selectQueryBuild(array$M,array$Z,array$sd,array$Lf,$z,$E){return"";}function +messageQuery($H,$ti,$Pc=false){restart_session();$Fd=&get_session("queries");if(!idx($Fd,$_GET["db"]))$Fd[$_GET["db"]]=array();if(strlen($H)>1e6)$H=preg_replace('~[\x80-\xFF]+$~','',substr($H,0,1e6))."\n…";$Fd[$_GET["db"]][]=array($H,time(),$ti);$Nh="sql-".count($Fd[$_GET["db"]]);$J="".'SQL command'."\n";if(!$Pc&&($sj=driver()->warnings())){$t="warnings-".count($Fd[$_GET["db"]]);$J="".'Warnings'.", $J\n";}return" ".@date("H:i:s").""." $J';}function +editRowPrint($R,array$n,$K,$Zi){}function +editFunctions(array$m){$J=($m["null"]?"NULL/":"");$Zi=isset($_GET["select"])||where($_GET);foreach(array(driver()->insertFunctions,driver()->editFunctions)as$x=>$nd){if(!$x||(!isset($_GET["call"])&&$Zi)){foreach($nd +as$mg=>$X){if(!$mg||preg_match("~$mg~",$m["type"]))$J +.="/$X";}}if($x&&$nd&&!preg_match('~set|blob|bytea|raw|file|bool~',$m["type"]))$J +.="/SQL";}if($m["auto_increment"]&&!$Zi)$J='Auto Increment';return explode("/",$J);}function editInput($R,array$m,$ya,$Y){if($m["type"]=="enum")return(isset($_GET["select"])?" ":"").($m["null"]?" ":"").enum_input("radio",$ya,$m,$Y,$Y===0?0:null);return"";}function editHint($R,array$m,$Y){return"";}function @@ -1077,54 +1087,61 @@ unconvert_field($m,$J);}function dumpOutput(){$J=array('text'=>'open','file'=>'save');if(function_exists('gzencode'))$J['gz']='gzip';return$J;}function dumpFormat(){return(support("dump")?array('sql'=>'SQL'):array())+array('csv'=>'CSV,','csv;'=>'CSV;','tsv'=>'TSV');}function dumpDatabase($j){}function -dumpTable($R,$Ph,$je=0){if($_POST["format"]!="sql"){echo"\xef\xbb\xbf";if($Ph)dump_csv(array_keys(fields($R)));}else{if($je==2){$n=array();foreach(fields($R)as$C=>$m)$n[]=idf_escape($C)." $m[full_type]";$h="CREATE TABLE ".table($R)." (".implode(", ",$n).")";}else$h=create_sql($R,$_POST["auto_increment"],$Ph);set_utf8mb4($h);if($Ph&&$h){if($Ph=="DROP+CREATE"||$je==1)echo"DROP ".($je==2?"VIEW":"TABLE")." IF EXISTS ".table($R).";\n";if($je==1)$h=remove_definer($h);echo"$h;\n\n";}}}function -dumpData($R,$Ph,$H){if($Ph){$Je=(JUSH=="sqlite"?0:1048576);$n=array();$Ld=false;if($_POST["format"]=="sql"){if($Ph=="TRUNCATE+INSERT")echo +dumpTable($R,$Vh,$me=0){if($_POST["format"]!="sql"){echo"\xef\xbb\xbf";if($Vh)dump_csv(array_keys(fields($R)));}else{if($me==2){$n=array();foreach(fields($R)as$C=>$m)$n[]=idf_escape($C)." $m[full_type]";$h="CREATE TABLE ".table($R)." (".implode(", ",$n).")";}else$h=create_sql($R,$_POST["auto_increment"],$Vh);set_utf8mb4($h);if($Vh&&$h){if($Vh=="DROP+CREATE"||$me==1)echo"DROP ".($me==2?"VIEW":"TABLE")." IF EXISTS ".table($R).";\n";if($me==1)$h=remove_definer($h);echo"$h;\n\n";}}}function +dumpData($R,$Vh,$H){if($Vh){$Ne=(JUSH=="sqlite"?0:1048576);$n=array();$Od=false;if($_POST["format"]=="sql"){if($Vh=="TRUNCATE+INSERT")echo truncate_sql($R).";\n";$n=fields($R);if(JUSH=="mssql"){foreach($n -as$m){if($m["auto_increment"]){echo"SET IDENTITY_INSERT ".table($R)." ON;\n";$Ld=true;break;}}}}$I=connection()->query($H,1);if($I){$Zd="";$Na="";$oe=array();$ld=array();$Rh="";$Pc=($R!=''?'fetch_assoc':'fetch_row');while($K=$I->$Pc()){if(!$oe){$cj=array();foreach($K -as$X){$m=$I->fetch_field();if(idx($n[$m->name],'generated')){$ld[$m->name]=true;continue;}$oe[]=$m->name;$x=idf_escape($m->name);$cj[]="$x = VALUES($x)";}$Rh=($Ph=="INSERT+UPDATE"?"\nON DUPLICATE KEY UPDATE ".implode(", ",$cj):"").";\n";}if($_POST["format"]!="sql"){if($Ph=="table"){dump_csv($oe);$Ph="INSERT";}dump_csv($K);}else{if(!$Zd)$Zd="INSERT INTO ".table($R)." (".implode(", ",array_map('Adminer\idf_escape',$oe)).") VALUES";foreach($K -as$x=>$X){if($ld[$x]){unset($K[$x]);continue;}$m=$n[$x];$K[$x]=($X!==null?unconvert_field($m,preg_match(number_type(),$m["type"])&&!preg_match('~\[~',$m["full_type"])&&is_numeric($X)?$X:q(($X===false?0:$X))):"NULL");}$dh=($Je?"\n":" ")."(".implode(",\t",$K).")";if(!$Na)$Na=$Zd.$dh;elseif(strlen($Na)+4+strlen($dh)+strlen($Rh)<$Je)$Na -.=",$dh";else{echo$Na.$Rh;$Na=$Zd.$dh;}}}if($Na)echo$Na.$Rh;}elseif($_POST["format"]=="sql")echo"-- ".str_replace("\n"," ",connection()->error)."\n";if($Ld)echo"SET IDENTITY_INSERT ".table($R)." OFF;\n";}}function -dumpFilename($Jd){return -friendly_url($Jd!=""?$Jd:(SERVER!=""?SERVER:"localhost"));}function -dumpHeaders($Jd,$bf=false){$Uf=$_POST["output"];$Hc=(preg_match('~sql~',$_POST["format"])?"sql":($bf?"tar":"csv"));header("Content-Type: ".($Uf=="gz"?"application/x-gzip":($Hc=="tar"?"application/x-tar":($Hc=="sql"||$Uf!="file"?"text/plain":"text/csv")."; charset=utf-8")));if($Uf=="gz"){ob_start(function($Q){return -gzencode($Q);},1e6);}return$Hc;}function +as$m){if($m["auto_increment"]){echo"SET IDENTITY_INSERT ".table($R)." ON;\n";$Od=true;break;}}}}$I=connection()->query($H,1);if($I){$ce="";$Na="";$re=array();$od=array();$Xh="";$Sc=($R!=''?'fetch_assoc':'fetch_row');$_b=0;while($K=$I->$Sc()){if(!$re){$kj=array();foreach($K +as$X){$m=$I->fetch_field();if(idx($n[$m->name],'generated')){$od[$m->name]=true;continue;}$re[]=$m->name;$x=idf_escape($m->name);$kj[]="$x = VALUES($x)";}$Xh=($Vh=="INSERT+UPDATE"?"\nON DUPLICATE KEY UPDATE ".implode(", ",$kj):"").";\n";}if($_POST["format"]!="sql"){if($Vh=="table"){dump_csv($re);$Vh="INSERT";}dump_csv($K);}else{if(!$ce)$ce="INSERT INTO ".table($R)." (".implode(", ",array_map('Adminer\idf_escape',$re)).") VALUES";foreach($K +as$x=>$X){if($od[$x]){unset($K[$x]);continue;}$m=$n[$x];$K[$x]=($X!==null?unconvert_field($m,preg_match(number_type(),$m["type"])&&!preg_match('~\[~',$m["full_type"])&&is_numeric($X)?$X:q(($X===false?0:$X))):"NULL");}$ih=($Ne?"\n":" ")."(".implode(",\t",$K).")";if(!$Na)$Na=$ce.$ih;elseif(JUSH=='mssql'?$_b%1000!=0:strlen($Na)+4+strlen($ih)+strlen($Xh)<$Ne)$Na +.=",$ih";else{echo$Na.$Xh;$Na=$ce.$ih;}}$_b++;}if($Na)echo$Na.$Xh;}elseif($_POST["format"]=="sql")echo"-- ".str_replace("\n"," ",connection()->error)."\n";if($Od)echo"SET IDENTITY_INSERT ".table($R)." OFF;\n";}}function +dumpFilename($Md){return +friendly_url($Md!=""?$Md:(SERVER!=""?SERVER:"localhost"));}function +dumpHeaders($Md,$ff=false){$Yf=$_POST["output"];$Kc=(preg_match('~sql~',$_POST["format"])?"sql":($ff?"tar":"csv"));header("Content-Type: ".($Yf=="gz"?"application/x-gzip":($Kc=="tar"?"application/x-tar":($Kc=="sql"||$Yf!="file"?"text/plain":"text/csv")."; charset=utf-8")));if($Yf=="gz"){ob_start(function($Q){return +gzencode($Q);},1e6);}return$Kc;}function dumpFooter(){if($_POST["format"]=="sql")echo"-- ".gmdate("Y-m-d H:i:s e")."\n";}function importServerPath(){return"adminer.sql";}function homepage(){echo'

".adminer()->name()." ".VERSION;$jf=$_COOKIE["adminer_version"];echo" ".(version_compare(VERSION,$jf)<0?h($jf):"")."","

\n";if($Ye=="auth"){$Uf="";foreach((array)$_SESSION["pwds"]as$ej=>$uh){foreach($uh -as$N=>$Zi){$C=h(get_setting("vendor-$ej-$N")?:get_driver($ej));foreach($Zi -as$V=>$F){if($F!==null){$Mb=$_SESSION["db"][$ej][$N][$V];foreach(($Mb?array_keys($Mb):array(""))as$j)$Uf -.="
  • ($C) ".h($V.($N!=""?"@".adminer()->serverName($N):"").($j!=""?" - $j":""))."\n";}}}}if($Uf)echo"\n".script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");}else{$T=array();if($_GET["ns"]!==""&&!$Ye&&DB!=""){connection()->select_db(DB);$T=table_status('',true);}adminer()->syntaxHighlighting($T);adminer()->databasesPrint($Ye);$ia=array();if(DB==""||!$Ye){if(support("sql")){$ia[]="".'SQL command'."";$ia[]="".'Import'."";}$ia[]="".'Export'."";}$Pd=$_GET["ns"]!==""&&!$Ye&&DB!="";if($Pd)$ia[]='".'Create table'."";echo($ia?"

    ".adminer()->name()." ".VERSION;$nf=$_COOKIE["adminer_version"];echo" ".(version_compare(VERSION,$nf)<0?h($nf):"")."","

    \n";if($cf=="auth"){$Yf="";foreach((array)$_SESSION["pwds"]as$mj=>$_h){foreach($_h +as$N=>$hj){$C=h(get_setting("vendor-$mj-$N")?:get_driver($mj));foreach($hj +as$V=>$F){if($F!==null){$Nb=$_SESSION["db"][$mj][$N][$V];foreach(($Nb?array_keys($Nb):array(""))as$j)$Yf +.="
  • ($C) ".h($V.($N!=""?"@".adminer()->serverName($N):"").($j!=""?" - $j":""))."\n";}}}}if($Yf)echo"\n".script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");}else{$T=array();if($_GET["ns"]!==""&&!$cf&&DB!=""){connection()->select_db(DB);$T=table_status('',true);}adminer()->syntaxHighlighting($T);adminer()->databasesPrint($cf);$ia=array();if(DB==""||!$cf){if(support("sql")){$ia[]="".'SQL command'."";$ia[]="".'Import'."";}$ia[]="".'Export'."";}$Sd=$_GET["ns"]!==""&&!$cf&&DB!="";if($Sd)$ia[]='".'Create table'."";echo($ia?"

    ".'No tables.'."

    \n";}}}function syntaxHighlighting(array$T){echo -script_src(preg_replace("~\\?.*~","",ME)."?file=jush.js&version=5.1.1");if(support("sql")){echo"\n";if($T){$Ae=array();foreach($T -as$R=>$U)$Ae[]=preg_quote($R,'/');echo"var jushLinks = { ".JUSH.": [ '".js_escape(ME).(support("table")?"table=":"select=")."\$&', /\\b(".implode("|",$Ae).")\\b/g ] };\n";foreach(array("bac","bra","sqlite_quo","mssql_bra")as$X)echo"jushLinks.$X = jushLinks.".JUSH.";\n";}echo"\n";}echo -script("syntaxHighlighting('".preg_replace('~^(\d\.?\d).*~s','\1',connection()->server_info)."'".(connection()->flavor=='maria'?", 'maria'":(connection()->flavor=='cockroach'?", 'cockroach'":"")).");");}function -databasesPrint($Ye){$i=adminer()->databases();if(DB&&$i&&!in_array(DB,$i))array_unshift($i,DB);echo"
    \n

    \n";hidden_fields_get();$Kb=script("mixin(qsl('select'), {onmousedown: dbMouseDown, onchange: dbChange});");echo"".'DB'.": ".($i?html_select("db",array(""=>"")+$i,DB).$Kb:"\n"),"\n";if(support("scheme")){if($Ye!="db"&&DB!=""&&connection()->select_db(DB)){echo"
    ".'Schema'.": ".html_select("ns",array(""=>"")+adminer()->schemas(),$_GET["ns"]).$Kb;if($_GET["ns"]!="")set_schema($_GET["ns"]);}}foreach(array("import","sql","schema","dump","privileges")as$X){if(isset($_GET[$X])){echo +script_src(preg_replace("~\\?.*~","",ME)."?file=jush.js&version=5.2.0",true);if(support("sql")){echo"\n";if($T){$Ee=array();foreach($T +as$R=>$U)$Ee[]=preg_quote($R,'/');echo"var jushLinks = { ".JUSH.": [ '".js_escape(ME).(support("table")?"table=":"select=")."\$&', /\\b(".implode("|",$Ee).")\\b/g ] };\n";foreach(array("bac","bra","sqlite_quo","mssql_bra")as$X)echo"jushLinks.$X = jushLinks.".JUSH.";\n";if(isset($_GET["sql"])||isset($_GET["trigger"])||isset($_GET["check"])){$ii=array_fill_keys(array_keys($T),array());foreach(driver()->allFields()as$R=>$n){foreach($n +as$m)$ii[$R][]=$m["field"];}echo"addEventListener('DOMContentLoaded', () => { autocompleter = jush.autocompleteSql('".idf_escape("")."', ".json_encode($ii)."); });\n";}}echo"\n";}echo +script("syntaxHighlighting('".preg_replace('~^(\d\.?\d).*~s','\1',connection()->server_info)."', '".connection()->flavor."');");}function +databasesPrint($cf){$i=adminer()->databases();if(DB&&$i&&!in_array(DB,$i))array_unshift($i,DB);echo"\n

    \n";hidden_fields_get();$Lb=script("mixin(qsl('select'), {onmousedown: dbMouseDown, onchange: dbChange});");echo"","\n";if(support("scheme")){if($cf!="db"&&DB!=""&&connection()->select_db(DB)){echo"
    ";if($_GET["ns"]!="")set_schema($_GET["ns"]);}}foreach(array("import","sql","schema","dump","privileges")as$X){if(isset($_GET[$X])){echo input_hidden($X);break;}}echo"

    \n";}function tablesPrint(array$T){echo"
      ".script("mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});");foreach($T -as$R=>$P){$C=adminer()->tableName($P);if($C!="")echo'
    • ".'select'." ",(support("table")||support("indexes")?'$C":"$C")."\n";}echo"
    \n";}}class +as$R=>$P){$C=adminer()->tableName($P);if($C!="")echo'
  • ".'select'." ",(support("table")||support("indexes")?'$C":"$C")."\n";}echo"\n";}}class Plugins{private -static$ta=array('dumpFormat'=>true,'dumpOutput'=>true,'editRowPrint'=>true,'editFunctions'=>true);var$plugins;var$error='';private$hooks=array();function -__construct($ng){if($ng===null){$ng=array();$Ha="adminer-plugins";if(is_dir($Ha)){foreach(glob("$Ha/*.php")as$o)$Qd=include_once"./$o";}$Bd=" href='https://www.adminer.org/plugins/#use'".target_blank();if(file_exists("$Ha.php")){$Qd=include_once"./$Ha.php";if(is_array($Qd)){foreach($Qd -as$mg)$ng[get_class($mg)]=$mg;}else$this->error -.=sprintf('%s must return an array.',"$Ha.php",$Bd)."
    ";}foreach(get_declared_classes()as$cb){if(!$ng[$cb]&&preg_match('~^Adminer\w~i',$cb)){$Ng=new -\ReflectionClass($cb);$ub=$Ng->getConstructor();if($ub&&$ub->getNumberOfRequiredParameters())$this->error -.=sprintf('Configure %s in %s.',$Bd,"$cb","$Ha.php")."
    ";else$ng[$cb]=new$cb;}}}$this->plugins=$ng;$la=new -Adminer;$ng[]=$la;$Ng=new -\ReflectionObject($la);foreach($Ng->getMethods()as$We){foreach($ng -as$mg){$C=$We->getName();if(method_exists($mg,$C))$this->hooks[$C][]=$mg;}}}function -__call($C,array$Zf){$ua=array();foreach($Zf -as$x=>$X)$ua[]=&$Zf[$x];$J=null;foreach($this->hooks[$C]as$mg){$Y=call_user_func_array(array($mg,$C),$ua);if($Y!==null){if(!self::$ta[$C])return$Y;$J=$Y+(array)$J;}}return$J;}}if(function_exists('adminer_object'))Adminer::$be=adminer_object();elseif(is_dir("adminer-plugins")||file_exists("adminer-plugins.php"))Adminer::$be=new -Plugins(null);else -Adminer::$be=new -Adminer;SqlDriver::$ac=array("server"=>"MySQL / MariaDB")+SqlDriver::$ac;if(!defined('Adminer\DRIVER')){define('Adminer\DRIVER',"server");if(extension_loaded("mysqli")&&$_GET["ext"]!="pdo"){class +static$ta=array('dumpFormat'=>true,'dumpOutput'=>true,'editRowPrint'=>true,'editFunctions'=>true,'config'=>true);var$plugins;var$error='';private$hooks=array();function +__construct($rg){if($rg===null){$rg=array();$Ha="adminer-plugins";if(is_dir($Ha)){foreach(glob("$Ha/*.php")as$o)$Td=include_once"./$o";}$Ed=" href='https://www.adminer.org/plugins/#use'".target_blank();if(file_exists("$Ha.php")){$Td=include_once"./$Ha.php";if(is_array($Td)){foreach($Td +as$qg)$rg[get_class($qg)]=$qg;}else$this->error +.=sprintf('%s must return an array.',"$Ha.php",$Ed)."
    ";}foreach(get_declared_classes()as$cb){if(!$rg[$cb]&&preg_match('~^Adminer\w~i',$cb)){$Sg=new +\ReflectionClass($cb);$ub=$Sg->getConstructor();if($ub&&$ub->getNumberOfRequiredParameters())$this->error +.=sprintf('Configure %s in %s.',$Ed,"$cb","$Ha.php")."
    ";else$rg[$cb]=new$cb;}}}$this->plugins=$rg;$la=new +Adminer;$rg[]=$la;$Sg=new +\ReflectionObject($la);foreach($Sg->getMethods()as$af){foreach($rg +as$qg){$C=$af->getName();if(method_exists($qg,$C))$this->hooks[$C][]=$qg;}}}function +__call($C,array$dg){$ua=array();foreach($dg +as$x=>$X)$ua[]=&$dg[$x];$J=null;foreach($this->hooks[$C]as$qg){$Y=call_user_func_array(array($qg,$C),$ua);if($Y!==null){if(!self::$ta[$C])return$Y;$J=$Y+(array)$J;}}return$J;}}abstract +class +Plugin{protected$translations=array();function +description(){return$this->lang('');}function +screenshot(){return"";}protected +function +lang($u,$sf=null){$ua=func_get_args();$ua[0]=idx($this->translations[LANG],$u)?:$u;return +call_user_func_array('Adminer\lang_format',$ua);}}Adminer::$ee=(function_exists('adminer_object')?adminer_object():(is_dir("adminer-plugins")||file_exists("adminer-plugins.php")?new +Plugins(null):new +Adminer));SqlDriver::$dc=array("server"=>"MySQL / MariaDB")+SqlDriver::$dc;if(!defined('Adminer\DRIVER')){define('Adminer\DRIVER',"server");if(extension_loaded("mysqli")&&$_GET["ext"]!="pdo"){class Db extends -\MySQLi{static$be;var$extension="MySQLi",$flavor='';function +\MySQLi{static$ee;var$extension="MySQLi",$flavor='';function __construct(){parent::init();}function -attach($N,$V,$F){mysqli_report(MYSQLI_REPORT_OFF);list($Fd,$og)=explode(":",$N,2);$Kh=adminer()->connectSsl();if($Kh)$this->ssl_set($Kh['key'],$Kh['cert'],$Kh['ca'],'','');$J=@$this->real_connect(($N!=""?$Fd:ini_get("mysqli.default_host")),($N.$V!=""?$V:ini_get("mysqli.default_user")),($N.$V.$F!=""?$F:ini_get("mysqli.default_pw")),null,(is_numeric($og)?intval($og):ini_get("mysqli.default_port")),(is_numeric($og)?$og:null),($Kh?($Kh['verify']!==false?2048:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,false);return($J?'':$this->error);}function +attach($N,$V,$F){mysqli_report(MYSQLI_REPORT_OFF);list($Id,$sg)=explode(":",$N,2);$Qh=adminer()->connectSsl();if($Qh)$this->ssl_set($Qh['key'],$Qh['cert'],$Qh['ca'],'','');$J=@$this->real_connect(($N!=""?$Id:ini_get("mysqli.default_host")),($N.$V!=""?$V:ini_get("mysqli.default_user")),($N.$V.$F!=""?$F:ini_get("mysqli.default_pw")),null,(is_numeric($sg)?intval($sg):ini_get("mysqli.default_port")),(is_numeric($sg)?$sg:null),($Qh?($Qh['verify']!==false?2048:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,false);return($J?'':$this->error);}function set_charset($Ua){if(parent::set_charset($Ua))return true;parent::set_charset('utf8');return$this->query("SET NAMES $Ua");}function next_result(){return @@ -1139,9 +1156,9 @@ mysql_error();$this->server_info=mysql_get_server_info($this->link);return'';}fu set_charset($Ua){if(function_exists('mysql_set_charset')){if(mysql_set_charset($Ua,$this->link))return true;mysql_set_charset('utf8',$this->link);}return$this->query("SET NAMES $Ua");}function quote($Q){return"'".mysql_real_escape_string($Q,$this->link)."'";}function -select_db($Jb){return -mysql_select_db($Jb,$this->link);}function -query($H,$Ji=false){$I=@($Ji?mysql_unbuffered_query($H,$this->link):mysql_query($H,$this->link));$this->error="";if(!$I){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return +select_db($Kb){return +mysql_select_db($Kb,$this->link);}function +query($H,$Ri=false){$I=@($Ri?mysql_unbuffered_query($H,$this->link):mysql_query($H,$this->link));$this->error="";if(!$I){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return false;}if($I===true){$this->affected_rows=mysql_affected_rows($this->link);$this->info=mysql_info($this->link);return true;}return new @@ -1157,39 +1174,39 @@ __destruct(){mysql_free_result($this->result);}}}elseif(extension_loaded("pdo_my Db extends PdoDb{var$extension="PDO_MySQL";function -attach($N,$V,$F){$Ff=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);$Kh=adminer()->connectSsl();if($Kh){if($Kh['key'])$Ff[\PDO::MYSQL_ATTR_SSL_KEY]=$Kh['key'];if($Kh['cert'])$Ff[\PDO::MYSQL_ATTR_SSL_CERT]=$Kh['cert'];if($Kh['ca'])$Ff[\PDO::MYSQL_ATTR_SSL_CA]=$Kh['ca'];if(isset($Kh['verify']))$Ff[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$Kh['verify'];}return$this->dsn("mysql:charset=utf8;host=".str_replace(":",";unix_socket=",preg_replace('~:(\d)~',';port=\1',$N)),$V,$F,$Ff);}function +attach($N,$V,$F){$Jf=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);$Qh=adminer()->connectSsl();if($Qh){if($Qh['key'])$Jf[\PDO::MYSQL_ATTR_SSL_KEY]=$Qh['key'];if($Qh['cert'])$Jf[\PDO::MYSQL_ATTR_SSL_CERT]=$Qh['cert'];if($Qh['ca'])$Jf[\PDO::MYSQL_ATTR_SSL_CA]=$Qh['ca'];if(isset($Qh['verify']))$Jf[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$Qh['verify'];}return$this->dsn("mysql:charset=utf8;host=".str_replace(":",";unix_socket=",preg_replace('~:(\d)~',';port=\1',$N)),$V,$F,$Jf);}function set_charset($Ua){return$this->query("SET NAMES $Ua");}function -select_db($Jb){return$this->query("USE ".idf_escape($Jb));}function -query($H,$Ji=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$Ji);return -parent::query($H,$Ji);}}}class +select_db($Kb){return$this->query("USE ".idf_escape($Kb));}function +query($H,$Ri=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$Ri);return +parent::query($H,$Ri);}}}class Driver extends -SqlDriver{static$Jc=array("MySQLi","MySQL","PDO_MySQL");static$le="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");static +SqlDriver{static$Mc=array("MySQLi","MySQL","PDO_MySQL");static$oe="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");static function -connect($N,$V,$F){$f=parent::connect($N,$V,$F);if(is_string($f)){if(function_exists('iconv')&&!is_utf8($f)&&strlen($dh=iconv("windows-1250","utf-8",$f))>strlen($f))$f=$dh;return$f;}$f->set_charset(charset($f));$f->query("SET sql_quote_show_create = 1, autocommit = 1");$f->flavor=(preg_match('~MariaDB~',$f->server_info)?'maria':'mysql');add_driver(DRIVER,($f->flavor=='maria'?"MariaDB":"MySQL"));return$f;}function +connect($N,$V,$F){$f=parent::connect($N,$V,$F);if(is_string($f)){if(function_exists('iconv')&&!is_utf8($f)&&strlen($ih=iconv("windows-1250","utf-8",$f))>strlen($f))$f=$ih;return$f;}$f->set_charset(charset($f));$f->query("SET sql_quote_show_create = 1, autocommit = 1");$f->flavor=(preg_match('~MariaDB~',$f->server_info)?'maria':'mysql');add_driver(DRIVER,($f->flavor=='maria'?"MariaDB":"MySQL"));return$f;}function __construct(Db$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->insertFunctions=array("char"=>"md5/sha1/password/encrypt/uuid","binary"=>"md5/sha1","date|time"=>"now",);$this->editFunctions=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->insertFunctions['uuid']='uuid';}if(min_version(9,'',$f)){$this->types['Numbers']["vector"]=16383;$this->insertFunctions['vector']='string_to_vector';}if(min_version(5.7,10.2,$f))$this->generated=array("STORED","VIRTUAL");}function unconvertFunction(array$m){return(preg_match("~binary~",$m["type"])?"UNHEX":($m["type"]=="bit"?doc_link(array('sql'=>'bit-value-literals.html'),"b''"):(preg_match("~geometry|point|linestring|polygon~",$m["type"])?"GeomFromText":"")));}function insert($R,array$O){return($O?parent::insert($R,$O):queries("INSERT INTO ".table($R)." ()\nVALUES ()"));}function -insertUpdate($R,array$L,array$G){$e=array_keys(reset($L));$tg="INSERT INTO ".table($R)." (".implode(", ",$e).") VALUES\n";$cj=array();foreach($e -as$x)$cj[$x]="$x = VALUES($x)";$Rh="\nON DUPLICATE KEY UPDATE ".implode(", ",$cj);$cj=array();$y=0;foreach($L -as$O){$Y="(".implode(", ",$O).")";if($cj&&(strlen($tg)+$y+strlen($Y)+strlen($Rh)>1e6)){if(!queries($tg.implode(",\n",$cj).$Rh))return -false;$cj=array();$y=0;}$cj[]=$Y;$y+=strlen($Y)+2;}return -queries($tg.implode(",\n",$cj).$Rh);}function -slowQuery($H,$ni){if(min_version('5.7.8','10.1.2')){if($this->conn->flavor=='maria')return"SET STATEMENT max_statement_time=$ni FOR $H";elseif(preg_match('~^(SELECT\b)(.+)~is',$H,$B))return"$B[1] /*+ MAX_EXECUTION_TIME(".($ni*1000).") */ $B[2]";}}function +insertUpdate($R,array$L,array$G){$e=array_keys(reset($L));$yg="INSERT INTO ".table($R)." (".implode(", ",$e).") VALUES\n";$kj=array();foreach($e +as$x)$kj[$x]="$x = VALUES($x)";$Xh="\nON DUPLICATE KEY UPDATE ".implode(", ",$kj);$kj=array();$y=0;foreach($L +as$O){$Y="(".implode(", ",$O).")";if($kj&&(strlen($yg)+$y+strlen($Y)+strlen($Xh)>1e6)){if(!queries($yg.implode(",\n",$kj).$Xh))return +false;$kj=array();$y=0;}$kj[]=$Y;$y+=strlen($Y)+2;}return +queries($yg.implode(",\n",$kj).$Xh);}function +slowQuery($H,$ui){if(min_version('5.7.8','10.1.2')){if($this->conn->flavor=='maria')return"SET STATEMENT max_statement_time=$ui FOR $H";elseif(preg_match('~^(SELECT\b)(.+)~is',$H,$B))return"$B[1] /*+ MAX_EXECUTION_TIME(".($ui*1000).") */ $B[2]";}}function convertSearch($u,array$X,array$m){return(preg_match('~char|text|enum|set~',$m["type"])&&!preg_match("~^utf8~",$m["collation"])&&preg_match('~[\x80-\xFF]~',$X['val'])?"CONVERT($u USING ".charset($this->conn).")":$u);}function warnings(){$I=$this->conn->query("SHOW WARNINGS");if($I&&$I->num_rows){ob_start();print_select_result($I);return ob_get_clean();}}function -tableHelp($C,$je=false){$De=($this->conn->flavor=='maria');if(information_schema(DB))return -strtolower("information-schema-".($De?"$C-table/":str_replace("_","-",$C)."-table.html"));if(DB=="mysql")return($De?"mysql$C-table/":"system-schema.html");}function -hasCStyleEscapes(){static$Pa;if($Pa===null){$Ih=get_val("SHOW VARIABLES LIKE 'sql_mode'",1,$this->conn);$Pa=(strpos($Ih,'NO_BACKSLASH_ESCAPES')===false);}return$Pa;}function +tableHelp($C,$me=false){$He=($this->conn->flavor=='maria');if(information_schema(DB))return +strtolower("information-schema-".($He?"$C-table/":str_replace("_","-",$C)."-table.html"));if(DB=="mysql")return($He?"mysql$C-table/":"system-schema.html");}function +hasCStyleEscapes(){static$Pa;if($Pa===null){$Oh=get_val("SHOW VARIABLES LIKE 'sql_mode'",1,$this->conn);$Pa=(strpos($Oh,'NO_BACKSLASH_ESCAPES')===false);}return$Pa;}function engines(){$J=array();foreach(get_rows("SHOW ENGINES")as$K){if(preg_match("~YES|DEFAULT~",$K["Support"]))$J[]=$K["Engine"];}return$J;}}function idf_escape($u){return"`".str_replace("`","``",$u)."`";}function table($u){return idf_escape($u);}function -get_databases($ad){$J=get_session("dbs");if($J===null){$H="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$J=($ad?slow_query($H):get_vals($H));restart_session();set_session("dbs",$J);stop_session();}return$J;}function -limit($H,$Z,$z,$D=0,$ph=" "){return" $H$Z".($z?$ph."LIMIT $z".($D?" OFFSET $D":""):"");}function -limit1($R,$H,$Z,$ph="\n"){return -limit($H,$Z,1,0,$ph);}function +get_databases($dd){$J=get_session("dbs");if($J===null){$H="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$J=($dd?slow_query($H):get_vals($H));restart_session();set_session("dbs",$J);stop_session();}return$J;}function +limit($H,$Z,$z,$D=0,$vh=" "){return" $H$Z".($z?$vh."LIMIT $z".($D?" OFFSET $D":""):"");}function +limit1($R,$H,$Z,$vh="\n"){return +limit($H,$Z,1,0,$vh);}function db_collation($j,array$hb){$J=null;$h=get_val("SHOW CREATE DATABASE ".idf_escape($j),1);if(preg_match('~ COLLATE ([^ ]+)~',$h,$B))$J=$B[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$h,$B))$J=$hb[$B[1]][-1];return$J;}function logged_user(){return get_val("SELECT USER()");}function @@ -1197,15 +1214,15 @@ 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(array$i){$J=array();foreach($i as$j)$J[$j]=count(get_vals("SHOW TABLES IN ".idf_escape($j)));return$J;}function -table_status($C="",$Nc=false){$J=array();foreach(get_rows($Nc?"SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($C!=""?"AND TABLE_NAME = ".q($C):"ORDER BY Name"):"SHOW TABLE STATUS".($C!=""?" LIKE ".q(addcslashes($C,"%_\\")):""))as$K){if($K["Engine"]=="InnoDB")$K["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$K["Comment"]);if(!isset($K["Engine"]))$K["Comment"]="";if($C!="")$K["Name"]=$C;$J[$K["Name"]]=$K;}return$J;}function +table_status($C="",$Qc=false){$J=array();foreach(get_rows($Qc?"SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($C!=""?"AND TABLE_NAME = ".q($C):"ORDER BY Name"):"SHOW TABLE STATUS".($C!=""?" LIKE ".q(addcslashes($C,"%_\\")):""))as$K){if($K["Engine"]=="InnoDB")$K["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$K["Comment"]);if(!isset($K["Engine"]))$K["Comment"]="";if($C!="")$K["Name"]=$C;$J[$K["Name"]]=$K;}return$J;}function is_view(array$S){return$S["Engine"]===null;}function fk_support(array$S){return preg_match('~InnoDB|IBMDB2I'.(min_version(5.6)?'|NDB':'').'~i',$S["Engine"]);}function -fields($R){$De=(connection()->flavor=='maria');$J=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($R)." ORDER BY ORDINAL_POSITION")as$K){$m=$K["COLUMN_NAME"];$U=$K["COLUMN_TYPE"];$md=$K["GENERATION_EXPRESSION"];$Kc=$K["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$Kc,$ld);preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$U,$Ge);$k=$K["COLUMN_DEFAULT"];if($k!=""){$ie=preg_match('~text|json~',$Ge[1]);if(!$De&&$ie)$k=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($k));if($De||$ie){$k=($k=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($B){return -stripslashes(str_replace("''","'",$B[1]));},$k));}if(!$De&&preg_match('~binary~',$Ge[1])&&preg_match('~^0x(\w*)$~',$k,$B))$k=pack("H*",$B[1]);}$J[$m]=array("field"=>$m,"full_type"=>$U,"type"=>$Ge[1],"length"=>$Ge[2],"unsigned"=>ltrim($Ge[3].$Ge[4]),"default"=>($ld?($De?$md:stripslashes($md)):$k),"null"=>($K["IS_NULLABLE"]=="YES"),"auto_increment"=>($Kc=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$Kc,$B)?$B[1]:""),"collation"=>$K["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$K[PRIVILEGES],where,order")),"comment"=>$K["COLUMN_COMMENT"],"primary"=>($K["COLUMN_KEY"]=="PRI"),"generated"=>($ld[1]=="PERSISTENT"?"STORED":$ld[1]),);}return$J;}function +fields($R){$He=(connection()->flavor=='maria');$J=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($R)." ORDER BY ORDINAL_POSITION")as$K){$m=$K["COLUMN_NAME"];$U=$K["COLUMN_TYPE"];$pd=$K["GENERATION_EXPRESSION"];$Nc=$K["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$Nc,$od);preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$U,$Ke);$k=$K["COLUMN_DEFAULT"];if($k!=""){$le=preg_match('~text|json~',$Ke[1]);if(!$He&&$le)$k=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($k));if($He||$le){$k=($k=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($B){return +stripslashes(str_replace("''","'",$B[1]));},$k));}if(!$He&&preg_match('~binary~',$Ke[1])&&preg_match('~^0x(\w*)$~',$k,$B))$k=pack("H*",$B[1]);}$J[$m]=array("field"=>$m,"full_type"=>$U,"type"=>$Ke[1],"length"=>$Ke[2],"unsigned"=>ltrim($Ke[3].$Ke[4]),"default"=>($od?($He?$pd:stripslashes($pd)):$k),"null"=>($K["IS_NULLABLE"]=="YES"),"auto_increment"=>($Nc=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$Nc,$B)?$B[1]:""),"collation"=>$K["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$K[PRIVILEGES],where,order")),"comment"=>$K["COLUMN_COMMENT"],"primary"=>($K["COLUMN_KEY"]=="PRI"),"generated"=>($od[1]=="PERSISTENT"?"STORED":$od[1]),);}return$J;}function indexes($R,$g=null){$J=array();foreach(get_rows("SHOW INDEX FROM ".table($R),$g)as$K){$C=$K["Key_name"];$J[$C]["type"]=($C=="PRIMARY"?"PRIMARY":($K["Index_type"]=="FULLTEXT"?"FULLTEXT":($K["Non_unique"]?($K["Index_type"]=="SPATIAL"?"SPATIAL":"INDEX"):"UNIQUE")));$J[$C]["columns"][]=$K["Column_name"];$J[$C]["lengths"][]=($K["Index_type"]=="SPATIAL"?null:$K["Sub_part"]);$J[$C]["descs"][]=null;}return$J;}function -foreign_keys($R){static$ig='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$J=array();$_b=get_val("SHOW CREATE TABLE ".table($R),1);if($_b){preg_match_all("~CONSTRAINT ($ig) FOREIGN KEY ?\\(((?:$ig,? ?)+)\\) REFERENCES ($ig)(?:\\.($ig))? \\(((?:$ig,? ?)+)\\)(?: ON DELETE (driver()->onActions))?(?: ON UPDATE (driver()->onActions))?~",$_b,$He,PREG_SET_ORDER);foreach($He -as$B){preg_match_all("~$ig~",$B[2],$Ch);preg_match_all("~$ig~",$B[5],$fi);$J[idf_unescape($B[1])]=array("db"=>idf_unescape($B[4]!=""?$B[3]:$B[4]),"table"=>idf_unescape($B[4]!=""?$B[4]:$B[3]),"source"=>array_map('Adminer\idf_unescape',$Ch[0]),"target"=>array_map('Adminer\idf_unescape',$fi[0]),"on_delete"=>($B[6]?:"RESTRICT"),"on_update"=>($B[7]?:"RESTRICT"),);}}return$J;}function +foreign_keys($R){static$mg='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$J=array();$Ab=get_val("SHOW CREATE TABLE ".table($R),1);if($Ab){preg_match_all("~CONSTRAINT ($mg) FOREIGN KEY ?\\(((?:$mg,? ?)+)\\) REFERENCES ($mg)(?:\\.($mg))? \\(((?:$mg,? ?)+)\\)(?: ON DELETE (".driver()->onActions."))?(?: ON UPDATE (".driver()->onActions."))?~",$Ab,$Le,PREG_SET_ORDER);foreach($Le +as$B){preg_match_all("~$mg~",$B[2],$Ih);preg_match_all("~$mg~",$B[5],$mi);$J[idf_unescape($B[1])]=array("db"=>idf_unescape($B[4]!=""?$B[3]:$B[4]),"table"=>idf_unescape($B[4]!=""?$B[4]:$B[3]),"source"=>array_map('Adminer\idf_unescape',$Ih[0]),"target"=>array_map('Adminer\idf_unescape',$mi[0]),"on_delete"=>($B[6]?:"RESTRICT"),"on_update"=>($B[7]?:"RESTRICT"),);}}return$J;}function view($C){return array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($C),1)));}function collations(){$J=array();foreach(get_rows("SHOW COLLATION")as$K){if($K["Default"])$J[$K["Charset"]][-1]=$K["Collation"];else$J[$K["Charset"]][]=$K["Collation"];}ksort($J);foreach($J @@ -1216,32 +1233,32 @@ h(preg_replace('~^You have an error.*syntax to use~U',"Syntax error",connection( create_database($j,$c){return queries("CREATE DATABASE ".idf_escape($j).($c?" COLLATE ".q($c):""));}function drop_databases(array$i){$J=apply_queries("DROP DATABASE",$i,'Adminer\idf_escape');restart_session();set_session("dbs",null);return$J;}function -rename_database($C,$c){$J=false;if(create_database($C,$c)){$T=array();$hj=array();foreach(tables_list()as$R=>$U){if($U=='VIEW')$hj[]=$R;else$T[]=$R;}$J=(!$T&&!$hj)||move_tables($T,$hj,$C);drop_databases($J?array(DB):array());}return$J;}function +rename_database($C,$c){$J=false;if(create_database($C,$c)){$T=array();$pj=array();foreach(tables_list()as$R=>$U){if($U=='VIEW')$pj[]=$R;else$T[]=$R;}$J=(!$T&&!$pj)||move_tables($T,$pj,$C);drop_databases($J?array(DB):array());}return$J;}function auto_increment(){$Aa=" PRIMARY KEY";if($_GET["create"]!=""&&$_POST["auto_increment_col"]){foreach(indexes($_GET["create"])as$v){if(in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"],$v["columns"],true)){$Aa="";break;}if($v["type"]=="PRIMARY")$Aa=" UNIQUE";}}return" AUTO_INCREMENT$Aa";}function -alter_table($R,$C,array$n,array$cd,$mb,$rc,$c,$_a,$eg){$b=array();foreach($n -as$m){if($m[1]){$k=$m[1][3];if(preg_match('~ GENERATED~',$k)){$m[1][3]=(connection()->flavor=='maria'?"":$m[1][2]);$m[1][2]=$k;}$b[]=($R!=""?($m[0]!=""?"CHANGE ".idf_escape($m[0]):"ADD"):" ")." ".implode($m[1]).($R!=""?$m[2]:"");}else$b[]="DROP ".idf_escape($m[0]);}$b=array_merge($b,$cd);$P=($mb!==null?" COMMENT=".q($mb):"").($rc?" ENGINE=".q($rc):"").($c?" COLLATE ".q($c):"").($_a!=""?" AUTO_INCREMENT=$_a":"");if($R=="")return -queries("CREATE TABLE ".table($C)." (\n".implode(",\n",$b)."\n)$P$eg");if($R!=$C)$b[]="RENAME TO ".table($C);if($P)$b[]=ltrim($P);return($b||$eg?queries("ALTER TABLE ".table($R)."\n".implode(",\n",$b).$eg):true);}function +alter_table($R,$C,array$n,array$fd,$mb,$uc,$c,$_a,$ig){$b=array();foreach($n +as$m){if($m[1]){$k=$m[1][3];if(preg_match('~ GENERATED~',$k)){$m[1][3]=(connection()->flavor=='maria'?"":$m[1][2]);$m[1][2]=$k;}$b[]=($R!=""?($m[0]!=""?"CHANGE ".idf_escape($m[0]):"ADD"):" ")." ".implode($m[1]).($R!=""?$m[2]:"");}else$b[]="DROP ".idf_escape($m[0]);}$b=array_merge($b,$fd);$P=($mb!==null?" COMMENT=".q($mb):"").($uc?" ENGINE=".q($uc):"").($c?" COLLATE ".q($c):"").($_a!=""?" AUTO_INCREMENT=$_a":"");if($R=="")return +queries("CREATE TABLE ".table($C)." (\n".implode(",\n",$b)."\n)$P$ig");if($R!=$C)$b[]="RENAME TO ".table($C);if($P)$b[]=ltrim($P);return($b||$ig?queries("ALTER TABLE ".table($R)."\n".implode(",\n",$b).$ig):true);}function alter_indexes($R,$b){$Ta=array();foreach($b as$X)$Ta[]=($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($R).implode(",",$Ta));}function truncate_tables(array$T){return apply_queries("TRUNCATE TABLE",$T);}function -drop_views(array$hj){return -queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$hj)));}function +drop_views(array$pj){return +queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$pj)));}function drop_tables(array$T){return queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$T)));}function -move_tables(array$T,array$hj,$fi){$Rg=array();foreach($T -as$R)$Rg[]=table($R)." TO ".idf_escape($fi).".".table($R);if(!$Rg||queries("RENAME TABLE ".implode(", ",$Rg))){$Qb=array();foreach($hj -as$R)$Qb[table($R)]=view($R);connection()->select_db($fi);$j=idf_escape(DB);foreach($Qb -as$C=>$gj){if(!queries("CREATE VIEW $C AS ".str_replace(" $j."," ",$gj["select"]))||!queries("DROP VIEW $j.$C"))return +move_tables(array$T,array$pj,$mi){$Wg=array();foreach($T +as$R)$Wg[]=table($R)." TO ".idf_escape($mi).".".table($R);if(!$Wg||queries("RENAME TABLE ".implode(", ",$Wg))){$Sb=array();foreach($pj +as$R)$Sb[table($R)]=view($R);connection()->select_db($mi);$j=idf_escape(DB);foreach($Sb +as$C=>$oj){if(!queries("CREATE VIEW $C AS ".str_replace(" $j."," ",$oj["select"]))||!queries("DROP VIEW $j.$C"))return false;}return true;}return false;}function -copy_tables(array$T,array$hj,$fi){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($T -as$R){$C=($fi==DB?table("copy_$R"):idf_escape($fi).".".table($R));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $C"))||!queries("CREATE TABLE $C LIKE ".table($R))||!queries("INSERT INTO $C SELECT * FROM ".table($R)))return -false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")))as$K){$Ci=$K["Trigger"];if(!queries("CREATE TRIGGER ".($fi==DB?idf_escape("copy_$Ci"):idf_escape($fi).".".idf_escape($Ci))." $K[Timing] $K[Event] ON $C FOR EACH ROW\n$K[Statement];"))return -false;}}foreach($hj -as$R){$C=($fi==DB?table("copy_$R"):idf_escape($fi).".".table($R));$gj=view($R);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $C"))||!queries("CREATE VIEW $C AS $gj[select]"))return +copy_tables(array$T,array$pj,$mi){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($T +as$R){$C=($mi==DB?table("copy_$R"):idf_escape($mi).".".table($R));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $C"))||!queries("CREATE TABLE $C LIKE ".table($R))||!queries("INSERT INTO $C SELECT * FROM ".table($R)))return +false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")))as$K){$Ki=$K["Trigger"];if(!queries("CREATE TRIGGER ".($mi==DB?idf_escape("copy_$Ki"):idf_escape($mi).".".idf_escape($Ki))." $K[Timing] $K[Event] ON $C FOR EACH ROW\n$K[Statement];"))return +false;}}foreach($pj +as$R){$C=($mi==DB?table("copy_$R"):idf_escape($mi).".".table($R));$oj=view($R);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $C"))||!queries("CREATE VIEW $C AS $oj[select]"))return false;}return true;}function trigger($C,$R){if($C=="")return @@ -1250,8 +1267,8 @@ reset($L);}function triggers($R){$J=array();foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")))as$K)$J[$K["Trigger"]]=array($K["Timing"],$K["Event"]);return$J;}function trigger_options(){return array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("FOR EACH ROW"),);}function -routine($C,$U){$ra=array("bool","boolean","integer","double precision","real","dec","numeric","fixed","national char","national varchar");$Dh="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";$tc=driver()->enumLength;$Hi="((".implode("|",array_merge(array_keys(driver()->types()),$ra)).")\\b(?:\\s*\\(((?:[^'\")]|$tc)++)\\))?"."\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s,]+)['\"]?)?";$ig="$Dh*(".($U=="FUNCTION"?"":driver()->inout).")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$Hi";$h=get_val("SHOW CREATE $U ".idf_escape($C),2);preg_match("~\\(((?:$ig\\s*,?)*)\\)\\s*".($U=="FUNCTION"?"RETURNS\\s+$Hi\\s+":"")."(.*)~is",$h,$B);$n=array();preg_match_all("~$ig\\s*,?~is",$B[1],$He,PREG_SET_ORDER);foreach($He -as$Yf)$n[]=array("field"=>str_replace("``","`",$Yf[2]).$Yf[3],"type"=>strtolower($Yf[5]),"length"=>preg_replace_callback("~$tc~s",'Adminer\normalize_enum',$Yf[6]),"unsigned"=>strtolower(preg_replace('~\s+~',' ',trim("$Yf[8] $Yf[7]"))),"null"=>true,"full_type"=>$Yf[4],"inout"=>strtoupper($Yf[1]),"collation"=>strtolower($Yf[9]),);return +routine($C,$U){$ra=array("bool","boolean","integer","double precision","real","dec","numeric","fixed","national char","national varchar");$Jh="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";$wc=driver()->enumLength;$Pi="((".implode("|",array_merge(array_keys(driver()->types()),$ra)).")\\b(?:\\s*\\(((?:[^'\")]|$wc)++)\\))?"."\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s,]+)['\"]?)?";$mg="$Jh*(".($U=="FUNCTION"?"":driver()->inout).")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$Pi";$h=get_val("SHOW CREATE $U ".idf_escape($C),2);preg_match("~\\(((?:$mg\\s*,?)*)\\)\\s*".($U=="FUNCTION"?"RETURNS\\s+$Pi\\s+":"")."(.*)~is",$h,$B);$n=array();preg_match_all("~$mg\\s*,?~is",$B[1],$Le,PREG_SET_ORDER);foreach($Le +as$cg)$n[]=array("field"=>str_replace("``","`",$cg[2]).$cg[3],"type"=>strtolower($cg[5]),"length"=>preg_replace_callback("~$wc~s",'Adminer\normalize_enum',$cg[6]),"unsigned"=>strtolower(preg_replace('~\s+~',' ',trim("$cg[8] $cg[7]"))),"null"=>true,"full_type"=>$cg[4],"inout"=>strtoupper($cg[1]),"collation"=>strtolower($cg[9]),);return array("fields"=>$n,"comment"=>get_val("SELECT ROUTINE_COMMENT FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_NAME = ".q($C)),)+($U!="FUNCTION"?array("definition"=>$B[11]):array("returns"=>array("type"=>$B[12],"length"=>$B[13],"unsigned"=>$B[15],"collation"=>$B[16]),"definition"=>$B[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 @@ -1263,9 +1280,9 @@ last_id($I){return get_val("SELECT LAST_INSERT_ID()");}function explain(Db$f,$H){return$f->query("EXPLAIN ".(min_version(5.1)&&!min_version(5.7)?"PARTITIONS ":"").$H);}function found_rows(array$S,array$Z){return($Z||$S["Engine"]!="InnoDB"?null:$S["Rows"]);}function -create_sql($R,$_a,$Ph){$J=get_val("SHOW CREATE TABLE ".table($R),1);if(!$_a)$J=preg_replace('~ AUTO_INCREMENT=\d+~','',$J);return$J;}function +create_sql($R,$_a,$Vh){$J=get_val("SHOW CREATE TABLE ".table($R),1);if(!$_a)$J=preg_replace('~ AUTO_INCREMENT=\d+~','',$J);return$J;}function truncate_sql($R){return"TRUNCATE ".table($R);}function -use_sql($Jb){return"USE ".idf_escape($Jb);}function +use_sql($Kb){return"USE ".idf_escape($Kb);}function trigger_sql($R){$J="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")),null,"-- ")as$K)$J .="\nCREATE TRIGGER ".idf_escape($K["Trigger"])." $K[Timing] $K[Event] ON ".table($K["Table"])." FOR EACH ROW\n$K[Statement];;\n";return$J;}function show_variables(){return @@ -1275,8 +1292,8 @@ get_rows("SHOW STATUS");}function process_list(){return get_rows("SHOW FULL PROCESSLIST");}function convert_field(array$m){if(preg_match("~binary~",$m["type"]))return"HEX(".idf_escape($m["field"]).")";if($m["type"]=="bit")return"BIN(".idf_escape($m["field"])." + 0)";if(preg_match("~geometry|point|linestring|polygon~",$m["type"]))return(min_version(8)?"ST_":"")."AsWKT(".idf_escape($m["field"]).")";}function -unconvert_field(array$m,$J){if(preg_match("~binary~",$m["type"]))$J="UNHEX($J)";if($m["type"]=="bit")$J="CONVERT(b$J, UNSIGNED)";if(preg_match("~geometry|point|linestring|polygon~",$m["type"])){$tg=(min_version(8)?"ST_":"");$J=$tg."GeomFromText($J, $tg"."SRID($m[field]))";}return$J;}function -support($Oc){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")."~",$Oc);}function +unconvert_field(array$m,$J){if(preg_match("~binary~",$m["type"]))$J="UNHEX($J)";if($m["type"]=="bit")$J="CONVERT(b$J, UNSIGNED)";if(preg_match("~geometry|point|linestring|polygon~",$m["type"])){$yg=(min_version(8)?"ST_":"");$J=$yg."GeomFromText($J, $yg"."SRID($m[field]))";}return$J;}function +support($Rc){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")."~",$Rc);}function kill_process($X){return queries("KILL ".number($X));}function connection_id(){return"SELECT CONNECTION_ID()";}function @@ -1288,18 +1305,18 @@ type_values($t){return"";}function schemas(){return array();}function get_schema(){return"";}function -set_schema($fh,$g=null){return -true;}}define('Adminer\JUSH',Driver::$le);define('Adminer\SERVER',$_GET[DRIVER]);define('Adminer\DB',$_GET["db"]);define('Adminer\ME',preg_replace('~\?.*~','',relative_uri()).'?'.(sid()?SID.'&':'').(SERVER!==null?DRIVER."=".urlencode(SERVER).'&':'').($_GET["ext"]?"ext=".urlencode($_GET["ext"]).'&':'').(isset($_GET["username"])?"username=".urlencode($_GET["username"]).'&':'').(DB!=""?'db='.urlencode(DB).'&'.(isset($_GET["ns"])?"ns=".urlencode($_GET["ns"])."&":""):''));function -page_header($pi,$l="",$Ma=array(),$qi=""){page_headers();if(is_ajax()&&$l){page_messages($l);exit;}if(!ob_get_level())ob_start(null,4096);$ri=$pi.($qi!=""?": $qi":"");$si=strip_tags($ri.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".adminer()->name());echo' +set_schema($kh,$g=null){return +true;}}define('Adminer\JUSH',Driver::$oe);define('Adminer\SERVER',$_GET[DRIVER]);define('Adminer\DB',$_GET["db"]);define('Adminer\ME',preg_replace('~\?.*~','',relative_uri()).'?'.(sid()?SID.'&':'').(SERVER!==null?DRIVER."=".urlencode(SERVER).'&':'').($_GET["ext"]?"ext=".urlencode($_GET["ext"]).'&':'').(isset($_GET["username"])?"username=".urlencode($_GET["username"]).'&':'').(DB!=""?'db='.urlencode(DB).'&'.(isset($_GET["ns"])?"ns=".urlencode($_GET["ns"])."&":""):''));function +page_header($wi,$l="",$Ma=array(),$xi=""){page_headers();if(is_ajax()&&$l){page_messages($l);exit;}if(!ob_get_level())ob_start('ob_gzhandler',4096);$yi=$wi.($xi!=""?": $xi":"");$zi=strip_tags($yi.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".adminer()->name());echo' -',$si,' - -';$Db=adminer()->css();$yd=false;$wd=false;foreach($Db -as$o){if(strpos($o,"adminer.css")!==false)$yd=true;if(strpos($o,"adminer-dark.css")!==false)$wd=true;}$Gb=($yd?($wd?null:false):($wd?:null));$Pe=" media='(prefers-color-scheme: dark)'";if($Gb!==false)echo"\n";echo"\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=5.1.1");if(adminer()->head($Gb))echo"\n","\n";foreach($Db -as$X)echo"\n";echo"\n\n";$o=get_temp_dir()."/adminer.version";if(!$_COOKIE["adminer_version"]&&function_exists('openssl_verify')&&file_exists($o)&&filemtime($o)+86400>time()){$fj=unserialize(file_get_contents($o));$Bg="-----BEGIN PUBLIC KEY----- +',$zi,' + +';$Eb=adminer()->css();$Ad=false;$zd=false;foreach($Eb +as$o){if(strpos($o,"adminer.css")!==false)$Ad=true;if(strpos($o,"adminer-dark.css")!==false)$zd=true;}$Hb=($Ad?($zd?null:false):($zd?:null));$Te=" media='(prefers-color-scheme: dark)'";if($Hb!==false)echo"\n";echo"\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=5.2.0");if(adminer()->head($Hb))echo"\n","\n";foreach($Eb +as$X)echo"\n";echo"\n\n";$o=get_temp_dir()."/adminer.version";if(!$_COOKIE["adminer_version"]&&function_exists('openssl_verify')&&file_exists($o)&&filemtime($o)+86400>time()){$nj=unserialize(file_get_contents($o));$Gg="-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqWOVuF5uw7/+Z70djoK RlHIZFZPO0uYRezq90+7Amk+FDNd7KkL5eDve+vHRJBLAszF/7XKXe11xwliIsFs DFWQlsABVZB3oisKCBEuI71J4kPH8dKGEWR9jDHFw3cWmoH3PmqImX6FISWbG3B8 @@ -1308,205 +1325,205 @@ jHnq1cFpOIISzARlrHMa/43YfeNRAm/tsBXjSxembBPo7aQZLAWHmaj5+K19H10B nCpz9Y++cipkVEiKRGih4ZEvjoFysEOdRLj6WiD/uUNky4xGeA6LaJqh5XpkFkcQ fQIDAQAB -----END PUBLIC KEY----- -";if(openssl_verify($fj["version"],base64_decode($fj["signature"]),$Bg)==1)$_COOKIE["adminer_version"]=$fj["version"];}echo +";if(openssl_verify($nj["version"],base64_decode($nj["signature"]),$Gg)==1)$_COOKIE["adminer_version"]=$nj["version"];}echo script("mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick".(isset($_COOKIE["adminer_version"])?"":", onload: partial(verifyVersion, '".VERSION."', '".js_escape(ME)."', '".get_token()."')")."}); document.body.classList.replace('nojs', 'js'); const offlineMessage = '".js_escape('You are offline.')."'; const thousandsSeparator = '".js_escape(',')."';"),"\n",script("mixin(qs('#help'), {onmouseover: () => { helpOpen = 1; }, onmouseout: helpMouseout});"),"
    \n","".icon("move","","menu","")."".script("qs('#menuopen').onclick = event => { qs('#foot').classList.toggle('foot'); event.stopPropagation(); }");if($Ma!==null){$_=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'

    $ri

    \n","\n";restart_session();page_messages($l);$i=&get_session("dbs");if(DB!=""&&$i&&!in_array(DB,$i,true))$i=null;stop_session();define('Adminer\PAGE_HEADER',1);}function -page_headers(){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(adminer()->csp(csp())as$Cb){$_d=array();foreach($Cb -as$x=>$X)$_d[]="$x $X";header("Content-Security-Policy: ".implode("; ",$_d));}adminer()->headers();}function +as$x=>$X){$Ub=(is_array($X)?$X[1]:h($X));if($Ub!="")echo"$Ub » ";}}echo"$wi\n";}}echo"

    $yi

    \n","\n";restart_session();page_messages($l);$i=&get_session("dbs");if(DB!=""&&$i&&!in_array(DB,$i,true))$i=null;stop_session();define('Adminer\PAGE_HEADER',1);}function +page_headers(){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(adminer()->csp(csp())as$Db){$Cd=array();foreach($Db +as$x=>$X)$Cd[]="$x $X";header("Content-Security-Policy: ".implode("; ",$Cd));}adminer()->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$lf;if(!$lf)$lf=base64_encode(rand_string());return$lf;}function -page_messages($l){$Si=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$Ve=idx($_SESSION["messages"],$Si);if($Ve){echo"
    ".implode("
    \n
    ",$Ve)."
    ".script("messagesPrint();");unset($_SESSION["messages"][$Si]);}if($l)echo"
    $l
    \n";if(adminer()->error)echo"
    ".adminer()->error."
    \n";}function -page_footer($Ye=""){echo"
    \n\n\n\n\n\n",script("setupSubmitHighlight(document);");}function -int32($df){while($df>=2147483648)$df-=4294967296;while($df<=-2147483649)$df+=4294967296;return(int)$df;}function -long2str(array$W,$jj){$dh='';foreach($W -as$X)$dh -.=pack('V',$X);if($jj)return -substr($dh,0,end($W));return$dh;}function -str2long($dh,$jj){$W=array_values(unpack('V*',str_pad($dh,4*ceil(strlen($dh)/4),"\0")));if($jj)$W[]=strlen($dh);return$W;}function -xxtea_mx($qj,$pj,$Sh,$me){return -int32((($qj>>5&0x7FFFFFF)^$pj<<2)+(($pj>>3&0x1FFFFFFF)^$qj<<4))^int32(($Sh^$pj)+($me^$qj));}function -encrypt_string($Nh,$x){if($Nh=="")return"";$x=array_values(unpack("V*",pack("H*",md5($x))));$W=str2long($Nh,true);$df=count($W)-1;$qj=$W[$df];$pj=$W[0];$Cg=floor(6+52/($df+1));$Sh=0;while($Cg-->0){$Sh=int32($Sh+0x9E3779B9);$ic=$Sh>>2&3;for($Wf=0;$Wf<$df;$Wf++){$pj=$W[$Wf+1];$cf=xxtea_mx($qj,$pj,$Sh,$x[$Wf&3^$ic]);$qj=int32($W[$Wf]+$cf);$W[$Wf]=$qj;}$pj=$W[0];$cf=xxtea_mx($qj,$pj,$Sh,$x[$Wf&3^$ic]);$qj=int32($W[$df]+$cf);$W[$df]=$qj;}return +int32($hf){while($hf>=2147483648)$hf-=4294967296;while($hf<=-2147483649)$hf+=4294967296;return(int)$hf;}function +long2str(array$W,$rj){$ih='';foreach($W +as$X)$ih +.=pack('V',$X);if($rj)return +substr($ih,0,end($W));return$ih;}function +str2long($ih,$rj){$W=array_values(unpack('V*',str_pad($ih,4*ceil(strlen($ih)/4),"\0")));if($rj)$W[]=strlen($ih);return$W;}function +xxtea_mx($yj,$xj,$Yh,$pe){return +int32((($yj>>5&0x7FFFFFF)^$xj<<2)+(($xj>>3&0x1FFFFFFF)^$yj<<4))^int32(($Yh^$xj)+($pe^$yj));}function +encrypt_string($Th,$x){if($Th=="")return"";$x=array_values(unpack("V*",pack("H*",md5($x))));$W=str2long($Th,true);$hf=count($W)-1;$yj=$W[$hf];$xj=$W[0];$Hg=floor(6+52/($hf+1));$Yh=0;while($Hg-->0){$Yh=int32($Yh+0x9E3779B9);$lc=$Yh>>2&3;for($ag=0;$ag<$hf;$ag++){$xj=$W[$ag+1];$gf=xxtea_mx($yj,$xj,$Yh,$x[$ag&3^$lc]);$yj=int32($W[$ag]+$gf);$W[$ag]=$yj;}$xj=$W[0];$gf=xxtea_mx($yj,$xj,$Yh,$x[$ag&3^$lc]);$yj=int32($W[$hf]+$gf);$W[$hf]=$yj;}return long2str($W,false);}function -decrypt_string($Nh,$x){if($Nh=="")return"";if(!$x)return -false;$x=array_values(unpack("V*",pack("H*",md5($x))));$W=str2long($Nh,false);$df=count($W)-1;$qj=$W[$df];$pj=$W[0];$Cg=floor(6+52/($df+1));$Sh=int32($Cg*0x9E3779B9);while($Sh){$ic=$Sh>>2&3;for($Wf=$df;$Wf>0;$Wf--){$qj=$W[$Wf-1];$cf=xxtea_mx($qj,$pj,$Sh,$x[$Wf&3^$ic]);$pj=int32($W[$Wf]-$cf);$W[$Wf]=$pj;}$qj=$W[$df];$cf=xxtea_mx($qj,$pj,$Sh,$x[$Wf&3^$ic]);$pj=int32($W[0]-$cf);$W[0]=$pj;$Sh=int32($Sh-0x9E3779B9);}return -long2str($W,true);}$kg=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$X){list($x)=explode(":",$X);$kg[$x]=$X;}}function -add_invalid_login(){$Fa=get_temp_dir()."/adminer.invalid";foreach(glob("$Fa*")?:array($Fa)as$o){$q=file_open_lock($o);if($q)break;}if(!$q)$q=file_open_lock("$Fa-".rand_string());if(!$q)return;$ee=unserialize(stream_get_contents($q));$mi=time();if($ee){foreach($ee -as$fe=>$X){if($X[0]<$mi)unset($ee[$fe]);}}$de=&$ee[adminer()->bruteForceKey()];if(!$de)$de=array($mi+30*60,0);$de[1]++;file_write_unlock($q,serialize($ee));}function -check_invalid_login(array&$kg){$ee=array();foreach(glob(get_temp_dir()."/adminer.invalid*")as$o){$q=file_open_lock($o);if($q){$ee=unserialize(stream_get_contents($q));file_unlock($q);break;}}$de=idx($ee,adminer()->bruteForceKey(),array());$kf=($de[1]>29?$de[0]-time():0);if($kf>0)auth_error(lang(array('Too many unsuccessful logins, try again in %d minute.','Too many unsuccessful logins, try again in %d minutes.'),ceil($kf/60)),$kg);}$za=$_POST["auth"];if($za){session_regenerate_id();$ej=$za["driver"];$N=$za["server"];$V=$za["username"];$F=(string)$za["password"];$j=$za["db"];set_password($ej,$N,$V,$F);$_SESSION["db"][$ej][$N][$V][$j]=true;if($za["permanent"]){$x=implode("-",array_map('base64_encode',array($ej,$N,$V,$j)));$xg=adminer()->permanentLogin(true);$kg[$x]="$x:".base64_encode($xg?encrypt_string($F,$xg):"");cookie("adminer_permanent",implode(" ",$kg));}if(count($_POST)==1||DRIVER!=$ej||SERVER!=$N||$_GET["username"]!==$V||DB!=$j)redirect(auth_url($ej,$N,$V,$j));}elseif($_POST["logout"]&&(!$_SESSION["token"]||verify_token())){foreach(array("pwds","db","dbs","queries")as$x)set_session($x,null);unset_permanent($kg);redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1),'Logout successful.'.' '.'Thanks for using Adminer, consider donating.');}elseif($kg&&!$_SESSION["pwds"]){session_regenerate_id();$xg=adminer()->permanentLogin();foreach($kg -as$x=>$X){list(,$bb)=explode(":",$X);list($ej,$N,$V,$j)=array_map('base64_decode',explode("-",$x));set_password($ej,$N,$V,decrypt_string(base64_decode($bb),$xg));$_SESSION["db"][$ej][$N][$V][$j]=true;}}function -unset_permanent(array&$kg){foreach($kg -as$x=>$X){list($ej,$N,$V,$j)=array_map('base64_decode',explode("-",$x));if($ej==DRIVER&&$N==SERVER&&$V==$_GET["username"]&&$j==DB)unset($kg[$x]);}cookie("adminer_permanent",implode(" ",$kg));}function -auth_error($l,array&$kg){$vh=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$vh]||$_GET[$vh])&&!$_SESSION["token"])$l='Session expired, please login again.';else{restart_session();add_invalid_login();$F=get_password();if($F!==null){if($F===false)$l -.=($l?'
    ':'').sprintf('Master password expired. Implement %s method to make it permanent.',target_blank(),'permanentLogin()');set_password(DRIVER,SERVER,$_GET["username"],null);}unset_permanent($kg);}}if(!$_COOKIE[$vh]&&$_GET[$vh]&&ini_bool("session.use_only_cookies"))$l='Session support must be enabled.';$Zf=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$Zf["lifetime"]);if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);page_header('Login',$l,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";adminer()->loginForm();echo"
    \n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent($kg);page_header('No extension',sprintf('None of the supported PHP extensions (%s) are available.',implode(", ",Driver::$Jc)),false);page_footer("auth");exit;}$f='';if(isset($_GET["username"])&&is_string(get_password())){list($Fd,$og)=explode(":",SERVER,2);if(preg_match('~^\s*([-+]?\d+)~',$og,$B)&&($B[1]<1024||$B[1]>65535))auth_error('Connecting to privileged ports is not allowed.',$kg);check_invalid_login($kg);$Bb=adminer()->credentials();$f=Driver::connect($Bb[0],$Bb[1],$Bb[2]);if(is_object($f)){Db::$be=$f;Driver::$be=new -Driver($f);if($f->flavor)save_settings(array("vendor-".DRIVER."-".SERVER=>get_driver(DRIVER)));}}$Be=null;if(!is_object($f)||($Be=adminer()->login($_GET["username"],get_password()))!==true){$l=(is_string($f)?nl_br(h($f)):(is_string($Be)?$Be:'Invalid credentials.')).(preg_match('~^ | $~',get_password())?'
    '.'There is a space in the input password which might be the cause.':'');auth_error($l,$kg);}if($_POST["logout"]&&$_SESSION["token"]&&!verify_token()){page_header('Logout','Invalid CSRF token. Send the form again.');page_footer("db");exit;}if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);stop_session(true);if($za&&$_POST["token"])$_POST["token"]=get_token();$l='';if($_POST){if(!verify_token()){$Wd="max_input_vars";$Ne=ini_get($Wd);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$x){$X=ini_get($x);if($X&&(!$Ne||$X<$Ne)){$Wd=$x;$Ne=$X;}}}$l=(!$_POST["token"]&&$Ne?sprintf('Maximum number of allowed fields exceeded. Please increase %s.',"'$Wd'"):'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"){$l=sprintf('Too big POST data. Reduce the data or increase the %s configuration directive.',"'post_max_size'");if(isset($_GET["sql"]))$l +decrypt_string($Th,$x){if($Th=="")return"";if(!$x)return +false;$x=array_values(unpack("V*",pack("H*",md5($x))));$W=str2long($Th,false);$hf=count($W)-1;$yj=$W[$hf];$xj=$W[0];$Hg=floor(6+52/($hf+1));$Yh=int32($Hg*0x9E3779B9);while($Yh){$lc=$Yh>>2&3;for($ag=$hf;$ag>0;$ag--){$yj=$W[$ag-1];$gf=xxtea_mx($yj,$xj,$Yh,$x[$ag&3^$lc]);$xj=int32($W[$ag]-$gf);$W[$ag]=$xj;}$yj=$W[$hf];$gf=xxtea_mx($yj,$xj,$Yh,$x[$ag&3^$lc]);$xj=int32($W[0]-$gf);$W[0]=$xj;$Yh=int32($Yh-0x9E3779B9);}return +long2str($W,true);}$og=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$X){list($x)=explode(":",$X);$og[$x]=$X;}}function +add_invalid_login(){$Fa=get_temp_dir()."/adminer.invalid";foreach(glob("$Fa*")?:array($Fa)as$o){$q=file_open_lock($o);if($q)break;}if(!$q)$q=file_open_lock("$Fa-".rand_string());if(!$q)return;$he=unserialize(stream_get_contents($q));$ti=time();if($he){foreach($he +as$ie=>$X){if($X[0]<$ti)unset($he[$ie]);}}$ge=&$he[adminer()->bruteForceKey()];if(!$ge)$ge=array($ti+30*60,0);$ge[1]++;file_write_unlock($q,serialize($he));}function +check_invalid_login(array&$og){$he=array();foreach(glob(get_temp_dir()."/adminer.invalid*")as$o){$q=file_open_lock($o);if($q){$he=unserialize(stream_get_contents($q));file_unlock($q);break;}}$ge=idx($he,adminer()->bruteForceKey(),array());$of=($ge[1]>29?$ge[0]-time():0);if($of>0)auth_error(lang_format(array('Too many unsuccessful logins, try again in %d minute.','Too many unsuccessful logins, try again in %d minutes.'),ceil($of/60)),$og);}$za=$_POST["auth"];if($za){session_regenerate_id();$mj=$za["driver"];$N=$za["server"];$V=$za["username"];$F=(string)$za["password"];$j=$za["db"];set_password($mj,$N,$V,$F);$_SESSION["db"][$mj][$N][$V][$j]=true;if($za["permanent"]){$x=implode("-",array_map('base64_encode',array($mj,$N,$V,$j)));$Bg=adminer()->permanentLogin(true);$og[$x]="$x:".base64_encode($Bg?encrypt_string($F,$Bg):"");cookie("adminer_permanent",implode(" ",$og));}if(count($_POST)==1||DRIVER!=$mj||SERVER!=$N||$_GET["username"]!==$V||DB!=$j)redirect(auth_url($mj,$N,$V,$j));}elseif($_POST["logout"]&&(!$_SESSION["token"]||verify_token())){foreach(array("pwds","db","dbs","queries")as$x)set_session($x,null);unset_permanent($og);redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1),'Logout successful.'.' '.'Thanks for using Adminer, consider donating.');}elseif($og&&!$_SESSION["pwds"]){session_regenerate_id();$Bg=adminer()->permanentLogin();foreach($og +as$x=>$X){list(,$bb)=explode(":",$X);list($mj,$N,$V,$j)=array_map('base64_decode',explode("-",$x));set_password($mj,$N,$V,decrypt_string(base64_decode($bb),$Bg));$_SESSION["db"][$mj][$N][$V][$j]=true;}}function +unset_permanent(array&$og){foreach($og +as$x=>$X){list($mj,$N,$V,$j)=array_map('base64_decode',explode("-",$x));if($mj==DRIVER&&$N==SERVER&&$V==$_GET["username"]&&$j==DB)unset($og[$x]);}cookie("adminer_permanent",implode(" ",$og));}function +auth_error($l,array&$og){$Ah=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$Ah]||$_GET[$Ah])&&!$_SESSION["token"])$l='Session expired, please login again.';else{restart_session();add_invalid_login();$F=get_password();if($F!==null){if($F===false)$l +.=($l?'
    ':'').sprintf('Master password expired. Implement %s method to make it permanent.',target_blank(),'permanentLogin()');set_password(DRIVER,SERVER,$_GET["username"],null);}unset_permanent($og);}}if(!$_COOKIE[$Ah]&&$_GET[$Ah]&&ini_bool("session.use_only_cookies"))$l='Session support must be enabled.';$dg=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$dg["lifetime"]);if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);page_header('Login',$l,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";adminer()->loginForm();echo"
    \n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent($og);page_header('No extension',sprintf('None of the supported PHP extensions (%s) are available.',implode(", ",Driver::$Mc)),false);page_footer("auth");exit;}$f='';if(isset($_GET["username"])&&is_string(get_password())){list($Id,$sg)=explode(":",SERVER,2);if(preg_match('~^\s*([-+]?\d+)~',$sg,$B)&&($B[1]<1024||$B[1]>65535))auth_error('Connecting to privileged ports is not allowed.',$og);check_invalid_login($og);$Cb=adminer()->credentials();$f=Driver::connect($Cb[0],$Cb[1],$Cb[2]);if(is_object($f)){Db::$ee=$f;Driver::$ee=new +Driver($f);if($f->flavor)save_settings(array("vendor-".DRIVER."-".SERVER=>get_driver(DRIVER)));}}$Fe=null;if(!is_object($f)||($Fe=adminer()->login($_GET["username"],get_password()))!==true){$l=(is_string($f)?nl_br(h($f)):(is_string($Fe)?$Fe:'Invalid credentials.')).(preg_match('~^ | $~',get_password())?'
    '.'There is a space in the input password which might be the cause.':'');auth_error($l,$og);}if($_POST["logout"]&&$_SESSION["token"]&&!verify_token()){page_header('Logout','Invalid CSRF token. Send the form again.');page_footer("db");exit;}if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);stop_session(true);if($za&&$_POST["token"])$_POST["token"]=get_token();$l='';if($_POST){if(!verify_token()){$Zd="max_input_vars";$Re=ini_get($Zd);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$x){$X=ini_get($x);if($X&&(!$Re||$X<$Re)){$Zd=$x;$Re=$X;}}}$l=(!$_POST["token"]&&$Re?sprintf('Maximum number of allowed fields exceeded. Please increase %s.',"'$Zd'"):'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"){$l=sprintf('Too big POST data. Reduce the data or increase the %s configuration directive.',"'post_max_size'");if(isset($_GET["sql"]))$l .=' '.'You can upload a big SQL file via FTP and import it from server.';}function -print_select_result($I,$g=null,array$Lf=array(),$z=0){$Ae=array();$w=array();$e=array();$Ka=array();$Ii=array();$J=array();for($s=0;(!$z||$s<$z)&&($K=$I->fetch_row());$s++){if(!$s){echo"
    \n","\n","";for($ke=0;$kefetch_field();$C=$m->name;$Kf=(isset($m->orgtable)?$m->orgtable:"");$Jf=(isset($m->orgname)?$m->orgname:$C);if($Lf&&JUSH=="sql")$Ae[$ke]=($C=="table"?"table=":($C=="possible_keys"?"indexes=":null));elseif($Kf!=""){if(isset($m->table))$J[$m->table]=$Kf;if(!isset($w[$Kf])){$w[$Kf]=array();foreach(indexes($Kf,$g)as$v){if($v["type"]=="PRIMARY"){$w[$Kf]=array_flip($v["columns"]);break;}}$e[$Kf]=$w[$Kf];}if(isset($e[$Kf][$Jf])){unset($e[$Kf][$Jf]);$w[$Kf][$Jf]=$ke;$Ae[$ke]=$Kf;}}if($m->charsetnr==63)$Ka[$ke]=true;$Ii[$ke]=$m->type;echo"name!=$Jf?" title='".h(($Kf!=""?"$Kf.":"").$Jf)."'":"").">".h($C).($Lf?doc_link(array('sql'=>"explain-output.html#explain_".strtolower($C),'mariadb'=>"explain/#the-columns-in-explain-select",)):"");}echo"\n";}echo"";foreach($K -as$x=>$X){$_="";if(isset($Ae[$x])&&!$e[$Ae[$x]]){if($Lf&&JUSH=="sql"){$R=$K[array_search("table=",$Ae)];$_=ME.$Ae[$x].urlencode($Lf[$R]!=""?$Lf[$R]:$R);}else{$_=ME."edit=".urlencode($Ae[$x]);foreach($w[$Ae[$x]]as$fb=>$ke)$_ -.="&where".urlencode("[".bracket_escape($fb)."]")."=".urlencode($K[$ke]);}}elseif(is_url($X))$_=$X;if($X===null)$X="NULL";elseif($Ka[$x]&&!is_utf8($X))$X="".lang(array('%d byte','%d bytes'),strlen($X))."";else{$X=h($X);if($Ii[$x]==254)$X="$X";}if($_)$X="$X";echo"$X";}}echo($s?"
    \n
    ":"

    ".'No rows.')."\n";return$J;}function -referencable_primary($nh){$J=array();foreach(table_status('',true)as$Xh=>$R){if($Xh!=$nh&&fk_support($R)){foreach(fields($Xh)as$m){if($m["primary"]){if($J[$Xh]){unset($J[$Xh]);break;}$J[$Xh]=$m;}}}}return$J;}function +print_select_result($I,$g=null,array$Pf=array(),$z=0){$Ee=array();$w=array();$e=array();$Ka=array();$Qi=array();$J=array();for($s=0;(!$z||$s<$z)&&($K=$I->fetch_row());$s++){if(!$s){echo"

    \n","\n","";for($ne=0;$nefetch_field();$C=$m->name;$Of=(isset($m->orgtable)?$m->orgtable:"");$Nf=(isset($m->orgname)?$m->orgname:$C);if($Pf&&JUSH=="sql")$Ee[$ne]=($C=="table"?"table=":($C=="possible_keys"?"indexes=":null));elseif($Of!=""){if(isset($m->table))$J[$m->table]=$Of;if(!isset($w[$Of])){$w[$Of]=array();foreach(indexes($Of,$g)as$v){if($v["type"]=="PRIMARY"){$w[$Of]=array_flip($v["columns"]);break;}}$e[$Of]=$w[$Of];}if(isset($e[$Of][$Nf])){unset($e[$Of][$Nf]);$w[$Of][$Nf]=$ne;$Ee[$ne]=$Of;}}if($m->charsetnr==63)$Ka[$ne]=true;$Qi[$ne]=$m->type;echo"name!=$Nf?" title='".h(($Of!=""?"$Of.":"").$Nf)."'":"").">".h($C).($Pf?doc_link(array('sql'=>"explain-output.html#explain_".strtolower($C),'mariadb'=>"explain/#the-columns-in-explain-select",)):"");}echo"\n";}echo"";foreach($K +as$x=>$X){$_="";if(isset($Ee[$x])&&!$e[$Ee[$x]]){if($Pf&&JUSH=="sql"){$R=$K[array_search("table=",$Ee)];$_=ME.$Ee[$x].urlencode($Pf[$R]!=""?$Pf[$R]:$R);}else{$_=ME."edit=".urlencode($Ee[$x]);foreach($w[$Ee[$x]]as$fb=>$ne)$_ +.="&where".urlencode("[".bracket_escape($fb)."]")."=".urlencode($K[$ne]);}}elseif(is_url($X))$_=$X;if($X===null)$X="NULL";elseif($Ka[$x]&&!is_utf8($X))$X="".lang_format(array('%d byte','%d bytes'),strlen($X))."";else{$X=h($X);if($Qi[$x]==254)$X="$X";}if($_)$X="$X";echo"$X";}}echo($s?"
    \n
    ":"

    ".'No rows.')."\n";return$J;}function +referencable_primary($th){$J=array();foreach(table_status('',true)as$di=>$R){if($di!=$th&&fk_support($R)){foreach(fields($di)as$m){if($m["primary"]){if($J[$di]){unset($J[$di]);break;}$J[$di]=$m;}}}}return$J;}function textarea($C,$Y,$L=10,$ib=80){echo"";}function -select_input($ya,array$Ff,$Y="",$_f="",$lg=""){$ei=($Ff?"select":"input");return"<$ei$ya".($Ff?">

    ".sprintf('%s version: %s through PHP extension %s',get_driver(DRIVER),"".h(connection()->server_info)."","".connection()->extension."")."\n","

    ".sprintf('Logged as: %s',"".h(logged_user())."")."\n";if(isset(adminer()->plugins)&&is_array(adminer()->plugins)){echo"

    ".'Loaded plugins'.":\n

      \n";foreach(adminer()->plugins -as$mg){$Ng=new -\ReflectionObject($mg);echo"
    • ".get_class($mg)."".h(preg_match('~^/[\s*]+(.+)~',$Ng->getDocComment(),$B)?": $B[1]":"")."\n";}echo"
    \n";}$i=adminer()->databases();if($i){$hh=support("scheme");$hb=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=>$T){$Yg=h(ME)."db=".urlencode($j);$t=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"]),"","","",$t):""),"".h($j)."";$c=h(db_collation($j,$hb));echo"".(support("database")?"$c":$c),"".($_GET["dbsize"]?$T:"?")."","".($_GET["dbsize"]?db_size($j):"?"),"\n";}echo"
    \n",(support("database")?"\n":""),input_token(),"
    \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 +set_utf8mb4($h){static$O=false;if(!$O&&preg_match('~\butf8mb4~i',$h)){$O=true;echo"SET NAMES ".charset(connection()).";\n\n";}}if(isset($_GET["status"]))$_GET["variables"]=$_GET["status"];if(isset($_GET["import"]))$_GET["sql"]=$_GET["import"];if(!(DB!=""?connection()->select_db(DB):isset($_GET["sql"])||isset($_GET["dump"])||isset($_GET["database"])||isset($_GET["processlist"])||isset($_GET["privileges"])||isset($_GET["user"])||isset($_GET["variables"])||$_GET["script"]=="connect"||$_GET["script"]=="kill")){if(DB!=""||$_GET["refresh"]){restart_session();set_session("dbs",null);}if(DB!=""){header("HTTP/1.1 404 Not Found");page_header('Database'.": ".h(DB),'Invalid database.',true);}else{if($_POST["db"]&&!$l)queries_redirect(substr(ME,0,-1),'Databases have been dropped.',drop_databases($_POST["db"]));page_header('Select database',$l,false);echo"

    ".sprintf('%s version: %s through PHP extension %s',get_driver(DRIVER),"".h(connection()->server_info)."","".connection()->extension."")."\n","

    ".sprintf('Logged as: %s',"".h(logged_user())."")."\n";$i=adminer()->databases();if($i){$mh=support("scheme");$hb=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=>$T){$dh=h(ME)."db=".urlencode($j);$t=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"]),"","","",$t):""),"".h($j)."";$c=h(db_collation($j,$hb));echo"".(support("database")?"$c":$c),"".($_GET["dbsize"]?$T:"?")."","".($_GET["dbsize"]?db_size($j):"?"),"\n";}echo"
    \n",(support("database")?"\n":""),input_token(),"
    \n",script("tableCheck();");}if(isset(adminer()->plugins)&&is_array(adminer()->plugins)){echo"
    \n","

    ".'Loaded plugins'."

    \n
      \n";foreach(adminer()->plugins +as$qg){$Vb=(method_exists($qg,'description')?$qg->description():"");if(!$Vb){$Sg=new +\ReflectionObject($qg);if(preg_match('~^/[\s*]+(.+)~',$Sg->getDocComment(),$B))$Vb=$B[1];}$nh=(method_exists($qg,'screenshot')?$qg->screenshot():"");echo"
    • ".get_class($qg)."".h($Vb?": $Vb":"").($nh?" (".'screenshot'.")":"")."\n";}echo"
    \n";adminer()->pluginsLinks();echo"
    \n";}}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;var$size;function __construct(){$this->handler=tmpfile();}function write($wb){$this->size+=strlen($wb);fwrite($this->handler,$wb);}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"];$n=fields($a);header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=".friendly_url("$a-".implode("_",$_GET["where"])).".".friendly_url($_GET["field"]));$M=array(idf_escape($_GET["field"]));$I=driver()->select($a,$M,array(where($_GET,$n)),$M);$K=($I?$I->fetch_row():array());echo -driver()->value($K[0],$n[$_GET["field"]]);exit;}elseif(isset($_GET["table"])){$a=$_GET["table"];$n=fields($a);if(!$n)$l=error()?:'No tables.';$S=table_status1($a);$C=adminer()->tableName($S);page_header(($n&&is_view($S)?$S['Engine']=='materialized view'?'Materialized view':'View':'Table').": ".($C!=""?$C:h($a)),$l);$Xg=array();foreach($n -as$x=>$m)$Xg+=$m["privileges"];adminer()->selectLinks($S,(isset($Xg["insert"])||!support("table")?"":null));$mb=$S["Comment"];if($mb!="")echo"

    ".'Comment'.": ".h($mb)."\n";if($n)adminer()->tableStructurePrint($n,$S);if(support("indexes")&&driver()->supportsIndex($S)){echo"

    ".'Indexes'."

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

    ".'Foreign keys'."

    \n";$ed=foreign_keys($a);if($ed){echo"\n","\n";foreach($ed +driver()->value($K[0],$n[$_GET["field"]]);exit;}elseif(isset($_GET["table"])){$a=$_GET["table"];$n=fields($a);if(!$n)$l=error()?:'No tables.';$S=table_status1($a);$C=adminer()->tableName($S);page_header(($n&&is_view($S)?$S['Engine']=='materialized view'?'Materialized view':'View':'Table').": ".($C!=""?$C:h($a)),$l);$ch=array();foreach($n +as$x=>$m)$ch+=$m["privileges"];adminer()->selectLinks($S,(isset($ch["insert"])||!support("table")?"":null));$mb=$S["Comment"];if($mb!="")echo"

    ".'Comment'.": ".h($mb)."\n";if($n)adminer()->tableStructurePrint($n,$S);if(support("indexes")&&driver()->supportsIndex($S)){echo"

    ".'Indexes'."

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

    ".'Foreign keys'."

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

    ".'Checks'."

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

    ".'Triggers'."

    \n";$Fi=triggers($a);if($Fi){echo"\n";foreach($Fi -as$x=>$X)echo"
    ".h($X[0])."".h($X[1])."".h($x)."".'Alter'."\n";echo"
    \n";}echo'
    +as$x=>$X)echo"","".h($X),"".'Alter'."","\n";echo"\n";}echo'

    ".'Triggers'."

    \n";$Ni=triggers($a);if($Ni){echo"\n";foreach($Ni +as$x=>$X)echo"
    ".h($X[0])."".h($X[1])."".h($x)."".'Alter'."\n";echo"
    \n";}echo'
    qs(\'#schema\').onselectstart = () => false; -const tablePos = {',implode(",",$ai)."\n",'}; -const em = qs(\'#schema\').offsetHeight / ',$wi,'; +const tablePos = {',implode(",",$gi)."\n",'}; +const em = qs(\'#schema\').offsetHeight / ',$Ci,'; document.onmousemove = schemaMousemove; document.onmouseup = partialArg(schemaMouseup, \'',js_escape(DB),'\'); -';foreach($fh -as$C=>$R){echo"
    ",''.h($C)."",script("qsl('div').onmousedown = schemaMousedown;");foreach($R["fields"]as$m){$X=''.h($m["field"]).'';echo"
    ".($m["primary"]?"$X":$X);}foreach((array)$R["references"]as$gi=>$Og){foreach($Og -as$ve=>$Jg){$we=$ve-idx($Zh[$C],1);$s=0;foreach($Jg[0]as$Ch)echo"\n
    "."
    ";}}foreach((array)$Mg[$C]as$gi=>$Og){foreach($Og -as$ve=>$e){$we=$ve-idx($Zh[$C],1);$s=0;foreach($e -as$fi)echo"\n
    "."
    "."
    ";}}echo"\n
    \n";}foreach($fh -as$C=>$R){foreach((array)$R["references"]as$gi=>$Og){foreach($Og -as$ve=>$Jg){$Xe=$wi;$Le=-10;foreach($Jg[0]as$x=>$Ch){$qg=$R["pos"][0]+$R["fields"][$Ch]["pos"];$rg=$fh[$gi]["pos"][0]+$fh[$gi]["fields"][$Jg[1][$x]]["pos"];$Xe=min($Xe,$qg,$rg);$Le=max($Le,$qg,$rg);}echo"
    \n";}}}echo'
    +';foreach($kh +as$C=>$R){echo"
    ",''.h($C)."",script("qsl('div').onmousedown = schemaMousedown;");foreach($R["fields"]as$m){$X=''.h($m["field"]).'';echo"
    ".($m["primary"]?"$X":$X);}foreach((array)$R["references"]as$ni=>$Tg){foreach($Tg +as$ze=>$Og){$_e=$ze-idx($fi[$C],1);$s=0;foreach($Og[0]as$Ih)echo"\n
    "."
    ";}}foreach((array)$Rg[$C]as$ni=>$Tg){foreach($Tg +as$ze=>$e){$_e=$ze-idx($fi[$C],1);$s=0;foreach($e +as$mi)echo"\n
    "."
    "."
    ";}}echo"\n
    \n";}foreach($kh +as$C=>$R){foreach((array)$R["references"]as$ni=>$Tg){foreach($Tg +as$ze=>$Og){$bf=$Ci;$Pe=-10;foreach($Og[0]as$x=>$Ih){$ug=$R["pos"][0]+$R["fields"][$Ih]["pos"];$vg=$kh[$ni]["pos"][0]+$kh[$ni]["fields"][$Og[1][$x]]["pos"];$bf=min($bf,$ug,$vg);$Pe=max($Pe,$ug,$vg);}echo"
    \n";}}}echo'
    -';$Lb=array('','USE','DROP+CREATE','CREATE');$bi=array('','DROP+CREATE','CREATE');$Ib=array('','TRUNCATE+INSERT','INSERT');if(JUSH=="sql")$Ib[]='INSERT+UPDATE';$K=get_settings("adminer_export");if(!$K)$K=array("output"=>"text","format"=>"sql","db_style"=>(DB!=""?"":"CREATE"),"table_style"=>"DROP+CREATE","data_style"=>"INSERT");if(!isset($K["events"])){$K["routines"]=$K["events"]=($_GET["dump"]=="");$K["triggers"]=$K["table_style"];}echo"
    ".'Output'."".html_radios("output",adminer()->dumpOutput(),$K["output"])."\n","
    ".'Format'."".html_radios("format",adminer()->dumpFormat(),$K["format"])."\n",(JUSH=="sqlite"?"":"
    ".'Database'."".html_select('db_style',$Lb,$K["db_style"]).(support("type")?checkbox("types",1,$K["types"],'User types'):"").(support("routine")?checkbox("routines",1,$K["routines"],'Routines'):"").(support("event")?checkbox("events",1,$K["events"],'Events'):"")),"
    ".'Tables'."".html_select('table_style',$bi,$K["table_style"]).checkbox("auto_increment",1,$K["auto_increment"],'Auto Increment').(support("trigger")?checkbox("triggers",1,$K["triggers"],'Triggers'):""),"
    ".'Data'."".html_select('data_style',$Ib,$K["data_style"]),'
    +';$Mb=array('','USE','DROP+CREATE','CREATE');$hi=array('','DROP+CREATE','CREATE');$Jb=array('','TRUNCATE+INSERT','INSERT');if(JUSH=="sql")$Jb[]='INSERT+UPDATE';$K=get_settings("adminer_export");if(!$K)$K=array("output"=>"text","format"=>"sql","db_style"=>(DB!=""?"":"CREATE"),"table_style"=>"DROP+CREATE","data_style"=>"INSERT");if(!isset($K["events"])){$K["routines"]=$K["events"]=($_GET["dump"]=="");$K["triggers"]=$K["table_style"];}echo"".'Output'."".html_radios("output",adminer()->dumpOutput(),$K["output"])."\n","".'Format'."".html_radios("format",adminer()->dumpFormat(),$K["format"])."\n",(JUSH=="sqlite"?"":"".'Database'."".html_select('db_style',$Mb,$K["db_style"]).(support("type")?checkbox("types",1,$K["types"],'User types'):"").(support("routine")?checkbox("routines",1,$K["routines"],'Routines'):"").(support("event")?checkbox("events",1,$K["events"],'Events'):"")),"".'Tables'."".html_select('table_style',$hi,$K["table_style"]).checkbox("auto_increment",1,$K["auto_increment"],'Auto Increment').(support("trigger")?checkbox("triggers",1,$K["triggers"],'Triggers'):""),"".'Data'."".html_select('data_style',$Jb,$K["data_style"]),'

    ',input_token(),' -',script("qsl('table').onclick = dumpClick;");$ug=array();if(DB!=""){$Ya=($a!=""?"":" checked");echo"","\n";$hj="";$ci=tables_list();foreach($ci -as$C=>$U){$tg=preg_replace('~_.*~','',$C);$Ya=($a==""||$a==(substr($a,-1)=="%"?"$tg%":$C));$wg="","\n";$pj="";$ji=tables_list();foreach($ji +as$C=>$U){$yg=preg_replace('~_.*~','',$C);$Ya=($a==""||$a==(substr($a,-1)=="%"?"$yg%":$C));$Ag="\n";$i=adminer()->databases();if($i){foreach($i -as$j){if(!information_schema($j)){$tg=preg_replace('~_.*~','',$j);echo"
    ".script("qs('#check-tables').onclick = partial(formCheck, /^tables\\[/);",""),"".script("qs('#check-data').onclick = partial(formCheck, /^data\\[/);",""),"
    ".checkbox("tables[]",$C,$Ya,$C,"","block");if($U!==null&&!preg_match('~table~i',$U))$hj -.="$wg\n";else -echo"$wg\n";$ug[$tg]++;}echo$hj;if($ci)echo +',script("qsl('table').onclick = dumpClick;");$zg=array();if(DB!=""){$Ya=($a!=""?"":" checked");echo"
    ".script("qs('#check-tables').onclick = partial(formCheck, /^tables\\[/);",""),"".script("qs('#check-data').onclick = partial(formCheck, /^data\\[/);",""),"
    ".checkbox("tables[]",$C,$Ya,$C,"","block");if($U!==null&&!preg_match('~table~i',$U))$pj +.="$Ag\n";else +echo"$Ag\n";$zg[$yg]++;}echo$pj;if($ji)echo script("ajaxSetHtml('".js_escape(ME)."script=db');");}else{echo"
    ","",script("qs('#check-databases').onclick = partial(formCheck, /^databases\\[/);",""),"
    ".checkbox("databases[]",$j,$a==""||$a=="$tg%",$j,"","block")."\n";$ug[$tg]++;}}}else +as$j){if(!information_schema($j)){$yg=preg_replace('~_.*~','',$j);echo"
    ".checkbox("databases[]",$j,$a==""||$a=="$yg%",$j,"","block")."\n";$zg[$yg]++;}}}else echo"
    ";}echo'

    -';$Uc=true;foreach($ug -as$x=>$X){if($x!=""&&$X>1){echo($Uc?"

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

    \n";hidden_fields_get();echo -input_hidden("db",DB),($nd?"":input_hidden("grant")),"\n","\n";while($K=$I->fetch_assoc())echo'
    ".'Username'."".'Server'."
    '.h($K["User"])."".h($K["Host"]).''.'Edit'."\n";if(!$nd||DB!="")echo"
    \n";echo"
    \n","

    \n";}elseif(isset($_GET["sql"])){if(!$l&&$_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers("sql");adminer()->dumpTable("","");adminer()->dumpData("","table",$_POST["query"]);adminer()->dumpFooter();exit;}restart_session();$Dd=&get_session("queries");$Cd=&$Dd[DB];if(!$l&&$_POST["clear"]){$Cd=array();redirect(remove_from_uri("history"));}stop_session();page_header((isset($_GET["import"])?'Import':'SQL command'),$l);if(!$l&&$_POST){$q=false;if(!isset($_GET["import"]))$H=$_POST["query"];elseif($_POST["webfile"]){$Gh=adminer()->importServerPath();$q=@fopen((file_exists($Gh)?$Gh:"compress.zlib://$Gh.gz"),"rb");$H=($q?fread($q,1e6):false);}else$H=get_file("sql_file",true,";");if(is_string($H)){if(function_exists('memory_get_usage')&&($Qe=ini_bytes("memory_limit"))!="-1")@ini_set("memory_limit",max($Qe,strval(2*strlen($H)+memory_get_usage()+8e6)));if($H!=""&&strlen($H)<1e6){$Cg=$H.(preg_match("~;[ \t\r\n]*\$~",$H)?"":";");if(!$Cd||first(end($Cd))!=$Cg){restart_session();$Cd[]=array($Cg,time());set_session("queries",$Dd);stop_session();}}$Dh="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";$Rb=";";$D=0;$qc=true;$g=connect(adminer()->credentials());if($g&&DB!=""){$g->select_db(DB);if($_GET["ns"]!="")set_schema($_GET["ns"],$g);}$lb=0;$yc=array();$ag='[\'"'.(JUSH=="sql"?'`#':(JUSH=="sqlite"?'`[':(JUSH=="mssql"?'[':''))).']|/\*|-- |$'.(JUSH=="pgsql"?'|\$[^$]*\$':'');$xi=microtime(true);$ma=get_settings("adminer_import");$hc=adminer()->dumpFormat();unset($hc["sql"]);while($H!=""){if(!$D&&preg_match("~^$Dh*+DELIMITER\\s+(\\S+)~i",$H,$B)){$Rb=$B[1];$H=substr($H,strlen($B[0]));}else{preg_match('('.preg_quote($Rb)."\\s*|$ag)",$H,$B,PREG_OFFSET_CAPTURE,$D);list($gd,$pg)=$B[0];if(!$gd&&$q&&!feof($q))$H -.=fread($q,1e5);else{if(!$gd&&rtrim($H)=="")break;$D=$pg+strlen($gd);if($gd&&rtrim($gd)!=$Rb){$Qa=driver()->hasCStyleEscapes()||(JUSH=="pgsql"&&($pg>0&&strtolower($H[$pg-1])=="e"));$ig=($gd=='/*'?'\*/':($gd=='['?']':(preg_match('~^-- |^#~',$gd)?"\n":preg_quote($gd).($Qa?"|\\\\.":""))));while(preg_match("($ig|\$)s",$H,$B,PREG_OFFSET_CAPTURE,$D)){$dh=$B[0][0];if(!$dh&&$q&&!feof($q))$H -.=fread($q,1e5);else{$D=$B[0][1]+strlen($dh);if(!$dh||$dh[0]!="\\")break;}}}else{$qc=false;$Cg=substr($H,0,$pg);$lb++;$wg="
    ".adminer()->sqlCommandQuery($Cg)."
    \n";if(JUSH=="sqlite"&&preg_match("~^$Dh*+ATTACH\\b~i",$Cg,$B)){echo$wg,"

    ".'ATTACH queries are not supported.'."\n";$yc[]=" $lb";if($_POST["error_stops"])break;}else{if(!$_POST["only_errors"]){echo$wg;ob_flush();flush();}$Lh=microtime(true);if(connection()->multi_query($Cg)&&$g&&preg_match("~^$Dh*+USE\\b~i",$Cg))$g->query($Cg);do{$I=connection()->store_result();if(connection()->error){echo($_POST["only_errors"]?$wg:""),"

    ".'Error in query'.(connection()->errno?" (".connection()->errno.")":"").": ".error()."\n";$yc[]=" $lb";if($_POST["error_stops"])break -2;}else{$mi=" (".format_time($Lh).")".(strlen($Cg)<1000?" ".'Edit'."":"");$oa=connection()->affected_rows;$kj=($_POST["only_errors"]?"":driver()->warnings());$lj="warnings-$lb";if($kj)$mi -.=", ".'Warnings'."".script("qsl('a').onclick = partial(toggle, '$lj');","");$Fc=null;$Lf=null;$Gc="explain-$lb";if(is_object($I)){$z=$_POST["limit"];$Lf=print_select_result($I,$g,array(),$z);if(!$_POST["only_errors"]){echo"

    \n";$nf=$I->num_rows;echo"
    \n";}}else{if(preg_match("~^$Dh*+(CREATE|DROP|ALTER)$Dh++(DATABASE|SCHEMA)\\b~i",$Cg)){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.'),$oa)."$mi\n";}echo($kj?"

    \n":"");if($Fc){echo"\n";}}$Lh=microtime(true);}while(connection()->next_result());}$H=substr($H,$D);$D=0;}}}}if($qc)echo"

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

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

    ".'Error in query'.": ".implode("",$yc)."\n";}else +';$Xc=true;foreach($zg +as$x=>$X){if($x!=""&&$X>1){echo($Xc?"

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

    \n";hidden_fields_get();echo +input_hidden("db",DB),($qd?"":input_hidden("grant")),"\n","\n";while($K=$I->fetch_assoc())echo'
    ".'Username'."".'Server'."
    '.h($K["User"])."".h($K["Host"]).''.'Edit'."\n";if(!$qd||DB!="")echo"
    \n";echo"
    \n","

    \n";}elseif(isset($_GET["sql"])){if(!$l&&$_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers("sql");adminer()->dumpTable("","");adminer()->dumpData("","table",$_POST["query"]);adminer()->dumpFooter();exit;}restart_session();$Gd=&get_session("queries");$Fd=&$Gd[DB];if(!$l&&$_POST["clear"]){$Fd=array();redirect(remove_from_uri("history"));}stop_session();page_header((isset($_GET["import"])?'Import':'SQL command'),$l);if(!$l&&$_POST){$q=false;if(!isset($_GET["import"]))$H=$_POST["query"];elseif($_POST["webfile"]){$Mh=adminer()->importServerPath();$q=@fopen((file_exists($Mh)?$Mh:"compress.zlib://$Mh.gz"),"rb");$H=($q?fread($q,1e6):false);}else$H=get_file("sql_file",true,";");if(is_string($H)){if(function_exists('memory_get_usage')&&($Ue=ini_bytes("memory_limit"))!="-1")@ini_set("memory_limit",max($Ue,strval(2*strlen($H)+memory_get_usage()+8e6)));if($H!=""&&strlen($H)<1e6){$Hg=$H.(preg_match("~;[ \t\r\n]*\$~",$H)?"":";");if(!$Fd||first(end($Fd))!=$Hg){restart_session();$Fd[]=array($Hg,time());set_session("queries",$Gd);stop_session();}}$Jh="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";$Tb=";";$D=0;$tc=true;$g=connect();if($g&&DB!=""){$g->select_db(DB);if($_GET["ns"]!="")set_schema($_GET["ns"],$g);}$lb=0;$Ac=array();$eg='[\'"'.(JUSH=="sql"?'`#':(JUSH=="sqlite"?'`[':(JUSH=="mssql"?'[':''))).']|/\*|--'.(JUSH=='sql'?' ':'').'|$'.(JUSH=="pgsql"?'|\$[^$]*\$':'');$Di=microtime(true);$ma=get_settings("adminer_import");$kc=adminer()->dumpFormat();unset($kc["sql"]);while($H!=""){if(!$D&&preg_match("~^$Jh*+DELIMITER\\s+(\\S+)~i",$H,$B)){$Tb=preg_quote($B[1]);$H=substr($H,strlen($B[0]));}elseif(!$D&&JUSH=='pgsql'&&preg_match("~^($Jh*+COPY\\s+)[^;]+\\s+FROM\\s+stdin;~i",$H,$B)){$Tb="\n\\\\\\.\r?\n";$D=strlen($B[0]);}else{preg_match("($Tb\\s*|$eg)",$H,$B,PREG_OFFSET_CAPTURE,$D);list($jd,$tg)=$B[0];if(!$jd&&$q&&!feof($q))$H +.=fread($q,1e5);else{if(!$jd&&rtrim($H)=="")break;$D=$tg+strlen($jd);if($jd&&!preg_match("(^$Tb)",$jd)){$Qa=driver()->hasCStyleEscapes()||(JUSH=="pgsql"&&($tg>0&&strtolower($H[$tg-1])=="e"));$mg=($jd=='/*'?'\*/':($jd=='['?']':(preg_match('~^-- |^#~',$jd)?"\n":preg_quote($jd).($Qa?'|\\\\.':''))));while(preg_match("($mg|\$)s",$H,$B,PREG_OFFSET_CAPTURE,$D)){$ih=$B[0][0];if(!$ih&&$q&&!feof($q))$H +.=fread($q,1e5);else{$D=$B[0][1]+strlen($ih);if(!$ih||$ih[0]!="\\")break;}}}else{$tc=false;$Hg=substr($H,0,$tg+($Tb[0]=="\n"?3:0));$lb++;$Ag="
    ".adminer()->sqlCommandQuery($Hg)."
    \n";if(JUSH=="sqlite"&&preg_match("~^$Jh*+ATTACH\\b~i",$Hg,$B)){echo$Ag,"

    ".'ATTACH queries are not supported.'."\n";$Ac[]=" $lb";if($_POST["error_stops"])break;}else{if(!$_POST["only_errors"]){echo$Ag;ob_flush();flush();}$Rh=microtime(true);if(connection()->multi_query($Hg)&&$g&&preg_match("~^$Jh*+USE\\b~i",$Hg))$g->query($Hg);do{$I=connection()->store_result();if(connection()->error){echo($_POST["only_errors"]?$Ag:""),"

    ".'Error in query'.(connection()->errno?" (".connection()->errno.")":"").": ".error()."\n";$Ac[]=" $lb";if($_POST["error_stops"])break +2;}else{$ti=" (".format_time($Rh).")".(strlen($Hg)<1000?" ".'Edit'."":"");$oa=connection()->affected_rows;$sj=($_POST["only_errors"]?"":driver()->warnings());$tj="warnings-$lb";if($sj)$ti +.=", ".'Warnings'."".script("qsl('a').onclick = partial(toggle, '$tj');","");$Ic=null;$Pf=null;$Jc="explain-$lb";if(is_object($I)){$z=$_POST["limit"];$Pf=print_select_result($I,$g,array(),$z);if(!$_POST["only_errors"]){echo"

    \n";$rf=$I->num_rows;echo"
    \n";}}else{if(preg_match("~^$Jh*+(CREATE|DROP|ALTER)$Jh++(DATABASE|SCHEMA)\\b~i",$Hg)){restart_session();set_session("dbs",null);stop_session();}if(!$_POST["only_errors"])echo"

    ".lang_format(array('Query executed OK, %d row affected.','Query executed OK, %d rows affected.'),$oa)."$ti\n";}echo($sj?"

    \n":"");if($Ic){echo"\n";}}$Rh=microtime(true);}while(connection()->next_result());}$H=substr($H,$D);$D=0;}}}}if($tc)echo"

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

    ".lang_format(array('%d query executed OK.','%d queries executed OK.'),$lb-count($Ac))," (".format_time($Di).")\n";elseif($Ac&&$lb>1)echo"

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

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

    -';$Dc="";if(!isset($_GET["import"])){$Cg=$_GET["sql"];if($_POST)$Cg=$_POST["query"];elseif($_GET["history"]=="all")$Cg=$Cd;elseif($_GET["history"]!="")$Cg=idx($Cd[$_GET["history"]],0);echo"

    ";textarea("query",$Cg,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"))."');"),"

    ";adminer()->sqlPrintAfter();echo"$Dc\n",'Limit rows'.": \n";}else{echo"

    ".'File upload'."
    ";$td=(extension_loaded("zlib")?"[.gz]":"");echo(ini_bool("file_uploads")?"SQL$td (< ".ini_get("upload_max_filesize")."B): \n$Dc":'File uploads are disabled.'),"
    \n";$Nd=adminer()->importServerPath();if($Nd)echo"
    ".'From server'."
    ",sprintf('Webserver file %s',"".h($Nd)."$td"),' ',"
    \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",input_token();if(!isset($_GET["import"])&&$Cd){print_fieldset("history",'History',$_GET["history"]!="");for($X=end($Cd);$X;$X=prev($Cd)){$x=key($Cd);list($Cg,$mi,$lc)=$X;echo''.'Edit'.""." ".@date("H:i:s",$mi).""." ".shorten_utf8(ltrim(str_replace("\n"," ",str_replace("\r","",preg_replace('~^(#|-- ).*~m','',$Cg)))),80,"").($lc?" ($lc)":"")."
    \n";}echo"\n","".'Edit all'."\n","\n";}echo'

    -';}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$n=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$n):""):where($_GET,$n));$Ri=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($n -as$C=>$m){if(!isset($m["privileges"][$Ri?"update":"insert"])||adminer()->fieldName($m)==""||$m["generated"])unset($n[$C]);}if($_POST&&!$l&&!isset($_GET["select"])){$A=$_POST["referer"];if($_POST["insert"])$A=($Ri?null:$_SERVER["REQUEST_URI"]);elseif(!preg_match('~^.+&select=.+$~',$A))$A=ME."select=".urlencode($a);$w=indexes($a);$Mi=unique_array($_GET["where"],$w);$Fg="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($A,'Item has been deleted.',driver()->delete($a,$Fg,$Mi?0:1));else{$O=array();foreach($n -as$C=>$m){$X=process_input($m);if($X!==false&&$X!==null)$O[idf_escape($C)]=$X;}if($Ri){if(!$O)redirect($A);queries_redirect($A,'Item has been updated.',driver()->update($a,$O,$Fg,$Mi?0:1));if(is_ajax()){page_headers();page_messages($l);exit;}}else{$I=driver()->insert($a,$O);$ue=($I?last_id($I):0);queries_redirect($A,sprintf('Item%s has been inserted.',($ue?" $ue":"")),$I);}}}$K=null;if($_POST["save"])$K=(array)$_POST["fields"];elseif($Z){$M=array();foreach($n +';$Gc="";if(!isset($_GET["import"])){$Hg=$_GET["sql"];if($_POST)$Hg=$_POST["query"];elseif($_GET["history"]=="all")$Hg=$Fd;elseif($_GET["history"]!="")$Hg=idx($Fd[$_GET["history"]],0);echo"

    ";textarea("query",$Hg,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"))."');"),"

    ";adminer()->sqlPrintAfter();echo"$Gc\n",'Limit rows'.": \n";}else{echo"

    ".'File upload'."
    ";$wd=(extension_loaded("zlib")?"[.gz]":"");echo(ini_bool("file_uploads")?"SQL$wd (< ".ini_get("upload_max_filesize")."B): \n$Gc":'File uploads are disabled.'),"
    \n";$Qd=adminer()->importServerPath();if($Qd)echo"
    ".'From server'."
    ",sprintf('Webserver file %s',"".h($Qd)."$wd"),' ',"
    \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",input_token();if(!isset($_GET["import"])&&$Fd){print_fieldset("history",'History',$_GET["history"]!="");for($X=end($Fd);$X;$X=prev($Fd)){$x=key($Fd);list($Hg,$ti,$oc)=$X;echo''.'Edit'.""." ".@date("H:i:s",$ti).""." ".shorten_utf8(ltrim(str_replace("\n"," ",str_replace("\r","",preg_replace('~^(#|-- ).*~m','',$Hg)))),80,"").($oc?" ($oc)":"")."
    \n";}echo"\n","".'Edit all'."\n","\n";}echo' +';}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$n=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$n):""):where($_GET,$n));$Zi=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($n +as$C=>$m){if(!isset($m["privileges"][$Zi?"update":"insert"])||adminer()->fieldName($m)==""||$m["generated"])unset($n[$C]);}if($_POST&&!$l&&!isset($_GET["select"])){$A=$_POST["referer"];if($_POST["insert"])$A=($Zi?null:$_SERVER["REQUEST_URI"]);elseif(!preg_match('~^.+&select=.+$~',$A))$A=ME."select=".urlencode($a);$w=indexes($a);$Ui=unique_array($_GET["where"],$w);$Kg="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($A,'Item has been deleted.',driver()->delete($a,$Kg,$Ui?0:1));else{$O=array();foreach($n +as$C=>$m){$X=process_input($m);if($X!==false&&$X!==null)$O[idf_escape($C)]=$X;}if($Zi){if(!$O)redirect($A);queries_redirect($A,'Item has been updated.',driver()->update($a,$O,$Kg,$Ui?0:1));if(is_ajax()){page_headers();page_messages($l);exit;}}else{$I=driver()->insert($a,$O);$ye=($I?last_id($I):0);queries_redirect($A,sprintf('Item%s has been inserted.',($ye?" $ye":"")),$I);}}}$K=null;if($_POST["save"])$K=(array)$_POST["fields"];elseif($Z){$M=array();foreach($n as$C=>$m){if(isset($m["privileges"]["select"])){$wa=($_POST["clone"]&&$m["auto_increment"]?"''":convert_field($m));$M[]=($wa?"$wa AS ":"").idf_escape($C);}}$K=array();if(!support("table"))$M=array("*");if($M){$I=driver()->select($a,$M,array($Z),$M,array(),(isset($_GET["select"])?2:1));if(!$I)$l=error();else{$K=$I->fetch_assoc();if(!$K)$K=false;}if(isset($_GET["select"])&&(!$K||$I->fetch_assoc()))$K=null;}}if(!support("table")&&!$n){if(!$Z){$I=driver()->select($a,array("*"),array(),array("*"));$K=($I?$I->fetch_assoc():false);if(!$K)$K=array(driver()->primary=>"");}if($K){foreach($K -as$x=>$X){if(!$Z)$K[$x]=null;$n[$x]=array("field"=>$x,"null"=>($x!=driver()->primary),"auto_increment"=>($x==driver()->primary));}}}edit_form($a,$n,$K,$Ri,$l);}elseif(isset($_GET["create"])){$a=$_GET["create"];$cg=array();foreach(array('HASH','LINEAR HASH','KEY','LINEAR KEY','RANGE','LIST')as$x)$cg[$x]=$x;$Lg=referencable_primary($a);$ed=array();foreach($Lg -as$Xh=>$m)$ed[str_replace("`","``",$Xh)."`".str_replace("`","``",$m["field"])]=$Xh;$Of=array();$S=array();if($a!=""){$Of=fields($a);$S=table_status1($a);if(count($S)<2)$l='No tables.';}$K=$_POST;$K["fields"]=(array)$K["fields"];if($K["auto_increment_col"])$K["fields"][$K["auto_increment_col"]]["auto_increment"]=true;if($_POST)save_settings(array("comments"=>$_POST["comments"],"defaults"=>$_POST["defaults"]));if($_POST&&!process_fields($K["fields"])&&!$l){if($_POST["drop"])queries_redirect(substr(ME,0,-1),'Table has been dropped.',drop_tables(array($a)));else{$n=array();$sa=array();$Vi=false;$cd=array();$Nf=reset($Of);$qa=" FIRST";foreach($K["fields"]as$x=>$m){$p=$ed[$m["type"]];$Gi=($p!==null?$Lg[$p]:$m);if($m["field"]!=""){if(!$m["generated"])$m["default"]=null;$Ag=process_field($m,$Gi);$sa[]=array($m["orig"],$Ag,$qa);if(!$Nf||$Ag!==process_field($Nf,$Nf)){$n[]=array($m["orig"],$Ag,$qa);if($m["orig"]!=""||$qa)$Vi=true;}if($p!==null)$cd[idf_escape($m["field"])]=($a!=""&&JUSH!="sqlite"?"ADD":" ").format_foreign_key(array('table'=>$ed[$m["type"]],'source'=>array($m["field"]),'target'=>array($Gi["field"]),'on_delete'=>$m["on_delete"],));$qa=" AFTER ".idf_escape($m["field"]);}elseif($m["orig"]!=""){$Vi=true;$n[]=array($m["orig"]);}if($m["orig"]!=""){$Nf=next($Of);if(!$Nf)$qa="";}}$eg="";if(support("partitioning")){if(isset($cg[$K["partition_by"]])){$Zf=array();foreach($K -as$x=>$X){if(preg_match('~^partition~',$x))$Zf[$x]=$X;}foreach($Zf["partition_names"]as$x=>$C){if($C==""){unset($Zf["partition_names"][$x]);unset($Zf["partition_values"][$x]);}}if($Zf!=get_partitions_info($a)){$fg=array();if($Zf["partition_by"]=='RANGE'||$Zf["partition_by"]=='LIST'){foreach($Zf["partition_names"]as$x=>$C){$Y=$Zf["partition_values"][$x];$fg[]="\n PARTITION ".idf_escape($C)." VALUES ".($Zf["partition_by"]=='RANGE'?"LESS THAN":"IN").($Y!=""?" ($Y)":" MAXVALUE");}}$eg -.="\nPARTITION BY $Zf[partition_by]($Zf[partition])";if($fg)$eg -.=" (".implode(",",$fg)."\n)";elseif($Zf["partitions"])$eg -.=" PARTITIONS ".(+$Zf["partitions"]);}}elseif(preg_match("~partitioned~",$S["Create_options"]))$eg -.="\nREMOVE PARTITIONING";}$Re='Table has been altered.';if($a==""){cookie("adminer_engine",$K["Engine"]);$Re='Table has been created.';}$C=trim($K["name"]);queries_redirect(ME.(support("table")?"table=":"select=").urlencode($C),$Re,alter_table($a,$C,(JUSH=="sqlite"&&($Vi||$cd)?$sa:$n),$cd,($K["Comment"]!=$S["Comment"]?$K["Comment"]:null),($K["Engine"]&&$K["Engine"]!=$S["Engine"]?$K["Engine"]:""),($K["Collation"]&&$K["Collation"]!=$S["Collation"]?$K["Collation"]:""),($K["Auto_increment"]!=""?number($K["Auto_increment"]):""),$eg));}}page_header(($a!=""?'Alter table':'Create table'),$l,array("table"=>$a),h($a));if(!$_POST){$Ii=driver()->types();$K=array("Engine"=>$_COOKIE["adminer_engine"],"fields"=>array(array("field"=>"","type"=>(isset($Ii["int"])?"int":(isset($Ii["integer"])?"integer":"")),"on_update"=>"")),"partition_names"=>array(""),);if($a!=""){$K=$S;$K["name"]=$a;$K["fields"]=array();if(!$_GET["auto_increment"])$K["Auto_increment"]="";foreach($Of -as$m){$m["generated"]=$m["generated"]?:(isset($m["default"])?"DEFAULT":"");$K["fields"][]=$m;}if(support("partitioning")){$K+=get_partitions_info($a);$K["partition_names"][]="";$K["partition_values"][]="";}}}$hb=collations();if(is_array(reset($hb)))$hb=call_user_func_array('array_merge',array_values($hb));$sc=driver()->engines();foreach($sc -as$rc){if(!strcasecmp($rc,$K["Engine"])){$K["Engine"]=$rc;break;}}echo' +as$x=>$X){if(!$Z)$K[$x]=null;$n[$x]=array("field"=>$x,"null"=>($x!=driver()->primary),"auto_increment"=>($x==driver()->primary));}}}edit_form($a,$n,$K,$Zi,$l);}elseif(isset($_GET["create"])){$a=$_GET["create"];$gg=array();foreach(array('HASH','LINEAR HASH','KEY','LINEAR KEY','RANGE','LIST')as$x)$gg[$x]=$x;$Qg=referencable_primary($a);$hd=array();foreach($Qg +as$di=>$m)$hd[str_replace("`","``",$di)."`".str_replace("`","``",$m["field"])]=$di;$Sf=array();$S=array();if($a!=""){$Sf=fields($a);$S=table_status1($a);if(count($S)<2)$l='No tables.';}$K=$_POST;$K["fields"]=(array)$K["fields"];if($K["auto_increment_col"])$K["fields"][$K["auto_increment_col"]]["auto_increment"]=true;if($_POST)save_settings(array("comments"=>$_POST["comments"],"defaults"=>$_POST["defaults"]));if($_POST&&!process_fields($K["fields"])&&!$l){if($_POST["drop"])queries_redirect(substr(ME,0,-1),'Table has been dropped.',drop_tables(array($a)));else{$n=array();$sa=array();$dj=false;$fd=array();$Rf=reset($Sf);$qa=" FIRST";foreach($K["fields"]as$x=>$m){$p=$hd[$m["type"]];$Oi=($p!==null?$Qg[$p]:$m);if($m["field"]!=""){if(!$m["generated"])$m["default"]=null;$Fg=process_field($m,$Oi);$sa[]=array($m["orig"],$Fg,$qa);if(!$Rf||$Fg!==process_field($Rf,$Rf)){$n[]=array($m["orig"],$Fg,$qa);if($m["orig"]!=""||$qa)$dj=true;}if($p!==null)$fd[idf_escape($m["field"])]=($a!=""&&JUSH!="sqlite"?"ADD":" ").format_foreign_key(array('table'=>$hd[$m["type"]],'source'=>array($m["field"]),'target'=>array($Oi["field"]),'on_delete'=>$m["on_delete"],));$qa=" AFTER ".idf_escape($m["field"]);}elseif($m["orig"]!=""){$dj=true;$n[]=array($m["orig"]);}if($m["orig"]!=""){$Rf=next($Sf);if(!$Rf)$qa="";}}$ig="";if(support("partitioning")){if(isset($gg[$K["partition_by"]])){$dg=array();foreach($K +as$x=>$X){if(preg_match('~^partition~',$x))$dg[$x]=$X;}foreach($dg["partition_names"]as$x=>$C){if($C==""){unset($dg["partition_names"][$x]);unset($dg["partition_values"][$x]);}}if($dg!=get_partitions_info($a)){$jg=array();if($dg["partition_by"]=='RANGE'||$dg["partition_by"]=='LIST'){foreach($dg["partition_names"]as$x=>$C){$Y=$dg["partition_values"][$x];$jg[]="\n PARTITION ".idf_escape($C)." VALUES ".($dg["partition_by"]=='RANGE'?"LESS THAN":"IN").($Y!=""?" ($Y)":" MAXVALUE");}}$ig +.="\nPARTITION BY $dg[partition_by]($dg[partition])";if($jg)$ig +.=" (".implode(",",$jg)."\n)";elseif($dg["partitions"])$ig +.=" PARTITIONS ".(+$dg["partitions"]);}}elseif(preg_match("~partitioned~",$S["Create_options"]))$ig +.="\nREMOVE PARTITIONING";}$Ve='Table has been altered.';if($a==""){cookie("adminer_engine",$K["Engine"]);$Ve='Table has been created.';}$C=trim($K["name"]);queries_redirect(ME.(support("table")?"table=":"select=").urlencode($C),$Ve,alter_table($a,$C,(JUSH=="sqlite"&&($dj||$fd)?$sa:$n),$fd,($K["Comment"]!=$S["Comment"]?$K["Comment"]:null),($K["Engine"]&&$K["Engine"]!=$S["Engine"]?$K["Engine"]:""),($K["Collation"]&&$K["Collation"]!=$S["Collation"]?$K["Collation"]:""),($K["Auto_increment"]!=""?number($K["Auto_increment"]):""),$ig));}}page_header(($a!=""?'Alter table':'Create table'),$l,array("table"=>$a),h($a));if(!$_POST){$Qi=driver()->types();$K=array("Engine"=>$_COOKIE["adminer_engine"],"fields"=>array(array("field"=>"","type"=>(isset($Qi["int"])?"int":(isset($Qi["integer"])?"integer":"")),"on_update"=>"")),"partition_names"=>array(""),);if($a!=""){$K=$S;$K["name"]=$a;$K["fields"]=array();if(!$_GET["auto_increment"])$K["Auto_increment"]="";foreach($Sf +as$m){$m["generated"]=$m["generated"]?:(isset($m["default"])?"DEFAULT":"");$K["fields"][]=$m;}if(support("partitioning")){$K+=get_partitions_info($a);$K["partition_names"][]="";$K["partition_values"][]="";}}}$hb=collations();if(is_array(reset($hb)))$hb=call_user_func_array('array_merge',array_values($hb));$vc=driver()->engines();foreach($vc +as$uc){if(!strcasecmp($uc,$K["Engine"])){$K["Engine"]=$uc;break;}}echo'

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

    \n","\n";edit_fields($K["fields"],$hb,"TABLE",$ed);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");$ob=($_POST?$_POST["comments"]:get_setting("comments"));echo(support("comment")?checkbox("comments",1,$ob,'Comment',"editingCommentsClick(this, true);","jsonly").' '.(preg_match('~\n~',$K["Comment"])?"":''):''),'

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

    \n","\n";edit_fields($K["fields"],$hb,"TABLE",$hd);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");$ob=($_POST?$_POST["comments"]:get_setting("comments"));echo(support("comment")?checkbox("comments",1,$ob,'Comment',"editingCommentsClick(this, true);","jsonly").' '.(preg_match('~\n~',$K["Comment"])?"":''):''),'

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

    ".html_select("partition_by",array(""=>"")+$cg,$K["partition_by"]).on_help("event.target.value.replace(/./, 'PARTITION BY \$&')",1).script("qsl('select').onchange = partitionByChange;"),"()\n",'Partitions'.": \n","\n","\n";foreach($K["partition_names"]as$x=>$X)echo'','\n\n";}echo +';if($a!="")echo'',confirm(sprintf('Drop %s?',$a));if(support("partitioning")){$hg=preg_match('~RANGE|LIST~',$K["partition_by"]);print_fieldset("partition",'Partition by',$K["partition_by"]);echo"

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

    -';}elseif(isset($_GET["indexes"])){$a=$_GET["indexes"];$Sd=array("PRIMARY","UNIQUE","INDEX");$S=table_status1($a,true);if(preg_match('~MyISAM|M?aria'.(min_version(5.6,'10.0.5')?'|InnoDB':'').'~i',$S["Engine"]))$Sd[]="FULLTEXT";if(preg_match('~MyISAM|M?aria'.(min_version(5.7,'10.2.2')?'|InnoDB':'').'~i',$S["Engine"]))$Sd[]="SPATIAL";$w=indexes($a);$G=array();if(JUSH=="mongo"){$G=$w["_id_"];unset($Sd[0]);unset($w["_id_"]);}$K=$_POST;if($K)save_settings(array("index_options"=>$K["options"]));if($_POST&&!$l&&!$_POST["add"]&&!$_POST["drop_col"]){$b=array();foreach($K["indexes"]as$v){$C=$v["name"];if(in_array($v["type"],$Sd)){$e=array();$ze=array();$Tb=array();$O=array();ksort($v["columns"]);foreach($v["columns"]as$x=>$d){if($d!=""){$y=idx($v["lengths"],$x);$Sb=idx($v["descs"],$x);$O[]=idf_escape($d).($y?"(".(+$y).")":"").($Sb?" DESC":"");$e[]=$d;$ze[]=($y?:null);$Tb[]=$Sb;}}$Ec=$w[$C];if($Ec){ksort($Ec["columns"]);ksort($Ec["lengths"]);ksort($Ec["descs"]);if($v["type"]==$Ec["type"]&&array_values($Ec["columns"])===$e&&(!$Ec["lengths"]||array_values($Ec["lengths"])===$ze)&&array_values($Ec["descs"])===$Tb){unset($w[$C]);continue;}}if($e)$b[]=array($v["type"],$C,$O);}}foreach($w -as$C=>$Ec)$b[]=array($Ec["type"],$C,"DROP");if(!$b)redirect(ME."table=".urlencode($a));queries_redirect(ME."table=".urlencode($a),'Indexes have been altered.',alter_indexes($a,$b));}page_header('Indexes',$l,array("table"=>$a),h($a));$n=array_keys(fields($a));if($_POST["add"]){foreach($K["indexes"]as$x=>$v){if($v["columns"][count($v["columns"])]!="")$K["indexes"][$x]["columns"][]="";}$v=end($K["indexes"]);if($v["type"]||array_filter($v["columns"],'strlen'))$K["indexes"][]=array("columns"=>array(1=>""));}if(!$K){foreach($w -as$x=>$v){$w[$x]["name"]=$x;$w[$x]["columns"][]="";}$w[]=array("columns"=>array(1=>""));$K["indexes"]=$w;}$ze=(JUSH=="sql"||JUSH=="mssql");$yh=($_POST?$_POST["options"]:get_setting("index_options"));echo' +';}elseif(isset($_GET["indexes"])){$a=$_GET["indexes"];$Vd=array("PRIMARY","UNIQUE","INDEX");$S=table_status1($a,true);if(preg_match('~MyISAM|M?aria'.(min_version(5.6,'10.0.5')?'|InnoDB':'').'~i',$S["Engine"]))$Vd[]="FULLTEXT";if(preg_match('~MyISAM|M?aria'.(min_version(5.7,'10.2.2')?'|InnoDB':'').'~i',$S["Engine"]))$Vd[]="SPATIAL";$w=indexes($a);$G=array();if(JUSH=="mongo"){$G=$w["_id_"];unset($Vd[0]);unset($w["_id_"]);}$K=$_POST;if($K)save_settings(array("index_options"=>$K["options"]));if($_POST&&!$l&&!$_POST["add"]&&!$_POST["drop_col"]){$b=array();foreach($K["indexes"]as$v){$C=$v["name"];if(in_array($v["type"],$Vd)){$e=array();$Ce=array();$Wb=array();$O=array();ksort($v["columns"]);foreach($v["columns"]as$x=>$d){if($d!=""){$y=idx($v["lengths"],$x);$Ub=idx($v["descs"],$x);$O[]=idf_escape($d).($y?"(".(+$y).")":"").($Ub?" DESC":"");$e[]=$d;$Ce[]=($y?:null);$Wb[]=$Ub;}}$Hc=$w[$C];if($Hc){ksort($Hc["columns"]);ksort($Hc["lengths"]);ksort($Hc["descs"]);if($v["type"]==$Hc["type"]&&array_values($Hc["columns"])===$e&&(!$Hc["lengths"]||array_values($Hc["lengths"])===$Ce)&&array_values($Hc["descs"])===$Wb){unset($w[$C]);continue;}}if($e)$b[]=array($v["type"],$C,$O);}}foreach($w +as$C=>$Hc)$b[]=array($Hc["type"],$C,"DROP");if(!$b)redirect(ME."table=".urlencode($a));queries_redirect(ME."table=".urlencode($a),'Indexes have been altered.',alter_indexes($a,$b));}page_header('Indexes',$l,array("table"=>$a),h($a));$n=array_keys(fields($a));if($_POST["add"]){foreach($K["indexes"]as$x=>$v){if($v["columns"][count($v["columns"])]!="")$K["indexes"][$x]["columns"][]="";}$v=end($K["indexes"]);if($v["type"]||array_filter($v["columns"],'strlen'))$K["indexes"][]=array("columns"=>array(1=>""));}if(!$K){foreach($w +as$x=>$v){$w[$x]["name"]=$x;$w[$x]["columns"][]="";}$w[]=array("columns"=>array(1=>""));$K["indexes"]=$w;}$Ce=(JUSH=="sql"||JUSH=="mssql");$Dh=($_POST?$_POST["options"]:get_setting("index_options"));echo'
    ';if($G){echo"
    Index Type -','Column'.($ze?" (".'length'.")":"");if($ze||support("descidx"))echo -checkbox("options",1,$yh,'Options',"indexOptionsShow(this.checked)","jsonly")."\n";echo'Name +','Columns'.($Ce?" (".'length'.")":"");if($Ce||support("descidx"))echo +checkbox("options",1,$Dh,'Options',"indexOptionsShow(this.checked)","jsonly")."\n";echo'Name
    PRIMARY";foreach($G["columns"]as$x=>$d)echo -select_input(" disabled",$n,$d)," ";echo"\n";}$ke=1;foreach($K["indexes"]as$v){if(!$_POST["drop_col"]||$ke!=key($_POST["drop_col"])){echo"
    ".html_select("indexes[$ke][type]",array(-1=>"")+$Sd,$v["type"],($ke==count($K["indexes"])?"indexesAddRow.call(this);":""),"label-type"),"";ksort($v["columns"]);$s=1;foreach($v["columns"]as$x=>$d){echo"".select_input(" name='indexes[$ke][columns][$s]' title='".'Column'."'",($n?array_combine($n,$n):$n),$d,"partial(".($s==count($v["columns"])?"indexesAddColumn":"indexesChangeColumn").", '".js_escape(JUSH=="sql"?"":$_GET["indexes"]."_")."')"),"",($ze?"":""),(support("descidx")?checkbox("indexes[$ke][descs][$s]",1,idx($v["descs"],$x),'descending'):"")," ";$s++;}echo"\n","".icon("cross","drop_col[$ke]","x",'Remove').script("qsl('button').onclick = partial(editingRemoveRow, 'indexes\$1[type]');");}$ke++;}echo'
    +select_input(" disabled",$n,$d)," ";echo"\n";}$ne=1;foreach($K["indexes"]as$v){if(!$_POST["drop_col"]||$ne!=key($_POST["drop_col"])){echo"".html_select("indexes[$ne][type]",array(-1=>"")+$Vd,$v["type"],($ne==count($K["indexes"])?"indexesAddRow.call(this);":""),"label-type"),"";ksort($v["columns"]);$s=1;foreach($v["columns"]as$x=>$d){echo"".select_input(" name='indexes[$ne][columns][$s]' title='".'Column'."'",($n?array_combine($n,$n):$n),$d,"partial(".($s==count($v["columns"])?"indexesAddColumn":"indexesChangeColumn").", '".js_escape(JUSH=="sql"?"":$_GET["indexes"]."_")."')"),"",($Ce?"":""),(support("descidx")?checkbox("indexes[$ne][descs][$s]",1,idx($v["descs"],$x),'descending'):"")," ";$s++;}echo"\n","".icon("cross","drop_col[$ne]","x",'Remove').script("qsl('button').onclick = partial(editingRemoveRow, 'indexes\$1[type]');");}$ne++;}echo'

    ',input_token(),'

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

    ',($_POST["add"]||strpos($C,"\n")?'
    ':'')."\n".($hb?html_select("collation",array(""=>"(".'collation'.")")+$hb,$K["collation"]).doc_link(array('sql'=>"charset-charsets.html",'mariadb'=>"supported-character-sets-and-collations/",'mssql'=>"relational-databases/system-functions/sys-fn-helpcollations-transact-sql",)):""),' @@ -1521,59 +1538,61 @@ redirect($_);}}page_header($_GET["ns"]!=""?'Alter schema':'Create schema',$l);if ';if($_GET["ns"]!="")echo"".confirm(sprintf('Drop %s?',$_GET["ns"]))."\n";echo input_token(),'

    -';}elseif(isset($_GET["call"])){$ba=($_GET["name"]?:$_GET["call"]);page_header('Call'.": ".h($ba),$l);$Zg=routine($_GET["call"],(isset($_GET["callf"])?"FUNCTION":"PROCEDURE"));$Od=array();$Tf=array();foreach($Zg["fields"]as$s=>$m){if(substr($m["inout"],-3)=="OUT")$Tf[$s]="@".idf_escape($m["field"])." AS ".idf_escape($m["field"]);if(!$m["inout"]||substr($m["inout"],0,2)=="IN")$Od[]=$s;}if(!$l&&$_POST){$Ra=array();foreach($Zg["fields"]as$x=>$m){$X="";if(in_array($x,$Od)){$X=process_input($m);if($X===false)$X="''";if(isset($Tf[$x]))connection()->query("SET @".idf_escape($m["field"])." = $X");}$Ra[]=(isset($Tf[$x])?"@".idf_escape($m["field"]):$X);}$H=(isset($_GET["callf"])?"SELECT":"CALL")." ".table($ba)."(".implode(", ",$Ra).")";$Lh=microtime(true);$I=connection()->multi_query($H);$oa=connection()->affected_rows;echo -adminer()->selectQuery($H,$Lh,!$I);if(!$I)echo"

    ".error()."\n";else{$g=connect(adminer()->credentials());if($g)$g->select_db(DB);do{$I=connection()->store_result();if(is_object($I))print_select_result($I,$g);else -echo"

    ".lang(array('Routine has been called, %d row affected.','Routine has been called, %d rows affected.'),$oa)." ".@date("H:i:s")."\n";}while(connection()->next_result());if($Tf)print_select_result(connection()->query("SELECT ".implode(", ",$Tf)));}}echo' +';}elseif(isset($_GET["call"])){$ba=($_GET["name"]?:$_GET["call"]);page_header('Call'.": ".h($ba),$l);$eh=routine($_GET["call"],(isset($_GET["callf"])?"FUNCTION":"PROCEDURE"));$Rd=array();$Xf=array();foreach($eh["fields"]as$s=>$m){if(substr($m["inout"],-3)=="OUT")$Xf[$s]="@".idf_escape($m["field"])." AS ".idf_escape($m["field"]);if(!$m["inout"]||substr($m["inout"],0,2)=="IN")$Rd[]=$s;}if(!$l&&$_POST){$Ra=array();foreach($eh["fields"]as$x=>$m){$X="";if(in_array($x,$Rd)){$X=process_input($m);if($X===false)$X="''";if(isset($Xf[$x]))connection()->query("SET @".idf_escape($m["field"])." = $X");}$Ra[]=(isset($Xf[$x])?"@".idf_escape($m["field"]):$X);}$H=(isset($_GET["callf"])?"SELECT":"CALL")." ".table($ba)."(".implode(", ",$Ra).")";$Rh=microtime(true);$I=connection()->multi_query($H);$oa=connection()->affected_rows;echo +adminer()->selectQuery($H,$Rh,!$I);if(!$I)echo"

    ".error()."\n";else{$g=connect();if($g)$g->select_db(DB);do{$I=connection()->store_result();if(is_object($I))print_select_result($I,$g);else +echo"

    ".lang_format(array('Routine has been called, %d row affected.','Routine has been called, %d rows affected.'),$oa)." ".@date("H:i:s")."\n";}while(connection()->next_result());if($Xf)print_select_result(connection()->query("SELECT ".implode(", ",$Xf)));}}echo'

    -';if($Od){echo"\n";foreach($Od -as$x){$m=$Zg["fields"][$x];$C=$m["field"];echo"
    ".adminer()->fieldName($m);$Y=idx($_POST["fields"],$C);if($Y!=""){if($m["type"]=="set")$Y=implode(",",$Y);}input($m,$Y,idx($_POST["function"],$C,""));echo"\n";}echo"
    \n";}echo'

    +';if($Rd){echo"\n";foreach($Rd +as$x){$m=$eh["fields"][$x];$C=$m["field"];echo"
    ".adminer()->fieldName($m);$Y=idx($_POST["fields"],$C);if($Y!=""){if($m["type"]=="set")$Y=implode(",",$Y);}input($m,$Y,idx($_POST["function"],$C,""));echo"\n";}echo"
    \n";}echo'

    ',input_token(),'

     ';function
    -pre_tr($dh){return
    -preg_replace('~^~m','',preg_replace('~\|~','',preg_replace('~\|$~m',"",rtrim($dh))));}$R='(\+--[-+]+\+\n)';$K='(\| .* \|\n)';echo
    -preg_replace_callback("~^$R?$K$R?($K*)$R?~m",function($B){$Vc=pre_tr($B[2]);return"\n".($B[1]?"$Vc\n":$Vc).pre_tr($B[4])."\n
    ";},preg_replace('~(\n( -|mysql)> )(.+)~',"\\1\\3",preg_replace('~(.+)\n---+\n~',"\\1\n",h($Zg['comment']))));echo'
    -';}elseif(isset($_GET["foreign"])){$a=$_GET["foreign"];$C=$_GET["name"];$K=$_POST;if($_POST&&!$l&&!$_POST["add"]&&!$_POST["change"]&&!$_POST["change-js"]){if(!$_POST["drop"]){$K["source"]=array_filter($K["source"],'strlen');ksort($K["source"]);$fi=array();foreach($K["source"]as$x=>$X)$fi[$x]=$K["target"][$x];$K["target"]=$fi;}if(JUSH=="sqlite")$I=recreate_table($a,$a,array(),array(),array(" $C"=>($K["drop"]?"":" ".format_foreign_key($K))));else{$b="ALTER TABLE ".table($a);$I=($C==""||queries("$b DROP ".(JUSH=="sql"?"FOREIGN KEY ":"CONSTRAINT ").idf_escape($C)));if(!$K["drop"])$I=queries("$b ADD".format_foreign_key($K));}queries_redirect(ME."table=".urlencode($a),($K["drop"]?'Foreign key has been dropped.':($C!=""?'Foreign key has been altered.':'Foreign key has been created.')),$I);if(!$K["drop"])$l="$l
    ".'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',$l,array("table"=>$a),h($a));if($_POST){ksort($K["source"]);if($_POST["add"])$K["source"][]="";elseif($_POST["change"]||$_POST["change-js"])$K["target"]=array();}elseif($C!=""){$ed=foreign_keys($a);$K=$ed[$C];$K["source"][]="";}else{$K["table"]=$a;$K["source"]=array("");}echo' +pre_tr($ih){return +preg_replace('~^~m','',preg_replace('~\|~','',preg_replace('~\|$~m',"",rtrim($ih))));}$R='(\+--[-+]+\+\n)';$K='(\| .* \|\n)';echo +preg_replace_callback("~^$R?$K$R?($K*)$R?~m",function($B){$Yc=pre_tr($B[2]);return"\n".($B[1]?"$Yc\n":$Yc).pre_tr($B[4])."\n
    ";},preg_replace('~(\n( -|mysql)> )(.+)~',"\\1\\3",preg_replace('~(.+)\n---+\n~',"\\1\n",h($eh['comment']))));echo' +';}elseif(isset($_GET["foreign"])){$a=$_GET["foreign"];$C=$_GET["name"];$K=$_POST;if($_POST&&!$l&&!$_POST["add"]&&!$_POST["change"]&&!$_POST["change-js"]){if(!$_POST["drop"]){$K["source"]=array_filter($K["source"],'strlen');ksort($K["source"]);$mi=array();foreach($K["source"]as$x=>$X)$mi[$x]=$K["target"][$x];$K["target"]=$mi;}if(JUSH=="sqlite")$I=recreate_table($a,$a,array(),array(),array(" $C"=>($K["drop"]?"":" ".format_foreign_key($K))));else{$b="ALTER TABLE ".table($a);$I=($C==""||queries("$b DROP ".(JUSH=="sql"?"FOREIGN KEY ":"CONSTRAINT ").idf_escape($C)));if(!$K["drop"])$I=queries("$b ADD".format_foreign_key($K));}queries_redirect(ME."table=".urlencode($a),($K["drop"]?'Foreign key has been dropped.':($C!=""?'Foreign key has been altered.':'Foreign key has been created.')),$I);if(!$K["drop"])$l='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',$l,array("table"=>$a),h($a));if($_POST){ksort($K["source"]);if($_POST["add"])$K["source"][]="";elseif($_POST["change"]||$_POST["change-js"])$K["target"]=array();}elseif($C!=""){$hd=foreign_keys($a);$K=$hd[$C];$K["source"][]="";}else{$K["table"]=$a;$K["source"]=array("");}echo'
    -';$Ch=array_keys(fields($a));if($K["db"]!="")connection()->select_db($K["db"]);if($K["ns"]!=""){$Pf=get_schema();set_schema($K["ns"]);}$Kg=array_keys(array_filter(table_status('',true),'Adminer\fk_support'));$fi=array_keys(fields(in_array($K["table"],$Kg)?$K["table"]:reset($Kg)));$_f="this.form['change-js'].value = '1'; this.form.submit();";echo"

    ".'Target table'.": ".html_select("table",$Kg,$K["table"],$_f)."\n";if(support("scheme")){$gh=array_filter(adminer()->schemas(),function($fh){return!preg_match('~^information_schema$~i',$fh);});echo'Schema'.": ".html_select("ns",$gh,$K["ns"]!=""?$K["ns"]:$_GET["ns"],$_f);if($K["ns"]!="")set_schema($Pf);}elseif(JUSH!="sqlite"){$Mb=array();foreach(adminer()->databases()as$j){if(!information_schema($j))$Mb[]=$j;}echo'DB'.": ".html_select("db",$Mb,$K["db"]!=""?$K["db"]:$_GET["db"],$_f);}echo +';$Ih=array_keys(fields($a));if($K["db"]!="")connection()->select_db($K["db"]);if($K["ns"]!=""){$Tf=get_schema();set_schema($K["ns"]);}$Pg=array_keys(array_filter(table_status('',true),'Adminer\fk_support'));$mi=array_keys(fields(in_array($K["table"],$Pg)?$K["table"]:reset($Pg)));$Df="this.form['change-js'].value = '1'; this.form.submit();";echo"

    \n";if(support("scheme")){$lh=array_filter(adminer()->schemas(),function($kh){return!preg_match('~^information_schema$~i',$kh);});echo"";if($K["ns"]!="")set_schema($Tf);}elseif(JUSH!="sqlite"){$Nb=array();foreach(adminer()->databases()as$j){if(!information_schema($j))$Nb[]=$j;}echo"";}echo input_hidden("change-js"),'

    -';$ke=0;foreach($K["source"]as$x=>$X){echo"","
    SourceTarget
    ".html_select("source[".(+$x)."]",array(-1=>"")+$Ch,$X,($ke==count($K["source"])-1?"foreignAddRow.call(this);":""),"label-source"),"".html_select("target[".(+$x)."]",$fi,idx($K["target"],$x),"","label-target");$ke++;}echo'
    +';$ne=0;foreach($K["source"]as$x=>$X){echo"","".html_select("source[".(+$x)."]",array(-1=>"")+$Ih,$X,($ne==count($K["source"])-1?"foreignAddRow.call(this);":""),"label-source"),"".html_select("target[".(+$x)."]",$mi,idx($K["target"],$x),"","label-target");$ne++;}echo'

    -ON DELETE: ',html_select("on_delete",array(-1=>"")+explode("|",driver()->onActions),$K["on_delete"]),' ON UPDATE: ',html_select("on_update",array(-1=>"")+explode("|",driver()->onActions),$K["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",)),'

    + + +',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($C!="")echo'',confirm(sprintf('Drop %s?',$C));echo input_token(),'

    -';}elseif(isset($_GET["view"])){$a=$_GET["view"];$K=$_POST;$Qf="VIEW";if(JUSH=="pgsql"&&$a!=""){$P=table_status1($a);$Qf=strtoupper($P["Engine"]);}if($_POST&&!$l){$C=trim($K["name"]);$wa=" AS\n$K[select]";$A=ME."table=".urlencode($C);$Re='View has been altered.';$U=($_POST["materialized"]?"MATERIALIZED VIEW":"VIEW");if(!$_POST["drop"]&&$a==$C&&JUSH!="sqlite"&&$U=="VIEW"&&$Qf=="VIEW")query_redirect((JUSH=="mssql"?"ALTER":"CREATE OR REPLACE")." VIEW ".table($C).$wa,$A,$Re);else{$hi=$C."_adminer_".uniqid();drop_create("DROP $Qf ".table($a),"CREATE $U ".table($C).$wa,"DROP $U ".table($C),"CREATE $U ".table($hi).$wa,"DROP $U ".table($hi),($_POST["drop"]?substr(ME,0,-1):$A),'View has been dropped.',$Re,'View has been created.',$a,$C);}}if(!$_POST&&$a!=""){$K=view($a);$K["name"]=$a;$K["materialized"]=($Qf!="VIEW");if(!$l)$l=error();}page_header(($a!=""?'Alter view':'Create view'),$l,array("table"=>$a),h($a));echo' +';}elseif(isset($_GET["view"])){$a=$_GET["view"];$K=$_POST;$Uf="VIEW";if(JUSH=="pgsql"&&$a!=""){$P=table_status1($a);$Uf=strtoupper($P["Engine"]);}if($_POST&&!$l){$C=trim($K["name"]);$wa=" AS\n$K[select]";$A=ME."table=".urlencode($C);$Ve='View has been altered.';$U=($_POST["materialized"]?"MATERIALIZED VIEW":"VIEW");if(!$_POST["drop"]&&$a==$C&&JUSH!="sqlite"&&$U=="VIEW"&&$Uf=="VIEW")query_redirect((JUSH=="mssql"?"ALTER":"CREATE OR REPLACE")." VIEW ".table($C).$wa,$A,$Ve);else{$oi=$C."_adminer_".uniqid();drop_create("DROP $Uf ".table($a),"CREATE $U ".table($C).$wa,"DROP $U ".table($C),"CREATE $U ".table($oi).$wa,"DROP $U ".table($oi),($_POST["drop"]?substr(ME,0,-1):$A),'View has been dropped.',$Ve,'View has been created.',$a,$C);}}if(!$_POST&&$a!=""){$K=view($a);$K["name"]=$a;$K["materialized"]=($Uf!="VIEW");if(!$l)$l=error();}page_header(($a!=""?'Alter view':'Create view'),$l,array("table"=>$a),h($a));echo'

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

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

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

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

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

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

    -';}elseif(isset($_GET["procedure"])){$ba=($_GET["name"]?:$_GET["procedure"]);$Zg=(isset($_GET["function"])?"FUNCTION":"PROCEDURE");$K=$_POST;$K["fields"]=(array)$K["fields"];if($_POST&&!process_fields($K["fields"])&&!$l){$Mf=routine($_GET["procedure"],$Zg);$hi="$K[name]_adminer_".uniqid();foreach($K["fields"]as$x=>$m){if($m["field"]=="")unset($K["fields"][$x]);}drop_create("DROP $Zg ".routine_id($ba,$Mf),create_routine($Zg,$K),"DROP $Zg ".routine_id($K["name"],$K),create_routine($Zg,array("name"=>$hi)+$K),"DROP $Zg ".routine_id($hi,$K),substr(ME,0,-1),'Routine has been dropped.','Routine has been altered.','Routine has been created.',$ba,$K["name"]);}page_header(($ba!=""?(isset($_GET["function"])?'Alter function':'Alter procedure').": ".h($ba):(isset($_GET["function"])?'Create function':'Create procedure')),$l);if(!$_POST){if($ba=="")$K["language"]="sql";else{$K=routine($_GET["procedure"],$Zg);$K["name"]=$ba;}}$hb=get_vals("SHOW CHARACTER SET");sort($hb);$ah=routine_languages();echo($hb?"".optionlist($hb)."":""),' +';}elseif(isset($_GET["procedure"])){$ba=($_GET["name"]?:$_GET["procedure"]);$eh=(isset($_GET["function"])?"FUNCTION":"PROCEDURE");$K=$_POST;$K["fields"]=(array)$K["fields"];if($_POST&&!process_fields($K["fields"])&&!$l){$Qf=routine($_GET["procedure"],$eh);$oi="$K[name]_adminer_".uniqid();foreach($K["fields"]as$x=>$m){if($m["field"]=="")unset($K["fields"][$x]);}drop_create("DROP $eh ".routine_id($ba,$Qf),create_routine($eh,$K),"DROP $eh ".routine_id($K["name"],$K),create_routine($eh,array("name"=>$oi)+$K),"DROP $eh ".routine_id($oi,$K),substr(ME,0,-1),'Routine has been dropped.','Routine has been altered.','Routine has been created.',$ba,$K["name"]);}page_header(($ba!=""?(isset($_GET["function"])?'Alter function':'Alter procedure').": ".h($ba):(isset($_GET["function"])?'Create function':'Create procedure')),$l);if(!$_POST){if($ba=="")$K["language"]="sql";else{$K=routine($_GET["procedure"],$eh);$K["name"]=$ba;}}$hb=get_vals("SHOW CHARACTER SET");sort($hb);$fh=routine_languages();echo($hb?"".optionlist($hb)."":""),'

    Name: -',($ah?'Language'.": ".html_select("language",$ah,$K["language"])."\n":""),' +',($fh?"\n":""),'

    -';edit_fields($K["fields"],$hb,$Zg);if(isset($_GET["function"])){echo"
    ".'Return type';edit_type("returns",$K["returns"],$hb,array(),(JUSH=="pgsql"?array("void","trigger"):array()));}echo'
    +';edit_fields($K["fields"],$hb,$eh);if(isset($_GET["function"])){echo"".'Return type';edit_type("returns",$K["returns"],$hb,array(),(JUSH=="pgsql"?array("void","trigger"):array()));}echo' ',script("editFields();"),'

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

    @@ -1590,7 +1609,7 @@ input_token(),'

    query_redirect("CREATE TYPE ".idf_escape(trim($K["name"]))." $K[as]",$_,'Type has been created.');}page_header($ea!=""?'Alter type'.": ".h($ea):'Create type',$l);if(!$K)$K["as"]="AS ";echo'

    -';if($ea!=""){$Ii=driver()->types();$wc=type_values($Ii[$ea]);if($wc)echo"ENUM (".h($wc).")\n

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

    \n";}echo +';if($ea!=""){$Qi=driver()->types();$zc=type_values($Qi[$ea]);if($zc)echo"ENUM (".h($zc).")\n

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

    \n";}echo input_token(),'

    ';}elseif(isset($_GET["check"])){$a=$_GET["check"];$C=$_GET["name"];$K=$_POST;if($K&&!$l){if(JUSH=="sqlite")$I=recreate_table($a,$a,array(),array(),array(),"",array(),"$C",($K["drop"]?"":$K["clause"]));else{$I=($C==""||queries("ALTER TABLE ".table($a)." DROP CONSTRAINT ".idf_escape($C)));if(!$K["drop"])$I=queries("ALTER TABLE ".table($a)." ADD".($K["name"]!=""?" CONSTRAINT ".idf_escape($K["name"]):"")." CHECK ($K[clause])");}queries_redirect(ME."table=".urlencode($a),($K["drop"]?'Check has been dropped.':($C!=""?'Check has been altered.':'Check has been created.')),$I);}page_header(($C!=""?'Alter check'.": ".h($C):'Create check'),$l,array("table"=>$a));if(!$K){$Za=driver()->checkConstraints($a);$K=array("name"=>$C,"clause"=>$Za[$C]);}echo'
    @@ -1598,33 +1617,33 @@ input_token(),'
    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",$K["clause"]);echo'

    ';if($C!="")echo'',confirm(sprintf('Drop %s?',$C));echo input_token(),' -';}elseif(isset($_GET["trigger"])){$a=$_GET["trigger"];$C="$_GET[name]";$Ei=trigger_options();$K=(array)trigger($C,$a)+array("Trigger"=>$a."_bi");if($_POST){if(!$l&&in_array($_POST["Timing"],$Ei["Timing"])&&in_array($_POST["Event"],$Ei["Event"])&&in_array($_POST["Type"],$Ei["Type"])){$xf=" ON ".table($a);$bc="DROP TRIGGER ".idf_escape($C).(JUSH=="pgsql"?$xf:"");$A=ME."table=".urlencode($a);if($_POST["drop"])query_redirect($bc,$A,'Trigger has been dropped.');else{if($C!="")queries($bc);queries_redirect($A,($C!=""?'Trigger has been altered.':'Trigger has been created.'),queries(create_trigger($xf,$_POST)));if($C!="")queries(create_trigger($xf,$K+array("Type"=>reset($Ei["Type"]))));}}$K=$_POST;}page_header(($C!=""?'Alter trigger'.": ".h($C):'Create trigger'),$l,array("table"=>$a));echo' +';}elseif(isset($_GET["trigger"])){$a=$_GET["trigger"];$C="$_GET[name]";$Mi=trigger_options();$K=(array)trigger($C,$a)+array("Trigger"=>$a."_bi");if($_POST){if(!$l&&in_array($_POST["Timing"],$Mi["Timing"])&&in_array($_POST["Event"],$Mi["Event"])&&in_array($_POST["Type"],$Mi["Type"])){$Af=" ON ".table($a);$ec="DROP TRIGGER ".idf_escape($C).(JUSH=="pgsql"?$Af:"");$A=ME."table=".urlencode($a);if($_POST["drop"])query_redirect($ec,$A,'Trigger has been dropped.');else{if($C!="")queries($ec);queries_redirect($A,($C!=""?'Trigger has been altered.':'Trigger has been created.'),queries(create_trigger($Af,$_POST)));if($C!="")queries(create_trigger($Af,$K+array("Type"=>reset($Mi["Type"]))));}}$K=$_POST;}page_header(($C!=""?'Alter trigger'.": ".h($C):'Create trigger'),$l,array("table"=>$a));echo'

    -
    Time',html_select("Timing",$Ei["Timing"],$K["Timing"],"triggerChange(/^".preg_quote($a,"/")."_[ba][iud]$/, '".js_escape($a)."', this.form);"),'
    Event',html_select("Event",$Ei["Event"],$K["Event"],"this.form['Timing'].onchange();"),(in_array("UPDATE OF",$Ei["Event"])?" ":""),'
    Type',html_select("Type",$Ei["Type"],$K["Type"]),'
    +Time',html_select("Timing",$Mi["Timing"],$K["Timing"],"triggerChange(/^".preg_quote($a,"/")."_[ba][iud]$/, '".js_escape($a)."', this.form);"),'Event',html_select("Event",$Mi["Event"],$K["Event"],"this.form['Timing'].onchange();"),(in_array("UPDATE OF",$Mi["Event"])?" ":""),'Type',html_select("Type",$Mi["Type"],$K["Type"]),'

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

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

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

    -';}elseif(isset($_GET["user"])){$fa=$_GET["user"];$zg=array(""=>array("All privileges"=>""));foreach(get_rows("SHOW PRIVILEGES")as$K){foreach(explode(",",($K["Privilege"]=="Grant option"?"":$K["Context"]))as$xb)$zg[$xb][$K["Privilege"]]=$K["Comment"];}$zg["Server Admin"]+=$zg["File access on server"];$zg["Databases"]["Create routine"]=$zg["Procedures"]["Create routine"];unset($zg["Procedures"]["Create routine"]);$zg["Columns"]=array();foreach(array("Select","Insert","Update","References")as$X)$zg["Columns"][$X]=$zg["Tables"][$X];unset($zg["Server Admin"]["Usage"]);foreach($zg["Tables"]as$x=>$X)unset($zg["Databases"][$x]);$gf=array();if($_POST){foreach($_POST["objects"]as$x=>$X)$gf[$X]=(array)$gf[$X]+idx($_POST["grants"],$x,array());}$od=array();$vf="";if(isset($_GET["host"])&&($I=connection()->query("SHOW GRANTS FOR ".q($fa)."@".q($_GET["host"])))){while($K=$I->fetch_row()){if(preg_match('~GRANT (.*) ON (.*) TO ~',$K[0],$B)&&preg_match_all('~ *([^(,]*[^ ,(])( *\([^)]+\))?~',$B[1],$He,PREG_SET_ORDER)){foreach($He -as$X){if($X[1]!="USAGE")$od["$B[2]$X[2]"][$X[1]]=true;if(preg_match('~ WITH GRANT OPTION~',$K[0]))$od["$B[2]$X[2]"]["GRANT OPTION"]=true;}}if(preg_match("~ IDENTIFIED BY PASSWORD '([^']+)~",$K[0],$B))$vf=$B[1];}}if($_POST&&!$l){$wf=(isset($_GET["host"])?q($fa)."@".q($_GET["host"]):"''");if($_POST["drop"])query_redirect("DROP USER $wf",ME."privileges=",'User has been dropped.');else{$if=q($_POST["user"])."@".q($_POST["host"]);$gg=$_POST["pass"];if($gg!=''&&!$_POST["hashed"]&&!min_version(8)){$gg=get_val("SELECT PASSWORD(".q($gg).")");$l=!$gg;}$Ab=false;if(!$l){if($wf!=$if){$Ab=queries((min_version(5)?"CREATE USER":"GRANT USAGE ON *.* TO")." $if IDENTIFIED BY ".(min_version(8)?"":"PASSWORD ").q($gg));$l=!$Ab;}elseif($gg!=$vf)queries("SET PASSWORD FOR $if = ".q($gg));}if(!$l){$Wg=array();foreach($gf -as$pf=>$nd){if(isset($_GET["grant"]))$nd=array_filter($nd);$nd=array_keys($nd);if(isset($_GET["grant"]))$Wg=array_diff(array_keys(array_filter($gf[$pf],'strlen')),$nd);elseif($wf==$if){$tf=array_keys((array)$od[$pf]);$Wg=array_diff($tf,$nd);$nd=array_diff($nd,$tf);unset($od[$pf]);}if(preg_match('~^(.+)\s*(\(.*\))?$~U',$pf,$B)&&(!grant("REVOKE",$Wg,$B[2]," ON $B[1] FROM $if")||!grant("GRANT",$nd,$B[2]," ON $B[1] TO $if"))){$l=true;break;}}}if(!$l&&isset($_GET["host"])){if($wf!=$if)queries("DROP USER $wf");elseif(!isset($_GET["grant"])){foreach($od -as$pf=>$Wg){if(preg_match('~^(.+)(\(.*\))?$~U',$pf,$B))grant("REVOKE",array_keys($Wg),$B[2]," ON $B[1] FROM $if");}}}queries_redirect(ME."privileges=",(isset($_GET["host"])?'User has been altered.':'User has been created.'),!$l);if($Ab)connection()->query("DROP USER $if");}}page_header((isset($_GET["host"])?'Username'.": ".h("$fa@$_GET[host]"):'Create user'),$l,array("privileges"=>array('','Privileges')));$K=$_POST;if($K)$od=$gf;else{$K=$_GET+array("host"=>get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)"));$K["pass"]=$vf;if($vf!="")$K["hashed"]=true;$od[(DB==""||$od?"":idf_escape(addcslashes(DB,"%_\\"))).".*"]=array();}echo'
    +';}elseif(isset($_GET["user"])){$fa=$_GET["user"];$Dg=array(""=>array("All privileges"=>""));foreach(get_rows("SHOW PRIVILEGES")as$K){foreach(explode(",",($K["Privilege"]=="Grant option"?"":$K["Context"]))as$xb)$Dg[$xb][$K["Privilege"]]=$K["Comment"];}$Dg["Server Admin"]+=$Dg["File access on server"];$Dg["Databases"]["Create routine"]=$Dg["Procedures"]["Create routine"];unset($Dg["Procedures"]["Create routine"]);$Dg["Columns"]=array();foreach(array("Select","Insert","Update","References")as$X)$Dg["Columns"][$X]=$Dg["Tables"][$X];unset($Dg["Server Admin"]["Usage"]);foreach($Dg["Tables"]as$x=>$X)unset($Dg["Databases"][$x]);$kf=array();if($_POST){foreach($_POST["objects"]as$x=>$X)$kf[$X]=(array)$kf[$X]+idx($_POST["grants"],$x,array());}$rd=array();$zf="";if(isset($_GET["host"])&&($I=connection()->query("SHOW GRANTS FOR ".q($fa)."@".q($_GET["host"])))){while($K=$I->fetch_row()){if(preg_match('~GRANT (.*) ON (.*) TO ~',$K[0],$B)&&preg_match_all('~ *([^(,]*[^ ,(])( *\([^)]+\))?~',$B[1],$Le,PREG_SET_ORDER)){foreach($Le +as$X){if($X[1]!="USAGE")$rd["$B[2]$X[2]"][$X[1]]=true;if(preg_match('~ WITH GRANT OPTION~',$K[0]))$rd["$B[2]$X[2]"]["GRANT OPTION"]=true;}}if(preg_match("~ IDENTIFIED BY PASSWORD '([^']+)~",$K[0],$B))$zf=$B[1];}}if($_POST&&!$l){$_f=(isset($_GET["host"])?q($fa)."@".q($_GET["host"]):"''");if($_POST["drop"])query_redirect("DROP USER $_f",ME."privileges=",'User has been dropped.');else{$mf=q($_POST["user"])."@".q($_POST["host"]);$kg=$_POST["pass"];if($kg!=''&&!$_POST["hashed"]&&!min_version(8)){$kg=get_val("SELECT PASSWORD(".q($kg).")");$l=!$kg;}$Bb=false;if(!$l){if($_f!=$mf){$Bb=queries((min_version(5)?"CREATE USER":"GRANT USAGE ON *.* TO")." $mf IDENTIFIED BY ".(min_version(8)?"":"PASSWORD ").q($kg));$l=!$Bb;}elseif($kg!=$zf)queries("SET PASSWORD FOR $mf = ".q($kg));}if(!$l){$bh=array();foreach($kf +as$tf=>$qd){if(isset($_GET["grant"]))$qd=array_filter($qd);$qd=array_keys($qd);if(isset($_GET["grant"]))$bh=array_diff(array_keys(array_filter($kf[$tf],'strlen')),$qd);elseif($_f==$mf){$xf=array_keys((array)$rd[$tf]);$bh=array_diff($xf,$qd);$qd=array_diff($qd,$xf);unset($rd[$tf]);}if(preg_match('~^(.+)\s*(\(.*\))?$~U',$tf,$B)&&(!grant("REVOKE",$bh,$B[2]," ON $B[1] FROM $mf")||!grant("GRANT",$qd,$B[2]," ON $B[1] TO $mf"))){$l=true;break;}}}if(!$l&&isset($_GET["host"])){if($_f!=$mf)queries("DROP USER $_f");elseif(!isset($_GET["grant"])){foreach($rd +as$tf=>$bh){if(preg_match('~^(.+)(\(.*\))?$~U',$tf,$B))grant("REVOKE",array_keys($bh),$B[2]," ON $B[1] FROM $mf");}}}queries_redirect(ME."privileges=",(isset($_GET["host"])?'User has been altered.':'User has been created.'),!$l);if($Bb)connection()->query("DROP USER $mf");}}page_header((isset($_GET["host"])?'Username'.": ".h("$fa@$_GET[host]"):'Create user'),$l,array("privileges"=>array('','Privileges')));$K=$_POST;if($K)$rd=$kf;else{$K=$_GET+array("host"=>get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)"));$K["pass"]=$zf;if($zf!="")$K["hashed"]=true;$rd[(DB==""||$rd?"":idf_escape(addcslashes(DB,"%_\\"))).".*"]=array();}echo'
    Server
    Username
    Password ',($K["hashed"]?"":script("typePassword(qs('#pass'));")),(min_version(8)?"":checkbox("hashed",1,$K["hashed"],'Hashed',"typePassword(this.form['pass'], this.checked);")),'
    -',"\n","\n";foreach(array(""=>"","Server Admin"=>'Server',"Databases"=>'Database',"Tables"=>'Table',"Columns"=>'Column',"Procedures"=>'Routine',)as$xb=>$Sb){foreach((array)$zg[$xb]as$yg=>$mb){echo"$Sb'.h($yg);$s=0;foreach($od -as$pf=>$nd){$C="'grants[$s][".h(strtoupper($yg))."]'";$Y=$nd[strtoupper($yg)];if($xb=="Server Admin"&&$pf!=(isset($od["*.*"])?"*.*":".*"))echo"
    ".'Privileges'.doc_link(array('sql'=>"grant.html#priv_level"));$s=0;foreach($od -as$pf=>$nd){echo''.($pf!="*.*"?"":input_hidden("objects[$s]","*.*")."*.*");$s++;}echo"
    ";elseif(isset($_GET["grant"]))echo"";else -echo"";$s++;}}}echo"
    \n",'

    +',"\n","\n";foreach(array(""=>"","Server Admin"=>'Server',"Databases"=>'Database',"Tables"=>'Table',"Columns"=>'Column',"Procedures"=>'Routine',)as$xb=>$Ub){foreach((array)$Dg[$xb]as$Cg=>$mb){echo"$Ub'.h($Cg);$s=0;foreach($rd +as$tf=>$qd){$C="'grants[$s][".h(strtoupper($Cg))."]'";$Y=$qd[strtoupper($Cg)];if($xb=="Server Admin"&&$tf!=(isset($rd["*.*"])?"*.*":".*"))echo"
    ".'Privileges'.doc_link(array('sql'=>"grant.html#priv_level"));$s=0;foreach($rd +as$tf=>$qd){echo''.($tf!="*.*"?"":input_hidden("objects[$s]","*.*")."*.*");$s++;}echo"
    ";elseif(isset($_GET["grant"]))echo"";else +echo"";$s++;}}}echo"
    \n",'

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

    -';}elseif(isset($_GET["processlist"])){if(support("kill")){if($_POST&&!$l){$qe=0;foreach((array)$_POST["kill"]as$X){if(kill_process($X))$qe++;}queries_redirect(ME."processlist=",lang(array('%d process has been killed.','%d processes have been killed.'),$qe),$qe||!$_POST["kill"]);}}page_header('Process list',$l);echo' +';}elseif(isset($_GET["processlist"])){if(support("kill")){if($_POST&&!$l){$te=0;foreach((array)$_POST["kill"]as$X){if(kill_process($X))$te++;}queries_redirect(ME."processlist=",lang_format(array('%d process has been killed.','%d processes have been killed.'),$te),$te||!$_POST["kill"]);}}page_header('Process list',$l);echo'
    @@ -1635,43 +1654,43 @@ as$x=>$X)echo"","
    ".((JUSH=="sql"&&$x=="Info"&&preg_match("~Query|Killed~",$K["C

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

    \n";echo input_token(),' -',script("tableCheck();");}elseif(isset($_GET["select"])){$a=$_GET["select"];$S=table_status1($a);$w=indexes($a);$n=fields($a);$ed=column_foreign_keys($a);$rf=$S["Oid"];$na=get_settings("adminer_import");$Xg=array();$e=array();$jh=array();$If=array();$li="";foreach($n -as$x=>$m){$C=adminer()->fieldName($m);$ef=html_entity_decode(strip_tags($C),ENT_QUOTES);if(isset($m["privileges"]["select"])&&$C!=""){$e[$x]=$ef;if(is_shortable($m))$li=adminer()->selectLengthProcess();}if(isset($m["privileges"]["where"])&&$C!="")$jh[$x]=$ef;if(isset($m["privileges"]["order"])&&$C!="")$If[$x]=$ef;$Xg+=$m["privileges"];}list($M,$pd)=adminer()->selectColumnsProcess($e,$w);$M=array_unique($M);$pd=array_unique($pd);$ge=count($pd)selectSearchProcess($n,$w);$Hf=adminer()->selectOrderProcess($n,$w);$z=adminer()->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$Ni=>$K){$wa=convert_field($n[key($K)]);$M=array($wa?:idf_escape(key($K)));$Z[]=where_check($Ni,$n);$J=driver()->select($a,$M,$Z,$M);if($J)echo -first($J->fetch_row());}exit;}$G=$Pi=null;foreach($w -as$v){if($v["type"]=="PRIMARY"){$G=array_flip($v["columns"]);$Pi=($M?$G:array());foreach($Pi -as$x=>$X){if(in_array(idf_escape($x),$M))unset($Pi[$x]);}break;}}if($rf&&!$G){$G=$Pi=array($rf=>0);$w[]=array("type"=>"PRIMARY","columns"=>array($rf));}if($_POST&&!$l){$nj=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$Za=array();foreach($_POST["check"]as$Va)$Za[]=where_check($Va,$n);$nj[]="((".implode(") OR (",$Za)."))";}$nj=($nj?"\nWHERE ".implode(" AND ",$nj):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);adminer()->dumpTable($a,"");$id=($M?implode(", ",$M):"*").convert_fields($e,$n,$M)."\nFROM ".table($a);$rd=($pd&&$ge?"\nGROUP BY ".implode(", ",$pd):"").($Hf?"\nORDER BY ".implode(", ",$Hf):"");$H="SELECT $id$nj$rd";if(is_array($_POST["check"])&&!$G){$Li=array();foreach($_POST["check"]as$X)$Li[]="(SELECT".limit($id,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$n).$rd,1).")";$H=implode(" UNION ALL ",$Li);}adminer()->dumpData($a,"table",$H);adminer()->dumpFooter();exit;}if(!adminer()->selectEmailProcess($Z,$ed)){if($_POST["save"]||$_POST["delete"]){$I=true;$oa=0;$O=array();if(!$_POST["delete"]){foreach($_POST["fields"]as$C=>$X){$X=process_input($n[$C]);if($X!==null&&($_POST["clone"]||$X!==false))$O[idf_escape($C)]=($X!==false?$X:idf_escape($C));}}if($_POST["delete"]||$O){$H=($_POST["clone"]?"INTO ".table($a)." (".implode(", ",array_keys($O)).")\nSELECT ".implode(", ",$O)."\nFROM ".table($a):"");if($_POST["all"]||($G&&is_array($_POST["check"]))||$ge){$I=($_POST["delete"]?driver()->delete($a,$nj):($_POST["clone"]?queries("INSERT $H$nj".driver()->insertReturning($a)):driver()->update($a,$O,$nj)));$oa=connection()->affected_rows;if(is_object($I))$oa+=$I->num_rows;}else{foreach((array)$_POST["check"]as$X){$mj="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$n);$I=($_POST["delete"]?driver()->delete($a,$mj,1):($_POST["clone"]?queries("INSERT".limit1($a,$H,$mj)):driver()->update($a,$O,$mj,1)));if(!$I)break;$oa+=connection()->affected_rows;}}}$Re=lang(array('%d item has been affected.','%d items have been affected.'),$oa);if($_POST["clone"]&&$I&&$oa==1){$ue=last_id($I);if($ue)$Re=sprintf('Item%s has been inserted.'," $ue");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page":""),$Re,$I);if(!$_POST["delete"]){$sg=(array)$_POST["fields"];edit_form($a,array_intersect_key($n,$sg),$sg,!$_POST["clone"],$l);page_footer();exit;}}elseif(!$_POST["import"]){if(!$_POST["val"])$l='Ctrl+click on a value to modify it.';else{$I=true;$oa=0;foreach($_POST["val"]as$Ni=>$K){$O=array();foreach($K -as$x=>$X){$x=bracket_escape($x,true);$O[idf_escape($x)]=(preg_match('~char|text~',$n[$x]["type"])||$X!=""?adminer()->processInput($n[$x],$X):"NULL");}$I=driver()->update($a,$O," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($Ni,$n),($ge||$G?0:1)," ");if(!$I)break;$oa+=connection()->affected_rows;}queries_redirect(remove_from_uri(),lang(array('%d item has been affected.','%d items have been affected.'),$oa),$I);}}elseif(!is_string($Sc=get_file("csv_file",true)))$l=upload_error($Sc);elseif(!preg_match('~~u',$Sc))$l='File must be in UTF-8 encoding.';else{save_settings(array("output"=>$na["output"],"format"=>$_POST["separator"]),"adminer_import");$I=true;$ib=array_keys($n);preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$Sc,$He);$oa=count($He[0]);driver()->begin();$ph=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$L=array();foreach($He[0]as$x=>$X){preg_match_all("~((?>\"[^\"]*\")+|[^$ph]*)$ph~",$X.$ph,$Ie);if(!$x&&!array_diff($Ie[1],$ib)){$ib=$Ie[1];$oa--;}else{$O=array();foreach($Ie[1]as$s=>$fb)$O[idf_escape($ib[$s])]=($fb==""&&$n[$ib[$s]]["null"]?"NULL":q(preg_match('~^".*"$~s',$fb)?str_replace('""','"',substr($fb,1,-1)):$fb));$L[]=$O;}}$I=(!$L||driver()->insertUpdate($a,$L,$G));if($I)driver()->commit();queries_redirect(remove_from_uri("page"),lang(array('%d row has been imported.','%d rows have been imported.'),$oa),$I);driver()->rollback();}}}$Xh=adminer()->tableName($S);if(is_ajax()){page_headers();ob_start();}else -page_header('Select'.": $Xh",$l);$O=null;if(isset($Xg["insert"])||!support("table")){$Zf=array();foreach((array)$_GET["where"]as$X){if(isset($ed[$X["col"]])&&count($ed[$X["col"]])==1&&($X["op"]=="="||(!$X["op"]&&(is_array($X["val"])||!preg_match('~[_%]~',$X["val"])))))$Zf["set"."[".bracket_escape($X["col"])."]"]=$X["val"];}$O=$Zf?"&".http_build_query($Zf):"";}adminer()->selectLinks($S,$O);if(!$e&&support("table"))echo"

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

    \n","
    ";hidden_fields_get();echo(DB!=""?input_hidden("db",DB).(isset($_GET["ns"])?input_hidden("ns",$_GET["ns"]):""):""),input_hidden("select",$a),"
    \n";adminer()->selectColumnsPrint($M,$e);adminer()->selectSearchPrint($Z,$jh,$w);adminer()->selectOrderPrint($Hf,$If,$w);adminer()->selectLimitPrint($z);adminer()->selectLengthPrint($li);adminer()->selectActionPrint($w);echo"
    \n";$E=$_GET["page"];if($E=="last"){$hd=get_val(count_rows($a,$Z,$ge,$pd));$E=floor(max(0,intval($hd)-1)/$z);}$kh=$M;$qd=$pd;if(!$kh){$kh[]="*";$yb=convert_fields($e,$n,$M);if($yb)$kh[]=substr($yb,2);}foreach($M -as$x=>$X){$m=$n[idf_unescape($X)];if($m&&($wa=convert_field($m)))$kh[$x]="$wa AS $X";}if(!$ge&&$Pi){foreach($Pi -as$x=>$X){$kh[]=idf_escape($x);if($qd)$qd[]=idf_escape($x);}}$I=driver()->select($a,$kh,$Z,$qd,$Hf,$z,$E,true);if(!$I)echo"

    ".error()."\n";else{if(JUSH=="mssql"&&$E)$I->seek($z*$E);$pc=array();echo"

    \n";$L=array();while($K=$I->fetch_assoc()){if($E&&JUSH=="oracle")unset($K["RNUM"]);$L[]=$K;}if($_GET["page"]!="last"&&$z&&$pd&&$ge&&JUSH=="sql")$hd=get_val(" SELECT FOUND_ROWS()");if(!$L)echo"

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

    ","",script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});"),"".(!$pd&&$M?"":"\n";if(is_ajax())ob_end_clean();foreach(adminer()->rowDescriptions($L,$hd)as$hf=>$K){$Ui=unique_array($L[$hf],$w);if(!$Ui){$Ui=array();foreach($L[$hf]as$x=>$X){if(!preg_match('~^(COUNT\((\*|(DISTINCT )?`(?:[^`]|``)+`)\)|(AVG|GROUP_CONCAT|MAX|MIN|SUM)\(`(?:[^`]|``)+`\))$~',$x))$Ui[$x]=$X;}}$Vi="";foreach($Ui +as$x=>$X){$m=(array)$n[$x];if((JUSH=="sql"||JUSH=="pgsql")&&preg_match('~char|text|enum|set~',$m["type"])&&strlen($X)>64){$x=(strpos($x,'(')?$x:idf_escape($x));$x="MD5(".(JUSH!='sql'||preg_match("~^utf8~",$m["collation"])?$x:"CONVERT($x USING ".charset(connection()).")").")";$X=md5($X);}$Vi +.="&".($X!==null?urlencode("where[".bracket_escape($x)."]")."=".urlencode($X===false?"f":$X):"null%5B%5D=".urlencode($x));}echo"".(!$sd&&$M?"":"\n";}if(is_ajax())exit;echo"
    ".script("qs('#all-page').onclick = partial(formCheck, /check/);","")." ".'Modify'."");$ff=array();$kd=array();reset($M);$Hg=1;foreach($L[0]as$x=>$X){if(!isset($Pi[$x])){$X=idx($_GET["columns"],key($M))?:array();$m=$n[$M?($X?$X["col"]:current($M)):$x];$C=($m?adminer()->fieldName($m,$Hg):($X["fun"]?"*":h($x)));if($C!=""){$Hg++;$ff[$x]=$C;$d=idf_escape($x);$Gd=remove_from_uri('(order|desc)[^=]*|page').'&order%5B0%5D='.urlencode($x);$Sb="&desc%5B0%5D=1";echo"".script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});","");$jd=apply_sql_function($X["fun"],$C);$Bh=isset($m["privileges"]["order"])||$jd;echo($Bh?''."$jd":$jd),"";}$kd[$x]=$X["fun"];next($M);}}$ze=array();if($_GET["modify"]){foreach($L +',script("tableCheck();");}elseif(isset($_GET["select"])){$a=$_GET["select"];$S=table_status1($a);$w=indexes($a);$n=fields($a);$hd=column_foreign_keys($a);$vf=$S["Oid"];$na=get_settings("adminer_import");$ch=array();$e=array();$ph=array();$Mf=array();$si="";foreach($n +as$x=>$m){$C=adminer()->fieldName($m);$if=html_entity_decode(strip_tags($C),ENT_QUOTES);if(isset($m["privileges"]["select"])&&$C!=""){$e[$x]=$if;if(is_shortable($m))$si=adminer()->selectLengthProcess();}if(isset($m["privileges"]["where"])&&$C!="")$ph[$x]=$if;if(isset($m["privileges"]["order"])&&$C!="")$Mf[$x]=$if;$ch+=$m["privileges"];}list($M,$sd)=adminer()->selectColumnsProcess($e,$w);$M=array_unique($M);$sd=array_unique($sd);$je=count($sd)selectSearchProcess($n,$w);$Lf=adminer()->selectOrderProcess($n,$w);$z=adminer()->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$Vi=>$K){$wa=convert_field($n[key($K)]);$M=array($wa?:idf_escape(key($K)));$Z[]=where_check($Vi,$n);$J=driver()->select($a,$M,$Z,$M);if($J)echo +first($J->fetch_row());}exit;}$G=$Xi=null;foreach($w +as$v){if($v["type"]=="PRIMARY"){$G=array_flip($v["columns"]);$Xi=($M?$G:array());foreach($Xi +as$x=>$X){if(in_array(idf_escape($x),$M))unset($Xi[$x]);}break;}}if($vf&&!$G){$G=$Xi=array($vf=>0);$w[]=array("type"=>"PRIMARY","columns"=>array($vf));}if($_POST&&!$l){$vj=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$Za=array();foreach($_POST["check"]as$Va)$Za[]=where_check($Va,$n);$vj[]="((".implode(") OR (",$Za)."))";}$vj=($vj?"\nWHERE ".implode(" AND ",$vj):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);adminer()->dumpTable($a,"");$ld=($M?implode(", ",$M):"*").convert_fields($e,$n,$M)."\nFROM ".table($a);$ud=($sd&&$je?"\nGROUP BY ".implode(", ",$sd):"").($Lf?"\nORDER BY ".implode(", ",$Lf):"");$H="SELECT $ld$vj$ud";if(is_array($_POST["check"])&&!$G){$Ti=array();foreach($_POST["check"]as$X)$Ti[]="(SELECT".limit($ld,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$n).$ud,1).")";$H=implode(" UNION ALL ",$Ti);}adminer()->dumpData($a,"table",$H);adminer()->dumpFooter();exit;}if(!adminer()->selectEmailProcess($Z,$hd)){if($_POST["save"]||$_POST["delete"]){$I=true;$oa=0;$O=array();if(!$_POST["delete"]){foreach($_POST["fields"]as$C=>$X){$X=process_input($n[$C]);if($X!==null&&($_POST["clone"]||$X!==false))$O[idf_escape($C)]=($X!==false?$X:idf_escape($C));}}if($_POST["delete"]||$O){$H=($_POST["clone"]?"INTO ".table($a)." (".implode(", ",array_keys($O)).")\nSELECT ".implode(", ",$O)."\nFROM ".table($a):"");if($_POST["all"]||($G&&is_array($_POST["check"]))||$je){$I=($_POST["delete"]?driver()->delete($a,$vj):($_POST["clone"]?queries("INSERT $H$vj".driver()->insertReturning($a)):driver()->update($a,$O,$vj)));$oa=connection()->affected_rows;if(is_object($I))$oa+=$I->num_rows;}else{foreach((array)$_POST["check"]as$X){$uj="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$n);$I=($_POST["delete"]?driver()->delete($a,$uj,1):($_POST["clone"]?queries("INSERT".limit1($a,$H,$uj)):driver()->update($a,$O,$uj,1)));if(!$I)break;$oa+=connection()->affected_rows;}}}$Ve=lang_format(array('%d item has been affected.','%d items have been affected.'),$oa);if($_POST["clone"]&&$I&&$oa==1){$ye=last_id($I);if($ye)$Ve=sprintf('Item%s has been inserted.'," $ye");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page":""),$Ve,$I);if(!$_POST["delete"]){$wg=(array)$_POST["fields"];edit_form($a,array_intersect_key($n,$wg),$wg,!$_POST["clone"],$l);page_footer();exit;}}elseif(!$_POST["import"]){if(!$_POST["val"])$l='Ctrl+click on a value to modify it.';else{$I=true;$oa=0;foreach($_POST["val"]as$Vi=>$K){$O=array();foreach($K +as$x=>$X){$x=bracket_escape($x,true);$O[idf_escape($x)]=(preg_match('~char|text~',$n[$x]["type"])||$X!=""?adminer()->processInput($n[$x],$X):"NULL");}$I=driver()->update($a,$O," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($Vi,$n),($je||$G?0:1)," ");if(!$I)break;$oa+=connection()->affected_rows;}queries_redirect(remove_from_uri(),lang_format(array('%d item has been affected.','%d items have been affected.'),$oa),$I);}}elseif(!is_string($Vc=get_file("csv_file",true)))$l=upload_error($Vc);elseif(!preg_match('~~u',$Vc))$l='File must be in UTF-8 encoding.';else{save_settings(array("output"=>$na["output"],"format"=>$_POST["separator"]),"adminer_import");$I=true;$ib=array_keys($n);preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$Vc,$Le);$oa=count($Le[0]);driver()->begin();$vh=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$L=array();foreach($Le[0]as$x=>$X){preg_match_all("~((?>\"[^\"]*\")+|[^$vh]*)$vh~",$X.$vh,$Me);if(!$x&&!array_diff($Me[1],$ib)){$ib=$Me[1];$oa--;}else{$O=array();foreach($Me[1]as$s=>$fb)$O[idf_escape($ib[$s])]=($fb==""&&$n[$ib[$s]]["null"]?"NULL":q(preg_match('~^".*"$~s',$fb)?str_replace('""','"',substr($fb,1,-1)):$fb));$L[]=$O;}}$I=(!$L||driver()->insertUpdate($a,$L,$G));if($I)driver()->commit();queries_redirect(remove_from_uri("page"),lang_format(array('%d row has been imported.','%d rows have been imported.'),$oa),$I);driver()->rollback();}}}$di=adminer()->tableName($S);if(is_ajax()){page_headers();ob_start();}else +page_header('Select'.": $di",$l);$O=null;if(isset($ch["insert"])||!support("table")){$dg=array();foreach((array)$_GET["where"]as$X){if(isset($hd[$X["col"]])&&count($hd[$X["col"]])==1&&($X["op"]=="="||(!$X["op"]&&(is_array($X["val"])||!preg_match('~[_%]~',$X["val"])))))$dg["set"."[".bracket_escape($X["col"])."]"]=$X["val"];}$O=$dg?"&".http_build_query($dg):"";}adminer()->selectLinks($S,$O);if(!$e&&support("table"))echo"

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

    ";hidden_fields_get();echo(DB!=""?input_hidden("db",DB).(isset($_GET["ns"])?input_hidden("ns",$_GET["ns"]):""):""),input_hidden("select",$a),"
    \n";adminer()->selectColumnsPrint($M,$e);adminer()->selectSearchPrint($Z,$ph,$w);adminer()->selectOrderPrint($Lf,$Mf,$w);adminer()->selectLimitPrint($z);adminer()->selectLengthPrint($si);adminer()->selectActionPrint($w);echo"\n";$E=$_GET["page"];$kd=null;if($E=="last"){$kd=get_val(count_rows($a,$Z,$je,$sd));$E=floor(max(0,intval($kd)-1)/$z);}$qh=$M;$td=$sd;if(!$qh){$qh[]="*";$yb=convert_fields($e,$n,$M);if($yb)$qh[]=substr($yb,2);}foreach($M +as$x=>$X){$m=$n[idf_unescape($X)];if($m&&($wa=convert_field($m)))$qh[$x]="$wa AS $X";}if(!$je&&$Xi){foreach($Xi +as$x=>$X){$qh[]=idf_escape($x);if($td)$td[]=idf_escape($x);}}$I=driver()->select($a,$qh,$Z,$td,$Lf,$z,$E,true);if(!$I)echo"

    ".error()."\n";else{if(JUSH=="mssql"&&$E)$I->seek($z*$E);$sc=array();echo"

    \n";$L=array();while($K=$I->fetch_assoc()){if($E&&JUSH=="oracle")unset($K["RNUM"]);$L[]=$K;}if($_GET["page"]!="last"&&$z&&$sd&&$je&&JUSH=="sql")$kd=get_val(" SELECT FOUND_ROWS()");if(!$L)echo"

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

    ","",script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});"),"".(!$sd&&$M?"":"\n";if(is_ajax())ob_end_clean();foreach(adminer()->rowDescriptions($L,$ed)as$df=>$K){$Mi=unique_array($L[$df],$w);if(!$Mi){$Mi=array();foreach($L[$df]as$x=>$X){if(!preg_match('~^(COUNT\((\*|(DISTINCT )?`(?:[^`]|``)+`)\)|(AVG|GROUP_CONCAT|MAX|MIN|SUM)\(`(?:[^`]|``)+`\))$~',$x))$Mi[$x]=$X;}}$Ni="";foreach($Mi -as$x=>$X){$m=(array)$n[$x];if((JUSH=="sql"||JUSH=="pgsql")&&preg_match('~char|text|enum|set~',$m["type"])&&strlen($X)>64){$x=(strpos($x,'(')?$x:idf_escape($x));$x="MD5(".(JUSH!='sql'||preg_match("~^utf8~",$m["collation"])?$x:"CONVERT($x USING ".charset(connection()).")").")";$X=md5($X);}$Ni -.="&".($X!==null?urlencode("where[".bracket_escape($x)."]")."=".urlencode($X===false?"f":$X):"null%5B%5D=".urlencode($x));}echo"".(!$pd&&$M?"":"\n";}if(is_ajax())exit;echo"
    ".script("qs('#all-page').onclick = partial(formCheck, /check/);","")." ".'Modify'."");$jf=array();$nd=array();reset($M);$Mg=1;foreach($L[0]as$x=>$X){if(!isset($Xi[$x])){$X=idx($_GET["columns"],key($M))?:array();$m=$n[$M?($X?$X["col"]:current($M)):$x];$C=($m?adminer()->fieldName($m,$Mg):($X["fun"]?"*":h($x)));if($C!=""){$Mg++;$jf[$x]=$C;$d=idf_escape($x);$Jd=remove_from_uri('(order|desc)[^=]*|page').'&order%5B0%5D='.urlencode($x);$Ub="&desc%5B0%5D=1";echo"".script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});","");$md=apply_sql_function($X["fun"],$C);$Hh=isset($m["privileges"]["order"])||$md;echo($Hh?''."$md":$md),"";}$nd[$x]=$X["fun"];next($M);}}$Ce=array();if($_GET["modify"]){foreach($L as$K){foreach($K -as$x=>$X)$ze[$x]=max($ze[$x],min(40,strlen(utf8_decode($X))));}}echo($Ea?"".'Relations':"")."
    ".checkbox("check[]",substr($Ni,1),in_array(substr($Ni,1),(array)$_POST["check"])).($ge||information_schema(DB)?"":" ".'edit'.""));foreach($K -as$x=>$X){if(isset($ff[$x])){$m=(array)$n[$x];$X=driver()->value($X,$m);if($X!=""&&(!isset($pc[$x])||$pc[$x]!=""))$pc[$x]=(is_mail($X)?$ff[$x]:"");$_="";if(preg_match('~blob|bytea|raw|file~',$m["type"])&&$X!="")$_=ME.'download='.urlencode($a).'&field='.urlencode($x).$Ni;if(!$_&&$X!==null){foreach((array)$ed[$x]as$p){if(count($ed[$x])==1||end($p["source"])==$x){$_="";foreach($p["source"]as$s=>$Ch)$_ -.=where_link($s,$p["target"][$s],$L[$df][$Ch]);$_=($p["db"]!=""?preg_replace('~([?&]db=)[^&]+~','\1'.urlencode($p["db"]),ME):ME).'select='.urlencode($p["table"]).$_;if($p["ns"])$_=preg_replace('~([?&]ns=)[^&]+~','\1'.urlencode($p["ns"]),$_);if(count($p["source"])==1)break;}}}if($x=="COUNT(*)"){$_=ME."select=".urlencode($a);$s=0;foreach((array)$_GET["where"]as$W){if(!array_key_exists($W["col"],$Mi))$_ -.=where_link($s++,$W["col"],$W["val"],$W["op"]);}foreach($Mi -as$me=>$W)$_ -.=where_link($s++,$me,$W);}$X=select_value($X,$_,$m,$li);$t=h("val[$Ni][".bracket_escape($x)."]");$Y=idx(idx($_POST["val"],$Ni),bracket_escape($x));$kc=!is_array($K[$x])&&is_utf8($X)&&$L[$df][$x]==$K[$x]&&!$kd[$x]&&!$m["generated"];$ji=preg_match('~text|json|lob~',$m["type"]);echo"NULL'||is_numeric(strip_tags($X)))?" class='number'":"");if(($_GET["modify"]&&$kc)||$Y!==null){$ud=h($Y!==null?$Y:$K[$x]);echo">".($ji?"":"");}else{$Ce=strpos($X,"");echo" data-text='".($Ce?2:($ji?1:0))."'".($kc?"":" data-warning='".h('Use edit link to modify this value.')."'").">$X";}}}if($Ea)echo"";adminer()->backwardKeysPrint($Ea,$L[$df]);echo"
    \n","
    \n";}if(!is_ajax()){if($L||$E){$Cc=true;$hd=null;if($_GET["page"]!="last"){if(!$z||(count($L)<$z&&($L||!$E)))$hd=($E?$E*$z:0)+count($L);elseif(JUSH!="sql"||!$ge){$hd=($ge?false:found_rows($S,$Z));if(intval($hd)$z||$E));if($Xf)echo(($hd===false?count($L)+1:$hd-$E*$z)>$z?'

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

    ".'Relations':"")."
    ".checkbox("check[]",substr($Vi,1),in_array(substr($Vi,1),(array)$_POST["check"])).($je||information_schema(DB)?"":" ".'edit'.""));foreach($K +as$x=>$X){if(isset($jf[$x])){$m=(array)$n[$x];$X=driver()->value($X,$m);if($X!=""&&(!isset($sc[$x])||$sc[$x]!=""))$sc[$x]=(is_mail($X)?$jf[$x]:"");$_="";if(preg_match('~blob|bytea|raw|file~',$m["type"])&&$X!="")$_=ME.'download='.urlencode($a).'&field='.urlencode($x).$Vi;if(!$_&&$X!==null){foreach((array)$hd[$x]as$p){if(count($hd[$x])==1||end($p["source"])==$x){$_="";foreach($p["source"]as$s=>$Ih)$_ +.=where_link($s,$p["target"][$s],$L[$hf][$Ih]);$_=($p["db"]!=""?preg_replace('~([?&]db=)[^&]+~','\1'.urlencode($p["db"]),ME):ME).'select='.urlencode($p["table"]).$_;if($p["ns"])$_=preg_replace('~([?&]ns=)[^&]+~','\1'.urlencode($p["ns"]),$_);if(count($p["source"])==1)break;}}}if($x=="COUNT(*)"){$_=ME."select=".urlencode($a);$s=0;foreach((array)$_GET["where"]as$W){if(!array_key_exists($W["col"],$Ui))$_ +.=where_link($s++,$W["col"],$W["val"],$W["op"]);}foreach($Ui +as$pe=>$W)$_ +.=where_link($s++,$pe,$W);}$Kd=select_value($X,$_,$m,$si);$t=h("val[$Vi][".bracket_escape($x)."]");$xg=idx(idx($_POST["val"],$Vi),bracket_escape($x));$nc=!is_array($K[$x])&&is_utf8($Kd)&&$L[$hf][$x]==$K[$x]&&!$nd[$x]&&!$m["generated"];$qi=preg_match('~text|json|lob~',$m["type"]);echo"".($qi?"":"");}else{$Ge=strpos($Kd,"");echo" data-text='".($Ge?2:($qi?1:0))."'".($nc?"":" data-warning='".h('Use edit link to modify this value.')."'").">$Kd";}}}if($Ea)echo"";adminer()->backwardKeysPrint($Ea,$L[$hf]);echo"
    \n","
    \n";}if(!is_ajax()){if($L||$E){$Fc=true;if($_GET["page"]!="last"){if(!$z||(count($L)<$z&&($L||!$E)))$kd=($E?$E*$z:0)+count($L);elseif(JUSH!="sql"||!$je){$kd=($je?false:found_rows($S,$Z));if(intval($kd)$z||$E));if($bg)echo(($kd===false?count($L)+1:$kd-$E*$z)>$z?'

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

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

    ".'No rows.'."\n";else{echo"\n";foreach($dj +';$id=adminer()->dumpFormat();foreach((array)$_GET["columns"]as$d){if($d["fun"]){unset($id['sql']);break;}}if($id){print_fieldset("export",'Export'." ");$Yf=adminer()->dumpOutput();echo($Yf?html_select("output",$Yf,$na["output"])." ":""),html_select("format",$id,$na["format"])," \n","\n";}adminer()->selectEmailPrint(array_filter($sc,'strlen'),$e);echo"\n";}if(adminer()->selectImportPrint())echo"
    ","".'Import'."",script("qsl('a').onclick = partial(toggle, 'import');",""),"","
    ";echo +input_token(),"\n",(!$sd&&$M?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["variables"])){$P=isset($_GET["status"]);page_header($P?'Status':'Variables');$lj=($P?show_status():show_variables());if(!$lj)echo"

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

    \n";foreach($lj as$K){echo"";$x=array_shift($K);echo"
    ".h($x)."";foreach($K -as$X)echo"".nl_br(h($X));}echo"
    \n";}}elseif(isset($_GET["script"])){header("Content-Type: text/javascript; charset=utf-8");if($_GET["script"]=="db"){$Th=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach(table_status()as$C=>$S){json_row("Comment-$C",h($S["Comment"]));if(!is_view($S)){foreach(array("Engine","Collation")as$x)json_row("$x-$C",h($S[$x]));foreach($Th+array("Auto_increment"=>0,"Rows"=>0)as$x=>$X){if($S[$x]!=""){$X=format_number($S[$x]);if($X>=0)json_row("$x-$C",($x=="Rows"&&$X&&$S["Engine"]==(JUSH=="pgsql"?"table":"InnoDB")?"~ $X":$X));if(isset($Th[$x]))$Th[$x]+=($S["Engine"]!="InnoDB"||$x!="Data_free"?$S[$x]:0);}elseif(array_key_exists($x,$S))json_row("$x-$C","?");}}}foreach($Th -as$x=>$X)json_row("sum-$x",format_number($X));json_row("");}elseif($_GET["script"]=="kill")connection()->query("KILL ".number($_POST["kill"]));else{foreach(count_tables(adminer()->databases())as$j=>$X){json_row("tables-$j",$X);json_row("size-$j",db_size($j));}json_row("");}exit;}else{$di=array_merge((array)$_POST["tables"],(array)$_POST["views"]);if($di&&!$l&&!$_POST["search"]){$I=true;$Re="";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"])$I=truncate_tables($_POST["tables"]);$Re='Tables have been truncated.';}elseif($_POST["move"]){$I=move_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$Re='Tables have been moved.';}elseif($_POST["copy"]){$I=copy_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$Re='Tables have been copied.';}elseif($_POST["drop"]){if($_POST["views"])$I=drop_views($_POST["views"]);if($I&&$_POST["tables"])$I=drop_tables($_POST["tables"]);$Re='Tables have been dropped.';}elseif(JUSH=="sqlite"&&$_POST["check"]){foreach((array)$_POST["tables"]as$R){foreach(get_rows("PRAGMA integrity_check(".q($R).")")as$K)$Re -.="".h($R).": ".h($K["integrity_check"])."
    ";}}elseif(JUSH!="sql"){$I=(JUSH=="sqlite"?queries("VACUUM"):apply_queries("VACUUM".($_POST["optimize"]?"":" ANALYZE"),$_POST["tables"]));$Re='Tables have been optimized.';}elseif(!$_POST["tables"])$Re='No tables.';elseif($I=queries(($_POST["optimize"]?"OPTIMIZE":($_POST["check"]?"CHECK":($_POST["repair"]?"REPAIR":"ANALYZE")))." TABLE ".implode(", ",array_map('Adminer\idf_escape',$_POST["tables"])))){while($K=$I->fetch_assoc())$Re -.="".h($K["Table"]).": ".h($K["Msg_text"])."
    ";}queries_redirect(substr(ME,0,-1),$Re,$I);}page_header(($_GET["ns"]==""?'Database'.": ".h(DB):'Schema'.": ".h($_GET["ns"])),$l,true);if(adminer()->homepage()){if($_GET["ns"]!==""){echo"

    ".'Tables and views'."

    \n";$ci=tables_list();if(!$ci)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"]=driver()->convertOperator("LIKE %%");search_tables();}}echo"
    \n","\n",script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),'','\n";$T=0;foreach($ci -as$C=>$U){$gj=($U!==null&&!preg_match('~table|sequence~i',$U));$t=h("Table-".$C);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(($gj?"views[]":"tables[]"),$C,in_array("$C",$di,true),"","","",$t),''.(support("table")||support("indexes")?"".h($C).'':h($C));if($gj)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$x=>$_){$t=" id='$x-".h($C)."'";echo($_?"".(support("table")||$x=="Rows"||(support("indexes")&&$x!="Data_length")?"?":"?"):"");}$T++;}echo(support("comment")?"":""),"\n";}echo"
    ".sprintf('%d in total',count($ci)),"".h(JUSH=="sql"?get_val("SELECT @@default_storage_engine"):""),"".h(db_collation(DB,collations()));foreach(array("Data_length","Index_length","Data_free")as$x)echo"";echo"\n","
    \n","
    \n";if(!information_schema(DB)){echo"\n";}echo"
    \n",script("tableCheck();");}echo"

    ".'Routines'."

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

    ".'Sequences'."

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

    ".'User types'."

    \n";$Yi=types();if($Yi){echo"\n","\n";foreach($Yi +as$X)echo"
    ".'Name'."
    ".nl_br(h($X));}echo"
    \n";}}elseif(isset($_GET["script"])){header("Content-Type: text/javascript; charset=utf-8");if($_GET["script"]=="db"){$Zh=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach(table_status()as$C=>$S){json_row("Comment-$C",h($S["Comment"]));if(!is_view($S)){foreach(array("Engine","Collation")as$x)json_row("$x-$C",h($S[$x]));foreach($Zh+array("Auto_increment"=>0,"Rows"=>0)as$x=>$X){if($S[$x]!=""){$X=format_number($S[$x]);if($X>=0)json_row("$x-$C",($x=="Rows"&&$X&&$S["Engine"]==(JUSH=="pgsql"?"table":"InnoDB")?"~ $X":$X));if(isset($Zh[$x]))$Zh[$x]+=($S["Engine"]!="InnoDB"||$x!="Data_free"?$S[$x]:0);}elseif(array_key_exists($x,$S))json_row("$x-$C","?");}}}foreach($Zh +as$x=>$X)json_row("sum-$x",format_number($X));json_row("");}elseif($_GET["script"]=="kill")connection()->query("KILL ".number($_POST["kill"]));else{foreach(count_tables(adminer()->databases())as$j=>$X){json_row("tables-$j",$X);json_row("size-$j",db_size($j));}json_row("");}exit;}else{$ki=array_merge((array)$_POST["tables"],(array)$_POST["views"]);if($ki&&!$l&&!$_POST["search"]){$I=true;$Ve="";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"])$I=truncate_tables($_POST["tables"]);$Ve='Tables have been truncated.';}elseif($_POST["move"]){$I=move_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$Ve='Tables have been moved.';}elseif($_POST["copy"]){$I=copy_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$Ve='Tables have been copied.';}elseif($_POST["drop"]){if($_POST["views"])$I=drop_views($_POST["views"]);if($I&&$_POST["tables"])$I=drop_tables($_POST["tables"]);$Ve='Tables have been dropped.';}elseif(JUSH=="sqlite"&&$_POST["check"]){foreach((array)$_POST["tables"]as$R){foreach(get_rows("PRAGMA integrity_check(".q($R).")")as$K)$Ve +.="".h($R).": ".h($K["integrity_check"])."
    ";}}elseif(JUSH!="sql"){$I=(JUSH=="sqlite"?queries("VACUUM"):apply_queries("VACUUM".($_POST["optimize"]?"":" ANALYZE"),$_POST["tables"]));$Ve='Tables have been optimized.';}elseif(!$_POST["tables"])$Ve='No tables.';elseif($I=queries(($_POST["optimize"]?"OPTIMIZE":($_POST["check"]?"CHECK":($_POST["repair"]?"REPAIR":"ANALYZE")))." TABLE ".implode(", ",array_map('Adminer\idf_escape',$_POST["tables"])))){while($K=$I->fetch_assoc())$Ve +.="".h($K["Table"]).": ".h($K["Msg_text"])."
    ";}queries_redirect(substr(ME,0,-1),$Ve,$I);}page_header(($_GET["ns"]==""?'Database'.": ".h(DB):'Schema'.": ".h($_GET["ns"])),$l,true);if(adminer()->homepage()){if($_GET["ns"]!==""){echo"

    ".'Tables and views'."

    \n";$ji=tables_list();if(!$ji)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"]=driver()->convertOperator("LIKE %%");search_tables();}}echo"
    \n","\n",script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),'','\n";$T=0;foreach($ji +as$C=>$U){$oj=($U!==null&&!preg_match('~table|sequence~i',$U));$t=h("Table-".$C);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(($oj?"views[]":"tables[]"),$C,in_array("$C",$ki,true),"","","",$t),''.(support("table")||support("indexes")?"".h($C).'':h($C));if($oj)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$x=>$_){$t=" id='$x-".h($C)."'";echo($_?"".(support("table")||$x=="Rows"||(support("indexes")&&$x!="Data_length")?"?":"?"):"");}$T++;}echo(support("comment")?"":""),"\n";}echo"
    ".sprintf('%d in total',count($ji)),"".h(JUSH=="sql"?get_val("SELECT @@default_storage_engine"):""),"".h(db_collation(DB,collations()));foreach(array("Data_length","Index_length","Data_free")as$x)echo"";echo"\n","
    \n","
    \n";if(!information_schema(DB)){echo"\n";}echo"
    \n",script("tableCheck();");}echo"

    ".'Routines'."

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

    ".'Sequences'."

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

    ".'User types'."

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

    ".'Events'."

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

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

    ".h($K["Name"]),"".($K["Execute at"]?'At given time'."".$K["Execute at"]:'Every'." ".$K["Interval value"]." ".$K["Interval field"]."$K[Starts]"),"$K[Ends]",''.'Alter'.'';echo"
    \n";$Dc=get_val("SELECT @@event_scheduler");if($Dc&&$Dc!="ON")echo"

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