<?php
/** Adminer Editor - Compact database editor
* @link https://www.adminer.org/
* @author Jakub Vrana, https://www.vrana.cz/
* @copyright 2009 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.4.2
*/namespace
Adminer;const
VERSION="5.4.2";error_reporting(24575);set_error_handler(function($Ub,$Vb){return!!preg_match('~^Undefined (array key|offset|index)~',$Vb);},E_WARNING|E_NOTICE);$lc=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($lc||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$Sg=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($Sg)$$X=$Sg;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function
connection($g=null){return($g?:Db::$instance);}function
adminer(){return
Adminer::$instance;}function
driver(){return
Driver::$instance;}function
connect(){$lb=adminer()->credentials();$H=Driver::connect($lb[0],$lb[1],$lb[2]);return(is_object($H)?$H:null);}function
idf_unescape($s){if(!preg_match('~^[`\'"[]~',$s))return$s;$Ed=substr($s,-1);return
str_replace($Ed.$Ed,$Ed,substr($s,1,-1));}function
q($Q){return
connection()->quote($Q);}function
escape_string($X){return
substr(q($X),1,-1);}function
idx($la,$v,$i=null){return($la&&array_key_exists($v,$la)?$la[$v]:$i);}function
number($X){return
preg_replace('~[^0-9]+~','',$X);}function
number_type(){return'((?<!o)int(?!er)|numeric|real|float|double|decimal|money)';}function
remove_slashes(array$gh,$lc=false){$H=array();foreach($gh
as$v=>$X)$H[stripslashes($v)]=(is_array($X)?remove_slashes($X,$lc):($lc?$X:stripslashes($X)));return$H;}function
bracket_escape($s,$ua=false){static$Cg=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return
strtr($s,($ua?array_flip($Cg):$Cg));}function
min_version($ih,$Pd="",$g=null){$g=connection($g);$Pf=$g->server_info;if($Pd&&preg_match('~([\d.]+)-MariaDB~',$Pf,$y)){$Pf=$y[1];$ih=$Pd;}return$ih&&version_compare($Pf,$ih)>=0;}function
charset(Db$f){return(min_version("5.5.3",0,$f)?"utf8mb4":"utf8");}function
ini_bool($jd){$X=ini_get($jd);return(preg_match('~^(on|true|yes)$~i',$X)||(int)$X);}function
ini_bytes($jd){$X=ini_get($jd);switch(strtolower(substr($X,-1))){case'g':$X=(int)$X*1024;case'm':$X=(int)$X*1024;case'k':$X=(int)$X*1024;}return$X;}function
sid(){static$H;if($H===null)$H=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$H;}function
set_password($hh,$M,$V,$B){$_SESSION["pwds"][$hh][$M][$V]=($_COOKIE["adminer_key"]&&is_string($B)?array(encrypt_string($B,$_COOKIE["adminer_key"])):$B);}function
get_password(){$H=get_session("pwds");if(is_array($H))$H=($_COOKIE["adminer_key"]?decrypt_string($H[0],$_COOKIE["adminer_key"]):false);return$H;}function
get_val($F,$k=0,$bb=null){$bb=connection($bb);$G=$bb->query($F);if(!is_object($G))return
false;$I=$G->fetch_row();return($I?$I[$k]:false);}function
get_vals($F,$d=0){$H=array();$G=connection()->query($F);if(is_object($G)){while($I=$G->fetch_row())$H[]=$I[$d];}return$H;}function
get_key_vals($F,$g=null,$Sf=true){$g=connection($g);$H=array();$G=$g->query($F);if(is_object($G)){while($I=$G->fetch_row()){if($Sf)$H[$I[0]]=$I[1];else$H[]=$I[0];}}return$H;}function
get_rows($F,$g=null,$j="<p class='error'>"){$bb=connection($g);$H=array();$G=$bb->query($F);if(is_object($G)){while($I=$G->fetch_assoc())$H[]=$I;}elseif(!$G&&!$g&&$j&&(defined('Adminer\PAGE_HEADER')||$j=="-- "))echo$j.error()."\n";return$H;}function
unique_array($I,array$u){foreach($u
as$t){if(preg_match("~PRIMARY|UNIQUE~",$t["type"])&&!$t["partial"]){$H=array();foreach($t["columns"]as$v){if(!isset($I[$v]))continue
2;$H[$v]=$I[$v];}return$H;}}}function
escape_key($v){if(preg_match('(^([\w(]+)('.str_replace("_",".*",preg_quote(idf_escape("_"))).')([ \w)]+)$)',$v,$y))return$y[1].idf_escape(idf_unescape($y[2])).$y[3];return
idf_escape($v);}function
where(array$Z,array$l=array()){$H=array();foreach((array)$Z["where"]as$v=>$X){$v=bracket_escape($v,true);$d=escape_key($v);$k=idx($l,$v,array());$ic=$k["type"];$H[]=$d.(JUSH=="sql"&&$ic=="json"?" = CAST(".q($X)." AS JSON)":(JUSH=="pgsql"&&preg_match('~^json~',$ic)?"::jsonb = ".q($X)."::jsonb":(JUSH=="sql"&&is_numeric($X)&&preg_match('~\.~',$X)?" LIKE ".q($X):(JUSH=="mssql"&&strpos($ic,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$X)):" = ".unconvert_field($k,q($X))))));if(JUSH=="sql"&&preg_match('~char|text~',$ic)&&preg_match("~[^ -@]~",$X))$H[]="$d = ".q($X)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$v)$H[]=escape_key($v)." IS NULL";return
implode(" AND ",$H);}function
where_check($X,array$l=array()){parse_str($X,$Ka);remove_slashes(array(&$Ka));return
where($Ka,$l);}function
where_link($q,$d,$Y,$De="="){return"&where%5B$q%5D%5Bcol%5D=".urlencode($d)."&where%5B$q%5D%5Bop%5D=".urlencode(($Y!==null?$De:"IS NULL"))."&where%5B$q%5D%5Bval%5D=".urlencode($Y);}function
convert_fields(array$e,array$l,array$K=array()){$H="";foreach($e
as$v=>$X){if($K&&!in_array(idf_escape($v),$K))continue;$ma=convert_field($l[$v]);if($ma)$H
.=", $ma AS ".idf_escape($v);}return$H;}function
cookie($z,$Y,$Jd=2592000){header("Set-Cookie: $z=".rawurlencode($Y).($Jd?"; expires=".gmdate("D, d M Y H:i:s",time()+$Jd)." GMT":"")."; path=".preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]).(HTTPS?"; secure":"")."; HttpOnly; SameSite=lax",false);}function
get_settings($ib){parse_str($_COOKIE[$ib],$Tf);return$Tf;}function
get_setting($v,$ib="adminer_settings",$i=null){return
idx(get_settings($ib),$v,$i);}function
save_settings(array$Tf,$ib="adminer_settings"){$Y=http_build_query($Tf+get_settings($ib));cookie($ib,$Y);$_COOKIE[$ib]=$Y;}function
restart_session(){if(!ini_bool("session.use_cookies")&&(!function_exists('session_status')||session_status()==1))session_start();}function
stop_session($sc=false){$bh=ini_bool("session.use_cookies");if(!$bh||$sc){session_write_close();if($bh&&@ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($v){return$_SESSION[$v][DRIVER][SERVER][$_GET["username"]];}function
set_session($v,$X){$_SESSION[$v][DRIVER][SERVER][$_GET["username"]]=$X;}function
auth_url($hh,$M,$V,$h=null){$Yg=remove_from_uri(implode("|",array_keys(SqlDriver::$drivers))."|username|ext|".($h!==null?"db|":"").($hh=='mssql'||$hh=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$Yg,$y);return"$y[1]?".(sid()?SID."&":"").($hh!="server"||$M!=""?urlencode($hh)."=".urlencode($M)."&":"").($_GET["ext"]?"ext=".urlencode($_GET["ext"])."&":"")."username=".urlencode($V).($h!=""?"&db=".urlencode($h):"").($y[2]?"&$y[2]":"");}function
is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function
redirect($Ld,$ce=null){if($ce!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($Ld!==null?$Ld:$_SERVER["REQUEST_URI"]))][]=$ce;}if($Ld!==null){if($Ld=="")$Ld=".";header("Location: $Ld");exit;}}function
query_redirect($F,$Ld,$ce,$tf=true,$Zb=true,$ec=false,$tg=""){if($Zb){$cg=microtime(true);$ec=!connection()->query($F);$tg=format_time($cg);}$Zf=($F?adminer()->messageQuery($F,$tg,$ec):"");if($ec){adminer()->error
.=error().$Zf.script("messagesPrint();")."<br>";return
false;}if($tf)redirect($Ld,$ce.$Zf);return
true;}class
Queries{static$queries=array();static$start=0;}function
queries($F){if(!Queries::$start)Queries::$start=microtime(true);Queries::$queries[]=(driver()->delimiter!=';'?$F:(preg_match('~;$~',$F)?"DELIMITER ;;\n$F;\nDELIMITER ":$F).";");return
connection()->query($F);}function
apply_queries($F,array$T,$Wb='Adminer\table'){foreach($T
as$R){if(!queries("$F ".$Wb($R)))return
false;}return
true;}function
queries_redirect($Ld,$ce,$tf){$E=implode("\n",Queries::$queries);$tg=format_time(Queries::$start);return
query_redirect($E,$Ld,$ce,$tf,false,!$tf,$tg);}function
format_time($cg){return
sprintf('%.3f s',max(0,microtime(true)-$cg));}function
relative_uri(){return
str_replace(":","%3a",preg_replace('~^[^?]*/([^?]*)~','\1',$_SERVER["REQUEST_URI"]));}function
remove_from_uri($Se=""){return
substr(preg_replace("~(?<=[?&])($Se".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function
get_file($v,$tb=false,$wb=""){$jc=$_FILES[$v];if(!$jc)return
null;foreach($jc
as$v=>$X)$jc[$v]=(array)$X;$H='';foreach($jc["error"]as$v=>$j){if($j)return$j;$z=$jc["name"][$v];$_g=$jc["tmp_name"][$v];$gb=file_get_contents($tb&&preg_match('~\.gz$~',$z)?"compress.zlib://$_g":$_g);if($tb){$cg=substr($gb,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$cg))$gb=iconv("utf-16","utf-8",$gb);elseif($cg=="\xEF\xBB\xBF")$gb=substr($gb,3);}$H
.=$gb;if($wb)$H
.=(preg_match("($wb\\s*\$)",$gb)?"":$wb)."\n\n";}return$H;}function
upload_error($j){$Xd=($j==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($j?'Hochladen von Datei fehlgeschlagen.'.($Xd?" ".sprintf('Maximal erlaubte Dateigröße ist %sB.',$Xd):""):'Datei existiert nicht.');}function
repeat_pattern($af,$Hd){return
str_repeat("$af{0,65535}",$Hd/65535)."$af{0,".($Hd%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,$fc=false){$H=table_status($R,$fc);return($H?reset($H):array("Name"=>$R));}function
column_foreign_keys($R){$H=array();foreach(adminer()->foreignKeys($R)as$n){foreach($n["source"]as$X)$H[$X][]=$n;}return$H;}function
fields_from_edit(){$H=array();foreach((array)$_POST["field_keys"]as$v=>$X){if($X!=""){$X=bracket_escape($X);$_POST["function"][$X]=$_POST["field_funs"][$v];$_POST["fields"][$X]=$_POST["field_vals"][$v];}}foreach((array)$_POST["fields"]as$v=>$X){$z=bracket_escape($v,true);$H[$z]=array("field"=>$z,"privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>1,"auto_increment"=>($v==driver()->primary),);}return$H;}function
dump_headers($Xc,$je=false){$H=adminer()->dumpHeaders($Xc,$je);$Oe=$_POST["output"];if($Oe!="text")header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($Xc).".$H".($Oe!="file"&&preg_match('~^[0-9a-z]+$~',$Oe)?".$Oe":""));session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$H;}function
dump_csv(array$I){$Lg=$_POST["format"]=="tsv";foreach($I
as$v=>$X){if(preg_match('~["\n]|^0[^.]|\.\d*0$|'.($Lg?'\t':'[,;]|^$').'~',$X))$I[$v]='"'.str_replace('"','""',$X).'"';}echo
implode(($_POST["format"]=="csv"?",":($Lg?"\t":";")),$I)."\r\n";}function
apply_sql_function($p,$d){return($p?($p=="unixepoch"?"DATETIME($d, '$p')":($p=="count distinct"?"COUNT(DISTINCT ":strtoupper("$p("))."$d)"):$d);}function
get_temp_dir(){$H=ini_get("upload_tmp_dir");if(!$H){if(function_exists('sys_get_temp_dir'))$H=sys_get_temp_dir();else{$m=@tempnam("","");if(!$m)return'';$H=dirname($m);unlink($m);}}return$H;}function
file_open_lock($m){if(is_link($m))return;$o=@fopen($m,"c+");if(!$o)return;@chmod($m,0660);if(!flock($o,LOCK_EX)){fclose($o);return;}return$o;}function
file_write_unlock($o,$qb){rewind($o);fwrite($o,$qb);ftruncate($o,strlen($qb));file_unlock($o);}function
file_unlock($o){flock($o,LOCK_UN);fclose($o);}function
first(array$la){return
reset($la);}function
password_file($jb){$m=get_temp_dir()."/adminer.key";if(!$jb&&!file_exists($m))return'';$o=file_open_lock($m);if(!$o)return'';$H=stream_get_contents($o);if(!$H){$H=rand_string();file_write_unlock($o,$H);}else
file_unlock($o);return$H;}function
rand_string(){return
md5(uniqid(strval(mt_rand()),true));}function
select_value($X,$x,array$k,$rg){if(is_array($X)){$H="";if(array_filter($X,'is_array')==array_values($X)){$_d=array();foreach($X
as$W)$_d+=array_fill_keys(array_keys($W),null);foreach(array_keys($_d)as$yd)$H
.="<th>".h($yd);foreach($X
as$W){$H
.="<tr>";foreach(array_merge($_d,$W)as$dh)$H
.="<td>".select_value($dh,$x,$k,$rg);}}else{foreach($X
as$yd=>$W)$H
.="<tr>".($X!=array_values($X)?"<th>".h($yd):"")."<td>".select_value($W,$x,$k,$rg);}return"<table>$H</table>";}if(!$x)$x=adminer()->selectLink($X,$k);if($x===null){if(is_mail($X))$x="mailto:$X";if(is_url($X))$x=$X;}$H=adminer()->editVal(driver()->value($X,$k),$k);if($H!==null){if(!is_utf8($H))$H="\0";elseif($rg!=""&&is_shortable($k))$H=shorten_utf8($H,max(0,+$rg));else$H=h($H);}return
adminer()->selectVal($H,$x,$k,$X);}function
is_blob(array$k){return
preg_match('~blob|bytea|raw|file~',$k["type"])&&!in_array($k["type"],idx(driver()->structuredTypes(),'Benutzerdefinierte Typen',array()));}function
is_mail($Lb){$na='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$Bb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$af="$na+(\\.$na+)*@($Bb?\\.)+$Bb";return
is_string($Lb)&&preg_match("(^$af(,\\s*$af)*\$)i",$Lb);}function
is_url($Q){$Bb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return
preg_match("~^((https?):)?//($Bb?\\.)+$Bb(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$Q);}function
is_shortable(array$k){return!preg_match('~'.number_type().'|date|time|year~',$k["type"]);}function
host_port($M){return(preg_match('~^(\[(.+)]|([^:]+)):([^:]+)$~',$M,$y)?array($y[2].$y[3],$y[4]):array($M,''));}function
count_rows($R,array$Z,$sd,array$Dc){$F=" FROM ".table($R).($Z?" WHERE ".implode(" AND ",$Z):"");return($sd&&(JUSH=="sql"||count($Dc)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$Dc).")$F":"SELECT COUNT(*)".($sd?" FROM (SELECT 1$F GROUP BY ".implode(", ",$Dc).") x":$F));}function
slow_query($F){$h=adminer()->database();$ug=adminer()->queryTimeout();$Vf=driver()->slowQuery($F,$ug);$g=null;if(!$Vf&&support("kill")){$g=connect();if($g&&($h==""||$g->select_db($h))){$Ad=get_val(connection_id(),0,$g);echo
script("const timeout = setTimeout(() => { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$Ad&token=".get_token()."'); }, 1000 * $ug);");}}ob_flush();flush();$H=@get_key_vals(($Vf?:$F),$g,false);if($g){echo
script("clearTimeout(timeout);");ob_flush();flush();}return$H;}function
get_token(){$rf=rand(1,1e6);return($rf^$_SESSION["token"]).":$rf";}function
verify_token(){list($Ag,$rf)=explode(":",$_POST["token"]);return($rf^$_SESSION["token"])==$Ag;}function
lzw_decompress($Aa){$_b=256;$Ba=8;$Sa=array();$zf=0;$_f=0;for($q=0;$q<strlen($Aa);$q++){$zf=($zf<<8)+ord($Aa[$q]);$_f+=8;if($_f>=$Ba){$_f-=$Ba;$Sa[]=$zf>>$_f;$zf&=(1<<$_f)-1;$_b++;if($_b>>$Ba)$Ba++;}}$zb=range("\0","\xFF");$H="";$ph="";foreach($Sa
as$q=>$Ra){$Kb=$zb[$Ra];if(!isset($Kb))$Kb=$ph.$ph[0];$H
.=$Kb;if($q)$zb[]=$ph.$Kb[0];$ph=$Kb;}return$H;}function
script($Xf,$Bg="\n"){return"<script".nonce().">$Xf</script>$Bg";}function
script_src($Zg,$ub=false){return"<script src='".h($Zg)."'".nonce().($ub?" defer":"")."></script>\n";}function
nonce(){return' nonce="'.get_nonce().'"';}function
input_hidden($z,$Y=""){return"<input type='hidden' name='".h($z)."' value='".h($Y)."'>\n";}function
input_token(){return
input_hidden("token",get_token());}function
target_blank(){return' target="_blank" rel="noreferrer noopener"';}function
h($Q){return
str_replace("\0","&#0;",htmlspecialchars($Q,ENT_QUOTES,'utf-8'));}function
nl_br($Q){return
str_replace("\n","<br>",$Q);}function
checkbox($z,$Y,$Ma,$Bd="",$Be="",$Pa="",$Dd=""){$H="<input type='checkbox' name='$z' value='".h($Y)."'".($Ma?" checked":"").($Dd?" aria-labelledby='$Dd'":"").">".($Be?script("qsl('input').onclick = function () { $Be };",""):"");return($Bd!=""||$Pa?"<label".($Pa?" class='$Pa'":"").">$H".h($Bd)."</label>":$H);}function
optionlist($_,$Jf=null,$ch=false){$H="";foreach($_
as$yd=>$W){$Ge=array($yd=>$W);if(is_array($W)){$H
.='<optgroup label="'.h($yd).'">';$Ge=$W;}foreach($Ge
as$v=>$X)$H
.='<option'.($ch||is_string($v)?' value="'.h($v).'"':'').($Jf!==null&&($ch||is_string($v)?(string)$v:$X)===$Jf?' selected':'').'>'.h($X);if(is_array($W))$H
.='</optgroup>';}return$H;}function
html_select($z,array$_,$Y="",$Ae="",$Dd=""){static$Bd=0;$Cd="";if(!$Dd&&substr($_[""],0,1)=="("){$Bd++;$Dd="label-$Bd";$Cd="<option value='' id='$Dd'>".h($_[""]);unset($_[""]);}return"<select name='".h($z)."'".($Dd?" aria-labelledby='$Dd'":"").">".$Cd.optionlist($_,$Y)."</select>".($Ae?script("qsl('select').onchange = function () { $Ae };",""):"");}function
html_radios($z,array$_,$Y="",$L=""){$H="";foreach($_
as$v=>$X)$H
.="<label><input type='radio' name='".h($z)."' value='".h($v)."'".($v==$Y?" checked":"").">".h($X)."</label>$L";return$H;}function
confirm($ce="",$Kf="qsl('input')"){return
script("$Kf.onclick = () => confirm('".($ce?js_escape($ce):'Sind Sie sicher?')."');","");}function
print_fieldset($r,$Gd,$lh=false){echo"<fieldset><legend>","<a href='#fieldset-$r'>$Gd</a>",script("qsl('a').onclick = partial(toggle, 'fieldset-$r');",""),"</legend>","<div id='fieldset-$r'".($lh?"":" class='hidden'").">\n";}function
bold($Ca,$Pa=""){return($Ca?" class='active $Pa'":($Pa?" class='$Pa'":""));}function
js_escape($Q){return
addcslashes($Q,"\r\n'\\/");}function
pagination($A,$ob){return" ".($A==$ob?$A+1:'<a href="'.h(remove_from_uri("page").($A?"&page=$A".($_GET["next"]?"&next=".urlencode($_GET["next"]):""):"")).'">'.($A+1)."</a>");}function
hidden_fields(array$nf,array$ad=array(),$if=''){$H=false;foreach($nf
as$v=>$X){if(!in_array($v,$ad)){if(is_array($X))hidden_fields($X,array(),$v);else{$H=true;echo
input_hidden(($if?$if."[$v]":$v),$X);}}}return$H;}function
hidden_fields_get(){echo(sid()?input_hidden(session_name(),session_id()):''),(SERVER!==null?input_hidden(DRIVER,SERVER):""),input_hidden("username",$_GET["username"]);}function
file_input($ld){$Ud="max_file_uploads";$Vd=ini_get($Ud);$Wg="upload_max_filesize";$Xg=ini_get($Wg);return(ini_bool("file_uploads")?$ld.script("qsl('input[type=\"file\"]').onchange = partialArg(fileChange, "."$Vd, '".sprintf('Increase %s.',"$Ud = $Vd")."', ".ini_bytes("upload_max_filesize").", '".sprintf('Increase %s.',"$Wg = $Xg")."')"):'Importieren von Dateien abgeschaltet.');}function
enum_input($U,$pa,array$k,$Y,$Ob=""){preg_match_all("~'((?:[^']|'')*)'~",$k["length"],$Sd);$if=($k["type"]=="enum"?"val-":"");$Ma=(is_array($Y)?in_array("null",$Y):$Y===null);$H=($k["null"]&&$if?"<label><input type='$U'$pa value='null'".($Ma?" checked":"")."><i>$Ob</i></label>":"");foreach($Sd[1]as$X){$X=stripcslashes(str_replace("''","'",$X));$Ma=(is_array($Y)?in_array($if.$X,$Y):$Y===$X);$H
.=" <label><input type='$U'$pa value='".h($if.$X)."'".($Ma?' checked':'').'>'.h(adminer()->editVal($X,$k)).'</label>';}return$H;}function
input(array$k,$Y,$p,$ta=false){$z=h(bracket_escape($k["field"]));echo"<td class='function'>";if(is_array($Y)&&!$p)$p="json";$wd=($p=="json"||preg_match('~^jsonb?$~',$k["type"]));if($wd&&$Y!=''&&(JUSH!="pgsql"||$k["type"]!="json"))$Y=json_encode(is_array($Y)?$Y:json_decode($Y),128|64|256);$yf=(JUSH=="mssql"&&$k["auto_increment"]);if($yf&&!$_POST["save"])$p=null;$Ac=(isset($_GET["select"])||$yf?array("orig"=>'Original'):array())+adminer()->editFunctions($k);$Sb=driver()->enumLength($k);if($Sb){$k["type"]="enum";$k["length"]=$Sb;}$pa=" name='fields[$z]".($k["type"]=="enum"||$k["type"]=="set"?"[]":"")."'".($ta?" autofocus":"");echo
driver()->unconvertFunction($k)." ";$R=$_GET["edit"]?:$_GET["select"];if($k["type"]=="enum")echo
h($Ac[""])."<td>".adminer()->editInput($R,$k,$pa,$Y);else{$Kc=(in_array($p,$Ac)||isset($Ac[$p]));echo(count($Ac)>1?"<select name='function[$z]'>".optionlist($Ac,$p===null||$Kc?$p:"")."</select>".on_help("event.target.value.replace(/^SQL\$/, '')",1).script("qsl('select').onchange = functionChange;",""):h(reset($Ac))).'<td>';$ld=adminer()->editInput($R,$k,$pa,$Y);if($ld!="")echo$ld;elseif(preg_match('~bool~',$k["type"]))echo"<input type='hidden'$pa value='0'>"."<input type='checkbox'".(preg_match('~^(1|t|true|y|yes|on)$~i',$Y)?" checked='checked'":"")."$pa value='1'>";elseif($k["type"]=="set")echo
enum_input("checkbox",$pa,$k,(is_string($Y)?explode(",",$Y):$Y));elseif(is_blob($k)&&ini_bool("file_uploads"))echo"<input type='file' name='fields-$z'>";elseif($wd)echo"<textarea$pa cols='50' rows='12' class='jush-js'>".h($Y).'</textarea>';elseif(($pg=preg_match('~text|lob|memo~i',$k["type"]))||preg_match("~\n~",$Y)){if($pg&&JUSH!="sqlite")$pa
.=" cols='50' rows='12'";else{$J=min(12,substr_count($Y,"\n")+1);$pa
.=" cols='30' rows='$J'";}echo"<textarea$pa>".h($Y).'</textarea>';}else{$Mg=driver()->types();$Zd=(!preg_match('~int~',$k["type"])&&preg_match('~^(\d+)(,(\d+))?$~',$k["length"],$y)?((preg_match("~binary~",$k["type"])?2:1)*$y[1]+($y[3]?1:0)+($y[2]&&!$k["unsigned"]?1:0)):($Mg[$k["type"]]?$Mg[$k["type"]]+($k["unsigned"]?0:1):0));if(JUSH=='sql'&&min_version(5.6)&&preg_match('~time~',$k["type"]))$Zd+=7;echo"<input".((!$Kc||$p==="")&&preg_match('~(?<!o)int(?!er)~',$k["type"])&&!preg_match('~\[\]~',$k["full_type"])?" type='number'":"")." value='".h($Y)."'".($Zd?" data-maxlength='$Zd'":"").(preg_match('~char|binary~',$k["type"])&&$Zd>20?" size='".($Zd>99?60:40)."'":"")."$pa>";}echo
adminer()->editHint($R,$k,$Y);$mc=0;foreach($Ac
as$v=>$X){if($v===""||!$X)break;$mc++;}if($mc&&count($Ac)>1)echo
script("qsl('td').oninput = partial(skipOriginal, $mc);");}}function
process_input(array$k){$s=bracket_escape($k["field"]);$p=idx($_POST["function"],$s);$Y=idx($_POST["fields"],$s);if($Y===null)return
false;if($k["type"]=="enum"||driver()->enumLength($k)){$Y=idx($Y,0);if($Y=="orig"||!$Y)return
false;if($Y=="null")return"NULL";$Y=substr($Y,4);}if($k["auto_increment"]&&$Y=="")return
null;if($p=="orig")return(preg_match('~^CURRENT_TIMESTAMP~i',$k["on_update"])?idf_escape($k["field"]):false);if($p=="NULL")return"NULL";if($k["type"]=="set")$Y=implode(",",(array)$Y);if($p=="json"){$p="";$Y=json_decode($Y,true);if(!is_array($Y))return
false;return$Y;}if(is_blob($k)&&ini_bool("file_uploads")){$jc=get_file("fields-$s");if(!is_string($jc))return
false;return
driver()->quoteBinary($jc);}return
adminer()->processInput($k,$Y,$p);}function
search_tables(){$_GET["where"][0]["val"]=$_POST["query"];$Lf="<ul>\n";foreach(table_status('',true)as$R=>$S){$z=adminer()->tableName($S);if(isset($S["Engine"])&&$z!=""&&(!$_POST["tables"]||in_array($R,$_POST["tables"]))){$G=connection()->query("SELECT".limit("1 FROM ".table($R)," WHERE ".implode(" AND ",adminer()->selectSearchProcess(fields($R),array())),1));if(!$G||$G->fetch_row()){$lf="<a href='".h(ME."select=".urlencode($R)."&where[0][op]=".urlencode($_GET["where"][0]["op"])."&where[0][val]=".urlencode($_GET["where"][0]["val"]))."'>$z</a>";echo"$Lf<li>".($G?$lf:"<p class='error'>$lf: ".error())."\n";$Lf="";}}}echo($Lf?"<p class='message'>".'Keine Tabellen.':"</ul>")."\n";}function
on_help($Xa,$Uf=0){return
script("mixin(qsl('select, input'), {onmouseover: function (event) { helpMouseover.call(this, event, $Xa, $Uf) }, onmouseout: helpMouseout});","");}function
edit_form($R,array$l,$I,$Vg,$j=''){$lg=adminer()->tableName(table_status1($R,true));page_header(($Vg?'Bearbeiten':'Einfügen'),$j,array("select"=>array($R,$lg)),$lg);adminer()->editRowPrint($R,$l,$I,$Vg);if($I===false){echo"<p class='error'>".'Keine Datensätze.'."\n";return;}echo"<form action='' method='post' enctype='multipart/form-data' id='form'>\n";$Jb=false;if(!$l)echo"<p class='error'>".'Sie haben keine Rechte, diese Tabelle zu aktualisieren.'."\n";else{echo"<table class='layout'>".script("qsl('table').onkeydown = editingKeydown;");$ta=!$_POST;foreach($l
as$z=>$k){echo"<tr><th>".adminer()->fieldName($k);$i=idx($_GET["set"],bracket_escape($z));if($i===null){$i=$k["default"];if($k["type"]=="bit"&&preg_match("~^b'([01]*)'\$~",$i,$vf))$i=$vf[1];if(JUSH=="sql"&&preg_match('~binary~',$k["type"]))$i=bin2hex($i);}$Y=($I!==null?($I[$z]!=""&&JUSH=="sql"&&preg_match("~enum|set~",$k["type"])&&is_array($I[$z])?implode(",",$I[$z]):(is_bool($I[$z])?+$I[$z]:$I[$z])):(!$Vg&&$k["auto_increment"]?"":(isset($_GET["select"])?false:$i)));if(!$_POST["save"]&&is_string($Y))$Y=adminer()->editVal($Y,$k);if(($Vg&&!isset($k["privileges"]["update"]))||$k["generated"])echo"<td class='function'><td>".select_value($Y,'',$k,null);else{$Jb=true;$p=($_POST["save"]?idx($_POST["function"],$z,""):($Vg&&preg_match('~^CURRENT_TIMESTAMP~i',$k["on_update"])?"now":($Y===false?null:($Y!==null?'':'NULL'))));if(!$_POST&&!$Vg&&$Y==$k["default"]&&preg_match('~^[\w.]+\(~',$Y))$p="SQL";if(preg_match("~time~",$k["type"])&&preg_match('~^CURRENT_TIMESTAMP~i',$Y)){$Y="";$p="now";}if($k["type"]=="uuid"&&$Y=="uuid()"){$Y="";$p="uuid";}if($ta!==false)$ta=($k["auto_increment"]||$p=="now"||$p=="uuid"?null:true);input($k,$Y,$p,$ta);if($ta)$ta=false;}echo"\n";}if(!support("table")&&!fields($R))echo"<tr>"."<th><input name='field_keys[]'>".script("qsl('input').oninput = fieldChange;")."<td class='function'>".html_select("field_funs[]",adminer()->editFunctions(array("null"=>isset($_GET["select"]))))."<td><input name='field_vals[]'>"."\n";echo"</table>\n";}echo"<p>\n";if($Jb){echo"<input type='submit' value='".'Speichern'."'>\n";if(!isset($_GET["select"]))echo"<input type='submit' name='insert' value='".($Vg?'Speichern und weiter bearbeiten':'Speichern und nächsten einfügen')."' title='Ctrl+Shift+Enter'>\n",($Vg?script("qsl('input').onclick = function () { return !ajaxForm(this.form, '".'Speichere'."…', this); };"):"");}echo($Vg?"<input type='submit' name='delete' value='".'Entfernen'."'>".confirm()."\n":"");if(isset($_GET["select"]))hidden_fields(array("check"=>(array)$_POST["check"],"clone"=>$_POST["clone"],"all"=>$_POST["all"]));echo
input_hidden("referer",(isset($_POST["referer"])?$_POST["referer"]:$_SERVER["HTTP_REFERER"])),input_hidden("save",1),input_token(),"</form>\n";}function
shorten_utf8($Q,$Hd=80,$gg=""){if(!preg_match("(^(".repeat_pattern("[\t\r\n -\x{10FFFF}]",$Hd).")($)?)u",$Q,$y))preg_match("(^(".repeat_pattern("[\t\r\n -~]",$Hd).")($)?)",$Q,$y);return
h($y[1]).$gg.(isset($y[2])?"":"<i>…</i>");}function
icon($Wc,$z,$Vc,$wg){return"<button type='submit' name='$z' title='".h($wg)."' class='icon icon-$Wc'><span>$Vc</span></button>";}if(isset($_GET["file"])){if(substr(VERSION,-4)!='-dev'){if($_SERVER["HTTP_IF_MODIFIED_SINCE"]){header("HTTP/1.1 304 Not Modified");exit;}header("Expires: ".gmdate("D, d M Y H:i:s",time()+365*24*60*60)." GMT");header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");header("Cache-Control: immutable");}@ini_set("zlib.output_compression",'1');if($_GET["file"]=="default.css"){header("Content-Type: text/css; charset=utf-8");echo
lzw_decompress("h:Mhgб\"PimcQCa	2ód<fa:;NBqR;1Lf9u7&)l;3J/CQXr2Mai0)e:LuÝh-923li7mZw4њ<-̴!U,Févt2S,a҇FVXaNq)-ǜh:n59Y;j-_9krٓ;.tTqo0{y\rHnGSZh;i^uxWΒC@k=b/A0+(l\\x:\rb8\00!\0F\nB͎(3\r\\Ȅa'I|(i\n\r4Og@4C@@!QB	°c¯q,\r1Eh&2PZiGH9G\"v4rDR\npJ-A|/.cDu:,=R]U5mVkLLQ@-\\@9%SrMPDIa\r(YY\\@Xp:plLC O,\r2]7?m06pTaҥC;_˗yȴd>bnnܣ3X8\r[ˀ-)i>V[Yy&L3#X|	X\\ù`C#H22.#Z`<sÒ\0uh־M_\niZeO/CӒ_`31>=k3R/;/d\0ڵm7/AXq.sL :\$Fw8߾~Hj\"Գ7gSFLίQ_O'W]c=51X~7;i\r*\nJS1ZctAV86fdy;Y]zIpc3Y]}@\$.+1'>ZcpdGL#k8PzYAuv]s9_Aq:\nKhB;XbAHq,CI`jS[ˌ1Vr;pB)#鐉;4H/*<3L;lf\ns\$K`}Ք7jx`d%j]4YHbYJ`GG.KfI)2MfָXRC̱V,~g\0g6:[j1H:AlIqu3\"q|8<9s'Q]J|\0`pjfObq\$1J>RH(ǔq\n#r@e(yVJ0Q҈6P[C:G伞4^PZ\\(\n)~9R%Sj{70_s	z|8H	\"@#9DVL\$H5WJ@zaJ ^	)2\nQv]ՇQp.˵&h2dM1#[[kf,ոΆWq'fLkgn6G;eהECVY{\0D5Rx\"h\"ݟ7W,ňuc31Cxp<If]ѱ^{/H&sρi9\$֒b0َIK\0]IDG}EDVNýmQ31KT3zq|#!\"	҃k/phy-.! 0dmK~au0>\$:\$VMf٨k6:3L@d1zlg֩iX97<׭#a}s\0\\mZXQ'n.9KC9?lXq깗\$M2FqЎKB:bo#KXnMzȤ\r=fm%fi.q;-7x(@#9F)/M-6.V^*g\n!\$(7GxwDWba{1-ԐGw\r9њ (:'%?0Ά)tjHV8}f\$f^wlKl=1ZZEigֺ1Xثbe&,2rk>޲O{-A]mMDȁ>G;ЗgQo:0.7lLשl|:nD탉-K*NY3x.dt>Ў)\$\$9BeeRGwir[62Ǳ9Xk0̱5^PO>C `XOk7\0Klx;48L\$09*9 hNF>\0rPQo<	\\Fd'L:b.4,29@Hnb- #2`Z.L\rPP\"^.Fh\0\r\0\n`	@ 	no	@@\n0 	\0j@q@	1	 \r\0` V`B\n`\n@fh\0` \n@	F`p1\r\0\\&B|`@NI#ApH\rp	`P	11% -\r6\n2	H*@	`\n  	l`z,\rɠ\r\"lh\0(d226\0]#L^\\%\0\\}\$HC\n<}E%IB>͈I\$r6dfhr</FbxYE'2boj\"m(@r*خ~d\$2U2a#`\\A貶r+Ruh\\'+؉\"G!.nMrW*#+%.h\$cCDƊ-#bO`Pv^W@tS-0-|ܶ)g'hF<\rj*\$4'\rH[ɪ1-Fh:,/ɾJ^ODٍj'\rT-&[DĪ(5E B\"`es\n9\r`h\rV%!MZlP^:o>֯XC):meC/\n8I2\rp2&)oC5m0iuAB3fDS61҈C2/Ҩ\ru14GGؔb쒑=KA3>4*\0TI%?r@!3S8,+?.1%6=\0s쭖XnRB@si(O(lKKu%+P65!.O0{Sj.`ȡiz%");}elseif($_GET["file"]=="dark.css"){header("Content-Type: text/css; charset=utf-8");echo
lzw_decompress("h:Mhgh0LЁd91S!	F!\"-6NbdGg:;Nr)c7\r(Hb81s9k\rc)m8OVAc1c34Of*-P1r416d2ցo#3Bf#	g9Φ،fc\rIb6EC&,bum7aVs#m!hrv\\3\rL:SAdk5naF3e6fSyr!L-K,3L@J˲*J쵣	bc99@H8\\6>`Ŏ;A<T'p&qqE4\rlh<5#pR #I%fBIܲ>ʫ29<Cj27j8jc(n?(a\0@5*3:δ60-AlLP4@ɰ\$H4n311t0͙9WO!rH9Q96F<7\r-xC\n @:\$iضm4Kid{\n6\rxhˋ#^'4V@a<#h0S-c9+pa2cyhBO\$9wiXɔVY9*rHtm	@b|@/l\$z+%p2l.7;&{mXC<l96x9m7R0\\4P)AoxqO#f[;6~P\raTGT0uޟ\n3\\ \\ʎJudCGPZ>d8ҨC?VdLL.(ti>,L");}elseif($_GET["file"]=="functions.js"){header("Content-Type: text/javascript; charset=utf-8");echo
lzw_decompress("':̢i11	4Q6a&:OAIe:NFD|!Cym2\"r<̱/C#:DbqSeJ˦Cܺ\n\nǱS\rZH\$RAܞS+XKvtdg:6EvXŞjmҩej2MB&ʮLC3Q0L-x\nDyNaPn:s͐(cL/(5{Qy4g-i4ڃf(bUko7&ä*ACb`.\r\nCh<\r)`إ`7CʒZX<Q1X@0dp9EQfF\r!(h)\np'#ČH(i*r&<#7K~# A:N6l,\rJP3!@2>CrhN](a0M326UE2'!<#3R<XCH7#n+a\$!2P0.wdr:YE!]<j@\\pl_\rZғTͩZs3\"~9j>WeQ:X/\"\$8X硉@4H:tL܌j~#8_Ax\$x{LEJ4'00<8>c(zX^5Dt;#K_v꩕u1\n`jn'\"Ir7U*!Ynjk@Ì+5)̄3CZB2HV`qæk]<{\r9|gr\\襜:B2781͍d=HLU}^NߔC*/|􊾓V`)8z:Rb8WA:\$2\r/BE~8iYtzX6ǰICQ7 3)6\00N\r갦 \r0ѯ 9~'%Dw'cdi'ta&r11?\\CmSɞ\$ж o&R,!.AHG\"tPv-&	30.	裃!iĕkJ7	:sO\0^'7^(`B(0nL9(\0\n[Uec)Fʛq2R5\r܀e}ܱh.iZ:AYED2@s1d<)H`تI1I\rZGRϔ/\$Oc\"*p'7`]@\\4BXzgABTQ3wc-sr_:բS@2 #Ė\nuP!Te6TaM)\0v(sVAZS<av(A%#&: `C)\r]MIC'/	PHXb\r\nYMzJFJP?JdBllDCS+-r1<w]v!)IKP4EslkV-kj,c,fRdC!&n0RJ2[3x3TB-Glls`hsV)W4SvC:nd-x` ®\$AP-kr^sASV?3E2X,KtSAq7\n^+%skG<aw	DdYڇQgbn\0A{濡9ùl.Hg(0TJ\$h-Bzm\nWY`!lc\0ϪÄՆMLxyk*Z3EU L-~?ii4[ iDZP)hZ\n5\"1tŦd/BrJcN[FժxK߭nDQS?Q\rL'!\nͅII%2萵Q;ǘ8mX-zIFF]t.H	r/[!#\r{̫pH\n4&3r*L臜{Ae\0L(*{kؘDJ_C:U2\0I0,\n;|xef0`1N`6>C){)3(t8dèO_DT^`H:c\0f<Y`f\\&x \nd+5U݇Oz{n-iFYb7vo%)Xh '7UIVwSR}dK_4 Wjnτ\0l\r\0.p@\0@Ȅ[PZIXكcbqtg2 \\i9< Z@i,`^N'uGBr'&\$F(/җ*uɄYiO	`ʑn:paPhnrM	\0кML,\$Nw)\0*l7GrlrQ	Os\"46 bXbӄoXbbeg\r `BВRhJ\"g\rTcj>I-zGolvu\rz\r	D9BK\r^\rY@,BЖL`^#\rwHpDJMXQ&lg&I\01 	P5&n0?gTs٠O!)`v X ͐QЂ\r y!'v.\r	fK! {#*/ඡ\0H\0r(Ȉ`SpcmI)8.s#G\"`Ƈx'ŔE)Qo)&\\VRZ@2bʒf'dZ&,U\r\"*4! \rD'G\\VHi1Rpc\$L2\nbToB8Fk\\\rB\r\0-l\n1354\04SHM4Qr2O%6p5/O5:pL5)Pľ%E361\r4I:S\"LeGs\\Q627=C	,	&D)<;\\~2ˮr076.'?52K6sa6R23SVLM@Fr9pț3j@NSӂk:@)B\0N`!e\n'PX\\YqLV&r+c.]锏h2]4 z`q8c6q4 ӓPg>#.)7Ne\$nB`\" 4L~΂\nu.OBN@R&N(uN@:h\n]6*hPXΠ@,P3S6U:鮟H5L-6T6SC0FsRRB~r:TnA/OP2-H:1e]P-'''8;8WUbYe!\r ^)Ȗp]	j.`</\"Uw3ʸb brA`fF_u^McTB	_Se65`\ra)ec]cAa_oa2>B\$@Q<OHJtx\"gZ\$nW@	D#S\0002#VΕB;N1NKPnv1wEl*YnB4IqZ`z\0\rR'\"픚iO	ps|)=fs1s72i-Gf `P%H\nhI\re\0X'\"\$z͉Yex@|~k yse`\$ZRz \\Wx[v`{\"Rwn'to#r*\0D3~^@xB~Ħ@}BUCx| YPXN`	\n\0Rmz+X:qy*X(No^8[fG\$LZ[vr#Xυe׍\$':\0[\nr\0Z}	b\$S|BcrQH)xРNDeMb ewzXswxAd苂LYC`{}q}Ό  4j4bFO7MN.'WS/uL	|\")IՁU%VUՌ^q'K4=c\"PvV7HI!\n`	㛓firH	tXn\$wFHĂP@rBa@W9`~bu>wbw3M~zw\$J<@\r&IX<_,[,eDuWL%\06\r?bLeKe*l;cXkY\0BL@\n@o\0h%lx=RB's2tpDϧ\"Z=\rBcQ2vBr4lv ^g(% \$\rvС\nP\\~U.R%ٯvГzx_e{3!e,{ewco|0EW!8wѶuitNef:\r(DV@\n{}cAâ׃|*!X¶\r\$LL/ELlU-/WƬc\$l\nUTPNŵt羣SY<,44.s	kv۠R+bdFN!rgs\$?BB2?P\$dtU`U\rāT\"搖EJ@oUx:<3SSIxGzD(7~M|Q~b5+Irzv@wf6#E\"-	(җhS*7\$QlvB%+]2Ohˢrod\rw'!C`biH8ώ(\0 @DdB>,4qHү츠Hbd\0`]e\"b w6;I?uMNj\rbS_!޷wdK\\O}{=ttZ\0DxaN 3Re#w^NPzU=!zLy͸@˸c]l٬[p՞XMspq5*W4Xs^\"@r~|>B5g2	N\$gFu\rzTjB2Anyc^vҸv\nOv:v}\0P[A%3@@Ǌ=cXGy)~u>zĜQXW\"wEwt;mJnfa@Oo;O hVVc^\06,#2s*y2{tXo;lث\n\nZc?`(%4\$&GrT!AݡCmj0ԀC\0D[H/{!Ak!N:5q\0MKC.B7/ @`Ip;PGr`+D<C]ǆ+<,%Hl`09-GsV]J\nu^Vi5/	6\r%T肊:\n!@ nS\"&)mt1f%RVXJtX%@=bU\$`z@X2dD^Pqő4p@\\,B~6??2OP6\0U0@	XKpf6 RR,e8񶁄Z\nk.BfB:7]\"I6JU\$Mpa:4_gpǐ/0@K;pÅTI<AD =!C\nj	忉S<e-a?XRA]@r4ӢӁOD%9n9x'O4-ZtpFK&1f^biB\rPKƢ)%'*Age\r.o@,`BQ7D\$o	*|Z)ҍE9`BC\n0/qبv#?ʽSt3oGmSlFo)?Y#F9SdfGסESyw#>w9籷9xRn8y.).P,+{dtH:!&;	b߈8k-<G4)%ZP֑p~[@.D텸~	(cGˢŨ8Xђ'ڎH=,\noɤBI/!Rt\nvU%DZlRhG*Lp:.V6\"8 Blr\0*<\"3,Ď|R-TGhfLXBtt\0");}elseif($_GET["file"]=="jush.js"){header("Content-Type: text/javascript; charset=utf-8");echo
lzw_decompress('');}elseif($_GET["file"]=="logo.png"){header("Content-Type: image/png");echo"PNG\r\n\n\0\0\0\rIHDR\0\0\09\0\0\09\0\0\0~6\0\0\0000PLTE\0\0\0+NvYtssuIJ/.C\0\0\0tRNS\0@f\0\0\0	pHYs\0\0\0\0\0\0\0IDAT8ՔN@El϶p6G.\$=>	w5r}z7>P#\$Kj7ݶ?4mt&~3!00^Af0\",*4oEX(*Y	6	PcOW܊mr0~/L\rXj#mjC]Gm\0}ߑuA9X\n8VY+D#iqnKQ8J1Q6Y0`PbQ\\h~>:pSɀGEQ=I{*327\neLB~/R(\$) HQni6J	<-.wɪjVmm?SHvƩ\0^q)]U92,;Ǎ'p!X˃LD.tæ/wR	wdr2Ƥ4[=E5S+c\0\0\0\0IENDB`";}exit;}if(!$_SERVER["REQUEST_URI"])$_SERVER["REQUEST_URI"]=$_SERVER["ORIG_PATH_INFO"];if(!strpos($_SERVER["REQUEST_URI"],'?')&&$_SERVER["QUERY_STRING"]!="")$_SERVER["REQUEST_URI"].="?$_SERVER[QUERY_STRING]";if($_SERVER["HTTP_X_FORWARDED_PREFIX"])$_SERVER["REQUEST_URI"]=$_SERVER["HTTP_X_FORWARDED_PREFIX"].$_SERVER["REQUEST_URI"];define('Adminer\HTTPS',($_SERVER["HTTPS"]&&strcasecmp($_SERVER["HTTPS"],"off"))||ini_bool("session.cookie_secure"));@ini_set("session.use_trans_sid",'0');if(!defined("SID")){session_cache_limiter("");session_name("adminer_sid");session_set_cookie_params(0,preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]),"",HTTPS,true);session_start();}if(function_exists("get_magic_quotes_gpc")&&get_magic_quotes_gpc()){$_GET=remove_slashes($_GET,$lc);$_POST=remove_slashes($_POST,$lc);$_COOKIE=remove_slashes($_COOKIE,$lc);}if(function_exists("get_magic_quotes_runtime")&&get_magic_quotes_runtime())set_magic_quotes_runtime(false);@set_time_limit(0);@ini_set("precision",'15');function
lang($s,$ue=null){$ka=func_get_args();$ka[0]=$s;return
call_user_func_array('Adminer\lang_format',$ka);}function
lang_format($Dg,$ue=null){if(is_array($Dg)){$ff=($ue==1?0:1);$Dg=$Dg[$ff];}$Dg=str_replace("'",'’',$Dg);$ka=func_get_args();array_shift($ka);$xc=str_replace("%d","%s",$Dg);if($xc!=$Dg)$ka[0]=format_number($ue);return
vsprintf($xc,$ka);}define('Adminer\LANG','de');abstract
class
SqlDb{static$instance;var$extension;var$flavor='';var$server_info;var$affected_rows=0;var$info='';var$errno=0;var$error='';protected$multi;abstract
function
attach($M,$V,$B);abstract
function
quote($Q);abstract
function
select_db($rb);abstract
function
query($F,$Ng=false);function
multi_query($F){return$this->multi=$this->query($F);}function
store_result(){return$this->multi;}function
next_result(){return
false;}}if(extension_loaded('pdo')){abstract
class
PdoDb
extends
SqlDb{protected$pdo;function
dsn($Gb,$V,$B,array$_=array()){$_[\PDO::ATTR_ERRMODE]=\PDO::ERRMODE_SILENT;$_[\PDO::ATTR_STATEMENT_CLASS]=array('Adminer\PdoResult');try{$this->pdo=new
\PDO($Gb,$V,$B,$_);}catch(\Exception$Xb){return$Xb->getMessage();}$this->server_info=@$this->pdo->getAttribute(\PDO::ATTR_SERVER_VERSION);return'';}function
quote($Q){return$this->pdo->quote($Q);}function
query($F,$Ng=false){$G=$this->pdo->query($F);$this->error="";if(!$G){list(,$this->errno,$this->error)=$this->pdo->errorInfo();if(!$this->error)$this->error='Unbekannter Fehler.';return
false;}$this->store_result($G);return$G;}function
store_result($G=null){if(!$G){$G=$this->multi;if(!$G)return
false;}if($G->columnCount()){$G->num_rows=$G->rowCount();return$G;}$this->affected_rows=$G->rowCount();return
true;}function
next_result(){$G=$this->multi;if(!is_object($G))return
false;$G->_offset=0;return@$G->nextRowset();}}class
PdoResult
extends
\PDOStatement{var$_offset=0,$num_rows;function
fetch_assoc(){return$this->fetch_array(\PDO::FETCH_ASSOC);}function
fetch_row(){return$this->fetch_array(\PDO::FETCH_NUM);}private
function
fetch_array($ge){$H=$this->fetch($ge);return($H?array_map(array($this,'unresource'),$H):$H);}private
function
unresource($X){return(is_resource($X)?stream_get_contents($X):$X);}function
fetch_field(){$I=(object)$this->getColumnMeta($this->_offset++);$U=$I->pdo_type;$I->type=($U==\PDO::PARAM_INT?0:15);$I->charsetnr=($U==\PDO::PARAM_LOB||(isset($I->flags)&&in_array("blob",(array)$I->flags))?63:0);return$I;}function
seek($we){for($q=0;$q<$we;$q++)$this->fetch();}}}function
add_driver($r,$z){SqlDriver::$drivers[$r]=$z;}function
get_driver($r){return
SqlDriver::$drivers[$r];}abstract
class
SqlDriver{static$instance;static$drivers=array();static$extensions=array();static$jush;protected$conn;protected$types=array();var$delimiter=";";var$insertFunctions=array();var$editFunctions=array();var$unsigned=array();var$operators=array();var$functions=array();var$grouping=array();var$onActions="RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT";var$partitionBy=array();var$inout="IN|OUT|INOUT";var$enumLength="'(?:''|[^'\\\\]|\\\\.)*'";var$generated=array();static
function
connect($M,$V,$B){$f=new
Db;return($f->attach($M,$V,$B)?:$f);}function
__construct(Db$f){$this->conn=$f;}function
types(){return
call_user_func_array('array_merge',array_values($this->types));}function
structuredTypes(){return
array_map('array_keys',$this->types);}function
enumLength(array$k){}function
unconvertFunction(array$k){}function
select($R,array$K,array$Z,array$Dc,array$He=array(),$w=1,$A=0,$lf=false){$sd=(count($Dc)<count($K));$F=adminer()->selectQueryBuild($K,$Z,$Dc,$He,$w,$A);if(!$F)$F="SELECT".limit(($_GET["page"]!="last"&&$w&&$Dc&&$sd&&JUSH=="sql"?"SQL_CALC_FOUND_ROWS ":"").implode(", ",$K)."\nFROM ".table($R),($Z?"\nWHERE ".implode(" AND ",$Z):"").($Dc&&$sd?"\nGROUP BY ".implode(", ",$Dc):"").($He?"\nORDER BY ".implode(", ",$He):""),$w,($A?$w*$A:0),"\n");$cg=microtime(true);$H=$this->conn->query($F);if($lf)echo
adminer()->selectQuery($F,$cg,!$H);return$H;}function
delete($R,$pf,$w=0){$F="FROM ".table($R);return
queries("DELETE".($w?limit1($R,$F,$pf):" $F$pf"));}function
update($R,array$N,$pf,$w=0,$L="\n"){$gh=array();foreach($N
as$v=>$X)$gh[]="$v = $X";$F=table($R)." SET$L".implode(",$L",$gh);return
queries("UPDATE".($w?limit1($R,$F,$pf,$L):" $F$pf"));}function
insert($R,array$N){return
queries("INSERT INTO ".table($R).($N?" (".implode(", ",array_keys($N)).")\nVALUES (".implode(", ",$N).")":" DEFAULT VALUES").$this->insertReturning($R));}function
insertReturning($R){return"";}function
insertUpdate($R,array$J,array$D){return
false;}function
begin(){return
queries("BEGIN");}function
commit(){return
queries("COMMIT");}function
rollback(){return
queries("ROLLBACK");}function
slowQuery($F,$ug){}function
convertSearch($s,array$X,array$k){return$s;}function
value($X,array$k){return(method_exists($this->conn,'value')?$this->conn->value($X,$k):$X);}function
quoteBinary($Df){return
q($Df);}function
warnings(){}function
tableHelp($z,$vd=false){}function
inheritsFrom($R){return
array();}function
inheritedTables($R){return
array();}function
partitionsInfo($R){return
array();}function
hasCStyleEscapes(){return
false;}function
engines(){return
array();}function
supportsIndex(array$S){return!is_view($S);}function
indexAlgorithms(array$jg){return
array();}function
checkConstraints($R){return
get_key_vals("SELECT c.CONSTRAINT_NAME, CHECK_CLAUSE
FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS c
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t ON c.CONSTRAINT_SCHEMA = t.CONSTRAINT_SCHEMA AND c.CONSTRAINT_NAME = t.CONSTRAINT_NAME".($this->conn->flavor=='maria'?" AND c.TABLE_NAME = t.TABLE_NAME":"")."
WHERE c.CONSTRAINT_SCHEMA = ".q($_GET["ns"]!=""?$_GET["ns"]:DB)."
AND t.TABLE_NAME = ".q($R).(JUSH=="pgsql"?"
AND CHECK_CLAUSE NOT LIKE '% IS NOT NULL'":""),$this->conn);}function
allFields(){$H=array();if(DB!=""){foreach(get_rows("SELECT TABLE_NAME AS tab, COLUMN_NAME AS field, IS_NULLABLE AS nullable, DATA_TYPE AS type, CHARACTER_MAXIMUM_LENGTH AS length".(JUSH=='sql'?", COLUMN_KEY = 'PRI' AS `primary`":"")."
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = ".q($_GET["ns"]!=""?$_GET["ns"]:DB)."
ORDER BY TABLE_NAME, ORDINAL_POSITION",$this->conn)as$I){$I["null"]=($I["nullable"]=="YES");$H[$I["tab"]][]=$I;}}return$H;}}add_driver("sqlite","SQLite");if(isset($_GET["sqlite"])){define('Adminer\DRIVER',"sqlite");if(class_exists("SQLite3")&&$_GET["ext"]!="pdo"){abstract
class
SqliteDb
extends
SqlDb{var$extension="SQLite3";private$link;function
attach($m,$V,$B){$this->link=new
\SQLite3($m);$ih=$this->link->version();$this->server_info=$ih["versionString"];return'';}function
query($F,$Ng=false){$G=@$this->link->query($F);$this->error="";if(!$G){$this->errno=$this->link->lastErrorCode();$this->error=$this->link->lastErrorMsg();return
false;}elseif($G->numColumns())return
new
Result($G);$this->affected_rows=$this->link->changes();return
true;}function
quote($Q){return(is_utf8($Q)?"'".$this->link->escapeString($Q)."'":"x'".first(unpack('H*',$Q))."'");}}class
Result{var$num_rows;private$result,$offset=0;function
__construct($G){$this->result=$G;}function
fetch_assoc(){return$this->result->fetchArray(SQLITE3_ASSOC);}function
fetch_row(){return$this->result->fetchArray(SQLITE3_NUM);}function
fetch_field(){$d=$this->offset++;$U=$this->result->columnType($d);return(object)array("name"=>$this->result->columnName($d),"type"=>($U==SQLITE3_TEXT?15:0),"charsetnr"=>($U==SQLITE3_BLOB?63:0),);}function
__destruct(){$this->result->finalize();}}}elseif(extension_loaded("pdo_sqlite")){abstract
class
SqliteDb
extends
PdoDb{var$extension="PDO_SQLite";function
attach($m,$V,$B){return$this->dsn(DRIVER.":$m","","");}}}if(class_exists('Adminer\SqliteDb')){class
Db
extends
SqliteDb{function
attach($m,$V,$B){parent::attach($m,$V,$B);$this->query("PRAGMA foreign_keys = 1");$this->query("PRAGMA busy_timeout = 500");return'';}function
select_db($m){if(is_readable($m)&&$this->query("ATTACH ".$this->quote(preg_match("~(^[/\\\\]|:)~",$m)?$m:dirname($_SERVER["SCRIPT_FILENAME"])."/$m")." AS a"))return!self::attach($m,'','');return
false;}}}class
Driver
extends
SqlDriver{static$extensions=array("SQLite3","PDO_SQLite");static$jush="sqlite";protected$types=array(array("integer"=>0,"real"=>0,"numeric"=>0,"text"=>0,"blob"=>0));var$insertFunctions=array();var$editFunctions=array("integer|real|numeric"=>"+/-","text"=>"||",);var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL","SQL");var$functions=array("hex","length","lower","round","unixepoch","upper");var$grouping=array("avg","count","count distinct","group_concat","max","min","sum");static
function
connect($M,$V,$B){if($B!="")return'Die Datenbank unterstützt kein Passwort.';return
parent::connect(":memory:","","");}function
__construct(Db$f){parent::__construct($f);if(min_version(3.31,0,$f))$this->generated=array("STORED","VIRTUAL");}function
structuredTypes(){return
array_keys($this->types[0]);}function
insertUpdate($R,array$J,array$D){$gh=array();foreach($J
as$N)$gh[]="(".implode(", ",$N).")";return
queries("REPLACE INTO ".table($R)." (".implode(", ",array_keys(reset($J))).") VALUES\n".implode(",\n",$gh));}function
tableHelp($z,$vd=false){if($z=="sqlite_sequence")return"fileformat2.html#seqtab";if($z=="sqlite_master")return"fileformat2.html#$z";}function
checkConstraints($R){preg_match_all('~ CHECK *(\( *(((?>[^()]*[^() ])|(?1))*) *\))~',get_val("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ".q($R),0,$this->conn),$Sd);return
array_combine($Sd[2],$Sd[2]);}function
allFields(){$H=array();foreach(tables_list()as$R=>$U){foreach(fields($R)as$k)$H[$R][]=$k;}return$H;}}function
idf_escape($s){return'"'.str_replace('"','""',$s).'"';}function
table($s){return
idf_escape($s);}function
get_databases($rc){return
array();}function
limit($F,$Z,$w,$we=0,$L=" "){return" $F$Z".($w?$L."LIMIT $w".($we?" OFFSET $we":""):"");}function
limit1($R,$F,$Z,$L="\n"){return(preg_match('~^INTO~',$F)||get_val("SELECT sqlite_compileoption_used('ENABLE_UPDATE_DELETE_LIMIT')")?limit($F,$Z,1,0,$L):" $F WHERE rowid = (SELECT rowid FROM ".table($R).$Z.$L."LIMIT 1)");}function
db_collation($h,$Ua){return
get_val("PRAGMA encoding");}function
logged_user(){return
get_current_user();}function
tables_list(){return
get_key_vals("SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') ORDER BY (name = 'sqlite_sequence'), name");}function
count_tables($sb){return
array();}function
table_status($z=""){$H=array();foreach(get_rows("SELECT name AS Name, type AS Engine, 'rowid' AS Oid, '' AS Auto_increment FROM sqlite_master WHERE type IN ('table', 'view') ".($z!=""?"AND name = ".q($z):"ORDER BY name"))as$I){$I["Rows"]=get_val("SELECT COUNT(*) FROM ".idf_escape($I["Name"]));$H[$I["Name"]]=$I;}foreach(get_rows("SELECT * FROM sqlite_sequence".($z!=""?" WHERE name = ".q($z):""),null,"")as$I)$H[$I["name"]]["Auto_increment"]=$I["seq"];return$H;}function
is_view($S){return$S["Engine"]=="view";}function
fk_support($S){return!get_val("SELECT sqlite_compileoption_used('OMIT_FOREIGN_KEY')");}function
fields($R){$H=array();$D="";foreach(get_rows("PRAGMA table_".(min_version(3.31)?"x":"")."info(".table($R).")")as$I){$z=$I["name"];$U=strtolower($I["type"]);$i=$I["dflt_value"];$H[$z]=array("field"=>$z,"type"=>(preg_match('~int~i',$U)?"integer":(preg_match('~char|clob|text~i',$U)?"text":(preg_match('~blob~i',$U)?"blob":(preg_match('~real|floa|doub~i',$U)?"real":"numeric")))),"full_type"=>$U,"default"=>(preg_match("~^'(.*)'$~",$i,$y)?str_replace("''","'",$y[1]):($i=="NULL"?null:$i)),"null"=>!$I["notnull"],"privileges"=>array("select"=>1,"insert"=>1,"update"=>1,"where"=>1,"order"=>1),"primary"=>$I["pk"],);if($I["pk"]){if($D!="")$H[$D]["auto_increment"]=false;elseif(preg_match('~^integer$~i',$U))$H[$z]["auto_increment"]=true;$D=$z;}}$Zf=get_val("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ".q($R));$s='(("[^"]*+")+|[a-z0-9_]+)';preg_match_all('~'.$s.'\s+text\s+COLLATE\s+(\'[^\']+\'|\S+)~i',$Zf,$Sd,PREG_SET_ORDER);foreach($Sd
as$y){$z=str_replace('""','"',preg_replace('~^"|"$~','',$y[1]));if($H[$z])$H[$z]["collation"]=trim($y[3],"'");}preg_match_all('~'.$s.'\s.*GENERATED ALWAYS AS \((.+)\) (STORED|VIRTUAL)~i',$Zf,$Sd,PREG_SET_ORDER);foreach($Sd
as$y){$z=str_replace('""','"',preg_replace('~^"|"$~','',$y[1]));$H[$z]["default"]=$y[3];$H[$z]["generated"]=strtoupper($y[4]);}return$H;}function
indexes($R,$g=null){$g=connection($g);$H=array();$Zf=get_val("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ".q($R),0,$g);if(preg_match('~\bPRIMARY\s+KEY\s*\((([^)"]+|"[^"]*"|`[^`]*`)++)~i',$Zf,$y)){$H[""]=array("type"=>"PRIMARY","columns"=>array(),"lengths"=>array(),"descs"=>array());preg_match_all('~((("[^"]*+")+|(?:`[^`]*+`)+)|(\S+))(\s+(ASC|DESC))?(,\s*|$)~i',$y[1],$Sd,PREG_SET_ORDER);foreach($Sd
as$y){$H[""]["columns"][]=idf_unescape($y[2]).$y[4];$H[""]["descs"][]=(preg_match('~DESC~i',$y[5])?'1':null);}}if(!$H){foreach(fields($R)as$z=>$k){if($k["primary"])$H[""]=array("type"=>"PRIMARY","columns"=>array($z),"lengths"=>array(),"descs"=>array(null));}}$bg=get_key_vals("SELECT name, sql FROM sqlite_master WHERE type = 'index' AND tbl_name = ".q($R),$g);foreach(get_rows("PRAGMA index_list(".table($R).")",$g)as$I){$z=$I["name"];$t=array("type"=>($I["unique"]?"UNIQUE":"INDEX"));$t["lengths"]=array();$t["descs"]=array();foreach(get_rows("PRAGMA index_info(".idf_escape($z).")",$g)as$Cf){$t["columns"][]=$Cf["name"];$t["descs"][]=null;}if(preg_match('~^CREATE( UNIQUE)? INDEX '.preg_quote(idf_escape($z).' ON '.idf_escape($R),'~').' \((.*)\)$~i',$bg[$z],$vf)){preg_match_all('/("[^"]*+")+( DESC)?/',$vf[2],$Sd);foreach($Sd[2]as$v=>$X){if($X)$t["descs"][$v]='1';}}if(!$H[""]||$t["type"]!="UNIQUE"||$t["columns"]!=$H[""]["columns"]||$t["descs"]!=$H[""]["descs"]||!preg_match("~^sqlite_~",$z))$H[$z]=$t;}return$H;}function
foreign_keys($R){$H=array();foreach(get_rows("PRAGMA foreign_key_list(".table($R).")")as$I){$n=&$H[$I["id"]];if(!$n)$n=$I;$n["source"][]=$I["from"];$n["target"][]=$I["to"];}return$H;}function
view($z){return
array("select"=>preg_replace('~^(?:[^`"[]+|`[^`]*`|"[^"]*")* AS\s+~iU','',get_val("SELECT sql FROM sqlite_master WHERE type = 'view' AND name = ".q($z))));}function
collations(){return(isset($_GET["create"])?get_vals("PRAGMA collation_list",1):array());}function
information_schema($h){return
false;}function
error(){return
h(connection()->error);}function
check_sqlite_name($z){$cc="db|sdb|sqlite";if(!preg_match("~^[^\\0]*\\.($cc)\$~",$z)){connection()->error=sprintf('Bitte einen der Dateitypen %s benutzen.',str_replace("|",", ",$cc));return
false;}return
true;}function
create_database($h,$c){if(file_exists($h)){connection()->error='Datei existiert schon.';return
false;}if(!check_sqlite_name($h))return
false;try{$x=new
Db();$x->attach($h,'','');}catch(\Exception$Xb){connection()->error=$Xb->getMessage();return
false;}$x->query('PRAGMA encoding = "UTF-8"');$x->query('CREATE TABLE adminer (i)');$x->query('DROP TABLE adminer');return
true;}function
drop_databases($sb){connection()->attach(":memory:",'','');foreach($sb
as$h){if(!@unlink($h)){connection()->error='Datei existiert schon.';return
false;}}return
true;}function
rename_database($z,$c){if(!check_sqlite_name($z))return
false;connection()->attach(":memory:",'','');connection()->error='Datei existiert schon.';return@rename(DB,$z);}function
auto_increment(){return" PRIMARY KEY AUTOINCREMENT";}function
alter_table($R,$z,$l,$tc,$Ya,$Pb,$c,$ra,$Xe){$ah=($R==""||$tc);foreach($l
as$k){if($k[0]!=""||!$k[1]||$k[2]){$ah=true;break;}}$b=array();$Ne=array();foreach($l
as$k){if($k[1]){$b[]=($ah?$k[1]:"ADD ".implode($k[1]));if($k[0]!="")$Ne[$k[0]]=$k[1][0];}}if(!$ah){foreach($b
as$X){if(!queries("ALTER TABLE ".table($R)." $X"))return
false;}if($R!=$z&&!queries("ALTER TABLE ".table($R)." RENAME TO ".table($z)))return
false;}elseif(!recreate_table($R,$z,$b,$Ne,$tc,$ra))return
false;if($ra){queries("BEGIN");queries("UPDATE sqlite_sequence SET seq = $ra WHERE name = ".q($z));if(!connection()->affected_rows)queries("INSERT INTO sqlite_sequence (name, seq) VALUES (".q($z).", $ra)");queries("COMMIT");}return
true;}function
recreate_table($R,$z,array$l,array$Ne,array$tc,$ra="",$u=array(),$Eb="",$ca=""){if($R!=""){if(!$l){foreach(fields($R)as$v=>$k){if($u)$k["auto_increment"]=0;$l[]=process_field($k,$k);$Ne[$v]=idf_escape($v);}}$kf=false;foreach($l
as$k){if($k[6])$kf=true;}$Fb=array();foreach($u
as$v=>$X){if($X[2]=="DROP"){$Fb[$X[1]]=true;unset($u[$v]);}}foreach(indexes($R)as$zd=>$t){$e=array();foreach($t["columns"]as$v=>$d){if(!$Ne[$d])continue
2;$e[]=$Ne[$d].($t["descs"][$v]?" DESC":"");}if(!$Fb[$zd]){if($t["type"]!="PRIMARY"||!$kf)$u[]=array($t["type"],$zd,$e);}}foreach($u
as$v=>$X){if($X[0]=="PRIMARY"){unset($u[$v]);$tc[]="  PRIMARY KEY (".implode(", ",$X[2]).")";}}foreach(foreign_keys($R)as$zd=>$n){foreach($n["source"]as$v=>$d){if(!$Ne[$d])continue
2;$n["source"][$v]=idf_unescape($Ne[$d]);}if(!isset($tc[" $zd"]))$tc[]=" ".format_foreign_key($n);}queries("BEGIN");}$Ia=array();foreach($l
as$k){if(preg_match('~GENERATED~',$k[3]))unset($Ne[array_search($k[0],$Ne)]);$Ia[]="  ".implode($k);}$Ia=array_merge($Ia,array_filter($tc));foreach(driver()->checkConstraints($R)as$Ka){if($Ka!=$Eb)$Ia[]="  CHECK ($Ka)";}if($ca)$Ia[]="  CHECK ($ca)";$og=($R==$z?"adminer_$z":$z);if(!queries("CREATE TABLE ".table($og)." (\n".implode(",\n",$Ia)."\n)"))return
false;if($R!=""){if($Ne&&!queries("INSERT INTO ".table($og)." (".implode(", ",$Ne).") SELECT ".implode(", ",array_map('Adminer\idf_escape',array_keys($Ne)))." FROM ".table($R)))return
false;$Kg=array();foreach(triggers($R)as$Ig=>$vg){$Hg=trigger($Ig,$R);$Kg[]="CREATE TRIGGER ".idf_escape($Ig)." ".implode(" ",$vg)." ON ".table($z)."\n$Hg[Statement]";}$ra=$ra?"":get_val("SELECT seq FROM sqlite_sequence WHERE name = ".q($R));if(!queries("DROP TABLE ".table($R))||($R==$z&&!queries("ALTER TABLE ".table($og)." RENAME TO ".table($z)))||!alter_indexes($z,$u))return
false;if($ra)queries("UPDATE sqlite_sequence SET seq = $ra WHERE name = ".q($z));foreach($Kg
as$Hg){if(!queries($Hg))return
false;}queries("COMMIT");}return
true;}function
index_sql($R,$U,$z,$e){return"CREATE $U ".($U!="INDEX"?"INDEX ":"").idf_escape($z!=""?$z:uniqid($R."_"))." ON ".table($R)." $e";}function
alter_indexes($R,$b){foreach($b
as$D){if($D[0]=="PRIMARY")return
recreate_table($R,$R,array(),array(),array(),"",$b);}foreach(array_reverse($b)as$X){if(!queries($X[2]=="DROP"?"DROP INDEX ".idf_escape($X[1]):index_sql($R,$X[0],$X[1],"(".implode(", ",$X[2]).")")))return
false;}return
true;}function
truncate_tables($T){return
apply_queries("DELETE FROM",$T);}function
drop_views($kh){return
apply_queries("DROP VIEW",$kh);}function
drop_tables($T){return
apply_queries("DROP TABLE",$T);}function
move_tables($T,$kh,$ng){return
false;}function
trigger($z,$R){if($z=="")return
array("Statement"=>"BEGIN\n\t;\nEND");$s='(?:[^`"\s]+|`[^`]*`|"[^"]*")+';$Jg=trigger_options();preg_match("~^CREATE\\s+TRIGGER\\s*$s\\s*(".implode("|",$Jg["Timing"]).")\\s+([a-z]+)(?:\\s+OF\\s+($s))?\\s+ON\\s*$s\\s*(?:FOR\\s+EACH\\s+ROW\\s)?(.*)~is",get_val("SELECT sql FROM sqlite_master WHERE type = 'trigger' AND name = ".q($z)),$y);$ve=$y[3];return
array("Timing"=>strtoupper($y[1]),"Event"=>strtoupper($y[2]).($ve?" OF":""),"Of"=>idf_unescape($ve),"Trigger"=>$z,"Statement"=>$y[4],);}function
triggers($R){$H=array();$Jg=trigger_options();foreach(get_rows("SELECT * FROM sqlite_master WHERE type = 'trigger' AND tbl_name = ".q($R))as$I){preg_match('~^CREATE\s+TRIGGER\s*(?:[^`"\s]+|`[^`]*`|"[^"]*")+\s*('.implode("|",$Jg["Timing"]).')\s*(.*?)\s+ON\b~i',$I["sql"],$y);$H[$I["name"]]=array($y[1],$y[2]);}return$H;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER","INSTEAD OF"),"Event"=>array("INSERT","UPDATE","UPDATE OF","DELETE"),"Type"=>array("FOR EACH ROW"),);}function
begin(){return
queries("BEGIN");}function
last_id($G){return
get_val("SELECT LAST_INSERT_ROWID()");}function
explain($f,$F){return$f->query("EXPLAIN QUERY PLAN $F");}function
found_rows($S,$Z){}function
types(){return
array();}function
create_sql($R,$ra,$eg){$H=get_val("SELECT sql FROM sqlite_master WHERE type IN ('table', 'view') AND name = ".q($R));foreach(indexes($R)as$z=>$t){if($z=='')continue;$H
.=";\n\n".index_sql($R,$t['type'],$z,"(".implode(", ",array_map('Adminer\idf_escape',$t['columns'])).")");}return$H;}function
truncate_sql($R){return"DELETE FROM ".table($R);}function
use_sql($rb,$eg=""){}function
trigger_sql($R){return
implode(get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND tbl_name = ".q($R)));}function
show_variables(){$H=array();foreach(get_rows("PRAGMA pragma_list")as$I){$z=$I["name"];if($z!="pragma_list"&&$z!="compile_options"){$H[$z]=array($z,'');foreach(get_rows("PRAGMA $z")as$I)$H[$z][1].=implode(", ",$I)."\n";}}return$H;}function
show_status(){$H=array();foreach(get_vals("PRAGMA compile_options")as$Fe)$H[]=explode("=",$Fe,2)+array('','');return$H;}function
convert_field($k){}function
unconvert_field($k,$H){return$H;}function
support($gc){return
preg_match('~^(check|columns|database|drop_col|dump|indexes|descidx|move_col|sql|status|table|trigger|variables|view|view_trigger)$~',$gc);}}add_driver("pgsql","PostgreSQL");if(isset($_GET["pgsql"])){define('Adminer\DRIVER',"pgsql");if(extension_loaded("pgsql")&&$_GET["ext"]!="pdo"){class
PgsqlDb
extends
SqlDb{var$extension="PgSQL";var$timeout=0;private$link,$string,$database=true;function
_error($Ub,$j){if(ini_bool("html_errors"))$j=html_entity_decode(strip_tags($j));$j=preg_replace('~^[^:]*: ~','',$j);$this->error=$j;}function
attach($M,$V,$B){$h=adminer()->database();set_error_handler(array($this,'_error'));list($Tc,$C)=host_port(addcslashes($M,"'\\"));$this->string="host='$Tc'".($C?" port='$C'":"")." user='".addcslashes($V,"'\\")."' password='".addcslashes($B,"'\\")."'";$O=adminer()->connectSsl();if(isset($O["mode"]))$this->string
.=" sslmode='".$O["mode"]."'";$this->link=@pg_connect("$this->string dbname='".($h!=""?addcslashes($h,"'\\"):"postgres")."'",PGSQL_CONNECT_FORCE_NEW);if(!$this->link&&$h!=""){$this->database=false;$this->link=@pg_connect("$this->string dbname='postgres'",PGSQL_CONNECT_FORCE_NEW);}restore_error_handler();if($this->link)pg_set_client_encoding($this->link,"UTF8");return($this->link?'':$this->error);}function
quote($Q){return(function_exists('pg_escape_literal')?pg_escape_literal($this->link,$Q):"'".pg_escape_string($this->link,$Q)."'");}function
value($X,array$k){return($k["type"]=="bytea"&&$X!==null?pg_unescape_bytea($X):$X);}function
select_db($rb){if($rb==adminer()->database())return$this->database;$H=@pg_connect("$this->string dbname='".addcslashes($rb,"'\\")."'",PGSQL_CONNECT_FORCE_NEW);if($H)$this->link=$H;return$H;}function
close(){$this->link=@pg_connect("$this->string dbname='postgres'");}function
query($F,$Ng=false){$G=@pg_query($this->link,$F);$this->error="";if(!$G){$this->error=pg_last_error($this->link);$H=false;}elseif(!pg_num_fields($G)){$this->affected_rows=pg_affected_rows($G);$H=true;}else$H=new
Result($G);if($this->timeout){$this->timeout=0;$this->query("RESET statement_timeout");}return$H;}function
warnings(){return
h(pg_last_notice($this->link));}function
copyFrom($R,array$J){$this->error='';set_error_handler(function($Ub,$j){$this->error=(ini_bool('html_errors')?html_entity_decode($j):$j);return
true;});$H=pg_copy_from($this->link,$R,$J);restore_error_handler();return$H;}}class
Result{var$num_rows;private$result,$offset=0;function
__construct($G){$this->result=$G;$this->num_rows=pg_num_rows($G);}function
fetch_assoc(){return
pg_fetch_assoc($this->result);}function
fetch_row(){return
pg_fetch_row($this->result);}function
fetch_field(){$d=$this->offset++;$H=new
\stdClass;$H->orgtable=pg_field_table($this->result,$d);$H->name=pg_field_name($this->result,$d);$U=pg_field_type($this->result,$d);$H->type=(preg_match(number_type(),$U)?0:15);$H->charsetnr=($U=="bytea"?63:0);return$H;}function
__destruct(){pg_free_result($this->result);}}}elseif(extension_loaded("pdo_pgsql")){class
PgsqlDb
extends
PdoDb{var$extension="PDO_PgSQL";var$timeout=0;function
attach($M,$V,$B){$h=adminer()->database();list($Tc,$C)=host_port(addcslashes($M,"'\\"));$Gb="pgsql:host='$Tc'".($C?" port='$C'":"")." client_encoding=utf8 dbname='".($h!=""?addcslashes($h,"'\\"):"postgres")."'";$O=adminer()->connectSsl();if(isset($O["mode"]))$Gb
.=" sslmode='".$O["mode"]."'";return$this->dsn($Gb,$V,$B);}function
select_db($rb){return(adminer()->database()==$rb);}function
query($F,$Ng=false){$H=parent::query($F,$Ng);if($this->timeout){$this->timeout=0;parent::query("RESET statement_timeout");}return$H;}function
warnings(){}function
copyFrom($R,array$J){$H=$this->pdo->pgsqlCopyFromArray($R,$J);$this->error=idx($this->pdo->errorInfo(),2)?:'';return$H;}function
close(){}}}if(class_exists('Adminer\PgsqlDb')){class
Db
extends
PgsqlDb{function
multi_query($F){if(preg_match('~\bCOPY\s+(.+?)\s+FROM\s+stdin;\n?(.*)\n\\\\\.$~is',str_replace("\r\n","\n",$F),$y)){$J=explode("\n",$y[2]);$this->affected_rows=count($J);return$this->copyFrom($y[1],$J);}return
parent::multi_query($F);}}}class
Driver
extends
SqlDriver{static$extensions=array("PgSQL","PDO_PgSQL");static$jush="pgsql";var$operators=array("=","<",">","<=",">=","!=","~","!~","LIKE","LIKE %%","ILIKE","ILIKE %%","IN","IS NULL","NOT LIKE","NOT ILIKE","NOT IN","IS NOT NULL","SQL");var$functions=array("char_length","lower","round","to_hex","to_timestamp","upper");var$grouping=array("avg","count","count distinct","max","min","sum");var$nsOid="(SELECT oid FROM pg_namespace WHERE nspname = current_schema())";static
function
connect($M,$V,$B){$f=parent::connect($M,$V,$B);if(is_string($f))return$f;$ih=get_val("SELECT version()",0,$f);$f->flavor=(preg_match('~CockroachDB~',$ih)?'cockroach':'');$f->server_info=preg_replace('~^\D*([\d.]+[-\w]*).*~','\1',$ih);if(min_version(9,0,$f))$f->query("SET application_name = 'Adminer'");if($f->flavor=='cockroach')add_driver(DRIVER,"CockroachDB");return$f;}function
__construct(Db$f){parent::__construct($f);$this->types=array('Zahlen'=>array("smallint"=>5,"integer"=>10,"bigint"=>19,"boolean"=>1,"numeric"=>0,"real"=>7,"double precision"=>16,"money"=>20),'Datum und Zeit'=>array("date"=>13,"time"=>17,"timestamp"=>20,"timestamptz"=>21,"interval"=>0),'Zeichenketten'=>array("character"=>0,"character varying"=>0,"text"=>0,"tsquery"=>0,"tsvector"=>0,"uuid"=>0,"xml"=>0),'Binär'=>array("bit"=>0,"bit varying"=>0,"bytea"=>0),'Netzwerk'=>array("cidr"=>43,"inet"=>43,"macaddr"=>17,"macaddr8"=>23,"txid_snapshot"=>0),'Geometrie'=>array("box"=>0,"circle"=>0,"line"=>0,"lseg"=>0,"path"=>0,"point"=>0,"polygon"=>0),);if(min_version(9.2,0,$f)){$this->types['Zeichenketten']["json"]=4294967295;if(min_version(9.4,0,$f))$this->types['Zeichenketten']["jsonb"]=4294967295;}$this->insertFunctions=array("char"=>"md5","date|time"=>"now",);$this->editFunctions=array(number_type()=>"+/-","date|time"=>"+ interval/- interval","char|text"=>"||",);if(min_version(12,0,$f))$this->generated=array("STORED");$this->partitionBy=array("RANGE","LIST");if(!$f->flavor)$this->partitionBy[]="HASH";}function
enumLength(array$k){$Qb=$this->types['Benutzerdefinierte Typen'][$k["type"]];return($Qb?type_values($Qb):"");}function
setUserTypes($Mg){$this->types['Benutzerdefinierte Typen']=array_flip($Mg);}function
insertReturning($R){$ra=array_filter(fields($R),function($k){return$k['auto_increment'];});return(count($ra)==1?" RETURNING ".idf_escape(key($ra)):"");}function
insertUpdate($R,array$J,array$D){foreach($J
as$N){$Vg=array();$Z=array();foreach($N
as$v=>$X){$Vg[]="$v = $X";if(isset($D[idf_unescape($v)]))$Z[]="$v = $X";}if(!(($Z&&queries("UPDATE ".table($R)." SET ".implode(", ",$Vg)." WHERE ".implode(" AND ",$Z))&&$this->conn->affected_rows)||queries("INSERT INTO ".table($R)." (".implode(", ",array_keys($N)).") VALUES (".implode(", ",$N).")")))return
false;}return
true;}function
slowQuery($F,$ug){$this->conn->query("SET statement_timeout = ".(1000*$ug));$this->conn->timeout=1000*$ug;return$F;}function
convertSearch($s,array$X,array$k){$qg="char|text";if(strpos($X["op"],"LIKE")===false)$qg
.="|date|time(stamp)?|boolean|uuid|inet|cidr|macaddr|".number_type();return(preg_match("~$qg~",$k["type"])?$s:"CAST($s AS text)");}function
quoteBinary($Df){return"'\\x".bin2hex($Df)."'";}function
warnings(){return$this->conn->warnings();}function
tableHelp($z,$vd=false){$Kd=array("information_schema"=>"infoschema","pg_catalog"=>($vd?"view":"catalog"),);$x=$Kd[$_GET["ns"]];if($x)return"$x-".str_replace("_","-",$z).".html";}function
inheritsFrom($R){return
get_rows("SELECT relname AS table, nspname AS ns FROM pg_class JOIN pg_inherits ON inhparent = oid JOIN pg_namespace ON relnamespace = pg_namespace.oid WHERE inhrelid = ".$this->tableOid($R)." ORDER BY 2, 1");}function
inheritedTables($R){return
get_rows("SELECT relname AS table, nspname AS ns FROM pg_inherits JOIN pg_class ON inhrelid = oid JOIN pg_namespace ON relnamespace = pg_namespace.oid WHERE inhparent = ".$this->tableOid($R)." ORDER BY 2, 1");}function
partitionsInfo($R){$I=(min_version(10)?$this->conn->query("SELECT * FROM pg_partitioned_table WHERE partrelid = ".$this->tableOid($R))->fetch_assoc():null);if($I){$pa=get_vals("SELECT attname FROM pg_attribute WHERE attrelid = $I[partrelid] AND attnum IN (".str_replace(" ",", ",$I["partattrs"]).")");$Fa=array('h'=>'HASH','l'=>'LIST','r'=>'RANGE');return
array("partition_by"=>$Fa[$I["partstrat"]],"partition"=>implode(", ",array_map('Adminer\idf_escape',$pa)),);}return
array();}function
tableOid($R){return"(SELECT oid FROM pg_class WHERE relnamespace = $this->nsOid AND relname = ".q($R)." AND relkind IN ('r', 'm', 'v', 'f', 'p'))";}function
indexAlgorithms(array$jg){static$H=array();if(!$H)$H=get_vals("SELECT amname FROM pg_am".(min_version(9.6)?" WHERE amtype = 'i'":"")." ORDER BY amname = '".($this->conn->flavor=='cockroach'?"prefix":"btree")."' DESC, amname");return$H;}function
supportsIndex(array$S){return$S["Engine"]!="view";}function
hasCStyleEscapes(){static$Ha;if($Ha===null)$Ha=(get_val("SHOW standard_conforming_strings",0,$this->conn)=="off");return$Ha;}}function
idf_escape($s){return'"'.str_replace('"','""',$s).'"';}function
table($s){return
idf_escape($s);}function
get_databases($rc){return
get_vals("SELECT datname FROM pg_database
WHERE datallowconn = TRUE AND has_database_privilege(datname, 'CONNECT')
ORDER BY datname");}function
limit($F,$Z,$w,$we=0,$L=" "){return" $F$Z".($w?$L."LIMIT $w".($we?" OFFSET $we":""):"");}function
limit1($R,$F,$Z,$L="\n"){return(preg_match('~^INTO~',$F)?limit($F,$Z,1,0,$L):" $F".(is_view(table_status1($R))?$Z:$L."WHERE ctid = (SELECT ctid FROM ".table($R).$Z.$L."LIMIT 1)"));}function
db_collation($h,$Ua){return
get_val("SELECT datcollate FROM pg_database WHERE datname = ".q($h));}function
logged_user(){return
get_val("SELECT user");}function
tables_list(){$F="SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema()";if(support("materializedview"))$F
.="
UNION ALL
SELECT matviewname, 'MATERIALIZED VIEW'
FROM pg_matviews
WHERE schemaname = current_schema()";$F
.="
ORDER BY 1";return
get_key_vals($F);}function
count_tables($sb){$H=array();foreach($sb
as$h){if(connection()->select_db($h))$H[$h]=count(tables_list());}return$H;}function
table_status($z=""){static$Mc;if($Mc===null)$Mc=get_val("SELECT 'pg_table_size'::regproc");$H=array();foreach(get_rows("SELECT
	relname AS \"Name\",
	CASE relkind WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' ELSE 'table' END AS \"Engine\"".($Mc?",
	pg_table_size(c.oid) AS \"Data_length\",
	pg_indexes_size(c.oid) AS \"Index_length\"":"").",
	obj_description(c.oid, 'pg_class') AS \"Comment\",
	".(min_version(12)?"''":"CASE WHEN relhasoids THEN 'oid' ELSE '' END")." AS \"Oid\",
	reltuples AS \"Rows\",
	".(min_version(10)?"relispartition::int AS partition,":"")."
	current_schema() AS nspname
FROM pg_class c
WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
AND relnamespace = ".driver()->nsOid."
".($z!=""?"AND relname = ".q($z):"ORDER BY relname"))as$I)$H[$I["Name"]]=$I;return$H;}function
is_view($S){return
in_array($S["Engine"],array("view","materialized view"));}function
fk_support($S){return
true;}function
fields($R){$H=array();$ia=array('timestamp without time zone'=>'timestamp','timestamp with time zone'=>'timestamptz',);foreach(get_rows("SELECT
	a.attname AS field,
	format_type(a.atttypid, a.atttypmod) AS full_type,
	pg_get_expr(d.adbin, d.adrelid) AS default,
	a.attnotnull::int,
	i.indrelid AS primary,
	col_description(a.attrelid, a.attnum) AS comment".(min_version(10)?",
	a.attidentity".(min_version(12)?",
	a.attgenerated":""):"")."
FROM pg_attribute a
LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
LEFT JOIN pg_index i ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey) AND i.indisprimary
WHERE a.attrelid = ".driver()->tableOid($R)."
AND NOT a.attisdropped
AND a.attnum > 0
ORDER BY a.attnum")as$I){preg_match('~([^([]+)(\((.*)\))?([a-z ]+)?((\[[0-9]*])*)$~',$I["full_type"],$y);list(,$U,$Hd,$I["length"],$da,$la)=$y;$I["length"].=$la;$La=$U.$da;if(isset($ia[$La])){$I["type"]=$ia[$La];$I["full_type"]=$I["type"].$Hd.$la;}else{$I["type"]=$U;$I["full_type"]=$I["type"].$Hd.$da.$la;}if(in_array($I['attidentity'],array('a','d')))$I['default']='GENERATED '.($I['attidentity']=='d'?'BY DEFAULT':'ALWAYS').' AS IDENTITY';$I["generated"]=($I["attgenerated"]=="s"?"STORED":"");$I["null"]=!$I["attnotnull"];$I["auto_increment"]=$I['attidentity']||preg_match('~^nextval\(~i',$I["default"])||preg_match('~^unique_rowid\(~',$I["default"]);$I["privileges"]=array("insert"=>1,"select"=>1,"update"=>1,"where"=>1,"order"=>1);if(!$I['generated']&&preg_match('~(.+)::[^,)]+(.*)~',$I["default"],$y))$I["default"]=($y[1]=="NULL"?null:idf_unescape($y[1]).$y[2]);$H[$I["field"]]=$I;}return$H;}function
indexes($R,$g=null){$g=connection($g);$H=array();$mg=driver()->tableOid($R);$e=get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $mg AND attnum > 0",$g);foreach(get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey, indoption, amname, pg_get_expr(indpred, indrelid, true) AS partial, pg_get_expr(indexprs, indrelid) AS indexpr
FROM pg_index
JOIN pg_class ON indexrelid = oid
JOIN pg_am ON pg_am.oid = pg_class.relam
WHERE indrelid = $mg
ORDER BY indisprimary DESC, indisunique DESC",$g)as$I){$wf=$I["relname"];$H[$wf]["type"]=($I["indisprimary"]?"PRIMARY":($I["indisunique"]?"UNIQUE":"INDEX"));$H[$wf]["columns"]=array();$H[$wf]["descs"]=array();$H[$wf]["algorithm"]=$I["amname"];$H[$wf]["partial"]=$I["partial"];$fd=preg_split('~(?<=\)), (?=\()~',$I["indexpr"]);foreach(explode(" ",$I["indkey"])as$gd)$H[$wf]["columns"][]=($gd?$e[$gd]:array_shift($fd));foreach(explode(" ",$I["indoption"])as$hd)$H[$wf]["descs"][]=(intval($hd)&1?'1':null);$H[$wf]["lengths"]=array();}return$H;}function
foreign_keys($R){$H=array();foreach(get_rows("SELECT conname, condeferrable::int AS deferrable, condeferred::int AS deferred, pg_get_constraintdef(oid) AS definition
FROM pg_constraint
WHERE conrelid = ".driver()->tableOid($R)."
AND contype = 'f'::char
ORDER BY conkey, conname")as$I){$I['deferrable']=($I['deferrable']?'':'NOT ').'DEFERRABLE'.($I['deferred']?' INITIALLY DEFERRED':'');if(preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA',$I['definition'],$y)){$I['source']=array_map('Adminer\idf_unescape',array_map('trim',explode(',',$y[1])));if(preg_match('~^(("([^"]|"")+"|[^"]+)\.)?"?("([^"]|"")+"|[^"]+)$~',$y[2],$Qd)){$I['ns']=idf_unescape($Qd[2]);$I['table']=idf_unescape($Qd[4]);}$I['target']=array_map('Adminer\idf_unescape',array_map('trim',explode(',',$y[3])));$I['on_delete']=(preg_match("~ON DELETE (".driver()->onActions.")~",$y[4],$Qd)?$Qd[1]:'NO ACTION');$I['on_update']=(preg_match("~ON UPDATE (".driver()->onActions.")~",$y[4],$Qd)?$Qd[1]:'NO ACTION');$H[$I['conname']]=$I;}}return$H;}function
view($z){return
array("select"=>trim(get_val("SELECT pg_get_viewdef(".driver()->tableOid($z).")")));}function
collations(){return
array();}function
information_schema($h){return
get_schema()=="information_schema";}function
error(){$H=h(connection()->error);if(preg_match('~^(.*\n)?([^\n]*)\n( *)\^(\n.*)?$~s',$H,$y))$H=$y[1].preg_replace('~((?:[^&]|&[^;]*;){'.strlen($y[3]).'})(.*)~','\1<b>\2</b>',$y[2]).$y[4];return
nl_br($H);}function
create_database($h,$c){return
queries("CREATE DATABASE ".idf_escape($h).($c?" ENCODING ".idf_escape($c):""));}function
drop_databases($sb){connection()->close();return
apply_queries("DROP DATABASE",$sb,'Adminer\idf_escape');}function
rename_database($z,$c){connection()->close();return
queries("ALTER DATABASE ".idf_escape(DB)." RENAME TO ".idf_escape($z));}function
auto_increment(){return"";}function
alter_table($R,$z,$l,$tc,$Ya,$Pb,$c,$ra,$Xe){$b=array();$E=array();if($R!=""&&$R!=$z)$E[]="ALTER TABLE ".table($R)." RENAME TO ".table($z);$Mf="";foreach($l
as$k){$d=idf_escape($k[0]);$X=$k[1];if(!$X)$b[]="DROP $d";else{$fh=$X[5];unset($X[5]);if($k[0]==""){if(isset($X[6]))$X[1]=($X[1]==" bigint"?" big":($X[1]==" smallint"?" small":" "))."serial";$b[]=($R!=""?"ADD ":"  ").implode($X);if(isset($X[6]))$b[]=($R!=""?"ADD":" ")." PRIMARY KEY ($X[0])";}else{if($d!=$X[0])$E[]="ALTER TABLE ".table($z)." RENAME $d TO $X[0]";$b[]="ALTER $d TYPE$X[1]";$Nf=$R."_".idf_unescape($X[0])."_seq";$b[]="ALTER $d ".($X[3]?"SET".preg_replace('~GENERATED ALWAYS(.*) STORED~','EXPRESSION\1',$X[3]):(isset($X[6])?"SET DEFAULT nextval(".q($Nf).")":"DROP DEFAULT"));if(isset($X[6]))$Mf="CREATE SEQUENCE IF NOT EXISTS ".idf_escape($Nf)." OWNED BY ".idf_escape($R).".$X[0]";$b[]="ALTER $d ".($X[2]==" NULL"?"DROP NOT":"SET").$X[2];}if($k[0]!=""||$fh!="")$E[]="COMMENT ON COLUMN ".table($z).".$X[0] IS ".($fh!=""?substr($fh,9):"''");}}$b=array_merge($b,$tc);if($R==""){$P="";if($Xe){$Qa=(connection()->flavor=='cockroach');$P=" PARTITION BY $Xe[partition_by]($Xe[partition])";if($Xe["partition_by"]=='HASH'){$Ye=+$Xe["partitions"];for($q=0;$q<$Ye;$q++)$E[]="CREATE TABLE ".idf_escape($z."_$q")." PARTITION OF ".idf_escape($z)." FOR VALUES WITH (MODULUS $Ye, REMAINDER $q)";}else{$jf="MINVALUE";foreach($Xe["partition_names"]as$q=>$X){$Y=$Xe["partition_values"][$q];$Ve=" VALUES ".($Xe["partition_by"]=='LIST'?"IN ($Y)":"FROM ($jf) TO ($Y)");if($Qa)$P
.=($q?",":" (")."\n  PARTITION ".(preg_match('~^DEFAULT$~i',$X)?$X:idf_escape($X))."$Ve";else$E[]="CREATE TABLE ".idf_escape($z."_$X")." PARTITION OF ".idf_escape($z)." FOR$Ve";$jf=$Y;}$P
.=($Qa?"\n)":"");}}array_unshift($E,"CREATE TABLE ".table($z)." (\n".implode(",\n",$b)."\n)$P");}elseif($b)array_unshift($E,"ALTER TABLE ".table($R)."\n".implode(",\n",$b));if($Mf)array_unshift($E,$Mf);if($Ya!==null)$E[]="COMMENT ON TABLE ".table($z)." IS ".q($Ya);foreach($E
as$F){if(!queries($F))return
false;}return
true;}function
alter_indexes($R,$b){$jb=array();$Db=array();$E=array();foreach($b
as$X){if($X[0]!="INDEX")$jb[]=($X[2]=="DROP"?"\nDROP CONSTRAINT ".idf_escape($X[1]):"\nADD".($X[1]!=""?" CONSTRAINT ".idf_escape($X[1]):"")." $X[0] ".($X[0]=="PRIMARY"?"KEY ":"")."(".implode(", ",$X[2]).")");elseif($X[2]=="DROP")$Db[]=idf_escape($X[1]);else$E[]="CREATE INDEX ".idf_escape($X[1]!=""?$X[1]:uniqid($R."_"))." ON ".table($R).($X[3]?" USING $X[3]":"")." (".implode(", ",$X[2]).")".($X[4]?" WHERE $X[4]":"");}if($jb)array_unshift($E,"ALTER TABLE ".table($R).implode(",",$jb));if($Db)array_unshift($E,"DROP INDEX ".implode(", ",$Db));foreach($E
as$F){if(!queries($F))return
false;}return
true;}function
truncate_tables($T){return
queries("TRUNCATE ".implode(", ",array_map('Adminer\table',$T)));}function
drop_views($kh){return
drop_tables($kh);}function
drop_tables($T){foreach($T
as$R){$P=table_status1($R);if(!queries("DROP ".strtoupper($P["Engine"])." ".table($R)))return
false;}return
true;}function
move_tables($T,$kh,$ng){foreach(array_merge($T,$kh)as$R){$P=table_status1($R);if(!queries("ALTER ".strtoupper($P["Engine"])." ".table($R)." SET SCHEMA ".idf_escape($ng)))return
false;}return
true;}function
trigger($z,$R){if($z=="")return
array("Statement"=>"EXECUTE PROCEDURE ()");$e=array();$Z="WHERE trigger_schema = current_schema() AND event_object_table = ".q($R)." AND trigger_name = ".q($z);foreach(get_rows("SELECT * FROM information_schema.triggered_update_columns $Z")as$I)$e[]=$I["event_object_column"];$H=array();foreach(get_rows('SELECT trigger_name AS "Trigger", action_timing AS "Timing", event_manipulation AS "Event", \'FOR EACH \' || action_orientation AS "Type", action_statement AS "Statement"
FROM information_schema.triggers'."
$Z
ORDER BY event_manipulation DESC")as$I){if($e&&$I["Event"]=="UPDATE")$I["Event"].=" OF";$I["Of"]=implode(", ",$e);if($H)$I["Event"].=" OR $H[Event]";$H=$I;}return$H;}function
triggers($R){$H=array();foreach(get_rows("SELECT * FROM information_schema.triggers WHERE trigger_schema = current_schema() AND event_object_table = ".q($R))as$I){$Hg=trigger($I["trigger_name"],$R);$H[$Hg["Trigger"]]=array($Hg["Timing"],$Hg["Event"]);}return$H;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","UPDATE OF","DELETE","INSERT OR UPDATE","INSERT OR UPDATE OF","DELETE OR INSERT","DELETE OR UPDATE","DELETE OR UPDATE OF","DELETE OR INSERT OR UPDATE","DELETE OR INSERT OR UPDATE OF"),"Type"=>array("FOR EACH ROW","FOR EACH STATEMENT"),);}function
routine($z,$U){$J=get_rows('SELECT routine_definition AS definition, LOWER(external_language) AS language, *
FROM information_schema.routines
WHERE routine_schema = current_schema() AND specific_name = '.q($z));$H=idx($J,0,array());$H["returns"]=array("type"=>$H["type_udt_name"]);$H["fields"]=get_rows('SELECT COALESCE(parameter_name, ordinal_position::text) AS field, data_type AS type, character_maximum_length AS length, parameter_mode AS inout
FROM information_schema.parameters
WHERE specific_schema = current_schema() AND specific_name = '.q($z).'
ORDER BY ordinal_position');return$H;}function
routines(){return
get_rows('SELECT specific_name AS "SPECIFIC_NAME", routine_type AS "ROUTINE_TYPE", routine_name AS "ROUTINE_NAME", type_udt_name AS "DTD_IDENTIFIER"
FROM information_schema.routines
WHERE routine_schema = current_schema()
ORDER BY SPECIFIC_NAME');}function
routine_languages(){return
get_vals("SELECT LOWER(lanname) FROM pg_catalog.pg_language");}function
routine_id($z,$I){$H=array();foreach($I["fields"]as$k){$Hd=$k["length"];$H[]=$k["type"].($Hd?"($Hd)":"");}return
idf_escape($z)."(".implode(", ",$H).")";}function
last_id($G){$I=(is_object($G)?$G->fetch_row():array());return($I?$I[0]:0);}function
explain($f,$F){return$f->query("EXPLAIN $F");}function
found_rows($S,$Z){if(preg_match("~ rows=([0-9]+)~",get_val("EXPLAIN SELECT * FROM ".idf_escape($S["Name"]).($Z?" WHERE ".implode(" AND ",$Z):"")),$vf))return$vf[1];}function
types(){return
get_key_vals("SELECT oid, typname
FROM pg_type
WHERE typnamespace = ".driver()->nsOid."
AND typtype IN ('b','d','e')
AND typelem = 0");}function
type_values($r){$Sb=get_vals("SELECT enumlabel FROM pg_enum WHERE enumtypid = $r ORDER BY enumsortorder");return($Sb?"'".implode("', '",array_map('addslashes',$Sb))."'":"");}function
schemas(){return
get_vals("SELECT nspname FROM pg_namespace ORDER BY nspname");}function
get_schema(){return
get_val("SELECT current_schema()");}function
set_schema($Ef,$g=null){if(!$g)$g=connection();$H=$g->query("SET search_path TO ".idf_escape($Ef));driver()->setUserTypes(types());return$H;}function
foreign_keys_sql($R){$H="";$P=table_status1($R);$pc=foreign_keys($R);ksort($pc);foreach($pc
as$oc=>$nc)$H
.="ALTER TABLE ONLY ".idf_escape($P['nspname']).".".idf_escape($P['Name'])." ADD CONSTRAINT ".idf_escape($oc)." $nc[definition];\n";return($H?"$H\n":$H);}function
create_sql($R,$ra,$eg){$Af=array();$Of=array();$P=table_status1($R);$re=idf_escape($P['nspname']);if(is_view($P)){$jh=view($R);return
rtrim("CREATE VIEW $re.".idf_escape($R)." AS $jh[select]",";");}$l=fields($R);if(count($P)<2||empty($l))return
false;$H="CREATE TABLE $re.".idf_escape($P['Name'])." (\n    ";foreach($l
as$k){$Ue=idf_escape($k['field']).' '.$k['full_type'].default_value($k).($k['null']?"":" NOT NULL");$Af[]=$Ue;if(preg_match('~nextval\(\'([^\']+)\'\)~',$k['default'],$Sd)){$Nf=$Sd[1];$Yf=first(get_rows((min_version(10)?"SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = ".q(idf_unescape($Nf)):"SELECT * FROM $Nf"),null,"-- "));$Of[]=($eg=="DROP+CREATE"?"DROP SEQUENCE IF EXISTS $re.$Nf;\n":"")."CREATE SEQUENCE $re.$Nf INCREMENT $Yf[increment_by] MINVALUE $Yf[min_value] MAXVALUE $Yf[max_value]".($ra&&$Yf['last_value']?" START ".($Yf["last_value"]+1):"")." CACHE $Yf[cache_value];";}}if(!empty($Of))$H=implode("\n\n",$Of)."\n\n$H";$D="";foreach(indexes($R)as$dd=>$t){if($t['type']=='PRIMARY'){$D=$dd;$Af[]="CONSTRAINT ".idf_escape($dd)." PRIMARY KEY (".implode(', ',array_map('Adminer\idf_escape',$t['columns'])).")";}}foreach(driver()->checkConstraints($R)as$cb=>$eb)$Af[]="CONSTRAINT ".idf_escape($cb)." CHECK ($eb)";$H
.=implode(",\n    ",$Af)."\n)";$Ve=driver()->partitionsInfo($P['Name']);if($Ve)$H
.="\nPARTITION BY $Ve[partition_by]($Ve[partition])";$H
.="\nWITH (oids = ".($P['Oid']?'true':'false').");";if($P['Comment'])$H
.="\n\nCOMMENT ON TABLE $re.".idf_escape($P['Name'])." IS ".q($P['Comment']).";";foreach($l
as$hc=>$k){if($k['comment'])$H
.="\n\nCOMMENT ON COLUMN $re.".idf_escape($P['Name']).".".idf_escape($hc)." IS ".q($k['comment']).";";}foreach(get_rows("SELECT indexdef FROM pg_catalog.pg_indexes WHERE schemaname = current_schema() AND tablename = ".q($R).($D?" AND indexname != ".q($D):""),null,"-- ")as$I)$H
.="\n\n$I[indexdef];";return
rtrim($H,';');}function
truncate_sql($R){return"TRUNCATE ".table($R);}function
trigger_sql($R){$P=table_status1($R);$H="";foreach(triggers($R)as$Gg=>$Fg){$Hg=trigger($Gg,$P['Name']);$H
.="\nCREATE TRIGGER ".idf_escape($Hg['Trigger'])." $Hg[Timing] $Hg[Event] ON ".idf_escape($P["nspname"]).".".idf_escape($P['Name'])." $Hg[Type] $Hg[Statement];;\n";}return$H;}function
use_sql($rb,$eg=""){$z=idf_escape($rb);$H="";if(preg_match('~CREATE~',$eg)){if($eg=="DROP+CREATE")$H="DROP DATABASE IF EXISTS $z;\n";$H
.="CREATE DATABASE $z;\n";}return"$H\\connect $z";}function
show_variables(){return
get_rows("SHOW ALL");}function
process_list(){return
get_rows("SELECT * FROM pg_stat_activity ORDER BY ".(min_version(9.2)?"pid":"procpid"));}function
convert_field($k){}function
unconvert_field($k,$H){return$H;}function
support($gc){return
preg_match('~^(check|columns|comment|database|drop_col|dump|descidx|indexes|kill|partial_indexes|routine|scheme|sequence|sql|table|trigger|type|variables|view'.(min_version(9.3)?'|materializedview':'').(min_version(11)?'|procedure':'').(connection()->flavor=='cockroach'?'':'|processlist').')$~',$gc);}function
kill_process($X){return
queries("SELECT pg_terminate_backend(".number($X).")");}function
connection_id(){return"SELECT pg_backend_pid()";}function
max_connections(){return
get_val("SHOW max_connections");}}add_driver("oracle","Oracle (beta)");if(isset($_GET["oracle"])){define('Adminer\DRIVER',"oracle");if(extension_loaded("oci8")&&$_GET["ext"]!="pdo"){class
Db
extends
SqlDb{var$extension="oci8";var$_current_db;private$link;function
_error($Ub,$j){if(ini_bool("html_errors"))$j=html_entity_decode(strip_tags($j));$j=preg_replace('~^[^:]*: ~','',$j);$this->error=$j;}function
attach($M,$V,$B){$this->link=@oci_new_connect($V,$B,$M,"AL32UTF8");if($this->link){$this->server_info=oci_server_version($this->link);return'';}$j=oci_error();return$j["message"];}function
quote($Q){return"'".str_replace("'","''",$Q)."'";}function
select_db($rb){$this->_current_db=$rb;return
true;}function
query($F,$Ng=false){$G=oci_parse($this->link,$F);$this->error="";if(!$G){$j=oci_error($this->link);$this->errno=$j["code"];$this->error=$j["message"];return
false;}set_error_handler(array($this,'_error'));$H=@oci_execute($G);restore_error_handler();if($H){if(oci_num_fields($G))return
new
Result($G);$this->affected_rows=oci_num_rows($G);oci_free_statement($G);}return$H;}function
timeout($he){return
oci_set_call_timeout($this->link,$he);}}class
Result{var$num_rows;private$result,$offset=1;function
__construct($G){$this->result=$G;}private
function
convert($I){foreach((array)$I
as$v=>$X){if(is_a($X,'OCILob')||is_a($X,'OCI-Lob'))$I[$v]=$X->load();}return$I;}function
fetch_assoc(){return$this->convert(oci_fetch_assoc($this->result));}function
fetch_row(){return$this->convert(oci_fetch_row($this->result));}function
fetch_field(){$d=$this->offset++;$H=new
\stdClass;$H->name=oci_field_name($this->result,$d);$H->type=oci_field_type($this->result,$d);$H->charsetnr=(preg_match("~raw|blob|bfile~",$H->type)?63:0);return$H;}function
__destruct(){oci_free_statement($this->result);}}}elseif(extension_loaded("pdo_oci")){class
Db
extends
PdoDb{var$extension="PDO_OCI";var$_current_db;function
attach($M,$V,$B){return$this->dsn("oci:dbname=//$M;charset=AL32UTF8",$V,$B);}function
select_db($rb){$this->_current_db=$rb;return
true;}}}class
Driver
extends
SqlDriver{static$extensions=array("OCI8","PDO_OCI");static$jush="oracle";var$insertFunctions=array("date"=>"current_date","timestamp"=>"current_timestamp",);var$editFunctions=array("number|float|double"=>"+/-","date|timestamp"=>"+ interval/- interval","char|clob"=>"||",);var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL","SQL");var$functions=array("length","lower","round","upper");var$grouping=array("avg","count","count distinct","max","min","sum");function
__construct(Db$f){parent::__construct($f);$this->types=array('Zahlen'=>array("number"=>38,"binary_float"=>12,"binary_double"=>21),'Datum und Zeit'=>array("date"=>10,"timestamp"=>29,"interval year"=>12,"interval day"=>28),'Zeichenketten'=>array("char"=>2000,"varchar2"=>4000,"nchar"=>2000,"nvarchar2"=>4000,"clob"=>4294967295,"nclob"=>4294967295),'Binär'=>array("raw"=>2000,"long raw"=>2147483648,"blob"=>4294967295,"bfile"=>4294967296),);}function
begin(){return
true;}function
insertUpdate($R,array$J,array$D){foreach($J
as$N){$Vg=array();$Z=array();foreach($N
as$v=>$X){$Vg[]="$v = $X";if(isset($D[idf_unescape($v)]))$Z[]="$v = $X";}if(!(($Z&&queries("UPDATE ".table($R)." SET ".implode(", ",$Vg)." WHERE ".implode(" AND ",$Z))&&$this->conn->affected_rows)||queries("INSERT INTO ".table($R)." (".implode(", ",array_keys($N)).") VALUES (".implode(", ",$N).")")))return
false;}return
true;}function
hasCStyleEscapes(){return
true;}}function
idf_escape($s){return'"'.str_replace('"','""',$s).'"';}function
table($s){return
idf_escape($s);}function
get_databases($rc){return
get_vals("SELECT DISTINCT tablespace_name FROM (
SELECT tablespace_name FROM user_tablespaces
UNION SELECT tablespace_name FROM all_tables WHERE tablespace_name IS NOT NULL
)
ORDER BY 1");}function
limit($F,$Z,$w,$we=0,$L=" "){return($we?" * FROM (SELECT t.*, rownum AS rnum FROM (SELECT $F$Z) t WHERE rownum <= ".($w+$we).") WHERE rnum > $we":($w?" * FROM (SELECT $F$Z) WHERE rownum <= ".($w+$we):" $F$Z"));}function
limit1($R,$F,$Z,$L="\n"){return" $F$Z";}function
db_collation($h,$Ua){return
get_val("SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'");}function
logged_user(){return
get_val("SELECT USER FROM DUAL");}function
get_current_db(){$h=connection()->_current_db?:DB;unset(connection()->_current_db);return$h;}function
where_owner($if,$Pe="owner"){if(!$_GET["ns"])return'';return"$if$Pe = sys_context('USERENV', 'CURRENT_SCHEMA')";}function
views_table($e){$Pe=where_owner('');return"(SELECT $e FROM all_views WHERE ".($Pe?:"rownum < 0").")";}function
tables_list(){$jh=views_table("view_name");$Pe=where_owner(" AND ");return
get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = ".q(DB)."$Pe
UNION SELECT view_name, 'view' FROM $jh
ORDER BY 1");}function
count_tables($sb){$H=array();foreach($sb
as$h)$H[$h]=get_val("SELECT COUNT(*) FROM all_tables WHERE tablespace_name = ".q($h));return$H;}function
table_status($z=""){$H=array();$Gf=q($z);$h=get_current_db();$jh=views_table("view_name");$Pe=where_owner(" AND ");foreach(get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = '.q($h).$Pe.($z!=""?" AND table_name = $Gf":"")."
UNION SELECT view_name, 'view', 0, 0 FROM $jh".($z!=""?" WHERE view_name = $Gf":"")."
ORDER BY 1")as$I)$H[$I["Name"]]=$I;return$H;}function
is_view($S){return$S["Engine"]=="view";}function
fk_support($S){return
true;}function
fields($R){$H=array();$Pe=where_owner(" AND ");foreach(get_rows("SELECT * FROM all_tab_columns WHERE table_name = ".q($R)."$Pe ORDER BY column_id")as$I){$U=$I["DATA_TYPE"];$Hd="$I[DATA_PRECISION],$I[DATA_SCALE]";if($Hd==",")$Hd=$I["CHAR_COL_DECL_LENGTH"];$H[$I["COLUMN_NAME"]]=array("field"=>$I["COLUMN_NAME"],"full_type"=>$U.($Hd?"($Hd)":""),"type"=>strtolower($U),"length"=>$Hd,"default"=>$I["DATA_DEFAULT"],"null"=>($I["NULLABLE"]=="Y"),"privileges"=>array("insert"=>1,"select"=>1,"update"=>1,"where"=>1,"order"=>1),);}return$H;}function
indexes($R,$g=null){$H=array();$Pe=where_owner(" AND ","aic.table_owner");foreach(get_rows("SELECT aic.*, ac.constraint_type, atc.data_default
FROM all_ind_columns aic
LEFT JOIN all_constraints ac ON aic.index_name = ac.constraint_name AND aic.table_name = ac.table_name AND aic.index_owner = ac.owner
LEFT JOIN all_tab_cols atc ON aic.column_name = atc.column_name AND aic.table_name = atc.table_name AND aic.index_owner = atc.owner
WHERE aic.table_name = ".q($R)."$Pe
ORDER BY ac.constraint_type, aic.column_position",$g)as$I){$dd=$I["INDEX_NAME"];$Wa=$I["DATA_DEFAULT"];$Wa=($Wa?trim($Wa,'"'):$I["COLUMN_NAME"]);$H[$dd]["type"]=($I["CONSTRAINT_TYPE"]=="P"?"PRIMARY":($I["CONSTRAINT_TYPE"]=="U"?"UNIQUE":"INDEX"));$H[$dd]["columns"][]=$Wa;$H[$dd]["lengths"][]=($I["CHAR_LENGTH"]&&$I["CHAR_LENGTH"]!=$I["COLUMN_LENGTH"]?$I["CHAR_LENGTH"]:null);$H[$dd]["descs"][]=($I["DESCEND"]&&$I["DESCEND"]=="DESC"?'1':null);}return$H;}function
view($z){$jh=views_table("view_name, text");$J=get_rows('SELECT text "select" FROM '.$jh.' WHERE view_name = '.q($z));return
reset($J);}function
collations(){return
array();}function
information_schema($h){return
get_schema()=="INFORMATION_SCHEMA";}function
error(){return
h(connection()->error);}function
explain($f,$F){$f->query("EXPLAIN PLAN FOR $F");return$f->query("SELECT * FROM plan_table");}function
found_rows($S,$Z){}function
auto_increment(){return"";}function
alter_table($R,$z,$l,$tc,$Ya,$Pb,$c,$ra,$Xe){$b=$Db=array();$Le=($R?fields($R):array());foreach($l
as$k){$X=$k[1];if($X&&$k[0]!=""&&idf_escape($k[0])!=$X[0])queries("ALTER TABLE ".table($R)." RENAME COLUMN ".idf_escape($k[0])." TO $X[0]");$Ke=$Le[$k[0]];if($X&&$Ke){$ye=process_field($Ke,$Ke);if($X[2]==$ye[2])$X[2]="";}if($X)$b[]=($R!=""?($k[0]!=""?"MODIFY (":"ADD ("):"  ").implode($X).($R!=""?")":"");else$Db[]=idf_escape($k[0]);}if($R=="")return
queries("CREATE TABLE ".table($z)." (\n".implode(",\n",$b)."\n)");return(!$b||queries("ALTER TABLE ".table($R)."\n".implode("\n",$b)))&&(!$Db||queries("ALTER TABLE ".table($R)." DROP (".implode(", ",$Db).")"))&&($R==$z||queries("ALTER TABLE ".table($R)." RENAME TO ".table($z)));}function
alter_indexes($R,$b){$Db=array();$E=array();foreach($b
as$X){if($X[0]!="INDEX"){$X[2]=preg_replace('~ DESC$~','',$X[2]);$jb=($X[2]=="DROP"?"\nDROP CONSTRAINT ".idf_escape($X[1]):"\nADD".($X[1]!=""?" CONSTRAINT ".idf_escape($X[1]):"")." $X[0] ".($X[0]=="PRIMARY"?"KEY ":"")."(".implode(", ",$X[2]).")");array_unshift($E,"ALTER TABLE ".table($R).$jb);}elseif($X[2]=="DROP")$Db[]=idf_escape($X[1]);else$E[]="CREATE INDEX ".idf_escape($X[1]!=""?$X[1]:uniqid($R."_"))." ON ".table($R)." (".implode(", ",$X[2]).")";}if($Db)array_unshift($E,"DROP INDEX ".implode(", ",$Db));foreach($E
as$F){if(!queries($F))return
false;}return
true;}function
foreign_keys($R){$H=array();$F="SELECT c_list.CONSTRAINT_NAME as NAME,
c_src.COLUMN_NAME as SRC_COLUMN,
c_dest.OWNER as DEST_DB,
c_dest.TABLE_NAME as DEST_TABLE,
c_dest.COLUMN_NAME as DEST_COLUMN,
c_list.DELETE_RULE as ON_DELETE
FROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src, ALL_CONS_COLUMNS c_dest
WHERE c_list.CONSTRAINT_NAME = c_src.CONSTRAINT_NAME
AND c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME
AND c_list.CONSTRAINT_TYPE = 'R'
AND c_src.TABLE_NAME = ".q($R);foreach(get_rows($F)as$I)$H[$I['NAME']]=array("db"=>$I['DEST_DB'],"table"=>$I['DEST_TABLE'],"source"=>array($I['SRC_COLUMN']),"target"=>array($I['DEST_COLUMN']),"on_delete"=>$I['ON_DELETE'],"on_update"=>null,);return$H;}function
truncate_tables($T){return
apply_queries("TRUNCATE TABLE",$T);}function
drop_views($kh){return
apply_queries("DROP VIEW",$kh);}function
drop_tables($T){return
apply_queries("DROP TABLE",$T);}function
last_id($G){return
0;}function
schemas(){$H=get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX')) ORDER BY 1");return($H?:get_vals("SELECT DISTINCT owner FROM all_tables WHERE tablespace_name = ".q(DB)." ORDER BY 1"));}function
get_schema(){return
get_val("SELECT sys_context('USERENV', 'SESSION_USER') FROM dual");}function
set_schema($Ff,$g=null){if(!$g)$g=connection();return$g->query("ALTER SESSION SET CURRENT_SCHEMA = ".idf_escape($Ff));}function
show_variables(){return
get_rows('SELECT name, display_value FROM v$parameter');}function
show_status(){$H=array();$J=get_rows('SELECT * FROM v$instance');foreach(reset($J)as$v=>$X)$H[]=array($v,$X);return$H;}function
process_list(){return
get_rows('SELECT
	sess.process AS "process",
	sess.username AS "user",
	sess.schemaname AS "schema",
	sess.status AS "status",
	sess.wait_class AS "wait_class",
	sess.seconds_in_wait AS "seconds_in_wait",
	sql.sql_text AS "sql_text",
	sess.machine AS "machine",
	sess.port AS "port"
FROM v$session sess LEFT OUTER JOIN v$sql sql
ON sql.sql_id = sess.sql_id
WHERE sess.type = \'USER\'
ORDER BY PROCESS
');}function
convert_field($k){}function
unconvert_field($k,$H){return$H;}function
support($gc){return
preg_match('~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view)$~',$gc);}}add_driver("mssql","MS SQL");if(isset($_GET["mssql"])){define('Adminer\DRIVER',"mssql");if(extension_loaded("sqlsrv")&&$_GET["ext"]!="pdo"){class
Db
extends
SqlDb{var$extension="sqlsrv";private$link,$result;private
function
get_error(){$this->error="";foreach(sqlsrv_errors()as$j){$this->errno=$j["code"];$this->error
.="$j[message]\n";}$this->error=rtrim($this->error);}function
attach($M,$V,$B){$db=array("UID"=>$V,"PWD"=>$B,"CharacterSet"=>"UTF-8");$O=adminer()->connectSsl();if(isset($O["Encrypt"]))$db["Encrypt"]=$O["Encrypt"];if(isset($O["TrustServerCertificate"]))$db["TrustServerCertificate"]=$O["TrustServerCertificate"];$h=adminer()->database();if($h!="")$db["Database"]=$h;list($Tc,$C)=host_port($M);$this->link=@sqlsrv_connect($Tc.($C?",$C":""),$db);if($this->link){$id=sqlsrv_server_info($this->link);$this->server_info=$id['SQLServerVersion'];}else$this->get_error();return($this->link?'':$this->error);}function
quote($Q){$Og=strlen($Q)!=strlen(utf8_decode($Q));return($Og?"N":"")."'".str_replace("'","''",$Q)."'";}function
select_db($rb){return$this->query(use_sql($rb));}function
query($F,$Ng=false){$G=sqlsrv_query($this->link,$F);$this->error="";if(!$G){$this->get_error();return
false;}return$this->store_result($G);}function
multi_query($F){$this->result=sqlsrv_query($this->link,$F);$this->error="";if(!$this->result){$this->get_error();return
false;}return
true;}function
store_result($G=null){if(!$G)$G=$this->result;if(!$G)return
false;if(sqlsrv_field_metadata($G))return
new
Result($G);$this->affected_rows=sqlsrv_rows_affected($G);return
true;}function
next_result(){return$this->result?!!sqlsrv_next_result($this->result):false;}}class
Result{var$num_rows;private$result,$offset=0,$fields;function
__construct($G){$this->result=$G;}private
function
convert($I){foreach((array)$I
as$v=>$X){if(is_a($X,'DateTime'))$I[$v]=$X->format("Y-m-d H:i:s");}return$I;}function
fetch_assoc(){return$this->convert(sqlsrv_fetch_array($this->result,SQLSRV_FETCH_ASSOC));}function
fetch_row(){return$this->convert(sqlsrv_fetch_array($this->result,SQLSRV_FETCH_NUMERIC));}function
fetch_field(){if(!$this->fields)$this->fields=sqlsrv_field_metadata($this->result);$k=$this->fields[$this->offset++];$H=new
\stdClass;$H->name=$k["Name"];$H->type=($k["Type"]==1?254:15);$H->charsetnr=0;return$H;}function
seek($we){for($q=0;$q<$we;$q++)sqlsrv_fetch($this->result);}function
__destruct(){sqlsrv_free_stmt($this->result);}}function
last_id($G){return
get_val("SELECT SCOPE_IDENTITY()");}function
explain($f,$F){$f->query("SET SHOWPLAN_ALL ON");$H=$f->query($F);$f->query("SET SHOWPLAN_ALL OFF");return$H;}}else{abstract
class
MssqlDb
extends
PdoDb{function
select_db($rb){return$this->query(use_sql($rb));}function
lastInsertId(){return$this->pdo->lastInsertId();}}function
last_id($G){return
connection()->lastInsertId();}function
explain($f,$F){}if(extension_loaded("pdo_sqlsrv")){class
Db
extends
MssqlDb{var$extension="PDO_SQLSRV";function
attach($M,$V,$B){list($Tc,$C)=host_port($M);return$this->dsn("sqlsrv:Server=$Tc".($C?",$C":""),$V,$B);}}}elseif(extension_loaded("pdo_dblib")){class
Db
extends
MssqlDb{var$extension="PDO_DBLIB";function
attach($M,$V,$B){list($Tc,$C)=host_port($M);return$this->dsn("dblib:charset=utf8;host=$Tc".($C?(is_numeric($C)?";port=":";unix_socket=").$C:""),$V,$B);}}}}class
Driver
extends
SqlDriver{static$extensions=array("SQLSRV","PDO_SQLSRV","PDO_DBLIB");static$jush="mssql";var$insertFunctions=array("date|time"=>"getdate");var$editFunctions=array("int|decimal|real|float|money|datetime"=>"+/-","char|text"=>"+",);var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL");var$functions=array("len","lower","round","upper");var$grouping=array("avg","count","count distinct","max","min","sum");var$generated=array("PERSISTED","VIRTUAL");var$onActions="NO ACTION|CASCADE|SET NULL|SET DEFAULT";static
function
connect($M,$V,$B){if($M=="")$M="localhost:1433";return
parent::connect($M,$V,$B);}function
__construct(Db$f){parent::__construct($f);$this->types=array('Zahlen'=>array("tinyint"=>3,"smallint"=>5,"int"=>10,"bigint"=>20,"bit"=>1,"decimal"=>0,"real"=>12,"float"=>53,"smallmoney"=>10,"money"=>20),'Datum und Zeit'=>array("date"=>10,"smalldatetime"=>19,"datetime"=>19,"datetime2"=>19,"time"=>8,"datetimeoffset"=>10),'Zeichenketten'=>array("char"=>8000,"varchar"=>8000,"text"=>2147483647,"nchar"=>4000,"nvarchar"=>4000,"ntext"=>1073741823),'Binär'=>array("binary"=>8000,"varbinary"=>8000,"image"=>2147483647),);}function
insertUpdate($R,array$J,array$D){$l=fields($R);$Vg=array();$Z=array();$N=reset($J);$e="c".implode(", c",range(1,count($N)));$Ga=0;$md=array();foreach($N
as$v=>$X){$Ga++;$z=idf_unescape($v);if(!$l[$z]["auto_increment"])$md[$v]="c$Ga";if(isset($D[$z]))$Z[]="$v = c$Ga";else$Vg[]="$v = c$Ga";}$gh=array();foreach($J
as$N)$gh[]="(".implode(", ",$N).")";if($Z){$Yc=queries("SET IDENTITY_INSERT ".table($R)." ON");$H=queries("MERGE ".table($R)." USING (VALUES\n\t".implode(",\n\t",$gh)."\n) AS source ($e) ON ".implode(" AND ",$Z).($Vg?"\nWHEN MATCHED THEN UPDATE SET ".implode(", ",$Vg):"")."\nWHEN NOT MATCHED THEN INSERT (".implode(", ",array_keys($Yc?$N:$md)).") VALUES (".($Yc?$e:implode(", ",$md)).");");if($Yc)queries("SET IDENTITY_INSERT ".table($R)." OFF");}else$H=queries("INSERT INTO ".table($R)." (".implode(", ",array_keys($N)).") VALUES\n".implode(",\n",$gh));return$H;}function
begin(){return
queries("BEGIN TRANSACTION");}function
tableHelp($z,$vd=false){$Kd=array("sys"=>"catalog-views/sys-","INFORMATION_SCHEMA"=>"information-schema-views/",);$x=$Kd[get_schema()];if($x)return"relational-databases/system-$x".preg_replace('~_~','-',strtolower($z))."-transact-sql";}}function
idf_escape($s){return"[".str_replace("]","]]",$s)."]";}function
table($s){return($_GET["ns"]!=""?idf_escape($_GET["ns"]).".":"").idf_escape($s);}function
get_databases($rc){return
get_vals("SELECT name FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')");}function
limit($F,$Z,$w,$we=0,$L=" "){return($w?" TOP (".($w+$we).")":"")." $F$Z";}function
limit1($R,$F,$Z,$L="\n"){return
limit($F,$Z,1,0,$L);}function
db_collation($h,$Ua){return
get_val("SELECT collation_name FROM sys.databases WHERE name = ".q($h));}function
logged_user(){return
get_val("SELECT SUSER_NAME()");}function
tables_list(){return
get_key_vals("SELECT name, type_desc FROM sys.all_objects WHERE schema_id = SCHEMA_ID(".q(get_schema()).") AND type IN ('S', 'U', 'V') ORDER BY name");}function
count_tables($sb){$H=array();foreach($sb
as$h){connection()->select_db($h);$H[$h]=get_val("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES");}return$H;}function
table_status($z=""){$H=array();foreach(get_rows("SELECT ao.name AS Name, ao.type_desc AS Engine, (SELECT value FROM fn_listextendedproperty(default, 'SCHEMA', schema_name(schema_id), 'TABLE', ao.name, null, null)) AS Comment
FROM sys.all_objects AS ao
WHERE schema_id = SCHEMA_ID(".q(get_schema()).") AND type IN ('S', 'U', 'V') ".($z!=""?"AND name = ".q($z):"ORDER BY name"))as$I)$H[$I["Name"]]=$I;return$H;}function
is_view($S){return$S["Engine"]=="VIEW";}function
fk_support($S){return
true;}function
fields($R){$Za=get_key_vals("SELECT objname, cast(value as varchar(max)) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', ".q(get_schema()).", 'table', ".q($R).", 'column', NULL)");$H=array();$kg=get_val("SELECT object_id FROM sys.all_objects WHERE schema_id = SCHEMA_ID(".q(get_schema()).") AND type IN ('S', 'U', 'V') AND name = ".q($R));foreach(get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, d.definition [default], d.name default_constraint, i.is_primary_key
FROM sys.all_columns c
JOIN sys.types t ON c.user_type_id = t.user_type_id
LEFT JOIN sys.default_constraints d ON c.default_object_id = d.object_id
LEFT JOIN sys.index_columns ic ON c.object_id = ic.object_id AND c.column_id = ic.column_id
LEFT JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE c.object_id = ".q($kg))as$I){$U=$I["type"];$Hd=(preg_match("~char|binary~",$U)?intval($I["max_length"])/($U[0]=='n'?2:1):($U=="decimal"?"$I[precision],$I[scale]":""));$H[$I["name"]]=array("field"=>$I["name"],"full_type"=>$U.($Hd?"($Hd)":""),"type"=>$U,"length"=>$Hd,"default"=>(preg_match("~^\('(.*)'\)$~",$I["default"],$y)?str_replace("''","'",$y[1]):$I["default"]),"default_constraint"=>$I["default_constraint"],"null"=>$I["is_nullable"],"auto_increment"=>$I["is_identity"],"collation"=>$I["collation_name"],"privileges"=>array("insert"=>1,"select"=>1,"update"=>1,"where"=>1,"order"=>1),"primary"=>$I["is_primary_key"],"comment"=>$Za[$I["name"]],);}foreach(get_rows("SELECT * FROM sys.computed_columns WHERE object_id = ".q($kg))as$I){$H[$I["name"]]["generated"]=($I["is_persisted"]?"PERSISTED":"VIRTUAL");$H[$I["name"]]["default"]=$I["definition"];}return$H;}function
indexes($R,$g=null){$H=array();foreach(get_rows("SELECT i.name, key_ordinal, is_unique, is_primary_key, c.name AS column_name, is_descending_key
FROM sys.indexes i
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE OBJECT_NAME(i.object_id) = ".q($R),$g)as$I){$z=$I["name"];$H[$z]["type"]=($I["is_primary_key"]?"PRIMARY":($I["is_unique"]?"UNIQUE":"INDEX"));$H[$z]["lengths"]=array();$H[$z]["columns"][$I["key_ordinal"]]=$I["column_name"];$H[$z]["descs"][$I["key_ordinal"]]=($I["is_descending_key"]?'1':null);}return$H;}function
view($z){return
array("select"=>preg_replace('~^(?:[^[]|\[[^]]*])*\s+AS\s+~isU','',get_val("SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = SCHEMA_NAME() AND TABLE_NAME = ".q($z))));}function
collations(){$H=array();foreach(get_vals("SELECT name FROM fn_helpcollations()")as$c)$H[preg_replace('~_.*~','',$c)][]=$c;return$H;}function
information_schema($h){return
get_schema()=="INFORMATION_SCHEMA";}function
error(){return
nl_br(h(preg_replace('~^(\[[^]]*])+~m','',connection()->error)));}function
create_database($h,$c){return
queries("CREATE DATABASE ".idf_escape($h).(preg_match('~^[a-z0-9_]+$~i',$c)?" COLLATE $c":""));}function
drop_databases($sb){return
queries("DROP DATABASE ".implode(", ",array_map('Adminer\idf_escape',$sb)));}function
rename_database($z,$c){if(preg_match('~^[a-z0-9_]+$~i',$c))queries("ALTER DATABASE ".idf_escape(DB)." COLLATE $c");queries("ALTER DATABASE ".idf_escape(DB)." MODIFY NAME = ".idf_escape($z));return
true;}function
auto_increment(){return" IDENTITY".($_POST["Auto_increment"]!=""?"(".number($_POST["Auto_increment"]).",1)":"")." PRIMARY KEY";}function
alter_table($R,$z,$l,$tc,$Ya,$Pb,$c,$ra,$Xe){$b=array();$Za=array();$Le=fields($R);foreach($l
as$k){$d=idf_escape($k[0]);$X=$k[1];if(!$X)$b["DROP"][]=" COLUMN $d";else{$X[1]=preg_replace("~( COLLATE )'(\\w+)'~",'\1\2',$X[1]);$Za[$k[0]]=$X[5];unset($X[5]);if(preg_match('~ AS ~',$X[3]))unset($X[1],$X[2]);if($k[0]=="")$b["ADD"][]="\n  ".implode("",$X).($R==""?substr($tc[$X[0]],16+strlen($X[0])):"");else{$i=$X[3];unset($X[3]);unset($X[6]);if($d!=$X[0])queries("EXEC sp_rename ".q(table($R).".$d").", ".q(idf_unescape($X[0])).", 'COLUMN'");$b["ALTER COLUMN ".implode("",$X)][]="";$Ke=$Le[$k[0]];if(default_value($Ke)!=$i){if($Ke["default"]!==null)$b["DROP"][]=" ".idf_escape($Ke["default_constraint"]);if($i)$b["ADD"][]="\n $i FOR $d";}}}}if($R=="")return
queries("CREATE TABLE ".table($z)." (".implode(",",(array)$b["ADD"])."\n)");if($R!=$z)queries("EXEC sp_rename ".q(table($R)).", ".q($z));if($tc)$b[""]=$tc;foreach($b
as$v=>$X){if(!queries("ALTER TABLE ".table($z)." $v".implode(",",$X)))return
false;}foreach($Za
as$v=>$X){$Ya=substr($X,9);queries("EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = ".q(get_schema()).", @level1type = N'Table', @level1name = ".q($z).", @level2type = N'Column', @level2name = ".q($v));queries("EXEC sp_addextendedproperty
@name = N'MS_Description',
@value = $Ya,
@level0type = N'Schema',
@level0name = ".q(get_schema()).",
@level1type = N'Table',
@level1name = ".q($z).",
@level2type = N'Column',
@level2name = ".q($v));}return
true;}function
alter_indexes($R,$b){$t=array();$Db=array();foreach($b
as$X){if($X[2]=="DROP"){if($X[0]=="PRIMARY")$Db[]=idf_escape($X[1]);else$t[]=idf_escape($X[1])." ON ".table($R);}elseif(!queries(($X[0]!="PRIMARY"?"CREATE $X[0] ".($X[0]!="INDEX"?"INDEX ":"").idf_escape($X[1]!=""?$X[1]:uniqid($R."_"))." ON ".table($R):"ALTER TABLE ".table($R)." ADD PRIMARY KEY")." (".implode(", ",$X[2]).")"))return
false;}return(!$t||queries("DROP INDEX ".implode(", ",$t)))&&(!$Db||queries("ALTER TABLE ".table($R)." DROP ".implode(", ",$Db)));}function
found_rows($S,$Z){}function
foreign_keys($R){$H=array();$_e=array("CASCADE","NO ACTION","SET NULL","SET DEFAULT");foreach(get_rows("EXEC sp_fkeys @fktable_name = ".q($R).", @fktable_owner = ".q(get_schema()))as$I){$n=&$H[$I["FK_NAME"]];$n["db"]=$I["PKTABLE_QUALIFIER"];$n["ns"]=$I["PKTABLE_OWNER"];$n["table"]=$I["PKTABLE_NAME"];$n["on_update"]=$_e[$I["UPDATE_RULE"]];$n["on_delete"]=$_e[$I["DELETE_RULE"]];$n["source"][]=$I["FKCOLUMN_NAME"];$n["target"][]=$I["PKCOLUMN_NAME"];}return$H;}function
truncate_tables($T){return
apply_queries("TRUNCATE TABLE",$T);}function
drop_views($kh){return
queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$kh)));}function
drop_tables($T){return
queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$T)));}function
move_tables($T,$kh,$ng){return
apply_queries("ALTER SCHEMA ".idf_escape($ng)." TRANSFER",array_merge($T,$kh));}function
trigger($z,$R){if($z=="")return
array();$J=get_rows("SELECT s.name [Trigger],
CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(s.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(s.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event],
CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing],
c.text
FROM sysobjects s
JOIN syscomments c ON s.id = c.id
WHERE s.xtype = 'TR' AND s.name = ".q($z));$H=reset($J);if($H)$H["Statement"]=preg_replace('~^.+\s+AS\s+~isU','',$H["text"]);return$H;}function
triggers($R){$H=array();foreach(get_rows("SELECT sys1.name,
CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event],
CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing]
FROM sysobjects sys1
JOIN sysobjects sys2 ON sys1.parent_obj = sys2.id
WHERE sys1.xtype = 'TR' AND sys2.name = ".q($R))as$I)$H[$I["name"]]=array($I["Timing"],$I["Event"]);return$H;}function
trigger_options(){return
array("Timing"=>array("AFTER","INSTEAD OF"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("AS"),);}function
schemas(){return
get_vals("SELECT name FROM sys.schemas");}function
get_schema(){if($_GET["ns"]!="")return$_GET["ns"];return
get_val("SELECT SCHEMA_NAME()");}function
set_schema($Ef){$_GET["ns"]=$Ef;return
true;}function
create_sql($R,$ra,$eg){if(is_view(table_status1($R))){$jh=view($R);return"CREATE VIEW ".table($R)." AS $jh[select]";}$l=array();$D=false;foreach(fields($R)as$z=>$k){$X=process_field($k,$k);if($X[6])$D=true;$l[]=implode("",$X);}foreach(indexes($R)as$z=>$t){if(!$D||$t["type"]!="PRIMARY"){$e=array();foreach($t["columns"]as$v=>$X)$e[]=idf_escape($X).($t["descs"][$v]?" DESC":"");$z=idf_escape($z);$l[]=($t["type"]=="INDEX"?"INDEX $z":"CONSTRAINT $z ".($t["type"]=="UNIQUE"?"UNIQUE":"PRIMARY KEY"))." (".implode(", ",$e).")";}}foreach(driver()->checkConstraints($R)as$z=>$Ka)$l[]="CONSTRAINT ".idf_escape($z)." CHECK ($Ka)";return"CREATE TABLE ".table($R)." (\n\t".implode(",\n\t",$l)."\n)";}function
foreign_keys_sql($R){$l=array();foreach(foreign_keys($R)as$tc)$l[]=ltrim(format_foreign_key($tc));return($l?"ALTER TABLE ".table($R)." ADD\n\t".implode(",\n\t",$l).";\n\n":"");}function
truncate_sql($R){return"TRUNCATE TABLE ".table($R);}function
use_sql($rb,$eg=""){return"USE ".idf_escape($rb);}function
trigger_sql($R){$H="";foreach(triggers($R)as$z=>$Hg)$H
.=create_trigger(" ON ".table($R),trigger($z,$R)).";";return$H;}function
convert_field($k){}function
unconvert_field($k,$H){return$H;}function
support($gc){return
preg_match('~^(check|comment|columns|database|drop_col|dump|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~',$gc);}}class
Adminer{static$instance;var$error='';private$values=array();function
name(){return"<a href='https://www.adminer.org/editor/'".target_blank()." id='h1'><img src='".h(preg_replace("~\\?.*~","",ME)."?file=logo.png&version=5.4.2")."' width='24' height='24' alt='' id='logo'>".'Editor'."</a>";}function
credentials(){return
array(SERVER,$_GET["username"],get_password());}function
connectSsl(){}function
permanentLogin($jb=false){return
password_file($jb);}function
bruteForceKey(){return$_SERVER["REMOTE_ADDR"];}function
serverName($M){}function
database(){if(connection()){$sb=adminer()->databases(false);return(!$sb?get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1)"):$sb[(information_schema($sb[0])?1:0)]);}}function
operators(){return
array("<=",">=");}function
schemas(){return
schemas();}function
databases($rc=true){return
get_databases($rc);}function
pluginsLinks(){}function
queryTimeout(){return
5;}function
afterConnect(){}function
headers(){}function
csp($mb){return$mb;}function
head($pb=null){return
true;}function
bodyClass(){echo" editor";}function
css(){$H=array();foreach(array("","-dark")as$ge){$m="adminer$ge.css";if(file_exists($m)){$jc=file_get_contents($m);$H["$m?v=".crc32($jc)]=($ge?"dark":(preg_match('~prefers-color-scheme:\s*dark~',$jc)?'':'light'));}}return$H;}function
loginForm(){echo"<table class='layout'>\n",adminer()->loginFormField('username','<tr><th>'.'Benutzer'.'<td>',input_hidden("auth[driver]","server").'<input name="auth[username]" autofocus value="'.h($_GET["username"]).'" autocomplete="username" autocapitalize="off">'),adminer()->loginFormField('password','<tr><th>'.'Passwort'.'<td>','<input type="password" name="auth[password]" autocomplete="current-password">'),"</table>\n","<p><input type='submit' value='".'Login'."'>\n",checkbox("auth[permanent]",1,$_COOKIE["adminer_permanent"],'Passwort speichern')."\n";}function
loginFormField($z,$Pc,$Y){return$Pc.$Y."\n";}function
login($Md,$B){return
true;}function
tableName($jg){return
h(isset($jg["Engine"])?($jg["Comment"]!=""?$jg["Comment"]:$jg["Name"]):"");}function
fieldName($k,$He=0){return
h(preg_replace('~\s+\[.*\]$~','',($k["comment"]!=""?$k["comment"]:$k["field"])));}function
selectLinks($jg,$N=""){$a=$jg["Name"];if($N!==null)echo'<p class="tabs"><a href="'.h(ME.'edit='.urlencode($a).$N).'">'.'Neuer Datensatz'."</a>\n";}function
foreignKeys($R){return
foreign_keys($R);}function
backwardKeys($R,$ig){$H=array();foreach(get_rows("SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = ".q(adminer()->database())."
AND REFERENCED_TABLE_SCHEMA = ".q(adminer()->database())."
AND REFERENCED_TABLE_NAME = ".q($R)."
ORDER BY ORDINAL_POSITION",null,"")as$I)$H[$I["TABLE_NAME"]]["keys"][$I["CONSTRAINT_NAME"]][$I["COLUMN_NAME"]]=$I["REFERENCED_COLUMN_NAME"];foreach($H
as$v=>$X){$z=adminer()->tableName(table_status1($v,true));if($z!=""){$Gf=preg_quote($ig);$L="(:|\\s*-)?\\s+";$H[$v]["name"]=(preg_match("(^$Gf$L(.+)|^(.+?)$L$Gf\$)iu",$z,$y)?$y[2].$y[3]:$z);}else
unset($H[$v]);}return$H;}function
backwardKeysPrint($wa,$I){foreach($wa
as$R=>$va){foreach($va["keys"]as$Va){$x=ME.'select='.urlencode($R);$q=0;foreach($Va
as$d=>$X)$x
.=where_link($q++,$d,$I[$X]);echo"<a href='".h($x)."'>".h($va["name"])."</a>";$x=ME.'edit='.urlencode($R);foreach($Va
as$d=>$X)$x
.="&set".urlencode("[".bracket_escape($d)."]")."=".urlencode($I[$X]);echo"<a href='".h($x)."' title='".'Neuer Datensatz'."'>+</a> ";}}}function
selectQuery($F,$cg,$ec=false){return"<!--\n".str_replace("--","--><!-- ",$F)."\n(".format_time($cg).")\n-->\n";}function
rowDescription($R){foreach(fields($R)as$k){if(preg_match("~varchar|character varying~",$k["type"]))return
idf_escape($k["field"]);}return"";}function
rowDescriptions($J,$vc){$H=$J;foreach($J[0]as$v=>$X){if(list($R,$r,$z)=$this->_foreignColumn($vc,$v)){$Zc=array();foreach($J
as$I)$Zc[$I[$v]]=q($I[$v]);$yb=$this->values[$R];if(!$yb)$yb=get_key_vals("SELECT $r, $z FROM ".table($R)." WHERE $r IN (".implode(", ",$Zc).")");foreach($J
as$le=>$I){if(isset($I[$v]))$H[$le][$v]=(string)$yb[$I[$v]];}}}return$H;}function
selectLink($X,$k){}function
selectVal($X,$x,$k,$Me){$H="$X";$x=h($x);if(is_blob($k)&&!is_utf8($X)){$H=lang_format(array('%d Byte','%d Bytes'),strlen($Me));if(preg_match("~^(GIF|\xFF\xD8\xFF|\x89PNG\x0D\x0A\x1A\x0A)~",$Me))$H="<img src='$x' alt='$H'>";}if(like_bool($k)&&$H!="")$H=(preg_match('~^(1|t|true|y|yes|on)$~i',$X)?'ja':'nein');if($x)$H="<a href='$x'".(is_url($x)?target_blank():"").">$H</a>";if(preg_match('~date~',$k["type"]))$H="<div class='datetime'>$H</div>";return$H;}function
editVal($X,$k){if(preg_match('~date|timestamp~',$k["type"])&&$X!==null)return
preg_replace('~^(\d{2}(\d+))-(0?(\d+))-(0?(\d+))~','$6.$4.$1',$X);return$X;}function
config(){return
array();}function
selectColumnsPrint($K,$e){}function
selectSearchPrint($Z,$e,$u){$Z=(array)$_GET["where"];echo'<fieldset id="fieldset-search"><legend>'.'Suchen'."</legend><div>\n";$_d=array();foreach($Z
as$v=>$X)$_d[$X["col"]]=$v;$q=0;$l=fields($_GET["select"]);foreach($e
as$z=>$xb){$k=$l[$z];if($k["type"]=="enum"||like_bool($k)){$v=$_d[$z];$q--;echo"<div>".h($xb).":".input_hidden("where[$q][col]",$z);$X=idx($Z[$v],"val");echo(like_bool($k)?"<select name='where[$q][val]'>".optionlist(array(""=>"",'nein','ja'),$X,true)."</select>":enum_input("checkbox"," name='where[$q][val][]'",$k,(array)$X,'leer')),"</div>\n";unset($e[$z]);}elseif(is_array($_=$this->foreignKeyOptions($_GET["select"],$z))){if($l[$z]["null"])$_[0]='('.'leer'.')';$v=$_d[$z];$q--;echo"<div>".h($xb).input_hidden("where[$q][col]",$z).input_hidden("where[$q][op]","=").": <select name='where[$q][val]'>".optionlist($_,idx($Z[$v],"val"),true)."</select></div>\n";unset($e[$z]);}}$q=0;foreach($Z
as$X){if(($X["col"]==""||$e[$X["col"]])&&"$X[col]$X[val]"!=""){echo"<div><select name='where[$q][col]'><option value=''>(".'beliebig'.")".optionlist($e,$X["col"],true)."</select>",html_select("where[$q][op]",array(-1=>"")+adminer()->operators(),$X["op"]),"<input type='search' name='where[$q][val]' value='".h($X["val"])."'>".script("mixin(qsl('input'), {onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});","")."</div>\n";$q++;}}echo"<div><select name='where[$q][col]'><option value=''>(".'beliebig'.")".optionlist($e,null,true)."</select>",script("qsl('select').onchange = selectAddRow;",""),html_select("where[$q][op]",array(-1=>"")+adminer()->operators()),"<input type='search' name='where[$q][val]'></div>",script("mixin(qsl('input'), {onchange: function () { this.parentNode.firstChild.onchange(); }, onsearch: selectSearchSearch});"),"</div></fieldset>\n";}function
selectOrderPrint($He,$e,$u){$Je=array();foreach($u
as$v=>$t){$He=array();foreach($t["columns"]as$X)$He[]=$e[$X];if(count(array_filter($He,'strlen'))>1&&$v!="PRIMARY")$Je[$v]=implode(", ",$He);}if($Je)echo'<fieldset><legend>'.'Ordnen'."</legend><div>","<select name='index_order'>".optionlist(array(""=>"")+$Je,(idx($_GET["order"],0)!=""?"":$_GET["index_order"]),true)."</select>","</div></fieldset>\n";if($_GET["order"])echo"<div style='display: none;'>".hidden_fields(array("order"=>array(1=>reset($_GET["order"])),"desc"=>($_GET["desc"]?array(1=>1):array()),))."</div>\n";}function
selectLimitPrint($w){echo"<fieldset><legend>".'Begrenzung'."</legend><div>",html_select("limit",array("",50,100),$w),"</div></fieldset>\n";}function
selectLengthPrint($rg){}function
selectActionPrint($u){echo"<fieldset><legend>".'Aktion'."</legend><div>","<input type='submit' value='".'Daten zeigen von'."'>","</div></fieldset>\n";}function
selectCommandPrint(){return
true;}function
selectImportPrint(){return
true;}function
selectEmailPrint($Mb,$e){}function
selectColumnsProcess($e,$u){return
array(array(),array());}function
selectSearchProcess($l,$u){$H=array();foreach((array)$_GET["where"]as$v=>$Z){$Ta=$Z["col"];$Ce=$Z["op"];$X=$Z["val"];if(($v>=0&&$Ta!="")||$X!=""){$ab=array();foreach(($Ta!=""?array($Ta=>$l[$Ta]):$l)as$z=>$k){if($Ta!=""||is_numeric($X)||!preg_match(number_type(),$k["type"])){$z=idf_escape($z);if($Ta!=""&&$k["type"]=="enum"){$bd=array();foreach($X
as$eh){if(preg_match('~val-~',$eh))$bd[]=q(substr($eh,4));}$ab[]=(in_array("null",$X)?"$z IS NULL OR ":"").($bd?"$z IN (".implode(", ",$bd).")":"0");}else{$sg=preg_match('~char|text|enum|set~',$k["type"]);$Y=adminer()->processInput($k,(!$Ce&&$sg&&preg_match('~^[^%]+$~',$X)?"%$X%":$X));$ab[]=driver()->convertSearch($z,$Z,$k).($Y=="NULL"?" IS".($Ce==">="?" NOT":"")." $Y":(in_array($Ce,adminer()->operators())||$Ce=="="?" $Ce $Y":($sg?" LIKE $Y":" IN (".($Y[0]=="'"?str_replace(",","', '",$Y):$Y).")")));if($v<0&&$X=="0")$ab[]="$z IS NULL";}}}$H[]=($ab?"(".implode(" OR ",$ab).")":"1 = 0");}}return$H;}function
selectOrderProcess($l,$u){$ed=$_GET["index_order"];if($ed!="")unset($_GET["order"][1]);if($_GET["order"])return
array(idf_escape(reset($_GET["order"])).($_GET["desc"]?" DESC":""));foreach(($ed!=""?array($u[$ed]):$u)as$t){if($ed!=""||$t["type"]=="INDEX"){$Jc=array_filter($t["descs"]);$xb=false;foreach($t["columns"]as$X){if(preg_match('~date|timestamp~',$l[$X]["type"])){$xb=true;break;}}$H=array();foreach($t["columns"]as$v=>$X)$H[]=idf_escape($X).(($Jc?$t["descs"][$v]:$xb)?" DESC":"");return$H;}}return
array();}function
selectLimitProcess(){return(isset($_GET["limit"])?intval($_GET["limit"]):50);}function
selectLengthProcess(){return"100";}function
selectEmailProcess($Z,$vc){return
false;}function
selectQueryBuild($K,$Z,$Dc,$He,$w,$A){return"";}function
messageQuery($F,$tg,$ec=false){return" <span class='time'>".@date("H:i:s")."</span><!--\n".str_replace("--","--><!-- ",$F)."\n".($tg?"($tg)\n":"")."-->";}function
editRowPrint($R,$l,$I,$Vg){}function
editFunctions($k){$H=array();if($k["null"]&&preg_match('~blob~',$k["type"]))$H["NULL"]='leer';$H[""]=($k["null"]||$k["auto_increment"]||like_bool($k)?"":"*");if(preg_match('~date|time~',$k["type"]))$H["now"]='jetzt';if(preg_match('~_(md5|sha1)$~i',$k["field"],$y))$H[]=strtolower($y[1]);return$H;}function
editInput($R,$k,$pa,$Y){if($k["type"]=="enum")return(isset($_GET["select"])?"<label><input type='radio'$pa value='orig' checked><i>".'Original'."</i></label> ":"").enum_input("radio",$pa,$k,$Y,'leer');$_=$this->foreignKeyOptions($R,$k["field"],$Y);if($_!==null)return(is_array($_)?"<select$pa>".optionlist($_,$Y,true)."</select>":"<input value='".h($Y)."'$pa class='hidden'>"."<input value='".h($_)."' class='jsonly'>"."<div></div>".script("qsl('input').oninput = partial(whisper, '".ME."script=complete&source=".urlencode($R)."&field=".urlencode($k["field"])."&value='); qsl('div').onclick = whisperClick;",""));if(like_bool($k))return'<input type="checkbox" value="1"'.(preg_match('~^(1|t|true|y|yes|on)$~i',$Y)?' checked':'')."$pa>";$Rc="";if(preg_match('~time~',$k["type"]))$Rc='HH:MM:SS';if(preg_match('~date|timestamp~',$k["type"]))$Rc='t.m.[jjjj]'.($Rc?" [$Rc]":"");if($Rc)return"<input value='".h($Y)."'$pa> ($Rc)";if(preg_match('~_(md5|sha1)$~i',$k["field"]))return"<input type='password' value='".h($Y)."'$pa>";return'';}function
editHint($R,$k,$Y){return(preg_match('~\s+(\[.*\])$~',($k["comment"]!=""?$k["comment"]:$k["field"]),$y)?h(" $y[1]"):'');}function
processInput($k,$Y,$p=""){if($p=="now")return"$p()";$H=$Y;if(preg_match('~date|timestamp~',$k["type"])&&preg_match('(^'.str_replace('\$1','(?P<p1>\d*)',preg_replace('~(\\\\\\$([2-6]))~','(?P<p\2>\d{1,2})',preg_quote('$6.$4.$1'))).'(.*))',$Y,$y))$H=($y["p1"]!=""?$y["p1"]:($y["p2"]!=""?($y["p2"]<70?20:19).$y["p2"]:gmdate("Y")))."-$y[p3]$y[p4]-$y[p5]$y[p6]".end($y);$H=q($H);if($Y==""&&like_bool($k))$H="'0'";elseif($Y==""&&($k["null"]||!preg_match('~char|text~',$k["type"])))$H="NULL";elseif(preg_match('~^(md5|sha1)$~',$p))$H="$p($H)";return
unconvert_field($k,$H);}function
dumpOutput(){return
array();}function
dumpFormat(){return
array('csv'=>'CSV,','csv;'=>'CSV;','tsv'=>'TSV');}function
dumpDatabase($h){}function
dumpTable($R,$eg,$vd=0){echo"\xef\xbb\xbf";}function
dumpData($R,$eg,$F){$G=connection()->query($F,1);if($G){while($I=$G->fetch_assoc()){if($eg=="table"){dump_csv(array_keys($I));$eg="INSERT";}dump_csv($I);}}}function
dumpFilename($Xc){return
friendly_url($Xc);}function
dumpHeaders($Xc,$je=false){$ac="csv";header("Content-Type: text/csv; charset=utf-8");return$ac;}function
dumpFooter(){}function
importServerPath(){}function
homepage(){return
true;}function
navigation($fe){echo"<h1>".adminer()->name()." <span class='version'>".VERSION;$oe=$_COOKIE["adminer_version"];echo" <a href='https://www.adminer.org/editor/#download'".target_blank()." id='version'>".(version_compare(VERSION,$oe)<0?h($oe):"")."</a>","</span></h1>\n";if($fe=="auth"){$mc=true;foreach((array)$_SESSION["pwds"]as$hh=>$Qf){foreach($Qf[""]as$V=>$B){if($B!==null){if($mc){echo"<ul id='logins'>",script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");$mc=false;}echo"<li><a href='".h(auth_url($hh,"",$V))."'>".($V!=""?h($V):"<i>".'leer'."</i>")."</a>\n";}}}}else{adminer()->databasesPrint($fe);if($fe!="db"&&$fe!="ns"){$S=table_status('',true);if(!$S)echo"<p class='message'>".'Keine Tabellen.'."\n";else
adminer()->tablesPrint($S);}}}function
syntaxHighlighting($T){}function
databasesPrint($fe){}function
tablesPrint($T){echo"<ul id='tables'>",script("mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});");foreach($T
as$I){echo'<li>';$z=adminer()->tableName($I);if($z!="")echo"<a href='".h(ME).'select='.urlencode($I["Name"])."'".bold($_GET["select"]==$I["Name"]||$_GET["edit"]==$I["Name"],"select")." title='".'Daten auswählen'."'>$z</a>\n";}echo"</ul>\n";}function
_foreignColumn($vc,$d){foreach((array)$vc[$d]as$uc){if(count($uc["source"])==1){$z=adminer()->rowDescription($uc["table"]);if($z!=""){$r=idf_escape($uc["target"][0]);return
array($uc["table"],$r,$z);}}}}private
function
foreignKeyOptions($R,$d,$Y=null){if(list($ng,$r,$z)=$this->_foreignColumn(column_foreign_keys($R),$d)){$H=&$this->values[$ng];if($H===null){$S=table_status1($ng);$H=($S["Rows"]>1000?"":array(""=>"")+get_key_vals("SELECT $r, $z FROM ".table($ng)." ORDER BY 2"));}if(!$H&&$Y!==null)return
get_val("SELECT $z FROM ".table($ng)." WHERE $r = ".q($Y));return$H;}}}class
Plugins{private
static$append=array('dumpFormat'=>true,'dumpOutput'=>true,'editRowPrint'=>true,'editFunctions'=>true,'config'=>true);var$plugins;var$error='';private$hooks=array();function
__construct($ef){if($ef===null){$ef=array();$za="adminer-plugins";if(is_dir($za)){foreach(glob("$za/*.php")as$m)$this->includeOnce($m);}$Qc=" href='https://www.adminer.org/plugins/#use'".target_blank();if(file_exists("$za.php")){$cd=$this->includeOnce("$za.php");if(is_array($cd)){foreach($cd
as$df)$ef[get_class($df)]=$df;}else$this->error
.=sprintf('%s muss <a%s>ein Array zurückgeben</a>.',"<b>$za.php</b>",$Qc)."<br>";}foreach(get_declared_classes()as$Pa){if(!$ef[$Pa]&&(preg_match('~^Adminer\w~i',$Pa)||is_subclass_of($Pa,'Adminer\Plugin'))){$uf=new
\ReflectionClass($Pa);$fb=$uf->getConstructor();if($fb&&$fb->getNumberOfRequiredParameters())$this->error
.=sprintf('<a%s>Konfigure</a> %s mit %s.',$Qc,"<b>$Pa</b>","<b>$za.php</b>")."<br>";else$ef[$Pa]=new$Pa;}}}$this->plugins=$ef;$ea=new
Adminer;$ef[]=$ea;$uf=new
\ReflectionObject($ea);foreach($uf->getMethods()as$ee){foreach($ef
as$df){$z=$ee->getName();if(method_exists($df,$z))$this->hooks[$z][]=$df;}}}function
includeOnce($m){return
include_once"./$m";}function
__call($z,array$Te){$ka=array();foreach($Te
as$v=>$X)$ka[]=&$Te[$v];$H=null;foreach($this->hooks[$z]as$df){$Y=call_user_func_array(array($df,$z),$ka);if($Y!==null){if(!self::$append[$z])return$Y;$H=$Y+(array)$H;}}return$H;}}abstract
class
Plugin{protected$translations=array();function
description(){return$this->lang('');}function
screenshot(){return"";}protected
function
lang($s,$ue=null){$ka=func_get_args();$ka[0]=idx($this->translations[LANG],$s)?:$s;return
call_user_func_array('Adminer\lang_format',$ka);}}Adminer::$instance=(function_exists('adminer_object')?adminer_object():(is_dir("adminer-plugins")||file_exists("adminer-plugins.php")?new
Plugins(null):new
Adminer));SqlDriver::$drivers=array("server"=>"MySQL / MariaDB")+SqlDriver::$drivers;if(!defined('Adminer\DRIVER')){define('Adminer\DRIVER',"server");if(extension_loaded("mysqli")&&$_GET["ext"]!="pdo"){class
Db
extends
\MySQLi{static$instance;var$extension="MySQLi",$flavor='';function
__construct(){parent::init();}function
attach($M,$V,$B){mysqli_report(MYSQLI_REPORT_OFF);list($Tc,$C)=host_port($M);$O=adminer()->connectSsl();if($O)$this->ssl_set($O['key'],$O['cert'],$O['ca'],'','');$H=@$this->real_connect(($M!=""?$Tc:ini_get("mysqli.default_host")),($M.$V!=""?$V:ini_get("mysqli.default_user")),($M.$V.$B!=""?$B:ini_get("mysqli.default_pw")),null,(is_numeric($C)?intval($C):ini_get("mysqli.default_port")),(is_numeric($C)?null:$C),($O?($O['verify']!==false?2048:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,0);return($H?'':$this->error);}function
set_charset($Ja){if(parent::set_charset($Ja))return
true;parent::set_charset('utf8');return$this->query("SET NAMES $Ja");}function
next_result(){return
self::more_results()&&parent::next_result();}function
quote($Q){return"'".$this->escape_string($Q)."'";}}}elseif(extension_loaded("mysql")&&!((ini_bool("sql.safe_mode")||ini_bool("mysql.allow_local_infile"))&&extension_loaded("pdo_mysql"))){class
Db
extends
SqlDb{private$link;function
attach($M,$V,$B){if(ini_bool("mysql.allow_local_infile"))return
sprintf('Deaktivieren Sie %s oder aktivieren Sie die Erweiterungen %s oder %s.',"'mysql.allow_local_infile'","MySQLi","PDO_MySQL");$this->link=@mysql_connect(($M!=""?$M:ini_get("mysql.default_host")),($M.$V!=""?$V:ini_get("mysql.default_user")),($M.$V.$B!=""?$B:ini_get("mysql.default_password")),true,131072);if(!$this->link)return
mysql_error();$this->server_info=mysql_get_server_info($this->link);return'';}function
set_charset($Ja){if(function_exists('mysql_set_charset')){if(mysql_set_charset($Ja,$this->link))return
true;mysql_set_charset('utf8',$this->link);}return$this->query("SET NAMES $Ja");}function
quote($Q){return"'".mysql_real_escape_string($Q,$this->link)."'";}function
select_db($rb){return
mysql_select_db($rb,$this->link);}function
query($F,$Ng=false){$G=@($Ng?mysql_unbuffered_query($F,$this->link):mysql_query($F,$this->link));$this->error="";if(!$G){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return
false;}if($G===true){$this->affected_rows=mysql_affected_rows($this->link);$this->info=mysql_info($this->link);return
true;}return
new
Result($G);}}class
Result{var$num_rows;private$result;private$offset=0;function
__construct($G){$this->result=$G;$this->num_rows=mysql_num_rows($G);}function
fetch_assoc(){return
mysql_fetch_assoc($this->result);}function
fetch_row(){return
mysql_fetch_row($this->result);}function
fetch_field(){$H=mysql_fetch_field($this->result,$this->offset++);$H->orgtable=$H->table;$H->charsetnr=($H->blob?63:0);return$H;}function
__destruct(){mysql_free_result($this->result);}}}elseif(extension_loaded("pdo_mysql")){class
Db
extends
PdoDb{var$extension="PDO_MySQL";function
attach($M,$V,$B){$_=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);$O=adminer()->connectSsl();if($O){if($O['key'])$_[\PDO::MYSQL_ATTR_SSL_KEY]=$O['key'];if($O['cert'])$_[\PDO::MYSQL_ATTR_SSL_CERT]=$O['cert'];if($O['ca'])$_[\PDO::MYSQL_ATTR_SSL_CA]=$O['ca'];if(isset($O['verify']))$_[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$O['verify'];}list($Tc,$C)=host_port($M);return$this->dsn("mysql:charset=utf8;host=$Tc".($C?(is_numeric($C)?";port=":";unix_socket=").$C:""),$V,$B,$_);}function
set_charset($Ja){return$this->query("SET NAMES $Ja");}function
select_db($rb){return$this->query("USE ".idf_escape($rb));}function
query($F,$Ng=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$Ng);return
parent::query($F,$Ng);}}}class
Driver
extends
SqlDriver{static$extensions=array("MySQLi","MySQL","PDO_MySQL");static$jush="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($M,$V,$B){$f=parent::connect($M,$V,$B);if(is_string($f)){if(function_exists('iconv')&&!is_utf8($f)&&strlen($Df=iconv("windows-1250","utf-8",$f))>strlen($f))$f=$Df;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('Zahlen'=>array("tinyint"=>3,"smallint"=>5,"mediumint"=>8,"int"=>10,"bigint"=>20,"decimal"=>66,"float"=>12,"double"=>21),'Datum und Zeit'=>array("date"=>10,"datetime"=>19,"timestamp"=>19,"time"=>10,"year"=>4),'Zeichenketten'=>array("char"=>255,"varchar"=>65535,"tinytext"=>255,"text"=>65535,"mediumtext"=>16777215,"longtext"=>4294967295),'Listen'=>array("enum"=>65535,"set"=>64),'Binär'=>array("bit"=>20,"binary"=>255,"varbinary"=>65535,"tinyblob"=>255,"blob"=>65535,"mediumblob"=>16777215,"longblob"=>4294967295),'Geometrie'=>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['Zeichenketten']["json"]=4294967295;if(min_version('',10.7,$f)){$this->types['Zeichenketten']["uuid"]=128;$this->insertFunctions['uuid']='uuid';}if(min_version(9,'',$f)){$this->types['Zahlen']["vector"]=16383;$this->insertFunctions['vector']='string_to_vector';}if(min_version(5.1,'',$f))$this->partitionBy=array("HASH","LINEAR HASH","KEY","LINEAR KEY","RANGE","LIST");if(min_version(5.7,10.2,$f))$this->generated=array("STORED","VIRTUAL");}function
unconvertFunction(array$k){return(preg_match("~binary~",$k["type"])?"<code class='jush-sql'>UNHEX</code>":($k["type"]=="bit"?doc_link(array('sql'=>'bit-value-literals.html'),"<code>b''</code>"):(preg_match("~geometry|point|linestring|polygon~",$k["type"])?"<code class='jush-sql'>GeomFromText</code>":"")));}function
insert($R,array$N){return($N?parent::insert($R,$N):queries("INSERT INTO ".table($R)." ()\nVALUES ()"));}function
insertUpdate($R,array$J,array$D){$e=array_keys(reset($J));$if="INSERT INTO ".table($R)." (".implode(", ",$e).") VALUES\n";$gh=array();foreach($e
as$v)$gh[$v]="$v = VALUES($v)";$gg="\nON DUPLICATE KEY UPDATE ".implode(", ",$gh);$gh=array();$Hd=0;foreach($J
as$N){$Y="(".implode(", ",$N).")";if($gh&&(strlen($if)+$Hd+strlen($Y)+strlen($gg)>1e6)){if(!queries($if.implode(",\n",$gh).$gg))return
false;$gh=array();$Hd=0;}$gh[]=$Y;$Hd+=strlen($Y)+2;}return
queries($if.implode(",\n",$gh).$gg);}function
slowQuery($F,$ug){if(min_version('5.7.8','10.1.2')){if($this->conn->flavor=='maria')return"SET STATEMENT max_statement_time=$ug FOR $F";elseif(preg_match('~^(SELECT\b)(.+)~is',$F,$y))return"$y[1] /*+ MAX_EXECUTION_TIME(".($ug*1000).") */ $y[2]";}}function
convertSearch($s,array$X,array$k){return(preg_match('~char|text|enum|set~',$k["type"])&&!preg_match("~^utf8~",$k["collation"])&&preg_match('~[\x80-\xFF]~',$X['val'])?"CONVERT($s USING ".charset($this->conn).")":$s);}function
warnings(){$G=$this->conn->query("SHOW WARNINGS");if($G&&$G->num_rows){ob_start();print_select_result($G);return
ob_get_clean();}}function
tableHelp($z,$vd=false){$Od=($this->conn->flavor=='maria');if(information_schema(DB))return
strtolower("information-schema-".($Od?"$z-table/":str_replace("_","-",$z)."-table.html"));if(DB=="mysql")return($Od?"mysql$z-table/":"system-schema.html");}function
partitionsInfo($R){$zc="FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = ".q(DB)." AND TABLE_NAME = ".q($R);$G=$this->conn->query("SELECT PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_ORDINAL_POSITION $zc ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");$H=array();list($H["partition_by"],$H["partition"],$H["partitions"])=$G->fetch_row();$Ye=get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $zc AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");$H["partition_names"]=array_keys($Ye);$H["partition_values"]=array_values($Ye);return$H;}function
hasCStyleEscapes(){static$Ha;if($Ha===null){$ag=get_val("SHOW VARIABLES LIKE 'sql_mode'",1,$this->conn);$Ha=(strpos($ag,'NO_BACKSLASH_ESCAPES')===false);}return$Ha;}function
engines(){$H=array();foreach(get_rows("SHOW ENGINES")as$I){if(preg_match("~YES|DEFAULT~",$I["Support"]))$H[]=$I["Engine"];}return$H;}function
indexAlgorithms(array$jg){return(preg_match('~^(MEMORY|NDB)$~',$jg["Engine"])?array("HASH","BTREE"):array());}}function
idf_escape($s){return"`".str_replace("`","``",$s)."`";}function
table($s){return
idf_escape($s);}function
get_databases($rc){$H=get_session("dbs");if($H===null){$F="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$H=($rc?slow_query($F):get_vals($F));restart_session();set_session("dbs",$H);stop_session();}return$H;}function
limit($F,$Z,$w,$we=0,$L=" "){return" $F$Z".($w?$L."LIMIT $w".($we?" OFFSET $we":""):"");}function
limit1($R,$F,$Z,$L="\n"){return
limit($F,$Z,1,0,$L);}function
db_collation($h,array$Ua){$H=null;$jb=get_val("SHOW CREATE DATABASE ".idf_escape($h),1);if(preg_match('~ COLLATE ([^ ]+)~',$jb,$y))$H=$y[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$jb,$y))$H=$Ua[$y[1]][-1];return$H;}function
logged_user(){return
get_val("SELECT USER()");}function
tables_list(){return
get_key_vals("SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME");}function
count_tables(array$sb){$H=array();foreach($sb
as$h)$H[$h]=count(get_vals("SHOW TABLES IN ".idf_escape($h)));return$H;}function
table_status($z="",$fc=false){$H=array();foreach(get_rows($fc?"SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($z!=""?"AND TABLE_NAME = ".q($z):"ORDER BY Name"):"SHOW TABLE STATUS".($z!=""?" LIKE ".q(addcslashes($z,"%_\\")):""))as$I){if($I["Engine"]=="InnoDB")$I["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$I["Comment"]);if(!isset($I["Engine"]))$I["Comment"]="";if($z!="")$I["Name"]=$z;$H[$I["Name"]]=$I;}return$H;}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){$Od=(connection()->flavor=='maria');$H=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($R)." ORDER BY ORDINAL_POSITION")as$I){$k=$I["COLUMN_NAME"];$U=$I["COLUMN_TYPE"];$Cc=$I["GENERATION_EXPRESSION"];$dc=$I["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$dc,$Bc);preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$U,$Rd);$i=$I["COLUMN_DEFAULT"];if($i!=""){$ud=preg_match('~text|json~',$Rd[1]);if(!$Od&&$ud)$i=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($i));if($Od||$ud){$i=($i=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($y){return
stripslashes(str_replace("''","'",$y[1]));},$i));}if(!$Od&&preg_match('~binary~',$Rd[1])&&preg_match('~^0x(\w*)$~',$i,$y))$i=pack("H*",$y[1]);}$H[$k]=array("field"=>$k,"full_type"=>$U,"type"=>$Rd[1],"length"=>$Rd[2],"unsigned"=>ltrim($Rd[3].$Rd[4]),"default"=>($Bc?($Od?$Cc:stripslashes($Cc)):$i),"null"=>($I["IS_NULLABLE"]=="YES"),"auto_increment"=>($dc=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$dc,$y)?$y[1]:""),"collation"=>$I["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$I[PRIVILEGES],where,order")),"comment"=>$I["COLUMN_COMMENT"],"primary"=>($I["COLUMN_KEY"]=="PRI"),"generated"=>($Bc[1]=="PERSISTENT"?"STORED":$Bc[1]),);}return$H;}function
indexes($R,$g=null){$H=array();foreach(get_rows("SHOW INDEX FROM ".table($R),$g)as$I){$z=$I["Key_name"];$H[$z]["type"]=($z=="PRIMARY"?"PRIMARY":($I["Index_type"]=="FULLTEXT"?"FULLTEXT":($I["Non_unique"]?($I["Index_type"]=="SPATIAL"?"SPATIAL":"INDEX"):"UNIQUE")));$H[$z]["columns"][]=$I["Column_name"];$H[$z]["lengths"][]=($I["Index_type"]=="SPATIAL"?null:$I["Sub_part"]);$H[$z]["descs"][]=null;$H[$z]["algorithm"]=$I["Index_type"];}return$H;}function
foreign_keys($R){static$af='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$H=array();$kb=get_val("SHOW CREATE TABLE ".table($R),1);if($kb){preg_match_all("~CONSTRAINT ($af) FOREIGN KEY ?\\(((?:$af,? ?)+)\\) REFERENCES ($af)(?:\\.($af))? \\(((?:$af,? ?)+)\\)(?: ON DELETE (".driver()->onActions."))?(?: ON UPDATE (".driver()->onActions."))?~",$kb,$Sd,PREG_SET_ORDER);foreach($Sd
as$y){preg_match_all("~$af~",$y[2],$Xf);preg_match_all("~$af~",$y[5],$ng);$H[idf_unescape($y[1])]=array("db"=>idf_unescape($y[4]!=""?$y[3]:$y[4]),"table"=>idf_unescape($y[4]!=""?$y[4]:$y[3]),"source"=>array_map('Adminer\idf_unescape',$Xf[0]),"target"=>array_map('Adminer\idf_unescape',$ng[0]),"on_delete"=>($y[6]?:"RESTRICT"),"on_update"=>($y[7]?:"RESTRICT"),);}}return$H;}function
view($z){return
array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($z),1)));}function
collations(){$H=array();foreach(get_rows("SHOW COLLATION")as$I){if($I["Default"])$H[$I["Charset"]][-1]=$I["Collation"];else$H[$I["Charset"]][]=$I["Collation"];}ksort($H);foreach($H
as$v=>$X)sort($H[$v]);return$H;}function
information_schema($h){return($h=="information_schema")||(min_version(5.5)&&$h=="performance_schema");}function
error(){return
h(preg_replace('~^You have an error.*syntax to use~U',"Syntax error",connection()->error));}function
create_database($h,$c){return
queries("CREATE DATABASE ".idf_escape($h).($c?" COLLATE ".q($c):""));}function
drop_databases(array$sb){$H=apply_queries("DROP DATABASE",$sb,'Adminer\idf_escape');restart_session();set_session("dbs",null);return$H;}function
rename_database($z,$c){$H=false;if(create_database($z,$c)){$T=array();$kh=array();foreach(tables_list()as$R=>$U){if($U=='VIEW')$kh[]=$R;else$T[]=$R;}$H=(!$T&&!$kh)||move_tables($T,$kh,$z);drop_databases($H?array(DB):array());}return$H;}function
auto_increment(){$sa=" PRIMARY KEY";if($_GET["create"]!=""&&$_POST["auto_increment_col"]){foreach(indexes($_GET["create"])as$t){if(in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"],$t["columns"],true)){$sa="";break;}if($t["type"]=="PRIMARY")$sa=" UNIQUE";}}return" AUTO_INCREMENT$sa";}function
alter_table($R,$z,array$l,array$tc,$Ya,$Pb,$c,$ra,$Xe){$b=array();foreach($l
as$k){if($k[1]){$i=$k[1][3];if(preg_match('~ GENERATED~',$i)){$k[1][3]=(connection()->flavor=='maria'?"":$k[1][2]);$k[1][2]=$i;}$b[]=($R!=""?($k[0]!=""?"CHANGE ".idf_escape($k[0]):"ADD"):" ")." ".implode($k[1]).($R!=""?$k[2]:"");}else$b[]="DROP ".idf_escape($k[0]);}$b=array_merge($b,$tc);$P=($Ya!==null?" COMMENT=".q($Ya):"").($Pb?" ENGINE=".q($Pb):"").($c?" COLLATE ".q($c):"").($ra!=""?" AUTO_INCREMENT=$ra":"");if($Xe){$Ye=array();if($Xe["partition_by"]=='RANGE'||$Xe["partition_by"]=='LIST'){foreach($Xe["partition_names"]as$v=>$X){$Y=$Xe["partition_values"][$v];$Ye[]="\n  PARTITION ".idf_escape($X)." VALUES ".($Xe["partition_by"]=='RANGE'?"LESS THAN":"IN").($Y!=""?" ($Y)":" MAXVALUE");}}$P
.="\nPARTITION BY $Xe[partition_by]($Xe[partition])";if($Ye)$P
.=" (".implode(",",$Ye)."\n)";elseif($Xe["partitions"])$P
.=" PARTITIONS ".(+$Xe["partitions"]);}elseif($Xe===null)$P
.="\nREMOVE PARTITIONING";if($R=="")return
queries("CREATE TABLE ".table($z)." (\n".implode(",\n",$b)."\n)$P");if($R!=$z)$b[]="RENAME TO ".table($z);if($P)$b[]=ltrim($P);return($b?queries("ALTER TABLE ".table($R)."\n".implode(",\n",$b)):true);}function
alter_indexes($R,$b){$Ia=array();foreach($b
as$X)$Ia[]=($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(",",$Ia));}function
truncate_tables(array$T){return
apply_queries("TRUNCATE TABLE",$T);}function
drop_views(array$kh){return
queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$kh)));}function
drop_tables(array$T){return
queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$T)));}function
move_tables(array$T,array$kh,$ng){$xf=array();foreach($T
as$R)$xf[]=table($R)." TO ".idf_escape($ng).".".table($R);if(!$xf||queries("RENAME TABLE ".implode(", ",$xf))){$vb=array();foreach($kh
as$R)$vb[table($R)]=view($R);connection()->select_db($ng);$h=idf_escape(DB);foreach($vb
as$z=>$jh){if(!queries("CREATE VIEW $z AS ".str_replace(" $h."," ",$jh["select"]))||!queries("DROP VIEW $h.$z"))return
false;}return
true;}return
false;}function
copy_tables(array$T,array$kh,$ng){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($T
as$R){$z=($ng==DB?table("copy_$R"):idf_escape($ng).".".table($R));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $z"))||!queries("CREATE TABLE $z LIKE ".table($R))||!queries("INSERT INTO $z SELECT * FROM ".table($R)))return
false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")))as$I){$Hg=$I["Trigger"];if(!queries("CREATE TRIGGER ".($ng==DB?idf_escape("copy_$Hg"):idf_escape($ng).".".idf_escape($Hg))." $I[Timing] $I[Event] ON $z FOR EACH ROW\n$I[Statement];"))return
false;}}foreach($kh
as$R){$z=($ng==DB?table("copy_$R"):idf_escape($ng).".".table($R));$jh=view($R);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $z"))||!queries("CREATE VIEW $z AS $jh[select]"))return
false;}return
true;}function
trigger($z,$R){if($z=="")return
array();$J=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($z));return
reset($J);}function
triggers($R){$H=array();foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")))as$I)$H[$I["Trigger"]]=array($I["Timing"],$I["Event"]);return$H;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("FOR EACH ROW"),);}function
routine($z,$U){$l=get_rows("SELECT
	PARAMETER_NAME field,
	DATA_TYPE type,
	CHARACTER_MAXIMUM_LENGTH length,
	REGEXP_REPLACE(DTD_IDENTIFIER, '^[^ ]+ ', '') `unsigned`,
	1 `null`,
	DTD_IDENTIFIER full_type,
	PARAMETER_MODE `inout`,
	CHARACTER_SET_NAME collation
FROM information_schema.PARAMETERS
WHERE SPECIFIC_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$U' AND SPECIFIC_NAME = ".q($z)."
ORDER BY ORDINAL_POSITION");$H=connection()->query("SELECT ROUTINE_COMMENT comment, ROUTINE_DEFINITION definition, 'SQL' language
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$U' AND ROUTINE_NAME = ".q($z))->fetch_assoc();if($l&&$l[0]['field']=='')$H['returns']=array_shift($l);$H['fields']=$l;return$H;}function
routines(){return
get_rows("SELECT SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE()");}function
routine_languages(){return
array();}function
routine_id($z,array$I){return
idf_escape($z);}function
last_id($G){return
get_val("SELECT LAST_INSERT_ID()");}function
explain(Db$f,$F){return$f->query("EXPLAIN ".(min_version(5.1)&&!min_version(5.7)?"PARTITIONS ":"").$F);}function
found_rows(array$S,array$Z){return($Z||$S["Engine"]!="InnoDB"?null:$S["Rows"]);}function
create_sql($R,$ra,$eg){$H=get_val("SHOW CREATE TABLE ".table($R),1);if(!$ra)$H=preg_replace('~ AUTO_INCREMENT=\d+~','',$H);return$H;}function
truncate_sql($R){return"TRUNCATE ".table($R);}function
use_sql($rb,$eg=""){$z=idf_escape($rb);$H="";if(preg_match('~CREATE~',$eg)&&($jb=get_val("SHOW CREATE DATABASE $z",1))){set_utf8mb4($jb);if($eg=="DROP+CREATE")$H="DROP DATABASE IF EXISTS $z;\n";$H
.="$jb;\n";}return$H."USE $z";}function
trigger_sql($R){$H="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")),null,"-- ")as$I)$H
.="\nCREATE TRIGGER ".idf_escape($I["Trigger"])." $I[Timing] $I[Event] ON ".table($I["Table"])." FOR EACH ROW\n$I[Statement];;\n";return$H;}function
show_variables(){return
get_rows("SHOW VARIABLES");}function
show_status(){return
get_rows("SHOW STATUS");}function
process_list(){return
get_rows("SHOW FULL PROCESSLIST");}function
convert_field(array$k){if(preg_match("~binary~",$k["type"]))return"HEX(".idf_escape($k["field"]).")";if($k["type"]=="bit")return"BIN(".idf_escape($k["field"])." + 0)";if(preg_match("~geometry|point|linestring|polygon~",$k["type"]))return(min_version(8)?"ST_":"")."AsWKT(".idf_escape($k["field"]).")";}function
unconvert_field(array$k,$H){if(preg_match("~binary~",$k["type"]))$H="UNHEX($H)";if($k["type"]=="bit")$H="CONVERT(b$H, UNSIGNED)";if(preg_match("~geometry|point|linestring|polygon~",$k["type"])){$if=(min_version(8)?"ST_":"");$H=$if."GeomFromText($H, $if"."SRID($k[field]))";}return$H;}function
support($gc){return
preg_match('~^(comment|columns|copy|database|drop_col|dump|indexes|kill|privileges|move_col|procedure|processlist|routine|sql|status|table|trigger|variables|view'.(min_version(5.1)?'|event':'').(min_version(8)?'|descidx':'').(min_version('8.0.16','10.2.1')?'|check':'').')$~',$gc);}function
kill_process($r){return
queries("KILL ".number($r));}function
connection_id(){return"SELECT CONNECTION_ID()";}function
max_connections(){return
get_val("SELECT @@max_connections");}function
types(){return
array();}function
type_values($r){return"";}function
schemas(){return
array();}function
get_schema(){return"";}function
set_schema($Ef,$g=null){return
true;}}define('Adminer\JUSH',Driver::$jush);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($wg,$j="",$Ea=array(),$xg=""){page_headers();if(is_ajax()&&$j){page_messages($j);exit;}if(!ob_get_level())ob_start('ob_gzhandler',4096);$yg=$wg.($xg!=""?": $xg":"");$zg=strip_tags($yg.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".adminer()->name());echo'<!DOCTYPE html>
<html lang="de" dir="ltr">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="noindex">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>',$zg,'</title>
<link rel="stylesheet" href="',h(preg_replace("~\\?.*~","",ME)."?file=default.css&version=5.4.2"),'">
';$nb=adminer()->css();if(is_int(key($nb)))$nb=array_fill_keys($nb,'light');$Lc=in_array('light',$nb)||in_array('',$nb);$Ic=in_array('dark',$nb)||in_array('',$nb);$pb=($Lc?($Ic?null:false):($Ic?:null));$ae=" media='(prefers-color-scheme: dark)'";if($pb!==false)echo"<link rel='stylesheet'".($pb?"":$ae)." href='".h(preg_replace("~\\?.*~","",ME)."?file=dark.css&version=5.4.2")."'>\n";echo"<meta name='color-scheme' content='".($pb===null?"light dark":($pb?"dark":"light"))."'>\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=5.4.2");if(adminer()->head($pb))echo"<link rel='icon' href='data:image/gif;base64,R0lGODlhEAAQAJEAAAQCBPz+/PwCBAROZCH5BAEAAAAALAAAAAAQABAAAAI2hI+pGO1rmghihiUdvUBnZ3XBQA7f05mOak1RWXrNq5nQWHMKvuoJ37BhVEEfYxQzHjWQ5qIAADs='>\n","<link rel='apple-touch-icon' href='".h(preg_replace("~\\?.*~","",ME)."?file=logo.png&version=5.4.2")."'>\n";foreach($nb
as$Zg=>$ge){$pa=($ge=='dark'&&!$pb?$ae:($ge=='light'&&$Ic?" media='(prefers-color-scheme: light)'":""));echo"<link rel='stylesheet'$pa href='".h($Zg)."'>\n";}echo"\n<body class='".'ltr'." nojs";adminer()->bodyClass();echo"'>\n";$m=get_temp_dir()."/adminer.version";echo
script("mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick".(isset($_COOKIE["adminer_version"])?"":", onload: partial(verifyVersion, '".VERSION."')")."});
document.body.classList.replace('nojs', 'js');
const offlineMessage = '".js_escape('Sie sind offline.')."';
const thousandsSeparator = '".js_escape(' ')."';"),"<div id='help' class='jush-".JUSH." jsonly hidden'></div>\n",script("mixin(qs('#help'), {onmouseover: () => { helpOpen = 1; }, onmouseout: helpMouseout});"),"<div id='content'>\n","<span id='menuopen' class='jsonly'>".icon("move","","menu","")."</span>".script("qs('#menuopen').onclick = event => { qs('#foot').classList.toggle('foot'); event.stopPropagation(); }");if($Ea!==null){$x=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'<p id="breadcrumb"><a href="'.h($x?:".").'">'.get_driver(DRIVER).'</a> » ';$x=substr(preg_replace('~\b(db|ns)=[^&]*&~','',ME),0,-1);$M=adminer()->serverName(SERVER);$M=($M!=""?$M:'Server');if($Ea===false)echo"$M\n";else{echo"<a href='".h($x)."' accesskey='1' title='Alt+Shift+1'>$M</a> » ";if($_GET["ns"]!=""||(DB!=""&&is_array($Ea)))echo'<a href="'.h($x."&db=".urlencode(DB).(support("scheme")?"&ns=":"")).'">'.h(DB).'</a> » ';if(is_array($Ea)){if($_GET["ns"]!="")echo'<a href="'.h(substr(ME,0,-1)).'">'.h($_GET["ns"]).'</a> » ';foreach($Ea
as$v=>$X){$xb=(is_array($X)?$X[1]:h($X));if($xb!="")echo"<a href='".h(ME."$v=").urlencode(is_array($X)?$X[0]:$X)."'>$xb</a> » ";}}echo"$wg\n";}}echo"<h2>$yg</h2>\n","<div id='ajaxstatus' class='jsonly hidden'></div>\n";restart_session();page_messages($j);$sb=&get_session("dbs");if(DB!=""&&$sb&&!in_array(DB,$sb,true))$sb=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$mb){$Nc=array();foreach($mb
as$v=>$X)$Nc[]="$v $X";header("Content-Security-Policy: ".implode("; ",$Nc));}adminer()->headers();}function
csp(){return
array(array("script-src"=>"'self' 'unsafe-inline' 'nonce-".get_nonce()."' 'strict-dynamic'","connect-src"=>"'self' https://www.adminer.org","frame-src"=>"'none'","object-src"=>"'none'","base-uri"=>"'none'","form-action"=>"'self'",),);}function
get_nonce(){static$qe;if(!$qe)$qe=base64_encode(rand_string());return$qe;}function
page_messages($j){$Yg=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$de=idx($_SESSION["messages"],$Yg);if($de){echo"<div class='message'>".implode("</div>\n<div class='message'>",$de)."</div>".script("messagesPrint();");unset($_SESSION["messages"][$Yg]);}if($j)echo"<div class='error'>$j</div>\n";if(adminer()->error)echo"<div class='error'>".adminer()->error."</div>\n";}function
page_footer($fe=""){echo"</div>\n\n<div id='foot' class='foot'>\n<div id='menu'>\n";adminer()->navigation($fe);echo"</div>\n";if($fe!="auth")echo'<form action="" method="post">
<p class="logout">
<span>',h($_GET["username"])."\n",'</span>
<input type="submit" name="logout" value="Abmelden" id="logout">
',input_token(),'</form>
';echo"</div>\n\n",script("setupSubmitHighlight(document);");}function
int32($le){while($le>=2147483648)$le-=4294967296;while($le<=-2147483649)$le+=4294967296;return(int)$le;}function
long2str(array$W,$mh){$Df='';foreach($W
as$X)$Df
.=pack('V',$X);if($mh)return
substr($Df,0,end($W));return$Df;}function
str2long($Df,$mh){$W=array_values(unpack('V*',str_pad($Df,4*ceil(strlen($Df)/4),"\0")));if($mh)$W[]=strlen($Df);return$W;}function
xxtea_mx($rh,$qh,$hg,$yd){return
int32((($rh>>5&0x7FFFFFF)^$qh<<2)+(($qh>>3&0x1FFFFFFF)^$rh<<4))^int32(($hg^$qh)+($yd^$rh));}function
encrypt_string($dg,$v){if($dg=="")return"";$v=array_values(unpack("V*",pack("H*",md5($v))));$W=str2long($dg,true);$le=count($W)-1;$rh=$W[$le];$qh=$W[0];$of=floor(6+52/($le+1));$hg=0;while($of-->0){$hg=int32($hg+0x9E3779B9);$Hb=$hg>>2&3;for($Qe=0;$Qe<$le;$Qe++){$qh=$W[$Qe+1];$ke=xxtea_mx($rh,$qh,$hg,$v[$Qe&3^$Hb]);$rh=int32($W[$Qe]+$ke);$W[$Qe]=$rh;}$qh=$W[0];$ke=xxtea_mx($rh,$qh,$hg,$v[$Qe&3^$Hb]);$rh=int32($W[$le]+$ke);$W[$le]=$rh;}return
long2str($W,false);}function
decrypt_string($dg,$v){if($dg=="")return"";if(!$v)return
false;$v=array_values(unpack("V*",pack("H*",md5($v))));$W=str2long($dg,false);$le=count($W)-1;$rh=$W[$le];$qh=$W[0];$of=floor(6+52/($le+1));$hg=int32($of*0x9E3779B9);while($hg){$Hb=$hg>>2&3;for($Qe=$le;$Qe>0;$Qe--){$rh=$W[$Qe-1];$ke=xxtea_mx($rh,$qh,$hg,$v[$Qe&3^$Hb]);$qh=int32($W[$Qe]-$ke);$W[$Qe]=$qh;}$rh=$W[$le];$ke=xxtea_mx($rh,$qh,$hg,$v[$Qe&3^$Hb]);$qh=int32($W[0]-$ke);$W[0]=$qh;$hg=int32($hg-0x9E3779B9);}return
long2str($W,true);}$cf=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$X){list($v)=explode(":",$X);$cf[$v]=$X;}}function
add_invalid_login(){$ya=get_temp_dir()."/adminer.invalid";foreach(glob("$ya*")?:array($ya)as$m){$o=file_open_lock($m);if($o)break;}if(!$o)$o=file_open_lock("$ya-".rand_string());if(!$o)return;$qd=unserialize(stream_get_contents($o));$tg=time();if($qd){foreach($qd
as$rd=>$X){if($X[0]<$tg)unset($qd[$rd]);}}$pd=&$qd[adminer()->bruteForceKey()];if(!$pd)$pd=array($tg+30*60,0);$pd[1]++;file_write_unlock($o,serialize($qd));}function
check_invalid_login(array&$cf){$qd=array();foreach(glob(get_temp_dir()."/adminer.invalid*")as$m){$o=file_open_lock($m);if($o){$qd=unserialize(stream_get_contents($o));file_unlock($o);break;}}$pd=idx($qd,adminer()->bruteForceKey(),array());$pe=($pd[1]>29?$pd[0]-time():0);if($pe>0)auth_error(lang_format(array('Zu viele erfolglose Login-Versuche. Bitte probieren Sie es in %d Minute noch einmal.','Zu viele erfolglose Login-Versuche. Bitte probieren Sie es in %d Minuten noch einmal.'),ceil($pe/60)),$cf);}$qa=$_POST["auth"];if($qa){session_regenerate_id();$hh=$qa["driver"];$M=$qa["server"];$V=$qa["username"];$B=(string)$qa["password"];$h=$qa["db"];set_password($hh,$M,$V,$B);$_SESSION["db"][$hh][$M][$V][$h]=true;if($qa["permanent"]){$v=implode("-",array_map('base64_encode',array($hh,$M,$V,$h)));$mf=adminer()->permanentLogin(true);$cf[$v]="$v:".base64_encode($mf?encrypt_string($B,$mf):"");cookie("adminer_permanent",implode(" ",$cf));}if(count($_POST)==1||DRIVER!=$hh||SERVER!=$M||$_GET["username"]!==$V||DB!=$h)redirect(auth_url($hh,$M,$V,$h));}elseif($_POST["logout"]&&(!$_SESSION["token"]||verify_token())){foreach(array("pwds","db","dbs","queries")as$v)set_session($v,null);unset_permanent($cf);redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1),'Abmeldung erfolgreich.'.' '.'Danke, dass Sie Adminer genutzt haben. <a href="https://www.adminer.org/de/donation/">Spenden willkommen!</a>.');}elseif($cf&&!$_SESSION["pwds"]){session_regenerate_id();$mf=adminer()->permanentLogin();foreach($cf
as$v=>$X){list(,$Oa)=explode(":",$X);list($hh,$M,$V,$h)=array_map('base64_decode',explode("-",$v));set_password($hh,$M,$V,decrypt_string(base64_decode($Oa),$mf));$_SESSION["db"][$hh][$M][$V][$h]=true;}}function
unset_permanent(array&$cf){foreach($cf
as$v=>$X){list($hh,$M,$V,$h)=array_map('base64_decode',explode("-",$v));if($hh==DRIVER&&$M==SERVER&&$V==$_GET["username"]&&$h==DB)unset($cf[$v]);}cookie("adminer_permanent",implode(" ",$cf));}function
auth_error($j,array&$cf){$Rf=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$Rf]||$_GET[$Rf])&&!$_SESSION["token"])$j='Sitzungsdauer abgelaufen, bitte erneut anmelden.';else{restart_session();add_invalid_login();$B=get_password();if($B!==null){if($B===false)$j
.=($j?'<br>':'').sprintf('Das Master-Passwort ist abgelaufen. <a href="https://www.adminer.org/de/extension/"%s>Implementieren</a> Sie die %s Methode, um es permanent zu machen.',target_blank(),'<code>permanentLogin()</code>');set_password(DRIVER,SERVER,$_GET["username"],null);}unset_permanent($cf);}}if(!$_COOKIE[$Rf]&&$_GET[$Rf]&&ini_bool("session.use_only_cookies"))$j='Unterstüzung für PHP-Sessions muss aktiviert sein.';$Te=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$Te["lifetime"]);if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);page_header('Login',$j,null);echo"<form action='' method='post'>\n","<div>";if(hidden_fields($_POST,array("auth")))echo"<p class='message'>".'Die Aktion wird nach erfolgreicher Anmeldung mit denselben Anmeldedaten ausgeführt.'."\n";echo"</div>\n";adminer()->loginForm();echo"</form>\n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent($cf);page_header('Keine Erweiterungen installiert',sprintf('Keine der unterstützten PHP-Erweiterungen (%s) ist vorhanden.',implode(", ",Driver::$extensions)),false);page_footer("auth");exit;}$f='';if(isset($_GET["username"])&&is_string(get_password())){list(,$C)=host_port(SERVER);if(preg_match('~^\s*([-+]?\d+)~',$C,$y)&&($y[1]<1024||$y[1]>65535))auth_error('Die Verbindung zu privilegierten Ports ist nicht erlaubt.',$cf);check_invalid_login($cf);$lb=adminer()->credentials();$f=Driver::connect($lb[0],$lb[1],$lb[2]);if(is_object($f)){Db::$instance=$f;Driver::$instance=new
Driver($f);if($f->flavor)save_settings(array("vendor-".DRIVER."-".SERVER=>get_driver(DRIVER)));}}$Md=null;if(!is_object($f)||($Md=adminer()->login($_GET["username"],get_password()))!==true){$j=(is_string($f)?nl_br(h($f)):(is_string($Md)?$Md:'Ungültige Anmelde-Informationen.')).(preg_match('~^ | $~',get_password())?'<br>'.'Es gibt ein Leerzeichen im Eingabepasswort, das die Ursache sein könnte.':'');auth_error($j,$cf);}if($_POST["logout"]&&$_SESSION["token"]&&!verify_token()){page_header('Abmelden','CSRF Token ungültig. Bitte die Formulardaten erneut abschicken.');page_footer("db");exit;}if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);stop_session(true);if($qa&&$_POST["token"])$_POST["token"]=get_token();$j='';if($_POST){if(!verify_token()){$jd="max_input_vars";$Yd=ini_get($jd);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$v){$X=ini_get($v);if($X&&(!$Yd||$X<$Yd)){$jd=$v;$Yd=$X;}}}$j=(!$_POST["token"]&&$Yd?sprintf('Die maximal erlaubte Anzahl der Felder ist überschritten. Bitte %s erhöhen.',"'$jd'"):'CSRF Token ungültig. Bitte die Formulardaten erneut abschicken.'.' '.'Wenn Sie diese Anfrage nicht von Adminer gesendet haben, schließen Sie diese Seite.');}}elseif($_SERVER["REQUEST_METHOD"]=="POST"){$j=sprintf('POST-Daten sind zu groß. Reduzieren Sie die Größe oder vergrößern Sie den Wert %s in der Konfiguration.',"'post_max_size'");if(isset($_GET["sql"]))$j
.=' '.'Sie können eine große SQL-Datei per FTP hochladen und dann vom Server importieren.';}function
doc_link(array$Ze,$pg=""){return"";}function
email_header($Nc){return"=?UTF-8?B?".base64_encode($Nc)."?=";}function
send_mail($Lb,$fg,$ce,$zc="",array$kc=array()){$Tb=PHP_EOL;$ce=str_replace("\n",$Tb,wordwrap(str_replace("\r","","$ce\n")));$Da=uniqid("boundary");$oa="";foreach((array)$kc["error"]as$v=>$X){if(!$X)$oa
.="--$Da$Tb"."Content-Type: ".str_replace("\n","",$kc["type"][$v]).$Tb."Content-Disposition: attachment; filename=\"".preg_replace('~["\n]~','',$kc["name"][$v])."\"$Tb"."Content-Transfer-Encoding: base64$Tb$Tb".chunk_split(base64_encode(file_get_contents($kc["tmp_name"][$v])),76,$Tb).$Tb;}$_a="";$Oc="Content-Type: text/plain; charset=utf-8$Tb"."Content-Transfer-Encoding: 8bit";if($oa){$oa
.="--$Da--$Tb";$_a="--$Da$Tb$Oc$Tb$Tb";$Oc="Content-Type: multipart/mixed; boundary=\"$Da\"";}$Oc
.=$Tb."MIME-Version: 1.0$Tb"."X-Mailer: Adminer Editor".($zc?$Tb."From: ".str_replace("\n","",$zc):"");return
mail($Lb,email_header($fg),$_a.$ce.$oa,$Oc);}function
like_bool(array$k){return
preg_match("~bool|bit~",$k["type"]);}connection()->select_db(adminer()->database());adminer()->afterConnect();add_driver(DRIVER,'Login');if(isset($_GET["select"])&&($_POST["edit"]||$_POST["clone"])&&!$_POST["save"])$_GET["edit"]=$_GET["select"];if(isset($_GET["download"])){$a=$_GET["download"];$l=fields($a);header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=".friendly_url("$a-".implode("_",$_GET["where"])).".".friendly_url($_GET["field"]));$K=array(idf_escape($_GET["field"]));$G=driver()->select($a,$K,array(where($_GET,$l)),$K);$I=($G?$G->fetch_row():array());echo
driver()->value($I[0],$l[$_GET["field"]]);exit;}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$l=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$l):""):where($_GET,$l));$Vg=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($l
as$z=>$k){if((!$Vg&&!isset($k["privileges"]["insert"]))||adminer()->fieldName($k)=="")unset($l[$z]);}if($_POST&&!$j&&!isset($_GET["select"])){$Ld=$_POST["referer"];if($_POST["insert"])$Ld=($Vg?null:$_SERVER["REQUEST_URI"]);elseif(!preg_match('~^.+&select=.+$~',$Ld))$Ld=ME."select=".urlencode($a);$u=indexes($a);$Qg=unique_array($_GET["where"],$u);$qf="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($Ld,'Datensatz wurde gelöscht.',driver()->delete($a,$qf,$Qg?0:1));else{$N=array();foreach($l
as$z=>$k){$X=process_input($k);if($X!==false&&$X!==null)$N[idf_escape($z)]=$X;}if($Vg){if(!$N)redirect($Ld);queries_redirect($Ld,'Datensatz wurde geändert.',driver()->update($a,$N,$qf,$Qg?0:1));if(is_ajax()){page_headers();page_messages($j);exit;}}else{$G=driver()->insert($a,$N);$Fd=($G?last_id($G):0);queries_redirect($Ld,sprintf('Datensatz%s wurde eingefügt.',($Fd?" $Fd":"")),$G);}}}$I=null;if($Z){$K=array();foreach($l
as$z=>$k){if(isset($k["privileges"]["select"])){$ma=($_POST["clone"]&&$k["auto_increment"]?"''":convert_field($k));$K[]=($ma?"$ma AS ":"").idf_escape($z);}}$I=array();if(!support("table"))$K=array("*");if($K){$G=driver()->select($a,$K,array($Z),$K,array(),(isset($_GET["select"])?2:1));if(!$G)$j=error();else{$I=$G->fetch_assoc();if(!$I)$I=false;}if(isset($_GET["select"])&&(!$I||$G->fetch_assoc()))$I=null;}}if(!support("table")&&!$l){if(!$Z){$G=driver()->select($a,array("*"),array(),array("*"));$I=($G?$G->fetch_assoc():false);if(!$I)$I=array(driver()->primary=>"");}if($I){foreach($I
as$v=>$X){if(!$Z)$I[$v]=null;$l[$v]=array("field"=>$v,"null"=>($v!=driver()->primary),"auto_increment"=>($v==driver()->primary));}}}if($_POST["save"])$I=(array)$_POST["fields"]+($I?$I:array());edit_form($a,$l,$I,$Vg,$j);}elseif(isset($_GET["select"])){$a=$_GET["select"];$S=table_status1($a);$u=indexes($a);$l=fields($a);$wc=column_foreign_keys($a);$xe=$S["Oid"];$fa=get_settings("adminer_import");$Bf=array();$e=array();$Hf=array();$Ie=array();$rg="";foreach($l
as$v=>$k){$z=adminer()->fieldName($k);$me=html_entity_decode(strip_tags($z),ENT_QUOTES);if(isset($k["privileges"]["select"])&&$z!=""){$e[$v]=$me;if(is_shortable($k))$rg=adminer()->selectLengthProcess();}if(isset($k["privileges"]["where"])&&$z!="")$Hf[$v]=$me;if(isset($k["privileges"]["order"])&&$z!="")$Ie[$v]=$me;$Bf+=$k["privileges"];}list($K,$Dc)=adminer()->selectColumnsProcess($e,$u);$K=array_unique($K);$Dc=array_unique($Dc);$sd=count($Dc)<count($K);$Z=adminer()->selectSearchProcess($l,$u);$He=adminer()->selectOrderProcess($l,$u);$w=adminer()->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$Rg=>$I){$ma=convert_field($l[key($I)]);$K=array($ma?:idf_escape(key($I)));$Z[]=where_check($Rg,$l);$H=driver()->select($a,$K,$Z,$K);if($H)echo
first($H->fetch_row());}exit;}$D=$Tg=array();foreach($u
as$t){if($t["type"]=="PRIMARY"){$D=array_flip($t["columns"]);$Tg=($K?$D:array());foreach($Tg
as$v=>$X){if(in_array(idf_escape($v),$K))unset($Tg[$v]);}break;}}if($xe&&!$D){$D=$Tg=array($xe=>0);$u[]=array("type"=>"PRIMARY","columns"=>array($xe));}if($_POST&&!$j){$oh=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$Na=array();foreach($_POST["check"]as$Ka)$Na[]=where_check($Ka,$l);$oh[]="((".implode(") OR (",$Na)."))";}$oh=($oh?"\nWHERE ".implode(" AND ",$oh):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);adminer()->dumpTable($a,"");$zc=($K?implode(", ",$K):"*").convert_fields($e,$l,$K)."\nFROM ".table($a);$Fc=($Dc&&$sd?"\nGROUP BY ".implode(", ",$Dc):"").($He?"\nORDER BY ".implode(", ",$He):"");$F="SELECT $zc$oh$Fc";if(is_array($_POST["check"])&&!$D){$Pg=array();foreach($_POST["check"]as$X)$Pg[]="(SELECT".limit($zc,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$l).$Fc,1).")";$F=implode(" UNION ALL ",$Pg);}adminer()->dumpData($a,"table",$F);adminer()->dumpFooter();exit;}if(!adminer()->selectEmailProcess($Z,$wc)){if($_POST["save"]||$_POST["delete"]){$G=true;$ga=0;$N=array();if(!$_POST["delete"]){foreach($_POST["fields"]as$z=>$X){$X=process_input($l[$z]);if($X!==null&&($_POST["clone"]||$X!==false))$N[idf_escape($z)]=($X!==false?$X:idf_escape($z));}}if($_POST["delete"]||$N){$F=($_POST["clone"]?"INTO ".table($a)." (".implode(", ",array_keys($N)).")\nSELECT ".implode(", ",$N)."\nFROM ".table($a):"");if($_POST["all"]||($D&&is_array($_POST["check"]))||$sd){$G=($_POST["delete"]?driver()->delete($a,$oh):($_POST["clone"]?queries("INSERT $F$oh".driver()->insertReturning($a)):driver()->update($a,$N,$oh)));$ga=connection()->affected_rows;if(is_object($G))$ga+=$G->num_rows;}else{foreach((array)$_POST["check"]as$X){$nh="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$l);$G=($_POST["delete"]?driver()->delete($a,$nh,1):($_POST["clone"]?queries("INSERT".limit1($a,$F,$nh)):driver()->update($a,$N,$nh,1)));if(!$G)break;$ga+=connection()->affected_rows;}}}$ce=sprintf('%d Artikel betroffen.',$ga);if($_POST["clone"]&&$G&&$ga==1){$Fd=last_id($G);if($Fd)$ce=sprintf('Datensatz%s wurde eingefügt.'," $Fd");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page":""),$ce,$G);if(!$_POST["delete"]){$gf=(array)$_POST["fields"];edit_form($a,array_intersect_key($l,$gf),$gf,!$_POST["clone"],$j);page_footer();exit;}}elseif(!$_POST["import"]){if(!$_POST["val"])$j='Ctrl+Klick zum Bearbeiten des Wertes.';else{$G=true;$ga=0;foreach($_POST["val"]as$Rg=>$I){$N=array();foreach($I
as$v=>$X){$v=bracket_escape($v,true);$N[idf_escape($v)]=(preg_match('~char|text~',$l[$v]["type"])||$X!=""?adminer()->processInput($l[$v],$X):"NULL");}$G=driver()->update($a,$N," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($Rg,$l),($sd||$D?0:1)," ");if(!$G)break;$ga+=connection()->affected_rows;}queries_redirect(remove_from_uri(),sprintf('%d Artikel betroffen.',$ga),$G);}}elseif(!is_string($jc=get_file("csv_file",true)))$j=upload_error($jc);elseif(!preg_match('~~u',$jc))$j='Die Datei muss UTF-8 kodiert sein.';else{save_settings(array("output"=>$fa["output"],"format"=>$_POST["separator"]),"adminer_import");$G=true;$Va=array_keys($l);preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$jc,$Sd);$ga=count($Sd[0]);driver()->begin();$L=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$J=array();foreach($Sd[0]as$v=>$X){preg_match_all("~((?>\"[^\"]*\")+|[^$L]*)$L~",$X.$L,$Td);if(!$v&&!array_diff($Td[1],$Va)){$Va=$Td[1];$ga--;}else{$N=array();foreach($Td[1]as$q=>$Ta)$N[idf_escape($Va[$q])]=($Ta==""&&$l[$Va[$q]]["null"]?"NULL":q(preg_match('~^".*"$~s',$Ta)?str_replace('""','"',substr($Ta,1,-1)):$Ta));$J[]=$N;}}$G=(!$J||driver()->insertUpdate($a,$J,$D));if($G)driver()->commit();queries_redirect(remove_from_uri("page"),lang_format(array('%d Datensatz wurde importiert.','%d Datensätze wurden importiert.'),$ga),$G);driver()->rollback();}}}$lg=adminer()->tableName($S);if(is_ajax()){page_headers();ob_start();}else
page_header('Daten zeigen von'.": $lg",$j);$N=null;if(isset($Bf["insert"])||!support("table")){$Te=array();foreach((array)$_GET["where"]as$X){if(isset($wc[$X["col"]])&&count($wc[$X["col"]])==1&&($X["op"]=="="||(!$X["op"]&&(is_array($X["val"])||!preg_match('~[_%]~',$X["val"])))))$Te["set"."[".bracket_escape($X["col"])."]"]=$X["val"];}$N=$Te?"&".http_build_query($Te):"";}adminer()->selectLinks($S,$N);if(!$e&&support("table"))echo"<p class='error'>".'Auswahl der Tabelle fehlgeschlagen'.($l?".":": ".error())."\n";else{echo"<form action='' id='form'>\n","<div style='display: none;'>";hidden_fields_get();echo(DB!=""?input_hidden("db",DB).(isset($_GET["ns"])?input_hidden("ns",$_GET["ns"]):""):""),input_hidden("select",$a),"</div>\n";adminer()->selectColumnsPrint($K,$e);adminer()->selectSearchPrint($Z,$Hf,$u);adminer()->selectOrderPrint($He,$Ie,$u);adminer()->selectLimitPrint($w);adminer()->selectLengthPrint($rg);adminer()->selectActionPrint($u);echo"</form>\n";$A=$_GET["page"];$yc=null;if($A=="last"){$yc=get_val(count_rows($a,$Z,$sd,$Dc));$A=floor(max(0,intval($yc)-1)/$w);}$If=$K;$Ec=$Dc;if(!$If){$If[]="*";$hb=convert_fields($e,$l,$K);if($hb)$If[]=substr($hb,2);}foreach($K
as$v=>$X){$k=$l[idf_unescape($X)];if($k&&($ma=convert_field($k)))$If[$v]="$ma AS $X";}if(!$sd&&$Tg){foreach($Tg
as$v=>$X){$If[]=idf_escape($v);if($Ec)$Ec[]=idf_escape($v);}}$G=driver()->select($a,$If,$Z,$Ec,$He,$w,$A,true);if(!$G)echo"<p class='error'>".error()."\n";else{if(JUSH=="mssql"&&$A)$G->seek($w*$A);$Nb=array();echo"<form action='' method='post' enctype='multipart/form-data'>\n";$J=array();while($I=$G->fetch_assoc()){if($A&&JUSH=="oracle")unset($I["RNUM"]);$J[]=$I;}if($_GET["page"]!="last"&&$w&&$Dc&&$sd&&JUSH=="sql")$yc=get_val(" SELECT FOUND_ROWS()");if(!$J)echo"<p class='message'>".'Keine Datensätze.'."\n";else{$xa=adminer()->backwardKeys($a,$lg);echo"<div class='scrollable'>","<table id='table' class='nowrap checkable odds'>",script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});"),"<thead><tr>".(!$Dc&&$K?"":"<td><input type='checkbox' id='all-page' class='jsonly'>".script("qs('#all-page').onclick = partial(formCheck, /check/);","")." <a href='".h($_GET["modify"]?remove_from_uri("modify"):$_SERVER["REQUEST_URI"]."&modify=1")."'>".'Ändern'."</a>");$ne=array();$Ac=array();reset($K);$sf=1;foreach($J[0]as$v=>$X){if(!isset($Tg[$v])){$X=idx($_GET["columns"],key($K))?:array();$k=$l[$K?($X?$X["col"]:current($K)):$v];$z=($k?adminer()->fieldName($k,$sf):($X["fun"]?"*":h($v)));if($z!=""){$sf++;$ne[$v]=$z;$d=idf_escape($v);$Uc=remove_from_uri('(order|desc)[^=]*|page').'&order%5B0%5D='.urlencode($v);$xb="&desc%5B0%5D=1";echo"<th id='th[".h(bracket_escape($v))."]'>".script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});","");$_c=apply_sql_function($X["fun"],$z);$Wf=isset($k["privileges"]["order"])||$_c!=$z;echo($Wf?"<a href='".h($Uc.($He[0]==$d||$He[0]==$v?$xb:''))."'>$_c</a>":$_c);$be=($Wf?"<a href='".h($Uc.$xb)."' title='".'absteigend'."' class='text'> ↓</a>":'');if(!$X["fun"]&&isset($k["privileges"]["where"])){$be
.='<a href="#fieldset-search" title="'.'Suchen'.'" class="text jsonly"> =</a>';$be
.=script("qsl('a').onclick = partial(selectSearch, '".js_escape($v)."');");}echo($be?"<span class='column hidden'>$be</span>":"");}$Ac[$v]=$X["fun"];next($K);}}$Id=array();if($_GET["modify"]){foreach($J
as$I){foreach($I
as$v=>$X)$Id[$v]=max($Id[$v],min(40,strlen(utf8_decode($X))));}}echo($xa?"<th>".'Relationen':"")."</thead>\n";if(is_ajax())ob_end_clean();foreach(adminer()->rowDescriptions($J,$wc)as$le=>$I){$Qg=unique_array($J[$le],$u);if(!$Qg){$Qg=array();reset($K);foreach($J[$le]as$v=>$X){if(!preg_match('~^(COUNT|AVG|GROUP_CONCAT|MAX|MIN|SUM)\(~',current($K)))$Qg[$v]=$X;next($K);}}$Rg="";foreach($Qg
as$v=>$X){$k=(array)$l[$v];if((JUSH=="sql"||JUSH=="pgsql")&&preg_match('~char|text|enum|set~',$k["type"])&&strlen($X)>64){$v=(strpos($v,'(')?$v:idf_escape($v));$v="MD5(".(JUSH!='sql'||preg_match("~^utf8~",$k["collation"])?$v:"CONVERT($v USING ".charset(connection()).")").")";$X=md5($X);}$Rg
.="&".($X!==null?urlencode("where[".bracket_escape($v)."]")."=".urlencode($X===false?"f":$X):"null%5B%5D=".urlencode($v));}echo"<tr>".(!$Dc&&$K?"":"<td>".checkbox("check[]",substr($Rg,1),in_array(substr($Rg,1),(array)$_POST["check"])).($sd||information_schema(DB)?"":" <a href='".h(ME."edit=".urlencode($a).$Rg)."' class='edit'>".'bearbeiten'."</a>"));reset($K);foreach($I
as$v=>$X){if(isset($ne[$v])){$d=current($K);$k=(array)$l[$v];if($X!=""&&(!isset($Nb[$v])||$Nb[$v]!=""))$Nb[$v]=(is_mail($X)?$ne[$v]:"");$x="";if(is_blob($k)&&$X!="")$x=ME.'download='.urlencode($a).'&field='.urlencode($v).$Rg;if(!$x&&$X!==null){foreach((array)$wc[$v]as$n){if(count($wc[$v])==1||end($n["source"])==$v){$x="";foreach($n["source"]as$q=>$Xf)$x
.=where_link($q,$n["target"][$q],$J[$le][$Xf]);$x=($n["db"]!=""?preg_replace('~([?&]db=)[^&]+~','\1'.urlencode($n["db"]),ME):ME).'select='.urlencode($n["table"]).$x;if($n["ns"])$x=preg_replace('~([?&]ns=)[^&]+~','\1'.urlencode($n["ns"]),$x);if(count($n["source"])==1)break;}}}if($d=="COUNT(*)"){$x=ME."select=".urlencode($a);$q=0;foreach((array)$_GET["where"]as$W){if(!array_key_exists($W["col"],$Qg))$x
.=where_link($q++,$W["col"],$W["val"],$W["op"]);}foreach($Qg
as$yd=>$W)$x
.=where_link($q++,$yd,$W);}$Vc=select_value($X,$x,$k,$rg);$r=h("val[$Rg][".bracket_escape($v)."]");$hf=idx(idx($_POST["val"],$Rg),bracket_escape($v));$Jb=!is_array($I[$v])&&is_utf8($Vc)&&$J[$le][$v]==$I[$v]&&!$Ac[$v]&&!$k["generated"];$U=(preg_match('~^(AVG|MIN|MAX)\((.+)\)~',$d,$y)?$l[idf_unescape($y[2])]["type"]:$k["type"]);$pg=preg_match('~text|json|lob~',$U);$td=preg_match(number_type(),$U)||preg_match('~^(CHAR_LENGTH|ROUND|FLOOR|CEIL|TIME_TO_SEC|COUNT|SUM)\(~',$d);echo"<td id='$r'".($td&&($X===null||is_numeric(strip_tags($Vc))||$U=="money")?" class='number'":"");if(($_GET["modify"]&&$Jb&&$X!==null)||$hf!==null){$Hc=h($hf!==null?$hf:$I[$v]);echo">".($pg?"<textarea name='$r' cols='30' rows='".(substr_count($I[$v],"\n")+1)."'>$Hc</textarea>":"<input name='$r' value='$Hc' size='$Id[$v]'>");}else{$Nd=strpos($Vc,"<i>…</i>");echo" data-text='".($Nd?2:($pg?1:0))."'".($Jb?"":" data-warning='".h('Benutzen Sie den Link zum Bearbeiten dieses Wertes.')."'").">$Vc";}}next($K);}if($xa)echo"<td>";adminer()->backwardKeysPrint($xa,$J[$le]);echo"</tr>\n";}if(is_ajax())exit;echo"</table>\n","</div>\n";}if(!is_ajax()){if($J||$A){$Yb=true;if($_GET["page"]!="last"){if(!$w||(count($J)<$w&&($J||!$A)))$yc=($A?$A*$w:0)+count($J);elseif(JUSH!="sql"||!$sd){$yc=($sd?false:found_rows($S,$Z));if(intval($yc)<max(1e4,2*($A+1)*$w))$yc=first(slow_query(count_rows($a,$Z,$sd,$Dc)));elseif(JUSH=='sql'||JUSH=='pgsql')$Yb=false;}}$Re=($w&&($yc===false||$yc>$w||$A));if($Re)echo(($yc===false?count($J)+1:$yc-$A*$w)>$w?'<p><a href="'.h(remove_from_uri("page")."&page=".($A+1)).'" class="loadmore">'.'Mehr Daten laden'.'</a>'.script("qsl('a').onclick = partial(selectLoadMore, $w, '".'Lade'."…');",""):''),"\n";echo"<div class='footer'><div>\n";if($Re){$Wd=($yc===false?$A+(count($J)>=$w?2:1):floor(($yc-1)/$w));echo"<fieldset>";if(JUSH!="simpledb"){echo"<legend><a href='".h(remove_from_uri("page"))."'>".'Seite'."</a></legend>",script("qsl('a').onclick = function () { pageClick(this.href, +prompt('".'Seite'."', '".($A+1)."')); return false; };"),pagination(0,$A).($A>5?" …":"");for($q=max(1,$A-4);$q<min($Wd,$A+5);$q++)echo
pagination($q,$A);if($Wd>0)echo($A+5<$Wd?" …":""),($Yb&&$yc!==false?pagination($Wd,$A):" <a href='".h(remove_from_uri("page")."&page=last")."' title='~$Wd'>".'letzte'."</a>");}else
echo"<legend>".'Seite'."</legend>",pagination(0,$A).($A>1?" …":""),($A?pagination($A,$A):""),($Wd>$A?pagination($A+1,$A).($Wd>$A+1?" …":""):"");echo"</fieldset>\n";}echo"<fieldset>","<legend>".'Gesamtergebnis'."</legend>";$Ab=($Yb?"":"~ ").$yc;$Be="const checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$Ab' : checked); selectCount('selected2', this.checked || !checked ? '$Ab' : checked);";echo
checkbox("all",1,0,($yc!==false?($Yb?"":"~ ").lang_format(array('%d Datensatz','%d Datensätze'),$yc):""),$Be)."\n","</fieldset>\n";if(adminer()->selectCommandPrint())echo'<fieldset',($_GET["modify"]?'':' class="jsonly"'),'><legend>Ändern</legend><div>
<input type="submit" value="Speichern"',($_GET["modify"]?'':' title="'.'Ctrl+Klick zum Bearbeiten des Wertes.'.'"'),'>
</div></fieldset>
<fieldset><legend>Ausgewählte <span id="selected"></span></legend><div>
<input type="submit" name="edit" value="Bearbeiten">
<input type="submit" name="clone" value="Klonen">
<input type="submit" name="delete" value="Entfernen">',confirm(),'</div></fieldset>
';$xc=adminer()->dumpFormat();foreach((array)$_GET["columns"]as$d){if($d["fun"]){unset($xc['sql']);break;}}if($xc){print_fieldset("export",'Exportieren'." <span id='selected2'></span>");$Oe=adminer()->dumpOutput();echo($Oe?html_select("output",$Oe,$fa["output"])." ":""),html_select("format",$xc,$fa["format"])," <input type='submit' name='export' value='".'Exportieren'."'>\n","</div></fieldset>\n";}adminer()->selectEmailPrint(array_filter($Nb,'strlen'),$e);echo"</div></div>\n";}if(adminer()->selectImportPrint())echo"<p>","<a href='#import'>".'Importieren'."</a>",script("qsl('a').onclick = partial(toggle, 'import');",""),"<span id='import'".($_POST["import"]?"":" class='hidden'").">: ",file_input("<input type='file' name='csv_file'> ".html_select("separator",array("csv"=>"CSV,","csv;"=>"CSV;","tsv"=>"TSV"),$fa["format"])." <input type='submit' name='import' value='".'Importieren'."'>"),"</span>";echo
input_token(),"</form>\n",(!$Dc&&$K?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["script"])){if($_GET["script"]=="kill")connection()->query("KILL ".number($_POST["kill"]));elseif(list($R,$r,$z)=adminer()->_foreignColumn(column_foreign_keys($_GET["source"]),$_GET["field"])){$w=11;$G=connection()->query("SELECT $r, $z FROM ".table($R)." WHERE ".(preg_match('~^[0-9]+$~',$_GET["value"])?"$r = $_GET[value] OR ":"")."$z LIKE ".q("$_GET[value]%")." ORDER BY 2 LIMIT $w");for($q=1;($I=$G->fetch_row())&&$q<$w;$q++)echo"<a href='".h(ME."edit=".urlencode($R)."&where".urlencode("[".bracket_escape(idf_unescape($r))."]")."=".urlencode($I[0]))."'>".h($I[1])."</a><br>\n";if($I)echo"...\n";}exit;}else{page_header('Server',"",false);if(adminer()->homepage()){echo"<form action='' method='post'>\n","<p>".'Suche in Tabellen'.": <input type='search' name='query' value='".h($_POST["query"])."'> <input type='submit' value='".'Suchen'."'>\n";if($_POST["query"]!="")search_tables();echo"<div class='scrollable'>\n","<table class='nowrap checkable odds'>\n",script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),'<thead><tr class="wrap">','<td><input id="check-all" type="checkbox" class="jsonly">'.script("qs('#check-all').onclick = partial(formCheck, /^tables\[/);",""),'<th>'.'Tabelle','<td>'.'Datensätze',"</thead>\n";foreach(table_status()as$R=>$I){$z=adminer()->tableName($I);if($z!=""){echo'<tr><td>'.checkbox("tables[]",$R,in_array($R,(array)$_POST["tables"],true)),"<th><a href='".h(ME).'select='.urlencode($R)."'>$z</a>";$X=format_number($I["Rows"]);echo"<td align='right'><a href='".h(ME."edit=").urlencode($R)."'>".($I["Engine"]=="InnoDB"&&$X?"~ $X":$X)."</a>";}}echo"</table>\n","</div>\n","</form>\n",script("tableCheck();");adminer()->pluginsLinks();}}page_footer();