2014-05-08 19:46:08 +02:00
< ? php
/** Adminer - Compact database management
2017-06-25 00:56:50 +02:00
* @ link https :// www . adminer . org /
* @ author Jakub Vrana , https :// www . vrana . cz /
2014-05-08 19:46:08 +02:00
* @ copyright 2007 Jakub Vrana
2018-04-01 23:34:54 +02:00
* @ 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 )
2020-10-12 20:47:58 +02:00
* @ version 4.7 . 7
2020-04-26 00:47:07 +02:00
*/ error_reporting ( 6135 ); $Zc =! preg_match ( '~^(unsafe_raw)?$~' , ini_get ( " filter.default " )); if ( $Zc || ini_get ( " filter.default_flags " )){ foreach ( array ( '_GET' , '_POST' , '_COOKIE' , '_SERVER' ) as $X ){ $Li = filter_input_array ( constant ( " INPUT $X " ), FILTER_UNSAFE_RAW ); if ( $Li ) $$X = $Li ;}} if ( function_exists ( " mb_internal_encoding " )) mb_internal_encoding ( " 8bit " ); function
2018-12-25 21:50:48 +01:00
connection (){ global $h ; return $h ;} function
2018-04-01 23:34:54 +02:00
adminer (){ global $b ; return $b ;} function
version (){ global $ia ; return $ia ;} function
2020-04-26 00:47:07 +02:00
idf_unescape ( $u ){ $se = substr ( $u , - 1 ); return
str_replace ( $se . $se , $se , substr ( $u , 1 , - 1 ));} function
2014-05-08 19:46:08 +02:00
escape_string ( $X ){ return
substr ( q ( $X ), 1 , - 1 );} function
2015-07-03 19:50:03 +02:00
number ( $X ){ return
preg_replace ( '~[^0-9]+~' , '' , $X );} function
2018-04-01 23:34:54 +02:00
number_type (){ return '((?<!o)int(?!er)|numeric|real|float|double|decimal|money)' ;} function
2020-04-26 00:47:07 +02:00
remove_slashes ( $vg , $Zc = false ){ if ( get_magic_quotes_gpc ()){ while ( list ( $y , $X ) = each ( $vg )){ foreach ( $X
as $he => $W ){ unset ( $vg [ $y ][ $he ]); if ( is_array ( $W )){ $vg [ $y ][ stripslashes ( $he )] = $W ; $vg [] =& $vg [ $y ][ stripslashes ( $he )];} else $vg [ $y ][ stripslashes ( $he )] = ( $Zc ? $W : stripslashes ( $W ));}}}} function
bracket_escape ( $u , $Pa = false ){ static $xi = array ( ':' => ':1' , ']' => ':2' , '[' => ':3' , '"' => ':4' ); return
strtr ( $u ,( $Pa ? array_flip ( $xi ) : $xi ));} function
min_version ( $dj , $Ge = " " , $i = null ){ global $h ; if ( ! $i ) $i = $h ; $qh = $i -> server_info ; if ( $Ge && preg_match ( '~([\d.]+)-MariaDB~' , $qh , $A )){ $qh = $A [ 1 ]; $dj = $Ge ;} return ( version_compare ( $qh , $dj ) >= 0 );} function
2018-12-25 21:50:48 +01:00
charset ( $h ){ return ( min_version ( " 5.5.3 " , 0 , $h ) ? " utf8mb4 " : " utf8 " );} function
2020-04-26 00:47:07 +02:00
script ( $Ah , $wi = " \n " ){ return " <script " . nonce () . " > $Ah </script> $wi " ;} function
script_src ( $Qi ){ return " <script src=' " . h ( $Qi ) . " ' " . nonce () . " ></script> \n " ;} function
2018-04-01 23:34:54 +02:00
nonce (){ return ' nonce="' . get_nonce () . '"' ;} function
target_blank (){ return ' target="_blank" rel="noreferrer noopener"' ;} function
2018-12-25 21:50:48 +01:00
h ( $P ){ return
str_replace ( " \0 " , " � " , htmlspecialchars ( $P , ENT_QUOTES , 'utf-8' ));} function
nl_br ( $P ){ return
str_replace ( " \n " , " <br> " , $P );} function
2020-04-26 00:47:07 +02:00
checkbox ( $B , $Y , $gb , $oe = " " , $xf = " " , $lb = " " , $pe = " " ){ $H = " <input type='checkbox' name=' $B ' value=' " . h ( $Y ) . " ' " . ( $gb ? " checked " : " " ) . ( $pe ? " aria-labelledby=' $pe ' " : " " ) . " > " . ( $xf ? script ( " qsl('input').onclick = function () { $xf }; " , " " ) : " " ); return ( $oe != " " || $lb ? " <label " . ( $lb ? " class=' $lb ' " : " " ) . " > $H " . h ( $oe ) . " </label> " : $H );} function
optionlist ( $Cf , $kh = null , $Vi = false ){ $H = " " ; foreach ( $Cf
as $he => $W ){ $Df = array ( $he => $W ); if ( is_array ( $W )){ $H .= '<optgroup label="' . h ( $he ) . '">' ; $Df = $W ;} foreach ( $Df
as $y => $X ) $H .= '<option' . ( $Vi || is_string ( $y ) ? ' value="' . h ( $y ) . '"' : '' ) . (( $Vi || is_string ( $y ) ? ( string ) $y : $X ) === $kh ? ' selected' : '' ) . '>' . h ( $X ); if ( is_array ( $W )) $H .= '</optgroup>' ;} return $H ;} function
html_select ( $B , $Cf , $Y = " " , $wf = true , $pe = " " ){ if ( $wf ) return " <select name=' " . h ( $B ) . " ' " . ( $pe ? " aria-labelledby=' $pe ' " : " " ) . " > " . optionlist ( $Cf , $Y ) . " </select> " . ( is_string ( $wf ) ? script ( " qsl('select').onchange = function () { $wf }; " , " " ) : " " ); $H = " " ; foreach ( $Cf
as $y => $X ) $H .= " <label><input type='radio' name=' " . h ( $B ) . " ' value=' " . h ( $y ) . " ' " . ( $y == $Y ? " checked " : " " ) . " > " . h ( $X ) . " </label> " ; return $H ;} function
select_input ( $Ka , $Cf , $Y = " " , $wf = " " , $hg = " " ){ $bi = ( $Cf ? " select " : " input " ); return " < $bi $Ka " . ( $Cf ? " ><option value=''> $hg " . optionlist ( $Cf , $Y , true ) . " </select> " : " size='10' value=' " . h ( $Y ) . " ' placeholder=' $hg '> " ) . ( $wf ? script ( " qsl(' $bi ').onchange = $wf ; " , " " ) : " " );} function
confirm ( $Qe = " " , $lh = " qsl('input') " ){ return
script ( " $lh .onclick = function () { return confirm(' " . ( $Qe ? js_escape ( $Qe ) : lang ( 0 )) . " '); }; " , " " );} function
print_fieldset ( $t , $xe , $gj = false ){ echo " <fieldset><legend> " , " <a href='#fieldset- $t '> $xe </a> " , script ( " qsl('a').onclick = partial(toggle, 'fieldset- $t '); " , " " ), " </legend> " , " <div id='fieldset- $t ' " . ( $gj ? " " : " class='hidden' " ) . " > \n " ;} function
bold ( $Xa , $lb = " " ){ return ( $Xa ? " class='active $lb ' " : ( $lb ? " class=' $lb ' " : " " ));} function
odd ( $H = ' class="odd"' ){ static $s = 0 ; if ( ! $H ) $s =- 1 ; return ( $s ++% 2 ? $H : '' );} function
2018-12-25 21:50:48 +01:00
js_escape ( $P ){ return
addcslashes ( $P , " \r \n ' \\ / " );} function
2020-04-26 00:47:07 +02:00
json_row ( $y , $X = null ){ static $ad = true ; if ( $ad ) echo " { " ; if ( $y != " " ){ echo ( $ad ? " " : " , " ) . " \n \t \" " . addcslashes ( $y , " \r \n \t \" \\ / " ) . '": ' . ( $X !== null ? '"' . addcslashes ( $X , " \r \n \" \\ / " ) . '"' : 'null' ); $ad = false ;} else { echo " \n } \n " ; $ad = true ;}} function
ini_bool ( $Ud ){ $X = ini_get ( $Ud ); return ( preg_match ( '~^(on|true|yes)$~i' , $X ) || ( int ) $X );} function
sid (){ static $H ; if ( $H === null ) $H = ( SID &&! ( $_COOKIE && ini_bool ( " session.use_cookies " ))); return $H ;} function
set_password ( $cj , $M , $V , $E ){ $_SESSION [ " pwds " ][ $cj ][ $M ][ $V ] = ( $_COOKIE [ " adminer_key " ] && is_string ( $E ) ? array ( encrypt_string ( $E , $_COOKIE [ " adminer_key " ])) : $E );} 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
2018-12-25 21:50:48 +01:00
q ( $P ){ global $h ; return $h -> quote ( $P );} function
2020-04-26 00:47:07 +02:00
get_vals ( $F , $e = 0 ){ global $h ; $H = array (); $G = $h -> query ( $F ); if ( is_object ( $G )){ while ( $I = $G -> fetch_row ()) $H [] = $I [ $e ];} return $H ;} function
get_key_vals ( $F , $i = null , $th = true ){ global $h ; if ( ! is_object ( $i )) $i = $h ; $H = array (); $G = $i -> query ( $F ); if ( is_object ( $G )){ while ( $I = $G -> fetch_row ()){ if ( $th ) $H [ $I [ 0 ]] = $I [ 1 ]; else $H [] = $I [ 0 ];}} return $H ;} function
get_rows ( $F , $i = null , $n = " <p class='error'> " ){ global $h ; $zb = ( is_object ( $i ) ? $i : $h ); $H = array (); $G = $zb -> query ( $F ); if ( is_object ( $G )){ while ( $I = $G -> fetch_assoc ()) $H [] = $I ;} elseif ( ! $G &&! is_object ( $i ) && $n && defined ( " PAGE_HEADER " )) echo $n . error () . " \n " ; return $H ;} function
unique_array ( $I , $w ){ foreach ( $w
as $v ){ if ( preg_match ( " ~PRIMARY|UNIQUE~ " , $v [ " type " ])){ $H = array (); foreach ( $v [ " columns " ] as $y ){ if ( ! isset ( $I [ $y ])) continue
2 ; $H [ $y ] = $I [ $y ];} return $H ;}}} function
escape_key ( $y ){ if ( preg_match ( '(^([\w(]+)(' . str_replace ( " _ " , " .* " , preg_quote ( idf_escape ( " _ " ))) . ')([ \w)]+)$)' , $y , $A )) return $A [ 1 ] . idf_escape ( idf_unescape ( $A [ 2 ])) . $A [ 3 ]; return
idf_escape ( $y );} function
where ( $Z , $p = array ()){ global $h , $x ; $H = array (); foreach (( array ) $Z [ " where " ] as $y => $X ){ $y = bracket_escape ( $y , 1 ); $e = escape_key ( $y ); $H [] = $e . ( $x == " sql " && is_numeric ( $X ) && preg_match ( '~\.~' , $X ) ? " LIKE " . q ( $X ) : ( $x == " mssql " ? " LIKE " . q ( preg_replace ( '~[_%[]~' , '[\0]' , $X )) : " = " . unconvert_field ( $p [ $y ], q ( $X )))); if ( $x == " sql " && preg_match ( '~char|text~' , $p [ $y ][ " type " ]) && preg_match ( " ~[^ -@]~ " , $X )) $H [] = " $e = " . q ( $X ) . " COLLATE " . charset ( $h ) . " _bin " ;} foreach (( array ) $Z [ " null " ] as $y ) $H [] = escape_key ( $y ) . " IS NULL " ; return
implode ( " AND " , $H );} function
where_check ( $X , $p = array ()){ parse_str ( $X , $eb ); remove_slashes ( array ( & $eb )); return
where ( $eb , $p );} function
where_link ( $s , $e , $Y , $zf = " = " ){ return " &where%5B $s %5D%5Bcol%5D= " . urlencode ( $e ) . " &where%5B $s %5D%5Bop%5D= " . urlencode (( $Y !== null ? $zf : " IS NULL " )) . " &where%5B $s %5D%5Bval%5D= " . urlencode ( $Y );} function
convert_fields ( $f , $p , $K = array ()){ $H = " " ; foreach ( $f
as $y => $X ){ if ( $K &&! in_array ( idf_escape ( $y ), $K )) continue ; $Ha = convert_field ( $p [ $y ]); if ( $Ha ) $H .= " , $Ha AS " . idf_escape ( $y );} return $H ;} function
cookie ( $B , $Y , $_e = 2592000 ){ global $ba ; return
header ( " Set-Cookie: $B = " . urlencode ( $Y ) . ( $_e ? " ; expires= " . gmdate ( " D, d M Y H:i:s " , time () + $_e ) . " GMT " : " " ) . " ; path= " . preg_replace ( '~\?.*~' , '' , $_SERVER [ " REQUEST_URI " ]) . ( $ba ? " ; secure " : " " ) . " ; HttpOnly; SameSite=lax " , false );} function
2014-05-08 19:46:08 +02:00
restart_session (){ if ( ! ini_bool ( " session.use_cookies " )) session_start ();} function
2020-04-26 00:47:07 +02:00
stop_session ( $fd = false ){ $Ui = ini_bool ( " session.use_cookies " ); if ( ! $Ui || $fd ){ session_write_close (); if ( $Ui &&@ ini_set ( " session.use_cookies " , false ) === false ) session_start ();}} function & get_session ( $y ){ return $_SESSION [ $y ][ DRIVER ][ SERVER ][ $_GET [ " username " ]];} function
set_session ( $y , $X ){ $_SESSION [ $y ][ DRIVER ][ SERVER ][ $_GET [ " username " ]] = $X ;} function
auth_url ( $cj , $M , $V , $l = null ){ global $ic ; preg_match ( '~([^?]*)\??(.*)~' , remove_from_uri ( implode ( " | " , array_keys ( $ic )) . " |username| " . ( $l !== null ? " db| " : " " ) . session_name ()), $A ); return " $A[1] ? " . ( sid () ? SID . " & " : " " ) . ( $cj != " server " || $M != " " ? urlencode ( $cj ) . " = " . urlencode ( $M ) . " & " : " " ) . " username= " . urlencode ( $V ) . ( $l != " " ? " &db= " . urlencode ( $l ) : " " ) . ( $A [ 2 ] ? " & $A[2] " : " " );} function
2014-05-08 19:46:08 +02:00
is_ajax (){ return ( $_SERVER [ " HTTP_X_REQUESTED_WITH " ] == " XMLHttpRequest " );} function
2020-04-26 00:47:07 +02:00
redirect ( $Be , $Qe = null ){ if ( $Qe !== null ){ restart_session (); $_SESSION [ " messages " ][ preg_replace ( '~^[^?]*~' , '' ,( $Be !== null ? $Be : $_SERVER [ " REQUEST_URI " ]))][] = $Qe ;} if ( $Be !== null ){ if ( $Be == " " ) $Be = " . " ; header ( " Location: $Be " ); exit ;}} function
query_redirect ( $F , $Be , $Qe , $Gg = true , $Gc = true , $Rc = false , $ji = " " ){ global $h , $n , $b ; if ( $Gc ){ $Ih = microtime ( true ); $Rc =! $h -> query ( $F ); $ji = format_time ( $Ih );} $Dh = " " ; if ( $F ) $Dh = $b -> messageQuery ( $F , $ji , $Rc ); if ( $Rc ){ $n = error () . $Dh . script ( " messagesPrint(); " ); return
false ;} if ( $Gg ) redirect ( $Be , $Qe . $Dh ); return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
queries ( $F ){ global $h ; static $_g = array (); static $Ih ; if ( ! $Ih ) $Ih = microtime ( true ); if ( $F === null ) return
array ( implode ( " \n " , $_g ), format_time ( $Ih )); $_g [] = ( preg_match ( '~;$~' , $F ) ? " DELIMITER ;; \n $F ; \n DELIMITER " : $F ) . " ; " ; return $h -> query ( $F );} function
apply_queries ( $F , $S , $Cc = 'table' ){ foreach ( $S
as $Q ){ if ( ! queries ( " $F " . $Cc ( $Q ))) return
2014-05-08 19:46:08 +02:00
false ;} return
true ;} function
2020-04-26 00:47:07 +02:00
queries_redirect ( $Be , $Qe , $Gg ){ list ( $_g , $ji ) = queries ( null ); return
query_redirect ( $_g , $Be , $Qe , $Gg , false , ! $Gg , $ji );} function
format_time ( $Ih ){ return
lang ( 1 , max ( 0 , microtime ( true ) - $Ih ));} function
2020-10-12 20:47:58 +02:00
relative_uri (){ return
preg_replace ( '~^[^?]*/([^?]*)~' , '\1' , $_SERVER [ " REQUEST_URI " ]);} function
2020-04-26 00:47:07 +02:00
remove_from_uri ( $Sf = " " ){ return
2020-10-12 20:47:58 +02:00
substr ( preg_replace ( " ~(?<=[?&])( $Sf " . ( SID ? " " : " | " . session_name ()) . " )=[^&]*&~ " , '' , relative_uri () . " & " ), 0 , - 1 );} function
2020-04-26 00:47:07 +02:00
pagination ( $D , $Nb ){ return " " . ( $D == $Nb ? $D + 1 : '<a href="' . h ( remove_from_uri ( " page " ) . ( $D ? " &page= $D " . ( $_GET [ " next " ] ? " &next= " . urlencode ( $_GET [ " next " ]) : " " ) : " " )) . '">' . ( $D + 1 ) . " </a> " );} function
get_file ( $y , $Vb = false ){ $Xc = $_FILES [ $y ]; if ( ! $Xc ) return
null ; foreach ( $Xc
as $y => $X ) $Xc [ $y ] = ( array ) $X ; $H = '' ; foreach ( $Xc [ " error " ] as $y => $n ){ if ( $n ) return $n ; $B = $Xc [ " name " ][ $y ]; $ri = $Xc [ " tmp_name " ][ $y ]; $Bb = file_get_contents ( $Vb && preg_match ( '~\.gz$~' , $B ) ? " compress.zlib:// $ri " : $ri ); if ( $Vb ){ $Ih = substr ( $Bb , 0 , 3 ); if ( function_exists ( " iconv " ) && preg_match ( " ~^ \xFE \xFF |^ \xFF \xFE ~ " , $Ih , $Mg )) $Bb = iconv ( " utf-16 " , " utf-8 " , $Bb ); elseif ( $Ih == " \xEF \xBB \xBF " ) $Bb = substr ( $Bb , 3 ); $H .= $Bb . " \n \n " ;} else $H .= $Bb ;} return $H ;} function
upload_error ( $n ){ $Ne = ( $n == UPLOAD_ERR_INI_SIZE ? ini_get ( " upload_max_filesize " ) : 0 ); return ( $n ? lang ( 2 ) . ( $Ne ? " " . lang ( 3 , $Ne ) : " " ) : lang ( 4 ));} function
repeat_pattern ( $fg , $ye ){ return
str_repeat ( " $fg { 0,65535} " , $ye / 65535 ) . " $fg { 0, " . ( $ye % 65535 ) . " } " ;} function
2018-06-30 00:38:01 +02:00
is_utf8 ( $X ){ return ( preg_match ( '~~u' , $X ) &&! preg_match ( '~[\0-\x8\xB\xC\xE-\x1F]~' , $X ));} function
2020-04-26 00:47:07 +02:00
shorten_utf8 ( $P , $ye = 80 , $Ph = " " ){ if ( ! preg_match ( " (^( " . repeat_pattern ( " [ \t \r \n - \ x { 10FFFF}] " , $ye ) . " )( $ )?)u " , $P , $A )) preg_match ( " (^( " . repeat_pattern ( " [ \t \r \n -~] " , $ye ) . " )( $ )?) " , $P , $A ); return
h ( $A [ 1 ]) . $Ph . ( isset ( $A [ 2 ]) ? " " : " <i>…</i> " );} function
2014-05-08 19:46:08 +02:00
format_number ( $X ){ return
strtr ( number_format ( $X , 0 , " . " , lang ( 5 )), preg_split ( '~~u' , lang ( 6 ), - 1 , PREG_SPLIT_NO_EMPTY ));} function
friendly_url ( $X ){ return
preg_replace ( '~[^a-z0-9_]~i' , '-' , $X );} function
2020-04-26 00:47:07 +02:00
hidden_fields ( $vg , $Jd = array ()){ $H = false ; while ( list ( $y , $X ) = each ( $vg )){ if ( ! in_array ( $y , $Jd )){ if ( is_array ( $X )){ foreach ( $X
as $he => $W ) $vg [ $y . " [ $he ] " ] = $W ;} else { $H = true ; echo '<input type="hidden" name="' . h ( $y ) . '" value="' . h ( $X ) . '">' ;}}} return $H ;} function
2014-05-08 19:46:08 +02:00
hidden_fields_get (){ echo ( sid () ? '<input type="hidden" name="' . session_name () . '" value="' . h ( session_id ()) . '">' : '' ),( SERVER !== null ? '<input type="hidden" name="' . DRIVER . '" value="' . h ( SERVER ) . '">' : " " ), '<input type="hidden" name="username" value="' . h ( $_GET [ " username " ]) . '">' ;} function
2020-04-26 00:47:07 +02:00
table_status1 ( $Q , $Sc = false ){ $H = table_status ( $Q , $Sc ); return ( $H ? $H : array ( " Name " => $Q ));} function
column_foreign_keys ( $Q ){ global $b ; $H = array (); foreach ( $b -> foreignKeys ( $Q ) as $q ){ foreach ( $q [ " source " ] as $X ) $H [ $X ][] = $q ;} return $H ;} function
enum_input ( $T , $Ka , $o , $Y , $xc = null ){ global $b ; preg_match_all ( " ~'((?:[^']|'')*)'~ " , $o [ " length " ], $Ie ); $H = ( $xc !== null ? " <label><input type=' $T ' $Ka value=' $xc ' " . (( is_array ( $Y ) ? in_array ( $xc , $Y ) : $Y === 0 ) ? " checked " : " " ) . " ><i> " . lang ( 7 ) . " </i></label> " : " " ); foreach ( $Ie [ 1 ] as $s => $X ){ $X = stripcslashes ( str_replace ( " '' " , " ' " , $X )); $gb = ( is_int ( $Y ) ? $Y == $s + 1 : ( is_array ( $Y ) ? in_array ( $s + 1 , $Y ) : $Y === $X )); $H .= " <label><input type=' $T ' $Ka value=' " . ( $s + 1 ) . " ' " . ( $gb ? ' checked' : '' ) . '>' . h ( $b -> editVal ( $X , $o )) . '</label>' ;} return $H ;} function
input ( $o , $Y , $r ){ global $U , $b , $x ; $B = h ( bracket_escape ( $o [ " field " ])); echo " <td class='function'> " ; if ( is_array ( $Y ) &&! $r ){ $Fa = array ( $Y ); if ( version_compare ( PHP_VERSION , 5.4 ) >= 0 ) $Fa [] = JSON_PRETTY_PRINT ; $Y = call_user_func_array ( 'json_encode' , $Fa ); $r = " json " ;} $Qg = ( $x == " mssql " && $o [ " auto_increment " ]); if ( $Qg &&! $_POST [ " save " ]) $r = null ; $od = ( isset ( $_GET [ " select " ]) || $Qg ? array ( " orig " => lang ( 8 )) : array ()) + $b -> editFunctions ( $o ); $Ka = " name='fields[ $B ]' " ; if ( $o [ " type " ] == " enum " ) echo
h ( $od [ " " ]) . " <td> " . $b -> editInput ( $_GET [ " edit " ], $o , $Ka , $Y ); else { $yd = ( in_array ( $r , $od ) || isset ( $od [ $r ])); echo ( count ( $od ) > 1 ? " <select name='function[ $B ]'> " . optionlist ( $od , $r === null || $yd ? $r : " " ) . " </select> " . on_help ( " getTarget(event).value.replace(/^SQL \$ /, '') " , 1 ) . script ( " qsl('select').onchange = functionChange; " , " " ) : h ( reset ( $od ))) . '<td>' ; $Wd = $b -> editInput ( $_GET [ " edit " ], $o , $Ka , $Y ); if ( $Wd != " " ) echo $Wd ; elseif ( preg_match ( '~bool~' , $o [ " type " ])) echo " <input type='hidden' $Ka value='0'> " . " <input type='checkbox' " . ( preg_match ( '~^(1|t|true|y|yes|on)$~i' , $Y ) ? " checked='checked' " : " " ) . " $Ka value='1'> " ; elseif ( $o [ " type " ] == " set " ){ preg_match_all ( " ~'((?:[^']|'')*)'~ " , $o [ " length " ], $Ie ); foreach ( $Ie [ 1 ] as $s => $X ){ $X = stripcslashes ( str_replace ( " '' " , " ' " , $X )); $gb = ( is_int ( $Y ) ? ( $Y >> $s ) & 1 : in_array ( $X , explode ( " , " , $Y ), true )); echo " <label><input type='checkbox' name='fields[ $B ][ $s ]' value=' " . ( 1 << $s ) . " ' " . ( $gb ? ' checked' : '' ) . " > " . h ( $b -> editVal ( $X , $o )) . '</label>' ;}} elseif ( preg_match ( '~blob|bytea|raw|file~' , $o [ " type " ]) && ini_bool ( " file_uploads " )) echo " <input type='file' name='fields- $B '> " ; elseif (( $hi = preg_match ( '~text|lob|memo~i' , $o [ " type " ])) || preg_match ( " ~ \n ~ " , $Y )){ if ( $hi && $x != " sqlite " ) $Ka .= " cols='50' rows='12' " ; else { $J = min ( 12 , substr_count ( $Y , " \n " ) + 1 ); $Ka .= " cols='30' rows=' $J ' " . ( $J == 1 ? " style='height: 1.2em;' " : " " );} echo " <textarea $Ka > " . h ( $Y ) . '</textarea>' ;} elseif ( $r == " json " || preg_match ( '~^jsonb?$~' , $o [ " type " ])) echo " <textarea $Ka cols='50' rows='12' class='jush-js'> " . h ( $Y ) . '</textarea>' ; else { $Pe = ( ! preg_match ( '~int~' , $o [ " type " ]) && preg_match ( '~^(\d+)(,(\d+))?$~' , $o [ " length " ], $A ) ? (( preg_match ( " ~binary~ " , $o [ " type " ]) ? 2 : 1 ) * $A [ 1 ] + ( $A [ 3 ] ? 1 : 0 ) + ( $A [ 2 ] &&! $o [ " unsigned " ] ? 1 : 0 )) : ( $U [ $o [ " type " ]] ? $U [ $o [ " type " ]] + ( $o [ " unsigned " ] ? 0 : 1 ) : 0 )); if ( $x == 'sql' && min_version ( 5.6 ) && preg_match ( '~time~' , $o [ " type " ])) $Pe += 7 ; echo " <input " . (( ! $yd || $r === " " ) && preg_match ( '~(?<!o)int(?!er)~' , $o [ " type " ]) &&! preg_match ( '~\[\]~' , $o [ " full_type " ]) ? " type='number' " : " " ) . " value=' " . h ( $Y ) . " ' " . ( $Pe ? " data-maxlength=' $Pe ' " : " " ) . ( preg_match ( '~char|binary~' , $o [ " type " ]) && $Pe > 20 ? " size='40' " : " " ) . " $Ka > " ;} echo $b -> editHint ( $_GET [ " edit " ], $o , $Y ); $ad = 0 ; foreach ( $od
as $y => $X ){ if ( $y === " " ||! $X ) break ; $ad ++ ;} if ( $ad ) echo
script ( " mixin(qsl('td'), { onchange: partial(skipOriginal, $ad ), oninput: function () { this.onchange(); }}); " );}} function
process_input ( $o ){ global $b , $m ; $u = bracket_escape ( $o [ " field " ]); $r = $_POST [ " function " ][ $u ]; $Y = $_POST [ " fields " ][ $u ]; if ( $o [ " type " ] == " enum " ){ if ( $Y ==- 1 ) return
false ; if ( $Y == " " ) return " NULL " ; return + $Y ;} if ( $o [ " auto_increment " ] && $Y == " " ) return
null ; if ( $r == " orig " ) return ( preg_match ( '~^CURRENT_TIMESTAMP~i' , $o [ " on_update " ]) ? idf_escape ( $o [ " field " ]) : false ); if ( $r == " NULL " ) return " NULL " ; if ( $o [ " type " ] == " set " ) return
array_sum (( array ) $Y ); if ( $r == " json " ){ $r = " " ; $Y = json_decode ( $Y , true ); if ( ! is_array ( $Y )) return
false ; return $Y ;} if ( preg_match ( '~blob|bytea|raw|file~' , $o [ " type " ]) && ini_bool ( " file_uploads " )){ $Xc = get_file ( " fields- $u " ); if ( ! is_string ( $Xc )) return
false ; return $m -> quoteBinary ( $Xc );} return $b -> processInput ( $o , $Y , $r );} function
fields_from_edit (){ global $m ; $H = array (); foreach (( array ) $_POST [ " field_keys " ] as $y => $X ){ if ( $X != " " ){ $X = bracket_escape ( $X ); $_POST [ " function " ][ $X ] = $_POST [ " field_funs " ][ $y ]; $_POST [ " fields " ][ $X ] = $_POST [ " field_vals " ][ $y ];}} foreach (( array ) $_POST [ " fields " ] as $y => $X ){ $B = bracket_escape ( $y , 1 ); $H [ $B ] = array ( " field " => $B , " privileges " => array ( " insert " => 1 , " update " => 1 ), " null " => 1 , " auto_increment " => ( $y == $m -> primary ),);} return $H ;} function
search_tables (){ global $b , $h ; $_GET [ " where " ][ 0 ][ " val " ] = $_POST [ " query " ]; $nh = " <ul> \n " ; foreach ( table_status ( '' , true ) as $Q => $R ){ $B = $b -> tableName ( $R ); if ( isset ( $R [ " Engine " ]) && $B != " " && ( ! $_POST [ " tables " ] || in_array ( $Q , $_POST [ " tables " ]))){ $G = $h -> query ( " SELECT " . limit ( " 1 FROM " . table ( $Q ), " WHERE " . implode ( " AND " , $b -> selectSearchProcess ( fields ( $Q ), array ())), 1 )); if ( ! $G || $G -> fetch_row ()){ $rg = " <a href=' " . h ( ME . " select= " . urlencode ( $Q ) . " &where[0][op]= " . urlencode ( $_GET [ " where " ][ 0 ][ " op " ]) . " &where[0][val]= " . urlencode ( $_GET [ " where " ][ 0 ][ " val " ])) . " '> $B </a> " ; echo " $nh <li> " . ( $G ? $rg : " <p class='error'> $rg : " . error ()) . " \n " ; $nh = " " ;}}} echo ( $nh ? " <p class='message'> " . lang ( 9 ) : " </ul> " ) . " \n " ;} function
dump_headers ( $Gd , $Ze = false ){ global $b ; $H = $b -> dumpHeaders ( $Gd , $Ze ); $Pf = $_POST [ " output " ]; if ( $Pf != " text " ) header ( " Content-Disposition: attachment; filename= " . $b -> dumpFilename ( $Gd ) . " . $H " . ( $Pf != " file " &&! preg_match ( '~[^0-9a-z]~' , $Pf ) ? " . $Pf " : " " )); session_write_close (); ob_flush (); flush (); return $H ;} function
dump_csv ( $I ){ foreach ( $I
as $y => $X ){ if ( preg_match ( " ~[ \" \n ,; \t ]~ " , $X ) || $X === " " ) $I [ $y ] = '"' . str_replace ( '"' , '""' , $X ) . '"' ;} echo
implode (( $_POST [ " format " ] == " csv " ? " , " : ( $_POST [ " format " ] == " tsv " ? " \t " : " ; " )), $I ) . " \r \n " ;} function
apply_sql_function ( $r , $e ){ return ( $r ? ( $r == " unixepoch " ? " DATETIME( $e , ' $r ') " : ( $r == " count distinct " ? " COUNT(DISTINCT " : strtoupper ( " $r ( " )) . " $e ) " ) : $e );} 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 { $Yc =@ tempnam ( " " , " " ); if ( ! $Yc ) return
false ; $H = dirname ( $Yc ); unlink ( $Yc );}} return $H ;} function
file_open_lock ( $Yc ){ $md =@ fopen ( $Yc , " r+ " ); if ( ! $md ){ $md =@ fopen ( $Yc , " w " ); if ( ! $md ) return ; chmod ( $Yc , 0660 );} flock ( $md , LOCK_EX ); return $md ;} function
file_write_unlock ( $md , $Pb ){ rewind ( $md ); fwrite ( $md , $Pb ); ftruncate ( $md , strlen ( $Pb )); flock ( $md , LOCK_UN ); fclose ( $md );} function
password_file ( $Hb ){ $Yc = get_temp_dir () . " /adminer.key " ; $H =@ file_get_contents ( $Yc ); if ( $H ||! $Hb ) return $H ; $md =@ fopen ( $Yc , " w " ); if ( $md ){ chmod ( $Yc , 0660 ); $H = rand_string (); fwrite ( $md , $H ); fclose ( $md );} return $H ;} function
2014-05-08 19:46:08 +02:00
rand_string (){ return
md5 ( uniqid ( mt_rand (), true ));} function
2020-04-26 00:47:07 +02:00
select_value ( $X , $_ , $o , $ii ){ global $b ; if ( is_array ( $X )){ $H = " " ; foreach ( $X
as $he => $W ) $H .= " <tr> " . ( $X != array_values ( $X ) ? " <th> " . h ( $he ) : " " ) . " <td> " . select_value ( $W , $_ , $o , $ii ); return " <table cellspacing='0'> $H </table> " ;} if ( ! $_ ) $_ = $b -> selectLink ( $X , $o ); if ( $_ === null ){ if ( is_mail ( $X )) $_ = " mailto: $X " ; if ( is_url ( $X )) $_ = $X ;} $H = $b -> editVal ( $X , $o ); if ( $H !== null ){ if ( ! is_utf8 ( $H )) $H = " \0 " ; elseif ( $ii != " " && is_shortable ( $o )) $H = shorten_utf8 ( $H , max ( 0 , + $ii )); else $H = h ( $H );} return $b -> selectVal ( $H , $_ , $o , $X );} function
is_mail ( $uc ){ $Ia = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]' ; $hc = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])' ; $fg = " $Ia +( \\ . $Ia +)*@( $hc ? \\ .)+ $hc " ; return
is_string ( $uc ) && preg_match ( " (^ $fg (, \\ s* $fg )* \$ )i " , $uc );} function
is_url ( $P ){ $hc = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])' ; return
preg_match ( " ~^(https?)://( $hc ? \\ .)+ $hc (: \\ d+)?(/.*)?( \\ ?.*)?(#.*)? \$ ~i " , $P );} function
is_shortable ( $o ){ return
preg_match ( '~char|text|json|lob|geometry|point|linestring|polygon|string|bytea~' , $o [ " type " ]);} function
count_rows ( $Q , $Z , $ce , $rd ){ global $x ; $F = " FROM " . table ( $Q ) . ( $Z ? " WHERE " . implode ( " AND " , $Z ) : " " ); return ( $ce && ( $x == " sql " || count ( $rd ) == 1 ) ? " SELECT COUNT(DISTINCT " . implode ( " , " , $rd ) . " ) $F " : " SELECT COUNT(*) " . ( $ce ? " FROM (SELECT 1 $F GROUP BY " . implode ( " , " , $rd ) . " ) x " : $F ));} function
slow_query ( $F ){ global $b , $ti , $m ; $l = $b -> database (); $ki = $b -> queryTimeout (); $yh = $m -> slowQuery ( $F , $ki ); if ( ! $yh && support ( " kill " ) && is_object ( $i = connect ()) && ( $l == " " || $i -> select_db ( $l ))){ $me = $i -> result ( connection_id ()); echo '<script' , nonce (), ' >
2014-05-08 19:46:08 +02:00
var timeout = setTimeout ( function () {
ajax ( \ '' , js_escape ( ME ), ' script = kill\ ' , function () {
2020-04-26 00:47:07 +02:00
}, \ 'kill=' , $me , '&token=' , $ti , ' \ ' );
}, ',1000*$ki,' );
2014-05-08 19:46:08 +02:00
</ script >
2020-04-26 00:47:07 +02:00
' ;} else $i = null ; ob_flush (); flush (); $H =@ get_key_vals (( $yh ? $yh : $F ), $i , false ); if ( $i ){ echo
script ( " clearTimeout(timeout); " ); ob_flush (); flush ();} return $H ;} function
get_token (){ $Cg = rand ( 1 , 1e6 ); return ( $Cg ^ $_SESSION [ " token " ]) . " : $Cg " ;} function
verify_token (){ list ( $ti , $Cg ) = explode ( " : " , $_POST [ " token " ]); return ( $Cg ^ $_SESSION [ " token " ]) == $ti ;} function
lzw_decompress ( $Ta ){ $ec = 256 ; $Ua = 8 ; $nb = array (); $Sg = 0 ; $Tg = 0 ; for ( $s = 0 ; $s < strlen ( $Ta ); $s ++ ){ $Sg = ( $Sg << 8 ) + ord ( $Ta [ $s ]); $Tg += 8 ; if ( $Tg >= $Ua ){ $Tg -= $Ua ; $nb [] = $Sg >> $Tg ; $Sg &= ( 1 << $Tg ) - 1 ; $ec ++ ; if ( $ec >> $Ua ) $Ua ++ ;}} $dc = range ( " \0 " , " \xFF " ); $H = " " ; foreach ( $nb
as $s => $mb ){ $tc = $dc [ $mb ]; if ( ! isset ( $tc )) $tc = $rj . $rj [ 0 ]; $H .= $tc ; if ( $s ) $dc [] = $rj . $tc [ 0 ]; $rj = $tc ;} return $H ;} function
on_help ( $tb , $vh = 0 ){ return
script ( " mixin(qsl('select, input'), { onmouseover: function (event) { helpMouseover.call(this, event, $tb , $vh ) }, onmouseout: helpMouseout}); " , " " );} function
edit_form ( $a , $p , $I , $Oi ){ global $b , $x , $ti , $n ; $Uh = $b -> tableName ( table_status1 ( $a , true )); page_header (( $Oi ? lang ( 10 ) : lang ( 11 )), $n , array ( " select " => array ( $a , $Uh )), $Uh ); if ( $I === false ) echo " <p class='error'> " . lang ( 12 ) . " \n " ; echo ' < form action = " " method = " post " enctype = " multipart/form-data " id = " form " >
';if(!$p)echo"<p class=' error '>".lang(13)."\n";else{echo"<table cellspacing=' 0 ' class=' layout '>".script("qsl(' table ' ) . onkeydown = editingKeydown ; " );foreach( $p
as $B => $o ){ echo " <tr><th> " . $b -> fieldName ( $o ); $Wb = $_GET [ " set " ][ bracket_escape ( $B )]; if ( $Wb === null ){ $Wb = $o [ " default " ]; if ( $o [ " type " ] == " bit " && preg_match ( " ~^b'([01]*)' \$ ~ " , $Wb , $Mg )) $Wb = $Mg [ 1 ];} $Y = ( $I !== null ? ( $I [ $B ] != " " && $x == " sql " && preg_match ( " ~enum|set~ " , $o [ " type " ]) ? ( is_array ( $I [ $B ]) ? array_sum ( $I [ $B ]) :+ $I [ $B ]) : $I [ $B ]) : ( ! $Oi && $o [ " auto_increment " ] ? " " : ( isset ( $_GET [ " select " ]) ? false : $Wb ))); if ( ! $_POST [ " save " ] && is_string ( $Y )) $Y = $b -> editVal ( $Y , $o ); $r = ( $_POST [ " save " ] ? ( string ) $_POST [ " function " ][ $B ] : ( $Oi && preg_match ( '~^CURRENT_TIMESTAMP~i' , $o [ " on_update " ]) ? " now " : ( $Y === false ? null : ( $Y !== null ? '' : 'NULL' )))); if ( preg_match ( " ~time~ " , $o [ " type " ]) && preg_match ( '~^CURRENT_TIMESTAMP~i' , $Y )){ $Y = " " ; $r = " now " ;} input ( $o , $Y , $r ); echo " \n " ;} if ( ! support ( " table " )) echo " <tr> " . " <th><input name='field_keys[]'> " . script ( " qsl('input').oninput = fieldChange; " ) . " <td class='function'> " . html_select ( " field_funs[] " , $b -> editFunctions ( array ( " null " => isset ( $_GET [ " select " ])))) . " <td><input name='field_vals[]'> " . " \n " ; echo " </table> \n " ;} echo " <p> \n " ; if ( $p ){ echo " <input type='submit' value=' " . lang ( 14 ) . " '> \n " ; if ( ! isset ( $_GET [ " select " ])){ echo " <input type='submit' name='insert' value=' " . ( $Oi ? lang ( 15 ) : lang ( 16 )) . " ' title='Ctrl+Shift+Enter'> \n " ,( $Oi ? script ( " qsl('input').onclick = function () { return !ajaxForm(this.form, ' " . lang ( 17 ) . " …', this); }; " ) : " " );}} echo ( $Oi ? " <input type='submit' name='delete' value=' " . lang ( 18 ) . " '> " . confirm () . " \n " : ( $_POST ||! $p ? " " : script ( " focus(qsa('td', qs('#form'))[1].firstChild); " ))); if ( isset ( $_GET [ " select " ])) hidden_fields ( array ( " check " => ( array ) $_POST [ " check " ], " clone " => $_POST [ " clone " ], " all " => $_POST [ " all " ])); echo '<input type="hidden" name="referer" value="' , h ( isset ( $_POST [ " referer " ]) ? $_POST [ " referer " ] : $_SERVER [ " HTTP_REFERER " ]), ' " >
2014-05-08 19:46:08 +02:00
< input type = " hidden " name = " save " value = " 1 " >
2020-04-26 00:47:07 +02:00
< input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2018-04-01 23:34:54 +02:00
' ;} if ( isset ( $_GET [ " file " ])){ 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 " ); if ( $_GET [ " file " ] == " favicon.ico " ){ header ( " Content-Type: image/x-icon " ); echo
lzw_decompress ( " \0 \0 \0 ` \0 <EFBFBD> \0 \n @ \0 <EFBFBD> C<> <10> \" \0 `E<> Q<EFBFBD> <51> <01> <1F> ?<3F> tvM'<27> Jd<4A> d \\ <19> b0\0 <08> \" <13> <> fӈ<66> <D388> s5<73> <35> <EFBFBD> <EFBFBD> A<EFBFBD> X P a J<> 0<18> <> <EFBFBD> 8<> #R<> T<EFBFBD> <54> z`<60> #.<2E> <> c<EFBFBD> X<EFBFBD> <58> Ȁ?<3F> -\0 <05> Im?<3F> .<16> M<EFBFBD> <16> \0 ȯ (̉<> <1E> /( %<25> \0 " );} elseif ( $_GET [ " file " ] == " default.css " ){ header ( " Content-Type: text/css; charset=utf-8 " ); echo
2020-04-26 00:47:07 +02:00
lzw_decompress ( " \n 1 ̇<> ٌ<EFBFBD> l7<6C> <37> B1<42> 4vb0<62> <30> fs<66> <73> <EFBFBD> n2B<32> ѱ٘<D1B1> n:<0E> # (<28> b. \r D c)<29> <> a7 E<> <13> <> <EFBFBD> l<0C> ñ<EFBFBD> <C3B1> i1̎s<03> <> <EFBFBD> -4<> <34> f<EFBFBD> <09> <> i7<0E> <03> <> <EFBFBD> <EFBFBD> t4<0E> <> <EFBFBD> y<EFBFBD> Zf4<66> <05> i<01> AT<41> V V<15> <> f: Ϧ , :1<0E> Qݼ<51> b2 `<60> #<0C> >:7G<37> <47> 1<EFBFBD> <31> <EFBFBD> s<EFBFBD> <73> L<EFBFBD> XD*bv<܌#<23> e@<40> :4<1B> <> !fo<1D> <> <EFBFBD> t:<<3C> <> 咾<EFBFBD> o<EFBFBD> <6F> \n i<EFBFBD> <EFBFBD> <EFBFBD> ',<2C> <> a _<> :<3A> i<69> Bv<42> |N<> 4.5 Nf<4E> i<EFBFBD> vp<76> h<EFBFBD> <68> l<EFBFBD> <6C> <EFBFBD> ֚<EFBFBD> O<EFBFBD> <4F> <EFBFBD> <EFBFBD> = <20> OFQ<46> <51> k \$ <EFBFBD> <EFBFBD> i<EFBFBD> <1A> <> <EFBFBD> d2T<0C> <> p<EFBFBD> <70> 6<EFBFBD> <01> <> <EFBFBD> <EFBFBD> -<2D> Z<EFBFBD> <5A> <EFBFBD> <EFBFBD> <EFBFBD> 6<EFBFBD> <36> <EFBFBD> <EFBFBD> h:<3A> a<> ,<2C> <> <EFBFBD> <10> 2<EFBFBD> #8А <38> #<23> <> 6 n<> <6E> <11> <> J<1E> <> h<EFBFBD> t<EFBFBD> <74> <EFBFBD> <EFBFBD> <EFBFBD> 4 O42<34> <32> ok<6F> <12> *r<> <72> <01> @ p@<16> !<21> <1D> <> <EFBFBD> <EFBFBD> <EFBFBD> ?<3F> 6<> <36> r[<03> <> L<06> <> <EFBFBD> :2B<32> j<EFBFBD> !Hb<1C> <> P<EFBFBD> = !1 V<> \" <EFBFBD> <EFBFBD> 0<EFBFBD> <EFBFBD> \n S<EFBFBD> <19> <> D7<0E> <> Dڛ<44> C!<1C> !<21> <> <EFBFBD> Gʌ<47> <20> +<2B> = tC<74> <43> .C<> <43> : +<2B> <> =<3D> <> <EFBFBD> <EFBFBD> <18> <> <EFBFBD> %<1F> c<EFBFBD> 1MR/<2F> EȒ4<C892> <34> <EFBFBD> 2<EFBFBD> 䱠<EFBFBD> `<60> 8(<28> ӹ[W<0B> <> =<3D> yS<0C> b<EFBFBD> =<3D> -ܹ BS +ɯ <> <C9AF> <EFBFBD> <EFBFBD> <0F> @ p L4Y d<> <17> q<EFBFBD> <71> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 6<0C> 3Ĭ<0C> <> Ac܌<63> Ψ<EFBFBD> k<EFBFBD> [&><3E> <> <EFBFBD> Z<> pkm]<5D> u-c:<3A> <15> <> N t<> δpҝ<70> <D29D> 8<EFBFBD> =<3D> #<23> <> [ .<2E> <> ޯ<EFBFBD> ~<7E> <> <EFBFBD> m<EFBFBD> y<EFBFBD> PP<50> |I֛<49> <EFBFBD> <0F> Q<> 9v[<5B> Q<EFBFBD> <51> \n <EFBFBD> <EFBFBD> r<EFBFBD> 'g<> +<2B> <> T<EFBFBD> 2<EFBFBD> <32> V<EFBFBD> <56> z<EFBFBD> 4<EFBFBD> <34> 8<EFBFBD> <38> ( <09> Ey*#j<> 2]<12> <> R<EFBFBD> <52> <06> <> )<29> <> [N<> R\$ <EFBFBD> <>:<3A> <> >\$ ;<14> ><3E> <> \r <EFBFBD> <EFBFBD> <EFBFBD> H<EFBFBD> <EFBFBD> T<> \n w<> N <20> wأ<77> <D8A3> <<3C> <0E> Gw<47> <77> <EFBFBD> <15> \\ Y<EFBFBD> _<EFBFBD> Rt^<5E> ><3E> \r }<7D> <> S \r z<EFBFBD> 4=<3D> \n L<EFBFBD> %J<> <13> \" ,Z<> 8<0E> <> <EFBFBD> <EFBFBD> i<EFBFBD> 0u<30> ?<1A> <> <EFBFBD> <EFBFBD> <EFBFBD> s 3 #<23> ى<EFBFBD> :<3A> <> <EFBFBD> <EFBFBD> 㽖<18> <> E]x<> <78> <0E> s^8<> <38> K^<5E> <> *0<> <30> w<EFBFBD> <03> <> <EFBFBD> ~<7E> <> <EFBFBD> :<3A> <> i<EFBFBD> <69> <EFBFBD> v2w<32> <77> <EFBFBD> <07> ^7<> <0E> <08> 7<EFBFBD> c<EFBFBD> <63> u+U %<25> { P<EFBFBD> *4̼<34> LX./!<21> <> 1C<1E> <> qx! H<> <02> Fd<08> <> L<EFBFBD> <4C> <1B> Ġ<> `6<06> <0C> 5<> <1A> f<05> <> Ć<EFBFBD> = H<> l <20> V 1<> <31> \0 a2<EFBFBD> ;<3B> <> 6<EFBFBD> <36> <EFBFBD> <EFBFBD> _ه <D987> \0 &<26> Z<EFBFBD> S<EFBFBD> d)KE'<27> <> n<EFBFBD> <6E> [ X<> <58> \0 ZɊ<EFBFBD> F[P<> ޘ@<40> <> !<19> <0E> Y<EFBFBD> ,`<60> \" ڷ<05> <> 0Ee9 yF><3E> <> 9 b<> <62> <EFBFBD> <EFBFBD> F5:<14> <> <EFBFBD> \0 } Ĵ<> <C4B4> ( \$ <0E> <> <08> <> <EFBFBD> 37H<37> <1C> <> M<> A<EFBFBD> <41> 6R<36> <52> { Mq<EFBFBD> 7G<EFBFBD> <EFBFBD> C<> C<0C> m2<03> (<28> Ct>[<5B> -t<> /&C<0C> ]<5D> etG<74> ̬ 4@ r><06> <> <08> <<3C> Sq<11> /<2F> <> <EFBFBD> Q<EFBFBD> <51> hm<68> <6D> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> L<EFBFBD> <4C> #<10> <> K<EFBFBD> |<7C> <> <EFBFBD> 6fKP<4B> \r %t<> <08> V= \" <EFBFBD> SH\$ <EFBFBD> } <20> <> )w<> ,W\0 F<06> <> u@<40> b<0B> 9<EFBFBD> \r r<EFBFBD> 2<EFBFBD> #<23> D<EFBFBD> <44> X<EFBFBD> <58> <EFBFBD> yOI<4F> ><14> <> n<0B> <> Ǣ %<25> <> <EFBFBD> '<27> <> _<EFBFBD> <5F> t \r τz<0C> \\ 1<EFBFBD> hl<EFBFBD> ]Q5Mp6k<36> <6B> <EFBFBD> qh<71> \$ <EFBFBD> H~<06> |<7C> <14> !*4<> <34> <10> <14> `S<> <53> <EFBFBD> S t<> PP\\ g<EFBFBD> <EFBFBD> 7<EFBFBD> \n -<07> :袪p<E8A2AA> <70> <EFBFBD> <EFBFBD> l<EFBFBD> B<EFBFBD> <42> <EFBFBD> <EFBFBD> 7Ө c<> (wO0 \\ :<07> <> w<EFBFBD> <77> <EFBFBD> p4<70> <34> <EFBFBD> { T<EFBFBD> <EFBFBD> jO<EFBFBD> 6 H Ê<> r<EFBFBD> <12> <03> q \n <11> <> %%<25> y']\$ <EFBFBD> <EFBFBD> a<EFBFBD> Z<1D> .fc<66> q*-<2D> FW<46> <57> k<EFBFBD> <6B> z<EFBFBD> <15> <> j<> <1E> <> lg<6C> <67> :<3A> \$ \" <EFBFBD> N<EFBFBD> \r #<23> d<EFBFBD> Â<EFBFBD> <C382> <01> sc<73> <63> ̠<EFBFBD> <14> \" j<EFBFBD> \r <EFBFBD> <EFBFBD> <EFBFBD> <15> <> Ւ<EFBFBD> Ph<50> 1/<2F> <02> D A)<06> <> <EFBFBD> [<5B> kn<6B> p7 6<> Y<EFBFBD> <59> R{ <18> M<05> P<EFBFBD> <50> <EFBFBD> @\n -<2D> a<EFBFBD> 6<EFBFBD> <36> [<5B> zJ H,<2C> dl<14> B<> h<EFBFBD> o<EFBFBD> <6F> <EFBFBD> <03> <1D> +<2B> #Dr^<1F> ^<5E> <> e<EFBFBD> <65> E<EFBFBD> <45> <EFBFBD> ĜaP<61> <50> <EFBFBD> JG<4A> z<1A> <> t<0E> <> 2<EFBFBD> X<EFBFBD> <16> <> <EFBFBD> <EFBFBD> V<EFBFBD> <56> <EFBFBD> <EFBFBD> <EFBFBD> ȳ<13> <> B_%K=E<> <45> b 弾<7F> §kU(.! ܮ8<DCAE> <38> <EFBFBD> <EFBFBD> I.@<40> K<EFBFBD> xn<78> <6E> <EFBFBD> :<3A> P<EFBFBD> 3 2<> <32> m<EFBFBD> H C*<2A> :v<17> T<EFBFBD> \n R<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0u<01> <> <10> <> <1C> ҧ]<01> <1B> <> <EFBFBD> <EFBFBD> P /<2F> JQd<51> { L<EFBFBD> :Y<> <59> 2b<32> <62> T <20> <> <EFBFBD> 3<EFBFBD> 4<EFBFBD> <34> <EFBFBD> c<EFBFBD> <63> V=<3D> <> <15> L4<1E> <> r<0C> !<21> B<03> Y<EFBFBD> 6<0F> <19> MeL<07> <> <EFBFBD> <1D> <> <EFBFBD> <EFBFBD> i<EFBFBD> o<EFBFBD> 9< G<> <47> ƕЙM hm^<5E> U<EFBFBD> N<EFBFBD> <4E> <EFBFBD> <0B> Tr 5HiM<69> /<2F> n<EFBFBD> 흳T<ED9DB3> <54> [-<_ _<> 3/Xr( <<3C> <> <EFBFBD> <EFBFBD> <05> <> <EFBFBD> <EFBFBD> <EFBFBD> u ҖG NX2 0<> \r \$ ^<5E> <> :'9<> <39> O<EFBFBD> <4F> ;<3B> k<EFBFBD> <03> <> <0C> f<EFBFBD> <66> N'a<> <61> <06> <0E> b<EFBFBD> ,<2C> V<EFBFBD> <56> <EFBFBD> <EFBFBD> 1<EFBFBD> <31> HI!%6@<40> <08> \$ <EFBFBD> EG ڜ<> 1<EFBFBD> (mU<6D> <55> <EFBFBD> rս <72> <03> <> `<60> <> i N+ Ü<> )<29> <> <16> 0l<30> <6C> f0<66> <06> [U<> <55> V<EFBFBD> <56> -:I^<5E> <> \$ <EFBFBD> s<EFBFBD> b\r e<EFBFBD> <EFBFBD> ug<75> h<EFBFBD> ~9<> ߈<EFBFBD> b<EFBFBD> <62> <EFBFBD> <EFBFBD> <EFBFBD> f<EFBFBD> +0<> <30> hXrݬ<72> ! \$ <EFBFBD> e,<2C> w+<2B> <> <EFBFBD> <EFBFBD> <EFBFBD> 3<EFBFBD> <33> _<10> A<EFBFBD> k<EFBFBD> <6B> \n k<EFBFBD> r<EFBFBD> ʛc u WdY<64> \\ <EFBFBD> ={ .<2E> č<EFBFBD> <C48D> <EFBFBD> g<> <67> p8<70> t \r RZ<EFBFBD> v<EFBFBD> J :<3A> ><3E> <> Y|+<2B> @<40> <> <EFBFBD> <EFBFBD> C<> t \r <EFBFBD> <EFBFBD> jt<6A> <74> 6<> <36> %<25> ?<03> <> ǎ<EFBFBD> <C78E> ><3E> /<0B> <> <EFBFBD> <EFBFBD> <EFBFBD> 9F`ו <> <D795> v ~K<> <4B> <EFBFBD> <EFBFBD> <EFBFBD> R<EFBFBD> W<EFBFBD> <57> z<EFBFBD> <0C> lm<6C> w L<> 9Y<39> * q<> x<EFBFBD> z<EFBFBD> <7A> Se<53> ݛ<EFBFBD> <DD9B> <EFBFBD> <EFBFBD> ~<7E> D<1D> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> x<EFBFBD> <78> <EFBFBD> ɟi7<69> 2<1F> <> <EFBFBD> Oݻ<07> <> _{ <EFBFBD> <EFBFBD> 53<EFBFBD> <EFBFBD> t<EFBFBD> <EFBFBD> <EFBFBD> _<EFBFBD> <EFBFBD> z<EFBFBD> 3<EFBFBD> d)<29> C<EFBFBD> <43> \$ ?KӪP<D3AA> %<25> <> T&<26> <0C> & \0 P<EFBFBD> NA<EFBFBD> ^<5E> ~<7E> <> <EFBFBD> p<06> <20> Ϝ <> <0F> <> \r \$ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> b*+D6궦ψ<EAB6A6> <CF88> J\$ (<28> ol<6F> <6C> h&<06> <> KBS ><3E> <> <EFBFBD> ; z<> <7A> x<EFBFBD> oz><3E> <> <EFBFBD> o<> Z<EFBFBD> \n ʋ [<05> v<EFBFBD> <76> <EFBFBD> Ȝ <> <C89C> 2<EFBFBD> OxِV<D990> 0f<30> <66> <EFBFBD> <0F> <> 2Bl<42> bk<02> 6Zk<5A> hXc d<> 0*<2A> KT<4B> <54> H=<3D> <> π<> p0<70> l V<> <56> <0B> <> \r <08> <> <EFBFBD> n<EFBFBD> m<EFBFBD> <6D> )(<28> (<28> :#<23> <> <EFBFBD> <EFBFBD> E<EFBFBD> <45> :C<> C<EFBFBD> <43> <0B> \r <EFBFBD> G\r é 0<> <0E> i<0E> <> <0C> <> :`Z1Q \n :<3A> <> \r \0 <EFBFBD> <0B> <> q<05> <11> <> : `<60> -<10> M #} 1;<11> <> <EFBFBD> <EFBFBD> q<11> # |<0E> S<11> <> <EFBFBD> hl<68> D<EFBFBD> \0 f iDp<44> L<> <4C> ``<60> <> <EFBFBD> <10> 0y<30> <79> 1<> <18> <> \r <EFBFBD> =<10> M Q\\ <0C> <> %o q<> <71> \0 <EFBFBD> <0B> <> 1<> 21<32> 1<7F> <31> <20> <18> <> ќbi:<3A> <> \r <EFBFBD> / Ѣ<> ` )<29> <> 0<EFBFBD> <19> @<40> <15> <1E> I 1<> N<14> C<EFBFBD> <43> <EFBFBD> <EFBFBD> <17> O<11> <> Z<EFBFBD> <5A> 1<> <1E> <> q1 <20> <15> <> <EFBFBD> ,<2C> \r dI<11> Ǧv<C7A6> j<EFBFBD> <6A> 1 t<> B<EFBFBD> <42> <EFBFBD> ⁒0:<3A> 0<0C> <> <EFBFBD> 1<EFBFBD> A2V<32> <56> <EFBFBD> 0<EFBFBD> <30> <1B> <> %<25> f i3! &Q<> Rc%<25> q& w%<25> <> \r <EFBFBD> <EFBFBD> V<EFBFBD> #<23> <> <EFBFBD> Qw `<60> % <20> <> <EFBFBD> m*r<> <10> y &i<> +r{ *<2A> <> (rg(<28> #(2<> (<28> <> )R@ i<> -<2D> <> <20> <> <EFBFBD> 1 \" \0 <EFBFBD> <1A> R<EFBFBD> <52> <EFBFBD> . e.r<> <1A> ,<0C> ry(2<> C<EFBFBD> <43> <EFBFBD> b<EFBFBD> !Bޏ3 %ҵ,R<> 1<EFBFBD> <31> &<26> <> t<EFBFBD> <74> b<EFBFBD> a\r L<EFBFBD> <EFBFBD> -3<12> <13> <> <0C> <> \0 <EFBFBD> <0B> Bp<11> 1<EFBFBD> 94<39> O'R<> 3*<2A> <> =\$ <EFBFBD> [<13> ^iI;/3i<11> 5<EFBFBD> &<26> } 1 7<> # ѹ8<D1B9> <38> \" <EFBFBD> 7<EFBFBD> <EFBFBD> 8<11> 9*<2A> 23<32> !<21> <> !1\\ \0 <EFBFBD> 8<EFBFBD> <EFBFBD> rk9<13> ;S<> 23<32> <0B> ړ*<2A> :q]5S <<3C> <> #3<> 83<38> # e<> =<13> > ~9S螳<53> r<> )<29> <> T * a<13> @і <> be s<> <1B> <1B> :-<2D> <> <EFBFBD> <EFBFBD> <EFBFBD> *;,<2C> ؙ3 !i<> <69> <EFBFBD> LҲ<4C> #1 <20> + n<> <20> *<2A> <> @<40> 3i7<69> 1<> <04> <> _<13> F<EFBFBD> S;3<> F<EFBFBD> \r A<EFBFBD> <EFBFBD> 3<> ><3E> x:<3A> \r <EFBFBD> 0<EFBFBD> <EFBFBD> @<40> -<2D> /<0E> <> w<15> <> 7<EFBFBD> <37> <EFBFBD> S<EFBFBD> J3<4A> <20> .F<> \$ O<EFBFBD> B<EFBFBD> <EFBFBD> <EFBFBD> %4<> +t<> 'g<> Lq \r Jt<EFBFBD> J<EFBFBD> <EFBFBD> M2 \r <EFBFBD> <EFBFBD> 7<EFBFBD> <EFBFBD> T@<40> <> <EFBFBD> ) ⓣd<E293A3> <64> 2 <32> P>ΰ<0E> <> Fi<69> \n r \0 <EFBFBD> <12> b<EFBFBD> k(<28> D<EFBFBD> <44> <EFBFBD> KQ<4B> <51> <EFBFBD> <EFBFBD> 1<> \" 2t<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> P<14> \r <EFBFBD> <EFBFBD> ,\$ KCt<EFBFBD> 5<EFBFBD> <EFBFBD> #<23> <> )<29> <> P# Pi .<0C> U 2<> C<> ~<7E> \" <EFBFBD> " );} elseif ( $_GET [ " file " ] == " functions.js " ){ header ( " Content-Type: text/javascript; charset=utf-8 " ); echo
lzw_decompress ( " f:<3A> <> gCI<43> <49> \n 8<EFBFBD> <EFBFBD> 3)<29> <> 7<> <37> <EFBFBD> 81<38> <31> x: \n Og#)<29> <> r7 \n \" <EFBFBD> <EFBFBD> <EFBFBD> `<60> |2<1B> gSi<53> H) N<> S<EFBFBD> <53> <EFBFBD> \r <EFBFBD> <EFBFBD> \" 0<EFBFBD> <EFBFBD> @<40> )<1D> ` ( \$ s6O!<21> <> <EFBFBD> V/ =<3D> <> ' T4<54> =<3D> <> iS<69> <53> 6IO<49> G#<23> X<> V C<> <43> s<EFBFBD> <73> Z1.<2E> hp8,<1E> [<5B> H<EFBFBD> <48> ~Cz<43> <7A> <EFBFBD> 2<EFBFBD> l<EFBFBD> c3<63> <33> <EFBFBD> s<EFBFBD> <73> <04> I<EFBFBD> b<EFBFBD> 4\n <06> F8T<38> <54> I<> <49> <1A> U*fz<66> <04> r0<72> E<EFBFBD> <13> <> <EFBFBD> y<1B> <> <EFBFBD> f<EFBFBD> Y.:<1C> <14> I<EFBFBD> <49> (<18> c<EFBFBD> <63> !<21> _l<5F> <6C> ^<5E> ^(<28> <> N{ S<EFBFBD> <EFBFBD> )r<> q<EFBFBD> Y<EFBFBD> <59> l٦3<D9A6> 3<EFBFBD> \n <EFBFBD> +G<> <47> <EFBFBD> y<EFBFBD> <79> <EFBFBD> <EFBFBD> i<EFBFBD> <69> <EFBFBD> xV3w<17> u h<> ^r<> <72> <EFBFBD> <1E> a۔ <61> <DB94> <EFBFBD> c<EFBFBD> <63> \r <0E> <> <EFBFBD> (. <> <C288> Ch<43> <\r )<08> ѣ<EFBFBD> `<60> 7<EFBFBD> <37> <EFBFBD> 43'm 5<> <35> <EFBFBD> \n <EFBFBD> P<EFBFBD> :2<> P<EFBFBD> <50> <EFBFBD> <EFBFBD> q <20> <> <EFBFBD> C<EFBFBD> } ī<> <C4AB> <EFBFBD> <EFBFBD> <EFBFBD> 38<33> B<18> 0<EFBFBD> hR<1A> <> r(<28> 0<EFBFBD> <30> b\\ 0<EFBFBD> Hr44<EFBFBD> <EFBFBD> B<1A> !<21> p<EFBFBD> \$ <EFBFBD> rZZ<1E> 2܉.Ƀ(\\ <EFBFBD> 5<EFBFBD> |\n C(<28> \" <EFBFBD> <03> P<13> <02> <> .<0B> <> N<15> RT<52> Γ<> <CE93> ><04> HN<14> <> 8H P<> \\ <EFBFBD> 7J p~<13> <13> <> 2%<25> <> OC<4F> 1<EFBFBD> .<2E> <> C8· H<> <48> *<2A> j<EFBFBD> <6A> <04> <1C> S(<0C> /<0C> <> <EFBFBD> 6KU<4B> <55> <1E> <> < 2<0C> pOI<4F> <49> <EFBFBD> `<60> <> <EFBFBD> Ⳉd O<> H<EFBFBD> <48> 5<EFBFBD> -<2D> <> 4<EFBFBD> <34> pX25-Ң<> ۈ<EFBFBD> z7<0C> <> \" (<28> P<EFBFBD> \\ 32 :] U<> <0C> <> <EFBFBD> ߅!]<5D> <<3C> A<EFBFBD> ۤ<> <DBA4> <EFBFBD> iڰ<04> l \r <EFBFBD> \0 v<EFBFBD> <EFBFBD> #J8<4A> <38> wm<77> <6D> ɤ<> <<3C> ɠ<EFBFBD> <C9A0> %m;p #<23> `X<> D<EFBFBD> <44> <EFBFBD> iZ<69> <5A> N0<4E> <30> <EFBFBD> <EFBFBD> 9<0B> <> 占<EFBFBD> <E58DA0> `<13> <> w J<> D<EFBFBD> <EFBFBD> 2<EFBFBD> 9t<39> <74> *<1C> <> y<EFBFBD> <79> NiIh \\ 9<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :<0E> <> <EFBFBD> <05> xﭵyl*<2A> Ȉ<> <17> Y<EFBFBD> <59> <17> <> <EFBFBD> 8<EFBFBD> W<EFBFBD> <57> ?<3F> <> <EFBFBD> ޛ3<0C> <> <EFBFBD> ! \" 6<08> <> n[<5B> <> \r <EFBFBD> *\$ <0C> Ƨ <EFBFBD> nzx<7A> 9\r <EFBFBD> |*3ףp<D7A3> ﻶ<> : (p\\ ;<3B> <> mz<1B> <> <EFBFBD> 9<> <1C> <> <EFBFBD> 8N<18> <> <EFBFBD> j2<6A> <32> <14> <> \r <EFBFBD> H<EFBFBD> H&<26> <> (<28> z<EFBFBD> <7A> 7i<37> k<EFBFBD> <20> <> <EFBFBD> <EFBFBD> c<EFBFBD> <63> e<EFBFBD> <65> <EFBFBD> <EFBFBD> t<EFBFBD> <74> <EFBFBD> 2:SH<53> Ƞ<EFBFBD> /)<29> x<EFBFBD> @<40> <> t<EFBFBD> ri9<69> <39> <EFBFBD> <EFBFBD> <EFBFBD> 8<EFBFBD> <38> <EFBFBD> <EFBFBD> yҷ<79> <D2B7> <EFBFBD> V<EFBFBD> +^Wڦ<57> <DAA6> kZ<6B> Y<EFBFBD> l<0E> ʣ<EFBFBD> <0E> <> 4<03> <> Ƌ<EFBFBD> <C68B> <05> <> <14> <> \\ E<EFBFBD> { <EFBFBD> 7\0 <EFBFBD> p<EFBFBD> <12> <> D<02> <> i<EFBFBD> -T<> <54> <EFBFBD> <EFBFBD> 0l<30> %=<3D> <> <EFBFBD> ˃ 9(<01> 5<10> \n \n <EFBFBD> n,4<> \0 <EFBFBD> a }܃ .<2E> <> Rs\0 2B\\ <EFBFBD> b1<EFBFBD> S<EFBFBD> \000 3,<2C> XPHJs p<> d<EFBFBD> K<> CA!<21> 2*W<> <13> <> <EFBFBD> 2 \$ <EFBFBD> +<19> f^\n <EFBFBD> 1<> <31> <EFBFBD> <EFBFBD> zE<7A> Iv<49> \\ <EFBFBD> <EFBFBD> 2<EFBFBD> <03> .*A<> <41> <EFBFBD> E (d<07> <> <EFBFBD> <EFBFBD> b<EFBFBD> <1C> ܄ <EFBFBD> <11> 9<EFBFBD> <39> <EFBFBD> <EFBFBD> <EFBFBD> Dh<44> &<26> <> ?<10> H<> s<EFBFBD> Q<EFBFBD> 2<EFBFBD> x~nÁ J<> T2<03> &<26> <> e R<> <52> <EFBFBD> G<EFBFBD> Q<EFBFBD> <51> Tw<54> ݑ<EFBFBD> <DD91> P<02> <> <EFBFBD> \\ <EFBFBD> )6<> <36> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> s h\\ 3<EFBFBD> \0 R <19> ' \r +*; R<1A> H<EFBFBD> .<2E> !<21> [<5B> '~<7E> %t< <20> p<EFBFBD> K# <> !<0E> l<EFBFBD> <6C> <EFBFBD> L e<> <65> <EFBFBD> <12> ,<06> <> <EFBFBD> &<26> \$ <09> <> `<60> <15> CX<43> <0E> ӆ0֭<30> <D6AD> <EFBFBD> <07> <> :M<> h <09> ڜG<DA9C> <47> !&3<> D<EFBFBD> < !<21> <> 23<32> <33> ?h<> J<> e <20> <> h<EFBFBD> \r <EFBFBD> m<EFBFBD> <EFBFBD> <EFBFBD> N i<02> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> N<EFBFBD> H l7<6C> <37> v<EFBFBD> <76> WI<0C> .<0B> <> -<2D> 5֧ey<07> \r EJ\n i *<0B> \$ @<40> RU0,\$ U<1B> E<EFBFBD> <45> <EFBFBD> <EFBFBD> ªu)@(t<> SJk<05> p!<02> ~<7E> <> <EFBFBD> d `<60> ><3E> <> \n <0B> ;#\r p9<70> j ɹ<> ]&Nc(r<> <72> <EFBFBD> TQU<51> <55> S<EFBFBD> <53> \0 8n `<60> <> y<EFBFBD> b<EFBFBD> <62> <16> L<> O5<4F> <35> ,<2C> <> <EFBFBD> <EFBFBD> ><3E> <> <EFBFBD> x<EFBFBD> <01> <15> f䴒<66> <E4B492> <1B> +<2B> <> \" <EFBFBD> I<EFBFBD> { kM<EFBFBD> [ \r %<25> [ <09> e<0B> a<> 1! <20> <> <EFBFBD> <EFBFBD> Ԯ<EFBFBD> F@<40> b)R<> <52> 72<37> <32> 0<EFBFBD> \n W<16> <> <EFBFBD> L<EFBFBD> ܜҮ td<74> +<2B> <> <1C> 0wgl<67> 0n@<40> <> ɢ<EFBFBD> i<EFBFBD> M<EFBFBD> <4D> \n A<EFBFBD> M5n<EFBFBD> \$ E<EFBFBD> ױ N<> <4E> l<EFBFBD> <6C> <12> <> <16> %<25> 1 A<> <41> <EFBFBD> <13> <> <EFBFBD> k<EFBFBD> r<EFBFBD> iFB<46> <01> <> ol,muNx-<2D> _<EFBFBD> ֤C( <0E> <> f<1C> l \r 1p [ 9x (i<> BҖ<42> <D296> zQl<51> <6C> 8C<03> <09> <02> XU Tb<54> <62> I<EFBFBD> `<60> p+V \0 <EFBFBD> <EFBFBD> <EFBFBD> ;<3B> Cb<43> <62> X<EFBFBD> +ϒ <> s<EFBFBD> <73> ]H<> <48> [<5B> k<EFBFBD> x<EFBFBD> G*<2A> <> <EFBFBD> ]<5D> awn<77> !<21> 6<EFBFBD> <36> <EFBFBD> <EFBFBD> <EFBFBD> mS<6D> <53> <EFBFBD> I<EFBFBD> <49> K<EFBFBD> ~/<2F> ӥ7<D3A5> <37> eeN<65> <4E> <EFBFBD> <EFBFBD> S<EFBFBD> /;d<> A<EFBFBD> >}l~<7E> <> <EFBFBD> <20> % ^<5E> f<> آpڜDE<44> <45> a<EFBFBD> <61> t\n x=<3D> kЎ<6B> * d<> <64> <04> T<16> <> <EFBFBD> <EFBFBD> j 2<> <32> j<EFBFBD> <6A> \n <EFBFBD> <EFBFBD> <EFBFBD> ,<2C> e=<3D> <> M8 4<> <34> <EFBFBD> a<> j@<40> T<EFBFBD> s<EFBFBD> <73> <EFBFBD> nf<6E> <66> \n <1A> 6<EFBFBD> \r d<EFBFBD> <10> 0<EFBFBD> <30> <EFBFBD> Y<EFBFBD> '%ԓ<> <18> ~ <09> Ҩ<EFBFBD> <<3C> <10> <0B> AH<EE8B96> G<1B> <> 8<EFBFBD> <19> <> \$ z<1C> <> { <EFBFBD> <EFBFBD> <EFBFBD> u2*<11> <03> a<0F> <> ><17> ( w<> K.bP<62> { <EFBFBD> <EFBFBD> o<0F> <01> ´ <0E> z<> #<23> 2<0E> 8=<3D> 8><3E> <> <EFBFBD> A,<2C> e<EFBFBD> <65> <EFBFBD> +<2B> C<EFBFBD> <43> x<EFBFBD> *<2A> <> <EFBFBD> -b=m<> <6D> <EFBFBD> ,<2C> a<EFBFBD> <61> lzk<7A> <6B> <EFBFBD> \$ W<19> ,<2C> m<EFBFBD> Ji<4A> ʧ<EFBFBD> <CAA7> <EFBFBD> +<2B> <> <EFBFBD> 0<EFBFBD> [<0B> <> .R<> sK<73> <4B> <1B> X<EFBFBD> <1D> Z L<> <4C> 2<EFBFBD> `<17> (<28> C<EFBFBD> vZ<76> <5A> <EFBFBD> <05> <> <02> \$ <EFBFBD> ,<2C> D?H<> <48> NxX<16> <> )<29> <> <EFBFBD> M<0F> <> \$ <EFBFBD> ,<2C> <> *\n ѣ \$ <q<19> şh!<21> <> S<EFBFBD> <17> <> <EFBFBD> <EFBFBD> xsA!<21> :<04> K<EFBFBD> <4B> }<7D> <> <04> <> <EFBFBD> <EFBFBD> <EFBFBD> R<EFBFBD> <52> A2k<32> X<EFBFBD> p \n <<3C> <07> <> <EFBFBD> <EFBFBD> l<EFBFBD> <0E> <> 3<EFBFBD> <33> <EFBFBD> <EFBFBD> <1B> VV<56> }<7D> g &Yݍ!<21> +<2B> ;<<3C> Y<EFBFBD> <59> <EFBFBD> YE3 r<> َ<EFBFBD> <06> C<EFBFBD> o5<6F> <35> <EFBFBD> <EFBFBD> ճ<EFBFBD> kk<6B> <6B> <EFBFBD> <EFBFBD> <EFBFBD> ۣ<EFBFBD> <DBA3> t<> <74> U<EFBFBD> <55> <EFBFBD> )<29> [<5B> <> <EFBFBD> <EFBFBD> }<7D> <12> u<EFBFBD> <75> l<15> <> :D<> <44> +Ϗ _o<5F> <0C> h140<34> <30> <EFBFBD> 0<EFBFBD> <30> b<EFBFBD> K<EFBFBD> 㬒<0C> <> <EFBFBD> <EFBFBD> <04> lG<6C> <47> #<23> <> <EFBFBD> <EFBFBD> <EFBFBD> <05> <> <EFBFBD> <EFBFBD> |Ud<55> <64> I K<08> <> <EFBFBD> 7<EFBFBD> ^<5E> <> <EFBFBD> @<40> <> O \0 H<04> <04> Hi<48> 6 \r <EFBFBD> <EFBFBD> <02> <> \\ cg \0 <EFBFBD> <EFBFBD> <EFBFBD> 2<0E> B<05> *e<> <65> \n <EFBFBD> <EFBFBD> <09> zr<7A> !<21> nW z&<26> { H<> <48> '\$ X <20> w@<40> 8<EFBFBD> DGr*<2A> <> <EFBFBD> H<> 'p#<23> Į<EFBFBD> <C4AE> <EFBFBD> \n d<EFBFBD> <EFBFBD> <EFBFBD> ,<2C> <0F> <> ,<2C> ;g~<0C> \0 <EFBFBD> #<23> <> <05> <> E<EFBFBD> <45> \r <EFBFBD> I`<60> <10> '<27> <0F> %E<> .<2E> ] `<60> Л<0E> <0E> %&<04> <> m<EFBFBD> <6D> \r <EFBFBD> <EFBFBD> %4S<34> v<EFBFBD> #\n <0E> <> fH\$ %<25> -<2D> #<23> <> <EFBFBD> qB<71> <42> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Q-<2D> c2<63> <32> <EFBFBD> &<26> <0C> <> ]<5D> <> <20> qh \r <EFBFBD> l]<5D> <> s<EFBFBD> <73> <07> h<EFBFBD> 7<16> n#<23> <> <0C> <> -<2D> jE<6A> Fr<46> <72> l&d<0C> <> <EFBFBD> <EFBFBD> z<EFBFBD> F6<46> <36> <EFBFBD> <EFBFBD> \" <13> <> <EFBFBD> |<7C> <> <EFBFBD> s@<40> <1A> <> <0E> z )0rpڏ\0 <EFBFBD> X\0 <EFBFBD> <EFBFBD> <EFBFBD> |DL<!<21> <16> o<EFBFBD> *<2A> D<> { .B<E<> <45> <EFBFBD> 0n B(<11> <20> | \r \n <EFBFBD> ^<5E> <06> <> <EFBFBD> h<> !<21> <> <EFBFBD> r\$ <EFBFBD> <EFBFBD> (^<5E> ~<7E> <> <EFBFBD> <EFBFBD> /p<> q<1F> <10> B<EFBFBD> <42> O<EFBFBD> <07> <> <EFBFBD> ,\\ <EFBFBD> <0F> #RR<52> <0E> %<25> <> <EFBFBD> d<EFBFBD> Hj<48> `<60> <05> <> <0B> ̭ V<05> bS<62> d<EFBFBD> i<16> E<EFBFBD> <06> <> oh<6F> r<i/k\$ -<2D> \$ o<EFBFBD> <EFBFBD> +<2B> ŋ<EFBFBD> <C58B> l<EFBFBD> <6C> O<EFBFBD> &evƒ<76> i<EFBFBD> jMPA' u'<27> <> <0C> ( M(h/+<2B> <> WD<57> So<53> . n<> .<0E> n<14> <12> <> (<28> ( \" <EFBFBD> <12> <> h<EFBFBD> &p<> <70> /<18> /1D̊<44> j娸 E<1D> <> &⦀<> , 'l\$ / .,<05> d<EFBFBD> <64> <EFBFBD> W<EFBFBD> b bO3<4F> B<EFBFBD> sH<11> :J`!<21> .<2E> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <01> <> <EFBFBD> ,F<> <46> 7(<08> <> Կ<EFBFBD> <0B> 1<EFBFBD> l<EFBFBD> s <20> Ҏ<EFBFBD> <D28E> <EFBFBD> Ţq<C5A2> X \r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ~R鰱 `<60> Ҟ<04> <> Y*<2A> :R<> <52> rJ<72> <13> %L<> +n<> \" <EFBFBD> <EFBFBD> \r <EFBFBD> <EFBFBD> ͇H!qb<71> 2<EFBFBD> Li<4C> %<25> <> <EFBFBD> <13> Wj#9<> <39> ObE.I:<0F> 6<EFBFBD> 7\0 <EFBFBD> 6+<2B> %<25> .<2E> <0C> <> <05> a7E8VS<56> ? (DG<44> ӳB<D3B3> %;<3B> <> <EFBFBD> <EFBFBD> /<<3C> <> <EFBFBD> <EFBFBD> <EFBFBD> \r <20> <07> ><3E> M<EFBFBD> <4D> @<40> <> <EFBFBD> H<07> D s<> <0B> Z[tH<74> Enx(<28> <> <EFBFBD> R<EFBFBD> x<> <78> <EFBFBD> @<40> <> GkjW<6A> ><3E> <> <EFBFBD> #T/8<> c8<63> Q0<51> <30> _<EFBFBD> IIGII<49> !<21> <> <EFBFBD> YEd<45> E<EFBFBD> ^<5E> td<74> th<0E> `D V!C<> 8<EFBFBD> <38> \r <EFBFBD> <EFBFBD> <EFBFBD> b<EFBFBD> 3<EFBFBD> !3<> @<40> 33N}<7D> ZB<5A> 3 <09> 3<EFBFBD> 30<33> <30> M (<28> ><3E> <> }<7D> \\ <EFBFBD> t<EFBFBD> <EFBFBD> f<EFBFBD> f<> <66> <EFBFBD> I\r <EFBFBD> <0C> <> 337 X<> \" td<EFBFBD> , \n btNO ` P<> ;<14> ܕ ҭ<05> <> <0E> \$ \n <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Zѭ5U5WU<EFBFBD> ^ho<1E> <> <EFBFBD> t<> PM/5 K4Ej<07> KQ& 53GX<47> Xx)<29> <5D<0E> <12> \r <EFBFBD> V<EFBFBD> \n <EFBFBD> r<EFBFBD> 5b܀\\ J \" ><3E> <> 1S \r [-<16> <> D u<> \r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )00<30> Y<EFBFBD> <59> ˢ<0C> k{ \n <EFBFBD> <EFBFBD> #<23> <> \r <EFBFBD> ^<5E> <> |<7C> uܻU<DCBB> _n<5F> U4<55> U<EFBFBD> ~Yt<59> \r I<EFBFBD> <EFBFBD> @䏳<> R <20> 3:<3A> ueP MS<4D> 0T<30> wW<77> X<> <58> <EFBFBD> D<EFBFBD> <44> <EFBFBD> KOU<4F> <55> <EFBFBD> <EFBFBD> ;U<> \n <EFBFBD> OY<EFBFBD> <EFBFBD> Y<EFBFBD> Q,M[\0 <EFBFBD> _<EFBFBD> D<EFBFBD> <EFBFBD> <EFBFBD> W<EFBFBD> <EFBFBD> J*<2A> \r g(]<5D> <> \r \" ZC<EFBFBD> <EFBFBD> 6u<EFBFBD> <EFBFBD> +<2B> Y<EFBFBD> <0E> Y6ô<36> 0<EFBFBD> q<EFBFBD> (<28> <> 8}<7D> <> 3AX3T<07> h 9j<39> j<> f<14> Mt<4D> PJ bqMP5><3E> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Y<15> k%& \\ <EFBFBD> 1 d<> <64> E4<10> <20> Yn<59> <6E> <0C> \$ <<3C> U]Ӊ1<D389> mbֶ<62> ^<5E> <> <EFBFBD> <EFBFBD> <EFBFBD> \" NV<EFBFBD> <EFBFBD> p<EFBFBD> <EFBFBD> p<EFBFBD> <EFBFBD> eM<EFBFBD> <EFBFBD> <EFBFBD> W<> ܢ<EFBFBD> \\ <EFBFBD> )\n <20> \n f7 \n <EFBFBD> 2<0B> <> r 8<> <38> =Ek7tV<74> <56> <EFBFBD> <EFBFBD> 7P<37> <50> L<> <4C> a6<0E> <14> v@ '<27> 6 i<> <69> j&><3E> <> ;<3B> <> `<60> <> a \0 pڨ(<28> J<EFBFBD> <4A> )<29> \\ <EFBFBD> <EFBFBD> n<EFBFBD> <EFBFBD> Ĭ m\0 <EFBFBD> <EFBFBD> 2<EFBFBD> <04> e q J<> <4A> P<EFBFBD> <50> t<EFBFBD> <74> <EFBFBD> f j<> <6A> \" [ \0 <EFBFBD> <EFBFBD> <15> <07> X,<\\ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <0C> <> <EFBFBD> +md<6D> <64> ~<07> <0C> <> <EFBFBD> <EFBFBD> s%o<> <6F> mn<6D> ),ׄ<> ԇ<12> \r 4<> <34> 8\r <EFBFBD> <EFBFBD> <0C> <1C> mE<6D> H]<5D> <> <EFBFBD> <EFBFBD> <EFBFBD> HW<48> M0 D<> ߀ <EFBFBD> <DF80>
lzw_decompress ( " v0<EFBFBD> <EFBFBD> F<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==<3D> <> FS <09> <> _6 MƳ<4D> <C6B3> <EFBFBD> r:<3A> E<EFBFBD> CI<43> <49> o:<3A> C<11> <> Xc<58> <63> \r <EFBFBD> J(:=<3D> E<EFBFBD> <13> <> a28<03> x<EFBFBD> <78> ?<0F> '<27> i<EFBFBD> SA NN<02> <> <EFBFBD> xs<78> N B<> <42> Vl0<6C> <30> <EFBFBD> S <09> <> U l<14> (D| ҄<> <D284> P<EFBFBD> <50> ><17> E<EFBFBD> 㩶yH c h<> <68> -3 Eb<45> <62> <20> b<EFBFBD> <62> pE<70> p<EFBFBD> 9.<2E> <> <EFBFBD> <EFBFBD> ~\n <EFBFBD> ? Kb<4B> iw |<7C> `<60> <> d.<2E> x8EN<45> <4E> !<21> <> 2<> <05> 3<EFBFBD> <33> <EFBFBD> \r <EFBFBD> <1C> <> Y<EFBFBD> <59> <EFBFBD> y6 GFmY<6D> 8o7\n \r <10> 0<EFBFBD> <30> \0 <EFBFBD> Dbc<EFBFBD> !<21> Q 7 Шd8<64> <38> <EFBFBD> ~<7E> <> N)<1D> Eг `<60> Ns<4E> <73> `<60> S)<29> O<EFBFBD> <4F> <0B> <> /<2F> <<0E> x<EFBFBD> 9<EFBFBD> o<EFBFBD> <6F> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 3 n<> <6E> 2<EFBFBD> !r<> :;<3B> +<2B> 9<EFBFBD> CȨ<43> <C8A8> <EFBFBD> \n <<3C> <> `<60> <> <EFBFBD> b<EFBFBD> \\ <EFBFBD> ?<3F> `<60> 4\r #`<60> <<3C> Be<0C> B#<1A> N <20> <> \r .D`<60> <> j<EFBFBD> 4<EFBFBD> <34> <EFBFBD> p<EFBFBD> ar<61> <72> 㢺<> ><3E> 8<EFBFBD> \$ <EFBFBD> c<EFBFBD> <EFBFBD> 1<EFBFBD> c<EFBFBD> <EFBFBD> <1D> c<EFBFBD> <63> <EFBFBD> <04> { n7<12> <> <07> <08> A<> N<15> RLi \r 1<EFBFBD> <EFBFBD> <EFBFBD> !<21> (<28> j´ <6A> +<2B> <> 62<36> X<> 8+<18> <05> <> <EFBFBD> . \r <EFBFBD> <18> <04> <> <EFBFBD> !x<> <78> <0E> h<EFBFBD> '<0C> <> <EFBFBD> 6S<36> \0 R<05> <> <EFBFBD> <EFBFBD> O<EFBFBD> \n <EFBFBD> <14> 1(W0<57> <30> <EFBFBD> <EFBFBD> 7 q<> <71> :N<> E:68n+<2B> <> մ 5_(<28> s<EFBFBD> \r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> /m<> 6P<36> @<40> EQ<45> <51> <EFBFBD> 9\n <EFBFBD> V-<2D> <> <EFBFBD> \" <EFBFBD> . :<3A> J<EFBFBD> <4A> 8we<77> q<EFBFBD> |؇<> X<EFBFBD> ]<5D> <> Y X<> e<EFBFBD> zW<7A> <57> <20> 7<EFBFBD> <37> Z1<5A> <31> hQf<51> <66> u<EFBFBD> j<EFBFBD> 4Z{ p \\ AU<EFBFBD> J<<3C> <> k<> <6B> @<40> ɍ<EFBFBD> <C98D> @<14> }&<13> <> <EFBFBD> L7 U<> wuYh<59> <68> 2<EFBFBD> <32> @<40> u<EFBFBD> P<> 7<EFBFBD> A<EFBFBD> h<EFBFBD> <68> <EFBFBD> <EFBFBD> <EFBFBD> 3 Û<> <1E> XEͅZ<CD85> ]<5D> l<05> @Mp l v<> )<01> <20> <07> HW<48> <05> <> y ><03> Y <59> -<2D> Y<EFBFBD> <59> /<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <0F> hC<68> [*<2A> <> F<EFBFBD> <46> #~<1F> !<21> `<60> \r #0P<10> C˝<43> f<03> <> <EFBFBD> <0B> <> <EFBFBD> \\ <EFBFBD> <EFBFBD> <0E> ^<5E> %B <<3C> \\ <EFBFBD> f<> ޱ<> <DEB1> <EFBFBD> <EFBFBD> <EFBFBD> &/<2F> O<EFBFBD> <4F> L\\ jF<EFBFBD> <EFBFBD> jZ<EFBFBD> 1<EFBFBD> \\ :ƴ><04> N<EFBFBD> <4E> XaF<61> A<EFBFBD> <1B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> f<EFBFBD> h { \" s \n <EFBFBD> 64<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <16> <> ?<05> 8<EFBFBD> ^p<15> \" 띰<EFBFBD> ȸ \\ <EFBFBD> e(<28> P<05> N<EFBFBD> <4E> q[g<> <67> r<EFBFBD> &<26> }Ph<50> <68> <EFBFBD> <EFBFBD> W<EFBFBD> <57> *<2A> <> r _s<5F> P<EFBFBD> h<EFBFBD> <68> <EFBFBD> <EFBFBD> \n <EFBFBD> <EFBFBD> <EFBFBD> om<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> #<23> <0F> <> .<2E> \0 @<40> pdW <20> \$ Һ<EFBFBD> Q۽T l0<6C> <20> <1D> HdH<64> )<29> <> ۏ<> <0C> )P<03> <> <EFBFBD> H<EFBFBD> g<04> <> U<> <55> <EFBFBD> <EFBFBD> B<> e \r <EFBFBD> t:<3A> <> \0 ) \" <EFBFBD> t<EFBFBD> ,<2C> <> <18> <> <EFBFBD> [<5B> ( D<> O\n R8!<21> Ƭ֚<C6AC> <D69A> lA<6C> V<EFBFBD> <10> 4<03> h<EFBFBD> <1E> S q<<15> <> @}<7D> <> <EFBFBD> gK<67> ]<5D> <> <EFBFBD> ]<5D> =90<39> <30> '<27> <> <1D> <> w A <<3C> <> <EFBFBD> <1D> a<EFBFBD> ~<7E> <> W<> <57> <EFBFBD> D| A<> <41> <EFBFBD> 2<0E> X<EFBFBD> U2<55> <32> y Ŋ<> <C58A> =<05> p)<29> \0 P <0C> s<0F> <> n<EFBFBD> 3<06> <> r<EFBFBD> f \0 <EFBFBD> F<EFBFBD> <EFBFBD> <EFBFBD> v<EFBFBD> <EFBFBD> G<0C> <01> I@<40> %<25> <> <EFBFBD> +<2B> <> _I`<60> <0C> <> <EFBFBD> \r .<2E> <> N<EFBFBD> <0F> <> KI<4B> [<15> ʖSJ<53> <05> <> a Uf<55> Sz<53> <7A> <EFBFBD> M<1F> <> <EFBFBD> %<25> <> \" Q|9<04> <> Bc<42> a<EFBFBD> q \0 <EFBFBD> 8<EFBFBD> #<23> <a<> <61> :z1Uf<15> <> ><3E> Z<10> l<EFBFBD> <6C> <01> <> <EFBFBD> <EFBFBD> e5#U@iUG <47> <C282> n<EFBFBD> %Ұ s<> <73> <10> ;gxL<07> p P<> ?B<> <42> <EFBFBD> Q<EFBFBD> \\ <15> b<1F> <> 龒Q<E9BE92> =7<> :<3A> <0F> ݡQ<DDA1> \r :<3A> t<EFBFBD> <74> :y(<28> <20> \n <EFBFBD> d)<29> <07> <> \n <EFBFBD> X;<3B> <> <EFBFBD> <EFBFBD> <11> CaA<61> \r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> P<EFBFBD> GH<EFBFBD> !<21> <> <EFBFBD> @<40> 9\n \n Al~H<> <48> <EFBFBD> V \n s<> <73> ի<EFBFBD> Ư<EFBFBD> bBr<42> <72> <EFBFBD> <05> <> <06> <> <1A> <> 3<EFBFBD> \r <EFBFBD> P<EFBFBD> %<0B> ф\r }b/<2F> Α \$ <EFBFBD> 5<> P<EFBFBD> C<EFBFBD> \" w<13> B_<42> <5F> <EFBFBD> U<> gAt<41> <74> <EFBFBD> <EFBFBD> 夅<EFBFBD> ^Q<> <51> U<EFBFBD> <01> <> j<EFBFBD> <6A> <EFBFBD> <EFBFBD> Bvh졄4<ECA184> )<29> <> +<2B> )<<3C> j ^<5E> <L<> <4C> 4U*<2A> <> <EFBFBD> Bg<42> <67> <EFBFBD> <EFBFBD> <1C> *n<> ʖ<> -<2D> <> <EFBFBD> <EFBFBD> 9 O \$ <EFBFBD> <EFBFBD> طzyM<EFBFBD> 3<0E> \\ 9<EFBFBD> <EFBFBD> <1E> . o<> <6F> <EFBFBD> <EFBFBD> <10> <> E(i<> <07> <> <0B> <> <EFBFBD> 7 tߚ<74> <DF9A> -&<26> \n j!\r <EFBFBD> <EFBFBD> y<> y<EFBFBD> D1g<31> <67> <EFBFBD> ]<5D> <> yR<79> 7\" <EFBFBD> <EFBFBD> <1D> <13> <> <EFBFBD> ~<10> <> <EFBFBD> <EFBFBD> )TZ0E9M<39> YZ t Xe !<21> f<EFBFBD> @<40> { Ȭyl 8<> ;<3B> <> <EFBFBD> R { <EFBFBD> <EFBFBD> 8<EFBFBD> Į<> e<EFBFBD> +U L<> '<27> F<> 1<EFBFBD> <04> <> 8PE5- <09> _ !<21> 7<EFBFBD> <37> <EFBFBD> [2<> J<EFBFBD> <01> ;<3B> HR<48> <52> ǹ<> 8 p痲݇@<40> <> 0,ծpsK0\r <01> 4<EFBFBD> <34> \$ sJ<73> <0E> <> 4<EFBFBD> DZ<44> <5A> I<0E> <> '\$ cL<EFBFBD> R<EFBFBD> <EFBFBD> MpY&<1E> <> <EFBFBD> <EFBFBD> i<EFBFBD> z3G<06> zҚJ%<25> <> P<> -<2D> <01> [<5B> /x<> <78> T<EFBFBD> { p<EFBFBD> <EFBFBD> z<> C<05> v<02> <05> <> :<3A> V'<27> \\ <EFBFBD> <EFBFBD> KJa<EFBFBD> <EFBFBD> M<EFBFBD> &<26> <> <EFBFBD> Ӿ\" <EFBFBD> <EFBFBD> e<13> o^Q +h^<5E> <02> iT<69> <54> 1<EFBFBD> OR<4F> l<EFBFBD> , 5[ݘ\$ <EFBFBD> <EFBFBD> )<29> <> jLƁU`<60> S<EFBFBD> `Z ^<5E> |<0F> <> r<EFBFBD> =<3D> <0F> n登<6E> <E799BB> TU 1Hyk<79> <6B> t+\0 v<1C> D<EFBFBD> \r <<3C> <> ƙ<EFBFBD> <C699> j G<> <1E> <> t<EFBFBD> *3%k<> Y ܲT *<2A> |\" C<1E> <> l hE<68> (<28> \r <EFBFBD> 8r<EFBFBD> <EFBFBD> { <EFBFBD> <18> 0<EFBFBD> <30> <EFBFBD> <EFBFBD> <EFBFBD> D<EFBFBD> _<EFBFBD> <5F> .6и<EFBFBD> ;<3B> <> <EFBFBD> <EFBFBD> rBj<1B> O'ۜ<> <DB9C> <EFBFBD> >\$ <EFBFBD> <EFBFBD> `^6<> <36> 9<EFBFBD> #<19> <> <EFBFBD> <14> 4 X<03> <> mh8:<3A> <> c<EFBFBD> <06> 0<1D> <> ;<3B> /ԉ<> <D489> <EFBFBD> <EFBFBD> ;<3B> \\ '(<28> <> <EFBFBD> t<EFBFBD> '+<0B> <1C> <> <EFBFBD> <EFBFBD> ̷<EFBFBD> ^<0B> ]<5D> <> N<EFBFBD> v<EFBFBD> <76> #<23> ,<08> v<EFBFBD> <76> <EFBFBD> O<EFBFBD> i<> ϖ<EFBFBD> ><3E> <> <S<0E> A \\ <02> \\ <EFBFBD> <EFBFBD> <EFBFBD> !<21> 3*tl`<60> u<EFBFBD> \0 p '<27> 7<EFBFBD> P<EFBFBD> 9<7F> bs<62> { <EFBFBD> v<EFBFBD> { <EFBFBD> <EFBFBD> 7<EFBFBD> \" { <EFBFBD> <EFBFBD> r<EFBFBD> a<EFBFBD> (<28> ^<5E> <> <EFBFBD> E<EFBFBD> <45> <EFBFBD> <EFBFBD> <EFBFBD> g<> <67> /<2F> <> <EFBFBD> U<EFBFBD> 9g<39> <67> <EFBFBD> /<2F> <> `<60> \n L\n <EFBFBD> )<07> <> <14> (A<> a<EFBFBD> \" <20> <03> <> <09> &<26> P<EFBFBD> <14> @O\n 師 0<> (M &<17> FJ '<27> ! <20> 0<EFBFBD> <<3C> H<EFBFBD> <48> <EFBFBD> <EFBFBD> <0E> <> <EFBFBD> *<2A> |<7C> <> *<2A> OZ<4F> m*n/b<> /<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <0C> <> .<2E> <> <EFBFBD> o \0 <EFBFBD> <EFBFBD> dn<EFBFBD> )<29> <1E> <> <EFBFBD> i<EFBFBD> :R<> <52> <EFBFBD> P2<50> m<EFBFBD> \0 /v<> OX<4F> <58> <1C> Fʳψ<CAB3> <0F> <> <EFBFBD> \" <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0<04> 0<08> <> <EFBFBD> <EFBFBD> <16> 0b<30> <62> g j<> <6A> \$ <EFBFBD> n<EFBFBD> 0}<05> <05> @<40> = M Ƃ 0n<30> P<EFBFBD> /p<> ot<6F> <10> <> <EFBFBD> <EFBFBD> <EFBFBD> .<12> ̽<0B> g\0 <EFBFBD> ) o<> \n 0<EFBFBD> <EFBFBD> <EFBFBD> \r F<> <46> <0B> <07> b<EFBFBD> i<EFBFBD> <69> o}\n <EFBFBD> ̯<> NQ<0B> '<0B> x<EFBFBD> Fa<46> J<04> <> <EFBFBD> <EFBFBD> L<EFBFBD> <10> <0F> <> <04> <> \r <EFBFBD> <EFBFBD> \r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0<> <07> '<0C> <> <EFBFBD> d oe p<> <13> 4D<34> <44> ʐ<> q(~<7E> <> <20> \r <EFBFBD> E<10> <> pr<70> QVFH<46> l<EFBFBD> <6C> Kj<4B> <6A> <EFBFBD> N&<26> j!<21> H`<11> _bh\r 1<EFBFBD> <0C> <> n !<21> Ɏ<> z<> <7A> <EFBFBD> <13> <> <0C> \\ <0F> <> \r <EFBFBD> <07> <> <EFBFBD> `V_k<5F> <6B> \" \\ ׂ' V<05> <> \0 ʾ `A C<> <43> <EFBFBD> <EFBFBD> <18> <> V<EFBFBD> `\r %<25> <> <EFBFBD> <02> <> <EFBFBD> \r <EFBFBD> <EFBFBD> <0E> <> k@N<> <4E> <EFBFBD> <EFBFBD> B<> 횙<11> <20> !<21> \n <EFBFBD> \0 Z<EFBFBD> 6<> \$ d<EFBFBD> <EFBFBD> ,%<03> %la<19> H<EFBFBD> \n <EFBFBD> #<23> S\$ !\$ @<40> <> 2<> <32> <EFBFBD> I \$ r<EFBFBD> { !<21> <> J<EFBFBD> 2H<32> Z M \\ <EFBFBD> <EFBFBD> hb,<2C> '||cj~g<> r<EFBFBD> `<60> ļ<EFBFBD> \$ <EFBFBD> <EFBFBD> <EFBFBD> +<2B> A1<41> <31> E <1F> <> <1F> <> <<3C> L<EFBFBD> <11> \$ <EFBFBD> Y%-FD<46> <44> d<EFBFBD> L 焳<> <E784B3> \n @<40> bVf<56> <66> ;2_(<28> <> L<EFBFBD> п<EFBFBD> <05> <%@ڜ , \" <EFBFBD> d<EFBFBD> <EFBFBD> N<EFBFBD> er<EFBFBD> \0 <EFBFBD> <EFBFBD> `<60> <0E> Z<0C> <> 4<EFBFBD> 'ld9-<2D> #`<60> <> Ŗ<EFBFBD> <C596> <EFBFBD> <EFBFBD> <EFBFBD> j6<6A> ƣ<EFBFBD> v<07> <> <04> N<EFBFBD> ͐f<CD90> <66> @܆<> &<26> B\$ <0B> <> (<28> Z&<26> <> <EFBFBD> 27 8I <20> <> <EFBFBD> P\r k \\ <EFBFBD> <EFBFBD> <EFBFBD> 2`<60> \r dL b@ E<14> <> 2`P( B'<27> <0B> <> <0F> <> 0<EFBFBD> &<05> <> { <EFBFBD> <EFBFBD> <EFBFBD> :<3A> <> dB<64> 1<EFBFBD> ^؉*\r \0 c< K<> |<06> 5sZ<73> `<60> <> <EFBFBD> O3<4F> 5=@<40> 5<EFBFBD> C>@<40> W* = \0 N<g<> 6s67Sm7 u? { <&L<04> . 3~D<> <44> \r Ś<0C> x<EFBFBD> <13> ) ,r<> i n<> /<2F> <> O \0 o { 0k<EFBFBD> ]3> m<> <05> 1 \0 <EFBFBD> I@<40> 9 T34+ԙ@e<0F> GF MC<4D> \r E3<EFBFBD> Etm!<13> #1<> D @<40> H(<28> <> n <20> <> <g,V`R]@<40> <> <EFBFBD> <EFBFBD> 3Cr7s~<7E> G I<> i@ \0 v<EFBFBD> <EFBFBD> 5 \r V<EFBFBD> '<1A> <> <EFBFBD> <0C> <> <08> P<05> <> \r <EFBFBD> \$ <b<> %(<28> Dd<44> <64> PW<50> <57> <EFBFBD> <EFBFBD> b<EFBFBD> fO <20> x \0 <EFBFBD> } <20> <0B> <> lb<6C> &<26> v j 4<> LS<1A> <> ִԶ5&d sF M<> 4<EFBFBD> <18> \" .H<> M0<4D> 1u L<> \" <EFBFBD> <EFBFBD> /J`<60> { <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> xǐYu*\" U.I53Q<33> 3Q<33> <51> J<EFBFBD> <4A> g<EFBFBD> <67> 5<EFBFBD> s<> <73> <EFBFBD> &jь<6A> <D18C> u<EFBFBD> ٭ ЪG Q MTmGB<47> t l- c<> *<2A> <> \r <02> <> Z7<5A> <37> <1B> *hs/RUV<55> <56> <EFBFBD> <EFBFBD> B<EFBFBD> Nˈ <4E> <CB88> <06> <> <EFBFBD> Ԋ<> i<EFBFBD> Lk<4C> .<2E> <> <EFBFBD> t<EFBFBD> <74> 龩<EFBFBD> rYi<59> <69> <EFBFBD> -S<> <53> 3<EFBFBD> \\ <EFBFBD> T<EFBFBD> OM^<5E> G><3E> ZQj<51> <07> <> \" <EFBFBD> <EFBFBD> <EFBFBD> i<EFBFBD> <EFBFBD> MsS<EFBFBD> S\$ Ib f<> <13> <> u<EFBFBD> <75> <08> <> <EFBFBD> :<04> SB|i<> <69> Y¦<0F> <> 8 v<07> #<02> <> D<EFBFBD> 4`<60> <> .<2E> <> ^<5E> H<EFBFBD> M<EFBFBD> _ռ <5F> u<EFBFBD> <75> U<EFBFBD> z`Z<> J e<> <65> <EFBFBD> @Ce<43> <65> a<EFBFBD> \" m<> b<12> 6ԯJR<4A> <EFBFBD> <0C> T<EFBFBD> ?ԣXMZ<4D> <5A> І <EFBFBD> <D086> p<EFBFBD> <70> <0F> <> Qv<51> j<13> jV<6A> { <EFBFBD> <EFBFBD> <EFBFBD> C<EFBFBD> \r <EFBFBD> <EFBFBD> 7<16> Tʞ<54> <20> <> 5{ P<EFBFBD> <EFBFBD> ]<12> \r <EFBFBD> ?Q<> AA<41> <41> <07> <> <EFBFBD> <EFBFBD> 2V)J i<> <69> -N 9 9f<39> l J m<> <6D> ;u<> @<40> <F<> Ѡ<EFBFBD> e<EFBFBD> j<0C> <> Ħ<> I<EFBFBD> <+CW@<40> <> <18> <> <EFBFBD> Z<EFBFBD> l<EFBFBD> 1<EFBFBD> <2<> iF<69> 7` KG<4B> ~L&+N<08> <> YtWH飑w <0E> <1A> <> <19> l<EFBFBD> <6C> s'g<04> <> q+L<> zbiz<69> <7A> <EFBFBD> Ţ<EFBFBD> .Њ<> zW<7A> <57> <20> zd<06> W<EFBFBD> <57> <EFBFBD> <EFBFBD> (<17> y)v<> E4,\0 <EFBFBD> \" d<> <64> \$ B<EFBFBD> { <EFBFBD> <EFBFBD> !) 1U<31> 5b p#<23> }m =<3D> <> @<40> w<12> P\0 <EFBFBD> \r <EFBFBD> <0C> <> <EFBFBD> <EFBFBD> `O|<7C> <> <0E> <09> ɍ<EFBFBD> <C98D> <EFBFBD> <EFBFBD> Y<EFBFBD> <59> JՂ<15> E<EFBFBD> <45> Ou<4F> _<EFBFBD> \n `F`<60> }
2018-04-01 23:34:54 +02:00
get_lang (){ global $ca ; return $ca ;} function
2020-04-26 00:47:07 +02:00
lang ( $u , $mf = null ){ if ( is_string ( $u )){ $jg = array_search ( $u , get_translations ( " en " )); if ( $jg !== false ) $u = $jg ;} global $ca , $zi ; $yi = ( $zi [ $u ] ? $zi [ $u ] : $u ); if ( is_array ( $yi )){ $jg = ( $mf == 1 ? 0 : ( $ca == 'cs' || $ca == 'sk' ? ( $mf && $mf < 5 ? 1 : 2 ) : ( $ca == 'fr' ? ( ! $mf ? 0 : 1 ) : ( $ca == 'pl' ? ( $mf % 10 > 1 && $mf % 10 < 5 && $mf / 10 % 10 != 1 ? 1 : 2 ) : ( $ca == 'sl' ? ( $mf % 100 == 1 ? 0 : ( $mf % 100 == 2 ? 1 : ( $mf % 100 == 3 || $mf % 100 == 4 ? 2 : 3 ))) : ( $ca == 'lt' ? ( $mf % 10 == 1 && $mf % 100 != 11 ? 0 : ( $mf % 10 > 1 && $mf / 10 % 10 != 1 ? 1 : 2 )) : ( $ca == 'bs' || $ca == 'ru' || $ca == 'sr' || $ca == 'uk' ? ( $mf % 10 == 1 && $mf % 100 != 11 ? 0 : ( $mf % 10 > 1 && $mf % 10 < 5 && $mf / 10 % 10 != 1 ? 1 : 2 )) : 1 ))))))); $yi = $yi [ $jg ];} $Fa = func_get_args (); array_shift ( $Fa ); $jd = str_replace ( " %d " , " %s " , $yi ); if ( $jd != $yi ) $Fa [ 0 ] = format_number ( $mf ); return
vsprintf ( $jd , $Fa );} function
switch_lang (){ global $ca , $re ; echo " <form action='' method='post'> \n <div id='lang'> " , lang ( 19 ) . " : " . html_select ( " lang " , $re , $ca , " this.form.submit(); " ), " <input type='submit' value=' " . lang ( 20 ) . " ' class='hidden'> \n " , " <input type='hidden' name='token' value=' " . get_token () . " '> \n " ; echo " </div> \n </form> \n " ;} if ( isset ( $_POST [ " lang " ]) && verify_token ()){ cookie ( " adminer_lang " , $_POST [ " lang " ]); $_SESSION [ " lang " ] = $_POST [ " lang " ]; $_SESSION [ " translations " ] = array (); redirect ( remove_from_uri ());} $ca = " en " ; if ( isset ( $re [ $_COOKIE [ " adminer_lang " ]])){ cookie ( " adminer_lang " , $_COOKIE [ " adminer_lang " ]); $ca = $_COOKIE [ " adminer_lang " ];} elseif ( isset ( $re [ $_SESSION [ " lang " ]])) $ca = $_SESSION [ " lang " ]; else { $va = array (); preg_match_all ( '~([-a-z]+)(;q=([0-9.]+))?~' , str_replace ( " _ " , " - " , strtolower ( $_SERVER [ " HTTP_ACCEPT_LANGUAGE " ])), $Ie , PREG_SET_ORDER ); foreach ( $Ie
as $A ) $va [ $A [ 1 ]] = ( isset ( $A [ 3 ]) ? $A [ 3 ] : 1 ); arsort ( $va ); foreach ( $va
2020-10-12 20:47:58 +02:00
as $y => $zg ){ if ( isset ( $re [ $y ])){ $ca = $y ; break ;} $y = preg_replace ( '~-.*~' , '' , $y ); if ( ! isset ( $va [ $y ]) && isset ( $re [ $y ])){ $ca = $y ; break ;}}} $zi = $_SESSION [ " translations " ]; if ( $_SESSION [ " translations_version " ] != 424438045 ){ $zi = array (); $_SESSION [ " translations_version " ] = 424438045 ;} function
get_translations ( $qe ){ switch ( $qe ){ case " en " : $g = " A9 D<07> y<EFBFBD> @s:<3A> G<EFBFBD> <47> (<28> ff<66> <66> <EFBFBD> <EFBFBD> <EFBFBD> <09> <> :<1B> S<> <53> <EFBFBD> a2 \" 1<> .. L'<27> I<EFBFBD> <49> m<EFBFBD> #<23> s,<2C> K<17> <> OP#I<> @%9<> <39> i4<08> o2ύ<32> <CF8D> <EFBFBD> <EFBFBD> <EFBFBD> ,9<> %<02> P<EFBFBD> b2<19> <06> a<EFBFBD> <61> r\n 2<EFBFBD> N C<> (<28> r4<72> <34> 1C`(<28> :Eb<45> 9A<14> i:<02> &㙔<> y<EFBFBD> <79> F<> <46> <EFBFBD> Y<> <59> \r <13> \n <EFBFBD> 8Z<0E> S=\$ A<19> <> <0C> <13> `<60> =<3D> ܌<EFBFBD> <DC8C> <EFBFBD> 0<EFBFBD> \n <EFBFBD> <EFBFBD> dF<EFBFBD> <09> <> n:Zΰ)<29> <> Q<EFBFBD> <51> <EFBFBD> mw<6D> <77> <EFBFBD> <EFBFBD> O<EFBFBD> <4F> mfpQ<10> <> <CE82> q<> <71> a<EFBFBD> į<EFBFBD> #q<> <71> w7S<37> X3<58> <33> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> o<EFBFBD> \n >Z<> M<EFBFBD> zi<7A> <69> s;<3B> ̒<EFBFBD> <CC92> _<EFBFBD> :<3A> <> <EFBFBD> #|@<40> 46<34> <36> :<3A> \r -z|<7C> (j*<2A> <> <0E> 0<EFBFBD> :- h<> <68> /̸<> 8)+r^1/Л<> η,<2C> ZӈKX<4B> 9,<2C> p<EFBFBD> :>#<23> <> <08> (<28> 6<EFBFBD> qC<71> <43> <EFBFBD> I<EFBFBD> |<7C> <> Ȣ ,<2C> ( y <20> , % b { <06> ʢ<> <CAA2> <0B> 9B<39> <42> ) B<> <42> <16> <> +<2B> 1><3E> P\r <EFBFBD> <EFBFBD> <EFBFBD> 6<EFBFBD> <EFBFBD> 2<EFBFBD> <EFBFBD> L<EFBFBD> P<EFBFBD> 2\r <EFBFBD> \\ *<2A> <> Jb<0E> =m<> <6D> 1<EFBFBD> jH<6A> <48> <EFBFBD> O \$ <EFBFBD> <EFBFBD> <EFBFBD> <03> <> 4 <20> jF<6A> o<> <6F> <01> F4 #0z\r <03> <> 8 a<> ^<17> <> \\ <EFBFBD> N-<2D> <> <EFBFBD> <EFBFBD> <EFBFBD> |<7C> єp<D194> 2<05> <12> \r <EFBFBD> :x7<0C> <<3C> ص<EFBFBD> <D8B5> ^0<> <30> #<23> 2<EFBFBD> jk6<6B> <36> @<40> <> <EFBFBD> <03> <> <EFBFBD> <EFBFBD> <EFBFBD> <08> ΎA &2<> <32> u<EFBFBD> \n <EFBFBD> 1<EFBFBD> <EFBFBD> l Ġ+<2B> <> s<EFBFBD> <09> <> <08> <<3C> <> M<EFBFBD> ]l<> &!<21> <> b_2<5F> <32> <EFBFBD> Oz\r <EFBFBD> <EFBFBD> a7<0E> <> <EFBFBD> 1<EFBFBD> 7<EFBFBD> <37> <EFBFBD> <0C> <08> i<EFBFBD> <69> \r <EFBFBD> ӊv<1D> è<> b<EFBFBD> <62> <EFBFBD> <EFBFBD> 3<EFBFBD> <33> <08> <> c2<63> N1<4E> \0 S<EFBFBD> <<3C> <> <02> =<3D> PȤϭc<CFAD> <63> %<25> <> <EFBFBD> <EFBFBD> <08> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> _<EFBFBD> accC<1F> <> <1B> <> \n \" `@<40> _<EFBFBD> d<EFBFBD> 7<EFBFBD> (<28> <> [V<> n<> 6<EFBFBD> <36> 9<EFBFBD> <39> <08> h 8<> k<EFBFBD> <04> /k ˯K,<2C> )<0C> + Z \" <EFBFBD> <13> <1E> <> <EFBFBD> <EFBFBD> <1B> \" MF<4D> <46> <EFBFBD> <EFBFBD> <EFBFBD> 'iʌB\r <13> <> 0<EFBFBD> 6NRL<52> D<EFBFBD> B<EFBFBD> ލM pt<F28DAF96> F<EFBFBD> <46> ^s1<73> t<EFBFBD> !ͺ \n <EFBFBD> p<EFBFBD> 7}K<> <4B> `O-<2D> d<EFBFBD> <64> >O<> <0E> 6t<36> <74> P<EFBFBD> c<EFBFBD> _W<5F> 6W<36> P<EFBFBD> <50> <EFBFBD> pҐ<70> b<EFBFBD> <62> #2<> x<EFBFBD> #<05> \" <EFBFBD> 2<EFBFBD> I]x P<> <50> <0C> L<EFBFBD> <4C> t ZP*1n<31> }\\ گ<EFBFBD> 7ԫ<37> <20> @<40> }<7D> I1T<31> /L<> t<EFBFBD> ><3E> C<EFBFBD> <43> N <09> S<EFBFBD> %R<> <52> 9 W<> <57> X<EFBFBD> <58> <12> j<> X F<> <46> I<0C> @<40> <> <EFBFBD> <EFBFBD> <EFBFBD> ˩-d<> <64> \$ <EFBFBD> <EFBFBD> <EFBFBD> R<EFBFBD> <17> \$ <EFBFBD> 꿅( T<> <54> SJqO* D<> .U\n <EFBFBD> \$ T<EFBFBD> <15> s<07> <> <0E> h \$ <0F> <> F<> <46> 7<EFBFBD> 0<> <1E> <> =<3D> <> 4<EFBFBD> (<28> <> zw=G<> %<1F> <> <EFBFBD> <11> <> >nU<6E> '<27> <16> I3B<33> `9><3E> hHC fknyܺ(A<0F> <> l<EFBFBD> <6C> 4<> 4<EFBFBD> <34> K 0<> E<> <45> [<5B> <> B?<3F> h<EFBFBD> <68> bj<02> H\n -<01> b|\n \n \0 ) \$ D<04> <<3C> Lh<4C> B<EFBFBD> \r <EFBFBD> <EFBFBD> <EFBFBD> עd q 2<> <32> <EFBFBD> <13> @yɉ3<C989> <33> <EFBFBD> 7<<3C> kc<6B> <63> <EFBFBD> !<21> <> ><3E> <> O <09> # g<> ><3E> <> <EFBFBD> <EFBFBD> <03> 2 l<> (S><3E> \" QiS+<2B> <> &<26> ~M )%d<> <64> <EFBFBD> <EFBFBD> 6<EFBFBD> O<EFBFBD> <4F> 0<EFBFBD> <<3C> <> p<EFBFBD> O<EFBFBD> z}&<26> <> H c<> Z<EFBFBD> \$ H\$ <EFBFBD> A<> <41> !<21> <05> <> <1F> @@C<> <43> *\$ <EFBFBD> <EFBFBD> <EFBFBD> <07> #<23> <> dx<64> <78> <EFBFBD> |{ <EFBFBD> <EFBFBD> <EFBFBD> r<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> \0 <EFBFBD> £W /T) U<> 5h<35> BZ<42> <5A> <EFBFBD> P״<50> _<EFBFBD> %9<> ɐE<C990> <45> @X<> <58> % )<29> <> <EFBFBD> 2G<32> <02> TT)<29> <> H<EFBFBD> <48> <EFBFBD> #<08> RI<52> <49> <EFBFBD> ܍<EFBFBD> x<EFBFBD> <78> ̃<EFBFBD> \" <EFBFBD> Pձi;/M'\0 <EFBFBD> \\ L<EFBFBD> je <09> 8 P<> T<08> *<2A> <> \0 <EFBFBD> B`E<> M<EFBFBD> z<EFBFBD> s}\r :Z<> <5A> - \n <EFBFBD> sN 0gg<67> <<3C> <> <EFBFBD> &<26> <> <EFBFBD> <EFBFBD> %!<21> <> <11> j<> 9<EFBFBD> TuZ<75> <5A> i-<2D> ] L<05> <> 7<EFBFBD> ,b<> R Hǐ<48> <C790> <EFBFBD> f<EFBFBD> \\ 2Ʋ́<EFBFBD> \" <05> xN<78> P0n|<7C> 9<02> <02> <> '<27> (<28> <09> <> 8~Ha>Jr D<> <44> `èg\r BIID<49> !<21> <> bc<62> <<3C> [ҁb<D281> <62> l<> zU<7A> <16> M<15> 'K<> ̓<> h !<21> K<EFBFBD> <12> <> <EFBFBD> <EFBFBD> H[Zh<5A> <68> <EFBFBD> <EFBFBD> <<3C> vHV<48> <56> \n <EFBFBD> <EFBFBD> l]<5D> <> ^<5E> xxC-i\n <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> B<EFBFBD> I<> <49> @dV<64> K<EFBFBD> n<0C> ڨ<EFBFBD> z<EFBFBD> K(T- ,9W<39> <16> <> I<EFBFBD> J<EFBFBD> B*<1B> `<60> KZ/ <09> <06> 1Etg,Z<> NHL\" <EFBFBD> <EFBFBD> `<60> <> <05> o(<28> l%J<> C \0 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0d<EFBFBD> <EFBFBD> O<07> Y<EFBFBD> S<EFBFBD> <53> ^=F˼<17> HL w]<5D> @<40> !0<> l<EFBFBD> <6C> OX<4F> <58> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ~Q\$ N:<3A> <> <EFBFBD> <13> <> <EFBFBD> <EFBFBD> <EFBFBD> A<EFBFBD> .<0C> <> 2<EFBFBD> <32> <EFBFBD> a<EFBFBD> 2<EFBFBD> 3<02> <1C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <12> ߒ<EFBFBD> U<EFBFBD> ͗<EFBFBD> 7<04> ]<5D> <> <EFBFBD> X<EFBFBD> <58> /-<2D> L<EFBFBD> ]t<13> f<EFBFBD> Ħ<EFBFBD> &Q <09> <1C> wL<1F> :G<> ӌ<<3C> <> <1F> 0<EFBFBD> AjhrJ`(+<2B> P<EFBFBD> o<12> ?' <)1md<6D> <08> pHGd<47> Œa5<61> l<EFBFBD> Y \n <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 9e g<> * j<> ËhI3<49> <33> œ<EFBFBD> 4vYyȖ{ H<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 5,<2C> X<> oi<6F> <1D> <> ɻ/<> <D789> <EFBFBD> ϵ<EFBFBD> <CFB5> PC<11> *n<> <6E> <EFBFBD> rԖ { բn<EFBFBD> <EFBFBD> f<EFBFBD> <EFBFBD> cވ<EFBFBD> <EFBFBD> <03> <> <EFBFBD> ,0aL2[P#<23> gQ<67> <0B> F<EFBFBD> 3<EFBFBD> <33> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ~<7E> <> <EFBFBD> <EFBFBD> An lXz<13> h<> Y<EFBFBD> <05> <16> x氧<78> <05> <> +b<> \r <EFBFBD> d 3<> <33> In<49> \r <EFBFBD> <EFBFBD> -<2D> f<EFBFBD> %<25> <> vU<76> <55> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <01> э<0F> ݽ<EFBFBD> <DDBD> D~<7E> rϦ<72> ><3E> <> ,<2C> <> <EFBFBD> <EFBFBD> <EFBFBD> )<29> 5'<27> <> B<> <42> { <EFBFBD> <EFBFBD> <EFBFBD> 'd<> <64> <EFBFBD> <EFBFBD> <EFBFBD> 0<EFBFBD> <30> 1K N]<5D> x4bdMs<4D> <73> <EFBFBD> <11> :,\\ <EFBFBD> <14> T<EFBFBD> <54> t<74> <D7BB> <EFBFBD> f d<> ڛ<06> <> 7<EFBFBD> <37> <0E> <> a Ƃ\n <EFBFBD> <EFBFBD> :<3A> Z<EFBFBD> X<EFBFBD> <58> <EFBFBD> /-<2D> <<3C> \0 <EFBFBD> <EFBFBD> LZ<4C> \\ p1M<EFBFBD> <EFBFBD> ܟ<12> ɦ;S<> <53> <EFBFBD> !<21> Lʈ<17> <> <EFBFBD> \n <EFBFBD> _<EFBFBD> [ O<> D<> W<EFBFBD> V<EFBFBD> g0^ <> <C295> ^G<> Ot<4F> <74> ]P<> <50> ;<3B> <> <1F> <> <EFBFBD> <EFBFBD> <EFBFBD> }'F<> 4<EFBFBD> <34> <EFBFBD> o<EFBFBD> <6F> <EFBFBD> ~jY<6A> <15> <> ; c<> ކ<EFBFBD> z8<7A> <38> <1B> <> X<> 5~<7E> <> g<EFBFBD> <1F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> \\ )<29> <06> -<2D> <> <05> <0C> <> <EFBFBD> F<EFBFBD> \0 <EFBFBD> <EFBFBD> 5 P/ <20> 5<EFBFBD> <35> Jb<4A> <09> <14> <> <EFBFBD> <EFBFBD> <EFBFBD> \" )*<2A> <> #b<> N<EFBFBD> <4E> <0F> % \0 <EFBFBD> P<<3C> <0E> <> H<EFBFBD> p:<3A> <> <EFBFBD> \0 If<EFBFBD> <EFBFBD> <EFBFBD> t&.<2E> <> `<60> \0 <EFBFBD> O<EFBFBD> <EFBFBD> Z D dg<64> <67> <EFBFBD> @20n<30> <6E> V<EFBFBD> <56> <EFBFBD> !#<23> ,<2C> `b,z<> <7A> <EFBFBD> <EFBFBD> /<2F> XP<58> <50> <EFBFBD> <02> Ф6p<36> <70> <EFBFBD> P% j/<2F> <> _oF<6F> <46> <EFBFBD> r<EFBFBD> <72> <09> C<0C> 0<EFBFBD> <30> \\ <EFBFBD> pk P<> <50> oj4<6A> \$ <EFBFBD> \$ *<2A> \$ ތ&<26> O<EFBFBD> <4F> <EFBFBD> <EFBFBD> <0E> <> \n <EFBFBD> <EFBFBD> \r <EFBFBD> R<EFBFBD> ) b1 ,\n <EFBFBD> G 0\n <EFBFBD> y<0C> <> %<0E> >&0<> J<EFBFBD> <4A> \n ͌<D \0 K<EFBFBD> T<EFBFBD> \0 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> zCN]<5D> <> <EFBFBD> <EFBFBD> <EFBFBD> \r h<EFBFBD> <EFBFBD> <EFBFBD> P<EFBFBD> d<EFBFBD> <EFBFBD> <EFBFBD> p<EFBFBD> X<> <58> B#<23> ~<7E> <> <EFBFBD> # \" <EFBFBD> -<2D> <> <EFBFBD> 1t\\ M<EFBFBD> <12> <> έ ]<5D> <> <EFBFBD> <EFBFBD> f<EFBFBD> / \0 `<60> B \0 <EFBFBD> j\r <20> \r mvP. # 0<> <30> <EFBFBD> <0C> 6/ '<0F> <> V \n <EFBFBD> <EFBFBD> <08> Z z5<7A> <35> 9<EFBFBD> <39> <EFBFBD> /<2F> %<25> >m<10> ͼ<EFBFBD> .<2E> L<> <4C> b&G#0p<30> <EFBFBD> <C298> o<EFBFBD> <6F> <1B> <> <EFBFBD> \0 ث \$ &6<> <36> b<> .<2E> <> <EFBFBD> )NV<4E> <56> Dz4<11> rJrV<72> 8<EFBFBD> <38> <EFBFBD> \$ fKC<4B> !+^\n <EFBFBD> '<0B> ab<61> ߂<EFBFBD> <1E> N<EFBFBD> %<25> b<EFBFBD> о <EFBFBD> Z<EFBFBD> \r ౭<EFBFBD> <EFBFBD> 2]<05> <> <EFBFBD> <EFBFBD> <06> <> v<EFBFBD> <10> <> ri Q<> <51> f<EFBFBD> 6 \$ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (\n <EFBFBD> <EFBFBD> +jo,<06> ohur C0 L<> N<EFBFBD> <4E> @<40> vd<76> F<12> <> &y+<2B> N<EFBFBD> <4E> R0<52> `O`<60> %<25> ȯ<EFBFBD> <C8AF> Z\" <EFBFBD> \" vl<1A> <> =<3D> 2r<32> <72> bƌ92 \n 5C0)<29> T<EFBFBD> D<EFBFBD> 0+<2B> ʰ<> <CAB0> <0E> л<EFBFBD> <D0BB> <0B> jk<6A> ro<72> <6F> )<29> <> <EFBFBD> <EFBFBD> DK<05> <0C> ZM L<> <4C> <EFBFBD> *M 3<> @<40> <> <EFBFBD> <EFBFBD> 3F<05> " ; break ; case " ar " : $g = " <EFBFBD> C<EFBFBD> P<EFBFBD> <> <C28D> l*<2A> \r <EFBFBD> ,&\n <EFBFBD> A<EFBFBD> <15> <> <EFBFBD> (J.<19> <> 0Se\\ <EFBFBD> \r <EFBFBD> <EFBFBD> b<> @<40> 0<> ,\n Q,l)<29> <> <EFBFBD> µ<EFBFBD> <C2B5> <EFBFBD> A<14> <> j _1<5F> C<EFBFBD> M<EFBFBD> <4D> e<0B> <> S<> \n g@<40> Og<4F> <67> <EFBFBD> <EFBFBD> X<EFBFBD> DM<44> )<29> <> 0<18> <> cA<63> <41> n8<1C> e*y#au4<75> <34> <20> Ir*;rS<72> U<> dJ }<7D> <> <EFBFBD> *z<> U<12> @<40> <> X;ai1l(n<> <1B> <> <EFBFBD> <EFBFBD> <EFBFBD> [<14> y<EFBFBD> d<EFBFBD> u 'c(<28> <> o F<> <46> <EFBFBD> <EFBFBD> e3<65> Nb<03> <> <EFBFBD> p2 N<> S<EFBFBD> <53> ӳ: LZ<4C> z<EFBFBD> P<EFBFBD> \\ b<EFBFBD> <EFBFBD> u<EFBFBD> .<2E> [<5B> Q`u !<15> <> Jy<4A> <79> &2<11> <> (gT<1C> <> SњM<D19A> x<EFBFBD> 5g5<67> K<EFBFBD> K<EFBFBD> ¦<EFBFBD> <C2A6> <EFBFBD> <EFBFBD> <EFBFBD> 0ʀ(<28> 7 \r m8<EFBFBD> 7 (<28> 9 \r <EFBFBD> <EFBFBD> f\" 7N<10> 9<EFBFBD> <39> <20> <> 4<EFBFBD> x荶<78> <E88DB6> <0B> x<> ;<3B> # \" <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 2 ɰW\" J \n B<EFBFBD> <EFBFBD> 'hk<0C> ūb<14> Di<44> \\ @<40> <> <EFBFBD> p<EFBFBD> <70> <EFBFBD> yf<79> <66> <EFBFBD> 9<08> <> <EFBFBD> <EFBFBD> V<EFBFBD> ?<3F> TXW<58> <57> <EFBFBD> F<EFBFBD> <46> { <EFBFBD> <EFBFBD> 3)\" <EFBFBD> W9<EFBFBD> |<7C> <> eRhU<68> <55> Ҫ<EFBFBD> 1<EFBFBD> <31> P<EFBFBD> ><3E> <> <02> \" o { <EFBFBD> \" 7<EFBFBD> ^<5E> <> pL \n 7OM*<2A> O<> <18> <7cp<63> 4<EFBFBD> <34> Rfl<66> N<EFBFBD> <4E> SJ<53> <4A> \\ E<EFBFBD> <EFBFBD> V<EFBFBD> J<EFBFBD> +<2B> #<23> <> <EFBFBD> ܇Jr<4A> <20> ><3E> J<> <4A> (ꆶ \$ (<28> R<EFBFBD> M<EFBFBD> <4D> v<EFBFBD> GI<47> <0C> <> <0E> <> <EFBFBD> ťr<C5A5> <72> Wj<57> |<7C> \" v<06> <> <14> < <20> <> k<EFBFBD> <10> (<28> <> <EFBFBD> <EFBFBD> 3 \r <EFBFBD> <08> 1<EFBFBD> T[<5B> nڰh<DAB0> <07> <> <EFBFBD> <EFBFBD> <EFBFBD> <DEB3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> \0 <EFBFBD> 2<05> \0 yw<EFBFBD> <03> <> 3<07> <10> :<0E> <> <EFBFBD> <05> x<78> \r <EFBFBD> i<EFBFBD> PH<EFBFBD> <17> <> p_<0E> p<EFBFBD> B<17> J`|6<> -+<2B> 3A#kuF\r <EFBFBD> <EFBFBD> ^0<> <30> zC<16> ܪ<> <DCAA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> s<0C> <> j<EFBFBD> Q8<51> <38> <EFBFBD> <EFBFBD> <EFBFBD> <05> u,15<31> <35> <EFBFBD> XrZTƖ<54> <C696> n<EFBFBD> \" @P<> 0<EFBFBD> Cs<43> 3<EFBFBD> <33> (<28> Z(<08> f<EFBFBD> <66> <EFBFBD> \$ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <1B> <> :<3A> <16> Yk<59> <6B> <12> U<EFBFBD> <55> <<08> <> <EFBFBD> :<3A> <> <EFBFBD> <EFBFBD> 0<EFBFBD> <30> <EFBFBD> <EFBFBD> <EFBFBD> ŋ<EFBFBD> l<EFBFBD> SR<53> <52> <EFBFBD> <EFBFBD> i<EFBFBD> Z<EFBFBD> <5A> )<29> v<EFBFBD> kR<<3C> <> J<EFBFBD> #[<5B> q7 7WSI<53> Y<ь<> l<16> MT<4D> <16> <> K<EFBFBD> <4B> <EFBFBD> #o ci@<40> c<18> 7S<37> <04> <> <EFBFBD> b<EFBFBD> <62> <EFBFBD> !<21> jh<6A> ;[3<> <33> !{ <EFBFBD> cT<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> \\ !>6}<7D> TT<54> o<EFBFBD> 1lk<6C> Ȧ g<> [<5B> <> <EFBFBD> H<EFBFBD> <48> rǙ`yٍr<D98D> 1<EFBFBD> <31> a<EFBFBD> <61> ]<5D> 7<EFBFBD> <37> (v<>
2014-05-08 19:46:08 +02:00
Min_PDO
extends
PDO { var $_result , $server_info , $affected_rows , $errno , $error ; function
2020-04-26 00:47:07 +02:00
__construct (){ global $b ; $jg = array_search ( " SQL " , $b -> operators ); if ( $jg !== false ) unset ( $b -> operators [ $jg ]);} function
dsn ( $nc , $V , $E , $Cf = array ()){ try { parent :: __construct ( $nc , $V , $E , $Cf );} catch ( Exception $Ec ){ auth_error ( h ( $Ec -> getMessage ()));} $this -> setAttribute ( 13 , array ( 'Min_PDOStatement' )); $this -> server_info =@ $this -> getAttribute ( 4 );} function
query ( $F , $Hi = false ){ $G = parent :: query ( $F ); $this -> error = " " ; if ( ! $G ){ list (, $this -> errno , $this -> error ) = $this -> errorInfo (); if ( ! $this -> error ) $this -> error = lang ( 21 ); return
false ;} $this -> store_result ( $G ); return $G ;} function
multi_query ( $F ){ return $this -> _result = $this -> query ( $F );} function
store_result ( $G = null ){ if ( ! $G ){ $G = $this -> _result ; if ( ! $G ) return
false ;} if ( $G -> columnCount ()){ $G -> num_rows = $G -> rowCount (); return $G ;} $this -> affected_rows = $G -> rowCount (); return
2014-05-08 19:46:08 +02:00
true ;} function
next_result (){ if ( ! $this -> _result ) return
false ; $this -> _result -> _offset = 0 ; return @ $this -> _result -> nextRowset ();} function
2020-04-26 00:47:07 +02:00
result ( $F , $o = 0 ){ $G = $this -> query ( $F ); if ( ! $G ) return
false ; $I = $G -> fetch (); return $I [ $o ];}} class
2014-05-08 19:46:08 +02:00
Min_PDOStatement
extends
PDOStatement { var $_offset = 0 , $num_rows ; function
fetch_assoc (){ return $this -> fetch ( 2 );} function
fetch_row (){ return $this -> fetch ( 3 );} function
2020-04-26 00:47:07 +02:00
fetch_field (){ $I = ( object ) $this -> getColumnMeta ( $this -> _offset ++ ); $I -> orgtable = $I -> table ; $I -> orgname = $I -> name ; $I -> charsetnr = ( in_array ( " blob " ,( array ) $I -> flags ) ? 63 : 0 ); return $I ;}}} $ic = array (); class
2014-05-08 19:46:08 +02:00
Min_SQL { var $_conn ; function
2018-12-25 21:50:48 +01:00
__construct ( $h ){ $this -> _conn = $h ;} function
2020-04-26 00:47:07 +02:00
select ( $Q , $K , $Z , $rd , $Ef = array (), $z = 1 , $D = 0 , $rg = false ){ global $b , $x ; $ce = ( count ( $rd ) < count ( $K )); $F = $b -> selectQueryBuild ( $K , $Z , $rd , $Ef , $z , $D ); if ( ! $F ) $F = " SELECT " . limit (( $_GET [ " page " ] != " last " && $z != " " && $rd && $ce && $x == " sql " ? " SQL_CALC_FOUND_ROWS " : " " ) . implode ( " , " , $K ) . " \n FROM " . table ( $Q ),( $Z ? " \n WHERE " . implode ( " AND " , $Z ) : " " ) . ( $rd && $ce ? " \n GROUP BY " . implode ( " , " , $rd ) : " " ) . ( $Ef ? " \n ORDER BY " . implode ( " , " , $Ef ) : " " ),( $z != " " ? + $z : null ),( $D ? $z * $D : 0 ), " \n " ); $Ih = microtime ( true ); $H = $this -> _conn -> query ( $F ); if ( $rg ) echo $b -> selectQuery ( $F , $Ih , ! $H ); return $H ;} function
delete ( $Q , $Ag , $z = 0 ){ $F = " FROM " . table ( $Q ); return
queries ( " DELETE " . ( $z ? limit1 ( $Q , $F , $Ag ) : " $F $Ag " ));} function
update ( $Q , $N , $Ag , $z = 0 , $L = " \n " ){ $aj = array (); foreach ( $N
as $y => $X ) $aj [] = " $y = $X " ; $F = table ( $Q ) . " SET $L " . implode ( " , $L " , $aj ); return
queries ( " UPDATE " . ( $z ? limit1 ( $Q , $F , $Ag , $L ) : " $F $Ag " ));} function
insert ( $Q , $N ){ return
queries ( " INSERT INTO " . table ( $Q ) . ( $N ? " ( " . implode ( " , " , array_keys ( $N )) . " ) \n VALUES ( " . implode ( " , " , $N ) . " ) " : " DEFAULT VALUES " ));} function
insertUpdate ( $Q , $J , $pg ){ return
2014-05-08 19:46:08 +02:00
false ;} function
begin (){ return
queries ( " BEGIN " );} function
commit (){ return
queries ( " COMMIT " );} function
rollback (){ return
2018-04-01 23:34:54 +02:00
queries ( " ROLLBACK " );} function
2020-04-26 00:47:07 +02:00
slowQuery ( $F , $ki ){} function
convertSearch ( $u , $X , $o ){ return $u ;} function
value ( $X , $o ){ return ( method_exists ( $this -> _conn , 'value' ) ? $this -> _conn -> value ( $X , $o ) : ( is_resource ( $X ) ? stream_get_contents ( $X ) : $X ));} function
quoteBinary ( $dh ){ return
q ( $dh );} function
2018-04-01 23:34:54 +02:00
warnings (){ return '' ;} function
2020-04-26 00:47:07 +02:00
tableHelp ( $B ){}} $ic [ " sqlite " ] = " SQLite 3 " ; $ic [ " sqlite2 " ] = " SQLite 2 " ; if ( isset ( $_GET [ " sqlite " ]) || isset ( $_GET [ " sqlite2 " ])){ $mg = array (( isset ( $_GET [ " sqlite " ]) ? " SQLite3 " : " SQLite " ), " PDO_SQLite " ); define ( " DRIVER " ,( isset ( $_GET [ " sqlite " ]) ? " sqlite " : " sqlite2 " )); if ( class_exists ( isset ( $_GET [ " sqlite " ]) ? " SQLite3 " : " SQLiteDatabase " )){ if ( isset ( $_GET [ " sqlite " ])){ class
2018-04-01 23:34:54 +02:00
Min_SQLite { var $extension = " SQLite3 " , $server_info , $affected_rows , $errno , $error , $_link ; function
2020-04-26 00:47:07 +02:00
__construct ( $Yc ){ $this -> _link = new
SQLite3 ( $Yc ); $dj = $this -> _link -> version (); $this -> server_info = $dj [ " versionString " ];} function
query ( $F ){ $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
2018-04-01 23:34:54 +02:00
new
2020-04-26 00:47:07 +02:00
Min_Result ( $G ); $this -> affected_rows = $this -> _link -> changes (); return
2018-04-01 23:34:54 +02:00
true ;} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return ( is_utf8 ( $P ) ? " ' " . $this -> _link -> escapeString ( $P ) . " ' " : " x' " . reset ( unpack ( 'H*' , $P )) . " ' " );} function
2018-04-01 23:34:54 +02:00
store_result (){ return $this -> _result ;} function
2020-04-26 00:47:07 +02:00
result ( $F , $o = 0 ){ $G = $this -> query ( $F ); if ( ! is_object ( $G )) return
false ; $I = $G -> _result -> fetchArray (); return $I [ $o ];}} class
2018-04-01 23:34:54 +02:00
Min_Result { var $_result , $_offset = 0 , $num_rows ; function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ $this -> _result = $G ;} function
2018-04-01 23:34:54 +02:00
fetch_assoc (){ return $this -> _result -> fetchArray ( SQLITE3_ASSOC );} function
fetch_row (){ return $this -> _result -> fetchArray ( SQLITE3_NUM );} function
2018-12-25 21:50:48 +01:00
fetch_field (){ $e = $this -> _offset ++ ; $T = $this -> _result -> columnType ( $e ); return ( object ) array ( " name " => $this -> _result -> columnName ( $e ), " type " => $T , " charsetnr " => ( $T == SQLITE3_BLOB ? 63 : 0 ),);} function
2018-04-01 23:34:54 +02:00
__desctruct (){ return $this -> _result -> finalize ();}}} else { class
Min_SQLite { var $extension = " SQLite " , $server_info , $affected_rows , $error , $_link ; function
2020-04-26 00:47:07 +02:00
__construct ( $Yc ){ $this -> server_info = sqlite_libversion (); $this -> _link = new
SQLiteDatabase ( $Yc );} function
query ( $F , $Hi = false ){ $We = ( $Hi ? " unbufferedQuery " : " query " ); $G =@ $this -> _link -> $We ( $F , SQLITE_BOTH , $n ); $this -> error = " " ; if ( ! $G ){ $this -> error = $n ; return
false ;} elseif ( $G === true ){ $this -> affected_rows = $this -> changes (); return
2018-04-01 23:34:54 +02:00
true ;} return
new
2020-04-26 00:47:07 +02:00
Min_Result ( $G );} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return " ' " . sqlite_escape_string ( $P ) . " ' " ;} function
2018-04-01 23:34:54 +02:00
store_result (){ return $this -> _result ;} function
2020-04-26 00:47:07 +02:00
result ( $F , $o = 0 ){ $G = $this -> query ( $F ); if ( ! is_object ( $G )) return
false ; $I = $G -> _result -> fetch (); return $I [ $o ];}} class
2018-04-01 23:34:54 +02:00
Min_Result { var $_result , $_offset = 0 , $num_rows ; function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ $this -> _result = $G ; if ( method_exists ( $G , 'numRows' )) $this -> num_rows = $G -> numRows ();} function
fetch_assoc (){ $I = $this -> _result -> fetch ( SQLITE_ASSOC ); if ( ! $I ) return
false ; $H = array (); foreach ( $I
as $y => $X ) $H [( $y [ 0 ] == '"' ? idf_unescape ( $y ) : $y )] = $X ; return $H ;} function
2018-04-01 23:34:54 +02:00
fetch_row (){ return $this -> _result -> fetch ( SQLITE_NUM );} function
2020-04-26 00:47:07 +02:00
fetch_field (){ $B = $this -> _result -> fieldName ( $this -> _offset ++ ); $fg = '(\[.*]|"(?:[^"]|"")*"|(.+))' ; if ( preg_match ( " ~^( $fg\\ .)? $fg\ $ ~ " , $B , $A )){ $Q = ( $A [ 3 ] != " " ? $A [ 3 ] : idf_unescape ( $A [ 2 ])); $B = ( $A [ 5 ] != " " ? $A [ 5 ] : idf_unescape ( $A [ 4 ]));} return ( object ) array ( " name " => $B , " orgname " => $B , " orgtable " => $Q ,);}}}} elseif ( extension_loaded ( " pdo_sqlite " )){ class
2018-04-01 23:34:54 +02:00
Min_SQLite
extends
Min_PDO { var $extension = " PDO_SQLite " ; function
2020-04-26 00:47:07 +02:00
__construct ( $Yc ){ $this -> dsn ( DRIVER . " : $Yc " , " " , " " );}}} if ( class_exists ( " Min_SQLite " )){ class
2018-04-01 23:34:54 +02:00
Min_DB
extends
Min_SQLite { function
__construct (){ parent :: __construct ( " :memory: " ); $this -> query ( " PRAGMA foreign_keys = 1 " );} function
2020-04-26 00:47:07 +02:00
select_db ( $Yc ){ if ( is_readable ( $Yc ) && $this -> query ( " ATTACH " . $this -> quote ( preg_match ( " ~(^[/ \\ \\ ]|:)~ " , $Yc ) ? $Yc : dirname ( $_SERVER [ " SCRIPT_FILENAME " ]) . " / $Yc " ) . " AS a " )){ parent :: __construct ( $Yc ); $this -> query ( " PRAGMA foreign_keys = 1 " ); return
2018-04-01 23:34:54 +02:00
true ;} return
false ;} function
2020-04-26 00:47:07 +02:00
multi_query ( $F ){ return $this -> _result = $this -> query ( $F );} function
2018-04-01 23:34:54 +02:00
next_result (){ return
false ;}}} class
Min_Driver
extends
Min_SQL { function
2020-04-26 00:47:07 +02:00
insertUpdate ( $Q , $J , $pg ){ $aj = array (); foreach ( $J
as $N ) $aj [] = " ( " . implode ( " , " , $N ) . " ) " ; return
queries ( " REPLACE INTO " . table ( $Q ) . " ( " . implode ( " , " , array_keys ( reset ( $J ))) . " ) VALUES \n " . implode ( " , \n " , $aj ));} function
tableHelp ( $B ){ if ( $B == " sqlite_sequence " ) return " fileformat2.html#seqtab " ; if ( $B == " sqlite_master " ) return " fileformat2.html# $B " ;}} function
idf_escape ( $u ){ return '"' . str_replace ( '"' , '""' , $u ) . '"' ;} function
table ( $u ){ return
idf_escape ( $u );} function
connect (){ global $b ; list (,, $E ) = $b -> credentials (); if ( $E != " " ) return
2018-06-30 00:38:01 +02:00
lang ( 22 ); return
2018-04-01 23:34:54 +02:00
new
Min_DB ;} function
get_databases (){ return
array ();} function
2020-04-26 00:47:07 +02:00
limit ( $F , $Z , $z , $C = 0 , $L = " " ){ return " $F $Z " . ( $z !== null ? $L . " LIMIT $z " . ( $C ? " OFFSET $C " : " " ) : " " );} function
limit1 ( $Q , $F , $Z , $L = " \n " ){ global $h ; return ( preg_match ( '~^INTO~' , $F ) || $h -> result ( " SELECT sqlite_compileoption_used('ENABLE_UPDATE_DELETE_LIMIT') " ) ? limit ( $F , $Z , 1 , 0 , $L ) : " $F WHERE rowid = (SELECT rowid FROM " . table ( $Q ) . $Z . $L . " LIMIT 1) " );} function
db_collation ( $l , $qb ){ global $h ; return $h -> result ( " PRAGMA encoding " );} function
2018-04-01 23:34:54 +02:00
engines (){ return
array ();} function
logged_user (){ return
get_current_user ();} function
tables_list (){ return
2018-06-30 00:38:01 +02:00
get_key_vals ( " SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') ORDER BY (name = 'sqlite_sequence'), name " );} function
2020-04-26 00:47:07 +02:00
count_tables ( $k ){ return
2018-04-01 23:34:54 +02:00
array ();} function
2020-04-26 00:47:07 +02:00
table_status ( $B = " " ){ global $h ; $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') " . ( $B != " " ? " AND name = " . q ( $B ) : " ORDER BY name " )) as $I ){ $I [ " Rows " ] = $h -> result ( " SELECT COUNT(*) FROM " . idf_escape ( $I [ " Name " ])); $H [ $I [ " Name " ]] = $I ;} foreach ( get_rows ( " SELECT * FROM sqlite_sequence " , null , " " ) as $I ) $H [ $I [ " name " ]][ " Auto_increment " ] = $I [ " seq " ]; return ( $B != " " ? $H [ $B ] : $H );} function
2018-12-25 21:50:48 +01:00
is_view ( $R ){ return $R [ " Engine " ] == " view " ;} function
fk_support ( $R ){ global $h ; return ! $h -> result ( " SELECT sqlite_compileoption_used('OMIT_FOREIGN_KEY') " );} function
2020-04-26 00:47:07 +02:00
fields ( $Q ){ global $h ; $H = array (); $pg = " " ; foreach ( get_rows ( " PRAGMA table_info( " . table ( $Q ) . " ) " ) as $I ){ $B = $I [ " name " ]; $T = strtolower ( $I [ " type " ]); $Wb = $I [ " dflt_value " ]; $H [ $B ] = array ( " field " => $B , " type " => ( preg_match ( '~int~i' , $T ) ? " integer " : ( preg_match ( '~char|clob|text~i' , $T ) ? " text " : ( preg_match ( '~blob~i' , $T ) ? " blob " : ( preg_match ( '~real|floa|doub~i' , $T ) ? " real " : " numeric " )))), " full_type " => $T , " default " => ( preg_match ( " ~'(.*)'~ " , $Wb , $A ) ? str_replace ( " '' " , " ' " , $A [ 1 ]) : ( $Wb == " NULL " ? null : $Wb )), " null " =>! $I [ " notnull " ], " privileges " => array ( " select " => 1 , " insert " => 1 , " update " => 1 ), " primary " => $I [ " pk " ],); if ( $I [ " pk " ]){ if ( $pg != " " ) $H [ $pg ][ " auto_increment " ] = false ; elseif ( preg_match ( '~^integer$~i' , $T )) $H [ $B ][ " auto_increment " ] = true ; $pg = $B ;}} $Dh = $h -> result ( " SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . q ( $Q )); preg_match_all ( '~(("[^"]*+")+|[a-z0-9_]+)\s+text\s+COLLATE\s+(\'[^\']+\'|\S+)~i' , $Dh , $Ie , PREG_SET_ORDER ); foreach ( $Ie
as $A ){ $B = str_replace ( '""' , '"' , preg_replace ( '~^"|"$~' , '' , $A [ 1 ])); if ( $H [ $B ]) $H [ $B ][ " collation " ] = trim ( $A [ 3 ], " ' " );} return $H ;} function
indexes ( $Q , $i = null ){ global $h ; if ( ! is_object ( $i )) $i = $h ; $H = array (); $Dh = $i -> result ( " SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . q ( $Q )); if ( preg_match ( '~\bPRIMARY\s+KEY\s*\((([^)"]+|"[^"]*"|`[^`]*`)++)~i' , $Dh , $A )){ $H [ " " ] = array ( " type " => " PRIMARY " , " columns " => array (), " lengths " => array (), " descs " => array ()); preg_match_all ( '~((("[^"]*+")+|(?:`[^`]*+`)+)|(\S+))(\s+(ASC|DESC))?(,\s*|$)~i' , $A [ 1 ], $Ie , PREG_SET_ORDER ); foreach ( $Ie
as $A ){ $H [ " " ][ " columns " ][] = idf_unescape ( $A [ 2 ]) . $A [ 4 ]; $H [ " " ][ " descs " ][] = ( preg_match ( '~DESC~i' , $A [ 5 ]) ? '1' : null );}} if ( ! $H ){ foreach ( fields ( $Q ) as $B => $o ){ if ( $o [ " primary " ]) $H [ " " ] = array ( " type " => " PRIMARY " , " columns " => array ( $B ), " lengths " => array (), " descs " => array ( null ));}} $Gh = get_key_vals ( " SELECT name, sql FROM sqlite_master WHERE type = 'index' AND tbl_name = " . q ( $Q ), $i ); foreach ( get_rows ( " PRAGMA index_list( " . table ( $Q ) . " ) " , $i ) as $I ){ $B = $I [ " name " ]; $v = array ( " type " => ( $I [ " unique " ] ? " UNIQUE " : " INDEX " )); $v [ " lengths " ] = array (); $v [ " descs " ] = array (); foreach ( get_rows ( " PRAGMA index_info( " . idf_escape ( $B ) . " ) " , $i ) as $ch ){ $v [ " columns " ][] = $ch [ " name " ]; $v [ " descs " ][] = null ;} if ( preg_match ( '~^CREATE( UNIQUE)? INDEX ' . preg_quote ( idf_escape ( $B ) . ' ON ' . idf_escape ( $Q ), '~' ) . ' \((.*)\)$~i' , $Gh [ $B ], $Mg )){ preg_match_all ( '/("[^"]*+")+( DESC)?/' , $Mg [ 2 ], $Ie ); foreach ( $Ie [ 2 ] as $y => $X ){ if ( $X ) $v [ " descs " ][ $y ] = '1' ;}} if ( ! $H [ " " ] || $v [ " type " ] != " UNIQUE " || $v [ " columns " ] != $H [ " " ][ " columns " ] || $v [ " descs " ] != $H [ " " ][ " descs " ] ||! preg_match ( " ~^sqlite_~ " , $B )) $H [ $B ] = $v ;} return $H ;} function
foreign_keys ( $Q ){ $H = array (); foreach ( get_rows ( " PRAGMA foreign_key_list( " . table ( $Q ) . " ) " ) as $I ){ $q =& $H [ $I [ " id " ]]; if ( ! $q ) $q = $I ; $q [ " source " ][] = $I [ " from " ]; $q [ " target " ][] = $I [ " to " ];} return $H ;} function
view ( $B ){ global $h ; return
array ( " select " => preg_replace ( '~^(?:[^`"[]+|`[^`]*`|"[^"]*")* AS\s+~iU' , '' , $h -> result ( " SELECT sql FROM sqlite_master WHERE name = " . q ( $B ))));} function
2018-04-01 23:34:54 +02:00
collations (){ return ( isset ( $_GET [ " create " ]) ? get_vals ( " PRAGMA collation_list " , 1 ) : array ());} function
2020-04-26 00:47:07 +02:00
information_schema ( $l ){ return
2018-04-01 23:34:54 +02:00
false ;} function
2018-12-25 21:50:48 +01:00
error (){ global $h ; return
h ( $h -> error );} function
2020-04-26 00:47:07 +02:00
check_sqlite_name ( $B ){ global $h ; $Oc = " db|sdb|sqlite " ; if ( ! preg_match ( " ~^[^ \\ 0]* \\ .( $Oc ) \$ ~ " , $B )){ $h -> error = lang ( 23 , str_replace ( " | " , " , " , $Oc )); return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
2020-04-26 00:47:07 +02:00
create_database ( $l , $d ){ global $h ; if ( file_exists ( $l )){ $h -> error = lang ( 24 ); return
false ;} if ( ! check_sqlite_name ( $l )) return
false ; try { $_ = new
Min_SQLite ( $l );} catch ( Exception $Ec ){ $h -> error = $Ec -> getMessage (); return
false ;} $_ -> query ( 'PRAGMA encoding = "UTF-8"' ); $_ -> query ( 'CREATE TABLE adminer (i)' ); $_ -> query ( 'DROP TABLE adminer' ); return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
drop_databases ( $k ){ global $h ; $h -> __construct ( " :memory: " ); foreach ( $k
as $l ){ if ( !@ unlink ( $l )){ $h -> error = lang ( 24 ); return
2018-04-01 23:34:54 +02:00
false ;}} return
true ;} function
2020-04-26 00:47:07 +02:00
rename_database ( $B , $d ){ global $h ; if ( ! check_sqlite_name ( $B )) return
false ; $h -> __construct ( " :memory: " ); $h -> error = lang ( 24 ); return @ rename ( DB , $B );} function
2018-04-01 23:34:54 +02:00
auto_increment (){ return " PRIMARY KEY " . ( DRIVER == " sqlite " ? " AUTOINCREMENT " : " " );} function
2020-04-26 00:47:07 +02:00
alter_table ( $Q , $B , $p , $gd , $vb , $yc , $d , $Na , $Zf ){ global $h ; $Ti = ( $Q == " " || $gd ); foreach ( $p
as $o ){ if ( $o [ 0 ] != " " ||! $o [ 1 ] || $o [ 2 ]){ $Ti = true ; break ;}} $c = array (); $Nf = array (); foreach ( $p
as $o ){ if ( $o [ 1 ]){ $c [] = ( $Ti ? $o [ 1 ] : " ADD " . implode ( $o [ 1 ])); if ( $o [ 0 ] != " " ) $Nf [ $o [ 0 ]] = $o [ 1 ][ 0 ];}} if ( ! $Ti ){ foreach ( $c
2018-12-25 21:50:48 +01:00
as $X ){ if ( ! queries ( " ALTER TABLE " . table ( $Q ) . " $X " )) return
2020-04-26 00:47:07 +02:00
false ;} if ( $Q != $B &&! queries ( " ALTER TABLE " . table ( $Q ) . " RENAME TO " . table ( $B ))) return
false ;} elseif ( ! recreate_table ( $Q , $B , $c , $Nf , $gd , $Na )) return
false ; if ( $Na ){ queries ( " BEGIN " ); queries ( " UPDATE sqlite_sequence SET seq = $Na WHERE name = " . q ( $B )); if ( ! $h -> affected_rows ) queries ( " INSERT INTO sqlite_sequence (name, seq) VALUES ( " . q ( $B ) . " , $Na ) " ); queries ( " COMMIT " );} return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
recreate_table ( $Q , $B , $p , $Nf , $gd , $Na , $w = array ()){ global $h ; if ( $Q != " " ){ if ( ! $p ){ foreach ( fields ( $Q ) as $y => $o ){ if ( $w ) $o [ " auto_increment " ] = 0 ; $p [] = process_field ( $o , $o ); $Nf [ $y ] = idf_escape ( $y );}} $qg = false ; foreach ( $p
as $o ){ if ( $o [ 6 ]) $qg = true ;} $lc = array (); foreach ( $w
as $y => $X ){ if ( $X [ 2 ] == " DROP " ){ $lc [ $X [ 1 ]] = true ; unset ( $w [ $y ]);}} foreach ( indexes ( $Q ) as $ke => $v ){ $f = array (); foreach ( $v [ " columns " ] as $y => $e ){ if ( ! $Nf [ $e ]) continue
2 ; $f [] = $Nf [ $e ] . ( $v [ " descs " ][ $y ] ? " DESC " : " " );} if ( ! $lc [ $ke ]){ if ( $v [ " type " ] != " PRIMARY " ||! $qg ) $w [] = array ( $v [ " type " ], $ke , $f );}} foreach ( $w
as $y => $X ){ if ( $X [ 0 ] == " PRIMARY " ){ unset ( $w [ $y ]); $gd [] = " PRIMARY KEY ( " . implode ( " , " , $X [ 2 ]) . " ) " ;}} foreach ( foreign_keys ( $Q ) as $ke => $q ){ foreach ( $q [ " source " ] as $y => $e ){ if ( ! $Nf [ $e ]) continue
2 ; $q [ " source " ][ $y ] = idf_unescape ( $Nf [ $e ]);} if ( ! isset ( $gd [ " $ke " ])) $gd [] = " " . format_foreign_key ( $q );} queries ( " BEGIN " );} foreach ( $p
as $y => $o ) $p [ $y ] = " " . implode ( $o ); $p = array_merge ( $p , array_filter ( $gd )); $ei = ( $Q == $B ? " adminer_ $B " : $B ); if ( ! queries ( " CREATE TABLE " . table ( $ei ) . " ( \n " . implode ( " , \n " , $p ) . " \n ) " )) return
false ; if ( $Q != " " ){ if ( $Nf &&! queries ( " INSERT INTO " . table ( $ei ) . " ( " . implode ( " , " , $Nf ) . " ) SELECT " . implode ( " , " , array_map ( 'idf_escape' , array_keys ( $Nf ))) . " FROM " . table ( $Q ))) return
false ; $Ei = array (); foreach ( triggers ( $Q ) as $Ci => $li ){ $Bi = trigger ( $Ci ); $Ei [] = " CREATE TRIGGER " . idf_escape ( $Ci ) . " " . implode ( " " , $li ) . " ON " . table ( $B ) . " \n $Bi[Statement] " ;} $Na = $Na ? 0 : $h -> result ( " SELECT seq FROM sqlite_sequence WHERE name = " . q ( $Q )); if ( ! queries ( " DROP TABLE " . table ( $Q )) || ( $Q == $B &&! queries ( " ALTER TABLE " . table ( $ei ) . " RENAME TO " . table ( $B ))) ||! alter_indexes ( $B , $w )) return
false ; if ( $Na ) queries ( " UPDATE sqlite_sequence SET seq = $Na WHERE name = " . q ( $B )); foreach ( $Ei
as $Bi ){ if ( ! queries ( $Bi )) return
2018-04-01 23:34:54 +02:00
false ;} queries ( " COMMIT " );} return
true ;} function
2020-04-26 00:47:07 +02:00
index_sql ( $Q , $T , $B , $f ){ return " CREATE $T " . ( $T != " INDEX " ? " INDEX " : " " ) . idf_escape ( $B != " " ? $B : uniqid ( $Q . " _ " )) . " ON " . table ( $Q ) . " $f " ;} function
2018-12-25 21:50:48 +01:00
alter_indexes ( $Q , $c ){ foreach ( $c
2020-04-26 00:47:07 +02:00
as $pg ){ if ( $pg [ 0 ] == " PRIMARY " ) return
recreate_table ( $Q , $Q , array (), array (), array (), 0 , $c );} foreach ( array_reverse ( $c ) as $X ){ if ( ! queries ( $X [ 2 ] == " DROP " ? " DROP INDEX " . idf_escape ( $X [ 1 ]) : index_sql ( $Q , $X [ 0 ], $X [ 1 ], " ( " . implode ( " , " , $X [ 2 ]) . " ) " ))) return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
2018-12-25 21:50:48 +01:00
truncate_tables ( $S ){ return
apply_queries ( " DELETE FROM " , $S );} function
2020-04-26 00:47:07 +02:00
drop_views ( $fj ){ return
apply_queries ( " DROP VIEW " , $fj );} function
2018-12-25 21:50:48 +01:00
drop_tables ( $S ){ return
apply_queries ( " DROP TABLE " , $S );} function
2020-04-26 00:47:07 +02:00
move_tables ( $S , $fj , $ci ){ return
2018-04-01 23:34:54 +02:00
false ;} function
2020-04-26 00:47:07 +02:00
trigger ( $B ){ global $h ; if ( $B == " " ) return
array ( " Statement " => " BEGIN \n \t ; \n END " ); $u = '(?:[^`"\s]+|`[^`]*`|"[^"]*")+' ; $Di = trigger_options (); preg_match ( " ~^CREATE \\ s+TRIGGER \\ s* $u\\s *( " . implode ( " | " , $Di [ " Timing " ]) . " ) \\ s+([a-z]+)(?: \\ s+OF \\ s+( $u ))? \\ s+ON \\ s* $u\\s *(?:FOR \\ s+EACH \\ s+ROW \\ s)?(.*)~is " , $h -> result ( " SELECT sql FROM sqlite_master WHERE type = 'trigger' AND name = " . q ( $B )), $A ); $of = $A [ 3 ]; return
array ( " Timing " => strtoupper ( $A [ 1 ]), " Event " => strtoupper ( $A [ 2 ]) . ( $of ? " OF " : " " ), " Of " => ( $of [ 0 ] == '`' || $of [ 0 ] == '"' ? idf_unescape ( $of ) : $of ), " Trigger " => $B , " Statement " => $A [ 4 ],);} function
triggers ( $Q ){ $H = array (); $Di = trigger_options (); foreach ( get_rows ( " SELECT * FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q ( $Q )) as $I ){ preg_match ( '~^CREATE\s+TRIGGER\s*(?:[^`"\s]+|`[^`]*`|"[^"]*")+\s*(' . implode ( " | " , $Di [ " Timing " ]) . ')\s*(.*?)\s+ON\b~i' , $I [ " sql " ], $A ); $H [ $I [ " name " ]] = array ( $A [ 1 ], $A [ 2 ]);} return $H ;} function
2018-04-01 23:34:54 +02:00
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
2018-12-25 21:50:48 +01:00
last_id (){ global $h ; return $h -> result ( " SELECT LAST_INSERT_ROWID() " );} function
2020-04-26 00:47:07 +02:00
explain ( $h , $F ){ return $h -> query ( " EXPLAIN QUERY PLAN $F " );} function
2018-12-25 21:50:48 +01:00
found_rows ( $R , $Z ){} function
2018-04-01 23:34:54 +02:00
types (){ return
array ();} function
schemas (){ return
array ();} function
get_schema (){ return " " ;} function
2020-04-26 00:47:07 +02:00
set_schema ( $gh ){ return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
create_sql ( $Q , $Na , $Nh ){ global $h ; $H = $h -> result ( " SELECT sql FROM sqlite_master WHERE type IN ('table', 'view') AND name = " . q ( $Q )); foreach ( indexes ( $Q ) as $B => $v ){ if ( $B == '' ) continue ; $H .= " ; \n \n " . index_sql ( $Q , $v [ 'type' ], $B , " ( " . implode ( " , " , array_map ( 'idf_escape' , $v [ 'columns' ])) . " ) " );} return $H ;} function
2018-12-25 21:50:48 +01:00
truncate_sql ( $Q ){ return " DELETE FROM " . table ( $Q );} function
2020-04-26 00:47:07 +02:00
use_sql ( $j ){} function
2018-12-25 21:50:48 +01:00
trigger_sql ( $Q ){ return
implode ( get_vals ( " SELECT sql || ';; \n ' FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q ( $Q )));} function
2020-04-26 00:47:07 +02:00
show_variables (){ global $h ; $H = array (); foreach ( array ( " auto_vacuum " , " cache_size " , " count_changes " , " default_cache_size " , " empty_result_callbacks " , " encoding " , " foreign_keys " , " full_column_names " , " fullfsync " , " journal_mode " , " journal_size_limit " , " legacy_file_format " , " locking_mode " , " page_size " , " max_page_count " , " read_uncommitted " , " recursive_triggers " , " reverse_unordered_selects " , " secure_delete " , " short_column_names " , " synchronous " , " temp_store " , " temp_store_directory " , " schema_version " , " integrity_check " , " quick_check " ) as $y ) $H [ $y ] = $h -> result ( " PRAGMA $y " ); return $H ;} function
show_status (){ $H = array (); foreach ( get_vals ( " PRAGMA compile_options " ) as $Bf ){ list ( $y , $X ) = explode ( " = " , $Bf , 2 ); $H [ $y ] = $X ;} return $H ;} function
convert_field ( $o ){} function
unconvert_field ( $o , $H ){ return $H ;} function
support ( $Tc ){ return
preg_match ( '~^(columns|database|drop_col|dump|indexes|descidx|move_col|sql|status|table|trigger|variables|view|view_trigger)$~' , $Tc );} $x = " sqlite " ; $U = array ( " integer " => 0 , " real " => 0 , " numeric " => 0 , " text " => 0 , " blob " => 0 ); $Mh = array_keys ( $U ); $Ni = array (); $_f = array ( " = " , " < " , " > " , " <= " , " >= " , " != " , " LIKE " , " LIKE %% " , " IN " , " IS NULL " , " NOT LIKE " , " NOT IN " , " IS NOT NULL " , " SQL " ); $od = array ( " hex " , " length " , " lower " , " round " , " unixepoch " , " upper " ); $ud = array ( " avg " , " count " , " count distinct " , " group_concat " , " max " , " min " , " sum " ); $qc = array ( array (), array ( " integer|real|numeric " => " +/- " , " text " => " || " ,));} $ic [ " pgsql " ] = " PostgreSQL " ; if ( isset ( $_GET [ " pgsql " ])){ $mg = array ( " PgSQL " , " PDO_PgSQL " ); define ( " DRIVER " , " pgsql " ); if ( extension_loaded ( " pgsql " )){ class
2018-06-30 00:38:01 +02:00
Min_DB { var $extension = " PgSQL " , $_link , $_result , $_string , $_database = true , $server_info , $affected_rows , $error , $timeout ; function
2020-04-26 00:47:07 +02:00
_error ( $Ac , $n ){ if ( ini_bool ( " html_errors " )) $n = html_entity_decode ( strip_tags ( $n )); $n = preg_replace ( '~^[^:]*: ~' , '' , $n ); $this -> error = $n ;} function
connect ( $M , $V , $E ){ global $b ; $l = $b -> database (); set_error_handler ( array ( $this , '_error' )); $this -> _string = " host=' " . str_replace ( " : " , " ' port=' " , addcslashes ( $M , " ' \\ " )) . " ' user=' " . addcslashes ( $V , " ' \\ " ) . " ' password=' " . addcslashes ( $E , " ' \\ " ) . " ' " ; $this -> _link =@ pg_connect ( " $this->_string dbname=' " . ( $l != " " ? addcslashes ( $l , " ' \\ " ) : " postgres " ) . " ' " , PGSQL_CONNECT_FORCE_NEW ); if ( ! $this -> _link && $l != " " ){ $this -> _database = false ; $this -> _link =@ pg_connect ( " $this->_string dbname='postgres' " , PGSQL_CONNECT_FORCE_NEW );} restore_error_handler (); if ( $this -> _link ){ $dj = pg_version ( $this -> _link ); $this -> server_info = $dj [ " server " ]; pg_set_client_encoding ( $this -> _link , " UTF8 " );} return ( bool ) $this -> _link ;} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return " ' " . pg_escape_string ( $this -> _link , $P ) . " ' " ;} function
2020-04-26 00:47:07 +02:00
value ( $X , $o ){ return ( $o [ " type " ] == " bytea " ? pg_unescape_bytea ( $X ) : $X );} function
2018-12-25 21:50:48 +01:00
quoteBinary ( $P ){ return " ' " . pg_escape_bytea ( $this -> _link , $P ) . " ' " ;} function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ global $b ; if ( $j == $b -> database ()) return $this -> _database ; $H =@ pg_connect ( " $this->_string dbname=' " . addcslashes ( $j , " ' \\ " ) . " ' " , PGSQL_CONNECT_FORCE_NEW ); if ( $H ) $this -> _link = $H ; return $H ;} function
2018-04-01 23:34:54 +02:00
close (){ $this -> _link =@ pg_connect ( " $this->_string dbname='postgres' " );} function
2020-04-26 00:47:07 +02:00
query ( $F , $Hi = 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
Min_Result ( $G ); if ( $this -> timeout ){ $this -> timeout = 0 ; $this -> query ( " RESET statement_timeout " );} return $H ;} function
multi_query ( $F ){ return $this -> _result = $this -> query ( $F );} function
2018-04-01 23:34:54 +02:00
store_result (){ return $this -> _result ;} function
next_result (){ return
false ;} function
2020-04-26 00:47:07 +02:00
result ( $F , $o = 0 ){ $G = $this -> query ( $F ); if ( ! $G ||! $G -> num_rows ) return
2018-04-01 23:34:54 +02:00
false ; return
2020-04-26 00:47:07 +02:00
pg_fetch_result ( $G -> _result , 0 , $o );} function
2018-04-01 23:34:54 +02:00
warnings (){ return
h ( pg_last_notice ( $this -> _link ));}} class
Min_Result { var $_result , $_offset = 0 , $num_rows ; function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ $this -> _result = $G ; $this -> num_rows = pg_num_rows ( $G );} function
2018-04-01 23:34:54 +02:00
fetch_assoc (){ return
pg_fetch_assoc ( $this -> _result );} function
fetch_row (){ return
pg_fetch_row ( $this -> _result );} function
2020-04-26 00:47:07 +02:00
fetch_field (){ $e = $this -> _offset ++ ; $H = new
stdClass ; if ( function_exists ( 'pg_field_table' )) $H -> orgtable = pg_field_table ( $this -> _result , $e ); $H -> name = pg_field_name ( $this -> _result , $e ); $H -> orgname = $H -> name ; $H -> type = pg_field_type ( $this -> _result , $e ); $H -> charsetnr = ( $H -> type == " bytea " ? 63 : 0 ); return $H ;} function
2018-04-01 23:34:54 +02:00
__destruct (){ pg_free_result ( $this -> _result );}}} elseif ( extension_loaded ( " pdo_pgsql " )){ class
Min_DB
extends
2018-06-30 00:38:01 +02:00
Min_PDO { var $extension = " PDO_PgSQL " , $timeout ; function
2020-04-26 00:47:07 +02:00
connect ( $M , $V , $E ){ global $b ; $l = $b -> database (); $P = " pgsql:host=' " . str_replace ( " : " , " ' port=' " , addcslashes ( $M , " ' \\ " )) . " ' options='-c client_encoding=utf8' " ; $this -> dsn ( " $P dbname=' " . ( $l != " " ? addcslashes ( $l , " ' \\ " ) : " postgres " ) . " ' " , $V , $E ); return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ global $b ; return ( $b -> database () == $j );} function
quoteBinary ( $dh ){ return
q ( $dh );} function
query ( $F , $Hi = false ){ $H = parent :: query ( $F , $Hi ); if ( $this -> timeout ){ $this -> timeout = 0 ; parent :: query ( " RESET statement_timeout " );} return $H ;} function
2018-04-01 23:34:54 +02:00
warnings (){ return '' ;} function
close (){}}} class
Min_Driver
extends
Min_SQL { function
2020-04-26 00:47:07 +02:00
insertUpdate ( $Q , $J , $pg ){ global $h ; foreach ( $J
as $N ){ $Oi = array (); $Z = array (); foreach ( $N
as $y => $X ){ $Oi [] = " $y = $X " ; if ( isset ( $pg [ idf_unescape ( $y )])) $Z [] = " $y = $X " ;} if ( ! (( $Z && queries ( " UPDATE " . table ( $Q ) . " SET " . implode ( " , " , $Oi ) . " WHERE " . implode ( " AND " , $Z )) && $h -> affected_rows ) || queries ( " INSERT INTO " . table ( $Q ) . " ( " . implode ( " , " , array_keys ( $N )) . " ) VALUES ( " . implode ( " , " , $N ) . " ) " ))) return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
2020-04-26 00:47:07 +02:00
slowQuery ( $F , $ki ){ $this -> _conn -> query ( " SET statement_timeout = " . ( 1000 * $ki )); $this -> _conn -> timeout = 1000 * $ki ; return $F ;} function
convertSearch ( $u , $X , $o ){ return ( preg_match ( '~char|text' . ( ! preg_match ( '~LIKE~' , $X [ " op " ]) ? '|date|time(stamp)?|boolean|uuid|' . number_type () : '' ) . '~' , $o [ " type " ]) ? $u : " CAST( $u AS text) " );} function
quoteBinary ( $dh ){ return $this -> _conn -> quoteBinary ( $dh );} function
2018-04-01 23:34:54 +02:00
warnings (){ return $this -> _conn -> warnings ();} function
2020-04-26 00:47:07 +02:00
tableHelp ( $B ){ $Ae = array ( " information_schema " => " infoschema " , " pg_catalog " => " catalog " ,); $_ = $Ae [ $_GET [ " ns " ]]; if ( $_ ) return " $_ - " . str_replace ( " _ " , " - " , $B ) . " .html " ;}} function
idf_escape ( $u ){ return '"' . str_replace ( '"' , '""' , $u ) . '"' ;} function
table ( $u ){ return
idf_escape ( $u );} function
connect (){ global $b , $U , $Mh ; $h = new
Min_DB ; $Kb = $b -> credentials (); if ( $h -> connect ( $Kb [ 0 ], $Kb [ 1 ], $Kb [ 2 ])){ if ( min_version ( 9 , 0 , $h )){ $h -> query ( " SET application_name = 'Adminer' " ); if ( min_version ( 9.2 , 0 , $h )){ $Mh [ lang ( 25 )][] = " json " ; $U [ " json " ] = 4294967295 ; if ( min_version ( 9.4 , 0 , $h )){ $Mh [ lang ( 25 )][] = " jsonb " ; $U [ " jsonb " ] = 4294967295 ;}}} return $h ;} return $h -> error ;} function
2018-04-01 23:34:54 +02:00
get_databases (){ return
get_vals ( " SELECT datname FROM pg_database WHERE has_database_privilege(datname, 'CONNECT') ORDER BY datname " );} function
2020-04-26 00:47:07 +02:00
limit ( $F , $Z , $z , $C = 0 , $L = " " ){ return " $F $Z " . ( $z !== null ? $L . " LIMIT $z " . ( $C ? " OFFSET $C " : " " ) : " " );} function
limit1 ( $Q , $F , $Z , $L = " \n " ){ return ( preg_match ( '~^INTO~' , $F ) ? limit ( $F , $Z , 1 , 0 , $L ) : " $F " . ( is_view ( table_status1 ( $Q )) ? $Z : " WHERE ctid = (SELECT ctid FROM " . table ( $Q ) . $Z . $L . " LIMIT 1) " ));} function
db_collation ( $l , $qb ){ global $h ; return $h -> result ( " SHOW LC_COLLATE " );} function
2018-04-01 23:34:54 +02:00
engines (){ return
array ();} function
2018-12-25 21:50:48 +01:00
logged_user (){ global $h ; return $h -> result ( " SELECT user " );} function
2020-04-26 00:47:07 +02:00
tables_list (){ $F = " SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema() " ; if ( support ( 'materializedview' )) $F .= "
2018-04-01 23:34:54 +02:00
UNION ALL
SELECT matviewname , 'MATERIALIZED VIEW'
FROM pg_matviews
2020-04-26 00:47:07 +02:00
WHERE schemaname = current_schema () " ; $F .= "
2018-04-01 23:34:54 +02:00
ORDER BY 1 " ;return
2020-04-26 00:47:07 +02:00
get_key_vals ( $F );} function
count_tables ( $k ){ return
2018-04-01 23:34:54 +02:00
array ();} function
2020-04-26 00:47:07 +02:00
table_status ( $B = " " ){ $H = array (); foreach ( get_rows ( " SELECT c.relname AS \" Name \" , CASE c.relkind WHEN 'r' THEN 'table' WHEN 'm' THEN 'materialized view' ELSE 'view' END AS \" Engine \" , pg_relation_size(c.oid) AS \" Data_length \" , pg_total_relation_size(c.oid) - pg_relation_size(c.oid) AS \" Index_length \" , obj_description(c.oid, 'pg_class') AS \" Comment \" , " . ( min_version ( 12 ) ? " '' " : " CASE WHEN c.relhasoids THEN 'oid' ELSE '' END " ) . " AS \" Oid \" , c.reltuples as \" Rows \" , n.nspname
2018-04-01 23:34:54 +02:00
FROM pg_class c
JOIN pg_namespace n ON ( n . nspname = current_schema () AND n . oid = c . relnamespace )
WHERE relkind IN ( 'r' , 'm' , 'v' , 'f' )
2020-04-26 00:47:07 +02:00
" .( $B != " " ? " AND relname = " .q( $B ): " ORDER BY relname " ))as $I ) $H[$I["Name"] ]= $I ;return( $B != " " ? $H[$B] : $H );}function
2018-12-25 21:50:48 +01:00
is_view ( $R ){ return
in_array ( $R [ " Engine " ], array ( " view " , " materialized view " ));} function
fk_support ( $R ){ return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
fields ( $Q ){ $H = array (); $Da = array ( 'timestamp without time zone' => 'timestamp' , 'timestamp with time zone' => 'timestamptz' ,); $Hd = min_version ( 10 ) ? " (a.attidentity = 'd')::int " : '0' ; 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, col_description(c.oid, a.attnum) AS comment, $Hd AS identity
2018-04-01 23:34:54 +02:00
FROM pg_class c
JOIN pg_namespace n ON c . relnamespace = n . oid
JOIN pg_attribute a ON c . oid = a . attrelid
LEFT JOIN pg_attrdef d ON c . oid = d . adrelid AND a . attnum = d . adnum
2018-12-25 21:50:48 +01:00
WHERE c . relname = " .q( $Q ). "
2018-04-01 23:34:54 +02:00
AND n . nspname = current_schema ()
AND NOT a . attisdropped
AND a . attnum > 0
2020-04-26 00:47:07 +02:00
ORDER BY a . attnum " )as $I ) { preg_match('~([^([]+)( \ ((.*) \ ))?([a-z ]+)?(( \ [[0-9]*])*) $ ~', $I["full_type"] , $A );list(, $T , $ye , $I["length"] , $xa , $Ga )= $A ; $I["length"] .= $Ga ; $fb = $T . $xa ;if(isset( $Da[$fb] )) { $I [ " type " ] = $Da [ $fb ]; $I [ " full_type " ] = $I [ " type " ] . $ye . $Ga ; } else { $I [ " type " ] = $T ; $I [ " full_type " ] = $I [ " type " ] . $ye . $xa . $Ga ; } if( $I['identity'] ) $I['default'] ='GENERATED BY DEFAULT AS IDENTITY'; $I["null"] =! $I["attnotnull"] ; $I["auto_increment"] = $I['identity'] ||preg_match('~^nextval \ (~i', $I["default"] ); $I["privileges"] =array( " insert " =>1, " select " =>1, " update " =>1);if(preg_match('~(.+)::[^)]+(.*)~', $I["default"] , $A )) $I["default"] =( $A[1] == " NULL " ?null:(( $A[1] [0]== " ' " ?idf_unescape( $A[1] ): $A[1] ). $A[2] )); $H[$I["field"] ]= $I ;}return $H ;}function
indexes ( $Q , $i = null ){ global $h ; if ( ! is_object ( $i )) $i = $h ; $H = array (); $Vh = $i -> result ( " SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = " . q ( $Q )); $f = get_key_vals ( " SELECT attnum, attname FROM pg_attribute WHERE attrelid = $Vh AND attnum > 0 " , $i ); foreach ( get_rows ( " SELECT relname, indisunique::int, indisprimary::int, indkey, indoption , (indpred IS NOT NULL)::int as indispartial FROM pg_index i, pg_class ci WHERE i.indrelid = $Vh AND ci.oid = i.indexrelid " , $i ) as $I ){ $Ng = $I [ " relname " ]; $H [ $Ng ][ " type " ] = ( $I [ " indispartial " ] ? " INDEX " : ( $I [ " indisprimary " ] ? " PRIMARY " : ( $I [ " indisunique " ] ? " UNIQUE " : " INDEX " ))); $H [ $Ng ][ " columns " ] = array (); foreach ( explode ( " " , $I [ " indkey " ]) as $Rd ) $H [ $Ng ][ " columns " ][] = $f [ $Rd ]; $H [ $Ng ][ " descs " ] = array (); foreach ( explode ( " " , $I [ " indoption " ]) as $Sd ) $H [ $Ng ][ " descs " ][] = ( $Sd & 1 ? '1' : null ); $H [ $Ng ][ " lengths " ] = array ();} return $H ;} function
foreign_keys ( $Q ){ global $vf ; $H = array (); foreach ( get_rows ( " SELECT conname, condeferrable::int AS deferrable, pg_get_constraintdef(oid) AS definition
2018-04-01 23:34:54 +02:00
FROM pg_constraint
2018-12-25 21:50:48 +01:00
WHERE conrelid = ( SELECT pc . oid FROM pg_class AS pc INNER JOIN pg_namespace AS pn ON ( pn . oid = pc . relnamespace ) WHERE pc . relname = " .q( $Q ). " AND pn . nspname = current_schema ())
2018-04-01 23:34:54 +02:00
AND contype = 'f' :: char
2020-04-26 00:47:07 +02:00
ORDER BY conkey , conname " )as $I ) { if(preg_match('~FOREIGN KEY \ s* \ ((.+) \ ) \ s*REFERENCES (.+) \ ((.+) \ )(.*) $ ~iA', $I['definition'] , $A )) { $I [ 'source' ] = array_map ( 'trim' , explode ( ',' , $A [ 1 ])); if ( preg_match ( '~^(("([^"]|"")+"|[^"]+)\.)?"?("([^"]|"")+"|[^"]+)$~' , $A [ 2 ], $He )){ $I [ 'ns' ] = str_replace ( '""' , '"' , preg_replace ( '~^"(.+)"$~' , '\1' , $He [ 2 ])); $I [ 'table' ] = str_replace ( '""' , '"' , preg_replace ( '~^"(.+)"$~' , '\1' , $He [ 4 ])); } $I['target'] =array_map('trim',explode(',', $A[3] )); $I['on_delete'] =(preg_match( " ~ ON DELETE ( $vf ) ~ " , $A[4] , $He )? $He[1] :'NO ACTION'); $I['on_update'] =(preg_match( " ~ ON UPDATE ( $vf ) ~ " , $A[4] , $He )? $He[1] :'NO ACTION'); $H[$I['conname'] ]= $I ;}}return $H ;}function
view ( $B ){ global $h ; return
array ( " select " => trim ( $h -> result ( " SELECT pg_get_viewdef( " . $h -> result ( " SELECT oid FROM pg_class WHERE relname = " . q ( $B )) . " ) " )));} function
2018-04-01 23:34:54 +02:00
collations (){ return
array ();} function
2020-04-26 00:47:07 +02:00
information_schema ( $l ){ return ( $l == " information_schema " );} function
error (){ global $h ; $H = h ( $h -> error ); if ( preg_match ( '~^(.*\n)?([^\n]*)\n( *)\^(\n.*)?$~s' , $H , $A )) $H = $A [ 1 ] . preg_replace ( '~((?:[^&]|&[^;]*;){' . strlen ( $A [ 3 ]) . '})(.*)~' , '\1<b>\2</b>' , $A [ 2 ]) . $A [ 4 ]; return
nl_br ( $H );} function
create_database ( $l , $d ){ return
queries ( " CREATE DATABASE " . idf_escape ( $l ) . ( $d ? " ENCODING " . idf_escape ( $d ) : " " ));} function
drop_databases ( $k ){ global $h ; $h -> close (); return
apply_queries ( " DROP DATABASE " , $k , 'idf_escape' );} function
rename_database ( $B , $d ){ return
queries ( " ALTER DATABASE " . idf_escape ( DB ) . " RENAME TO " . idf_escape ( $B ));} function
2018-04-01 23:34:54 +02:00
auto_increment (){ return " " ;} function
2020-04-26 00:47:07 +02:00
alter_table ( $Q , $B , $p , $gd , $vb , $yc , $d , $Na , $Zf ){ $c = array (); $_g = array (); if ( $Q != " " && $Q != $B ) $_g [] = " ALTER TABLE " . table ( $Q ) . " RENAME TO " . table ( $B ); foreach ( $p
as $o ){ $e = idf_escape ( $o [ 0 ]); $X = $o [ 1 ]; if ( ! $X ) $c [] = " DROP $e " ; else { $Zi = $X [ 5 ]; unset ( $X [ 5 ]); if ( isset ( $X [ 6 ]) && $o [ 0 ] == " " ) $X [ 1 ] = ( $X [ 1 ] == " bigint " ? " big " : " " ) . " serial " ; if ( $o [ 0 ] == " " ) $c [] = ( $Q != " " ? " ADD " : " " ) . implode ( $X ); else { if ( $e != $X [ 0 ]) $_g [] = " ALTER TABLE " . table ( $B ) . " RENAME $e TO $X[0] " ; $c [] = " ALTER $e TYPE $X[1] " ; if ( ! $X [ 6 ]){ $c [] = " ALTER $e " . ( $X [ 3 ] ? " SET $X[3] " : " DROP DEFAULT " ); $c [] = " ALTER $e " . ( $X [ 2 ] == " NULL " ? " DROP NOT " : " SET " ) . $X [ 2 ];}} if ( $o [ 0 ] != " " || $Zi != " " ) $_g [] = " COMMENT ON COLUMN " . table ( $B ) . " . $X[0] IS " . ( $Zi != " " ? substr ( $Zi , 9 ) : " '' " );}} $c = array_merge ( $c , $gd ); if ( $Q == " " ) array_unshift ( $_g , " CREATE TABLE " . table ( $B ) . " ( \n " . implode ( " , \n " , $c ) . " \n ) " ); elseif ( $c ) array_unshift ( $_g , " ALTER TABLE " . table ( $Q ) . " \n " . implode ( " , \n " , $c )); if ( $Q != " " || $vb != " " ) $_g [] = " COMMENT ON TABLE " . table ( $B ) . " IS " . q ( $vb ); if ( $Na != " " ){} foreach ( $_g
as $F ){ if ( ! queries ( $F )) return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
2020-04-26 00:47:07 +02:00
alter_indexes ( $Q , $c ){ $Hb = array (); $jc = array (); $_g = array (); foreach ( $c
as $X ){ if ( $X [ 0 ] != " INDEX " ) $Hb [] = ( $X [ 2 ] == " DROP " ? " \n DROP CONSTRAINT " . idf_escape ( $X [ 1 ]) : " \n ADD " . ( $X [ 1 ] != " " ? " CONSTRAINT " . idf_escape ( $X [ 1 ]) : " " ) . " $X[0] " . ( $X [ 0 ] == " PRIMARY " ? " KEY " : " " ) . " ( " . implode ( " , " , $X [ 2 ]) . " ) " ); elseif ( $X [ 2 ] == " DROP " ) $jc [] = idf_escape ( $X [ 1 ]); else $_g [] = " CREATE INDEX " . idf_escape ( $X [ 1 ] != " " ? $X [ 1 ] : uniqid ( $Q . " _ " )) . " ON " . table ( $Q ) . " ( " . implode ( " , " , $X [ 2 ]) . " ) " ;} if ( $Hb ) array_unshift ( $_g , " ALTER TABLE " . table ( $Q ) . implode ( " , " , $Hb )); if ( $jc ) array_unshift ( $_g , " DROP INDEX " . implode ( " , " , $jc )); foreach ( $_g
as $F ){ if ( ! queries ( $F )) return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
2018-12-25 21:50:48 +01:00
truncate_tables ( $S ){ return
queries ( " TRUNCATE " . implode ( " , " , array_map ( 'table' , $S ))); return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
drop_views ( $fj ){ return
drop_tables ( $fj );} function
2018-12-25 21:50:48 +01:00
drop_tables ( $S ){ foreach ( $S
2020-04-26 00:47:07 +02:00
as $Q ){ $O = table_status ( $Q ); if ( ! queries ( " DROP " . strtoupper ( $O [ " Engine " ]) . " " . table ( $Q ))) return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
2020-04-26 00:47:07 +02:00
move_tables ( $S , $fj , $ci ){ foreach ( array_merge ( $S , $fj ) as $Q ){ $O = table_status ( $Q ); if ( ! queries ( " ALTER " . strtoupper ( $O [ " Engine " ]) . " " . table ( $Q ) . " SET SCHEMA " . idf_escape ( $ci ))) return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
2020-04-26 00:47:07 +02:00
trigger ( $B , $Q = null ){ if ( $B == " " ) return
array ( " Statement " => " EXECUTE PROCEDURE () " ); if ( $Q === null ) $Q = $_GET [ 'trigger' ]; $J = get_rows ( 'SELECT t.trigger_name AS "Trigger", t.action_timing AS "Timing", (SELECT STRING_AGG(event_manipulation, \' OR \') FROM information_schema.triggers WHERE event_object_table = t.event_object_table AND trigger_name = t.trigger_name ) AS "Events", t.event_manipulation AS "Event", \'FOR EACH \' || t.action_orientation AS "Type", t.action_statement AS "Statement" FROM information_schema.triggers t WHERE t.event_object_table = ' . q ( $Q ) . ' AND t.trigger_name = ' . q ( $B )); return
reset ( $J );} function
triggers ( $Q ){ $H = array (); foreach ( get_rows ( " SELECT * FROM information_schema.triggers WHERE event_object_table = " . q ( $Q )) as $I ) $H [ $I [ " trigger_name " ]] = array ( $I [ " action_timing " ], $I [ " event_manipulation " ]); return $H ;} function
2018-04-01 23:34:54 +02:00
trigger_options (){ return
array ( " Timing " => array ( " BEFORE " , " AFTER " ), " Event " => array ( " INSERT " , " UPDATE " , " DELETE " ), " Type " => array ( " FOR EACH ROW " , " FOR EACH STATEMENT " ),);} function
2020-04-26 00:47:07 +02:00
routine ( $B , $T ){ $J = get_rows ( ' SELECT routine_definition AS definition , LOWER ( external_language ) AS language , *
2018-04-01 23:34:54 +02:00
FROM information_schema . routines
2020-04-26 00:47:07 +02:00
WHERE routine_schema = current_schema () AND specific_name = '.q($B));$H=$J[0];$H["returns"]=array("type"=>$H["type_udt_name"]);$H["fields"]=get_rows(' SELECT parameter_name AS field , data_type AS type , character_maximum_length AS length , parameter_mode AS inout
2018-04-01 23:34:54 +02:00
FROM information_schema . parameters
2020-04-26 00:47:07 +02:00
WHERE specific_schema = current_schema () AND specific_name = '.q($B).'
ORDER BY ordinal_position ' ); return $H ;} function
2018-04-01 23:34:54 +02:00
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
2020-04-26 00:47:07 +02:00
routine_id ( $B , $I ){ $H = array (); foreach ( $I [ " fields " ] as $o ) $H [] = $o [ " type " ]; return
idf_escape ( $B ) . " ( " . implode ( " , " , $H ) . " ) " ;} function
2018-04-01 23:34:54 +02:00
last_id (){ return
0 ;} function
2020-04-26 00:47:07 +02:00
explain ( $h , $F ){ return $h -> query ( " EXPLAIN $F " );} function
found_rows ( $R , $Z ){ global $h ; if ( preg_match ( " ~ rows=([0-9]+)~ " , $h -> result ( " EXPLAIN SELECT * FROM " . idf_escape ( $R [ " Name " ]) . ( $Z ? " WHERE " . implode ( " AND " , $Z ) : " " )), $Mg )) return $Mg [ 1 ]; return
2018-04-01 23:34:54 +02:00
false ;} function
types (){ return
get_vals ( " SELECT typname
FROM pg_type
WHERE typnamespace = ( SELECT oid FROM pg_namespace WHERE nspname = current_schema ())
AND typtype IN ( 'b' , 'd' , 'e' )
AND typelem = 0 " );}function
schemas (){ return
get_vals ( " SELECT nspname FROM pg_namespace ORDER BY nspname " );} function
2018-12-25 21:50:48 +01:00
get_schema (){ global $h ; return $h -> result ( " SELECT current_schema() " );} function
2020-04-26 00:47:07 +02:00
set_schema ( $fh , $i = null ){ global $h , $U , $Mh ; if ( ! $i ) $i = $h ; $H = $i -> query ( " SET search_path TO " . idf_escape ( $fh )); foreach ( types () as $T ){ if ( ! isset ( $U [ $T ])){ $U [ $T ] = 0 ; $Mh [ lang ( 26 )][] = $T ;}} return $H ;} function
create_sql ( $Q , $Na , $Nh ){ global $h ; $H = '' ; $Vg = array (); $ph = array (); $O = table_status ( $Q ); if ( is_view ( $O )){ $ej = view ( $Q ); return
rtrim ( " CREATE VIEW " . idf_escape ( $Q ) . " AS $ej[select] " , " ; " );} $p = fields ( $Q ); $w = indexes ( $Q ); ksort ( $w ); $dd = foreign_keys ( $Q ); ksort ( $dd ); if ( ! $O || empty ( $p )) return
false ; $H = " CREATE TABLE " . idf_escape ( $O [ 'nspname' ]) . " . " . idf_escape ( $O [ 'Name' ]) . " ( \n " ; foreach ( $p
as $Vc => $o ){ $Wf = idf_escape ( $o [ 'field' ]) . ' ' . $o [ 'full_type' ] . default_value ( $o ) . ( $o [ 'attnotnull' ] ? " NOT NULL " : " " ); $Vg [] = $Wf ; if ( preg_match ( '~nextval\(\'([^\']+)\'\)~' , $o [ 'default' ], $Ie )){ $oh = $Ie [ 1 ]; $Ch = reset ( get_rows ( min_version ( 10 ) ? " SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = " . q ( $oh ) : " SELECT * FROM $oh " )); $ph [] = ( $Nh == " DROP+CREATE " ? " DROP SEQUENCE IF EXISTS $oh ; \n " : " " ) . " CREATE SEQUENCE $oh INCREMENT $Ch[increment_by] MINVALUE $Ch[min_value] MAXVALUE $Ch[max_value] START " . ( $Na ? $Ch [ 'last_value' ] : 1 ) . " CACHE $Ch[cache_value] ; " ;}} if ( ! empty ( $ph )) $H = implode ( " \n \n " , $ph ) . " \n \n $H " ; foreach ( $w
as $Md => $v ){ switch ( $v [ 'type' ]){ case 'UNIQUE' : $Vg [] = " CONSTRAINT " . idf_escape ( $Md ) . " UNIQUE ( " . implode ( ', ' , array_map ( 'idf_escape' , $v [ 'columns' ])) . " ) " ; break ; case 'PRIMARY' : $Vg [] = " CONSTRAINT " . idf_escape ( $Md ) . " PRIMARY KEY ( " . implode ( ', ' , array_map ( 'idf_escape' , $v [ 'columns' ])) . " ) " ; break ;}} foreach ( $dd
as $cd => $bd ) $Vg [] = " CONSTRAINT " . idf_escape ( $cd ) . " $bd[definition] " . ( $bd [ 'deferrable' ] ? 'DEFERRABLE' : 'NOT DEFERRABLE' ); $H .= implode ( " , \n " , $Vg ) . " \n ) WITH (oids = " . ( $O [ 'Oid' ] ? 'true' : 'false' ) . " ); " ; foreach ( $w
as $Md => $v ){ if ( $v [ 'type' ] == 'INDEX' ){ $f = array (); foreach ( $v [ 'columns' ] as $y => $X ) $f [] = idf_escape ( $X ) . ( $v [ 'descs' ][ $y ] ? " DESC " : " " ); $H .= " \n \n CREATE INDEX " . idf_escape ( $Md ) . " ON " . idf_escape ( $O [ 'nspname' ]) . " . " . idf_escape ( $O [ 'Name' ]) . " USING btree ( " . implode ( ', ' , $f ) . " ); " ;}} if ( $O [ 'Comment' ]) $H .= " \n \n COMMENT ON TABLE " . idf_escape ( $O [ 'nspname' ]) . " . " . idf_escape ( $O [ 'Name' ]) . " IS " . q ( $O [ 'Comment' ]) . " ; " ; foreach ( $p
as $Vc => $o ){ if ( $o [ 'comment' ]) $H .= " \n \n COMMENT ON COLUMN " . idf_escape ( $O [ 'nspname' ]) . " . " . idf_escape ( $O [ 'Name' ]) . " . " . idf_escape ( $Vc ) . " IS " . q ( $o [ 'comment' ]) . " ; " ;} return
rtrim ( $H , ';' );} function
2018-12-25 21:50:48 +01:00
truncate_sql ( $Q ){ return " TRUNCATE " . table ( $Q );} function
2020-04-26 00:47:07 +02:00
trigger_sql ( $Q ){ $O = table_status ( $Q ); $H = " " ; foreach ( triggers ( $Q ) as $Ai => $_i ){ $Bi = trigger ( $Ai , $O [ 'Name' ]); $H .= " \n CREATE TRIGGER " . idf_escape ( $Bi [ 'Trigger' ]) . " $Bi[Timing] $Bi[Events] ON " . idf_escape ( $O [ " nspname " ]) . " . " . idf_escape ( $O [ 'Name' ]) . " $Bi[Type] $Bi[Statement] ;; \n " ;} return $H ;} function
use_sql ( $j ){ return " \ connect " . idf_escape ( $j );} function
2018-04-01 23:34:54 +02:00
show_variables (){ return
get_key_vals ( " SHOW ALL " );} function
process_list (){ return
get_rows ( " SELECT * FROM pg_stat_activity ORDER BY " . ( min_version ( 9.2 ) ? " pid " : " procpid " ));} function
show_status (){} function
2020-04-26 00:47:07 +02:00
convert_field ( $o ){} function
unconvert_field ( $o , $H ){ return $H ;} function
support ( $Tc ){ return
preg_match ( '~^(database|table|columns|sql|indexes|descidx|comment|view|' . ( min_version ( 9.3 ) ? 'materializedview|' : '' ) . 'scheme|routine|processlist|sequence|trigger|type|variables|drop_col|kill|dump)$~' , $Tc );} function
2018-04-01 23:34:54 +02:00
kill_process ( $X ){ return
queries ( " SELECT pg_terminate_backend( " . number ( $X ) . " ) " );} function
connection_id (){ return " SELECT pg_backend_pid() " ;} function
2020-04-26 00:47:07 +02:00
max_connections (){ global $h ; return $h -> result ( " SHOW max_connections " );} $x = " pgsql " ; $U = array (); $Mh = array (); foreach ( array ( lang ( 27 ) => array ( " smallint " => 5 , " integer " => 10 , " bigint " => 19 , " boolean " => 1 , " numeric " => 0 , " real " => 7 , " double precision " => 16 , " money " => 20 ), lang ( 28 ) => array ( " date " => 13 , " time " => 17 , " timestamp " => 20 , " timestamptz " => 21 , " interval " => 0 ), lang ( 25 ) => array ( " character " => 0 , " character varying " => 0 , " text " => 0 , " tsquery " => 0 , " tsvector " => 0 , " uuid " => 0 , " xml " => 0 ), lang ( 29 ) => array ( " bit " => 0 , " bit varying " => 0 , " bytea " => 0 ), lang ( 30 ) => array ( " cidr " => 43 , " inet " => 43 , " macaddr " => 17 , " txid_snapshot " => 0 ), lang ( 31 ) => array ( " box " => 0 , " circle " => 0 , " line " => 0 , " lseg " => 0 , " path " => 0 , " point " => 0 , " polygon " => 0 ),) as $y => $X ){ $U += $X ; $Mh [ $y ] = array_keys ( $X );} $Ni = array (); $_f = array ( " = " , " < " , " > " , " <= " , " >= " , " != " , " ~ " , " !~ " , " LIKE " , " LIKE %% " , " ILIKE " , " ILIKE %% " , " IN " , " IS NULL " , " NOT LIKE " , " NOT IN " , " IS NOT NULL " ); $od = array ( " char_length " , " lower " , " round " , " to_hex " , " to_timestamp " , " upper " ); $ud = array ( " avg " , " count " , " count distinct " , " max " , " min " , " sum " ); $qc = array ( array ( " char " => " md5 " , " date|time " => " now " ,), array ( number_type () => " +/- " , " date|time " => " + interval/- interval " , " char|text " => " || " ,));} $ic [ " oracle " ] = " Oracle (beta) " ; if ( isset ( $_GET [ " oracle " ])){ $mg = array ( " OCI8 " , " PDO_OCI " ); define ( " DRIVER " , " oracle " ); if ( extension_loaded ( " oci8 " )){ class
2018-04-01 23:34:54 +02:00
Min_DB { var $extension = " oci8 " , $_link , $_result , $server_info , $affected_rows , $errno , $error ; function
2020-04-26 00:47:07 +02:00
_error ( $Ac , $n ){ if ( ini_bool ( " html_errors " )) $n = html_entity_decode ( strip_tags ( $n )); $n = preg_replace ( '~^[^:]*: ~' , '' , $n ); $this -> error = $n ;} function
connect ( $M , $V , $E ){ $this -> _link =@ oci_new_connect ( $V , $E , $M , " AL32UTF8 " ); if ( $this -> _link ){ $this -> server_info = oci_server_version ( $this -> _link ); return
true ;} $n = oci_error (); $this -> error = $n [ " message " ]; return
2018-04-01 23:34:54 +02:00
false ;} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return " ' " . str_replace ( " ' " , " '' " , $P ) . " ' " ;} function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
query ( $F , $Hi = false ){ $G = oci_parse ( $this -> _link , $F ); $this -> error = " " ; if ( ! $G ){ $n = oci_error ( $this -> _link ); $this -> errno = $n [ " code " ]; $this -> error = $n [ " message " ]; return
false ;} set_error_handler ( array ( $this , '_error' )); $H =@ oci_execute ( $G ); restore_error_handler (); if ( $H ){ if ( oci_num_fields ( $G )) return
2018-04-01 23:34:54 +02:00
new
2020-04-26 00:47:07 +02:00
Min_Result ( $G ); $this -> affected_rows = oci_num_rows ( $G );} return $H ;} function
multi_query ( $F ){ return $this -> _result = $this -> query ( $F );} function
2018-04-01 23:34:54 +02:00
store_result (){ return $this -> _result ;} function
next_result (){ return
false ;} function
2020-04-26 00:47:07 +02:00
result ( $F , $o = 1 ){ $G = $this -> query ( $F ); if ( ! is_object ( $G ) ||! oci_fetch ( $G -> _result )) return
2018-04-01 23:34:54 +02:00
false ; return
2020-04-26 00:47:07 +02:00
oci_result ( $G -> _result , $o );}} class
2018-04-01 23:34:54 +02:00
Min_Result { var $_result , $_offset = 1 , $num_rows ; function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ $this -> _result = $G ;} function
_convert ( $I ){ foreach (( array ) $I
as $y => $X ){ if ( is_a ( $X , 'OCI-Lob' )) $I [ $y ] = $X -> load ();} return $I ;} function
2018-04-01 23:34:54 +02:00
fetch_assoc (){ return $this -> _convert ( oci_fetch_assoc ( $this -> _result ));} function
fetch_row (){ return $this -> _convert ( oci_fetch_row ( $this -> _result ));} function
2020-04-26 00:47:07 +02:00
fetch_field (){ $e = $this -> _offset ++ ; $H = new
stdClass ; $H -> name = oci_field_name ( $this -> _result , $e ); $H -> orgname = $H -> name ; $H -> type = oci_field_type ( $this -> _result , $e ); $H -> charsetnr = ( preg_match ( " ~raw|blob|bfile~ " , $H -> type ) ? 63 : 0 ); return $H ;} function
2018-04-01 23:34:54 +02:00
__destruct (){ oci_free_statement ( $this -> _result );}}} elseif ( extension_loaded ( " pdo_oci " )){ class
Min_DB
extends
Min_PDO { var $extension = " PDO_OCI " ; function
2020-04-26 00:47:07 +02:00
connect ( $M , $V , $E ){ $this -> dsn ( " oci:dbname=// $M ;charset=AL32UTF8 " , $V , $E ); return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ return
2018-04-01 23:34:54 +02:00
true ;}}} class
Min_Driver
extends
Min_SQL { function
begin (){ return
true ;}} function
2020-04-26 00:47:07 +02:00
idf_escape ( $u ){ return '"' . str_replace ( '"' , '""' , $u ) . '"' ;} function
table ( $u ){ return
idf_escape ( $u );} function
2018-12-25 21:50:48 +01:00
connect (){ global $b ; $h = new
2020-04-26 00:47:07 +02:00
Min_DB ; $Kb = $b -> credentials (); if ( $h -> connect ( $Kb [ 0 ], $Kb [ 1 ], $Kb [ 2 ])) return $h ; return $h -> error ;} function
2018-04-01 23:34:54 +02:00
get_databases (){ return
get_vals ( " SELECT tablespace_name FROM user_tablespaces " );} function
2020-04-26 00:47:07 +02:00
limit ( $F , $Z , $z , $C = 0 , $L = " " ){ return ( $C ? " * FROM (SELECT t.*, rownum AS rnum FROM (SELECT $F $Z ) t WHERE rownum <= " . ( $z + $C ) . " ) WHERE rnum > $C " : ( $z !== null ? " * FROM (SELECT $F $Z ) WHERE rownum <= " . ( $z + $C ) : " $F $Z " ));} function
limit1 ( $Q , $F , $Z , $L = " \n " ){ return " $F $Z " ;} function
db_collation ( $l , $qb ){ global $h ; return $h -> result ( " SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET' " );} function
2018-04-01 23:34:54 +02:00
engines (){ return
array ();} function
2018-12-25 21:50:48 +01:00
logged_user (){ global $h ; return $h -> result ( " SELECT USER FROM DUAL " );} function
2018-04-01 23:34:54 +02:00
tables_list (){ return
get_key_vals ( " SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = " . q ( DB ) . "
UNION SELECT view_name , 'view' FROM user_views
ORDER BY 1 " );}function
2020-04-26 00:47:07 +02:00
count_tables ( $k ){ return
2018-04-01 23:34:54 +02:00
array ();} function
2020-04-26 00:47:07 +02:00
table_status ( $B = " " ){ $H = array (); $hh = q ( $B ); 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 ( DB ) . ( $B != " " ? " AND table_name = $hh " : " " ) . "
UNION SELECT view_name , 'view' , 0 , 0 FROM user_views " .( $B != " " ? " WHERE view_name = $hh " : " " ). "
ORDER BY 1 " )as $I ) { if( $B != " " )return $I ; $H[$I["Name"] ]= $I ;}return $H ;}function
2018-12-25 21:50:48 +01:00
is_view ( $R ){ return $R [ " Engine " ] == " view " ;} function
fk_support ( $R ){ return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
fields ( $Q ){ $H = array (); foreach ( get_rows ( " SELECT * FROM all_tab_columns WHERE table_name = " . q ( $Q ) . " ORDER BY column_id " ) as $I ){ $T = $I [ " DATA_TYPE " ]; $ye = " $I[DATA_PRECISION] , $I[DATA_SCALE] " ; if ( $ye == " , " ) $ye = $I [ " DATA_LENGTH " ]; $H [ $I [ " COLUMN_NAME " ]] = array ( " field " => $I [ " COLUMN_NAME " ], " full_type " => $T . ( $ye ? " ( $ye ) " : " " ), " type " => strtolower ( $T ), " length " => $ye , " default " => $I [ " DATA_DEFAULT " ], " null " => ( $I [ " NULLABLE " ] == " Y " ), " privileges " => array ( " insert " => 1 , " select " => 1 , " update " => 1 ),);} return $H ;} function
indexes ( $Q , $i = null ){ $H = array (); foreach ( get_rows ( " SELECT uic.*, uc.constraint_type
2018-04-01 23:34:54 +02:00
FROM user_ind_columns uic
LEFT JOIN user_constraints uc ON uic . index_name = uc . constraint_name AND uic . table_name = uc . table_name
2018-12-25 21:50:48 +01:00
WHERE uic . table_name = " .q( $Q ). "
2020-04-26 00:47:07 +02:00
ORDER BY uc . constraint_type , uic . column_position " , $i )as $I ) { $Md = $I [ " INDEX_NAME " ]; $H [ $Md ][ " type " ] = ( $I [ " CONSTRAINT_TYPE " ] == " P " ? " PRIMARY " : ( $I [ " CONSTRAINT_TYPE " ] == " U " ? " UNIQUE " : " INDEX " )); $H [ $Md ][ " columns " ][] = $I [ " COLUMN_NAME " ]; $H [ $Md ][ " lengths " ][] = ( $I [ " CHAR_LENGTH " ] && $I [ " CHAR_LENGTH " ] != $I [ " COLUMN_LENGTH " ] ? $I [ " CHAR_LENGTH " ] : null ); $H [ $Md ][ " descs " ][] = ( $I [ " DESCEND " ] ? '1' : null ); } return $H ;}function
view ( $B ){ $J = get_rows ( 'SELECT text "select" FROM user_views WHERE view_name = ' . q ( $B )); return
reset ( $J );} function
2018-04-01 23:34:54 +02:00
collations (){ return
array ();} function
2020-04-26 00:47:07 +02:00
information_schema ( $l ){ return
2018-04-01 23:34:54 +02:00
false ;} function
2018-12-25 21:50:48 +01:00
error (){ global $h ; return
h ( $h -> error );} function
2020-04-26 00:47:07 +02:00
explain ( $h , $F ){ $h -> query ( " EXPLAIN PLAN FOR $F " ); return $h -> query ( " SELECT * FROM plan_table " );} function
2018-12-25 21:50:48 +01:00
found_rows ( $R , $Z ){} function
2020-04-26 00:47:07 +02:00
alter_table ( $Q , $B , $p , $gd , $vb , $yc , $d , $Na , $Zf ){ $c = $jc = array (); foreach ( $p
as $o ){ $X = $o [ 1 ]; if ( $X && $o [ 0 ] != " " && idf_escape ( $o [ 0 ]) != $X [ 0 ]) queries ( " ALTER TABLE " . table ( $Q ) . " RENAME COLUMN " . idf_escape ( $o [ 0 ]) . " TO $X[0] " ); if ( $X ) $c [] = ( $Q != " " ? ( $o [ 0 ] != " " ? " MODIFY ( " : " ADD ( " ) : " " ) . implode ( $X ) . ( $Q != " " ? " ) " : " " ); else $jc [] = idf_escape ( $o [ 0 ]);} if ( $Q == " " ) return
queries ( " CREATE TABLE " . table ( $B ) . " ( \n " . implode ( " , \n " , $c ) . " \n ) " ); return ( ! $c || queries ( " ALTER TABLE " . table ( $Q ) . " \n " . implode ( " \n " , $c ))) && ( ! $jc || queries ( " ALTER TABLE " . table ( $Q ) . " DROP ( " . implode ( " , " , $jc ) . " ) " )) && ( $Q == $B || queries ( " ALTER TABLE " . table ( $Q ) . " RENAME TO " . table ( $B )));} function
foreign_keys ( $Q ){ $H = array (); $F = " SELECT c_list.CONSTRAINT_NAME as NAME,
2018-04-01 23:34:54 +02:00
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'
2020-04-26 00:47:07 +02:00
AND c_src . TABLE_NAME = " .q( $Q );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
2018-12-25 21:50:48 +01:00
truncate_tables ( $S ){ return
apply_queries ( " TRUNCATE TABLE " , $S );} function
2020-04-26 00:47:07 +02:00
drop_views ( $fj ){ return
apply_queries ( " DROP VIEW " , $fj );} function
2018-12-25 21:50:48 +01:00
drop_tables ( $S ){ return
apply_queries ( " DROP TABLE " , $S );} function
2018-04-01 23:34:54 +02:00
last_id (){ return
0 ;} function
schemas (){ return
get_vals ( " SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX')) " );} function
2018-12-25 21:50:48 +01:00
get_schema (){ global $h ; return $h -> result ( " SELECT sys_context('USERENV', 'SESSION_USER') FROM dual " );} function
2020-04-26 00:47:07 +02:00
set_schema ( $gh , $i = null ){ global $h ; if ( ! $i ) $i = $h ; return $i -> query ( " ALTER SESSION SET CURRENT_SCHEMA = " . idf_escape ( $gh ));} function
2018-04-01 23:34:54 +02:00
show_variables (){ return
get_key_vals ( 'SELECT name, display_value FROM v$parameter' );} 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
2020-04-26 00:47:07 +02:00
show_status (){ $J = get_rows ( 'SELECT * FROM v$instance' ); return
reset ( $J );} function
convert_field ( $o ){} function
unconvert_field ( $o , $H ){ return $H ;} function
support ( $Tc ){ return
preg_match ( '~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view|view_trigger)$~' , $Tc );} $x = " oracle " ; $U = array (); $Mh = array (); foreach ( array ( lang ( 27 ) => array ( " number " => 38 , " binary_float " => 12 , " binary_double " => 21 ), lang ( 28 ) => array ( " date " => 10 , " timestamp " => 29 , " interval year " => 12 , " interval day " => 28 ), lang ( 25 ) => array ( " char " => 2000 , " varchar2 " => 4000 , " nchar " => 2000 , " nvarchar2 " => 4000 , " clob " => 4294967295 , " nclob " => 4294967295 ), lang ( 29 ) => array ( " raw " => 2000 , " long raw " => 2147483648 , " blob " => 4294967295 , " bfile " => 4294967296 ),) as $y => $X ){ $U += $X ; $Mh [ $y ] = array_keys ( $X );} $Ni = array (); $_f = array ( " = " , " < " , " > " , " <= " , " >= " , " != " , " LIKE " , " LIKE %% " , " IN " , " IS NULL " , " NOT LIKE " , " NOT REGEXP " , " NOT IN " , " IS NOT NULL " , " SQL " ); $od = array ( " length " , " lower " , " round " , " upper " ); $ud = array ( " avg " , " count " , " count distinct " , " max " , " min " , " sum " ); $qc = array ( array ( " date " => " current_date " , " timestamp " => " current_timestamp " ,), array ( " number|float|double " => " +/- " , " date|timestamp " => " + interval/- interval " , " char|clob " => " || " ,));} $ic [ " mssql " ] = " MS SQL (beta) " ; if ( isset ( $_GET [ " mssql " ])){ $mg = array ( " SQLSRV " , " MSSQL " , " PDO_DBLIB " ); define ( " DRIVER " , " mssql " ); if ( extension_loaded ( " sqlsrv " )){ class
2018-04-01 23:34:54 +02:00
Min_DB { var $extension = " sqlsrv " , $_link , $_result , $server_info , $affected_rows , $errno , $error ; function
2020-04-26 00:47:07 +02:00
_get_error (){ $this -> error = " " ; foreach ( sqlsrv_errors () as $n ){ $this -> errno = $n [ " code " ]; $this -> error .= " $n[message] \n " ;} $this -> error = rtrim ( $this -> error );} function
connect ( $M , $V , $E ){ global $b ; $l = $b -> database (); $_b = array ( " UID " => $V , " PWD " => $E , " CharacterSet " => " UTF-8 " ); if ( $l != " " ) $_b [ " Database " ] = $l ; $this -> _link =@ sqlsrv_connect ( preg_replace ( '~:~' , ',' , $M ), $_b ); if ( $this -> _link ){ $Td = sqlsrv_server_info ( $this -> _link ); $this -> server_info = $Td [ 'SQLServerVersion' ];} else $this -> _get_error (); return ( bool ) $this -> _link ;} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return " ' " . str_replace ( " ' " , " '' " , $P ) . " ' " ;} function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ return $this -> query ( " USE " . idf_escape ( $j ));} function
query ( $F , $Hi = 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
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
2020-04-26 00:47:07 +02:00
store_result ( $G = null ){ if ( ! $G ) $G = $this -> _result ; if ( ! $G ) return
false ; if ( sqlsrv_field_metadata ( $G )) return
2018-04-01 23:34:54 +02:00
new
2020-04-26 00:47:07 +02:00
Min_Result ( $G ); $this -> affected_rows = sqlsrv_rows_affected ( $G ); return
2018-04-01 23:34:54 +02:00
true ;} function
next_result (){ return $this -> _result ? sqlsrv_next_result ( $this -> _result ) : null ;} function
2020-04-26 00:47:07 +02:00
result ( $F , $o = 0 ){ $G = $this -> query ( $F ); if ( ! is_object ( $G )) return
false ; $I = $G -> fetch_row (); return $I [ $o ];}} class
2018-04-01 23:34:54 +02:00
Min_Result { var $_result , $_offset = 0 , $_fields , $num_rows ; function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ $this -> _result = $G ;} function
_convert ( $I ){ foreach (( array ) $I
as $y => $X ){ if ( is_a ( $X , 'DateTime' )) $I [ $y ] = $X -> format ( " Y-m-d H:i:s " );} return $I ;} function
2018-04-01 23:34:54 +02:00
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
2020-04-26 00:47:07 +02:00
fetch_field (){ if ( ! $this -> _fields ) $this -> _fields = sqlsrv_field_metadata ( $this -> _result ); $o = $this -> _fields [ $this -> _offset ++ ]; $H = new
stdClass ; $H -> name = $o [ " Name " ]; $H -> orgname = $o [ " Name " ]; $H -> type = ( $o [ " Type " ] == 1 ? 254 : 0 ); return $H ;} function
seek ( $C ){ for ( $s = 0 ; $s < $C ; $s ++ ) sqlsrv_fetch ( $this -> _result );} function
2018-04-01 23:34:54 +02:00
__destruct (){ sqlsrv_free_stmt ( $this -> _result );}}} elseif ( extension_loaded ( " mssql " )){ class
Min_DB { var $extension = " MSSQL " , $_link , $_result , $server_info , $affected_rows , $error ; function
2020-04-26 00:47:07 +02:00
connect ( $M , $V , $E ){ $this -> _link =@ mssql_connect ( $M , $V , $E ); if ( $this -> _link ){ $G = $this -> query ( " SELECT SERVERPROPERTY('ProductLevel'), SERVERPROPERTY('Edition') " ); if ( $G ){ $I = $G -> fetch_row (); $this -> server_info = $this -> result ( " sp_server_info 2 " , 2 ) . " [ $I[0] ] $I[1] " ;}} else $this -> error = mssql_get_last_message (); return ( bool ) $this -> _link ;} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return " ' " . str_replace ( " ' " , " '' " , $P ) . " ' " ;} function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ return
mssql_select_db ( $j );} function
query ( $F , $Hi = false ){ $G =@ mssql_query ( $F , $this -> _link ); $this -> error = " " ; if ( ! $G ){ $this -> error = mssql_get_last_message (); return
false ;} if ( $G === true ){ $this -> affected_rows = mssql_rows_affected ( $this -> _link ); return
2018-04-01 23:34:54 +02:00
true ;} return
new
2020-04-26 00:47:07 +02:00
Min_Result ( $G );} function
multi_query ( $F ){ return $this -> _result = $this -> query ( $F );} function
2018-04-01 23:34:54 +02:00
store_result (){ return $this -> _result ;} function
next_result (){ return
mssql_next_result ( $this -> _result -> _result );} function
2020-04-26 00:47:07 +02:00
result ( $F , $o = 0 ){ $G = $this -> query ( $F ); if ( ! is_object ( $G )) return
2018-04-01 23:34:54 +02:00
false ; return
2020-04-26 00:47:07 +02:00
mssql_result ( $G -> _result , 0 , $o );}} class
2018-04-01 23:34:54 +02:00
Min_Result { var $_result , $_offset = 0 , $_fields , $num_rows ; function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ $this -> _result = $G ; $this -> num_rows = mssql_num_rows ( $G );} function
2018-04-01 23:34:54 +02:00
fetch_assoc (){ return
mssql_fetch_assoc ( $this -> _result );} function
fetch_row (){ return
mssql_fetch_row ( $this -> _result );} function
num_rows (){ return
mssql_num_rows ( $this -> _result );} function
2020-04-26 00:47:07 +02:00
fetch_field (){ $H = mssql_fetch_field ( $this -> _result ); $H -> orgtable = $H -> table ; $H -> orgname = $H -> name ; return $H ;} function
seek ( $C ){ mssql_data_seek ( $this -> _result , $C );} function
2018-04-01 23:34:54 +02:00
__destruct (){ mssql_free_result ( $this -> _result );}}} elseif ( extension_loaded ( " pdo_dblib " )){ class
Min_DB
extends
Min_PDO { var $extension = " PDO_DBLIB " ; function
2020-04-26 00:47:07 +02:00
connect ( $M , $V , $E ){ $this -> dsn ( " dblib:charset=utf8;host= " . str_replace ( " : " , " ;unix_socket= " , preg_replace ( '~:(\d)~' , ';port=\1' , $M )), $V , $E ); return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ return $this -> query ( " USE " . idf_escape ( $j ));}}} class
2018-04-01 23:34:54 +02:00
Min_Driver
extends
Min_SQL { function
2020-04-26 00:47:07 +02:00
insertUpdate ( $Q , $J , $pg ){ foreach ( $J
as $N ){ $Oi = array (); $Z = array (); foreach ( $N
as $y => $X ){ $Oi [] = " $y = $X " ; if ( isset ( $pg [ idf_unescape ( $y )])) $Z [] = " $y = $X " ;} if ( ! queries ( " MERGE " . table ( $Q ) . " USING (VALUES( " . implode ( " , " , $N ) . " )) AS source (c " . implode ( " , c " , range ( 1 , count ( $N ))) . " ) ON " . implode ( " AND " , $Z ) . " WHEN MATCHED THEN UPDATE SET " . implode ( " , " , $Oi ) . " WHEN NOT MATCHED THEN INSERT ( " . implode ( " , " , array_keys ( $N )) . " ) VALUES ( " . implode ( " , " , $N ) . " ); " )) return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
begin (){ return
queries ( " BEGIN TRANSACTION " );}} function
2020-04-26 00:47:07 +02:00
idf_escape ( $u ){ return " [ " . str_replace ( " ] " , " ]] " , $u ) . " ] " ;} function
table ( $u ){ return ( $_GET [ " ns " ] != " " ? idf_escape ( $_GET [ " ns " ]) . " . " : " " ) . idf_escape ( $u );} function
2018-12-25 21:50:48 +01:00
connect (){ global $b ; $h = new
2020-04-26 00:47:07 +02:00
Min_DB ; $Kb = $b -> credentials (); if ( $h -> connect ( $Kb [ 0 ], $Kb [ 1 ], $Kb [ 2 ])) return $h ; return $h -> error ;} function
2018-04-01 23:34:54 +02:00
get_databases (){ return
get_vals ( " SELECT name FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb') " );} function
2020-04-26 00:47:07 +02:00
limit ( $F , $Z , $z , $C = 0 , $L = " " ){ return ( $z !== null ? " TOP ( " . ( $z + $C ) . " ) " : " " ) . " $F $Z " ;} function
limit1 ( $Q , $F , $Z , $L = " \n " ){ return
limit ( $F , $Z , 1 , 0 , $L );} function
db_collation ( $l , $qb ){ global $h ; return $h -> result ( " SELECT collation_name FROM sys.databases WHERE name = " . q ( $l ));} function
2018-04-01 23:34:54 +02:00
engines (){ return
array ();} function
2018-12-25 21:50:48 +01:00
logged_user (){ global $h ; return $h -> result ( " SELECT SUSER_NAME() " );} function
2018-04-01 23:34:54 +02:00
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
2020-04-26 00:47:07 +02:00
count_tables ( $k ){ global $h ; $H = array (); foreach ( $k
as $l ){ $h -> select_db ( $l ); $H [ $l ] = $h -> result ( " SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES " );} return $H ;} function
table_status ( $B = " " ){ $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') " . ( $B != " " ? " AND name = " . q ( $B ) : " ORDER BY name " )) as $I ){ if ( $B != " " ) return $I ; $H [ $I [ " Name " ]] = $I ;} return $H ;} function
2018-12-25 21:50:48 +01:00
is_view ( $R ){ return $R [ " Engine " ] == " VIEW " ;} function
fk_support ( $R ){ return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
fields ( $Q ){ $xb = get_key_vals ( " SELECT objname, cast(value as varchar) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', " . q ( get_schema ()) . " , 'table', " . q ( $Q ) . " , 'column', NULL) " ); $H = array (); 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, CAST(d.definition as text) [default]
2018-04-01 23:34:54 +02:00
FROM sys . all_columns c
JOIN sys . all_objects o ON c . object_id = o . object_id
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 . parent_column_id
2020-04-26 00:47:07 +02:00
WHERE o . schema_id = SCHEMA_ID ( " .q(get_schema()). " ) AND o . type IN ( 'S' , 'U' , 'V' ) AND o . name = " .q( $Q ))as $I ) { $T = $I [ " type " ]; $ye = ( preg_match ( " ~char|binary~ " , $T ) ? $I [ " max_length " ] : ( $T == " decimal " ? " $I[precision] , $I[scale] " : " " )); $H [ $I [ " name " ]] = array ( " field " => $I [ " name " ], " full_type " => $T . ( $ye ? " ( $ye ) " : " " ), " type " => $T , " length " => $ye , " default " => $I [ " default " ], " null " => $I [ " is_nullable " ], " auto_increment " => $I [ " is_identity " ], " collation " => $I [ " collation_name " ], " privileges " => array ( " insert " => 1 , " select " => 1 , " update " => 1 ), " primary " => $I [ " is_identity " ], " comment " => $xb [ $I [ " name " ]],); } return $H ;}function
indexes ( $Q , $i = null ){ $H = array (); foreach ( get_rows ( " SELECT i.name, key_ordinal, is_unique, is_primary_key, c.name AS column_name, is_descending_key
2018-04-01 23:34:54 +02:00
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
2020-04-26 00:47:07 +02:00
WHERE OBJECT_NAME ( i . object_id ) = " .q( $Q ), $i )as $I ) { $B = $I [ " name " ]; $H [ $B ][ " type " ] = ( $I [ " is_primary_key " ] ? " PRIMARY " : ( $I [ " is_unique " ] ? " UNIQUE " : " INDEX " )); $H [ $B ][ " lengths " ] = array (); $H [ $B ][ " columns " ][ $I [ " key_ordinal " ]] = $I [ " column_name " ]; $H [ $B ][ " descs " ][ $I [ " key_ordinal " ]] = ( $I [ " is_descending_key " ] ? '1' : null ); } return $H ;}function
view ( $B ){ global $h ; return
array ( " select " => preg_replace ( '~^(?:[^[]|\[[^]]*])*\s+AS\s+~isU' , '' , $h -> result ( " SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = SCHEMA_NAME() AND TABLE_NAME = " . q ( $B ))));} function
collations (){ $H = array (); foreach ( get_vals ( " SELECT name FROM fn_helpcollations() " ) as $d ) $H [ preg_replace ( '~_.*~' , '' , $d )][] = $d ; return $H ;} function
information_schema ( $l ){ return
2018-04-01 23:34:54 +02:00
false ;} function
2018-12-25 21:50:48 +01:00
error (){ global $h ; return
nl_br ( h ( preg_replace ( '~^(\[[^]]*])+~m' , '' , $h -> error )));} function
2020-04-26 00:47:07 +02:00
create_database ( $l , $d ){ return
queries ( " CREATE DATABASE " . idf_escape ( $l ) . ( preg_match ( '~^[a-z0-9_]+$~i' , $d ) ? " COLLATE $d " : " " ));} function
drop_databases ( $k ){ return
queries ( " DROP DATABASE " . implode ( " , " , array_map ( 'idf_escape' , $k )));} function
rename_database ( $B , $d ){ if ( preg_match ( '~^[a-z0-9_]+$~i' , $d )) queries ( " ALTER DATABASE " . idf_escape ( DB ) . " COLLATE $d " ); queries ( " ALTER DATABASE " . idf_escape ( DB ) . " MODIFY NAME = " . idf_escape ( $B )); return
2018-04-01 23:34:54 +02:00
true ;} function
auto_increment (){ return " IDENTITY " . ( $_POST [ " Auto_increment " ] != " " ? " ( " . number ( $_POST [ " Auto_increment " ]) . " ,1) " : " " ) . " PRIMARY KEY " ;} function
2020-04-26 00:47:07 +02:00
alter_table ( $Q , $B , $p , $gd , $vb , $yc , $d , $Na , $Zf ){ $c = array (); $xb = array (); foreach ( $p
as $o ){ $e = idf_escape ( $o [ 0 ]); $X = $o [ 1 ]; if ( ! $X ) $c [ " DROP " ][] = " COLUMN $e " ; else { $X [ 1 ] = preg_replace ( " ~( COLLATE )'( \\ w+)'~ " , '\1\2' , $X [ 1 ]); $xb [ $o [ 0 ]] = $X [ 5 ]; unset ( $X [ 5 ]); if ( $o [ 0 ] == " " ) $c [ " ADD " ][] = " \n " . implode ( " " , $X ) . ( $Q == " " ? substr ( $gd [ $X [ 0 ]], 16 + strlen ( $X [ 0 ])) : " " ); else { unset ( $X [ 6 ]); if ( $e != $X [ 0 ]) queries ( " EXEC sp_rename " . q ( table ( $Q ) . " . $e " ) . " , " . q ( idf_unescape ( $X [ 0 ])) . " , 'COLUMN' " ); $c [ " ALTER COLUMN " . implode ( " " , $X )][] = " " ;}}} if ( $Q == " " ) return
queries ( " CREATE TABLE " . table ( $B ) . " ( " . implode ( " , " ,( array ) $c [ " ADD " ]) . " \n ) " ); if ( $Q != $B ) queries ( " EXEC sp_rename " . q ( table ( $Q )) . " , " . q ( $B )); if ( $gd ) $c [ " " ] = $gd ; foreach ( $c
as $y => $X ){ if ( ! queries ( " ALTER TABLE " . idf_escape ( $B ) . " $y " . implode ( " , " , $X ))) return
false ;} foreach ( $xb
as $y => $X ){ $vb = substr ( $X , 9 ); queries ( " EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = " . q ( get_schema ()) . " , @level1type = N'Table', @level1name = " . q ( $B ) . " , @level2type = N'Column', @level2name = " . q ( $y )); queries ( " EXEC sp_addextendedproperty @name = N'MS_Description', @value = " . $vb . " , @level0type = N'Schema', @level0name = " . q ( get_schema ()) . " , @level1type = N'Table', @level1name = " . q ( $B ) . " , @level2type = N'Column', @level2name = " . q ( $y ));} return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
alter_indexes ( $Q , $c ){ $v = array (); $jc = array (); foreach ( $c
as $X ){ if ( $X [ 2 ] == " DROP " ){ if ( $X [ 0 ] == " PRIMARY " ) $jc [] = idf_escape ( $X [ 1 ]); else $v [] = idf_escape ( $X [ 1 ]) . " ON " . table ( $Q );} elseif ( ! queries (( $X [ 0 ] != " PRIMARY " ? " CREATE $X[0] " . ( $X [ 0 ] != " INDEX " ? " INDEX " : " " ) . idf_escape ( $X [ 1 ] != " " ? $X [ 1 ] : uniqid ( $Q . " _ " )) . " ON " . table ( $Q ) : " ALTER TABLE " . table ( $Q ) . " ADD PRIMARY KEY " ) . " ( " . implode ( " , " , $X [ 2 ]) . " ) " )) return
false ;} return ( ! $v || queries ( " DROP INDEX " . implode ( " , " , $v ))) && ( ! $jc || queries ( " ALTER TABLE " . table ( $Q ) . " DROP " . implode ( " , " , $jc )));} function
2018-12-25 21:50:48 +01:00
last_id (){ global $h ; return $h -> result ( " SELECT SCOPE_IDENTITY() " );} function
2020-04-26 00:47:07 +02:00
explain ( $h , $F ){ $h -> query ( " SET SHOWPLAN_ALL ON " ); $H = $h -> query ( $F ); $h -> query ( " SET SHOWPLAN_ALL OFF " ); return $H ;} function
2018-12-25 21:50:48 +01:00
found_rows ( $R , $Z ){} function
2020-04-26 00:47:07 +02:00
foreign_keys ( $Q ){ $H = array (); foreach ( get_rows ( " EXEC sp_fkeys @fktable_name = " . q ( $Q )) as $I ){ $q =& $H [ $I [ " FK_NAME " ]]; $q [ " db " ] = $I [ " PKTABLE_QUALIFIER " ]; $q [ " table " ] = $I [ " PKTABLE_NAME " ]; $q [ " source " ][] = $I [ " FKCOLUMN_NAME " ]; $q [ " target " ][] = $I [ " PKCOLUMN_NAME " ];} return $H ;} function
2018-12-25 21:50:48 +01:00
truncate_tables ( $S ){ return
apply_queries ( " TRUNCATE TABLE " , $S );} function
2020-04-26 00:47:07 +02:00
drop_views ( $fj ){ return
queries ( " DROP VIEW " . implode ( " , " , array_map ( 'table' , $fj )));} function
2018-12-25 21:50:48 +01:00
drop_tables ( $S ){ return
queries ( " DROP TABLE " . implode ( " , " , array_map ( 'table' , $S )));} function
2020-04-26 00:47:07 +02:00
move_tables ( $S , $fj , $ci ){ return
apply_queries ( " ALTER SCHEMA " . idf_escape ( $ci ) . " TRANSFER " , array_merge ( $S , $fj ));} function
trigger ( $B ){ if ( $B == " " ) return
array (); $J = get_rows ( " SELECT s.name [Trigger],
2018-04-01 23:34:54 +02:00
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
2020-04-26 00:47:07 +02:00
WHERE s . xtype = 'TR' AND s . name = " .q( $B )); $H =reset( $J );if( $H ) $H["Statement"] =preg_replace('~^.+ \ s+AS \ s+~isU','', $H["text"] );return $H ;}function
triggers ( $Q ){ $H = array (); foreach ( get_rows ( " SELECT sys1.name,
2018-04-01 23:34:54 +02:00
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
2020-04-26 00:47:07 +02:00
WHERE sys1 . xtype = 'TR' AND sys2 . name = " .q( $Q ))as $I ) $H[$I["name"] ]=array( $I["Timing"] , $I["Event"] );return $H ;}function
2018-04-01 23:34:54 +02:00
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
2018-12-25 21:50:48 +01:00
get_schema (){ global $h ; if ( $_GET [ " ns " ] != " " ) return $_GET [ " ns " ]; return $h -> result ( " SELECT SCHEMA_NAME() " );} function
2020-04-26 00:47:07 +02:00
set_schema ( $fh ){ return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
use_sql ( $j ){ return " USE " . idf_escape ( $j );} function
2018-04-01 23:34:54 +02:00
show_variables (){ return
array ();} function
show_status (){ return
array ();} function
2020-04-26 00:47:07 +02:00
convert_field ( $o ){} function
unconvert_field ( $o , $H ){ return $H ;} function
support ( $Tc ){ return
preg_match ( '~^(comment|columns|database|drop_col|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~' , $Tc );} $x = " mssql " ; $U = array (); $Mh = array (); foreach ( array ( lang ( 27 ) => array ( " tinyint " => 3 , " smallint " => 5 , " int " => 10 , " bigint " => 20 , " bit " => 1 , " decimal " => 0 , " real " => 12 , " float " => 53 , " smallmoney " => 10 , " money " => 20 ), lang ( 28 ) => array ( " date " => 10 , " smalldatetime " => 19 , " datetime " => 19 , " datetime2 " => 19 , " time " => 8 , " datetimeoffset " => 10 ), lang ( 25 ) => array ( " char " => 8000 , " varchar " => 8000 , " text " => 2147483647 , " nchar " => 4000 , " nvarchar " => 4000 , " ntext " => 1073741823 ), lang ( 29 ) => array ( " binary " => 8000 , " varbinary " => 8000 , " image " => 2147483647 ),) as $y => $X ){ $U += $X ; $Mh [ $y ] = array_keys ( $X );} $Ni = array (); $_f = array ( " = " , " < " , " > " , " <= " , " >= " , " != " , " LIKE " , " LIKE %% " , " IN " , " IS NULL " , " NOT LIKE " , " NOT IN " , " IS NOT NULL " ); $od = array ( " len " , " lower " , " round " , " upper " ); $ud = array ( " avg " , " count " , " count distinct " , " max " , " min " , " sum " ); $qc = array ( array ( " date|time " => " getdate " ,), array ( " int|decimal|real|float|money|datetime " => " +/- " , " char|text " => " + " ,));} $ic [ 'firebird' ] = 'Firebird (alpha)' ; if ( isset ( $_GET [ " firebird " ])){ $mg = array ( " interbase " ); define ( " DRIVER " , " firebird " ); if ( extension_loaded ( " interbase " )){ class
2018-04-01 23:34:54 +02:00
Min_DB { var $extension = " Firebird " , $server_info , $affected_rows , $errno , $error , $_link , $_result ; function
2020-04-26 00:47:07 +02:00
connect ( $M , $V , $E ){ $this -> _link = ibase_connect ( $M , $V , $E ); if ( $this -> _link ){ $Ri = explode ( ':' , $M ); $this -> service_link = ibase_service_attach ( $Ri [ 0 ], $V , $E ); $this -> server_info = ibase_server_info ( $this -> service_link , IBASE_SVC_SERVER_VERSION );} else { $this -> errno = ibase_errcode (); $this -> error = ibase_errmsg ();} return ( bool ) $this -> _link ;} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return " ' " . str_replace ( " ' " , " '' " , $P ) . " ' " ;} function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ return ( $j == " domain " );} function
query ( $F , $Hi = false ){ $G = ibase_query ( $F , $this -> _link ); if ( ! $G ){ $this -> errno = ibase_errcode (); $this -> error = ibase_errmsg (); return
false ;} $this -> error = " " ; if ( $G === true ){ $this -> affected_rows = ibase_affected_rows ( $this -> _link ); return
2018-04-01 23:34:54 +02:00
true ;} return
new
2020-04-26 00:47:07 +02:00
Min_Result ( $G );} function
multi_query ( $F ){ return $this -> _result = $this -> query ( $F );} function
2018-04-01 23:34:54 +02:00
store_result (){ return $this -> _result ;} function
next_result (){ return
false ;} function
2020-04-26 00:47:07 +02:00
result ( $F , $o = 0 ){ $G = $this -> query ( $F ); if ( ! $G ||! $G -> num_rows ) return
false ; $I = $G -> fetch_row (); return $I [ $o ];}} class
2018-04-01 23:34:54 +02:00
Min_Result { var $num_rows , $_result , $_offset = 0 ; function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ $this -> _result = $G ;} function
2018-04-01 23:34:54 +02:00
fetch_assoc (){ return
ibase_fetch_assoc ( $this -> _result );} function
fetch_row (){ return
ibase_fetch_row ( $this -> _result );} function
2020-04-26 00:47:07 +02:00
fetch_field (){ $o = ibase_field_info ( $this -> _result , $this -> _offset ++ ); return ( object ) array ( 'name' => $o [ 'name' ], 'orgname' => $o [ 'name' ], 'type' => $o [ 'type' ], 'charsetnr' => $o [ 'length' ],);} function
2018-04-01 23:34:54 +02:00
__destruct (){ ibase_free_result ( $this -> _result );}}} class
Min_Driver
extends
Min_SQL {} function
2020-04-26 00:47:07 +02:00
idf_escape ( $u ){ return '"' . str_replace ( '"' , '""' , $u ) . '"' ;} function
table ( $u ){ return
idf_escape ( $u );} function
2018-12-25 21:50:48 +01:00
connect (){ global $b ; $h = new
2020-04-26 00:47:07 +02:00
Min_DB ; $Kb = $b -> credentials (); if ( $h -> connect ( $Kb [ 0 ], $Kb [ 1 ], $Kb [ 2 ])) return $h ; return $h -> error ;} function
get_databases ( $ed ){ return
2018-04-01 23:34:54 +02:00
array ( " domain " );} function
2020-04-26 00:47:07 +02:00
limit ( $F , $Z , $z , $C = 0 , $L = " " ){ $H = '' ; $H .= ( $z !== null ? $L . " FIRST $z " . ( $C ? " SKIP $C " : " " ) : " " ); $H .= " $F $Z " ; return $H ;} function
limit1 ( $Q , $F , $Z , $L = " \n " ){ return
limit ( $F , $Z , 1 , 0 , $L );} function
db_collation ( $l , $qb ){} function
2018-04-01 23:34:54 +02:00
engines (){ return
array ();} function
2020-04-26 00:47:07 +02:00
logged_user (){ global $b ; $Kb = $b -> credentials (); return $Kb [ 1 ];} function
tables_list (){ global $h ; $F = 'SELECT RDB$RELATION_NAME FROM rdb$relations WHERE rdb$system_flag = 0' ; $G = ibase_query ( $h -> _link , $F ); $H = array (); while ( $I = ibase_fetch_assoc ( $G )) $H [ $I [ 'RDB$RELATION_NAME' ]] = 'table' ; ksort ( $H ); return $H ;} function
count_tables ( $k ){ return
2018-04-01 23:34:54 +02:00
array ();} function
2020-04-26 00:47:07 +02:00
table_status ( $B = " " , $Sc = false ){ global $h ; $H = array (); $Pb = tables_list (); foreach ( $Pb
as $v => $X ){ $v = trim ( $v ); $H [ $v ] = array ( 'Name' => $v , 'Engine' => 'standard' ,); if ( $B == $v ) return $H [ $v ];} return $H ;} function
2018-12-25 21:50:48 +01:00
is_view ( $R ){ return
2018-04-01 23:34:54 +02:00
false ;} function
2018-12-25 21:50:48 +01:00
fk_support ( $R ){ return
preg_match ( '~InnoDB|IBMDB2I~i' , $R [ " Engine " ]);} function
2020-04-26 00:47:07 +02:00
fields ( $Q ){ global $h ; $H = array (); $F = ' SELECT r . RDB $FIELD_NAME AS field_name ,
2018-04-01 23:34:54 +02:00
r . RDB $DESCRIPTION AS field_description ,
r . RDB $DEFAULT_VALUE AS field_default_value ,
r . RDB $NULL_FLAG AS field_not_null_constraint ,
f . RDB $FIELD_LENGTH AS field_length ,
f . RDB $FIELD_PRECISION AS field_precision ,
f . RDB $FIELD_SCALE AS field_scale ,
CASE f . RDB $FIELD_TYPE
WHEN 261 THEN \ ' BLOB\ '
WHEN 14 THEN \ ' CHAR\ '
WHEN 40 THEN \ ' CSTRING\ '
WHEN 11 THEN \ ' D_FLOAT\ '
WHEN 27 THEN \ ' DOUBLE\ '
WHEN 10 THEN \ ' FLOAT\ '
WHEN 16 THEN \ ' INT64\ '
WHEN 8 THEN \ ' INTEGER\ '
WHEN 9 THEN \ ' QUAD\ '
WHEN 7 THEN \ ' SMALLINT\ '
WHEN 12 THEN \ ' DATE\ '
WHEN 13 THEN \ ' TIME\ '
WHEN 35 THEN \ ' TIMESTAMP\ '
WHEN 37 THEN \ ' VARCHAR\ '
ELSE \ ' UNKNOWN\ '
END AS field_type ,
f . RDB $FIELD_SUB_TYPE AS field_subtype ,
coll . RDB $COLLATION_NAME AS field_collation ,
cset . RDB $CHARACTER_SET_NAME AS field_charset
FROM RDB $RELATION_FIELDS r
LEFT JOIN RDB $FIELDS f ON r . RDB $FIELD_SOURCE = f . RDB $FIELD_NAME
LEFT JOIN RDB $COLLATIONS coll ON f . RDB $COLLATION_ID = coll . RDB $COLLATION_ID
LEFT JOIN RDB $CHARACTER_SETS cset ON f . RDB $CHARACTER_SET_ID = cset . RDB $CHARACTER_SET_ID
2018-12-25 21:50:48 +01:00
WHERE r . RDB $RELATION_NAME = '.q($Q).'
2020-04-26 00:47:07 +02:00
ORDER BY r . RDB $FIELD_POSITION ';$G=ibase_query($h->_link,$F);while($I=ibase_fetch_assoc($G))$H[trim($I[' FIELD_NAME '])]=array("field"=>trim($I["FIELD_NAME"]),"full_type"=>trim($I["FIELD_TYPE"]),"type"=>trim($I["FIELD_SUB_TYPE"]),"default"=>trim($I[' FIELD_DEFAULT_VALUE ']),"null"=>(trim($I["FIELD_NOT_NULL_CONSTRAINT"])=="YES"),"auto_increment"=>' 0 ' , " collation " => trim ( $I [ " FIELD_COLLATION " ]), " privileges " => array ( " insert " => 1 , " select " => 1 , " update " => 1 ), " comment " => trim ( $I [ " FIELD_DESCRIPTION " ]),); return $H ;} function
indexes ( $Q , $i = null ){ $H = array (); return $H ;} function
2018-12-25 21:50:48 +01:00
foreign_keys ( $Q ){ return
2018-04-01 23:34:54 +02:00
array ();} function
collations (){ return
array ();} function
2020-04-26 00:47:07 +02:00
information_schema ( $l ){ return
2018-04-01 23:34:54 +02:00
false ;} function
2018-12-25 21:50:48 +01:00
error (){ global $h ; return
h ( $h -> error );} function
2018-04-01 23:34:54 +02:00
types (){ return
array ();} function
schemas (){ return
array ();} function
get_schema (){ return " " ;} function
2020-04-26 00:47:07 +02:00
set_schema ( $fh ){ return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
support ( $Tc ){ return
preg_match ( " ~^(columns|sql|status|table) $ ~ " , $Tc );} $x = " firebird " ; $_f = array ( " = " ); $od = array (); $ud = array (); $qc = array ();} $ic [ " simpledb " ] = " SimpleDB " ; if ( isset ( $_GET [ " simpledb " ])){ $mg = array ( " SimpleXML + allow_url_fopen " ); define ( " DRIVER " , " simpledb " ); if ( class_exists ( 'SimpleXMLElement' ) && ini_bool ( 'allow_url_fopen' )){ class
2018-04-01 23:34:54 +02:00
Min_DB { var $extension = " SimpleXML " , $server_info = '2009-04-15' , $error , $timeout , $next , $affected_rows , $_result ; function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ return ( $j == " domain " );} function
query ( $F , $Hi = false ){ $Tf = array ( 'SelectExpression' => $F , 'ConsistentRead' => 'true' ); if ( $this -> next ) $Tf [ 'NextToken' ] = $this -> next ; $G = sdb_request_all ( 'Select' , 'Item' , $Tf , $this -> timeout ); $this -> timeout = 0 ; if ( $G === false ) return $G ; if ( preg_match ( '~^\s*SELECT\s+COUNT\(~i' , $F )){ $Qh = 0 ; foreach ( $G
as $fe ) $Qh += $fe -> Attribute -> Value ; $G = array (( object ) array ( 'Attribute' => array (( object ) array ( 'Name' => 'Count' , 'Value' => $Qh ,))));} return
2018-04-01 23:34:54 +02:00
new
2020-04-26 00:47:07 +02:00
Min_Result ( $G );} function
multi_query ( $F ){ return $this -> _result = $this -> query ( $F );} function
2018-04-01 23:34:54 +02:00
store_result (){ return $this -> _result ;} function
next_result (){ return
false ;} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return " ' " . str_replace ( " ' " , " '' " , $P ) . " ' " ;}} class
2018-04-01 23:34:54 +02:00
Min_Result { var $num_rows , $_rows = array (), $_offset = 0 ; function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ foreach ( $G
as $fe ){ $I = array (); if ( $fe -> Name != '' ) $I [ 'itemName()' ] = ( string ) $fe -> Name ; foreach ( $fe -> Attribute
as $Ja ){ $B = $this -> _processValue ( $Ja -> Name ); $Y = $this -> _processValue ( $Ja -> Value ); if ( isset ( $I [ $B ])){ $I [ $B ] = ( array ) $I [ $B ]; $I [ $B ][] = $Y ;} else $I [ $B ] = $Y ;} $this -> _rows [] = $I ; foreach ( $I
as $y => $X ){ if ( ! isset ( $this -> _rows [ 0 ][ $y ])) $this -> _rows [ 0 ][ $y ] = null ;}} $this -> num_rows = count ( $this -> _rows );} function
_processValue ( $tc ){ return ( is_object ( $tc ) && $tc [ 'encoding' ] == 'base64' ? base64_decode ( $tc ) : ( string ) $tc );} function
fetch_assoc (){ $I = current ( $this -> _rows ); if ( ! $I ) return $I ; $H = array (); foreach ( $this -> _rows [ 0 ] as $y => $X ) $H [ $y ] = $I [ $y ]; next ( $this -> _rows ); return $H ;} function
fetch_row (){ $H = $this -> fetch_assoc (); if ( ! $H ) return $H ; return
array_values ( $H );} function
fetch_field (){ $le = array_keys ( $this -> _rows [ 0 ]); return ( object ) array ( 'name' => $le [ $this -> _offset ++ ]);}}} class
2018-04-01 23:34:54 +02:00
Min_Driver
extends
2020-04-26 00:47:07 +02:00
Min_SQL { public $pg = " itemName() " ; function
_chunkRequest ( $Id , $wa , $Tf , $Ic = array ()){ global $h ; foreach ( array_chunk ( $Id , 25 ) as $jb ){ $Uf = $Tf ; foreach ( $jb
as $s => $t ){ $Uf [ " Item. $s .ItemName " ] = $t ; foreach ( $Ic
as $y => $X ) $Uf [ " Item. $s . $y " ] = $X ;} if ( ! sdb_request ( $wa , $Uf )) return
false ;} $h -> affected_rows = count ( $Id ); return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
_extractIds ( $Q , $Ag , $z ){ $H = array (); if ( preg_match_all ( " ~itemName \ ( \ ) = (('[^']*+')+)~ " , $Ag , $Ie )) $H = array_map ( 'idf_unescape' , $Ie [ 1 ]); else { foreach ( sdb_request_all ( 'Select' , 'Item' , array ( 'SelectExpression' => 'SELECT itemName() FROM ' . table ( $Q ) . $Ag . ( $z ? " LIMIT 1 " : " " ))) as $fe ) $H [] = $fe -> Name ;} return $H ;} function
select ( $Q , $K , $Z , $rd , $Ef = array (), $z = 1 , $D = 0 , $rg = false ){ global $h ; $h -> next = $_GET [ " next " ]; $H = parent :: select ( $Q , $K , $Z , $rd , $Ef , $z , $D , $rg ); $h -> next = 0 ; return $H ;} function
delete ( $Q , $Ag , $z = 0 ){ return $this -> _chunkRequest ( $this -> _extractIds ( $Q , $Ag , $z ), 'BatchDeleteAttributes' , array ( 'DomainName' => $Q ));} function
update ( $Q , $N , $Ag , $z = 0 , $L = " \n " ){ $Zb = array (); $Xd = array (); $s = 0 ; $Id = $this -> _extractIds ( $Q , $Ag , $z ); $t = idf_unescape ( $N [ " `itemName()` " ]); unset ( $N [ " `itemName()` " ]); foreach ( $N
as $y => $X ){ $y = idf_unescape ( $y ); if ( $X == " NULL " || ( $t != " " && array ( $t ) != $Id )) $Zb [ " Attribute. " . count ( $Zb ) . " .Name " ] = $y ; if ( $X != " NULL " ){ foreach (( array ) $X
as $he => $W ){ $Xd [ " Attribute. $s .Name " ] = $y ; $Xd [ " Attribute. $s .Value " ] = ( is_array ( $X ) ? $W : idf_unescape ( $W )); if ( ! $he ) $Xd [ " Attribute. $s .Replace " ] = " true " ; $s ++ ;}}} $Tf = array ( 'DomainName' => $Q ); return ( ! $Xd || $this -> _chunkRequest (( $t != " " ? array ( $t ) : $Id ), 'BatchPutAttributes' , $Tf , $Xd )) && ( ! $Zb || $this -> _chunkRequest ( $Id , 'BatchDeleteAttributes' , $Tf , $Zb ));} function
insert ( $Q , $N ){ $Tf = array ( " DomainName " => $Q ); $s = 0 ; foreach ( $N
as $B => $Y ){ if ( $Y != " NULL " ){ $B = idf_unescape ( $B ); if ( $B == " itemName() " ) $Tf [ " ItemName " ] = idf_unescape ( $Y ); else { foreach (( array ) $Y
as $X ){ $Tf [ " Attribute. $s .Name " ] = $B ; $Tf [ " Attribute. $s .Value " ] = ( is_array ( $Y ) ? $X : idf_unescape ( $Y )); $s ++ ;}}}} return
sdb_request ( 'PutAttributes' , $Tf );} function
insertUpdate ( $Q , $J , $pg ){ foreach ( $J
as $N ){ if ( ! $this -> update ( $Q , $N , " WHERE `itemName()` = " . q ( $N [ " `itemName()` " ]))) return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
begin (){ return
false ;} function
commit (){ return
false ;} function
rollback (){ return
2018-06-30 00:38:01 +02:00
false ;} function
2020-04-26 00:47:07 +02:00
slowQuery ( $F , $ki ){ $this -> _conn -> timeout = $ki ; return $F ;}} function
connect (){ global $b ; list (,, $E ) = $b -> credentials (); if ( $E != " " ) return
2018-06-30 00:38:01 +02:00
lang ( 22 ); return
2018-04-01 23:34:54 +02:00
new
Min_DB ;} function
2020-04-26 00:47:07 +02:00
support ( $Tc ){ return
preg_match ( '~sql~' , $Tc );} function
logged_user (){ global $b ; $Kb = $b -> credentials (); return $Kb [ 1 ];} function
2018-04-01 23:34:54 +02:00
get_databases (){ return
array ( " domain " );} function
collations (){ return
array ();} function
2020-04-26 00:47:07 +02:00
db_collation ( $l , $qb ){} function
tables_list (){ global $h ; $H = array (); foreach ( sdb_request_all ( 'ListDomains' , 'DomainName' ) as $Q ) $H [( string ) $Q ] = 'table' ; if ( $h -> error && defined ( " PAGE_HEADER " )) echo " <p class='error'> " . error () . " \n " ; return $H ;} function
table_status ( $B = " " , $Sc = false ){ $H = array (); foreach (( $B != " " ? array ( $B => true ) : tables_list ()) as $Q => $T ){ $I = array ( " Name " => $Q , " Auto_increment " => " " ); if ( ! $Sc ){ $Ve = sdb_request ( 'DomainMetadata' , array ( 'DomainName' => $Q )); if ( $Ve ){ foreach ( array ( " Rows " => " ItemCount " , " Data_length " => " ItemNamesSizeBytes " , " Index_length " => " AttributeValuesSizeBytes " , " Data_free " => " AttributeNamesSizeBytes " ,) as $y => $X ) $I [ $y ] = ( string ) $Ve -> $X ;}} if ( $B != " " ) return $I ; $H [ $Q ] = $I ;} return $H ;} function
explain ( $h , $F ){} function
2018-12-25 21:50:48 +01:00
error (){ global $h ; return
h ( $h -> error );} function
2018-04-01 23:34:54 +02:00
information_schema (){} function
2018-12-25 21:50:48 +01:00
is_view ( $R ){} function
indexes ( $Q , $i = null ){ return
2018-04-01 23:34:54 +02:00
array ( array ( " type " => " PRIMARY " , " columns " => array ( " itemName() " )),);} function
2018-12-25 21:50:48 +01:00
fields ( $Q ){ return
2018-04-01 23:34:54 +02:00
fields_from_edit ();} function
2018-12-25 21:50:48 +01:00
foreign_keys ( $Q ){ return
2018-04-01 23:34:54 +02:00
array ();} function
2020-04-26 00:47:07 +02:00
table ( $u ){ return
idf_escape ( $u );} function
idf_escape ( $u ){ return " ` " . str_replace ( " ` " , " `` " , $u ) . " ` " ;} function
limit ( $F , $Z , $z , $C = 0 , $L = " " ){ return " $F $Z " . ( $z !== null ? $L . " LIMIT $z " : " " );} function
unconvert_field ( $o , $H ){ return $H ;} function
2018-12-25 21:50:48 +01:00
fk_support ( $R ){} function
2018-04-01 23:34:54 +02:00
engines (){ return
array ();} function
2020-04-26 00:47:07 +02:00
alter_table ( $Q , $B , $p , $gd , $vb , $yc , $d , $Na , $Zf ){ return ( $Q == " " && sdb_request ( 'CreateDomain' , array ( 'DomainName' => $B )));} function
2018-12-25 21:50:48 +01:00
drop_tables ( $S ){ foreach ( $S
as $Q ){ if ( ! sdb_request ( 'DeleteDomain' , array ( 'DomainName' => $Q ))) return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
2020-04-26 00:47:07 +02:00
count_tables ( $k ){ foreach ( $k
as $l ) return
array ( $l => count ( tables_list ()));} function
2018-12-25 21:50:48 +01:00
found_rows ( $R , $Z ){ return ( $Z ? null : $R [ " Rows " ]);} function
2018-04-01 23:34:54 +02:00
last_id (){} function
2020-04-26 00:47:07 +02:00
hmac ( $Ca , $Pb , $y , $Eg = false ){ $Wa = 64 ; if ( strlen ( $y ) > $Wa ) $y = pack ( " H* " , $Ca ( $y )); $y = str_pad ( $y , $Wa , " \0 " ); $ie = $y ^ str_repeat ( " \x36 " , $Wa ); $je = $y ^ str_repeat ( " \x5C " , $Wa ); $H = $Ca ( $je . pack ( " H* " , $Ca ( $ie . $Pb ))); if ( $Eg ) $H = pack ( " H* " , $H ); return $H ;} function
sdb_request ( $wa , $Tf = array ()){ global $b , $h ; list ( $Ed , $Tf [ 'AWSAccessKeyId' ], $ih ) = $b -> credentials (); $Tf [ 'Action' ] = $wa ; $Tf [ 'Timestamp' ] = gmdate ( 'Y-m-d\TH:i:s+00:00' ); $Tf [ 'Version' ] = '2009-04-15' ; $Tf [ 'SignatureVersion' ] = 2 ; $Tf [ 'SignatureMethod' ] = 'HmacSHA1' ; ksort ( $Tf ); $F = '' ; foreach ( $Tf
as $y => $X ) $F .= '&' . rawurlencode ( $y ) . '=' . rawurlencode ( $X ); $F = str_replace ( '%7E' , '~' , substr ( $F , 1 )); $F .= " &Signature= " . urlencode ( base64_encode ( hmac ( 'sha1' , " POST \n " . preg_replace ( '~^https?://~' , '' , $Ed ) . " \n / \n $F " , $ih , true ))); @ ini_set ( 'track_errors' , 1 ); $Xc =@ file_get_contents (( preg_match ( '~^https?://~' , $Ed ) ? $Ed : " http:// $Ed " ), false , stream_context_create ( array ( 'http' => array ( 'method' => 'POST' , 'content' => $F , 'ignore_errors' => 1 ,)))); if ( ! $Xc ){ $h -> error = $php_errormsg ; return
false ;} libxml_use_internal_errors ( true ); $sj = simplexml_load_string ( $Xc ); if ( ! $sj ){ $n = libxml_get_last_error (); $h -> error = $n -> message ; return
false ;} if ( $sj -> Errors ){ $n = $sj -> Errors -> Error ; $h -> error = " $n->Message ( $n->Code ) " ; return
false ;} $h -> error = '' ; $bi = $wa . " Result " ; return ( $sj -> $bi ? $sj -> $bi : true );} function
sdb_request_all ( $wa , $bi , $Tf = array (), $ki = 0 ){ $H = array (); $Ih = ( $ki ? microtime ( true ) : 0 ); $z = ( preg_match ( '~LIMIT\s+(\d+)\s*$~i' , $Tf [ 'SelectExpression' ], $A ) ? $A [ 1 ] : 0 ); do { $sj = sdb_request ( $wa , $Tf ); if ( ! $sj ) break ; foreach ( $sj -> $bi
as $tc ) $H [] = $tc ; if ( $z && count ( $H ) >= $z ){ $_GET [ " next " ] = $sj -> NextToken ; break ;} if ( $ki && microtime ( true ) - $Ih > $ki ) return
false ; $Tf [ 'NextToken' ] = $sj -> NextToken ; if ( $z ) $Tf [ 'SelectExpression' ] = preg_replace ( '~\d+\s*$~' , $z - count ( $H ), $Tf [ 'SelectExpression' ]);} while ( $sj -> NextToken ); return $H ;} $x = " simpledb " ; $_f = array ( " = " , " < " , " > " , " <= " , " >= " , " != " , " LIKE " , " LIKE %% " , " IN " , " IS NULL " , " NOT LIKE " , " IS NOT NULL " ); $od = array (); $ud = array ( " count " ); $qc = array ( array ( " json " ));} $ic [ " mongo " ] = " MongoDB " ; if ( isset ( $_GET [ " mongo " ])){ $mg = array ( " mongo " , " mongodb " ); define ( " DRIVER " , " mongo " ); if ( class_exists ( 'MongoDB' )){ class
2018-06-30 00:38:01 +02:00
Min_DB { var $extension = " Mongo " , $server_info = MongoClient :: VERSION , $error , $last_id , $_link , $_db ; function
2020-04-26 00:47:07 +02:00
connect ( $Pi , $Cf ){ return @ new
MongoClient ( $Pi , $Cf );} function
query ( $F ){ return
2018-04-01 23:34:54 +02:00
false ;} function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ try { $this -> _db = $this -> _link -> selectDB ( $j ); return
true ;} catch ( Exception $Ec ){ $this -> error = $Ec -> getMessage (); return
2018-04-01 23:34:54 +02:00
false ;}} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return $P ;}} class
2018-04-01 23:34:54 +02:00
Min_Result { var $num_rows , $_rows = array (), $_offset = 0 , $_charset = array (); function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ foreach ( $G
as $fe ){ $I = array (); foreach ( $fe
as $y => $X ){ if ( is_a ( $X , 'MongoBinData' )) $this -> _charset [ $y ] = 63 ; $I [ $y ] = ( is_a ( $X , 'MongoId' ) ? 'ObjectId("' . strval ( $X ) . '")' : ( is_a ( $X , 'MongoDate' ) ? gmdate ( " Y-m-d H:i:s " , $X -> sec ) . " GMT " : ( is_a ( $X , 'MongoBinData' ) ? $X -> bin : ( is_a ( $X , 'MongoRegex' ) ? strval ( $X ) : ( is_object ( $X ) ? get_class ( $X ) : $X )))));} $this -> _rows [] = $I ; foreach ( $I
as $y => $X ){ if ( ! isset ( $this -> _rows [ 0 ][ $y ])) $this -> _rows [ 0 ][ $y ] = null ;}} $this -> num_rows = count ( $this -> _rows );} function
fetch_assoc (){ $I = current ( $this -> _rows ); if ( ! $I ) return $I ; $H = array (); foreach ( $this -> _rows [ 0 ] as $y => $X ) $H [ $y ] = $I [ $y ]; next ( $this -> _rows ); return $H ;} function
fetch_row (){ $H = $this -> fetch_assoc (); if ( ! $H ) return $H ; return
array_values ( $H );} function
fetch_field (){ $le = array_keys ( $this -> _rows [ 0 ]); $B = $le [ $this -> _offset ++ ]; return ( object ) array ( 'name' => $B , 'charsetnr' => $this -> _charset [ $B ],);}} class
2018-04-01 23:34:54 +02:00
Min_Driver
extends
2020-04-26 00:47:07 +02:00
Min_SQL { public $pg = " _id " ; function
select ( $Q , $K , $Z , $rd , $Ef = array (), $z = 1 , $D = 0 , $rg = false ){ $K = ( $K == array ( " * " ) ? array () : array_fill_keys ( $K , true )); $_h = array (); foreach ( $Ef
as $X ){ $X = preg_replace ( '~ DESC$~' , '' , $X , 1 , $Gb ); $_h [ $X ] = ( $Gb ? - 1 : 1 );} return
2018-04-01 23:34:54 +02:00
new
2020-04-26 00:47:07 +02:00
Min_Result ( $this -> _conn -> _db -> selectCollection ( $Q ) -> find ( array (), $K ) -> sort ( $_h ) -> limit ( $z != " " ? + $z : 0 ) -> skip ( $D * $z ));} function
insert ( $Q , $N ){ try { $H = $this -> _conn -> _db -> selectCollection ( $Q ) -> insert ( $N ); $this -> _conn -> errno = $H [ 'code' ]; $this -> _conn -> error = $H [ 'err' ]; $this -> _conn -> last_id = $N [ '_id' ]; return ! $H [ 'err' ];} catch ( Exception $Ec ){ $this -> _conn -> error = $Ec -> getMessage (); return
2018-04-01 23:34:54 +02:00
false ;}}} function
2020-04-26 00:47:07 +02:00
get_databases ( $ed ){ global $h ; $H = array (); $Ub = $h -> _link -> listDBs (); foreach ( $Ub [ 'databases' ] as $l ) $H [] = $l [ 'name' ]; return $H ;} function
count_tables ( $k ){ global $h ; $H = array (); foreach ( $k
as $l ) $H [ $l ] = count ( $h -> _link -> selectDB ( $l ) -> getCollectionNames ( true )); return $H ;} function
2018-12-25 21:50:48 +01:00
tables_list (){ global $h ; return
array_fill_keys ( $h -> _db -> getCollectionNames ( true ), 'table' );} function
2020-04-26 00:47:07 +02:00
drop_databases ( $k ){ global $h ; foreach ( $k
as $l ){ $Rg = $h -> _link -> selectDB ( $l ) -> drop (); if ( ! $Rg [ 'ok' ]) return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
2020-04-26 00:47:07 +02:00
indexes ( $Q , $i = null ){ global $h ; $H = array (); foreach ( $h -> _db -> selectCollection ( $Q ) -> getIndexInfo () as $v ){ $cc = array (); foreach ( $v [ " key " ] as $e => $T ) $cc [] = ( $T ==- 1 ? '1' : null ); $H [ $v [ " name " ]] = array ( " type " => ( $v [ " name " ] == " _id_ " ? " PRIMARY " : ( $v [ " unique " ] ? " UNIQUE " : " INDEX " )), " columns " => array_keys ( $v [ " key " ]), " lengths " => array (), " descs " => $cc ,);} return $H ;} function
2018-12-25 21:50:48 +01:00
fields ( $Q ){ return
2018-04-01 23:34:54 +02:00
fields_from_edit ();} function
2020-04-26 00:47:07 +02:00
found_rows ( $R , $Z ){ global $h ; return $h -> _db -> selectCollection ( $_GET [ " select " ]) -> count ( $Z );} $_f = array ( " = " );} elseif ( class_exists ( 'MongoDB\Driver\Manager' )){ class
2018-06-30 00:38:01 +02:00
Min_DB { var $extension = " MongoDB " , $server_info = MONGODB_VERSION , $error , $last_id ; var $_link ; var $_db , $_db_name ; function
2020-04-26 00:47:07 +02:00
connect ( $Pi , $Cf ){ $lb = 'MongoDB\Driver\Manager' ; return
new $lb ( $Pi , $Cf );} function
query ( $F ){ return
2018-04-01 23:34:54 +02:00
false ;} function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ $this -> _db_name = $j ; return
2018-06-30 00:38:01 +02:00
true ;} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return $P ;}} class
2018-04-01 23:34:54 +02:00
Min_Result { var $num_rows , $_rows = array (), $_offset = 0 , $_charset = array (); function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ foreach ( $G
as $fe ){ $I = array (); foreach ( $fe
as $y => $X ){ if ( is_a ( $X , 'MongoDB\BSON\Binary' )) $this -> _charset [ $y ] = 63 ; $I [ $y ] = ( is_a ( $X , 'MongoDB\BSON\ObjectID' ) ? 'MongoDB\BSON\ObjectID("' . strval ( $X ) . '")' : ( is_a ( $X , 'MongoDB\BSON\UTCDatetime' ) ? $X -> toDateTime () -> format ( 'Y-m-d H:i:s' ) : ( is_a ( $X , 'MongoDB\BSON\Binary' ) ? $X -> bin : ( is_a ( $X , 'MongoDB\BSON\Regex' ) ? strval ( $X ) : ( is_object ( $X ) ? json_encode ( $X , 256 ) : $X )))));} $this -> _rows [] = $I ; foreach ( $I
as $y => $X ){ if ( ! isset ( $this -> _rows [ 0 ][ $y ])) $this -> _rows [ 0 ][ $y ] = null ;}} $this -> num_rows = $G -> count ;} function
fetch_assoc (){ $I = current ( $this -> _rows ); if ( ! $I ) return $I ; $H = array (); foreach ( $this -> _rows [ 0 ] as $y => $X ) $H [ $y ] = $I [ $y ]; next ( $this -> _rows ); return $H ;} function
fetch_row (){ $H = $this -> fetch_assoc (); if ( ! $H ) return $H ; return
array_values ( $H );} function
fetch_field (){ $le = array_keys ( $this -> _rows [ 0 ]); $B = $le [ $this -> _offset ++ ]; return ( object ) array ( 'name' => $B , 'charsetnr' => $this -> _charset [ $B ],);}} class
2018-04-01 23:34:54 +02:00
Min_Driver
extends
2020-04-26 00:47:07 +02:00
Min_SQL { public $pg = " _id " ; function
select ( $Q , $K , $Z , $rd , $Ef = array (), $z = 1 , $D = 0 , $rg = false ){ global $h ; $K = ( $K == array ( " * " ) ? array () : array_fill_keys ( $K , 1 )); if ( count ( $K ) &&! isset ( $K [ '_id' ])) $K [ '_id' ] = 0 ; $Z = where_to_query ( $Z ); $_h = array (); foreach ( $Ef
as $X ){ $X = preg_replace ( '~ DESC$~' , '' , $X , 1 , $Gb ); $_h [ $X ] = ( $Gb ? - 1 : 1 );} if ( isset ( $_GET [ 'limit' ]) && is_numeric ( $_GET [ 'limit' ]) && $_GET [ 'limit' ] > 0 ) $z = $_GET [ 'limit' ]; $z = min ( 200 , max ( 1 ,( int ) $z )); $xh = $D * $z ; $lb = 'MongoDB\Driver\Query' ; $F = new $lb ( $Z , array ( 'projection' => $K , 'limit' => $z , 'skip' => $xh , 'sort' => $_h )); $Ug = $h -> _link -> executeQuery ( " $h->_db_name . $Q " , $F ); return
2018-04-01 23:34:54 +02:00
new
2020-04-26 00:47:07 +02:00
Min_Result ( $Ug );} function
update ( $Q , $N , $Ag , $z = 0 , $L = " \n " ){ global $h ; $l = $h -> _db_name ; $Z = sql_query_where_parser ( $Ag ); $lb = 'MongoDB\Driver\BulkWrite' ; $ab = new $lb ( array ()); if ( isset ( $N [ '_id' ])) unset ( $N [ '_id' ]); $Og = array (); foreach ( $N
as $y => $Y ){ if ( $Y == 'NULL' ){ $Og [ $y ] = 1 ; unset ( $N [ $y ]);}} $Oi = array ( '$set' => $N ); if ( count ( $Og )) $Oi [ '$unset' ] = $Og ; $ab -> update ( $Z , $Oi , array ( 'upsert' => false )); $Ug = $h -> _link -> executeBulkWrite ( " $l . $Q " , $ab ); $h -> affected_rows = $Ug -> getModifiedCount (); return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
delete ( $Q , $Ag , $z = 0 ){ global $h ; $l = $h -> _db_name ; $Z = sql_query_where_parser ( $Ag ); $lb = 'MongoDB\Driver\BulkWrite' ; $ab = new $lb ( array ()); $ab -> delete ( $Z , array ( 'limit' => $z )); $Ug = $h -> _link -> executeBulkWrite ( " $l . $Q " , $ab ); $h -> affected_rows = $Ug -> getDeletedCount (); return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
insert ( $Q , $N ){ global $h ; $l = $h -> _db_name ; $lb = 'MongoDB\Driver\BulkWrite' ; $ab = new $lb ( array ()); if ( isset ( $N [ '_id' ]) && empty ( $N [ '_id' ])) unset ( $N [ '_id' ]); $ab -> insert ( $N ); $Ug = $h -> _link -> executeBulkWrite ( " $l . $Q " , $ab ); $h -> affected_rows = $Ug -> getInsertedCount (); return
2018-04-01 23:34:54 +02:00
true ;}} function
2020-04-26 00:47:07 +02:00
get_databases ( $ed ){ global $h ; $H = array (); $lb = 'MongoDB\Driver\Command' ; $tb = new $lb ( array ( 'listDatabases' => 1 )); $Ug = $h -> _link -> executeCommand ( 'admin' , $tb ); foreach ( $Ug
as $Ub ){ foreach ( $Ub -> databases
as $l ) $H [] = $l -> name ;} return $H ;} function
count_tables ( $k ){ $H = array (); return $H ;} function
tables_list (){ global $h ; $lb = 'MongoDB\Driver\Command' ; $tb = new $lb ( array ( 'listCollections' => 1 )); $Ug = $h -> _link -> executeCommand ( $h -> _db_name , $tb ); $rb = array (); foreach ( $Ug
as $G ) $rb [ $G -> name ] = 'table' ; return $rb ;} function
drop_databases ( $k ){ return
2018-04-01 23:34:54 +02:00
false ;} function
2020-04-26 00:47:07 +02:00
indexes ( $Q , $i = null ){ global $h ; $H = array (); $lb = 'MongoDB\Driver\Command' ; $tb = new $lb ( array ( 'listIndexes' => $Q )); $Ug = $h -> _link -> executeCommand ( $h -> _db_name , $tb ); foreach ( $Ug
as $v ){ $cc = array (); $f = array (); foreach ( get_object_vars ( $v -> key ) as $e => $T ){ $cc [] = ( $T ==- 1 ? '1' : null ); $f [] = $e ;} $H [ $v -> name ] = array ( " type " => ( $v -> name == " _id_ " ? " PRIMARY " : ( isset ( $v -> unique ) ? " UNIQUE " : " INDEX " )), " columns " => $f , " lengths " => array (), " descs " => $cc ,);} return $H ;} function
fields ( $Q ){ $p = fields_from_edit (); if ( ! count ( $p )){ global $m ; $G = $m -> select ( $Q , array ( " * " ), null , null , array (), 10 ); while ( $I = $G -> fetch_assoc ()){ foreach ( $I
as $y => $X ){ $I [ $y ] = null ; $p [ $y ] = array ( " field " => $y , " type " => " string " , " null " => ( $y != $m -> primary ), " auto_increment " => ( $y == $m -> primary ), " privileges " => array ( " insert " => 1 , " select " => 1 , " update " => 1 ,),);}}} return $p ;} function
found_rows ( $R , $Z ){ global $h ; $Z = where_to_query ( $Z ); $lb = 'MongoDB\Driver\Command' ; $tb = new $lb ( array ( 'count' => $R [ 'Name' ], 'query' => $Z )); $Ug = $h -> _link -> executeCommand ( $h -> _db_name , $tb ); $si = $Ug -> toArray (); return $si [ 0 ] -> n ;} function
sql_query_where_parser ( $Ag ){ $Ag = trim ( preg_replace ( '/WHERE[\s]?[(]?\(?/' , '' , $Ag )); $Ag = preg_replace ( '/\)\)\)$/' , ')' , $Ag ); $pj = explode ( ' AND ' , $Ag ); $qj = explode ( ') OR (' , $Ag ); $Z = array (); foreach ( $pj
as $nj ) $Z [] = trim ( $nj ); if ( count ( $qj ) == 1 ) $qj = array (); elseif ( count ( $qj ) > 1 ) $Z = array (); return
where_to_query ( $Z , $qj );} function
where_to_query ( $lj = array (), $mj = array ()){ global $b ; $Pb = array (); foreach ( array ( 'and' => $lj , 'or' => $mj ) as $T => $Z ){ if ( is_array ( $Z )){ foreach ( $Z
as $Lc ){ list ( $ob , $yf , $X ) = explode ( " " , $Lc , 3 ); if ( $ob == " _id " ){ $X = str_replace ( 'MongoDB\BSON\ObjectID("' , " " , $X ); $X = str_replace ( '")' , " " , $X ); $lb = 'MongoDB\BSON\ObjectID' ; $X = new $lb ( $X );} if ( ! in_array ( $yf , $b -> operators )) continue ; if ( preg_match ( '~^\(f\)(.+)~' , $yf , $A )){ $X = ( float ) $X ; $yf = $A [ 1 ];} elseif ( preg_match ( '~^\(date\)(.+)~' , $yf , $A )){ $Rb = new
DateTime ( $X ); $lb = 'MongoDB\BSON\UTCDatetime' ; $X = new $lb ( $Rb -> getTimestamp () * 1000 ); $yf = $A [ 1 ];} switch ( $yf ){ case '=' : $yf = '$eq' ; break ; case '!=' : $yf = '$ne' ; break ; case '>' : $yf = '$gt' ; break ; case '<' : $yf = '$lt' ; break ; case '>=' : $yf = '$gte' ; break ; case '<=' : $yf = '$lte' ; break ; case 'regex' : $yf = '$regex' ; break ; default : continue
2 ;} if ( $T == 'and' ) $Pb [ '$and' ][] = array ( $ob => array ( $yf => $X )); elseif ( $T == 'or' ) $Pb [ '$or' ][] = array ( $ob => array ( $yf => $X ));}}} return $Pb ;} $_f = array ( " = " , " != " , " > " , " < " , " >= " , " <= " , " regex " , " (f)= " , " (f)!= " , " (f)> " , " (f)< " , " (f)>= " , " (f)<= " , " (date)= " , " (date)!= " , " (date)> " , " (date)< " , " (date)>= " , " (date)<= " ,);} function
table ( $u ){ return $u ;} function
idf_escape ( $u ){ return $u ;} function
table_status ( $B = " " , $Sc = false ){ $H = array (); foreach ( tables_list () as $Q => $T ){ $H [ $Q ] = array ( " Name " => $Q ); if ( $B == $Q ) return $H [ $Q ];} return $H ;} function
create_database ( $l , $d ){ return
2018-06-30 00:38:01 +02:00
true ;} function
2018-12-25 21:50:48 +01:00
last_id (){ global $h ; return $h -> last_id ;} function
error (){ global $h ; return
h ( $h -> error );} function
2018-04-01 23:34:54 +02:00
collations (){ return
array ();} function
2020-04-26 00:47:07 +02:00
logged_user (){ global $b ; $Kb = $b -> credentials (); return $Kb [ 1 ];} function
2018-12-25 21:50:48 +01:00
connect (){ global $b ; $h = new
2020-04-26 00:47:07 +02:00
Min_DB ; list ( $M , $V , $E ) = $b -> credentials (); $Cf = array (); if ( $V . $E != " " ){ $Cf [ " username " ] = $V ; $Cf [ " password " ] = $E ;} $l = $b -> database (); if ( $l != " " ) $Cf [ " db " ] = $l ; if (( $Ma = getenv ( " MONGO_AUTH_SOURCE " ))) $Cf [ " authSource " ] = $Ma ; try { $h -> _link = $h -> connect ( " mongodb:// $M " , $Cf ); if ( $E != " " ){ $Cf [ " password " ] = " " ; try { $h -> connect ( " mongodb:// $M " , $Cf ); return
lang ( 22 );} catch ( Exception $Ec ){}} return $h ;} catch ( Exception $Ec ){ return $Ec -> getMessage ();}} function
2018-12-25 21:50:48 +01:00
alter_indexes ( $Q , $c ){ global $h ; foreach ( $c
2020-04-26 00:47:07 +02:00
as $X ){ list ( $T , $B , $N ) = $X ; if ( $N == " DROP " ) $H = $h -> _db -> command ( array ( " deleteIndexes " => $Q , " index " => $B )); else { $f = array (); foreach ( $N
as $e ){ $e = preg_replace ( '~ DESC$~' , '' , $e , 1 , $Gb ); $f [ $e ] = ( $Gb ? - 1 : 1 );} $H = $h -> _db -> selectCollection ( $Q ) -> ensureIndex ( $f , array ( " unique " => ( $T == " UNIQUE " ), " name " => $B ,));} if ( $H [ 'errmsg' ]){ $h -> error = $H [ 'errmsg' ]; return
2018-04-01 23:34:54 +02:00
false ;}} return
true ;} function
2020-04-26 00:47:07 +02:00
support ( $Tc ){ return
preg_match ( " ~database|indexes|descidx~ " , $Tc );} function
db_collation ( $l , $qb ){} function
2018-04-01 23:34:54 +02:00
information_schema (){} function
2018-12-25 21:50:48 +01:00
is_view ( $R ){} function
2020-04-26 00:47:07 +02:00
convert_field ( $o ){} function
unconvert_field ( $o , $H ){ return $H ;} function
2018-12-25 21:50:48 +01:00
foreign_keys ( $Q ){ return
2018-04-01 23:34:54 +02:00
array ();} function
2018-12-25 21:50:48 +01:00
fk_support ( $R ){} function
2018-04-01 23:34:54 +02:00
engines (){ return
array ();} function
2020-04-26 00:47:07 +02:00
alter_table ( $Q , $B , $p , $gd , $vb , $yc , $d , $Na , $Zf ){ global $h ; if ( $Q == " " ){ $h -> _db -> createCollection ( $B ); return
2018-04-01 23:34:54 +02:00
true ;}} function
2018-12-25 21:50:48 +01:00
drop_tables ( $S ){ global $h ; foreach ( $S
2020-04-26 00:47:07 +02:00
as $Q ){ $Rg = $h -> _db -> selectCollection ( $Q ) -> drop (); if ( ! $Rg [ 'ok' ]) return
2018-04-01 23:34:54 +02:00
false ;} return
true ;} function
2018-12-25 21:50:48 +01:00
truncate_tables ( $S ){ global $h ; foreach ( $S
2020-04-26 00:47:07 +02:00
as $Q ){ $Rg = $h -> _db -> selectCollection ( $Q ) -> remove (); if ( ! $Rg [ 'ok' ]) return
2018-04-01 23:34:54 +02:00
false ;} return
2020-04-26 00:47:07 +02:00
true ;} $x = " mongo " ; $od = array (); $ud = array (); $qc = array ( array ( " json " ));} $ic [ " elastic " ] = " Elasticsearch (beta) " ; if ( isset ( $_GET [ " elastic " ])){ $mg = array ( " json + allow_url_fopen " ); define ( " DRIVER " , " elastic " ); if ( function_exists ( 'json_decode' ) && ini_bool ( 'allow_url_fopen' )){ class
2018-04-01 23:34:54 +02:00
Min_DB { var $extension = " JSON " , $server_info , $errno , $error , $_url ; function
2020-04-26 00:47:07 +02:00
rootQuery ( $dg , $Bb = array (), $We = 'GET' ){ @ ini_set ( 'track_errors' , 1 ); $Xc =@ file_get_contents ( " $this->_url / " . ltrim ( $dg , '/' ), false , stream_context_create ( array ( 'http' => array ( 'method' => $We , 'content' => $Bb === null ? $Bb : json_encode ( $Bb ), 'header' => 'Content-Type: application/json' , 'ignore_errors' => 1 ,)))); if ( ! $Xc ){ $this -> error = $php_errormsg ; return $Xc ;} if ( ! preg_match ( '~^HTTP/[0-9.]+ 2~i' , $http_response_header [ 0 ])){ $this -> error = $Xc ; return
false ;} $H = json_decode ( $Xc , true ); if ( $H === null ){ $this -> errno = json_last_error (); if ( function_exists ( 'json_last_error_msg' )) $this -> error = json_last_error_msg (); else { $Ab = get_defined_constants ( true ); foreach ( $Ab [ 'json' ] as $B => $Y ){ if ( $Y == $this -> errno && preg_match ( '~^JSON_ERROR_~' , $B )){ $this -> error = $B ; break ;}}}} return $H ;} function
query ( $dg , $Bb = array (), $We = 'GET' ){ return $this -> rootQuery (( $this -> _db != " " ? " $this->_db / " : " / " ) . ltrim ( $dg , '/' ), $Bb , $We );} function
connect ( $M , $V , $E ){ preg_match ( '~^(https?://)?(.*)~' , $M , $A ); $this -> _url = ( $A [ 1 ] ? $A [ 1 ] : " http:// " ) . " $V : $E @ $A[2] " ; $H = $this -> query ( '' ); if ( $H ) $this -> server_info = $H [ 'version' ][ 'number' ]; return ( bool ) $H ;} function
select_db ( $j ){ $this -> _db = $j ; return
2018-04-01 23:34:54 +02:00
true ;} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return $P ;}} class
2018-04-01 23:34:54 +02:00
Min_Result { var $num_rows , $_rows ; function
2020-04-26 00:47:07 +02:00
__construct ( $J ){ $this -> num_rows = count ( $J ); $this -> _rows = $J ; reset ( $this -> _rows );} function
fetch_assoc (){ $H = current ( $this -> _rows ); next ( $this -> _rows ); return $H ;} function
2018-04-01 23:34:54 +02:00
fetch_row (){ return
array_values ( $this -> fetch_assoc ());}}} class
Min_Driver
extends
Min_SQL { function
2020-04-26 00:47:07 +02:00
select ( $Q , $K , $Z , $rd , $Ef = array (), $z = 1 , $D = 0 , $rg = false ){ global $b ; $Pb = array (); $F = " $Q /_search " ; if ( $K != array ( " * " )) $Pb [ " fields " ] = $K ; if ( $Ef ){ $_h = array (); foreach ( $Ef
as $ob ){ $ob = preg_replace ( '~ DESC$~' , '' , $ob , 1 , $Gb ); $_h [] = ( $Gb ? array ( $ob => " desc " ) : $ob );} $Pb [ " sort " ] = $_h ;} if ( $z ){ $Pb [ " size " ] =+ $z ; if ( $D ) $Pb [ " from " ] = ( $D * $z );} foreach ( $Z
as $X ){ list ( $ob , $yf , $X ) = explode ( " " , $X , 3 ); if ( $ob == " _id " ) $Pb [ " query " ][ " ids " ][ " values " ][] = $X ; elseif ( $ob . $X != " " ){ $fi = array ( " term " => array (( $ob != " " ? $ob : " _all " ) => $X )); if ( $yf == " = " ) $Pb [ " query " ][ " filtered " ][ " filter " ][ " and " ][] = $fi ; else $Pb [ " query " ][ " filtered " ][ " query " ][ " bool " ][ " must " ][] = $fi ;}} if ( $Pb [ " query " ] &&! $Pb [ " query " ][ " filtered " ][ " query " ] &&! $Pb [ " query " ][ " ids " ]) $Pb [ " query " ][ " filtered " ][ " query " ] = array ( " match_all " => array ()); $Ih = microtime ( true ); $hh = $this -> _conn -> query ( $F , $Pb ); if ( $rg ) echo $b -> selectQuery ( " $F : " . json_encode ( $Pb ), $Ih , ! $hh ); if ( ! $hh ) return
false ; $H = array (); foreach ( $hh [ 'hits' ][ 'hits' ] as $Dd ){ $I = array (); if ( $K == array ( " * " )) $I [ " _id " ] = $Dd [ " _id " ]; $p = $Dd [ '_source' ]; if ( $K != array ( " * " )){ $p = array (); foreach ( $K
as $y ) $p [ $y ] = $Dd [ 'fields' ][ $y ];} foreach ( $p
as $y => $X ){ if ( $Pb [ " fields " ]) $X = $X [ 0 ]; $I [ $y ] = ( is_array ( $X ) ? json_encode ( $X ) : $X );} $H [] = $I ;} return
2018-04-01 23:34:54 +02:00
new
2020-04-26 00:47:07 +02:00
Min_Result ( $H );} function
update ( $T , $Fg , $Ag , $z = 0 , $L = " \n " ){ $bg = preg_split ( '~ *= *~' , $Ag ); if ( count ( $bg ) == 2 ){ $t = trim ( $bg [ 1 ]); $F = " $T / $t " ; return $this -> _conn -> query ( $F , $Fg , 'POST' );} return
2018-04-01 23:34:54 +02:00
false ;} function
2020-04-26 00:47:07 +02:00
insert ( $T , $Fg ){ $t = " " ; $F = " $T / $t " ; $Rg = $this -> _conn -> query ( $F , $Fg , 'POST' ); $this -> _conn -> last_id = $Rg [ '_id' ]; return $Rg [ 'created' ];} function
delete ( $T , $Ag , $z = 0 ){ $Id = array (); if ( is_array ( $_GET [ " where " ]) && $_GET [ " where " ][ " _id " ]) $Id [] = $_GET [ " where " ][ " _id " ]; if ( is_array ( $_POST [ 'check' ])){ foreach ( $_POST [ 'check' ] as $eb ){ $bg = preg_split ( '~ *= *~' , $eb ); if ( count ( $bg ) == 2 ) $Id [] = trim ( $bg [ 1 ]);}} $this -> _conn -> affected_rows = 0 ; foreach ( $Id
as $t ){ $F = " { $T } / { $t } " ; $Rg = $this -> _conn -> query ( $F , '{}' , 'DELETE' ); if ( is_array ( $Rg ) && $Rg [ 'found' ] == true ) $this -> _conn -> affected_rows ++ ;} return $this -> _conn -> affected_rows ;}} function
2018-12-25 21:50:48 +01:00
connect (){ global $b ; $h = new
2020-04-26 00:47:07 +02:00
Min_DB ; list ( $M , $V , $E ) = $b -> credentials (); if ( $E != " " && $h -> connect ( $M , $V , " " )) return
lang ( 22 ); if ( $h -> connect ( $M , $V , $E )) return $h ; return $h -> error ;} function
support ( $Tc ){ return
preg_match ( " ~database|table|columns~ " , $Tc );} function
logged_user (){ global $b ; $Kb = $b -> credentials (); return $Kb [ 1 ];} function
get_databases (){ global $h ; $H = $h -> rootQuery ( '_aliases' ); if ( $H ){ $H = array_keys ( $H ); sort ( $H , SORT_STRING );} return $H ;} function
2018-04-01 23:34:54 +02:00
collations (){ return
array ();} function
2020-04-26 00:47:07 +02:00
db_collation ( $l , $qb ){} function
2018-04-01 23:34:54 +02:00
engines (){ return
array ();} function
2020-04-26 00:47:07 +02:00
count_tables ( $k ){ global $h ; $H = array (); $G = $h -> query ( '_stats' ); if ( $G && $G [ 'indices' ]){ $Qd = $G [ 'indices' ]; foreach ( $Qd
as $Pd => $Jh ){ $Od = $Jh [ 'total' ][ 'indexing' ]; $H [ $Pd ] = $Od [ 'index_total' ];}} return $H ;} function
tables_list (){ global $h ; $H = $h -> query ( '_mapping' ); if ( $H ) $H = array_fill_keys ( array_keys ( $H [ $h -> _db ][ " mappings " ]), 'table' ); return $H ;} function
table_status ( $B = " " , $Sc = false ){ global $h ; $hh = $h -> query ( " _search " , array ( " size " => 0 , " aggregations " => array ( " count_by_type " => array ( " terms " => array ( " field " => " _type " )))), " POST " ); $H = array (); if ( $hh ){ $S = $hh [ " aggregations " ][ " count_by_type " ][ " buckets " ]; foreach ( $S
as $Q ){ $H [ $Q [ " key " ]] = array ( " Name " => $Q [ " key " ], " Engine " => " table " , " Rows " => $Q [ " doc_count " ],); if ( $B != " " && $B == $Q [ " key " ]) return $H [ $B ];}} return $H ;} function
2018-12-25 21:50:48 +01:00
error (){ global $h ; return
h ( $h -> error );} function
2018-04-01 23:34:54 +02:00
information_schema (){} function
2018-12-25 21:50:48 +01:00
is_view ( $R ){} function
indexes ( $Q , $i = null ){ return
2018-04-01 23:34:54 +02:00
array ( array ( " type " => " PRIMARY " , " columns " => array ( " _id " )),);} function
2020-04-26 00:47:07 +02:00
fields ( $Q ){ global $h ; $G = $h -> query ( " $Q /_mapping " ); $H = array (); if ( $G ){ $Ee = $G [ $Q ][ 'properties' ]; if ( ! $Ee ) $Ee = $G [ $h -> _db ][ 'mappings' ][ $Q ][ 'properties' ]; if ( $Ee ){ foreach ( $Ee
as $B => $o ){ $H [ $B ] = array ( " field " => $B , " full_type " => $o [ " type " ], " type " => $o [ " type " ], " privileges " => array ( " insert " => 1 , " select " => 1 , " update " => 1 ),); if ( $o [ " properties " ]){ unset ( $H [ $B ][ " privileges " ][ " insert " ]); unset ( $H [ $B ][ " privileges " ][ " update " ]);}}}} return $H ;} function
2018-12-25 21:50:48 +01:00
foreign_keys ( $Q ){ return
2018-04-01 23:34:54 +02:00
array ();} function
2020-04-26 00:47:07 +02:00
table ( $u ){ return $u ;} function
idf_escape ( $u ){ return $u ;} function
convert_field ( $o ){} function
unconvert_field ( $o , $H ){ return $H ;} function
2018-12-25 21:50:48 +01:00
fk_support ( $R ){} function
found_rows ( $R , $Z ){ return
2018-04-01 23:34:54 +02:00
null ;} function
2020-04-26 00:47:07 +02:00
create_database ( $l ){ global $h ; return $h -> rootQuery ( urlencode ( $l ), null , 'PUT' );} function
drop_databases ( $k ){ global $h ; return $h -> rootQuery ( urlencode ( implode ( ',' , $k )), array (), 'DELETE' );} function
alter_table ( $Q , $B , $p , $gd , $vb , $yc , $d , $Na , $Zf ){ global $h ; $xg = array (); foreach ( $p
as $Qc ){ $Vc = trim ( $Qc [ 1 ][ 0 ]); $Wc = trim ( $Qc [ 1 ][ 1 ] ? $Qc [ 1 ][ 1 ] : " text " ); $xg [ $Vc ] = array ( 'type' => $Wc );} if ( ! empty ( $xg )) $xg = array ( 'properties' => $xg ); return $h -> query ( " _mapping/ { $B } " , $xg , 'PUT' );} function
drop_tables ( $S ){ global $h ; $H = true ; foreach ( $S
as $Q ) $H = $H && $h -> query ( urlencode ( $Q ), array (), 'DELETE' ); return $H ;} function
last_id (){ global $h ; return $h -> last_id ;} $x = " elastic " ; $_f = array ( " = " , " query " ); $od = array (); $ud = array (); $qc = array ( array ( " json " )); $U = array (); $Mh = array (); foreach ( array ( lang ( 27 ) => array ( " long " => 3 , " integer " => 5 , " short " => 8 , " byte " => 10 , " double " => 20 , " float " => 66 , " half_float " => 12 , " scaled_float " => 21 ), lang ( 28 ) => array ( " date " => 10 ), lang ( 25 ) => array ( " string " => 65535 , " text " => 65535 ), lang ( 29 ) => array ( " binary " => 255 ),) as $y => $X ){ $U += $X ; $Mh [ $y ] = array_keys ( $X );}} $ic [ " clickhouse " ] = " ClickHouse (alpha) " ; if ( isset ( $_GET [ " clickhouse " ])){ define ( " DRIVER " , " clickhouse " ); class
2018-12-25 21:50:48 +01:00
Min_DB { var $extension = " JSON " , $server_info , $errno , $_result , $error , $_url ; var $_db = 'default' ; function
2020-04-26 00:47:07 +02:00
rootQuery ( $l , $F ){ @ ini_set ( 'track_errors' , 1 ); $Xc =@ file_get_contents ( " $this->_url /?database= $l " , false , stream_context_create ( array ( 'http' => array ( 'method' => 'POST' , 'content' => $this -> isQuerySelectLike ( $F ) ? " $F FORMAT JSONCompact " : $F , 'header' => 'Content-type: application/x-www-form-urlencoded' , 'ignore_errors' => 1 ,)))); if ( $Xc === false ){ $this -> error = $php_errormsg ; return $Xc ;} if ( ! preg_match ( '~^HTTP/[0-9.]+ 2~i' , $http_response_header [ 0 ])){ $this -> error = $Xc ; return
false ;} $H = json_decode ( $Xc , true ); if ( $H === null ){ if ( ! $this -> isQuerySelectLike ( $F ) && $Xc === '' ) return
true ; $this -> errno = json_last_error (); if ( function_exists ( 'json_last_error_msg' )) $this -> error = json_last_error_msg (); else { $Ab = get_defined_constants ( true ); foreach ( $Ab [ 'json' ] as $B => $Y ){ if ( $Y == $this -> errno && preg_match ( '~^JSON_ERROR_~' , $B )){ $this -> error = $B ; break ;}}}} return
2018-12-25 21:50:48 +01:00
new
2020-04-26 00:47:07 +02:00
Min_Result ( $H );} function
isQuerySelectLike ( $F ){ return ( bool ) preg_match ( '~^(select|show)~i' , $F );} function
query ( $F ){ return $this -> rootQuery ( $this -> _db , $F );} function
connect ( $M , $V , $E ){ preg_match ( '~^(https?://)?(.*)~' , $M , $A ); $this -> _url = ( $A [ 1 ] ? $A [ 1 ] : " http:// " ) . " $V : $E @ $A[2] " ; $H = $this -> query ( 'SELECT 1' ); return ( bool ) $H ;} function
select_db ( $j ){ $this -> _db = $j ; return
2018-12-25 21:50:48 +01:00
true ;} function
quote ( $P ){ return " ' " . addcslashes ( $P , " \\ ' " ) . " ' " ;} function
2020-04-26 00:47:07 +02:00
multi_query ( $F ){ return $this -> _result = $this -> query ( $F );} function
2018-12-25 21:50:48 +01:00
store_result (){ return $this -> _result ;} function
next_result (){ return
false ;} function
2020-04-26 00:47:07 +02:00
result ( $F , $o = 0 ){ $G = $this -> query ( $F ); return $G [ 'data' ];}} class
2018-12-25 21:50:48 +01:00
Min_Result { var $num_rows , $_rows , $columns , $meta , $_offset = 0 ; function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ $this -> num_rows = $G [ 'rows' ]; $this -> _rows = $G [ 'data' ]; $this -> meta = $G [ 'meta' ]; $this -> columns = array_column ( $this -> meta , 'name' ); reset ( $this -> _rows );} function
fetch_assoc (){ $I = current ( $this -> _rows ); next ( $this -> _rows ); return $I === false ? false : array_combine ( $this -> columns , $I );} function
fetch_row (){ $I = current ( $this -> _rows ); next ( $this -> _rows ); return $I ;} function
fetch_field (){ $e = $this -> _offset ++ ; $H = new
stdClass ; if ( $e < count ( $this -> columns )){ $H -> name = $this -> meta [ $e ][ 'name' ]; $H -> orgname = $H -> name ; $H -> type = $this -> meta [ $e ][ 'type' ];} return $H ;}} class
2018-12-25 21:50:48 +01:00
Min_Driver
extends
Min_SQL { function
2020-04-26 00:47:07 +02:00
delete ( $Q , $Ag , $z = 0 ){ if ( $Ag === '' ) $Ag = 'WHERE 1=1' ; return
queries ( " ALTER TABLE " . table ( $Q ) . " DELETE $Ag " );} function
update ( $Q , $N , $Ag , $z = 0 , $L = " \n " ){ $aj = array (); foreach ( $N
as $y => $X ) $aj [] = " $y = $X " ; $F = $L . implode ( " , $L " , $aj ); return
queries ( " ALTER TABLE " . table ( $Q ) . " UPDATE $F $Ag " );}} function
idf_escape ( $u ){ return " ` " . str_replace ( " ` " , " `` " , $u ) . " ` " ;} function
table ( $u ){ return
idf_escape ( $u );} function
explain ( $h , $F ){ return '' ;} function
found_rows ( $R , $Z ){ $J = get_vals ( " SELECT COUNT(*) FROM " . idf_escape ( $R [ " Name " ]) . ( $Z ? " WHERE " . implode ( " AND " , $Z ) : " " )); return
empty ( $J ) ? false : $J [ 0 ];} function
alter_table ( $Q , $B , $p , $gd , $vb , $yc , $d , $Na , $Zf ){ $c = $Ef = array (); foreach ( $p
as $o ){ if ( $o [ 1 ][ 2 ] === " NULL " ) $o [ 1 ][ 1 ] = " Nullable( { $o [ 1 ][ 1 ] } ) " ; elseif ( $o [ 1 ][ 2 ] === ' NOT NULL' ) $o [ 1 ][ 2 ] = '' ; if ( $o [ 1 ][ 3 ]) $o [ 1 ][ 3 ] = '' ; $c [] = ( $o [ 1 ] ? ( $Q != " " ? ( $o [ 0 ] != " " ? " MODIFY COLUMN " : " ADD COLUMN " ) : " " ) . implode ( $o [ 1 ]) : " DROP COLUMN " . idf_escape ( $o [ 0 ])); $Ef [] = $o [ 1 ][ 0 ];} $c = array_merge ( $c , $gd ); $O = ( $yc ? " ENGINE " . $yc : " " ); if ( $Q == " " ) return
queries ( " CREATE TABLE " . table ( $B ) . " ( \n " . implode ( " , \n " , $c ) . " \n ) $O $Zf " . ' ORDER BY (' . implode ( ',' , $Ef ) . ')' ); if ( $Q != $B ){ $G = queries ( " RENAME TABLE " . table ( $Q ) . " TO " . table ( $B )); if ( $c ) $Q = $B ; else
return $G ;} if ( $O ) $c [] = ltrim ( $O ); return ( $c || $Zf ? queries ( " ALTER TABLE " . table ( $Q ) . " \n " . implode ( " , \n " , $c ) . $Zf ) : true );} function
2018-12-25 21:50:48 +01:00
truncate_tables ( $S ){ return
apply_queries ( " TRUNCATE TABLE " , $S );} function
2020-04-26 00:47:07 +02:00
drop_views ( $fj ){ return
drop_tables ( $fj );} function
2018-12-25 21:50:48 +01:00
drop_tables ( $S ){ return
apply_queries ( " DROP TABLE " , $S );} function
connect (){ global $b ; $h = new
2020-04-26 00:47:07 +02:00
Min_DB ; $Kb = $b -> credentials (); if ( $h -> connect ( $Kb [ 0 ], $Kb [ 1 ], $Kb [ 2 ])) return $h ; return $h -> error ;} function
get_databases ( $ed ){ global $h ; $G = get_rows ( 'SHOW DATABASES' ); $H = array (); foreach ( $G
as $I ) $H [] = $I [ 'name' ]; sort ( $H ); return $H ;} function
limit ( $F , $Z , $z , $C = 0 , $L = " " ){ return " $F $Z " . ( $z !== null ? $L . " LIMIT $z " . ( $C ? " , $C " : " " ) : " " );} function
limit1 ( $Q , $F , $Z , $L = " \n " ){ return
limit ( $F , $Z , 1 , 0 , $L );} function
db_collation ( $l , $qb ){} function
2018-12-25 21:50:48 +01:00
engines (){ return
array ( 'MergeTree' );} function
2020-04-26 00:47:07 +02:00
logged_user (){ global $b ; $Kb = $b -> credentials (); return $Kb [ 1 ];} function
tables_list (){ $G = get_rows ( 'SHOW TABLES' ); $H = array (); foreach ( $G
as $I ) $H [ $I [ 'name' ]] = 'table' ; ksort ( $H ); return $H ;} function
count_tables ( $k ){ return
2018-12-25 21:50:48 +01:00
array ();} function
2020-04-26 00:47:07 +02:00
table_status ( $B = " " , $Sc = false ){ global $h ; $H = array (); $S = get_rows ( " SELECT name, engine FROM system.tables WHERE database = " . q ( $h -> _db )); foreach ( $S
as $Q ){ $H [ $Q [ 'name' ]] = array ( 'Name' => $Q [ 'name' ], 'Engine' => $Q [ 'engine' ],); if ( $B === $Q [ 'name' ]) return $H [ $Q [ 'name' ]];} return $H ;} function
2018-12-25 21:50:48 +01:00
is_view ( $R ){ return
false ;} function
fk_support ( $R ){ return
false ;} function
2020-04-26 00:47:07 +02:00
convert_field ( $o ){} function
unconvert_field ( $o , $H ){ if ( in_array ( $o [ 'type' ], array ( " Int8 " , " Int16 " , " Int32 " , " Int64 " , " UInt8 " , " UInt16 " , " UInt32 " , " UInt64 " , " Float32 " , " Float64 " ))) return " to $o[type] ( $H ) " ; return $H ;} function
fields ( $Q ){ $H = array (); $G = get_rows ( " SELECT name, type, default_expression FROM system.columns WHERE " . idf_escape ( 'table' ) . " = " . q ( $Q )); foreach ( $G
as $I ){ $T = trim ( $I [ 'type' ]); $kf = strpos ( $T , 'Nullable(' ) === 0 ; $H [ trim ( $I [ 'name' ])] = array ( " field " => trim ( $I [ 'name' ]), " full_type " => $T , " type " => $T , " default " => trim ( $I [ 'default_expression' ]), " null " => $kf , " auto_increment " => '0' , " privileges " => array ( " insert " => 1 , " select " => 1 , " update " => 0 ),);} return $H ;} function
2018-12-25 21:50:48 +01:00
indexes ( $Q , $i = null ){ return
array ();} function
foreign_keys ( $Q ){ return
array ();} function
collations (){ return
array ();} function
2020-04-26 00:47:07 +02:00
information_schema ( $l ){ return
2018-12-25 21:50:48 +01:00
false ;} function
error (){ global $h ; return
h ( $h -> error );} function
types (){ return
array ();} function
schemas (){ return
array ();} function
get_schema (){ return " " ;} function
2020-04-26 00:47:07 +02:00
set_schema ( $fh ){ return
2018-12-25 21:50:48 +01:00
true ;} function
auto_increment (){ return '' ;} function
last_id (){ return
0 ;} function
2020-04-26 00:47:07 +02:00
support ( $Tc ){ return
preg_match ( " ~^(columns|sql|status|table|drop_col) $ ~ " , $Tc );} $x = " clickhouse " ; $U = array (); $Mh = array (); foreach ( array ( lang ( 27 ) => array ( " Int8 " => 3 , " Int16 " => 5 , " Int32 " => 10 , " Int64 " => 19 , " UInt8 " => 3 , " UInt16 " => 5 , " UInt32 " => 10 , " UInt64 " => 20 , " Float32 " => 7 , " Float64 " => 16 , 'Decimal' => 38 , 'Decimal32' => 9 , 'Decimal64' => 18 , 'Decimal128' => 38 ), lang ( 28 ) => array ( " Date " => 13 , " DateTime " => 20 ), lang ( 25 ) => array ( " String " => 0 ), lang ( 29 ) => array ( " FixedString " => 0 ),) as $y => $X ){ $U += $X ; $Mh [ $y ] = array_keys ( $X );} $Ni = array (); $_f = array ( " = " , " < " , " > " , " <= " , " >= " , " != " , " ~ " , " !~ " , " LIKE " , " LIKE %% " , " IN " , " IS NULL " , " NOT LIKE " , " NOT IN " , " IS NOT NULL " , " SQL " ); $od = array (); $ud = array ( " avg " , " count " , " count distinct " , " max " , " min " , " sum " ); $qc = array ();} $ic = array ( " server " => " MySQL " ) + $ic ; if ( ! defined ( " DRIVER " )){ $mg = array ( " MySQLi " , " MySQL " , " PDO_MySQL " ); define ( " DRIVER " , " server " ); if ( extension_loaded ( " mysqli " )){ class
2014-05-08 19:46:08 +02:00
Min_DB
extends
MySQLi { var $extension = " MySQLi " ; function
2017-06-25 00:56:50 +02:00
__construct (){ parent :: init ();} function
2020-04-26 00:47:07 +02:00
connect ( $M = " " , $V = " " , $E = " " , $j = null , $ig = null , $zh = null ){ global $b ; mysqli_report ( MYSQLI_REPORT_OFF ); list ( $Ed , $ig ) = explode ( " : " , $M , 2 ); $Hh = $b -> connectSsl (); if ( $Hh ) $this -> ssl_set ( $Hh [ 'key' ], $Hh [ 'cert' ], $Hh [ 'ca' ], '' , '' ); $H =@ $this -> real_connect (( $M != " " ? $Ed : ini_get ( " mysqli.default_host " )),( $M . $V != " " ? $V : ini_get ( " mysqli.default_user " )),( $M . $V . $E != " " ? $E : ini_get ( " mysqli.default_pw " )), $j ,( is_numeric ( $ig ) ? $ig : ini_get ( " mysqli.default_port " )),( ! is_numeric ( $ig ) ? $ig : $zh ),( $Hh ? 64 : 0 )); $this -> options ( MYSQLI_OPT_LOCAL_INFILE , false ); return $H ;} function
set_charset ( $db ){ if ( parent :: set_charset ( $db )) return
true ; parent :: set_charset ( 'utf8' ); return $this -> query ( " SET NAMES $db " );} function
result ( $F , $o = 0 ){ $G = $this -> query ( $F ); if ( ! $G ) return
false ; $I = $G -> fetch_array (); return $I [ $o ];} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return " ' " . $this -> escape_string ( $P ) . " ' " ;}}} elseif ( extension_loaded ( " mysql " ) &&! (( ini_bool ( " sql.safe_mode " ) || ini_bool ( " mysql.allow_local_infile " )) && extension_loaded ( " pdo_mysql " ))){ class
2014-05-08 19:46:08 +02:00
Min_DB { var $extension = " MySQL " , $server_info , $affected_rows , $errno , $error , $_link , $_result ; function
2020-04-26 00:47:07 +02:00
connect ( $M , $V , $E ){ if ( ini_bool ( " mysql.allow_local_infile " )){ $this -> error = lang ( 32 , " 'mysql.allow_local_infile' " , " MySQLi " , " PDO_MySQL " ); return
false ;} $this -> _link =@ mysql_connect (( $M != " " ? $M : ini_get ( " mysql.default_host " )),( " $M $V " != " " ? $V : ini_get ( " mysql.default_user " )),( " $M $V $E " != " " ? $E : ini_get ( " mysql.default_password " )), true , 131072 ); if ( $this -> _link ) $this -> server_info = mysql_get_server_info ( $this -> _link ); else $this -> error = mysql_error (); return ( bool ) $this -> _link ;} function
set_charset ( $db ){ if ( function_exists ( 'mysql_set_charset' )){ if ( mysql_set_charset ( $db , $this -> _link )) return
true ; mysql_set_charset ( 'utf8' , $this -> _link );} return $this -> query ( " SET NAMES $db " );} function
2018-12-25 21:50:48 +01:00
quote ( $P ){ return " ' " . mysql_real_escape_string ( $P , $this -> _link ) . " ' " ;} function
2020-04-26 00:47:07 +02:00
select_db ( $j ){ return
mysql_select_db ( $j , $this -> _link );} function
query ( $F , $Hi = false ){ $G =@ ( $Hi ? 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
2014-05-08 19:46:08 +02:00
true ;} return
new
2020-04-26 00:47:07 +02:00
Min_Result ( $G );} function
multi_query ( $F ){ return $this -> _result = $this -> query ( $F );} function
2014-05-08 19:46:08 +02:00
store_result (){ return $this -> _result ;} function
next_result (){ return
false ;} function
2020-04-26 00:47:07 +02:00
result ( $F , $o = 0 ){ $G = $this -> query ( $F ); if ( ! $G ||! $G -> num_rows ) return
2014-05-08 19:46:08 +02:00
false ; return
2020-04-26 00:47:07 +02:00
mysql_result ( $G -> _result , 0 , $o );}} class
2014-05-08 19:46:08 +02:00
Min_Result { var $num_rows , $_result , $_offset = 0 ; function
2020-04-26 00:47:07 +02:00
__construct ( $G ){ $this -> _result = $G ; $this -> num_rows = mysql_num_rows ( $G );} function
2014-05-08 19:46:08 +02:00
fetch_assoc (){ return
mysql_fetch_assoc ( $this -> _result );} function
fetch_row (){ return
mysql_fetch_row ( $this -> _result );} function
2020-04-26 00:47:07 +02:00
fetch_field (){ $H = mysql_fetch_field ( $this -> _result , $this -> _offset ++ ); $H -> orgtable = $H -> table ; $H -> orgname = $H -> name ; $H -> charsetnr = ( $H -> blob ? 63 : 0 ); return $H ;} function
2014-05-08 19:46:08 +02:00
__destruct (){ mysql_free_result ( $this -> _result );}}} elseif ( extension_loaded ( " pdo_mysql " )){ class
Min_DB
extends
Min_PDO { var $extension = " PDO_MySQL " ; function
2020-04-26 00:47:07 +02:00
connect ( $M , $V , $E ){ global $b ; $Cf = array ( PDO :: MYSQL_ATTR_LOCAL_INFILE => false ); $Hh = $b -> connectSsl (); if ( $Hh ){ if ( ! empty ( $Hh [ 'key' ])) $Cf [ PDO :: MYSQL_ATTR_SSL_KEY ] = $Hh [ 'key' ]; if ( ! empty ( $Hh [ 'cert' ])) $Cf [ PDO :: MYSQL_ATTR_SSL_CERT ] = $Hh [ 'cert' ]; if ( ! empty ( $Hh [ 'ca' ])) $Cf [ PDO :: MYSQL_ATTR_SSL_CA ] = $Hh [ 'ca' ];} $this -> dsn ( " mysql:charset=utf8;host= " . str_replace ( " : " , " ;unix_socket= " , preg_replace ( '~:(\d)~' , ';port=\1' , $M )), $V , $E , $Cf ); return
2014-05-08 19:46:08 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
set_charset ( $db ){ $this -> query ( " SET NAMES $db " );} function
select_db ( $j ){ return $this -> query ( " USE " . idf_escape ( $j ));} function
query ( $F , $Hi = false ){ $this -> setAttribute ( 1000 , ! $Hi ); return
parent :: query ( $F , $Hi );}}} class
2014-05-08 19:46:08 +02:00
Min_Driver
extends
Min_SQL { function
2020-04-26 00:47:07 +02:00
insert ( $Q , $N ){ return ( $N ? parent :: insert ( $Q , $N ) : queries ( " INSERT INTO " . table ( $Q ) . " () \n VALUES () " ));} function
insertUpdate ( $Q , $J , $pg ){ $f = array_keys ( reset ( $J )); $ng = " INSERT INTO " . table ( $Q ) . " ( " . implode ( " , " , $f ) . " ) VALUES \n " ; $aj = array (); foreach ( $f
as $y ) $aj [ $y ] = " $y = VALUES( $y ) " ; $Ph = " \n ON DUPLICATE KEY UPDATE " . implode ( " , " , $aj ); $aj = array (); $ye = 0 ; foreach ( $J
as $N ){ $Y = " ( " . implode ( " , " , $N ) . " ) " ; if ( $aj && ( strlen ( $ng ) + $ye + strlen ( $Y ) + strlen ( $Ph ) > 1e6 )){ if ( ! queries ( $ng . implode ( " , \n " , $aj ) . $Ph )) return
false ; $aj = array (); $ye = 0 ;} $aj [] = $Y ; $ye += strlen ( $Y ) + 2 ;} return
queries ( $ng . implode ( " , \n " , $aj ) . $Ph );} function
slowQuery ( $F , $ki ){ if ( min_version ( '5.7.8' , '10.1.2' )){ if ( preg_match ( '~MariaDB~' , $this -> _conn -> server_info )) return " SET STATEMENT max_statement_time= $ki FOR $F " ; elseif ( preg_match ( '~^(SELECT\b)(.+)~is' , $F , $A )) return " $A[1] /*+ MAX_EXECUTION_TIME( " . ( $ki * 1000 ) . " ) */ $A[2] " ;}} function
convertSearch ( $u , $X , $o ){ return ( preg_match ( '~char|text|enum|set~' , $o [ " type " ]) &&! preg_match ( " ~^utf8~ " , $o [ " collation " ]) && preg_match ( '~[\x80-\xFF]~' , $X [ 'val' ]) ? " CONVERT( $u USING " . charset ( $this -> _conn ) . " ) " : $u );} function
warnings (){ $G = $this -> _conn -> query ( " SHOW WARNINGS " ); if ( $G && $G -> num_rows ){ ob_start (); select ( $G ); return
2018-04-01 23:34:54 +02:00
ob_get_clean ();}} function
2020-04-26 00:47:07 +02:00
tableHelp ( $B ){ $Fe = preg_match ( '~MariaDB~' , $this -> _conn -> server_info ); if ( information_schema ( DB )) return
strtolower (( $Fe ? " information-schema- $B -table/ " : str_replace ( " _ " , " - " , $B ) . " -table.html " )); if ( DB == " mysql " ) return ( $Fe ? " mysql $B -table/ " : " system-database.html " );}} function
idf_escape ( $u ){ return " ` " . str_replace ( " ` " , " `` " , $u ) . " ` " ;} function
table ( $u ){ return
idf_escape ( $u );} function
connect (){ global $b , $U , $Mh ; $h = new
Min_DB ; $Kb = $b -> credentials (); if ( $h -> connect ( $Kb [ 0 ], $Kb [ 1 ], $Kb [ 2 ])){ $h -> set_charset ( charset ( $h )); $h -> query ( " SET sql_quote_show_create = 1, autocommit = 1 " ); if ( min_version ( '5.7.8' , 10.2 , $h )){ $Mh [ lang ( 25 )][] = " json " ; $U [ " json " ] = 4294967295 ;} return $h ;} $H = $h -> error ; if ( function_exists ( 'iconv' ) &&! is_utf8 ( $H ) && strlen ( $dh = iconv ( " windows-1250 " , " utf-8 " , $H )) > strlen ( $H )) $H = $dh ; return $H ;} function
get_databases ( $ed ){ $H = get_session ( " dbs " ); if ( $H === null ){ $F = ( min_version ( 5 ) ? " SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME " : " SHOW DATABASES " ); $H = ( $ed ? slow_query ( $F ) : get_vals ( $F )); restart_session (); set_session ( " dbs " , $H ); stop_session ();} return $H ;} function
limit ( $F , $Z , $z , $C = 0 , $L = " " ){ return " $F $Z " . ( $z !== null ? $L . " LIMIT $z " . ( $C ? " OFFSET $C " : " " ) : " " );} function
limit1 ( $Q , $F , $Z , $L = " \n " ){ return
limit ( $F , $Z , 1 , 0 , $L );} function
db_collation ( $l , $qb ){ global $h ; $H = null ; $Hb = $h -> result ( " SHOW CREATE DATABASE " . idf_escape ( $l ), 1 ); if ( preg_match ( '~ COLLATE ([^ ]+)~' , $Hb , $A )) $H = $A [ 1 ]; elseif ( preg_match ( '~ CHARACTER SET ([^ ]+)~' , $Hb , $A )) $H = $qb [ $A [ 1 ]][ - 1 ]; return $H ;} function
engines (){ $H = array (); foreach ( get_rows ( " SHOW ENGINES " ) as $I ){ if ( preg_match ( " ~YES|DEFAULT~ " , $I [ " Support " ])) $H [] = $I [ " Engine " ];} return $H ;} function
2018-12-25 21:50:48 +01:00
logged_user (){ global $h ; return $h -> result ( " SELECT USER() " );} function
2018-04-01 23:34:54 +02:00
tables_list (){ return
get_key_vals ( min_version ( 5 ) ? " SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME " : " SHOW TABLES " );} function
2020-04-26 00:47:07 +02:00
count_tables ( $k ){ $H = array (); foreach ( $k
as $l ) $H [ $l ] = count ( get_vals ( " SHOW TABLES IN " . idf_escape ( $l ))); return $H ;} function
table_status ( $B = " " , $Sc = false ){ $H = array (); foreach ( get_rows ( $Sc && min_version ( 5 ) ? " SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() " . ( $B != " " ? " AND TABLE_NAME = " . q ( $B ) : " ORDER BY Name " ) : " SHOW TABLE STATUS " . ( $B != " " ? " LIKE " . q ( addcslashes ( $B , " %_ \\ " )) : " " )) as $I ){ if ( $I [ " Engine " ] == " InnoDB " ) $I [ " Comment " ] = preg_replace ( '~(?:(.+); )?InnoDB free: .*~' , '\1' , $I [ " Comment " ]); if ( ! isset ( $I [ " Engine " ])) $I [ " Comment " ] = " " ; if ( $B != " " ) return $I ; $H [ $I [ " Name " ]] = $I ;} return $H ;} function
2018-12-25 21:50:48 +01:00
is_view ( $R ){ return $R [ " Engine " ] === null ;} function
fk_support ( $R ){ return
preg_match ( '~InnoDB|IBMDB2I~i' , $R [ " Engine " ]) || ( preg_match ( '~NDB~i' , $R [ " Engine " ]) && min_version ( 5.6 ));} function
2020-04-26 00:47:07 +02:00
fields ( $Q ){ $H = array (); foreach ( get_rows ( " SHOW FULL COLUMNS FROM " . table ( $Q )) as $I ){ preg_match ( '~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~' , $I [ " Type " ], $A ); $H [ $I [ " Field " ]] = array ( " field " => $I [ " Field " ], " full_type " => $I [ " Type " ], " type " => $A [ 1 ], " length " => $A [ 2 ], " unsigned " => ltrim ( $A [ 3 ] . $A [ 4 ]), " default " => ( $I [ " Default " ] != " " || preg_match ( " ~char|set~ " , $A [ 1 ]) ? $I [ " Default " ] : null ), " null " => ( $I [ " Null " ] == " YES " ), " auto_increment " => ( $I [ " Extra " ] == " auto_increment " ), " on_update " => ( preg_match ( '~^on update (.+)~i' , $I [ " Extra " ], $A ) ? $A [ 1 ] : " " ), " collation " => $I [ " Collation " ], " privileges " => array_flip ( preg_split ( '~, *~' , $I [ " Privileges " ])), " comment " => $I [ " Comment " ], " primary " => ( $I [ " Key " ] == " PRI " ), " generated " => preg_match ( '~^(VIRTUAL|PERSISTENT|STORED)~' , $I [ " Extra " ]),);} return $H ;} function
indexes ( $Q , $i = null ){ $H = array (); foreach ( get_rows ( " SHOW INDEX FROM " . table ( $Q ), $i ) as $I ){ $B = $I [ " Key_name " ]; $H [ $B ][ " type " ] = ( $B == " PRIMARY " ? " PRIMARY " : ( $I [ " Index_type " ] == " FULLTEXT " ? " FULLTEXT " : ( $I [ " Non_unique " ] ? ( $I [ " Index_type " ] == " SPATIAL " ? " SPATIAL " : " INDEX " ) : " UNIQUE " ))); $H [ $B ][ " columns " ][] = $I [ " Column_name " ]; $H [ $B ][ " lengths " ][] = ( $I [ " Index_type " ] == " SPATIAL " ? null : $I [ " Sub_part " ]); $H [ $B ][ " descs " ][] = null ;} return $H ;} function
foreign_keys ( $Q ){ global $h , $vf ; static $fg = '(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")' ; $H = array (); $Ib = $h -> result ( " SHOW CREATE TABLE " . table ( $Q ), 1 ); if ( $Ib ){ preg_match_all ( " ~CONSTRAINT ( $fg ) FOREIGN KEY ? \\ (((?: $fg ,? ?)+) \\ ) REFERENCES ( $fg )(?: \\ .( $fg ))? \\ (((?: $fg ,? ?)+) \\ )(?: ON DELETE ( $vf ))?(?: ON UPDATE ( $vf ))?~ " , $Ib , $Ie , PREG_SET_ORDER ); foreach ( $Ie
as $A ){ preg_match_all ( " ~ $fg ~ " , $A [ 2 ], $Ah ); preg_match_all ( " ~ $fg ~ " , $A [ 5 ], $ci ); $H [ idf_unescape ( $A [ 1 ])] = array ( " db " => idf_unescape ( $A [ 4 ] != " " ? $A [ 3 ] : $A [ 4 ]), " table " => idf_unescape ( $A [ 4 ] != " " ? $A [ 4 ] : $A [ 3 ]), " source " => array_map ( 'idf_unescape' , $Ah [ 0 ]), " target " => array_map ( 'idf_unescape' , $ci [ 0 ]), " on_delete " => ( $A [ 6 ] ? $A [ 6 ] : " RESTRICT " ), " on_update " => ( $A [ 7 ] ? $A [ 7 ] : " RESTRICT " ),);}} return $H ;} function
view ( $B ){ global $h ; return
array ( " select " => preg_replace ( '~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU' , '' , $h -> result ( " SHOW CREATE VIEW " . table ( $B ), 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 $y => $X ) asort ( $H [ $y ]); return $H ;} function
information_schema ( $l ){ return ( min_version ( 5 ) && $l == " information_schema " ) || ( min_version ( 5.5 ) && $l == " performance_schema " );} function
2018-12-25 21:50:48 +01:00
error (){ global $h ; return
h ( preg_replace ( '~^You have an error.*syntax to use~U' , " Syntax error " , $h -> error ));} function
2020-04-26 00:47:07 +02:00
create_database ( $l , $d ){ return
queries ( " CREATE DATABASE " . idf_escape ( $l ) . ( $d ? " COLLATE " . q ( $d ) : " " ));} function
drop_databases ( $k ){ $H = apply_queries ( " DROP DATABASE " , $k , 'idf_escape' ); restart_session (); set_session ( " dbs " , null ); return $H ;} function
rename_database ( $B , $d ){ $H = false ; if ( create_database ( $B , $d )){ $Pg = array (); foreach ( tables_list () as $Q => $T ) $Pg [] = table ( $Q ) . " TO " . idf_escape ( $B ) . " . " . table ( $Q ); $H = ( ! $Pg || queries ( " RENAME TABLE " . implode ( " , " , $Pg ))); if ( $H ) queries ( " DROP DATABASE " . idf_escape ( DB )); restart_session (); set_session ( " dbs " , null );} return $H ;} function
auto_increment (){ $Oa = " PRIMARY KEY " ; if ( $_GET [ " create " ] != " " && $_POST [ " auto_increment_col " ]){ foreach ( indexes ( $_GET [ " create " ]) as $v ){ if ( in_array ( $_POST [ " fields " ][ $_POST [ " auto_increment_col " ]][ " orig " ], $v [ " columns " ], true )){ $Oa = " " ; break ;} if ( $v [ " type " ] == " PRIMARY " ) $Oa = " UNIQUE " ;}} return " AUTO_INCREMENT $Oa " ;} function
alter_table ( $Q , $B , $p , $gd , $vb , $yc , $d , $Na , $Zf ){ $c = array (); foreach ( $p
as $o ) $c [] = ( $o [ 1 ] ? ( $Q != " " ? ( $o [ 0 ] != " " ? " CHANGE " . idf_escape ( $o [ 0 ]) : " ADD " ) : " " ) . " " . implode ( $o [ 1 ]) . ( $Q != " " ? $o [ 2 ] : " " ) : " DROP " . idf_escape ( $o [ 0 ])); $c = array_merge ( $c , $gd ); $O = ( $vb !== null ? " COMMENT= " . q ( $vb ) : " " ) . ( $yc ? " ENGINE= " . q ( $yc ) : " " ) . ( $d ? " COLLATE " . q ( $d ) : " " ) . ( $Na != " " ? " AUTO_INCREMENT= $Na " : " " ); if ( $Q == " " ) return
queries ( " CREATE TABLE " . table ( $B ) . " ( \n " . implode ( " , \n " , $c ) . " \n ) $O $Zf " ); if ( $Q != $B ) $c [] = " RENAME TO " . table ( $B ); if ( $O ) $c [] = ltrim ( $O ); return ( $c || $Zf ? queries ( " ALTER TABLE " . table ( $Q ) . " \n " . implode ( " , \n " , $c ) . $Zf ) : true );} function
2018-12-25 21:50:48 +01:00
alter_indexes ( $Q , $c ){ foreach ( $c
2020-04-26 00:47:07 +02:00
as $y => $X ) $c [ $y ] = ( $X [ 2 ] == " DROP " ? " \n DROP INDEX " . idf_escape ( $X [ 1 ]) : " \n ADD $X[0] " . ( $X [ 0 ] == " PRIMARY " ? " KEY " : " " ) . ( $X [ 1 ] != " " ? idf_escape ( $X [ 1 ]) . " " : " " ) . " ( " . implode ( " , " , $X [ 2 ]) . " ) " ); return
2018-12-25 21:50:48 +01:00
queries ( " ALTER TABLE " . table ( $Q ) . implode ( " , " , $c ));} function
truncate_tables ( $S ){ return
apply_queries ( " TRUNCATE TABLE " , $S );} function
2020-04-26 00:47:07 +02:00
drop_views ( $fj ){ return
queries ( " DROP VIEW " . implode ( " , " , array_map ( 'table' , $fj )));} function
2018-12-25 21:50:48 +01:00
drop_tables ( $S ){ return
queries ( " DROP TABLE " . implode ( " , " , array_map ( 'table' , $S )));} function
2020-04-26 00:47:07 +02:00
move_tables ( $S , $fj , $ci ){ $Pg = array (); foreach ( array_merge ( $S , $fj ) as $Q ) $Pg [] = table ( $Q ) . " TO " . idf_escape ( $ci ) . " . " . table ( $Q ); return
queries ( " RENAME TABLE " . implode ( " , " , $Pg ));} function
copy_tables ( $S , $fj , $ci ){ queries ( " SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO' " ); foreach ( $S
as $Q ){ $B = ( $ci == DB ? table ( " copy_ $Q " ) : idf_escape ( $ci ) . " . " . table ( $Q )); if (( $_POST [ " overwrite " ] &&! queries ( " \n DROP TABLE IF EXISTS $B " )) ||! queries ( " CREATE TABLE $B LIKE " . table ( $Q )) ||! queries ( " INSERT INTO $B SELECT * FROM " . table ( $Q ))) return
false ; foreach ( get_rows ( " SHOW TRIGGERS LIKE " . q ( addcslashes ( $Q , " %_ \\ " ))) as $I ){ $Bi = $I [ " Trigger " ]; if ( ! queries ( " CREATE TRIGGER " . ( $ci == DB ? idf_escape ( " copy_ $Bi " ) : idf_escape ( $ci ) . " . " . idf_escape ( $Bi )) . " $I[Timing] $I[Event] ON $B FOR EACH ROW \n $I[Statement] ; " )) return
false ;}} foreach ( $fj
as $Q ){ $B = ( $ci == DB ? table ( " copy_ $Q " ) : idf_escape ( $ci ) . " . " . table ( $Q )); $ej = view ( $Q ); if (( $_POST [ " overwrite " ] &&! queries ( " DROP VIEW IF EXISTS $B " )) ||! queries ( " CREATE VIEW $B AS $ej[select] " )) return
2014-05-08 19:46:08 +02:00
false ;} return
true ;} function
2020-04-26 00:47:07 +02:00
trigger ( $B ){ if ( $B == " " ) return
array (); $J = get_rows ( " SHOW TRIGGERS WHERE `Trigger` = " . q ( $B )); return
reset ( $J );} function
triggers ( $Q ){ $H = array (); foreach ( get_rows ( " SHOW TRIGGERS LIKE " . q ( addcslashes ( $Q , " %_ \\ " ))) as $I ) $H [ $I [ " Trigger " ]] = array ( $I [ " Timing " ], $I [ " Event " ]); return $H ;} function
2014-05-08 19:46:08 +02:00
trigger_options (){ return
array ( " Timing " => array ( " BEFORE " , " AFTER " ), " Event " => array ( " INSERT " , " UPDATE " , " DELETE " ), " Type " => array ( " FOR EACH ROW " ),);} function
2020-04-26 00:47:07 +02:00
routine ( $B , $T ){ global $h , $_c , $Vd , $U ; $Da = array ( " bool " , " boolean " , " integer " , " double precision " , " real " , " dec " , " numeric " , " fixed " , " national char " , " national varchar " ); $Bh = " (?: \\ s|/ \\ *[ \ s \ S]*? \\ */|(?:#|-- )[^ \n ]* \n ?|-- \r ? \n ) " ; $Gi = " (( " . implode ( " | " , array_merge ( array_keys ( $U ), $Da )) . " ) \\ b(?: \\ s* \\ (((?:[^' \" )]| $_c )++) \\ ))? \\ s*(zerofill \\ s*)?(unsigned(?: \\ s+zerofill)?)?)(?: \\ s*(?:CHARSET|CHARACTER \\ s+SET) \\ s*[' \" ]?([^' \" \\ s,]+)[' \" ]?)? " ; $fg = " $Bh *( " . ( $T == " FUNCTION " ? " " : $Vd ) . " )? \\ s*(?:`((?:[^`]|``)*)` \\ s*| \\ b( \\ S+) \\ s+) $Gi " ; $Hb = $h -> result ( " SHOW CREATE $T " . idf_escape ( $B ), 2 ); preg_match ( " ~ \\ (((?: $fg\\s *,?)*) \\ ) \\ s* " . ( $T == " FUNCTION " ? " RETURNS \\ s+ $Gi\\s + " : " " ) . " (.*)~is " , $Hb , $A ); $p = array (); preg_match_all ( " ~ $fg\\s *,?~is " , $A [ 1 ], $Ie , PREG_SET_ORDER ); foreach ( $Ie
as $Sf ) $p [] = array ( " field " => str_replace ( " `` " , " ` " , $Sf [ 2 ]) . $Sf [ 3 ], " type " => strtolower ( $Sf [ 5 ]), " length " => preg_replace_callback ( " ~ $_c ~s " , 'normalize_enum' , $Sf [ 6 ]), " unsigned " => strtolower ( preg_replace ( '~\s+~' , ' ' , trim ( " $Sf[8] $Sf[7] " ))), " null " => 1 , " full_type " => $Sf [ 4 ], " inout " => strtoupper ( $Sf [ 1 ]), " collation " => strtolower ( $Sf [ 9 ]),); if ( $T != " FUNCTION " ) return
array ( " fields " => $p , " definition " => $A [ 11 ]); return
array ( " fields " => $p , " returns " => array ( " type " => $A [ 12 ], " length " => $A [ 13 ], " unsigned " => $A [ 15 ], " collation " => $A [ 16 ]), " definition " => $A [ 17 ], " language " => " SQL " ,);} function
2014-05-08 19:46:08 +02:00
routines (){ return
2018-04-01 23:34:54 +02:00
get_rows ( " SELECT ROUTINE_NAME AS SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . q ( DB ));} function
2014-05-08 19:46:08 +02:00
routine_languages (){ return
array ();} function
2020-04-26 00:47:07 +02:00
routine_id ( $B , $I ){ return
idf_escape ( $B );} function
2018-12-25 21:50:48 +01:00
last_id (){ global $h ; return $h -> result ( " SELECT LAST_INSERT_ID() " );} function
2020-04-26 00:47:07 +02:00
explain ( $h , $F ){ return $h -> query ( " EXPLAIN " . ( min_version ( 5.1 ) ? " PARTITIONS " : " " ) . $F );} function
2018-12-25 21:50:48 +01:00
found_rows ( $R , $Z ){ return ( $Z || $R [ " Engine " ] != " InnoDB " ? null : $R [ " Rows " ]);} function
2014-05-08 19:46:08 +02:00
types (){ return
array ();} function
schemas (){ return
array ();} function
get_schema (){ return " " ;} function
2020-04-26 00:47:07 +02:00
set_schema ( $fh , $i = null ){ return
2014-05-08 19:46:08 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
create_sql ( $Q , $Na , $Nh ){ global $h ; $H = $h -> result ( " SHOW CREATE TABLE " . table ( $Q ), 1 ); if ( ! $Na ) $H = preg_replace ( '~ AUTO_INCREMENT=\d+~' , '' , $H ); return $H ;} function
2018-12-25 21:50:48 +01:00
truncate_sql ( $Q ){ return " TRUNCATE " . table ( $Q );} function
2020-04-26 00:47:07 +02:00
use_sql ( $j ){ return " USE " . idf_escape ( $j );} function
trigger_sql ( $Q ){ $H = " " ; foreach ( get_rows ( " SHOW TRIGGERS LIKE " . q ( addcslashes ( $Q , " %_ \\ " )), null , " -- " ) as $I ) $H .= " \n CREATE TRIGGER " . idf_escape ( $I [ " Trigger " ]) . " $I[Timing] $I[Event] ON " . table ( $I [ " Table " ]) . " FOR EACH ROW \n $I[Statement] ;; \n " ; return $H ;} function
2014-05-08 19:46:08 +02:00
show_variables (){ return
get_key_vals ( " SHOW VARIABLES " );} function
process_list (){ return
get_rows ( " SHOW FULL PROCESSLIST " );} function
show_status (){ return
get_key_vals ( " SHOW STATUS " );} function
2020-04-26 00:47:07 +02:00
convert_field ( $o ){ if ( preg_match ( " ~binary~ " , $o [ " type " ])) return " HEX( " . idf_escape ( $o [ " field " ]) . " ) " ; if ( $o [ " type " ] == " bit " ) return " BIN( " . idf_escape ( $o [ " field " ]) . " + 0) " ; if ( preg_match ( " ~geometry|point|linestring|polygon~ " , $o [ " type " ])) return ( min_version ( 8 ) ? " ST_ " : " " ) . " AsWKT( " . idf_escape ( $o [ " field " ]) . " ) " ;} function
unconvert_field ( $o , $H ){ if ( preg_match ( " ~binary~ " , $o [ " type " ])) $H = " UNHEX( $H ) " ; if ( $o [ " type " ] == " bit " ) $H = " CONV( $H , 2, 10) + 0 " ; if ( preg_match ( " ~geometry|point|linestring|polygon~ " , $o [ " type " ])) $H = ( min_version ( 8 ) ? " ST_ " : " " ) . " GeomFromText( $H , SRID( $o[field] )) " ; return $H ;} function
support ( $Tc ){ return ! preg_match ( " ~scheme|sequence|type|view_trigger|materializedview " . ( min_version ( 8 ) ? " " : " |descidx " . ( min_version ( 5.1 ) ? " " : " |event|partitioning " . ( min_version ( 5 ) ? " " : " |routine|trigger|view " ))) . " ~ " , $Tc );} function
2017-06-25 00:56:50 +02:00
kill_process ( $X ){ return
queries ( " KILL " . number ( $X ));} function
connection_id (){ return " SELECT CONNECTION_ID() " ;} function
2020-10-12 20:47:58 +02:00
max_connections (){ global $h ; return $h -> result ( " SELECT @@max_connections " );} $x = " sql " ; $U = array (); $Mh = array (); foreach ( array ( lang ( 27 ) => array ( " tinyint " => 3 , " smallint " => 5 , " mediumint " => 8 , " int " => 10 , " bigint " => 20 , " decimal " => 66 , " float " => 12 , " double " => 21 ), lang ( 28 ) => array ( " date " => 10 , " datetime " => 19 , " timestamp " => 19 , " time " => 10 , " year " => 4 ), lang ( 25 ) => array ( " char " => 255 , " varchar " => 65535 , " tinytext " => 255 , " text " => 65535 , " mediumtext " => 16777215 , " longtext " => 4294967295 ), lang ( 33 ) => array ( " enum " => 65535 , " set " => 64 ), lang ( 29 ) => array ( " bit " => 20 , " binary " => 255 , " varbinary " => 65535 , " tinyblob " => 255 , " blob " => 65535 , " mediumblob " => 16777215 , " longblob " => 4294967295 ), lang ( 31 ) => array ( " geometry " => 0 , " point " => 0 , " linestring " => 0 , " polygon " => 0 , " multipoint " => 0 , " multilinestring " => 0 , " multipolygon " => 0 , " geometrycollection " => 0 ),) as $y => $X ){ $U += $X ; $Mh [ $y ] = array_keys ( $X );} $Ni = array ( " unsigned " , " zerofill " , " unsigned zerofill " ); $_f = array ( " = " , " < " , " > " , " <= " , " >= " , " != " , " LIKE " , " LIKE %% " , " REGEXP " , " IN " , " FIND_IN_SET " , " IS NULL " , " NOT LIKE " , " NOT REGEXP " , " NOT IN " , " IS NOT NULL " , " SQL " ); $od = array ( " char_length " , " date " , " from_unixtime " , " lower " , " round " , " floor " , " ceil " , " sec_to_time " , " time_to_sec " , " upper " ); $ud = array ( " avg " , " count " , " count distinct " , " group_concat " , " max " , " min " , " sum " ); $qc = array ( array ( " char " => " md5/sha1/password/encrypt/uuid " , " binary " => " md5/sha1 " , " date|time " => " now " ,), array ( number_type () => " +/- " , " date " => " + interval/- interval " , " time " => " addtime/subtime " , " char|text " => " concat " ,));} define ( " SERVER " , $_GET [ DRIVER ]); define ( " DB " , $_GET [ " db " ]); define ( " ME " , str_replace ( " : " , " %3a " , preg_replace ( '~\?.*~' , '' , relative_uri ())) . '?' . ( sid () ? SID . '&' : '' ) . ( SERVER !== null ? DRIVER . " = " . urlencode ( SERVER ) . '&' : '' ) . ( isset ( $_GET [ " username " ]) ? " username= " . urlencode ( $_GET [ " username " ]) . '&' : '' ) . ( DB != " " ? 'db=' . urlencode ( DB ) . '&' . ( isset ( $_GET [ " ns " ]) ? " ns= " . urlencode ( $_GET [ " ns " ]) . " & " : " " ) : '' )); $ia = " 4.7.7 " ; class
2014-05-08 19:46:08 +02:00
Adminer { var $operators ; function
2018-04-01 23:34:54 +02:00
name (){ return " <a href='https://www.adminer.org/' " . target_blank () . " id='h1'>Adminer</a> " ;} function
2014-05-08 19:46:08 +02:00
credentials (){ return
array ( SERVER , $_GET [ " username " ], get_password ());} function
2018-04-01 23:34:54 +02:00
connectSsl (){} function
2020-04-26 00:47:07 +02:00
permanentLogin ( $Hb = false ){ return
password_file ( $Hb );} function
2014-05-08 19:46:08 +02:00
bruteForceKey (){ return $_SERVER [ " REMOTE_ADDR " ];} function
2020-04-26 00:47:07 +02:00
serverName ( $M ){ return
h ( $M );} function
2014-05-08 19:46:08 +02:00
database (){ return
DB ;} function
2020-04-26 00:47:07 +02:00
databases ( $ed = true ){ return
get_databases ( $ed );} function
2014-05-08 19:46:08 +02:00
schemas (){ return
schemas ();} function
queryTimeout (){ return
2018-06-30 00:38:01 +02:00
2 ;} function
2018-04-01 23:34:54 +02:00
headers (){} function
csp (){ return
csp ();} function
2014-05-08 19:46:08 +02:00
head (){ return
true ;} function
2020-04-26 00:47:07 +02:00
css (){ $H = array (); $Yc = " adminer.css " ; if ( file_exists ( $Yc )) $H [] = " $Yc ?v= " . crc32 ( file_get_contents ( $Yc )); return $H ;} function
loginForm (){ global $ic ; echo " <table cellspacing='0' class='layout'> \n " , $this -> loginFormField ( 'driver' , '<tr><th>' . lang ( 34 ) . '<td>' , html_select ( " auth[driver] " , $ic , DRIVER , " loginDriver(this); " ) . " \n " ), $this -> loginFormField ( 'server' , '<tr><th>' . lang ( 35 ) . '<td>' , '<input name="auth[server]" value="' . h ( SERVER ) . '" title="hostname[:port]" placeholder="localhost" autocapitalize="off">' . " \n " ), $this -> loginFormField ( 'username' , '<tr><th>' . lang ( 36 ) . '<td>' , '<input name="auth[username]" id="username" value="' . h ( $_GET [ " username " ]) . '" autocomplete="username" autocapitalize="off">' . script ( " focus(qs('#username')); qs('#username').form['auth[driver]'].onchange(); " )), $this -> loginFormField ( 'password' , '<tr><th>' . lang ( 37 ) . '<td>' , '<input type="password" name="auth[password]" autocomplete="current-password">' . " \n " ), $this -> loginFormField ( 'db' , '<tr><th>' . lang ( 38 ) . '<td>' , '<input name="auth[db]" value="' . h ( $_GET [ " db " ]) . '" autocapitalize="off">' . " \n " ), " </table> \n " , " <p><input type='submit' value=' " . lang ( 39 ) . " '> \n " , checkbox ( " auth[permanent] " , 1 , $_COOKIE [ " adminer_permanent " ], lang ( 40 )) . " \n " ;} function
loginFormField ( $B , $Ad , $Y ){ return $Ad . $Y ;} function
login ( $Ce , $E ){ if ( $E == " " ) return
2018-06-30 00:38:01 +02:00
lang ( 41 , target_blank ()); return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
tableName ( $Th ){ return
h ( $Th [ " Name " ]);} function
fieldName ( $o , $Ef = 0 ){ return '<span title="' . h ( $o [ " full_type " ]) . '">' . h ( $o [ " field " ]) . '</span>' ;} function
selectLinks ( $Th , $N = " " ){ global $x , $m ; echo '<p class="links">' ; $Ae = array ( " select " => lang ( 42 )); if ( support ( " table " ) || support ( " indexes " )) $Ae [ " table " ] = lang ( 43 ); if ( support ( " table " )){ if ( is_view ( $Th )) $Ae [ " view " ] = lang ( 44 ); else $Ae [ " create " ] = lang ( 45 );} if ( $N !== null ) $Ae [ " edit " ] = lang ( 46 ); $B = $Th [ " Name " ]; foreach ( $Ae
as $y => $X ) echo " <a href=' " . h ( ME ) . " $y = " . urlencode ( $B ) . ( $y == " edit " ? $N : " " ) . " ' " . bold ( isset ( $_GET [ $y ])) . " > $X </a> " ; echo
doc_link ( array ( $x => $m -> tableHelp ( $B )), " ? " ), " \n " ;} function
2018-12-25 21:50:48 +01:00
foreignKeys ( $Q ){ return
foreign_keys ( $Q );} function
2020-04-26 00:47:07 +02:00
backwardKeys ( $Q , $Sh ){ return
2018-04-01 23:34:54 +02:00
array ();} function
2020-04-26 00:47:07 +02:00
backwardKeysPrint ( $Qa , $I ){} function
selectQuery ( $F , $Ih , $Rc = false ){ global $x , $m ; $H = " </p> \n " ; if ( ! $Rc && ( $ij = $m -> warnings ())){ $t = " warnings " ; $H = " , <a href='# $t '> " . lang ( 47 ) . " </a> " . script ( " qsl('a').onclick = partial(toggle, ' $t '); " , " " ) . " $H <div id=' $t ' class='hidden'> \n $ij </div> \n " ;} return " <p><code class='jush- $x '> " . h ( str_replace ( " \n " , " " , $F )) . " </code> <span class='time'>( " . format_time ( $Ih ) . " )</span> " . ( support ( " sql " ) ? " <a href=' " . h ( ME ) . " sql= " . urlencode ( $F ) . " '> " . lang ( 10 ) . " </a> " : " " ) . $H ;} function
sqlCommandQuery ( $F ){ return
shorten_utf8 ( trim ( $F ), 1000 );} function
2018-12-25 21:50:48 +01:00
rowDescription ( $Q ){ return " " ;} function
2020-04-26 00:47:07 +02:00
rowDescriptions ( $J , $hd ){ return $J ;} function
selectLink ( $X , $o ){} function
selectVal ( $X , $_ , $o , $Mf ){ $H = ( $X === null ? " <i>NULL</i> " : ( preg_match ( " ~char|binary|boolean~ " , $o [ " type " ]) &&! preg_match ( " ~var~ " , $o [ " type " ]) ? " <code> $X </code> " : $X )); if ( preg_match ( '~blob|bytea|raw|file~' , $o [ " type " ]) &&! is_utf8 ( $X )) $H = " <i> " . lang ( 48 , strlen ( $Mf )) . " </i> " ; if ( preg_match ( '~json~' , $o [ " type " ])) $H = " <code class='jush-js'> $H </code> " ; return ( $_ ? " <a href=' " . h ( $_ ) . " ' " . ( is_url ( $_ ) ? target_blank () : " " ) . " > $H </a> " : $H );} function
editVal ( $X , $o ){ return $X ;} function
tableStructurePrint ( $p ){ echo " <div class='scrollable'> \n " , " <table cellspacing='0' class='nowrap'> \n " , " <thead><tr><th> " . lang ( 49 ) . " <td> " . lang ( 50 ) . ( support ( " comment " ) ? " <td> " . lang ( 51 ) : " " ) . " </thead> \n " ; foreach ( $p
as $o ){ echo " <tr " . odd () . " ><th> " . h ( $o [ " field " ]), " <td><span title=' " . h ( $o [ " collation " ]) . " '> " . h ( $o [ " full_type " ]) . " </span> " ,( $o [ " null " ] ? " <i>NULL</i> " : " " ),( $o [ " auto_increment " ] ? " <i> " . lang ( 52 ) . " </i> " : " " ),( isset ( $o [ " default " ]) ? " <span title=' " . lang ( 53 ) . " '>[<b> " . h ( $o [ " default " ]) . " </b>]</span> " : " " ),( support ( " comment " ) ? " <td> " . h ( $o [ " comment " ]) : " " ), " \n " ;} echo " </table> \n " , " </div> \n " ;} function
tableIndexesPrint ( $w ){ echo " <table cellspacing='0'> \n " ; foreach ( $w
as $B => $v ){ ksort ( $v [ " columns " ]); $rg = array (); foreach ( $v [ " columns " ] as $y => $X ) $rg [] = " <i> " . h ( $X ) . " </i> " . ( $v [ " lengths " ][ $y ] ? " ( " . $v [ " lengths " ][ $y ] . " ) " : " " ) . ( $v [ " descs " ][ $y ] ? " DESC " : " " ); echo " <tr title=' " . h ( $B ) . " '><th> $v[type] <td> " . implode ( " , " , $rg ) . " \n " ;} echo " </table> \n " ;} function
selectColumnsPrint ( $K , $f ){ global $od , $ud ; print_fieldset ( " select " , lang ( 54 ), $K ); $s = 0 ; $K [ " " ] = array (); foreach ( $K
as $y => $X ){ $X = $_GET [ " columns " ][ $y ]; $e = select_input ( " name='columns[ $s ][col]' " , $f , $X [ " col " ],( $y !== " " ? " selectFieldChange " : " selectAddRow " )); echo " <div> " . ( $od || $ud ? " <select name='columns[ $s ][fun]'> " . optionlist ( array ( - 1 => " " ) + array_filter ( array ( lang ( 55 ) => $od , lang ( 56 ) => $ud )), $X [ " fun " ]) . " </select> " . on_help ( " getTarget(event).value && getTarget(event).value.replace(/ | \$ /, '(') + ')' " , 1 ) . script ( " qsl('select').onchange = function () { helpClose(); " . ( $y !== " " ? " " : " qsl('select, input', this.parentNode).onchange(); " ) . " }; " , " " ) . " ( $e ) " : $e ) . " </div> \n " ; $s ++ ;} echo " </div></fieldset> \n " ;} function
selectSearchPrint ( $Z , $f , $w ){ print_fieldset ( " search " , lang ( 57 ), $Z ); foreach ( $w
as $s => $v ){ if ( $v [ " type " ] == " FULLTEXT " ){ echo " <div>(<i> " . implode ( " </i>, <i> " , array_map ( 'h' , $v [ " columns " ])) . " </i>) AGAINST " , " <input type='search' name='fulltext[ $s ]' value=' " . h ( $_GET [ " fulltext " ][ $s ]) . " '> " , script ( " qsl('input').oninput = selectFieldChange; " , " " ), checkbox ( " boolean[ $s ] " , 1 , isset ( $_GET [ " boolean " ][ $s ]), " BOOL " ), " </div> \n " ;}} $cb = " this.parentNode.firstChild.onchange(); " ; foreach ( array_merge (( array ) $_GET [ " where " ], array ( array ())) as $s => $X ){ if ( ! $X || ( " $X[col] $X[val] " != " " && in_array ( $X [ " op " ], $this -> operators ))){ echo " <div> " . select_input ( " name='where[ $s ][col]' " , $f , $X [ " col " ],( $X ? " selectFieldChange " : " selectAddRow " ), " ( " . lang ( 58 ) . " ) " ), html_select ( " where[ $s ][op] " , $this -> operators , $X [ " op " ], $cb ), " <input type='search' name='where[ $s ][val]' value=' " . h ( $X [ " val " ]) . " '> " , script ( " mixin(qsl('input'), { oninput: function () { $cb }, onkeydown: selectSearchKeydown, onsearch: selectSearchSearch}); " , " " ), " </div> \n " ;}} echo " </div></fieldset> \n " ;} function
selectOrderPrint ( $Ef , $f , $w ){ print_fieldset ( " sort " , lang ( 59 ), $Ef ); $s = 0 ; foreach (( array ) $_GET [ " order " ] as $y => $X ){ if ( $X != " " ){ echo " <div> " . select_input ( " name='order[ $s ]' " , $f , $X , " selectFieldChange " ), checkbox ( " desc[ $s ] " , 1 , isset ( $_GET [ " desc " ][ $y ]), lang ( 60 )) . " </div> \n " ; $s ++ ;}} echo " <div> " . select_input ( " name='order[ $s ]' " , $f , " " , " selectAddRow " ), checkbox ( " desc[ $s ] " , 1 , false , lang ( 60 )) . " </div> \n " , " </div></fieldset> \n " ;} function
selectLimitPrint ( $z ){ echo " <fieldset><legend> " . lang ( 61 ) . " </legend><div> " ; echo " <input type='number' name='limit' class='size' value=' " . h ( $z ) . " '> " , script ( " qsl('input').oninput = selectFieldChange; " , " " ), " </div></fieldset> \n " ;} function
selectLengthPrint ( $ii ){ if ( $ii !== null ){ echo " <fieldset><legend> " . lang ( 62 ) . " </legend><div> " , " <input type='number' name='text_length' class='size' value=' " . h ( $ii ) . " '> " , " </div></fieldset> \n " ;}} function
selectActionPrint ( $w ){ echo " <fieldset><legend> " . lang ( 63 ) . " </legend><div> " , " <input type='submit' value=' " . lang ( 54 ) . " '> " , " <span id='noindex' title=' " . lang ( 64 ) . " '></span> " , " <script " . nonce () . " > \n " , " var indexColumns = " ; $f = array (); foreach ( $w
as $v ){ $Ob = reset ( $v [ " columns " ]); if ( $v [ " type " ] != " FULLTEXT " && $Ob ) $f [ $Ob ] = 1 ;} $f [ " " ] = 1 ; foreach ( $f
as $y => $X ) json_row ( $y ); echo " ; \n " , " selectFieldChange.call(qs('#form')['select']); \n " , " </script> \n " , " </div></fieldset> \n " ;} function
2014-05-08 19:46:08 +02:00
selectCommandPrint (){ return ! information_schema ( DB );} function
selectImportPrint (){ return ! information_schema ( DB );} function
2020-04-26 00:47:07 +02:00
selectEmailPrint ( $vc , $f ){} function
selectColumnsProcess ( $f , $w ){ global $od , $ud ; $K = array (); $rd = array (); foreach (( array ) $_GET [ " columns " ] as $y => $X ){ if ( $X [ " fun " ] == " count " || ( $X [ " col " ] != " " && ( ! $X [ " fun " ] || in_array ( $X [ " fun " ], $od ) || in_array ( $X [ " fun " ], $ud )))){ $K [ $y ] = apply_sql_function ( $X [ " fun " ],( $X [ " col " ] != " " ? idf_escape ( $X [ " col " ]) : " * " )); if ( ! in_array ( $X [ " fun " ], $ud )) $rd [] = $K [ $y ];}} return
array ( $K , $rd );} function
selectSearchProcess ( $p , $w ){ global $h , $m ; $H = array (); foreach ( $w
as $s => $v ){ if ( $v [ " type " ] == " FULLTEXT " && $_GET [ " fulltext " ][ $s ] != " " ) $H [] = " MATCH ( " . implode ( " , " , array_map ( 'idf_escape' , $v [ " columns " ])) . " ) AGAINST ( " . q ( $_GET [ " fulltext " ][ $s ]) . ( isset ( $_GET [ " boolean " ][ $s ]) ? " IN BOOLEAN MODE " : " " ) . " ) " ;} foreach (( array ) $_GET [ " where " ] as $y => $X ){ if ( " $X[col] $X[val] " != " " && in_array ( $X [ " op " ], $this -> operators )){ $ng = " " ; $yb = " $X[op] " ; if ( preg_match ( '~IN$~' , $X [ " op " ])){ $Ld = process_length ( $X [ " val " ]); $yb .= " " . ( $Ld != " " ? $Ld : " (NULL) " );} elseif ( $X [ " op " ] == " SQL " ) $yb = " $X[val] " ; elseif ( $X [ " op " ] == " LIKE %% " ) $yb = " LIKE " . $this -> processInput ( $p [ $X [ " col " ]], " % $X[val] % " ); elseif ( $X [ " op " ] == " ILIKE %% " ) $yb = " ILIKE " . $this -> processInput ( $p [ $X [ " col " ]], " % $X[val] % " ); elseif ( $X [ " op " ] == " FIND_IN_SET " ){ $ng = " $X[op] ( " . q ( $X [ " val " ]) . " , " ; $yb = " ) " ;} elseif ( ! preg_match ( '~NULL$~' , $X [ " op " ])) $yb .= " " . $this -> processInput ( $p [ $X [ " col " ]], $X [ " val " ]); if ( $X [ " col " ] != " " ) $H [] = $ng . $m -> convertSearch ( idf_escape ( $X [ " col " ]), $X , $p [ $X [ " col " ]]) . $yb ; else { $sb = array (); foreach ( $p
as $B => $o ){ if (( preg_match ( '~^[-\d.' . ( preg_match ( '~IN$~' , $X [ " op " ]) ? ',' : '' ) . ']+$~' , $X [ " val " ]) ||! preg_match ( '~' . number_type () . '|bit~' , $o [ " type " ])) && ( ! preg_match ( " ~[ \x80 - \xFF ]~ " , $X [ " val " ]) || preg_match ( '~char|text|enum|set~' , $o [ " type " ]))) $sb [] = $ng . $m -> convertSearch ( idf_escape ( $B ), $X , $o ) . $yb ;} $H [] = ( $sb ? " ( " . implode ( " OR " , $sb ) . " ) " : " 1 = 0 " );}}} return $H ;} function
selectOrderProcess ( $p , $w ){ $H = array (); foreach (( array ) $_GET [ " order " ] as $y => $X ){ if ( $X != " " ) $H [] = ( preg_match ( '~^((COUNT\(DISTINCT |[A-Z0-9_]+\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\)|COUNT\(\*\))$~' , $X ) ? $X : idf_escape ( $X )) . ( isset ( $_GET [ " desc " ][ $y ]) ? " DESC " : " " );} return $H ;} function
2014-05-08 19:46:08 +02:00
selectLimitProcess (){ return ( isset ( $_GET [ " limit " ]) ? $_GET [ " limit " ] : " 50 " );} function
selectLengthProcess (){ return ( isset ( $_GET [ " text_length " ]) ? $_GET [ " text_length " ] : " 100 " );} function
2020-04-26 00:47:07 +02:00
selectEmailProcess ( $Z , $hd ){ return
2014-05-08 19:46:08 +02:00
false ;} function
2020-04-26 00:47:07 +02:00
selectQueryBuild ( $K , $Z , $rd , $Ef , $z , $D ){ return " " ;} function
messageQuery ( $F , $ji , $Rc = false ){ global $x , $m ; restart_session (); $Bd =& get_session ( " queries " ); if ( ! $Bd [ $_GET [ " db " ]]) $Bd [ $_GET [ " db " ]] = array (); if ( strlen ( $F ) > 1e6 ) $F = preg_replace ( '~[\x80-\xFF]+$~' , '' , substr ( $F , 0 , 1e6 )) . " \n … " ; $Bd [ $_GET [ " db " ]][] = array ( $F , time (), $ji ); $Fh = " sql- " . count ( $Bd [ $_GET [ " db " ]]); $H = " <a href='# $Fh ' class='toggle'> " . lang ( 65 ) . " </a> \n " ; if ( ! $Rc && ( $ij = $m -> warnings ())){ $t = " warnings- " . count ( $Bd [ $_GET [ " db " ]]); $H = " <a href='# $t ' class='toggle'> " . lang ( 47 ) . " </a>, $H <div id=' $t ' class='hidden'> \n $ij </div> \n " ;} return " <span class='time'> " .@ date ( " H:i:s " ) . " </span> " . " $H <div id=' $Fh ' class='hidden'><pre><code class='jush- $x '> " . shorten_utf8 ( $F , 1000 ) . " </code></pre> " . ( $ji ? " <span class='time'>( $ji )</span> " : '' ) . ( support ( " sql " ) ? '<p><a href="' . h ( str_replace ( " db= " . urlencode ( DB ), " db= " . urlencode ( $_GET [ " db " ]), ME ) . 'sql=&history=' . ( count ( $Bd [ $_GET [ " db " ]]) - 1 )) . '">' . lang ( 10 ) . '</a>' : '' ) . '</div>' ;} function
editFunctions ( $o ){ global $qc ; $H = ( $o [ " null " ] ? " NULL/ " : " " ); foreach ( $qc
as $y => $od ){ if ( ! $y || ( ! isset ( $_GET [ " call " ]) && ( isset ( $_GET [ " select " ]) || where ( $_GET )))){ foreach ( $od
as $fg => $X ){ if ( ! $fg || preg_match ( " ~ $fg ~ " , $o [ " type " ])) $H .= " / $X " ;} if ( $y &&! preg_match ( '~set|blob|bytea|raw|file~' , $o [ " type " ])) $H .= " /SQL " ;}} if ( $o [ " auto_increment " ] &&! isset ( $_GET [ " select " ]) &&! where ( $_GET )) $H = lang ( 52 ); return
explode ( " / " , $H );} function
editInput ( $Q , $o , $Ka , $Y ){ if ( $o [ " type " ] == " enum " ) return ( isset ( $_GET [ " select " ]) ? " <label><input type='radio' $Ka value='-1' checked><i> " . lang ( 8 ) . " </i></label> " : " " ) . ( $o [ " null " ] ? " <label><input type='radio' $Ka value='' " . ( $Y !== null || isset ( $_GET [ " select " ]) ? " " : " checked " ) . " ><i>NULL</i></label> " : " " ) . enum_input ( " radio " , $Ka , $o , $Y , 0 ); return " " ;} function
editHint ( $Q , $o , $Y ){ return " " ;} function
processInput ( $o , $Y , $r = " " ){ if ( $r == " SQL " ) return $Y ; $B = $o [ " field " ]; $H = q ( $Y ); if ( preg_match ( '~^(now|getdate|uuid)$~' , $r )) $H = " $r () " ; elseif ( preg_match ( '~^current_(date|timestamp)$~' , $r )) $H = $r ; elseif ( preg_match ( '~^([+-]|\|\|)$~' , $r )) $H = idf_escape ( $B ) . " $r $H " ; elseif ( preg_match ( '~^[+-] interval$~' , $r )) $H = idf_escape ( $B ) . " $r " . ( preg_match ( " ~^( \\ d+|'[0-9.: -]') [A-Z_]+ \$ ~i " , $Y ) ? $Y : $H ); elseif ( preg_match ( '~^(addtime|subtime|concat)$~' , $r )) $H = " $r ( " . idf_escape ( $B ) . " , $H ) " ; elseif ( preg_match ( '~^(md5|sha1|password|encrypt)$~' , $r )) $H = " $r ( $H ) " ; return
unconvert_field ( $o , $H );} function
dumpOutput (){ $H = array ( 'text' => lang ( 66 ), 'file' => lang ( 67 )); if ( function_exists ( 'gzencode' )) $H [ 'gz' ] = 'gzip' ; return $H ;} function
2014-05-08 19:46:08 +02:00
dumpFormat (){ return
array ( 'sql' => 'SQL' , 'csv' => 'CSV,' , 'csv;' => 'CSV;' , 'tsv' => 'TSV' );} function
2020-04-26 00:47:07 +02:00
dumpDatabase ( $l ){} function
dumpTable ( $Q , $Nh , $ee = 0 ){ if ( $_POST [ " format " ] != " sql " ){ echo " \xef \xbb \xbf " ; if ( $Nh ) dump_csv ( array_keys ( fields ( $Q )));} else { if ( $ee == 2 ){ $p = array (); foreach ( fields ( $Q ) as $B => $o ) $p [] = idf_escape ( $B ) . " $o[full_type] " ; $Hb = " CREATE TABLE " . table ( $Q ) . " ( " . implode ( " , " , $p ) . " ) " ;} else $Hb = create_sql ( $Q , $_POST [ " auto_increment " ], $Nh ); set_utf8mb4 ( $Hb ); if ( $Nh && $Hb ){ if ( $Nh == " DROP+CREATE " || $ee == 1 ) echo " DROP " . ( $ee == 2 ? " VIEW " : " TABLE " ) . " IF EXISTS " . table ( $Q ) . " ; \n " ; if ( $ee == 1 ) $Hb = remove_definer ( $Hb ); echo " $Hb ; \n \n " ;}}} function
dumpData ( $Q , $Nh , $F ){ global $h , $x ; $Ke = ( $x == " sqlite " ? 0 : 1048576 ); if ( $Nh ){ if ( $_POST [ " format " ] == " sql " ){ if ( $Nh == " TRUNCATE+INSERT " ) echo
truncate_sql ( $Q ) . " ; \n " ; $p = fields ( $Q );} $G = $h -> query ( $F , 1 ); if ( $G ){ $Xd = " " ; $Za = " " ; $le = array (); $Ph = " " ; $Uc = ( $Q != '' ? 'fetch_assoc' : 'fetch_row' ); while ( $I = $G -> $Uc ()){ if ( ! $le ){ $aj = array (); foreach ( $I
as $X ){ $o = $G -> fetch_field (); $le [] = $o -> name ; $y = idf_escape ( $o -> name ); $aj [] = " $y = VALUES( $y ) " ;} $Ph = ( $Nh == " INSERT+UPDATE " ? " \n ON DUPLICATE KEY UPDATE " . implode ( " , " , $aj ) : " " ) . " ; \n " ;} if ( $_POST [ " format " ] != " sql " ){ if ( $Nh == " table " ){ dump_csv ( $le ); $Nh = " INSERT " ;} dump_csv ( $I );} else { if ( ! $Xd ) $Xd = " INSERT INTO " . table ( $Q ) . " ( " . implode ( " , " , array_map ( 'idf_escape' , $le )) . " ) VALUES " ; foreach ( $I
as $y => $X ){ $o = $p [ $y ]; $I [ $y ] = ( $X !== null ? unconvert_field ( $o , preg_match ( number_type (), $o [ " type " ]) &&! preg_match ( '~\[~' , $o [ " full_type " ]) && is_numeric ( $X ) ? $X : q (( $X === false ? 0 : $X ))) : " NULL " );} $dh = ( $Ke ? " \n " : " " ) . " ( " . implode ( " , \t " , $I ) . " ) " ; if ( ! $Za ) $Za = $Xd . $dh ; elseif ( strlen ( $Za ) + 4 + strlen ( $dh ) + strlen ( $Ph ) < $Ke ) $Za .= " , $dh " ; else { echo $Za . $Ph ; $Za = $Xd . $dh ;}}} if ( $Za ) echo $Za . $Ph ;} elseif ( $_POST [ " format " ] == " sql " ) echo " -- " . str_replace ( " \n " , " " , $h -> error ) . " \n " ;}} function
dumpFilename ( $Gd ){ return
friendly_url ( $Gd != " " ? $Gd : ( SERVER != " " ? SERVER : " localhost " ));} function
dumpHeaders ( $Gd , $Ze = false ){ $Pf = $_POST [ " output " ]; $Mc = ( preg_match ( '~sql~' , $_POST [ " format " ]) ? " sql " : ( $Ze ? " tar " : " csv " )); header ( " Content-Type: " . ( $Pf == " gz " ? " application/x-gzip " : ( $Mc == " tar " ? " application/x-tar " : ( $Mc == " sql " || $Pf != " file " ? " text/plain " : " text/csv " ) . " ; charset=utf-8 " ))); if ( $Pf == " gz " ) ob_start ( 'ob_gzencode' , 1e6 ); return $Mc ;} function
2018-04-01 23:34:54 +02:00
importServerPath (){ return " adminer.sql " ;} function
2018-06-30 00:38:01 +02:00
homepage (){ echo '<p class="links">' . ( $_GET [ " ns " ] == " " && support ( " database " ) ? '<a href="' . h ( ME ) . 'database=">' . lang ( 68 ) . " </a> \n " : " " ),( support ( " scheme " ) ? " <a href=' " . h ( ME ) . " scheme='> " . ( $_GET [ " ns " ] != " " ? lang ( 69 ) : lang ( 70 )) . " </a> \n " : " " ),( $_GET [ " ns " ] !== " " ? '<a href="' . h ( ME ) . 'schema=">' . lang ( 71 ) . " </a> \n " : " " ),( support ( " privileges " ) ? " <a href=' " . h ( ME ) . " privileges='> " . lang ( 72 ) . " </a> \n " : " " ); return
2018-04-01 23:34:54 +02:00
true ;} function
2020-04-26 00:47:07 +02:00
navigation ( $Ye ){ global $ia , $x , $ic , $h ; echo ' < h1 >
2018-04-01 23:34:54 +02:00
',$this->name(),' < span class = " version " > ',$ia,' </ span >
< a href = " https://www.adminer.org/#download " ',target_blank(),' id = " version " > ',(version_compare($ia,$_COOKIE["adminer_version"])<0?h($_COOKIE["adminer_version"]):""),' </ a >
2014-05-08 19:46:08 +02:00
</ h1 >
2020-04-26 00:47:07 +02:00
' ; if ( $Ye == " auth " ){ $Pf = " " ; foreach (( array ) $_SESSION [ " pwds " ] as $cj => $rh ){ foreach ( $rh
as $M => $Xi ){ foreach ( $Xi
as $V => $E ){ if ( $E !== null ){ $Ub = $_SESSION [ " db " ][ $cj ][ $M ][ $V ]; foreach (( $Ub ? array_keys ( $Ub ) : array ( " " )) as $l ) $Pf .= " <li><a href=' " . h ( auth_url ( $cj , $M , $V , $l )) . " '>( $ic[$cj] ) " . h ( $V . ( $M != " " ? " @ " . $this -> serverName ( $M ) : " " ) . ( $l != " " ? " - $l " : " " )) . " </a> \n " ;}}}} if ( $Pf ) echo " <ul id='logins'> \n $Pf </ul> \n " . script ( " mixin(qs('#logins'), { onmouseover: menuOver, onmouseout: menuOut}); " );} else { if ( $_GET [ " ns " ] !== " " &&! $Ye && DB != " " ){ $h -> select_db ( DB ); $S = table_status ( '' , true );} echo
2020-10-12 20:47:58 +02:00
script_src ( preg_replace ( " ~ \\ ?.*~ " , " " , ME ) . " ?file=jush.js&version=4.7.7 " ); if ( support ( " sql " )){ echo '<script' , nonce (), ' >
2020-04-26 00:47:07 +02:00
' ; if ( $S ){ $Ae = array (); foreach ( $S
as $Q => $T ) $Ae [] = preg_quote ( $Q , '/' ); echo " var jushLinks = { $x : [ ' " . js_escape ( ME ) . ( support ( " table " ) ? " table= " : " select= " ) . " \$ &', / \\ b( " . implode ( " | " , $Ae ) . " ) \\ b/g ] }; \n " ; foreach ( array ( " bac " , " bra " , " sqlite_quo " , " mssql_bra " ) as $X ) echo " jushLinks. $X = jushLinks. $x ; \n " ;} $qh = $h -> server_info ; echo 'bodyLoad(\'' ,( is_object ( $h ) ? preg_replace ( '~^(\d\.?\d).*~s' , '\1' , $qh ) : " " ), '\'' ,( preg_match ( '~MariaDB~' , $qh ) ? " , true " : " " ), ' );
2014-05-08 19:46:08 +02:00
</ script >
2020-04-26 00:47:07 +02:00
';}$this->databasesPrint($Ye);if(DB==""||!$Ye){echo"<p class=' links '>".(support("sql")?"<a href=' " .h(ME). " sql = '".bold(isset($_GET["sql"])&&!isset($_GET["import"])).">".lang(65)."</a>\n<a href=' " .h(ME). " import = '".bold(isset($_GET["import"])).">".lang(73)."</a>\n":"")."";if(support("dump"))echo"<a href=' " .h(ME). " dump = " .urlencode(isset( $_GET["table"] )? $_GET["table"] : $_GET["select"] ). " ' id=' dump '".bold(isset($_GET["dump"])).">".lang(74)."</a>\n";}if($_GET["ns"]!==""&&!$Ye&&DB!=""){echo' < a href = " '.h(ME).'create= " '.bold($_GET["create"]==="").">".lang(75)."</a>\n";if(!$S)echo"<p class=' message ' > " .lang(9). " \n " ;else $this->tablesPrint ( $S );}}}function
databasesPrint ( $Ye ){ global $b , $h ; $k = $this -> databases (); if ( $k &&! in_array ( DB , $k )) array_unshift ( $k , DB ); echo ' < form action = " " >
2014-05-08 19:46:08 +02:00
< p id = " dbs " >
2020-04-26 00:47:07 +02:00
';hidden_fields_get();$Sb=script("mixin(qsl(' select '), {onmousedown: dbMouseDown, onchange: dbChange});");echo"<span title=' " .lang(76). " '>".lang(77)."</span>: ".($k?"<select name=' db '>".optionlist(array(""=>"")+$k,DB)."</select>$Sb":"<input name=' db ' value=' " .h(DB). " ' autocapitalize=' off '>\n"),"<input type=' submit ' value=' " .lang(20). " '".($k?" class=' hidden '":"").">\n";if($Ye!="db"&&DB!=""&&$h->select_db(DB)){if(support("scheme")){echo"<br>".lang(78).": <select name=' ns '>".optionlist(array(""=>"")+$b->schemas(),$_GET["ns"])."</select>$Sb";if($_GET["ns"]!="")set_schema($_GET["ns"]);}}foreach(array("import","sql","schema","dump","privileges")as$X){if(isset($_GET[$X])){echo"<input type=' hidden ' name=' $X ' value=' ' > " ;break;}}echo " </ p ></ form > \n " ;}function
2018-12-25 21:50:48 +01:00
tablesPrint ( $S ){ echo " <ul id='tables'> " . script ( " mixin(qs('#tables'), { onmouseover: menuOver, onmouseout: menuOut}); " ); foreach ( $S
2020-04-26 00:47:07 +02:00
as $Q => $O ){ $B = $this -> tableName ( $O ); if ( $B != " " ){ echo '<li><a href="' . h ( ME ) . 'select=' . urlencode ( $Q ) . '"' . bold ( $_GET [ " select " ] == $Q || $_GET [ " edit " ] == $Q , " select " ) . " > " . lang ( 79 ) . " </a> " ,( support ( " table " ) || support ( " indexes " ) ? '<a href="' . h ( ME ) . 'table=' . urlencode ( $Q ) . '"' . bold ( in_array ( $Q , array ( $_GET [ " table " ], $_GET [ " create " ], $_GET [ " indexes " ], $_GET [ " foreign " ], $_GET [ " trigger " ])),( is_view ( $O ) ? " view " : " structure " )) . " title=' " . lang ( 43 ) . " '> $B </a> " : " <span> $B </span> " ) . " \n " ;}} echo " </ul> \n " ;}} $b = ( function_exists ( 'adminer_object' ) ? adminer_object () : new
Adminer ); if ( $b -> operators === null ) $b -> operators = $_f ; function
page_header ( $mi , $n = " " , $Ya = array (), $ni = " " ){ global $ca , $ia , $b , $ic , $x ; page_headers (); if ( is_ajax () && $n ){ page_messages ( $n ); exit ;} $oi = $mi . ( $ni != " " ? " : $ni " : " " ); $pi = strip_tags ( $oi . ( SERVER != " " && SERVER != " localhost " ? h ( " - " . SERVER ) : " " ) . " - " . $b -> name ()); echo ' <! DOCTYPE html >
2018-06-30 00:38:01 +02:00
< html lang = " ', $ca ,' " dir = " ',lang(80),' " >
2014-05-08 19:46:08 +02:00
< meta http - equiv = " Content-Type " content = " text/html; charset=utf-8 " >
< meta name = " robots " content = " noindex " >
2020-04-26 00:47:07 +02:00
< title > ',$pi,' </ title >
2020-10-12 20:47:58 +02:00
< link rel = " stylesheet " type = " text/css " href = " ',h(preg_replace( " ~ \\ ? .*~ " , " " ,ME). " ? file = default . css & version = 4.7 . 7 " ),' " >
',script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=4.7.7");if($b->head()){echo' < link rel = " shortcut icon " type = " image/x-icon " href = " ',h(preg_replace( " ~ \\ ? .*~ " , " " ,ME). " ? file = favicon . ico & version = 4.7 . 7 " ),' " >
< link rel = " apple-touch-icon " href = " ',h(preg_replace( " ~ \\ ? .*~ " , " " ,ME). " ? file = favicon . ico & version = 4.7 . 7 " ),' " >
2020-04-26 00:47:07 +02:00
';foreach($b->css()as$Mb){echo' < link rel = " stylesheet " type = " text/css " href = " ',h( $Mb ),' " >
2014-05-08 19:46:08 +02:00
';}}echo'
2018-06-30 00:38:01 +02:00
< body class = " ',lang(80),' nojs " >
2020-04-26 00:47:07 +02:00
';$Yc=get_temp_dir()."/adminer.version";if(!$_COOKIE["adminer_version"]&&function_exists(' openssl_verify ' ) && file_exists ( $Yc ) && filemtime ( $Yc ) + 86400 > time ()){ $dj = unserialize ( file_get_contents ( $Yc )); $yg = " -----BEGIN PUBLIC KEY-----
2018-04-01 23:34:54 +02:00
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqWOVuF5uw7 /+ Z70djoK
RlHIZFZPO0uYRezq90 + 7 Amk + FDNd7KkL5eDve + vHRJBLAszF / 7 XKXe11xwliIsFs
DFWQlsABVZB3oisKCBEuI71J4kPH8dKGEWR9jDHFw3cWmoH3PmqImX6FISWbG3B8
h7FIx3jEaw5ckVPVTeo5JRm / 1 DZzJxjyDenXvBQ / 6 o9DgZKeNDgxwKzH + sw9 / YCO
jHnq1cFpOIISzARlrHMa / 43 YfeNRAm / tsBXjSxembBPo7aQZLAWHmaj5 + K19H10B
nCpz9Y ++ cipkVEiKRGih4ZEvjoFysEOdRLj6WiD / uUNky4xGeA6LaJqh5XpkFkcQ
fQIDAQAB
----- END PUBLIC KEY -----
2020-04-26 00:47:07 +02:00
" ;if(openssl_verify( $dj["version"] ,base64_decode( $dj["signature"] ), $yg )==1) $_COOKIE["adminer_version"] = $dj["version"] ;}echo'<script',nonce(),'>
2018-04-01 23:34:54 +02:00
mixin ( document . body , { onkeydown : bodyKeydown , onclick : bodyClick ',(isset($_COOKIE["adminer_version"])?"":", onload: partial(verifyVersion, ' $ia ', ' " .js_escape(ME). " ', ' " .get_token(). " ' ) " );?>});
2015-07-03 19:50:03 +02:00
document . body . className = document . body . className . replace ( / nojs / , ' js' );
var offlineMessage = ' < ? php echo
2018-06-30 00:38:01 +02:00
js_escape ( lang ( 81 )), ' \ ' ;
2018-04-01 23:34:54 +02:00
var thousandsSeparator = \ '' , js_escape ( lang ( 5 )), ' \ ' ;
2014-05-08 19:46:08 +02:00
</ script >
2020-04-26 00:47:07 +02:00
< div id = " help " class = " jush-', $x ,' jsonly hidden " ></ div >
2018-04-01 23:34:54 +02:00
',script("mixin(qs(' #help'), {onmouseover: function () { helpOpen = 1; }, onmouseout: helpMouseout});"),'
2014-05-08 19:46:08 +02:00
< div id = " content " >
2020-04-26 00:47:07 +02:00
';if($Ya!==null){$_=substr(preg_replace(' ~ \b ( username | db | ns ) = [ ^& ] *&~ ',' ',ME),0,-1);echo' < p id = " breadcrumb " >< a href = " '.h( $_ ? $_ : " . " ).' " > '.$ic[DRIVER].' </ a > & raquo ; ';$_=substr(preg_replace(' ~ \b ( db | ns ) = [ ^& ] *&~ ',' ',ME),0,-1);$M=$b->serverName(SERVER);$M=($M!=""?$M:lang(35));if($Ya===false)echo"$M\n";else{echo"<a href=' " .( $_ ?h( $_ ): " . " ). " ' accesskey=' 1 ' title=' Alt + Shift + 1 '>$M</a> » ";if($_GET["ns"]!=""||(DB!=""&&is_array($Ya)))echo' < a href = " '.h( $_ . " & db = " .urlencode(DB).(support( " scheme " )? " & ns = " : " " )).' " > '.h(DB).' </ a > & raquo ; ';if(is_array($Ya)){if($_GET["ns"]!="")echo' < a href = " '.h(substr(ME,0,-1)).' " > '.h($_GET["ns"]).' </ a > & raquo ; ' ; foreach ( $Ya
as $y => $X ){ $bc = ( is_array ( $X ) ? $X [ 1 ] : h ( $X )); if ( $bc != " " ) echo " <a href=' " . h ( ME . " $y = " ) . urlencode ( is_array ( $X ) ? $X [ 0 ] : $X ) . " '> $bc </a> » " ;}} echo " $mi\n " ;}} echo " <h2> $oi </h2> \n " , " <div id='ajaxstatus' class='jsonly hidden'></div> \n " ; restart_session (); page_messages ( $n ); $k =& get_session ( " dbs " ); if ( DB != " " && $k &&! in_array ( DB , $k , true )) $k = null ; stop_session (); define ( " PAGE_HEADER " , 1 );} function
page_headers (){ global $b ; header ( " Content-Type: text/html; charset=utf-8 " ); header ( " Cache-Control: no-cache " ); header ( " X-Frame-Options: deny " ); header ( " X-XSS-Protection: 0 " ); header ( " X-Content-Type-Options: nosniff " ); header ( " Referrer-Policy: origin-when-cross-origin " ); foreach ( $b -> csp () as $Lb ){ $_d = array (); foreach ( $Lb
as $y => $X ) $_d [] = " $y $X " ; header ( " Content-Security-Policy: " . implode ( " ; " , $_d ));} $b -> headers ();} function
2018-04-01 23:34:54 +02:00
csp (){ return
array ( array ( " script-src " => " 'self' 'unsafe-inline' 'nonce- " . get_nonce () . " ' 'strict-dynamic' " , " connect-src " => " 'self' " , " frame-src " => " https://www.adminer.org " , " object-src " => " 'none' " , " base-uri " => " 'none' " , " form-action " => " 'self' " ,),);} function
2020-04-26 00:47:07 +02:00
get_nonce (){ static $if ; if ( ! $if ) $if = base64_encode ( rand_string ()); return $if ;} function
page_messages ( $n ){ $Pi = preg_replace ( '~^[^?]*~' , '' , $_SERVER [ " REQUEST_URI " ]); $Ue = $_SESSION [ " messages " ][ $Pi ]; if ( $Ue ){ echo " <div class='message'> " . implode ( " </div> \n <div class='message'> " , $Ue ) . " </div> " . script ( " messagesPrint(); " ); unset ( $_SESSION [ " messages " ][ $Pi ]);} if ( $n ) echo " <div class='error'> $n </div> \n " ;} function
page_footer ( $Ye = " " ){ global $b , $ti ; echo ' </ div >
2014-05-08 19:46:08 +02:00
2020-04-26 00:47:07 +02:00
';switch_lang();if($Ye!="auth"){echo' < form action = " " method = " post " >
2014-05-08 19:46:08 +02:00
< p class = " logout " >
2018-06-30 00:38:01 +02:00
< input type = " submit " name = " logout " value = " ',lang(82),' " id = " logout " >
2020-04-26 00:47:07 +02:00
< input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ p >
</ form >
';}echo' < div id = " menu " >
2020-04-26 00:47:07 +02:00
';$b->navigation($Ye);echo' </ div >
2018-04-01 23:34:54 +02:00
' , script ( " setupSubmitHighlight(document); " );} function
2020-04-26 00:47:07 +02:00
int32 ( $bf ){ while ( $bf >= 2147483648 ) $bf -= 4294967296 ; while ( $bf <=- 2147483649 ) $bf += 4294967296 ; return ( int ) $bf ;} function
long2str ( $W , $hj ){ $dh = '' ; foreach ( $W
as $X ) $dh .= pack ( 'V' , $X ); if ( $hj ) return
substr ( $dh , 0 , end ( $W )); return $dh ;} function
str2long ( $dh , $hj ){ $W = array_values ( unpack ( 'V*' , str_pad ( $dh , 4 * ceil ( strlen ( $dh ) / 4 ), " \0 " ))); if ( $hj ) $W [] = strlen ( $dh ); return $W ;} function
xxtea_mx ( $uj , $tj , $Qh , $he ){ return
int32 ((( $uj >> 5 & 0x7FFFFFF ) ^ $tj << 2 ) + (( $tj >> 3 & 0x1FFFFFFF ) ^ $uj << 4 )) ^ int32 (( $Qh ^ $tj ) + ( $he ^ $uj ));} function
encrypt_string ( $Lh , $y ){ if ( $Lh == " " ) return " " ; $y = array_values ( unpack ( " V* " , pack ( " H* " , md5 ( $y )))); $W = str2long ( $Lh , true ); $bf = count ( $W ) - 1 ; $uj = $W [ $bf ]; $tj = $W [ 0 ]; $zg = floor ( 6 + 52 / ( $bf + 1 )); $Qh = 0 ; while ( $zg --> 0 ){ $Qh = int32 ( $Qh + 0x9E3779B9 ); $pc = $Qh >> 2 & 3 ; for ( $Qf = 0 ; $Qf < $bf ; $Qf ++ ){ $tj = $W [ $Qf + 1 ]; $af = xxtea_mx ( $uj , $tj , $Qh , $y [ $Qf & 3 ^ $pc ]); $uj = int32 ( $W [ $Qf ] + $af ); $W [ $Qf ] = $uj ;} $tj = $W [ 0 ]; $af = xxtea_mx ( $uj , $tj , $Qh , $y [ $Qf & 3 ^ $pc ]); $uj = int32 ( $W [ $bf ] + $af ); $W [ $bf ] = $uj ;} return
2014-05-08 19:46:08 +02:00
long2str ( $W , false );} function
2020-04-26 00:47:07 +02:00
decrypt_string ( $Lh , $y ){ if ( $Lh == " " ) return " " ; if ( ! $y ) return
false ; $y = array_values ( unpack ( " V* " , pack ( " H* " , md5 ( $y )))); $W = str2long ( $Lh , false ); $bf = count ( $W ) - 1 ; $uj = $W [ $bf ]; $tj = $W [ 0 ]; $zg = floor ( 6 + 52 / ( $bf + 1 )); $Qh = int32 ( $zg * 0x9E3779B9 ); while ( $Qh ){ $pc = $Qh >> 2 & 3 ; for ( $Qf = $bf ; $Qf > 0 ; $Qf -- ){ $uj = $W [ $Qf - 1 ]; $af = xxtea_mx ( $uj , $tj , $Qh , $y [ $Qf & 3 ^ $pc ]); $tj = int32 ( $W [ $Qf ] - $af ); $W [ $Qf ] = $tj ;} $uj = $W [ $bf ]; $af = xxtea_mx ( $uj , $tj , $Qh , $y [ $Qf & 3 ^ $pc ]); $tj = int32 ( $W [ 0 ] - $af ); $W [ 0 ] = $tj ; $Qh = int32 ( $Qh - 0x9E3779B9 );} return
long2str ( $W , true );} $h = '' ; $zd = $_SESSION [ " token " ]; if ( ! $zd ) $_SESSION [ " token " ] = rand ( 1 , 1e6 ); $ti = get_token (); $gg = array (); if ( $_COOKIE [ " adminer_permanent " ]){ foreach ( explode ( " " , $_COOKIE [ " adminer_permanent " ]) as $X ){ list ( $y ) = explode ( " : " , $X ); $gg [ $y ] = $X ;}} function
add_invalid_login (){ global $b ; $md = file_open_lock ( get_temp_dir () . " /adminer.invalid " ); if ( ! $md ) return ; $ae = unserialize ( stream_get_contents ( $md )); $ji = time (); if ( $ae ){ foreach ( $ae
as $be => $X ){ if ( $X [ 0 ] < $ji ) unset ( $ae [ $be ]);}} $Zd =& $ae [ $b -> bruteForceKey ()]; if ( ! $Zd ) $Zd = array ( $ji + 30 * 60 , 0 ); $Zd [ 1 ] ++ ; file_write_unlock ( $md , serialize ( $ae ));} function
check_invalid_login (){ global $b ; $ae = unserialize ( @ file_get_contents ( get_temp_dir () . " /adminer.invalid " )); $Zd = $ae [ $b -> bruteForceKey ()]; $hf = ( $Zd [ 1 ] > 29 ? $Zd [ 0 ] - time () : 0 ); if ( $hf > 0 ) auth_error ( lang ( 83 , ceil ( $hf / 60 )));} $La = $_POST [ " auth " ]; if ( $La ){ session_regenerate_id (); $cj = $La [ " driver " ]; $M = $La [ " server " ]; $V = $La [ " username " ]; $E = ( string ) $La [ " password " ]; $l = $La [ " db " ]; set_password ( $cj , $M , $V , $E ); $_SESSION [ " db " ][ $cj ][ $M ][ $V ][ $l ] = true ; if ( $La [ " permanent " ]){ $y = base64_encode ( $cj ) . " - " . base64_encode ( $M ) . " - " . base64_encode ( $V ) . " - " . base64_encode ( $l ); $sg = $b -> permanentLogin ( true ); $gg [ $y ] = " $y : " . base64_encode ( $sg ? encrypt_string ( $E , $sg ) : " " ); cookie ( " adminer_permanent " , implode ( " " , $gg ));} if ( count ( $_POST ) == 1 || DRIVER != $cj || SERVER != $M || $_GET [ " username " ] !== $V || DB != $l ) redirect ( auth_url ( $cj , $M , $V , $l ));} elseif ( $_POST [ " logout " ]){ if ( $zd &&! verify_token ()){ page_header ( lang ( 82 ), lang ( 84 )); page_footer ( " db " ); exit ;} else { foreach ( array ( " pwds " , " db " , " dbs " , " queries " ) as $y ) set_session ( $y , null ); unset_permanent (); redirect ( substr ( preg_replace ( '~\b(username|db|ns)=[^&]*&~' , '' , ME ), 0 , - 1 ), lang ( 85 ) . ' ' . lang ( 86 ));}} elseif ( $gg &&! $_SESSION [ " pwds " ]){ session_regenerate_id (); $sg = $b -> permanentLogin (); foreach ( $gg
as $y => $X ){ list (, $kb ) = explode ( " : " , $X ); list ( $cj , $M , $V , $l ) = array_map ( 'base64_decode' , explode ( " - " , $y )); set_password ( $cj , $M , $V , decrypt_string ( base64_decode ( $kb ), $sg )); $_SESSION [ " db " ][ $cj ][ $M ][ $V ][ $l ] = true ;}} function
unset_permanent (){ global $gg ; foreach ( $gg
as $y => $X ){ list ( $cj , $M , $V , $l ) = array_map ( 'base64_decode' , explode ( " - " , $y )); if ( $cj == DRIVER && $M == SERVER && $V == $_GET [ " username " ] && $l == DB ) unset ( $gg [ $y ]);} cookie ( " adminer_permanent " , implode ( " " , $gg ));} function
auth_error ( $n ){ global $b , $zd ; $sh = session_name (); if ( isset ( $_GET [ " username " ])){ header ( " HTTP/1.1 403 Forbidden " ); if (( $_COOKIE [ $sh ] || $_GET [ $sh ]) &&! $zd ) $n = lang ( 87 ); else { restart_session (); add_invalid_login (); $E = get_password (); if ( $E !== null ){ if ( $E === false ) $n .= '<br>' . lang ( 88 , target_blank (), '<code>permanentLogin()</code>' ); set_password ( DRIVER , SERVER , $_GET [ " username " ], null );} unset_permanent ();}} if ( ! $_COOKIE [ $sh ] && $_GET [ $sh ] && ini_bool ( " session.use_only_cookies " )) $n = lang ( 89 ); $Tf = session_get_cookie_params (); cookie ( " adminer_key " ,( $_COOKIE [ " adminer_key " ] ? $_COOKIE [ " adminer_key " ] : rand_string ()), $Tf [ " lifetime " ]); page_header ( lang ( 39 ), $n , null ); echo " <form action='' method='post'> \n " , " <div> " ; if ( hidden_fields ( $_POST , array ( " auth " ))) echo " <p class='message'> " . lang ( 90 ) . " \n " ; echo " </div> \n " ; $b -> loginForm (); echo " </form> \n " ; page_footer ( " auth " ); exit ;} if ( isset ( $_GET [ " username " ]) &&! class_exists ( " Min_DB " )){ unset ( $_SESSION [ " pwds " ][ DRIVER ]); unset_permanent (); page_header ( lang ( 91 ), lang ( 92 , implode ( " , " , $mg )), false ); page_footer ( " auth " ); exit ;} stop_session ( true ); if ( isset ( $_GET [ " username " ]) && is_string ( get_password ())){ list ( $Ed , $ig ) = explode ( " : " , SERVER , 2 ); if ( is_numeric ( $ig ) && ( $ig < 1024 || $ig > 65535 )) auth_error ( lang ( 93 )); check_invalid_login (); $h = connect (); $m = new
Min_Driver ( $h );} $Ce = null ; if ( ! is_object ( $h ) || ( $Ce = $b -> login ( $_GET [ " username " ], get_password ())) !== true ){ $n = ( is_string ( $h ) ? h ( $h ) : ( is_string ( $Ce ) ? $Ce : lang ( 94 ))); auth_error ( $n . ( preg_match ( '~^ | $~' , get_password ()) ? '<br>' . lang ( 95 ) : '' ));} if ( $La && $_POST [ " token " ]) $_POST [ " token " ] = $ti ; $n = '' ; if ( $_POST ){ if ( ! verify_token ()){ $Ud = " max_input_vars " ; $Oe = ini_get ( $Ud ); if ( extension_loaded ( " suhosin " )){ foreach ( array ( " suhosin.request.max_vars " , " suhosin.post.max_vars " ) as $y ){ $X = ini_get ( $y ); if ( $X && ( ! $Oe || $X < $Oe )){ $Ud = $y ; $Oe = $X ;}}} $n = ( ! $_POST [ " token " ] && $Oe ? lang ( 96 , " ' $Ud ' " ) : lang ( 84 ) . ' ' . lang ( 97 ));}} elseif ( $_SERVER [ " REQUEST_METHOD " ] == " POST " ){ $n = lang ( 98 , " 'post_max_size' " ); if ( isset ( $_GET [ " sql " ])) $n .= ' ' . lang ( 99 );} function
select ( $G , $i = null , $Hf = array (), $z = 0 ){ global $x ; $Ae = array (); $w = array (); $f = array (); $Va = array (); $U = array (); $H = array (); odd ( '' ); for ( $s = 0 ;( ! $z || $s < $z ) && ( $I = $G -> fetch_row ()); $s ++ ){ if ( ! $s ){ echo " <div class='scrollable'> \n " , " <table cellspacing='0' class='nowrap'> \n " , " <thead><tr> " ; for ( $ge = 0 ; $ge < count ( $I ); $ge ++ ){ $o = $G -> fetch_field (); $B = $o -> name ; $Gf = $o -> orgtable ; $Ff = $o -> orgname ; $H [ $o -> table ] = $Gf ; if ( $Hf && $x == " sql " ) $Ae [ $ge ] = ( $B == " table " ? " table= " : ( $B == " possible_keys " ? " indexes= " : null )); elseif ( $Gf != " " ){ if ( ! isset ( $w [ $Gf ])){ $w [ $Gf ] = array (); foreach ( indexes ( $Gf , $i ) as $v ){ if ( $v [ " type " ] == " PRIMARY " ){ $w [ $Gf ] = array_flip ( $v [ " columns " ]); break ;}} $f [ $Gf ] = $w [ $Gf ];} if ( isset ( $f [ $Gf ][ $Ff ])){ unset ( $f [ $Gf ][ $Ff ]); $w [ $Gf ][ $Ff ] = $ge ; $Ae [ $ge ] = $Gf ;}} if ( $o -> charsetnr == 63 ) $Va [ $ge ] = true ; $U [ $ge ] = $o -> type ; echo " <th " . ( $Gf != " " || $o -> name != $Ff ? " title=' " . h (( $Gf != " " ? " $Gf . " : " " ) . $Ff ) . " ' " : " " ) . " > " . h ( $B ) . ( $Hf ? doc_link ( array ( 'sql' => " explain-output.html#explain_ " . strtolower ( $B ), 'mariadb' => " explain/#the-columns-in-explain-select " ,)) : " " );} echo " </thead> \n " ;} echo " <tr " . odd () . " > " ; foreach ( $I
as $y => $X ){ if ( $X === null ) $X = " <i>NULL</i> " ; elseif ( $Va [ $y ] &&! is_utf8 ( $X )) $X = " <i> " . lang ( 48 , strlen ( $X )) . " </i> " ; else { $X = h ( $X ); if ( $U [ $y ] == 254 ) $X = " <code> $X </code> " ;} if ( isset ( $Ae [ $y ]) &&! $f [ $Ae [ $y ]]){ if ( $Hf && $x == " sql " ){ $Q = $I [ array_search ( " table= " , $Ae )]; $_ = $Ae [ $y ] . urlencode ( $Hf [ $Q ] != " " ? $Hf [ $Q ] : $Q );} else { $_ = " edit= " . urlencode ( $Ae [ $y ]); foreach ( $w [ $Ae [ $y ]] as $ob => $ge ) $_ .= " &where " . urlencode ( " [ " . bracket_escape ( $ob ) . " ] " ) . " = " . urlencode ( $I [ $ge ]);} $X = " <a href=' " . h ( ME . $_ ) . " '> $X </a> " ;} echo " <td> $X " ;}} echo ( $s ? " </table> \n </div> " : " <p class='message'> " . lang ( 12 )) . " \n " ; return $H ;} function
referencable_primary ( $mh ){ $H = array (); foreach ( table_status ( '' , true ) as $Uh => $Q ){ if ( $Uh != $mh && fk_support ( $Q )){ foreach ( fields ( $Uh ) as $o ){ if ( $o [ " primary " ]){ if ( $H [ $Uh ]){ unset ( $H [ $Uh ]); break ;} $H [ $Uh ] = $o ;}}}} return $H ;} function
adminer_settings (){ parse_str ( $_COOKIE [ " adminer_settings " ], $uh ); return $uh ;} function
adminer_setting ( $y ){ $uh = adminer_settings (); return $uh [ $y ];} function
set_adminer_settings ( $uh ){ return
cookie ( " adminer_settings " , http_build_query ( $uh + adminer_settings ()));} function
textarea ( $B , $Y , $J = 10 , $sb = 80 ){ global $x ; echo " <textarea name=' $B ' rows=' $J ' cols=' $sb ' class='sqlarea jush- $x ' spellcheck='false' wrap='off'> " ; if ( is_array ( $Y )){ foreach ( $Y
2014-05-08 19:46:08 +02:00
as $X ) echo
h ( $X [ 0 ]) . " \n \n \n " ;} else
echo
h ( $Y ); echo " </textarea> " ;} function
2020-04-26 00:47:07 +02:00
edit_type ( $y , $o , $qb , $id = array (), $Pc = array ()){ global $Mh , $U , $Ni , $vf ; $T = $o [ " type " ]; echo '<td><select name="' , h ( $y ), '[type]" class="type" aria-labelledby="label-type">' ; if ( $T &&! isset ( $U [ $T ]) &&! isset ( $id [ $T ]) &&! in_array ( $T , $Pc )) $Pc [] = $T ; if ( $id ) $Mh [ lang ( 100 )] = $id ; echo
optionlist ( array_merge ( $Pc , $Mh ), $T ), '</select><td><input name="' , h ( $y ), '[length]" value="' , h ( $o [ " length " ]), '" size="3"' ,( ! $o [ " length " ] && preg_match ( '~var(char|binary)$~' , $T ) ? " class='required' " : " " ); echo ' aria-labelledby="label-length"><td class="options">' , " <select name=' " . h ( $y ) . " [collation]' " . ( preg_match ( '~(char|text|enum|set)$~' , $T ) ? " " : " class='hidden' " ) . '><option value="">(' . lang ( 101 ) . ')' . optionlist ( $qb , $o [ " collation " ]) . '</select>' ,( $Ni ? " <select name=' " . h ( $y ) . " [unsigned]' " . ( ! $T || preg_match ( number_type (), $T ) ? " " : " class='hidden' " ) . '><option>' . optionlist ( $Ni , $o [ " unsigned " ]) . '</select>' : '' ),( isset ( $o [ 'on_update' ]) ? " <select name=' " . h ( $y ) . " [on_update]' " . ( preg_match ( '~timestamp|datetime~' , $T ) ? " " : " class='hidden' " ) . '>' . optionlist ( array ( " " => " ( " . lang ( 102 ) . " ) " , " CURRENT_TIMESTAMP " ),( preg_match ( '~^CURRENT_TIMESTAMP~i' , $o [ " on_update " ]) ? " CURRENT_TIMESTAMP " : $o [ " on_update " ])) . '</select>' : '' ),( $id ? " <select name=' " . h ( $y ) . " [on_delete]' " . ( preg_match ( " ~`~ " , $T ) ? " " : " class='hidden' " ) . " ><option value=''>( " . lang ( 103 ) . " ) " . optionlist ( explode ( " | " , $vf ), $o [ " on_delete " ]) . " </select> " : " " );} function
process_length ( $ye ){ global $_c ; return ( preg_match ( " ~^ \\ s* \\ (? \\ s* $_c (?: \\ s*, \\ s* $_c )*+ \\ s* \\ )? \\ s* \$ ~ " , $ye ) && preg_match_all ( " ~ $_c ~ " , $ye , $Ie ) ? " ( " . implode ( " , " , $Ie [ 0 ]) . " ) " : preg_replace ( '~^[0-9].*~' , '(\0)' , preg_replace ( '~[^-0-9,+()[\]]~' , '' , $ye )));} function
process_type ( $o , $pb = " COLLATE " ){ global $Ni ; return " $o[type] " . process_length ( $o [ " length " ]) . ( preg_match ( number_type (), $o [ " type " ]) && in_array ( $o [ " unsigned " ], $Ni ) ? " $o[unsigned] " : " " ) . ( preg_match ( '~char|text|enum|set~' , $o [ " type " ]) && $o [ " collation " ] ? " $pb " . q ( $o [ " collation " ]) : " " );} function
process_field ( $o , $Fi ){ return
array ( idf_escape ( trim ( $o [ " field " ])), process_type ( $Fi ),( $o [ " null " ] ? " NULL " : " NOT NULL " ), default_value ( $o ),( preg_match ( '~timestamp|datetime~' , $o [ " type " ]) && $o [ " on_update " ] ? " ON UPDATE $o[on_update] " : " " ),( support ( " comment " ) && $o [ " comment " ] != " " ? " COMMENT " . q ( $o [ " comment " ]) : " " ),( $o [ " auto_increment " ] ? auto_increment () : null ),);} function
default_value ( $o ){ $Wb = $o [ " default " ]; return ( $Wb === null ? " " : " DEFAULT " . ( preg_match ( '~char|binary|text|enum|set~' , $o [ " type " ]) || preg_match ( '~^(?![a-z])~i' , $Wb ) ? q ( $Wb ) : $Wb ));} function
type_class ( $T ){ foreach ( array ( 'char' => 'text' , 'date' => 'time|year' , 'binary' => 'blob' , 'enum' => 'set' ,) as $y => $X ){ if ( preg_match ( " ~ $y | $X ~ " , $T )) return " class=' $y ' " ;}} function
edit_fields ( $p , $qb , $T = " TABLE " , $id = array ()){ global $Vd ; $p = array_values ( $p ); $Xb = (( $_POST ? $_POST [ " defaults " ] : adminer_setting ( " defaults " )) ? " " : " class='hidden' " ); $wb = (( $_POST ? $_POST [ " comments " ] : adminer_setting ( " comments " )) ? " " : " class='hidden' " ); echo ' < thead >< tr >
2018-12-25 21:50:48 +01:00
';if($T=="PROCEDURE"){echo' < td > ';}echo' < th id = " label-name " > ',($T=="TABLE"?lang(104):lang(105)),' < td id = " label-type " > ',lang(50),' < textarea id = " enum-edit " rows = " 4 " cols = " 12 " wrap = " off " style = " display: none; " ></ textarea > ',script("qs(' #enum-edit').onblur = editingLengthBlur;"),'<td id="label-length">',lang(106),'<td>',lang(107);if($T=="TABLE"){echo'<td id="label-null">NULL
2020-10-12 20:47:58 +02:00
< td >< input type = " radio " name = " auto_increment_col " value = " " >< acronym id = " label-ai " title = " ',lang(52),' " > AI </ acronym > ',doc_link(array(' sql '=>"example-auto-increment.html",' mariadb '=>"auto_increment/",' sqlite '=>"autoinc.html",' pgsql '=>"datatype.html#DATATYPE-SERIAL",' mssql '=>"ms186775.aspx",)),' < td id = " label-default " ',$Xb,' > ',lang(53),(support("comment")?"<td id=' label - comment '$wb>".lang(51):"");}echo' < td > ',"<input type=' image ' class=' icon ' name=' add [ " .(support( " move_col " )?0:count( $p )). " ] ' src=' " .h(preg_replace( " ~ \\ ? .*~ " , " " ,ME). " ? file = plus . gif & version = 4.7 . 7 " ). " ' alt=' + ' title=' " .lang(108). " '>".script("row_count = ".count($p).";"),' </ thead >
2018-04-01 23:34:54 +02:00
< tbody >
2020-04-26 00:47:07 +02:00
',script("mixin(qsl(' tbody ' ), { onclick : editingClick , onkeydown : editingKeydown , oninput : editingInput }); " );foreach( $p
as $s => $o ){ $s ++ ; $If = $o [( $_POST ? " orig " : " field " )]; $fc = ( isset ( $_POST [ " add " ][ $s - 1 ]) || ( isset ( $o [ " field " ]) &&! $_POST [ " drop_col " ][ $s ])) && ( support ( " drop_col " ) || $If == " " ); echo '<tr' ,( $fc ? " " : " style='display: none;' " ), ' >
2020-10-12 20:47:58 +02:00
',($T=="PROCEDURE"?"<td>".html_select("fields[$s][inout]",explode("|",$Vd),$o["inout"]):""),' < th > ';if($fc){echo' < input name = " fields[', $s ,'][field] " value = " ',h( $o["field"] ),' " data - maxlength = " 64 " autocapitalize = " off " aria - labelledby = " label-name " > ';}echo' < input type = " hidden " name = " fields[', $s ,'][orig] " value = " ',h( $If ),' " > ';edit_type("fields[$s]",$o,$qb,$id);if($T=="TABLE"){echo' < td > ',checkbox("fields[$s][null]",1,$o["null"],"","","block","label-null"),' < td >< label class = " block " >< input type = " radio " name = " auto_increment_col " value = " ', $s ,' " ';if($o["auto_increment"]){echo' checked ';}echo' aria - labelledby = " label-ai " ></ label >< td ',$Xb,' > ',checkbox("fields[$s][has_default]",1,$o["has_default"],"","","","label-default"),' < input name = " fields[', $s ,'][default] " value = " ',h( $o["default"] ),' " aria - labelledby = " label-default " > ',(support("comment")?"<td$wb><input name=' fields [ $s ][ comment ] ' value=' " .h( $o["comment"] ). " ' data-maxlength=' " .(min_version(5.5)?1024:255). " ' aria-labelledby=' label - comment '>":"");}echo"<td>",(support("move_col")?"<input type=' image ' class=' icon ' name=' add [ $s ] ' src=' " .h(preg_replace( " ~ \\ ? .*~ " , " " ,ME). " ? file = plus . gif & version = 4.7 . 7 " ). " ' alt=' + ' title=' " .lang(108). " '> "."<input type=' image ' class=' icon ' name=' up [ $s ] ' src=' " .h(preg_replace( " ~ \\ ? .*~ " , " " ,ME). " ? file = up . gif & version = 4.7 . 7 " ). " ' alt=' ↑ ' title=' " .lang(109). " '> "."<input type=' image ' class=' icon ' name=' down [ $s ] ' src=' " .h(preg_replace( " ~ \\ ? .*~ " , " " ,ME). " ? file = down . gif & version = 4.7 . 7 " ). " ' alt=' ↓ ' title=' " .lang(110). " '> ":""),($If==""||support("drop_col")?"<input type=' image ' class=' icon ' name=' drop_col [ $s ] ' src=' " .h(preg_replace( " ~ \\ ? .*~ " , " " ,ME). " ? file = cross . gif & version = 4.7 . 7 " ). " ' alt=' x ' title=' " .lang(111). " ' > " : " " );}}function
2020-04-26 00:47:07 +02:00
process_fields ( & $p ){ $C = 0 ; if ( $_POST [ " up " ]){ $se = 0 ; foreach ( $p
as $y => $o ){ if ( key ( $_POST [ " up " ]) == $y ){ unset ( $p [ $y ]); array_splice ( $p , $se , 0 , array ( $o )); break ;} if ( isset ( $o [ " field " ])) $se = $C ; $C ++ ;}} elseif ( $_POST [ " down " ]){ $kd = false ; foreach ( $p
as $y => $o ){ if ( isset ( $o [ " field " ]) && $kd ){ unset ( $p [ key ( $_POST [ " down " ])]); array_splice ( $p , $C , 0 , array ( $kd )); break ;} if ( key ( $_POST [ " down " ]) == $y ) $kd = $o ; $C ++ ;}} elseif ( $_POST [ " add " ]){ $p = array_values ( $p ); array_splice ( $p , key ( $_POST [ " add " ]), 0 , array ( array ()));} elseif ( ! $_POST [ " drop_col " ]) return
2014-05-08 19:46:08 +02:00
false ; return
true ;} function
2020-04-26 00:47:07 +02:00
normalize_enum ( $A ){ return " ' " . str_replace ( " ' " , " '' " , addcslashes ( stripcslashes ( str_replace ( $A [ 0 ][ 0 ] . $A [ 0 ][ 0 ], $A [ 0 ][ 0 ], substr ( $A [ 0 ], 1 , - 1 ))), '\\' )) . " ' " ;} function
grant ( $pd , $ug , $f , $uf ){ if ( ! $ug ) return
true ; if ( $ug == array ( " ALL PRIVILEGES " , " GRANT OPTION " )) return ( $pd == " GRANT " ? queries ( " $pd ALL PRIVILEGES $uf WITH GRANT OPTION " ) : queries ( " $pd ALL PRIVILEGES $uf " ) && queries ( " $pd GRANT OPTION $uf " )); return
queries ( " $pd " . preg_replace ( '~(GRANT OPTION)\([^)]*\)~' , '\1' , implode ( " $f , " , $ug ) . $f ) . $uf );} function
drop_create ( $jc , $Hb , $kc , $gi , $mc , $Be , $Te , $Re , $Se , $rf , $ef ){ if ( $_POST [ " drop " ]) query_redirect ( $jc , $Be , $Te ); elseif ( $rf == " " ) query_redirect ( $Hb , $Be , $Se ); elseif ( $rf != $ef ){ $Jb = queries ( $Hb ); queries_redirect ( $Be , $Re , $Jb && queries ( $jc )); if ( $Jb ) queries ( $kc );} else
queries_redirect ( $Be , $Re , queries ( $gi ) && queries ( $mc ) && queries ( $jc ) && queries ( $Hb ));} function
create_trigger ( $uf , $I ){ global $x ; $li = " $I[Timing] $I[Event] " . ( $I [ " Event " ] == " UPDATE OF " ? " " . idf_escape ( $I [ " Of " ]) : " " ); return " CREATE TRIGGER " . idf_escape ( $I [ " Trigger " ]) . ( $x == " mssql " ? $uf . $li : $li . $uf ) . rtrim ( " $I[Type] \n $I[Statement] " , " ; " ) . " ; " ;} function
create_routine ( $Zg , $I ){ global $Vd , $x ; $N = array (); $p = ( array ) $I [ " fields " ]; ksort ( $p ); foreach ( $p
as $o ){ if ( $o [ " field " ] != " " ) $N [] = ( preg_match ( " ~^( $Vd ) \$ ~ " , $o [ " inout " ]) ? " $o[inout] " : " " ) . idf_escape ( $o [ " field " ]) . process_type ( $o , " CHARACTER SET " );} $Yb = rtrim ( " \n $I[definition] " , " ; " ); return " CREATE $Zg " . idf_escape ( trim ( $I [ " name " ])) . " ( " . implode ( " , " , $N ) . " ) " . ( isset ( $_GET [ " function " ]) ? " RETURNS " . process_type ( $I [ " returns " ], " CHARACTER SET " ) : " " ) . ( $I [ " language " ] ? " LANGUAGE $I[language] " : " " ) . ( $x == " pgsql " ? " AS " . q ( $Yb ) : " $Yb ; " );} function
remove_definer ( $F ){ return
preg_replace ( '~^([A-Z =]+) DEFINER=`' . preg_replace ( '~@(.*)~' , '`@`(%|\1)' , logged_user ()) . '`~' , '\1' , $F );} function
format_foreign_key ( $q ){ global $vf ; $l = $q [ " db " ]; $jf = $q [ " ns " ]; return " FOREIGN KEY ( " . implode ( " , " , array_map ( 'idf_escape' , $q [ " source " ])) . " ) REFERENCES " . ( $l != " " && $l != $_GET [ " db " ] ? idf_escape ( $l ) . " . " : " " ) . ( $jf != " " && $jf != $_GET [ " ns " ] ? idf_escape ( $jf ) . " . " : " " ) . table ( $q [ " table " ]) . " ( " . implode ( " , " , array_map ( 'idf_escape' , $q [ " target " ])) . " ) " . ( preg_match ( " ~^( $vf ) \$ ~ " , $q [ " on_delete " ]) ? " ON DELETE $q[on_delete] " : " " ) . ( preg_match ( " ~^( $vf ) \$ ~ " , $q [ " on_update " ]) ? " ON UPDATE $q[on_update] " : " " );} function
tar_file ( $Yc , $qi ){ $H = pack ( " a100a8a8a8a12a12 " , $Yc , 644 , 0 , 0 , decoct ( $qi -> size ), decoct ( time ())); $ib = 8 * 32 ; for ( $s = 0 ; $s < strlen ( $H ); $s ++ ) $ib += ord ( $H [ $s ]); $H .= sprintf ( " %06o " , $ib ) . " \0 " ; echo $H , str_repeat ( " \0 " , 512 - strlen ( $H )); $qi -> send (); echo
str_repeat ( " \0 " , 511 - ( $qi -> size + 511 ) % 512 );} function
ini_bytes ( $Ud ){ $X = ini_get ( $Ud ); switch ( strtolower ( substr ( $X , - 1 ))){ case 'g' : $X *= 1024 ; case 'm' : $X *= 1024 ; case 'k' : $X *= 1024 ;} return $X ;} function
doc_link ( $eg , $hi = " <sup>?</sup> " ){ global $x , $h ; $qh = $h -> server_info ; $dj = preg_replace ( '~^(\d\.?\d).*~s' , '\1' , $qh ); $Si = array ( 'sql' => " https://dev.mysql.com/doc/refman/ $dj /en/ " , 'sqlite' => " https://www.sqlite.org/ " , 'pgsql' => " https://www.postgresql.org/docs/ $dj / " , 'mssql' => " https://msdn.microsoft.com/library/ " , 'oracle' => " https://www.oracle.com/pls/topic/lookup?ctx=db " . preg_replace ( '~^.* (\d+)\.(\d+)\.\d+\.\d+\.\d+.*~s' , '\1\2' , $qh ) . " &id= " ,); if ( preg_match ( '~MariaDB~' , $qh )){ $Si [ 'sql' ] = " https://mariadb.com/kb/en/library/ " ; $eg [ 'sql' ] = ( isset ( $eg [ 'mariadb' ]) ? $eg [ 'mariadb' ] : str_replace ( " .html " , " / " , $eg [ 'sql' ]));} return ( $eg [ $x ] ? " <a href=' $Si[$x] $eg[$x] ' " . target_blank () . " > $hi </a> " : " " );} function
2018-12-25 21:50:48 +01:00
ob_gzencode ( $P ){ return
gzencode ( $P );} function
2020-04-26 00:47:07 +02:00
db_size ( $l ){ global $h ; if ( ! $h -> select_db ( $l )) return " ? " ; $H = 0 ; foreach ( table_status () as $R ) $H += $R [ " Data_length " ] + $R [ " Index_length " ]; return
format_number ( $H );} function
set_utf8mb4 ( $Hb ){ global $h ; static $N = false ; if ( ! $N && preg_match ( '~\butf8mb4~i' , $Hb )){ $N = true ; echo " SET NAMES " . charset ( $h ) . " ; \n \n " ;}} function
connect_error (){ global $b , $h , $ti , $n , $ic ; if ( DB != " " ){ header ( " HTTP/1.1 404 Not Found " ); page_header ( lang ( 38 ) . " : " . h ( DB ), lang ( 112 ), true );} else { if ( $_POST [ " db " ] &&! $n ) queries_redirect ( substr ( ME , 0 , - 1 ), lang ( 113 ), drop_databases ( $_POST [ " db " ])); page_header ( lang ( 114 ), $n , false ); echo " <p class='links'> \n " ; foreach ( array ( 'database' => lang ( 115 ), 'privileges' => lang ( 72 ), 'processlist' => lang ( 116 ), 'variables' => lang ( 117 ), 'status' => lang ( 118 ),) as $y => $X ){ if ( support ( $y )) echo " <a href=' " . h ( ME ) . " $y ='> $X </a> \n " ;} echo " <p> " . lang ( 119 , $ic [ DRIVER ], " <b> " . h ( $h -> server_info ) . " </b> " , " <b> $h->extension </b> " ) . " \n " , " <p> " . lang ( 120 , " <b> " . h ( logged_user ()) . " </b> " ) . " \n " ; $k = $b -> databases (); if ( $k ){ $gh = support ( " scheme " ); $qb = collations (); echo " <form action='' method='post'> \n " , " <table cellspacing='0' class='checkable'> \n " , script ( " mixin(qsl('table'), { onclick: tableClick, ondblclick: partialArg(tableClick, true)}); " ), " <thead><tr> " . ( support ( " database " ) ? " <td> " : " " ) . " <th> " . lang ( 38 ) . " - <a href=' " . h ( ME ) . " refresh=1'> " . lang ( 121 ) . " </a> " . " <td> " . lang ( 122 ) . " <td> " . lang ( 123 ) . " <td> " . lang ( 124 ) . " - <a href=' " . h ( ME ) . " dbsize=1'> " . lang ( 125 ) . " </a> " . script ( " qsl('a').onclick = partial(ajaxSetHtml, ' " . js_escape ( ME ) . " script=connect'); " , " " ) . " </thead> \n " ; $k = ( $_GET [ " dbsize " ] ? count_tables ( $k ) : array_flip ( $k )); foreach ( $k
as $l => $S ){ $Yg = h ( ME ) . " db= " . urlencode ( $l ); $t = h ( " Db- " . $l ); echo " <tr " . odd () . " > " . ( support ( " database " ) ? " <td> " . checkbox ( " db[] " , $l , in_array ( $l ,( array ) $_POST [ " db " ]), " " , " " , " " , $t ) : " " ), " <th><a href=' $Yg ' id=' $t '> " . h ( $l ) . " </a> " ; $d = h ( db_collation ( $l , $qb )); echo " <td> " . ( support ( " database " ) ? " <a href=' $Yg " . ( $gh ? " &ns= " : " " ) . " &database=' title=' " . lang ( 68 ) . " '> $d </a> " : $d ), " <td align='right'><a href=' $Yg &schema=' id='tables- " . h ( $l ) . " ' title=' " . lang ( 71 ) . " '> " . ( $_GET [ " dbsize " ] ? $S : " ? " ) . " </a> " , " <td align='right' id='size- " . h ( $l ) . " '> " . ( $_GET [ " dbsize " ] ? db_size ( $l ) : " ? " ), " \n " ;} echo " </table> \n " ,( support ( " database " ) ? " <div class='footer'><div> \n " . " <fieldset><legend> " . lang ( 126 ) . " <span id='selected'></span></legend><div> \n " . " <input type='hidden' name='all' value=''> " . script ( " qsl('input').onclick = function () { selectCount('selected', formChecked(this, /^db/)); }; " ) . " <input type='submit' name='drop' value=' " . lang ( 127 ) . " '> " . confirm () . " \n " . " </div></fieldset> \n " . " </div></div> \n " : " " ), " <input type='hidden' name='token' value=' $ti '> \n " , " </form> \n " , script ( " tableCheck(); " );}} page_footer ( " db " );} if ( isset ( $_GET [ " status " ])) $_GET [ " variables " ] = $_GET [ " status " ]; if ( isset ( $_GET [ " import " ])) $_GET [ " sql " ] = $_GET [ " import " ]; if ( ! ( DB != " " ? $h -> select_db ( DB ) : isset ( $_GET [ " sql " ]) || isset ( $_GET [ " dump " ]) || isset ( $_GET [ " database " ]) || isset ( $_GET [ " processlist " ]) || isset ( $_GET [ " privileges " ]) || isset ( $_GET [ " user " ]) || isset ( $_GET [ " variables " ]) || $_GET [ " script " ] == " connect " || $_GET [ " script " ] == " kill " )){ if ( DB != " " || $_GET [ " refresh " ]){ restart_session (); set_session ( " dbs " , null );} connect_error (); exit ;} if ( support ( " scheme " ) && DB != " " && $_GET [ " ns " ] !== " " ){ if ( ! isset ( $_GET [ " ns " ])) redirect ( preg_replace ( '~ns=[^&]*&~' , '' , ME ) . " ns= " . get_schema ()); if ( ! set_schema ( $_GET [ " ns " ])){ header ( " HTTP/1.1 404 Not Found " ); page_header ( lang ( 78 ) . " : " . h ( $_GET [ " ns " ]), lang ( 128 ), true ); page_footer ( " ns " ); exit ;}} $vf = " RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT " ; class
2014-05-08 19:46:08 +02:00
TmpFile { var $handler ; var $size ; function
2017-06-25 00:56:50 +02:00
__construct (){ $this -> handler = tmpfile ();} function
2020-04-26 00:47:07 +02:00
write ( $Cb ){ $this -> size += strlen ( $Cb ); fwrite ( $this -> handler , $Cb );} function
send (){ fseek ( $this -> handler , 0 ); fpassthru ( $this -> handler ); fclose ( $this -> handler );}} $_c = " '(?:''|[^' \\ \\ ]| \\ \\ .)*' " ; $Vd = " IN|OUT|INOUT " ; if ( isset ( $_GET [ " select " ]) && ( $_POST [ " edit " ] || $_POST [ " clone " ]) &&! $_POST [ " save " ]) $_GET [ " edit " ] = $_GET [ " select " ]; if ( isset ( $_GET [ " callf " ])) $_GET [ " call " ] = $_GET [ " callf " ]; if ( isset ( $_GET [ " function " ])) $_GET [ " procedure " ] = $_GET [ " function " ]; if ( isset ( $_GET [ " download " ])){ $a = $_GET [ " download " ]; $p = 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 = $m -> select ( $a , $K , array ( where ( $_GET , $p )), $K ); $I = ( $G ? $G -> fetch_row () : array ()); echo $m -> value ( $I [ 0 ], $p [ $_GET [ " field " ]]); exit ;} elseif ( isset ( $_GET [ " table " ])){ $a = $_GET [ " table " ]; $p = fields ( $a ); if ( ! $p ) $n = error (); $R = table_status1 ( $a , true ); $B = $b -> tableName ( $R ); page_header (( $p && is_view ( $R ) ? $R [ 'Engine' ] == 'materialized view' ? lang ( 129 ) : lang ( 130 ) : lang ( 131 )) . " : " . ( $B != " " ? $B : h ( $a )), $n ); $b -> selectLinks ( $R ); $vb = $R [ " Comment " ]; if ( $vb != " " ) echo " <p class='nowrap'> " . lang ( 51 ) . " : " . h ( $vb ) . " \n " ; if ( $p ) $b -> tableStructurePrint ( $p ); if ( ! is_view ( $R )){ if ( support ( " indexes " )){ echo " <h3 id='indexes'> " . lang ( 132 ) . " </h3> \n " ; $w = indexes ( $a ); if ( $w ) $b -> tableIndexesPrint ( $w ); echo '<p class="links"><a href="' . h ( ME ) . 'indexes=' . urlencode ( $a ) . '">' . lang ( 133 ) . " </a> \n " ;} if ( fk_support ( $R )){ echo " <h3 id='foreign-keys'> " . lang ( 100 ) . " </h3> \n " ; $id = foreign_keys ( $a ); if ( $id ){ echo " <table cellspacing='0'> \n " , " <thead><tr><th> " . lang ( 134 ) . " <td> " . lang ( 135 ) . " <td> " . lang ( 103 ) . " <td> " . lang ( 102 ) . " <td></thead> \n " ; foreach ( $id
as $B => $q ){ echo " <tr title=' " . h ( $B ) . " '> " , " <th><i> " . implode ( " </i>, <i> " , array_map ( 'h' , $q [ " source " ])) . " </i> " , " <td><a href=' " . h ( $q [ " db " ] != " " ? preg_replace ( '~db=[^&]*~' , " db= " . urlencode ( $q [ " db " ]), ME ) : ( $q [ " ns " ] != " " ? preg_replace ( '~ns=[^&]*~' , " ns= " . urlencode ( $q [ " ns " ]), ME ) : ME )) . " table= " . urlencode ( $q [ " table " ]) . " '> " . ( $q [ " db " ] != " " ? " <b> " . h ( $q [ " db " ]) . " </b>. " : " " ) . ( $q [ " ns " ] != " " ? " <b> " . h ( $q [ " ns " ]) . " </b>. " : " " ) . h ( $q [ " table " ]) . " </a> " , " (<i> " . implode ( " </i>, <i> " , array_map ( 'h' , $q [ " target " ])) . " </i>) " , " <td> " . h ( $q [ " on_delete " ]) . " \n " , " <td> " . h ( $q [ " on_update " ]) . " \n " , '<td><a href="' . h ( ME . 'foreign=' . urlencode ( $a ) . '&name=' . urlencode ( $B )) . '">' . lang ( 136 ) . '</a>' ;} echo " </table> \n " ;} echo '<p class="links"><a href="' . h ( ME ) . 'foreign=' . urlencode ( $a ) . '">' . lang ( 137 ) . " </a> \n " ;}} if ( support ( is_view ( $R ) ? " view_trigger " : " trigger " )){ echo " <h3 id='triggers'> " . lang ( 138 ) . " </h3> \n " ; $Ei = triggers ( $a ); if ( $Ei ){ echo " <table cellspacing='0'> \n " ; foreach ( $Ei
as $y => $X ) echo " <tr valign='top'><td> " . h ( $X [ 0 ]) . " <td> " . h ( $X [ 1 ]) . " <th> " . h ( $y ) . " <td><a href=' " . h ( ME . 'trigger=' . urlencode ( $a ) . '&name=' . urlencode ( $y )) . " '> " . lang ( 136 ) . " </a> \n " ; echo " </table> \n " ;} echo '<p class="links"><a href="' . h ( ME ) . 'trigger=' . urlencode ( $a ) . '">' . lang ( 139 ) . " </a> \n " ;}} elseif ( isset ( $_GET [ " schema " ])){ page_header ( lang ( 71 ), " " , array (), h ( DB . ( $_GET [ " ns " ] ? " . $_GET[ns] " : " " ))); $Wh = array (); $Xh = array (); $ea = ( $_GET [ " schema " ] ? $_GET [ " schema " ] : $_COOKIE [ " adminer_schema- " . str_replace ( " . " , " _ " , DB )]); preg_match_all ( '~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~' , $ea , $Ie , PREG_SET_ORDER ); foreach ( $Ie
as $s => $A ){ $Wh [ $A [ 1 ]] = array ( $A [ 2 ], $A [ 3 ]); $Xh [] = " \n \t ' " . js_escape ( $A [ 1 ]) . " ': [ $A[2] , $A[3] ] " ;} $ui = 0 ; $Sa =- 1 ; $fh = array (); $Kg = array (); $we = array (); foreach ( table_status ( '' , true ) as $Q => $R ){ if ( is_view ( $R )) continue ; $jg = 0 ; $fh [ $Q ][ " fields " ] = array (); foreach ( fields ( $Q ) as $B => $o ){ $jg += 1.25 ; $o [ " pos " ] = $jg ; $fh [ $Q ][ " fields " ][ $B ] = $o ;} $fh [ $Q ][ " pos " ] = ( $Wh [ $Q ] ? $Wh [ $Q ] : array ( $ui , 0 )); foreach ( $b -> foreignKeys ( $Q ) as $X ){ if ( ! $X [ " db " ]){ $ue = $Sa ; if ( $Wh [ $Q ][ 1 ] || $Wh [ $X [ " table " ]][ 1 ]) $ue = min ( floatval ( $Wh [ $Q ][ 1 ]), floatval ( $Wh [ $X [ " table " ]][ 1 ])) - 1 ; else $Sa -=. 1 ; while ( $we [( string ) $ue ]) $ue -=. 0001 ; $fh [ $Q ][ " references " ][ $X [ " table " ]][( string ) $ue ] = array ( $X [ " source " ], $X [ " target " ]); $Kg [ $X [ " table " ]][ $Q ][( string ) $ue ] = $X [ " target " ]; $we [( string ) $ue ] = true ;}} $ui = max ( $ui , $fh [ $Q ][ " pos " ][ 0 ] + 2.5 + $jg );} echo '<div id="schema" style="height: ' , $ui , ' em ; " >
2018-04-01 23:34:54 +02:00
< script ',nonce(),' >
qs ( \ ' #schema\').onselectstart = function () { return false; };
2020-04-26 00:47:07 +02:00
var tablePos = { ',implode(",",$Xh)."\n",' };
var em = qs ( \ '#schema\').offsetHeight / ' , $ui , ' ;
2014-05-08 19:46:08 +02:00
document . onmousemove = schemaMousemove ;
2018-04-01 23:34:54 +02:00
document . onmouseup = partialArg ( schemaMouseup , \ '' , js_escape ( DB ), ' \ ' );
2014-05-08 19:46:08 +02:00
</ script >
2020-04-26 00:47:07 +02:00
' ; foreach ( $fh
as $B => $Q ){ echo " <div class='table' style='top: " . $Q [ " pos " ][ 0 ] . " em; left: " . $Q [ " pos " ][ 1 ] . " em;'> " , '<a href="' . h ( ME ) . 'table=' . urlencode ( $B ) . '"><b>' . h ( $B ) . " </b></a> " , script ( " qsl('div').onmousedown = schemaMousedown; " ); foreach ( $Q [ " fields " ] as $o ){ $X = '<span' . type_class ( $o [ " type " ]) . ' title="' . h ( $o [ " full_type " ] . ( $o [ " null " ] ? " NULL " : '' )) . '">' . h ( $o [ " field " ]) . '</span>' ; echo " <br> " . ( $o [ " primary " ] ? " <i> $X </i> " : $X );} foreach (( array ) $Q [ " references " ] as $di => $Lg ){ foreach ( $Lg
as $ue => $Hg ){ $ve = $ue - $Wh [ $B ][ 1 ]; $s = 0 ; foreach ( $Hg [ 0 ] as $Ah ) echo " \n <div class='references' title=' " . h ( $di ) . " ' id='refs $ue - " . ( $s ++ ) . " ' style='left: $ve " . " em; top: " . $Q [ " fields " ][ $Ah ][ " pos " ] . " em; padding-top: .5em;'><div style='border-top: 1px solid Gray; width: " . ( - $ve ) . " em;'></div></div> " ;}} foreach (( array ) $Kg [ $B ] as $di => $Lg ){ foreach ( $Lg
as $ue => $f ){ $ve = $ue - $Wh [ $B ][ 1 ]; $s = 0 ; foreach ( $f
2020-10-12 20:47:58 +02:00
as $ci ) echo " \n <div class='references' title=' " . h ( $di ) . " ' id='refd $ue - " . ( $s ++ ) . " ' style='left: $ve " . " em; top: " . $Q [ " fields " ][ $ci ][ " pos " ] . " em; height: 1.25em; background: url( " . h ( preg_replace ( " ~ \\ ?.*~ " , " " , ME ) . " ?file=arrow.gif) no-repeat right center;&version=4.7.7 " ) . " '><div style='height: .5em; border-bottom: 1px solid Gray; width: " . ( - $ve ) . " em;'></div></div> " ;}} echo " \n </div> \n " ;} foreach ( $fh
2020-04-26 00:47:07 +02:00
as $B => $Q ){ foreach (( array ) $Q [ " references " ] as $di => $Lg ){ foreach ( $Lg
as $ue => $Hg ){ $Xe = $ui ; $Me =- 10 ; foreach ( $Hg [ 0 ] as $y => $Ah ){ $kg = $Q [ " pos " ][ 0 ] + $Q [ " fields " ][ $Ah ][ " pos " ]; $lg = $fh [ $di ][ " pos " ][ 0 ] + $fh [ $di ][ " fields " ][ $Hg [ 1 ][ $y ]][ " pos " ]; $Xe = min ( $Xe , $kg , $lg ); $Me = max ( $Me , $kg , $lg );} echo " <div class='references' id='refl $ue ' style='left: $ue " . " em; top: $Xe " . " em; padding: .5em 0;'><div style='border-right: 1px solid Gray; margin-top: 1px; height: " . ( $Me - $Xe ) . " em;'></div></div> \n " ;}}} echo ' </ div >
2018-12-25 21:50:48 +01:00
< p class = " links " >< a href = " ',h(ME. " schema = " .urlencode( $ea )),' " id = " schema-link " > ',lang(140),' </ a >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["dump"])){$a=$_GET["dump"];if($_POST&&!$n){$Fb="";foreach(array("output","format","db_style","routines","events","table_style","auto_increment","triggers","data_style")as$y)$Fb.="&$y=".urlencode($_POST[$y]);cookie("adminer_export",substr($Fb,1));$S=array_flip((array)$_POST["tables"])+array_flip((array)$_POST["data"]);$Mc=dump_headers((count($S)==1?key($S):DB),(DB==""||count($S)>1));$de=preg_match(' ~ sql ~ ' , $_POST [ " format " ]); if ( $de ){ echo " -- Adminer $ia " . $ic [ DRIVER ] . " dump \n \n " ; if ( $x == " sql " ){ echo " SET NAMES utf8;
2014-05-08 19:46:08 +02:00
SET time_zone = '+00:00' ;
2020-04-26 00:47:07 +02:00
SET foreign_key_checks = 0 ;
" .( $_POST["data_style"] ? " SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO' ;
2014-05-08 19:46:08 +02:00
" : " " ). "
2020-04-26 00:47:07 +02:00
" ; $h->query ( " SET time_zone = '+00:00' ; " );}} $Nh = $_POST["db_style"] ; $k =array(DB);if(DB== " " ) { $k = $_POST [ " databases " ]; if ( is_string ( $k )) $k = explode ( " \n " , rtrim ( str_replace ( " \r " , " " , $k ), " \n " )); } foreach((array) $k
as $l ){ $b -> dumpDatabase ( $l ); if ( $h -> select_db ( $l )){ if ( $de && preg_match ( '~CREATE~' , $Nh ) && ( $Hb = $h -> result ( " SHOW CREATE DATABASE " . idf_escape ( $l ), 1 ))){ set_utf8mb4 ( $Hb ); if ( $Nh == " DROP+CREATE " ) echo " DROP DATABASE IF EXISTS " . idf_escape ( $l ) . " ; \n " ; echo " $Hb ; \n " ;} if ( $de ){ if ( $Nh ) echo
use_sql ( $l ) . " ; \n \n " ; $Of = " " ; if ( $_POST [ " routines " ]){ foreach ( array ( " FUNCTION " , " PROCEDURE " ) as $Zg ){ foreach ( get_rows ( " SHOW $Zg STATUS WHERE Db = " . q ( $l ), null , " -- " ) as $I ){ $Hb = remove_definer ( $h -> result ( " SHOW CREATE $Zg " . idf_escape ( $I [ " Name " ]), 2 )); set_utf8mb4 ( $Hb ); $Of .= ( $Nh != 'DROP+CREATE' ? " DROP $Zg IF EXISTS " . idf_escape ( $I [ " Name " ]) . " ;; \n " : " " ) . " $Hb ;; \n \n " ;}}} if ( $_POST [ " events " ]){ foreach ( get_rows ( " SHOW EVENTS " , null , " -- " ) as $I ){ $Hb = remove_definer ( $h -> result ( " SHOW CREATE EVENT " . idf_escape ( $I [ " Name " ]), 3 )); set_utf8mb4 ( $Hb ); $Of .= ( $Nh != 'DROP+CREATE' ? " DROP EVENT IF EXISTS " . idf_escape ( $I [ " Name " ]) . " ;; \n " : " " ) . " $Hb ;; \n \n " ;}} if ( $Of ) echo " DELIMITER ;; \n \n $Of " . " DELIMITER ; \n \n " ;} if ( $_POST [ " table_style " ] || $_POST [ " data_style " ]){ $fj = array (); foreach ( table_status ( '' , true ) as $B => $R ){ $Q = ( DB == " " || in_array ( $B ,( array ) $_POST [ " tables " ])); $Pb = ( DB == " " || in_array ( $B ,( array ) $_POST [ " data " ])); if ( $Q || $Pb ){ if ( $Mc == " tar " ){ $qi = new
TmpFile ; ob_start ( array ( $qi , 'write' ), 1e5 );} $b -> dumpTable ( $B ,( $Q ? $_POST [ " table_style " ] : " " ),( is_view ( $R ) ? 2 : 0 )); if ( is_view ( $R )) $fj [] = $B ; elseif ( $Pb ){ $p = fields ( $B ); $b -> dumpData ( $B , $_POST [ " data_style " ], " SELECT * " . convert_fields ( $p , $p ) . " FROM " . table ( $B ));} if ( $de && $_POST [ " triggers " ] && $Q && ( $Ei = trigger_sql ( $B ))) echo " \n DELIMITER ;; \n $Ei\nDELIMITER ; \n " ; if ( $Mc == " tar " ){ ob_end_flush (); tar_file (( DB != " " ? " " : " $l / " ) . " $B .csv " , $qi );} elseif ( $de ) echo " \n " ;}} foreach ( $fj
as $ej ) $b -> dumpTable ( $ej , $_POST [ " table_style " ], 1 ); if ( $Mc == " tar " ) echo
pack ( " x512 " );}}} if ( $de ) echo " -- " . $h -> result ( " SELECT NOW() " ) . " \n " ; exit ;} page_header ( lang ( 74 ), $n ,( $_GET [ " export " ] != " " ? array ( " table " => $_GET [ " export " ]) : array ()), h ( DB )); echo '
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " >
2018-12-25 21:50:48 +01:00
< table cellspacing = " 0 " class = " layout " >
2020-04-26 00:47:07 +02:00
';$Tb=array(' ',' USE ',' DROP + CREATE ',' CREATE ');$Yh=array(' ',' DROP + CREATE ',' CREATE ');$Qb=array(' ',' TRUNCATE + INSERT ',' INSERT ');if($x=="sql")$Qb[]=' INSERT + UPDATE ';parse_str($_COOKIE["adminer_export"],$I);if(!$I)$I=array("output"=>"text","format"=>"sql","db_style"=>(DB!=""?"":"CREATE"),"table_style"=>"DROP+CREATE","data_style"=>"INSERT");if(!isset($I["events"])){$I["routines"]=$I["events"]=($_GET["dump"]=="");$I["triggers"]=$I["table_style"];}echo"<tr><th>".lang(141)."<td>".html_select("output",$b->dumpOutput(),$I["output"],0)."\n";echo"<tr><th>".lang(142)."<td>".html_select("format",$b->dumpFormat(),$I["format"],0)."\n";echo($x=="sqlite"?"":"<tr><th>".lang(38)."<td>".html_select(' db_style ',$Tb,$I["db_style"]).(support("routine")?checkbox("routines",1,$I["routines"],lang(143)):"").(support("event")?checkbox("events",1,$I["events"],lang(144)):"")),"<tr><th>".lang(123)."<td>".html_select(' table_style ',$Yh,$I["table_style"]).checkbox("auto_increment",1,$I["auto_increment"],lang(52)).(support("trigger")?checkbox("triggers",1,$I["triggers"],lang(138)):""),"<tr><th>".lang(145)."<td>".html_select(' data_style ',$Qb,$I["data_style"]),' </ table >
2018-06-30 00:38:01 +02:00
< p >< input type = " submit " value = " ',lang(74),' " >
2020-04-26 00:47:07 +02:00
< input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
< table cellspacing = " 0 " >
2020-04-26 00:47:07 +02:00
',script("qsl(' table ').onclick = dumpClick;");$og=array();if(DB!=""){$gb=($a!=""?"":" checked");echo"<thead><tr>","<th style=' text - align : left ; '><label class=' block '><input type=' checkbox ' id=' check - tables '$gb>".lang(123)."</label>".script("qs(' #check-tables').onclick = partial(formCheck, /^tables\\[/);",""),"<th style='text-align: right;'><label class='block'>".lang(145)."<input type='checkbox' id='check-data'$gb></label>".script("qs('#check-data').onclick = partial(formCheck, /^data\\[/);",""),"</thead>\n";$fj="";$Zh=tables_list();foreach($Zh
as $B => $T ){ $ng = preg_replace ( '~_.*~' , '' , $B ); $gb = ( $a == " " || $a == ( substr ( $a , - 1 ) == " % " ? " $ng % " : $B )); $rg = " <tr><td> " . checkbox ( " tables[] " , $B , $gb , $B , " " , " block " ); if ( $T !== null &&! preg_match ( '~table~i' , $T )) $fj .= " $rg\n " ; else
echo " $rg <td align='right'><label class='block'><span id='Rows- " . h ( $B ) . " '></span> " . checkbox ( " data[] " , $B , $gb ) . " </label> \n " ; $og [ $ng ] ++ ;} echo $fj ; if ( $Zh ) echo
script ( " ajaxSetHtml(' " . js_escape ( ME ) . " script=db'); " );} else { echo " <thead><tr><th style='text-align: left;'> " , " <label class='block'><input type='checkbox' id='check-databases' " . ( $a == " " ? " checked " : " " ) . " > " . lang ( 38 ) . " </label> " , script ( " qs('#check-databases').onclick = partial(formCheck, /^databases \\ [/); " , " " ), " </thead> \n " ; $k = $b -> databases (); if ( $k ){ foreach ( $k
as $l ){ if ( ! information_schema ( $l )){ $ng = preg_replace ( '~_.*~' , '' , $l ); echo " <tr><td> " . checkbox ( " databases[] " , $l , $a == " " || $a == " $ng % " , $l , " " , " block " ) . " \n " ; $og [ $ng ] ++ ;}}} else
2014-05-08 19:46:08 +02:00
echo " <tr><td><textarea name='databases' rows='10' cols='20'></textarea> " ;} echo ' </ table >
</ form >
2020-04-26 00:47:07 +02:00
' ; $ad = true ; foreach ( $og
as $y => $X ){ if ( $y != " " && $X > 1 ){ echo ( $ad ? " <p> " : " " ) . " <a href=' " . h ( ME ) . " dump= " . urlencode ( " $y % " ) . " '> " . h ( $y ) . " </a> " ; $ad = false ;}}} elseif ( isset ( $_GET [ " privileges " ])){ page_header ( lang ( 72 )); echo '<p class="links"><a href="' . h ( ME ) . 'user=">' . lang ( 146 ) . " </a> " ; $G = $h -> query ( " SELECT User, Host FROM mysql. " . ( DB == " " ? " user " : " db WHERE " . q ( DB ) . " LIKE Db " ) . " ORDER BY Host, User " ); $pd = $G ; if ( ! $G ) $G = $h -> query ( " SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1) AS User, SUBSTRING_INDEX(CURRENT_USER, '@', -1) AS Host " ); echo " <form action=''><p> \n " ; hidden_fields_get (); echo " <input type='hidden' name='db' value=' " . h ( DB ) . " '> \n " ,( $pd ? " " : " <input type='hidden' name='grant' value=''> \n " ), " <table cellspacing='0'> \n " , " <thead><tr><th> " . lang ( 36 ) . " <th> " . lang ( 35 ) . " <th></thead> \n " ; while ( $I = $G -> fetch_assoc ()) echo '<tr' . odd () . '><td>' . h ( $I [ " User " ]) . " <td> " . h ( $I [ " Host " ]) . '<td><a href="' . h ( ME . 'user=' . urlencode ( $I [ " User " ]) . '&host=' . urlencode ( $I [ " Host " ])) . '">' . lang ( 10 ) . " </a> \n " ; if ( ! $pd || DB != " " ) echo " <tr " . odd () . " ><td><input name='user' autocapitalize='off'><td><input name='host' value='localhost' autocapitalize='off'><td><input type='submit' value=' " . lang ( 10 ) . " '> \n " ; echo " </table> \n " , " </form> \n " ;} elseif ( isset ( $_GET [ " sql " ])){ if ( ! $n && $_POST [ " export " ]){ dump_headers ( " sql " ); $b -> dumpTable ( " " , " " ); $b -> dumpData ( " " , " table " , $_POST [ " query " ]); exit ;} restart_session (); $Cd =& get_session ( " queries " ); $Bd =& $Cd [ DB ]; if ( ! $n && $_POST [ " clear " ]){ $Bd = array (); redirect ( remove_from_uri ( " history " ));} page_header (( isset ( $_GET [ " import " ]) ? lang ( 73 ) : lang ( 65 )), $n ); if ( ! $n && $_POST ){ $md = false ; if ( ! isset ( $_GET [ " import " ])) $F = $_POST [ " query " ]; elseif ( $_POST [ " webfile " ]){ $Eh = $b -> importServerPath (); $md =@ fopen (( file_exists ( $Eh ) ? $Eh : " compress.zlib:// $Eh .gz " ), " rb " ); $F = ( $md ? fread ( $md , 1e6 ) : false );} else $F = get_file ( " sql_file " , true ); if ( is_string ( $F )){ if ( function_exists ( 'memory_get_usage' )) @ ini_set ( " memory_limit " , max ( ini_bytes ( " memory_limit " ), 2 * strlen ( $F ) + memory_get_usage () + 8e6 )); if ( $F != " " && strlen ( $F ) < 1e6 ){ $zg = $F . ( preg_match ( " ~;[ \t \r \n ]* \$ ~ " , $F ) ? " " : " ; " ); if ( ! $Bd || reset ( end ( $Bd )) != $zg ){ restart_session (); $Bd [] = array ( $zg , time ()); set_session ( " queries " , $Cd ); stop_session ();}} $Bh = " (?: \\ s|/ \\ *[ \ s \ S]*? \\ */|(?:#|-- )[^ \n ]* \n ?|-- \r ? \n ) " ; $ac = " ; " ; $C = 0 ; $xc = true ; $i = connect (); if ( is_object ( $i ) && DB != " " ){ $i -> select_db ( DB ); if ( $_GET [ " ns " ] != " " ) set_schema ( $_GET [ " ns " ], $i );} $ub = 0 ; $Bc = array (); $Vf = '[\'"' . ( $x == " sql " ? '`#' : ( $x == " sqlite " ? '`[' : ( $x == " mssql " ? '[' : '' ))) . ']|/\*|-- |$' . ( $x == " pgsql " ? '|\$[^$]*\$' : '' ); $vi = microtime ( true ); parse_str ( $_COOKIE [ " adminer_export " ], $ya ); $oc = $b -> dumpFormat (); unset ( $oc [ " sql " ]); while ( $F != " " ){ if ( ! $C && preg_match ( " ~^ $Bh *+DELIMITER \\ s+( \\ S+)~i " , $F , $A )){ $ac = $A [ 1 ]; $F = substr ( $F , strlen ( $A [ 0 ]));} else { preg_match ( '(' . preg_quote ( $ac ) . " \\ s*| $Vf ) " , $F , $A , PREG_OFFSET_CAPTURE , $C ); list ( $kd , $jg ) = $A [ 0 ]; if ( ! $kd && $md &&! feof ( $md )) $F .= fread ( $md , 1e5 ); else { if ( ! $kd && rtrim ( $F ) == " " ) break ; $C = $jg + strlen ( $kd ); if ( $kd && rtrim ( $kd ) != $ac ){ while ( preg_match ( '(' . ( $kd == '/*' ? '\*/' : ( $kd == '[' ? ']' : ( preg_match ( '~^-- |^#~' , $kd ) ? " \n " : preg_quote ( $kd ) . " | \\ \\ . " ))) . '|$)s' , $F , $A , PREG_OFFSET_CAPTURE , $C )){ $dh = $A [ 0 ][ 0 ]; if ( ! $dh && $md &&! feof ( $md )) $F .= fread ( $md , 1e5 ); else { $C = $A [ 0 ][ 1 ] + strlen ( $dh ); if ( $dh [ 0 ] != " \\ " ) break ;}}} else { $xc = false ; $zg = substr ( $F , 0 , $jg ); $ub ++ ; $rg = " <pre id='sql- $ub '><code class='jush- $x '> " . $b -> sqlCommandQuery ( $zg ) . " </code></pre> \n " ; if ( $x == " sqlite " && preg_match ( " ~^ $Bh *+ATTACH \\ b~i " , $zg , $A )){ echo $rg , " <p class='error'> " . lang ( 147 ) . " \n " ; $Bc [] = " <a href='#sql- $ub '> $ub </a> " ; if ( $_POST [ " error_stops " ]) break ;} else { if ( ! $_POST [ " only_errors " ]){ echo $rg ; ob_flush (); flush ();} $Ih = microtime ( true ); if ( $h -> multi_query ( $zg ) && is_object ( $i ) && preg_match ( " ~^ $Bh *+USE \\ b~i " , $zg )) $i -> query ( $zg ); do { $G = $h -> store_result (); if ( $h -> error ){ echo ( $_POST [ " only_errors " ] ? $rg : " " ), " <p class='error'> " . lang ( 148 ) . ( $h -> errno ? " ( $h->errno ) " : " " ) . " : " . error () . " \n " ; $Bc [] = " <a href='#sql- $ub '> $ub </a> " ; if ( $_POST [ " error_stops " ]) break
2 ;} else { $ji = " <span class='time'>( " . format_time ( $Ih ) . " )</span> " . ( strlen ( $zg ) < 1000 ? " <a href=' " . h ( ME ) . " sql= " . urlencode ( trim ( $zg )) . " '> " . lang ( 10 ) . " </a> " : " " ); $_a = $h -> affected_rows ; $ij = ( $_POST [ " only_errors " ] ? " " : $m -> warnings ()); $jj = " warnings- $ub " ; if ( $ij ) $ji .= " , <a href='# $jj '> " . lang ( 47 ) . " </a> " . script ( " qsl('a').onclick = partial(toggle, ' $jj '); " , " " ); $Jc = null ; $Kc = " explain- $ub " ; if ( is_object ( $G )){ $z = $_POST [ " limit " ]; $Hf = select ( $G , $i , array (), $z ); if ( ! $_POST [ " only_errors " ]){ echo " <form action='' method='post'> \n " ; $lf = $G -> num_rows ; echo " <p> " . ( $lf ? ( $z && $lf > $z ? lang ( 149 , $z ) : " " ) . lang ( 150 , $lf ) : " " ), $ji ; if ( $i && preg_match ( " ~^( $Bh | \\ ()*+SELECT \\ b~i " , $zg ) && ( $Jc = explain ( $i , $zg ))) echo " , <a href='# $Kc '>Explain</a> " . script ( " qsl('a').onclick = partial(toggle, ' $Kc '); " , " " ); $t = " export- $ub " ; echo " , <a href='# $t '> " . lang ( 74 ) . " </a> " . script ( " qsl('a').onclick = partial(toggle, ' $t '); " , " " ) . " <span id=' $t ' class='hidden'>: " . html_select ( " output " , $b -> dumpOutput (), $ya [ " output " ]) . " " . html_select ( " format " , $oc , $ya [ " format " ]) . " <input type='hidden' name='query' value=' " . h ( $zg ) . " '> " . " <input type='submit' name='export' value=' " . lang ( 74 ) . " '><input type='hidden' name='token' value=' $ti '></span> \n " . " </form> \n " ;}} else { if ( preg_match ( " ~^ $Bh *+(CREATE|DROP|ALTER) $Bh ++(DATABASE|SCHEMA) \\ b~i " , $zg )){ restart_session (); set_session ( " dbs " , null ); stop_session ();} if ( ! $_POST [ " only_errors " ]) echo " <p class='message' title=' " . h ( $h -> info ) . " '> " . lang ( 151 , $_a ) . " $ji\n " ;} echo ( $ij ? " <div id=' $jj ' class='hidden'> \n $ij </div> \n " : " " ); if ( $Jc ){ echo " <div id=' $Kc ' class='hidden'> \n " ; select ( $Jc , $i , $Hf ); echo " </div> \n " ;}} $Ih = microtime ( true );} while ( $h -> next_result ());} $F = substr ( $F , $C ); $C = 0 ;}}}} if ( $xc ) echo " <p class='message'> " . lang ( 152 ) . " \n " ; elseif ( $_POST [ " only_errors " ]){ echo " <p class='message'> " . lang ( 153 , $ub - count ( $Bc )), " <span class='time'>( " . format_time ( $vi ) . " )</span> \n " ;} elseif ( $Bc && $ub > 1 ) echo " <p class='error'> " . lang ( 148 ) . " : " . implode ( " " , $Bc ) . " \n " ;} else
echo " <p class='error'> " . upload_error ( $F ) . " \n " ;} echo '
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " enctype = " multipart/form-data " id = " form " >
2020-04-26 00:47:07 +02:00
';$Gc="<input type=' submit ' value=' " .lang(154). " ' title=' Ctrl + Enter ' > " ;if(!isset( $_GET["import"] )) { $zg = $_GET["sql"] ;if( $_POST ) $zg = $_POST["query"] ;elseif( $_GET["history"] == " all " ) $zg = $Bd ;elseif( $_GET["history"] != " " ) $zg = $Bd[$_GET["history"] ][0];echo " < p > " ;textarea( " query " , $zg ,20);echo
script (( $_POST ? " " : " qs('textarea').focus(); \n " ) . " qs('#form').onsubmit = partial(sqlSubmit, qs('#form'), ' " . remove_from_uri ( " sql|limit|error_stops|only_errors " ) . " '); " ), " <p> $Gc\n " , lang ( 155 ) . " : <input type='number' name='limit' class='size' value=' " . h ( $_POST ? $_POST [ " limit " ] : $_GET [ " limit " ]) . " '> \n " ;} else { echo " <fieldset><legend> " . lang ( 156 ) . " </legend><div> " ; $vd = ( extension_loaded ( " zlib " ) ? " [.gz] " : " " ); echo ( ini_bool ( " file_uploads " ) ? " SQL $vd (< " . ini_get ( " upload_max_filesize " ) . " B): <input type='file' name='sql_file[]' multiple> \n $Gc " : lang ( 157 )), " </div></fieldset> \n " ; $Kd = $b -> importServerPath (); if ( $Kd ){ echo " <fieldset><legend> " . lang ( 158 ) . " </legend><div> " , lang ( 159 , " <code> " . h ( $Kd ) . " $vd </code> " ), ' <input type="submit" name="webfile" value="' . lang ( 160 ) . '">' , " </div></fieldset> \n " ;} echo " <p> " ;} echo
checkbox ( " error_stops " , 1 ,( $_POST ? $_POST [ " error_stops " ] : isset ( $_GET [ " import " ])), lang ( 161 )) . " \n " , checkbox ( " only_errors " , 1 ,( $_POST ? $_POST [ " only_errors " ] : isset ( $_GET [ " import " ])), lang ( 162 )) . " \n " , " <input type='hidden' name='token' value=' $ti '> \n " ; if ( ! isset ( $_GET [ " import " ]) && $Bd ){ print_fieldset ( " history " , lang ( 163 ), $_GET [ " history " ] != " " ); for ( $X = end ( $Bd ); $X ; $X = prev ( $Bd )){ $y = key ( $Bd ); list ( $zg , $ji , $sc ) = $X ; echo '<a href="' . h ( ME . " sql=&history= $y " ) . '">' . lang ( 10 ) . " </a> " . " <span class='time' title=' " .@ date ( 'Y-m-d' , $ji ) . " '> " .@ date ( " H:i:s " , $ji ) . " </span> " . " <code class='jush- $x '> " . shorten_utf8 ( ltrim ( str_replace ( " \n " , " " , str_replace ( " \r " , " " , preg_replace ( '~^(#|-- ).*~m' , '' , $zg )))), 80 , " </code> " ) . ( $sc ? " <span class='time'>( $sc )</span> " : " " ) . " <br> \n " ;} echo " <input type='submit' name='clear' value=' " . lang ( 164 ) . " '> \n " , " <a href=' " . h ( ME . " sql=&history=all " ) . " '> " . lang ( 165 ) . " </a> \n " , " </div></fieldset> \n " ;} echo ' </ form >
' ;} elseif ( isset ( $_GET [ " edit " ])){ $a = $_GET [ " edit " ]; $p = fields ( $a ); $Z = ( isset ( $_GET [ " select " ]) ? ( $_POST [ " check " ] && count ( $_POST [ " check " ]) == 1 ? where_check ( $_POST [ " check " ][ 0 ], $p ) : " " ) : where ( $_GET , $p )); $Oi = ( isset ( $_GET [ " select " ]) ? $_POST [ " edit " ] : $Z ); foreach ( $p
as $B => $o ){ if ( ! isset ( $o [ " privileges " ][ $Oi ? " update " : " insert " ]) || $b -> fieldName ( $o ) == " " || $o [ " generated " ]) unset ( $p [ $B ]);} if ( $_POST &&! $n &&! isset ( $_GET [ " select " ])){ $Be = $_POST [ " referer " ]; if ( $_POST [ " insert " ]) $Be = ( $Oi ? null : $_SERVER [ " REQUEST_URI " ]); elseif ( ! preg_match ( '~^.+&select=.+$~' , $Be )) $Be = ME . " select= " . urlencode ( $a ); $w = indexes ( $a ); $Ji = unique_array ( $_GET [ " where " ], $w ); $Bg = " \n WHERE $Z " ; if ( isset ( $_POST [ " delete " ])) queries_redirect ( $Be , lang ( 166 ), $m -> delete ( $a , $Bg , ! $Ji )); else { $N = array (); foreach ( $p
as $B => $o ){ $X = process_input ( $o ); if ( $X !== false && $X !== null ) $N [ idf_escape ( $B )] = $X ;} if ( $Oi ){ if ( ! $N ) redirect ( $Be ); queries_redirect ( $Be , lang ( 167 ), $m -> update ( $a , $N , $Bg , ! $Ji )); if ( is_ajax ()){ page_headers (); page_messages ( $n ); exit ;}} else { $G = $m -> insert ( $a , $N ); $te = ( $G ? last_id () : 0 ); queries_redirect ( $Be , lang ( 168 ,( $te ? " $te " : " " )), $G );}}} $I = null ; if ( $_POST [ " save " ]) $I = ( array ) $_POST [ " fields " ]; elseif ( $Z ){ $K = array (); foreach ( $p
as $B => $o ){ if ( isset ( $o [ " privileges " ][ " select " ])){ $Ha = convert_field ( $o ); if ( $_POST [ " clone " ] && $o [ " auto_increment " ]) $Ha = " '' " ; if ( $x == " sql " && preg_match ( " ~enum|set~ " , $o [ " type " ])) $Ha = " 1* " . idf_escape ( $B ); $K [] = ( $Ha ? " $Ha AS " : " " ) . idf_escape ( $B );}} $I = array (); if ( ! support ( " table " )) $K = array ( " * " ); if ( $K ){ $G = $m -> select ( $a , $K , array ( $Z ), $K , array (),( isset ( $_GET [ " select " ]) ? 2 : 1 )); if ( ! $G ) $n = error (); else { $I = $G -> fetch_assoc (); if ( ! $I ) $I = false ;} if ( isset ( $_GET [ " select " ]) && ( ! $I || $G -> fetch_assoc ())) $I = null ;}} if ( ! support ( " table " ) &&! $p ){ if ( ! $Z ){ $G = $m -> select ( $a , array ( " * " ), $Z , array ( " * " )); $I = ( $G ? $G -> fetch_assoc () : false ); if ( ! $I ) $I = array ( $m -> primary => " " );} if ( $I ){ foreach ( $I
as $y => $X ){ if ( ! $Z ) $I [ $y ] = null ; $p [ $y ] = array ( " field " => $y , " null " => ( $y != $m -> primary ), " auto_increment " => ( $y == $m -> primary ));}}} edit_form ( $a , $p , $I , $Oi );} elseif ( isset ( $_GET [ " create " ])){ $a = $_GET [ " create " ]; $Xf = array (); foreach ( array ( 'HASH' , 'LINEAR HASH' , 'KEY' , 'LINEAR KEY' , 'RANGE' , 'LIST' ) as $y ) $Xf [ $y ] = $y ; $Jg = referencable_primary ( $a ); $id = array (); foreach ( $Jg
as $Uh => $o ) $id [ str_replace ( " ` " , " `` " , $Uh ) . " ` " . str_replace ( " ` " , " `` " , $o [ " field " ])] = $Uh ; $Kf = array (); $R = array (); if ( $a != " " ){ $Kf = fields ( $a ); $R = table_status ( $a ); if ( ! $R ) $n = lang ( 9 );} $I = $_POST ; $I [ " fields " ] = ( array ) $I [ " fields " ]; if ( $I [ " auto_increment_col " ]) $I [ " fields " ][ $I [ " auto_increment_col " ]][ " auto_increment " ] = true ; if ( $_POST ) set_adminer_settings ( array ( " comments " => $_POST [ " comments " ], " defaults " => $_POST [ " defaults " ])); if ( $_POST &&! process_fields ( $I [ " fields " ]) &&! $n ){ if ( $_POST [ " drop " ]) queries_redirect ( substr ( ME , 0 , - 1 ), lang ( 169 ), drop_tables ( array ( $a ))); else { $p = array (); $Ea = array (); $Ti = false ; $gd = array (); $Jf = reset ( $Kf ); $Ba = " FIRST " ; foreach ( $I [ " fields " ] as $y => $o ){ $q = $id [ $o [ " type " ]]; $Fi = ( $q !== null ? $Jg [ $q ] : $o ); if ( $o [ " field " ] != " " ){ if ( ! $o [ " has_default " ]) $o [ " default " ] = null ; if ( $y == $I [ " auto_increment_col " ]) $o [ " auto_increment " ] = true ; $wg = process_field ( $o , $Fi ); $Ea [] = array ( $o [ " orig " ], $wg , $Ba ); if ( $wg != process_field ( $Jf , $Jf )){ $p [] = array ( $o [ " orig " ], $wg , $Ba ); if ( $o [ " orig " ] != " " || $Ba ) $Ti = true ;} if ( $q !== null ) $gd [ idf_escape ( $o [ " field " ])] = ( $a != " " && $x != " sqlite " ? " ADD " : " " ) . format_foreign_key ( array ( 'table' => $id [ $o [ " type " ]], 'source' => array ( $o [ " field " ]), 'target' => array ( $Fi [ " field " ]), 'on_delete' => $o [ " on_delete " ],)); $Ba = " AFTER " . idf_escape ( $o [ " field " ]);} elseif ( $o [ " orig " ] != " " ){ $Ti = true ; $p [] = array ( $o [ " orig " ]);} if ( $o [ " orig " ] != " " ){ $Jf = next ( $Kf ); if ( ! $Jf ) $Ba = " " ;}} $Zf = " " ; if ( $Xf [ $I [ " partition_by " ]]){ $ag = array (); if ( $I [ " partition_by " ] == 'RANGE' || $I [ " partition_by " ] == 'LIST' ){ foreach ( array_filter ( $I [ " partition_names " ]) as $y => $X ){ $Y = $I [ " partition_values " ][ $y ]; $ag [] = " \n PARTITION " . idf_escape ( $X ) . " VALUES " . ( $I [ " partition_by " ] == 'RANGE' ? " LESS THAN " : " IN " ) . ( $Y != " " ? " ( $Y ) " : " MAXVALUE " );}} $Zf .= " \n PARTITION BY $I[partition_by] ( $I[partition] ) " . ( $ag ? " ( " . implode ( " , " , $ag ) . " \n ) " : ( $I [ " partitions " ] ? " PARTITIONS " . ( + $I [ " partitions " ]) : " " ));} elseif ( support ( " partitioning " ) && preg_match ( " ~partitioned~ " , $R [ " Create_options " ])) $Zf .= " \n REMOVE PARTITIONING " ; $Qe = lang ( 170 ); if ( $a == " " ){ cookie ( " adminer_engine " , $I [ " Engine " ]); $Qe = lang ( 171 );} $B = trim ( $I [ " name " ]); queries_redirect ( ME . ( support ( " table " ) ? " table= " : " select= " ) . urlencode ( $B ), $Qe , alter_table ( $a , $B ,( $x == " sqlite " && ( $Ti || $gd ) ? $Ea : $p ), $gd ,( $I [ " Comment " ] != $R [ " Comment " ] ? $I [ " Comment " ] : null ),( $I [ " Engine " ] && $I [ " Engine " ] != $R [ " Engine " ] ? $I [ " Engine " ] : " " ),( $I [ " Collation " ] && $I [ " Collation " ] != $R [ " Collation " ] ? $I [ " Collation " ] : " " ),( $I [ " Auto_increment " ] != " " ? number ( $I [ " Auto_increment " ]) : " " ), $Zf ));}} page_header (( $a != " " ? lang ( 45 ) : lang ( 75 )), $n , array ( " table " => $a ), h ( $a )); if ( ! $_POST ){ $I = array ( " Engine " => $_COOKIE [ " adminer_engine " ], " fields " => array ( array ( " field " => " " , " type " => ( isset ( $U [ " int " ]) ? " int " : ( isset ( $U [ " integer " ]) ? " integer " : " " )), " on_update " => " " )), " partition_names " => array ( " " ),); if ( $a != " " ){ $I = $R ; $I [ " name " ] = $a ; $I [ " fields " ] = array (); if ( ! $_GET [ " auto_increment " ]) $I [ " Auto_increment " ] = " " ; foreach ( $Kf
as $o ){ $o [ " has_default " ] = isset ( $o [ " default " ]); $I [ " fields " ][] = $o ;} if ( support ( " partitioning " )){ $nd = " FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . q ( DB ) . " AND TABLE_NAME = " . q ( $a ); $G = $h -> query ( " SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $nd ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1 " ); list ( $I [ " partition_by " ], $I [ " partitions " ], $I [ " partition " ]) = $G -> fetch_row (); $ag = get_key_vals ( " SELECT PARTITION_NAME, PARTITION_DESCRIPTION $nd AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION " ); $ag [ " " ] = " " ; $I [ " partition_names " ] = array_keys ( $ag ); $I [ " partition_values " ] = array_values ( $ag );}}} $qb = collations (); $zc = engines (); foreach ( $zc
as $yc ){ if ( ! strcasecmp ( $yc , $I [ " Engine " ])){ $I [ " Engine " ] = $yc ; break ;}} echo '
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " id = " form " >
< p >
2018-04-01 23:34:54 +02:00
' ; if ( support ( " columns " ) || $a == " " ){ echo
2020-04-26 00:47:07 +02:00
lang ( 172 ), ': <input name="name" data-maxlength="64" value="' , h ( $I [ " name " ]), ' " autocapitalize= " off " >
2018-04-01 23:34:54 +02:00
' ; if ( $a == " " &&! $_POST ) echo
2020-04-26 00:47:07 +02:00
script ( " focus(qs('#form')['name']); " ); echo ( $zc ? " <select name='Engine'> " . optionlist ( array ( " " => " ( " . lang ( 173 ) . " ) " ) + $zc , $I [ " Engine " ]) . " </select> " . on_help ( " getTarget(event).value " , 1 ) . script ( " qsl('select').onchange = helpClose; " ) : " " ), ' ' ,( $qb &&! preg_match ( " ~sqlite|mssql~ " , $x ) ? html_select ( " Collation " , array ( " " => " ( " . lang ( 101 ) . " ) " ) + $qb , $I [ " Collation " ]) : " " ), ' <input type="submit" value="' , lang ( 14 ), ' " >
2014-05-08 19:46:08 +02:00
';}echo'
2018-12-25 21:50:48 +01:00
';if(support("columns")){echo' < div class = " scrollable " >
< table cellspacing = " 0 " id = " edit-fields " class = " nowrap " >
2020-04-26 00:47:07 +02:00
';edit_fields($I["fields"],$qb,"TABLE",$id);echo' </ table >
',script("editFields();"),' </ div >
2014-05-08 19:46:08 +02:00
< p >
2020-04-26 00:47:07 +02:00
',lang(52),' : < input type = " number " name = " Auto_increment " size = " 6 " value = " ',h( $I["Auto_increment"] ),' " >
',checkbox("defaults",1,($_POST?$_POST["defaults"]:adminer_setting("defaults")),lang(174),"columnShow(this.checked, 5)","jsonly"),(support("comment")?checkbox("comments",1,($_POST?$_POST["comments"]:adminer_setting("comments")),lang(51),"editingCommentsClick(this, true);","jsonly").' < input name = " Comment " value = " '.h( $I["Comment"] ).' " data - maxlength = " '.(min_version(5.5)?2048:60).' " > ':' '),' < p >
2014-05-08 19:46:08 +02:00
< input type = " submit " value = " ',lang(14),' " >
';}echo'
2020-04-26 00:47:07 +02:00
';if($a!=""){echo' < input type = " submit " name = " drop " value = " ',lang(127),' " > ',confirm(lang(175,$a));}if(support("partitioning")){$Yf=preg_match(' ~ RANGE | LIST ~ ',$I["partition_by"]);print_fieldset("partition",lang(176),$I["partition_by"]);echo' < p >
',"<select name=' partition_by '>".optionlist(array(""=>"")+$Xf,$I["partition_by"])."</select>".on_help("getTarget(event).value.replace(/./, ' PARTITION BY \ $ & ')",1).script("qsl(' select ').onchange = partitionByChange;"),' ( < input name = " partition " value = " ',h( $I["partition"] ),' " > )
',lang(177),' : < input type = " number " name = " partitions " class = " size',( $Yf ||! $I["partition_by"] ? " hidden " : " " ),' " value = " ',h( $I["partitions"] ),' " >
< table cellspacing = " 0 " id = " partition-table " ',($Yf?"":" class=' hidden '"),' >
2018-12-25 21:50:48 +01:00
< thead >< tr >< th > ',lang(178),' < th > ',lang(179),' </ thead >
2020-04-26 00:47:07 +02:00
';foreach($I["partition_names"]as$y=>$X){echo' < tr > ',' < td >< input name = " partition_names[] " value = " '.h( $X ).' " autocapitalize = " off " > ',($y==count($I["partition_names"])-1?script("qsl(' input ').oninput = partitionNameChange;"):' '),' < td >< input name = " partition_values[] " value = " '.h( $I["partition_values"] [ $y ]).' " > ';}echo' </ table >
2014-05-08 19:46:08 +02:00
</ div ></ fieldset >
2020-04-26 00:47:07 +02:00
';}echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["indexes"])){$a=$_GET["indexes"];$Nd=array("PRIMARY","UNIQUE","INDEX");$R=table_status($a,true);if(preg_match(' ~ MyISAM | M ? aria '.(min_version(5.6,' 10.0 . 5 ')?' | InnoDB ':' ').' ~ i ',$R["Engine"]))$Nd[]="FULLTEXT";if(preg_match(' ~ MyISAM | M ? aria '.(min_version(5.7,' 10.2 . 2 ')?' | InnoDB ':' ').' ~ i ' , $R [ " Engine " ])) $Nd [] = " SPATIAL " ; $w = indexes ( $a ); $pg = array (); if ( $x == " mongo " ){ $pg = $w [ " _id_ " ]; unset ( $Nd [ 0 ]); unset ( $w [ " _id_ " ]);} $I = $_POST ; if ( $_POST &&! $n &&! $_POST [ " add " ] &&! $_POST [ " drop_col " ]){ $c = array (); foreach ( $I [ " indexes " ] as $v ){ $B = $v [ " name " ]; if ( in_array ( $v [ " type " ], $Nd )){ $f = array (); $ze = array (); $cc = array (); $N = array (); ksort ( $v [ " columns " ]); foreach ( $v [ " columns " ] as $y => $e ){ if ( $e != " " ){ $ye = $v [ " lengths " ][ $y ]; $bc = $v [ " descs " ][ $y ]; $N [] = idf_escape ( $e ) . ( $ye ? " ( " . ( + $ye ) . " ) " : " " ) . ( $bc ? " DESC " : " " ); $f [] = $e ; $ze [] = ( $ye ? $ye : null ); $cc [] = $bc ;}} if ( $f ){ $Hc = $w [ $B ]; if ( $Hc ){ ksort ( $Hc [ " columns " ]); ksort ( $Hc [ " lengths " ]); ksort ( $Hc [ " descs " ]); if ( $v [ " type " ] == $Hc [ " type " ] && array_values ( $Hc [ " columns " ]) === $f && ( ! $Hc [ " lengths " ] || array_values ( $Hc [ " lengths " ]) === $ze ) && array_values ( $Hc [ " descs " ]) === $cc ){ unset ( $w [ $B ]); continue ;}} $c [] = array ( $v [ " type " ], $B , $N );}}} foreach ( $w
as $B => $Hc ) $c [] = array ( $Hc [ " type " ], $B , " DROP " ); if ( ! $c ) redirect ( ME . " table= " . urlencode ( $a )); queries_redirect ( ME . " table= " . urlencode ( $a ), lang ( 180 ), alter_indexes ( $a , $c ));} page_header ( lang ( 132 ), $n , array ( " table " => $a ), h ( $a )); $p = array_keys ( fields ( $a )); if ( $_POST [ " add " ]){ foreach ( $I [ " indexes " ] as $y => $v ){ if ( $v [ " columns " ][ count ( $v [ " columns " ])] != " " ) $I [ " indexes " ][ $y ][ " columns " ][] = " " ;} $v = end ( $I [ " indexes " ]); if ( $v [ " type " ] || array_filter ( $v [ " columns " ], 'strlen' )) $I [ " indexes " ][] = array ( " columns " => array ( 1 => " " ));} if ( ! $I ){ foreach ( $w
as $y => $v ){ $w [ $y ][ " name " ] = $y ; $w [ $y ][ " columns " ][] = " " ;} $w [] = array ( " columns " => array ( 1 => " " )); $I [ " indexes " ] = $w ;} echo '
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " >
2018-12-25 21:50:48 +01:00
< div class = " scrollable " >
2014-05-08 19:46:08 +02:00
< table cellspacing = " 0 " class = " nowrap " >
< thead >< tr >
2020-10-12 20:47:58 +02:00
< th id = " label-type " > ',lang(181),' < th >< input type = " submit " class = " wayoff " > ',lang(182),' < th id = " label-name " > ',lang(183),' < th >< noscript > ',"<input type=' image ' class=' icon ' name=' add [ 0 ] ' src=' " .h(preg_replace( " ~ \\ ? .*~ " , " " ,ME). " ? file = plus . gif & version = 4.7 . 7 " ). " ' alt=' + ' title=' " .lang(108). " '>",' </ noscript >
2014-05-08 19:46:08 +02:00
</ thead >
2020-04-26 00:47:07 +02:00
' ; if ( $pg ){ echo " <tr><td>PRIMARY<td> " ; foreach ( $pg [ " columns " ] as $y => $e ){ echo
2020-10-12 20:47:58 +02:00
select_input ( " disabled " , $p , $e ), " <label><input disabled type='checkbox'> " . lang ( 60 ) . " </label> " ;} echo " <td><td> \n " ;} $ge = 1 ; foreach ( $I [ " indexes " ] as $v ){ if ( ! $_POST [ " drop_col " ] || $ge != key ( $_POST [ " drop_col " ])){ echo " <tr><td> " . html_select ( " indexes[ $ge ][type] " , array ( - 1 => " " ) + $Nd , $v [ " type " ],( $ge == count ( $I [ " indexes " ]) ? " indexesAddRow.call(this); " : 1 ), " label-type " ), " <td> " ; ksort ( $v [ " columns " ]); $s = 1 ; foreach ( $v [ " columns " ] as $y => $e ){ echo " <span> " . select_input ( " name='indexes[ $ge ][columns][ $s ]' title=' " . lang ( 49 ) . " ' " ,( $p ? array_combine ( $p , $p ) : $p ), $e , " partial( " . ( $s == count ( $v [ " columns " ]) ? " indexesAddColumn " : " indexesChangeColumn " ) . " , ' " . js_escape ( $x == " sql " ? " " : $_GET [ " indexes " ] . " _ " ) . " ') " ),( $x == " sql " || $x == " mssql " ? " <input type='number' name='indexes[ $ge ][lengths][ $s ]' class='size' value=' " . h ( $v [ " lengths " ][ $y ]) . " ' title=' " . lang ( 106 ) . " '> " : " " ),( support ( " descidx " ) ? checkbox ( " indexes[ $ge ][descs][ $s ] " , 1 , $v [ " descs " ][ $y ], lang ( 60 )) : " " ), " </span> " ; $s ++ ;} echo " <td><input name='indexes[ $ge ][name]' value=' " . h ( $v [ " name " ]) . " ' autocapitalize='off' aria-labelledby='label-name'> \n " , " <td><input type='image' class='icon' name='drop_col[ $ge ]' src=' " . h ( preg_replace ( " ~ \\ ?.*~ " , " " , ME ) . " ?file=cross.gif&version=4.7.7 " ) . " ' alt='x' title=' " . lang ( 111 ) . " '> " . script ( " qsl('input').onclick = partial(editingRemoveRow, 'indexes \$ 1[type]'); " );} $ge ++ ;} echo ' </ table >
2018-12-25 21:50:48 +01:00
</ div >
2014-05-08 19:46:08 +02:00
< p >
< input type = " submit " value = " ',lang(14),' " >
2020-04-26 00:47:07 +02:00
< input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["database"])){$I=$_POST;if($_POST&&!$n&&!isset($_POST["add_x"])){$B=trim($I["name"]);if($_POST["drop"]){$_GET["db"]="";queries_redirect(remove_from_uri("db|database"),lang(184),drop_databases(array(DB)));}elseif(DB!==$B){if(DB!=""){$_GET["db"]=$B;queries_redirect(preg_replace(' ~ \bdb = [ ^& ] *&~ ',' ' , ME ) . " db= " . urlencode ( $B ), lang ( 185 ), rename_database ( $B , $I [ " collation " ]));} else { $k = explode ( " \n " , str_replace ( " \r " , " " , $B )); $Oh = true ; $se = " " ; foreach ( $k
as $l ){ if ( count ( $k ) == 1 || $l != " " ){ if ( ! create_database ( $l , $I [ " collation " ])) $Oh = false ; $se = $l ;}} restart_session (); set_session ( " dbs " , null ); queries_redirect ( ME . " db= " . urlencode ( $se ), lang ( 186 ), $Oh );}} else { if ( ! $I [ " collation " ]) redirect ( substr ( ME , 0 , - 1 )); query_redirect ( " ALTER DATABASE " . idf_escape ( $B ) . ( preg_match ( '~^[a-z0-9_]+$~i' , $I [ " collation " ]) ? " COLLATE $I[collation] " : " " ), substr ( ME , 0 , - 1 ), lang ( 187 ));}} page_header ( DB != " " ? lang ( 68 ) : lang ( 115 ), $n , array (), h ( DB )); $qb = collations (); $B = DB ; if ( $_POST ) $B = $I [ " name " ]; elseif ( DB != " " ) $I [ " collation " ] = db_collation ( DB , $qb ); elseif ( $x == " sql " ){ foreach ( get_vals ( " SHOW GRANTS " ) as $pd ){ if ( preg_match ( '~ ON (`(([^\\\\`]|``|\\\\.)*)%`\.\*)?~' , $pd , $A ) && $A [ 1 ]){ $B = stripcslashes ( idf_unescape ( " ` $A[2] ` " )); break ;}}} echo '
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " >
< p >
2020-04-26 00:47:07 +02:00
',($_POST["add_x"]||strpos($B,"\n")?' < textarea id = " name " name = " name " rows = " 10 " cols = " 40 " > '.h($B).' </ textarea >< br > ':' < input name = " name " id = " name " value = " '.h( $B ).' " data - maxlength = " 64 " autocapitalize = " off " > ')."\n".($qb?html_select("collation",array(""=>"(".lang(101).")")+$qb,$I["collation"]).doc_link(array(' sql '=>"charset-charsets.html",' mariadb '=>"supported-character-sets-and-collations/",' mssql '=>"ms187963.aspx",)):""),script("focus(qs(' #name'));"),'<input type="submit" value="',lang(14),'">
2020-10-12 20:47:58 +02:00
';if(DB!="")echo"<input type=' submit ' name=' drop ' value=' " .lang(127). " '>".confirm(lang(175,DB))."\n";elseif(!$_POST["add_x"]&&$_GET["db"]=="")echo"<input type=' image ' class=' icon ' name=' add ' src=' " .h(preg_replace( " ~ \\ ? .*~ " , " " ,ME). " ? file = plus . gif & version = 4.7 . 7 " ). " ' alt=' + ' title=' " .lang(108). " '>\n";echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2018-04-01 23:34:54 +02:00
</ form >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["scheme"])){$I=$_POST;if($_POST&&!$n){$_=preg_replace(' ~ ns = [ ^& ] *&~ ',' ' , ME ) . " ns= " ; if ( $_POST [ " drop " ]) query_redirect ( " DROP SCHEMA " . idf_escape ( $_GET [ " ns " ]), $_ , lang ( 188 )); else { $B = trim ( $I [ " name " ]); $_ .= urlencode ( $B ); if ( $_GET [ " ns " ] == " " ) query_redirect ( " CREATE SCHEMA " . idf_escape ( $B ), $_ , lang ( 189 )); elseif ( $_GET [ " ns " ] != $B ) query_redirect ( " ALTER SCHEMA " . idf_escape ( $_GET [ " ns " ]) . " RENAME TO " . idf_escape ( $B ), $_ , lang ( 190 )); else
redirect ( $_ );}} page_header ( $_GET [ " ns " ] != " " ? lang ( 69 ) : lang ( 70 ), $n ); if ( ! $I ) $I [ " name " ] = $_GET [ " ns " ]; echo '
2018-04-01 23:34:54 +02:00
< form action = " " method = " post " >
2020-04-26 00:47:07 +02:00
< p >< input name = " name " id = " name " value = " ',h( $I["name"] ),' " autocapitalize = " off " >
2018-04-01 23:34:54 +02:00
',script("focus(qs(' #name'));"),'<input type="submit" value="',lang(14),'">
2020-04-26 00:47:07 +02:00
';if($_GET["ns"]!="")echo"<input type=' submit ' name=' drop ' value=' " .lang(127). " '>".confirm(lang(175,$_GET["ns"]))."\n";echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["call"])){$da=($_GET["name"]?$_GET["name"]:$_GET["call"]);page_header(lang(191).": ".h($da),$n);$Zg=routine($_GET["call"],(isset($_GET["callf"])?"FUNCTION":"PROCEDURE"));$Ld=array();$Of=array();foreach($Zg["fields"]as$s=>$o){if(substr($o["inout"],-3)=="OUT")$Of[$s]="@".idf_escape($o["field"])." AS ".idf_escape($o["field"]);if(!$o["inout"]||substr($o["inout"],0,2)=="IN")$Ld[]=$s;}if(!$n&&$_POST){$bb=array();foreach($Zg["fields"]as$y=>$o){if(in_array($y,$Ld)){$X=process_input($o);if($X===false)$X="' '";if(isset($Of[$y]))$h->query("SET @".idf_escape($o["field"])." = $X");}$bb[]=(isset($Of[$y])?"@".idf_escape($o["field"]):$X);}$F=(isset($_GET["callf"])?"SELECT":"CALL")." ".table($da)."(".implode(", ",$bb).")";$Ih=microtime(true);$G=$h->multi_query($F);$_a=$h->affected_rows;echo$b->selectQuery($F,$Ih,!$G);if(!$G)echo"<p class=' error ' > " .error(). " \n " ;else { $i =connect();if(is_object( $i )) $i->select_db (DB);do { $G = $h->store_result ();if(is_object( $G ))select( $G , $i );else
echo " <p class='message'> " . lang ( 192 , $_a ) . " <span class='time'> " .@ date ( " H:i:s " ) . " </span> \n " ;} while ( $h -> next_result ()); if ( $Of ) select ( $h -> query ( " SELECT " . implode ( " , " , $Of )));}} echo '
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " >
2020-04-26 00:47:07 +02:00
';if($Ld){echo"<table cellspacing=' 0 ' class=' layout ' > \n " ;foreach( $Ld
as $y ){ $o = $Zg [ " fields " ][ $y ]; $B = $o [ " field " ]; echo " <tr><th> " . $b -> fieldName ( $o ); $Y = $_POST [ " fields " ][ $B ]; if ( $Y != " " ){ if ( $o [ " type " ] == " enum " ) $Y =+ $Y ; if ( $o [ " type " ] == " set " ) $Y = array_sum ( $Y );} input ( $o , $Y ,( string ) $_POST [ " function " ][ $B ]); echo " \n " ;} echo " </table> \n " ;} echo ' < p >
2018-12-25 21:50:48 +01:00
< input type = " submit " value = " ',lang(191),' " >
2020-04-26 00:47:07 +02:00
< input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["foreign"])){$a=$_GET["foreign"];$B=$_GET["name"];$I=$_POST;if($_POST&&!$n&&!$_POST["add"]&&!$_POST["change"]&&!$_POST["change-js"]){$Qe=($_POST["drop"]?lang(193):($B!=""?lang(194):lang(195)));$Be=ME."table=".urlencode($a);if(!$_POST["drop"]){$I["source"]=array_filter($I["source"],' strlen ');ksort($I["source"]);$ci=array();foreach($I["source"]as$y=>$X)$ci[$y]=$I["target"][$y];$I["target"]=$ci;}if($x=="sqlite")queries_redirect($Be,$Qe,recreate_table($a,$a,array(),array(),array(" $B"=>($_POST["drop"]?"":" ".format_foreign_key($I)))));else{$c="ALTER TABLE ".table($a);$jc="\nDROP ".($x=="sql"?"FOREIGN KEY ":"CONSTRAINT ").idf_escape($B);if($_POST["drop"])query_redirect($c.$jc,$Be,$Qe);else{query_redirect($c.($B!=""?"$jc,":"")."\nADD".format_foreign_key($I),$Be,$Qe);$n=lang(196)."<br>$n";}}}page_header(lang(197),$n,array("table"=>$a),h($a));if($_POST){ksort($I["source"]);if($_POST["add"])$I["source"][]="";elseif($_POST["change"]||$_POST["change-js"])$I["target"]=array();}elseif($B!=""){$id=foreign_keys($a);$I=$id[$B];$I["source"][]="";}else{$I["table"]=$a;$I["source"]=array("");}echo'
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " >
2020-04-26 00:47:07 +02:00
';$Ah=array_keys(fields($a));if($I["db"]!="")$h->select_db($I["db"]);if($I["ns"]!="")set_schema($I["ns"]);$Ig=array_keys(array_filter(table_status(' ',true),' fk_support '));$ci=($a===$I["table"]?$Ah:array_keys(fields(in_array($I["table"],$Ig)?$I["table"]:reset($Ig))));$wf="this.form[' change - js '].value = ' 1 ' ; this . form . submit (); " ;echo " < p > " .lang(198). " : " .html_select( " table " , $Ig , $I["table"] , $wf ). " \n " ;if( $x == " pgsql " )echo
lang ( 78 ) . " : " . html_select ( " ns " , $b -> schemas (), $I [ " ns " ] != " " ? $I [ " ns " ] : $_GET [ " ns " ], $wf ); elseif ( $x != " sqlite " ){ $Ub = array (); foreach ( $b -> databases () as $l ){ if ( ! information_schema ( $l )) $Ub [] = $l ;} echo
lang ( 77 ) . " : " . html_select ( " db " , $Ub , $I [ " db " ] != " " ? $I [ " db " ] : $_GET [ " db " ], $wf );} echo ' < input type = " hidden " name = " change-js " value = " " >
2018-12-25 21:50:48 +01:00
< noscript >< p >< input type = " submit " name = " change " value = " ',lang(199),' " ></ noscript >
2014-05-08 19:46:08 +02:00
< table cellspacing = " 0 " >
2018-12-25 21:50:48 +01:00
< thead >< tr >< th id = " label-source " > ',lang(134),' < th id = " label-target " > ',lang(135),' </ thead >
2020-04-26 00:47:07 +02:00
';$ge=0;foreach($I["source"]as$y=>$X){echo"<tr>","<td>".html_select("source[".(+$y)."]",array(-1=>"")+$Ah,$X,($ge==count($I["source"])-1?"foreignAddRow.call(this);":1),"label-source"),"<td>".html_select("target[".(+$y)."]",$ci,$I["target"][$y],1,"label-target");$ge++;}echo' </ table >
2014-05-08 19:46:08 +02:00
< p >
2020-04-26 00:47:07 +02:00
',lang(103),' : ',html_select("on_delete",array(-1=>"")+explode("|",$vf),$I["on_delete"]),' ',lang(102),' : ',html_select("on_update",array(-1=>"")+explode("|",$vf),$I["on_update"]),doc_link(array(' sql '=>"innodb-foreign-key-constraints.html",' mariadb '=>"foreign-keys/",' pgsql '=>"sql-createtable.html#SQL-CREATETABLE-REFERENCES",' mssql '=>"ms174979.aspx",' oracle '=>"https://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm#sthref2903",)),' < p >
2014-05-08 19:46:08 +02:00
< input type = " submit " value = " ',lang(14),' " >
2018-12-25 21:50:48 +01:00
< noscript >< p >< input type = " submit " name = " add " value = " ',lang(200),' " ></ noscript >
2020-04-26 00:47:07 +02:00
';if($B!=""){echo' < input type = " submit " name = " drop " value = " ',lang(127),' " > ',confirm(lang(175,$B));}echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["view"])){$a=$_GET["view"];$I=$_POST;$Lf="VIEW";if($x=="pgsql"&&$a!=""){$O=table_status($a);$Lf=strtoupper($O["Engine"]);}if($_POST&&!$n){$B=trim($I["name"]);$Ha=" AS\n$I[select]";$Be=ME."table=".urlencode($B);$Qe=lang(201);$T=($_POST["materialized"]?"MATERIALIZED VIEW":"VIEW");if(!$_POST["drop"]&&$a==$B&&$x!="sqlite"&&$T=="VIEW"&&$Lf=="VIEW")query_redirect(($x=="mssql"?"ALTER":"CREATE OR REPLACE")." VIEW ".table($B).$Ha,$Be,$Qe);else{$ei=$B."_adminer_".uniqid();drop_create("DROP $Lf ".table($a),"CREATE $T ".table($B).$Ha,"DROP $T ".table($B),"CREATE $T ".table($ei).$Ha,"DROP $T ".table($ei),($_POST["drop"]?substr(ME,0,-1):$Be),lang(202),$Qe,lang(203),$a,$B);}}if(!$_POST&&$a!=""){$I=view($a);$I["name"]=$a;$I["materialized"]=($Lf!="VIEW");if(!$n)$n=error();}page_header(($a!=""?lang(44):lang(204)),$n,array("table"=>$a),h($a));echo'
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " >
2020-04-26 00:47:07 +02:00
< p > ',lang(183),' : < input name = " name " value = " ',h( $I["name"] ),' " data - maxlength = " 64 " autocapitalize = " off " >
',(support("materializedview")?" ".checkbox("materialized",1,$I["materialized"],lang(129)):""),' < p > ';textarea("select",$I["select"]);echo' < p >
2014-05-08 19:46:08 +02:00
< input type = " submit " value = " ',lang(14),' " >
2020-04-26 00:47:07 +02:00
';if($a!=""){echo' < input type = " submit " name = " drop " value = " ',lang(127),' " > ',confirm(lang(175,$a));}echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["event"])){$aa=$_GET["event"];$Yd=array("YEAR","QUARTER","MONTH","DAY","HOUR","MINUTE","WEEK","SECOND","YEAR_MONTH","DAY_HOUR","DAY_MINUTE","DAY_SECOND","HOUR_MINUTE","HOUR_SECOND","MINUTE_SECOND");$Kh=array("ENABLED"=>"ENABLE","DISABLED"=>"DISABLE","SLAVESIDE_DISABLED"=>"DISABLE ON SLAVE");$I=$_POST;if($_POST&&!$n){if($_POST["drop"])query_redirect("DROP EVENT ".idf_escape($aa),substr(ME,0,-1),lang(205));elseif(in_array($I["INTERVAL_FIELD"],$Yd)&&isset($Kh[$I["STATUS"]])){$eh="\nON SCHEDULE ".($I["INTERVAL_VALUE"]?"EVERY ".q($I["INTERVAL_VALUE"])." $I[INTERVAL_FIELD]".($I["STARTS"]?" STARTS ".q($I["STARTS"]):"").($I["ENDS"]?" ENDS ".q($I["ENDS"]):""):"AT ".q($I["STARTS"]))." ON COMPLETION".($I["ON_COMPLETION"]?"":" NOT")." PRESERVE";queries_redirect(substr(ME,0,-1),($aa!=""?lang(206):lang(207)),queries(($aa!=""?"ALTER EVENT ".idf_escape($aa).$eh.($aa!=$I["EVENT_NAME"]?"\nRENAME TO ".idf_escape($I["EVENT_NAME"]):""):"CREATE EVENT ".idf_escape($I["EVENT_NAME"]).$eh)."\n".$Kh[$I["STATUS"]]." COMMENT ".q($I["EVENT_COMMENT"]).rtrim(" DO\n$I[EVENT_DEFINITION]",";").";"));}}page_header(($aa!=""?lang(208).": ".h($aa):lang(209)),$n);if(!$I&&$aa!=""){$J=get_rows("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = ".q(DB)." AND EVENT_NAME = ".q($aa));$I=reset($J);}echo'
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " >
2018-12-25 21:50:48 +01:00
< table cellspacing = " 0 " class = " layout " >
2020-04-26 00:47:07 +02:00
< tr >< th > ',lang(183),' < td >< input name = " EVENT_NAME " value = " ',h( $I["EVENT_NAME"] ),' " data - maxlength = " 64 " autocapitalize = " off " >
< tr >< th title = " datetime " > ',lang(210),' < td >< input name = " STARTS " value = " ',h( " $I [ EXECUTE_AT ] $I [ STARTS ] " ),' " >
< tr >< th title = " datetime " > ',lang(211),' < td >< input name = " ENDS " value = " ',h( $I["ENDS"] ),' " >
< tr >< th > ',lang(212),' < td >< input type = " number " name = " INTERVAL_VALUE " value = " ',h( $I["INTERVAL_VALUE"] ),' " class = " size " > ',html_select("INTERVAL_FIELD",$Yd,$I["INTERVAL_FIELD"]),' < tr >< th > ',lang(118),' < td > ',html_select("STATUS",$Kh,$I["STATUS"]),' < tr >< th > ',lang(51),' < td >< input name = " EVENT_COMMENT " value = " ',h( $I["EVENT_COMMENT"] ),' " data - maxlength = " 64 " >
< tr >< th >< td > ',checkbox("ON_COMPLETION","PRESERVE",$I["ON_COMPLETION"]=="PRESERVE",lang(213)),' </ table >
< p > ';textarea("EVENT_DEFINITION",$I["EVENT_DEFINITION"]);echo' < p >
2014-05-08 19:46:08 +02:00
< input type = " submit " value = " ',lang(14),' " >
2020-04-26 00:47:07 +02:00
';if($aa!=""){echo' < input type = " submit " name = " drop " value = " ',lang(127),' " > ',confirm(lang(175,$aa));}echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["procedure"])){$da=($_GET["name"]?$_GET["name"]:$_GET["procedure"]);$Zg=(isset($_GET["function"])?"FUNCTION":"PROCEDURE");$I=$_POST;$I["fields"]=(array)$I["fields"];if($_POST&&!process_fields($I["fields"])&&!$n){$If=routine($_GET["procedure"],$Zg);$ei="$I[name]_adminer_".uniqid();drop_create("DROP $Zg ".routine_id($da,$If),create_routine($Zg,$I),"DROP $Zg ".routine_id($I["name"],$I),create_routine($Zg,array("name"=>$ei)+$I),"DROP $Zg ".routine_id($ei,$I),substr(ME,0,-1),lang(214),lang(215),lang(216),$da,$I["name"]);}page_header(($da!=""?(isset($_GET["function"])?lang(217):lang(218)).": ".h($da):(isset($_GET["function"])?lang(219):lang(220))),$n);if(!$_POST&&$da!=""){$I=routine($_GET["procedure"],$Zg);$I["name"]=$da;}$qb=get_vals("SHOW CHARACTER SET");sort($qb);$ah=routine_languages();echo'
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " id = " form " >
2020-04-26 00:47:07 +02:00
< p > ',lang(183),' : < input name = " name " value = " ',h( $I["name"] ),' " data - maxlength = " 64 " autocapitalize = " off " >
',($ah?lang(19).": ".html_select("language",$ah,$I["language"])."\n":""),' < input type = " submit " value = " ',lang(14),' " >
2018-12-25 21:50:48 +01:00
< div class = " scrollable " >
2014-05-08 19:46:08 +02:00
< table cellspacing = " 0 " class = " nowrap " >
2020-04-26 00:47:07 +02:00
';edit_fields($I["fields"],$qb,$Zg);if(isset($_GET["function"])){echo"<tr><td>".lang(221);edit_type("returns",$I["returns"],$qb,array(),($x=="pgsql"?array("void","trigger"):array()));}echo' </ table >
',script("editFields();"),' </ div >
< p > ';textarea("definition",$I["definition"]);echo' < p >
2014-05-08 19:46:08 +02:00
< input type = " submit " value = " ',lang(14),' " >
2020-04-26 00:47:07 +02:00
';if($da!=""){echo' < input type = " submit " name = " drop " value = " ',lang(127),' " > ',confirm(lang(175,$da));}echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2020-04-26 00:47:07 +02:00
' ;} elseif ( isset ( $_GET [ " sequence " ])){ $fa = $_GET [ " sequence " ]; $I = $_POST ; if ( $_POST &&! $n ){ $_ = substr ( ME , 0 , - 1 ); $B = trim ( $I [ " name " ]); if ( $_POST [ " drop " ]) query_redirect ( " DROP SEQUENCE " . idf_escape ( $fa ), $_ , lang ( 222 )); elseif ( $fa == " " ) query_redirect ( " CREATE SEQUENCE " . idf_escape ( $B ), $_ , lang ( 223 )); elseif ( $fa != $B ) query_redirect ( " ALTER SEQUENCE " . idf_escape ( $fa ) . " RENAME TO " . idf_escape ( $B ), $_ , lang ( 224 )); else
redirect ( $_ );} page_header ( $fa != " " ? lang ( 225 ) . " : " . h ( $fa ) : lang ( 226 ), $n ); if ( ! $I ) $I [ " name " ] = $fa ; echo '
2018-04-01 23:34:54 +02:00
< form action = " " method = " post " >
2020-04-26 00:47:07 +02:00
< p >< input name = " name " value = " ',h( $I["name"] ),' " autocapitalize = " off " >
2018-04-01 23:34:54 +02:00
< input type = " submit " value = " ',lang(14),' " >
2020-04-26 00:47:07 +02:00
';if($fa!="")echo"<input type=' submit ' name=' drop ' value=' " .lang(127). " '>".confirm(lang(175,$fa))."\n";echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2018-04-01 23:34:54 +02:00
</ form >
2020-04-26 00:47:07 +02:00
' ;} elseif ( isset ( $_GET [ " type " ])){ $ga = $_GET [ " type " ]; $I = $_POST ; if ( $_POST &&! $n ){ $_ = substr ( ME , 0 , - 1 ); if ( $_POST [ " drop " ]) query_redirect ( " DROP TYPE " . idf_escape ( $ga ), $_ , lang ( 227 )); else
query_redirect ( " CREATE TYPE " . idf_escape ( trim ( $I [ " name " ])) . " $I[as] " , $_ , lang ( 228 ));} page_header ( $ga != " " ? lang ( 229 ) . " : " . h ( $ga ) : lang ( 230 ), $n ); if ( ! $I ) $I [ " as " ] = " AS " ; echo '
2018-04-01 23:34:54 +02:00
< form action = " " method = " post " >
< p >
2020-04-26 00:47:07 +02:00
';if($ga!="")echo"<input type=' submit ' name=' drop ' value=' " .lang(127). " '>".confirm(lang(175,$ga))."\n";else{echo"<input name=' name ' value=' " .h( $I['name'] ). " ' autocapitalize=' off '>\n";textarea("as",$I["as"]);echo"<p><input type=' submit ' value=' " .lang(14). " '>\n";}echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2018-04-01 23:34:54 +02:00
</ form >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["trigger"])){$a=$_GET["trigger"];$B=$_GET["name"];$Di=trigger_options();$I=(array)trigger($B)+array("Trigger"=>$a."_bi");if($_POST){if(!$n&&in_array($_POST["Timing"],$Di["Timing"])&&in_array($_POST["Event"],$Di["Event"])&&in_array($_POST["Type"],$Di["Type"])){$uf=" ON ".table($a);$jc="DROP TRIGGER ".idf_escape($B).($x=="pgsql"?$uf:"");$Be=ME."table=".urlencode($a);if($_POST["drop"])query_redirect($jc,$Be,lang(231));else{if($B!="")queries($jc);queries_redirect($Be,($B!=""?lang(232):lang(233)),queries(create_trigger($uf,$_POST)));if($B!="")queries(create_trigger($uf,$I+array("Type"=>reset($Di["Type"]))));}}$I=$_POST;}page_header(($B!=""?lang(234).": ".h($B):lang(235)),$n,array("table"=>$a));echo'
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " id = " form " >
2018-12-25 21:50:48 +01:00
< table cellspacing = " 0 " class = " layout " >
2020-04-26 00:47:07 +02:00
< tr >< th > ',lang(236),' < td > ',html_select("Timing",$Di["Timing"],$I["Timing"],"triggerChange(/^".preg_quote($a,"/")."_[ba][iud]$/, ' " .js_escape( $a ). " ', this.form);"),' < tr >< th > ',lang(237),' < td > ',html_select("Event",$Di["Event"],$I["Event"],"this.form[' Timing '].onchange();"),(in_array("UPDATE OF",$Di["Event"])?" <input name=' Of ' value=' " .h( $I["Of"] ). " ' class=' hidden '>":""),' < tr >< th > ',lang(50),' < td > ',html_select("Type",$Di["Type"],$I["Type"]),' </ table >
< p > ',lang(183),' : < input name = " Trigger " value = " ',h( $I["Trigger"] ),' " data - maxlength = " 64 " autocapitalize = " off " >
',script("qs(' #form')['Timing'].onchange();"),'<p>';textarea("Statement",$I["Statement"]);echo'<p>
2014-05-08 19:46:08 +02:00
< input type = " submit " value = " ',lang(14),' " >
2020-04-26 00:47:07 +02:00
';if($B!=""){echo' < input type = " submit " name = " drop " value = " ',lang(127),' " > ',confirm(lang(175,$B));}echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["user"])){$ha=$_GET["user"];$ug=array(""=>array("All privileges"=>""));foreach(get_rows("SHOW PRIVILEGES")as$I){foreach(explode(",",($I["Privilege"]=="Grant option"?"":$I["Context"]))as$Db)$ug[$Db][$I["Privilege"]]=$I["Comment"];}$ug["Server Admin"]+=$ug["File access on server"];$ug["Databases"]["Create routine"]=$ug["Procedures"]["Create routine"];unset($ug["Procedures"]["Create routine"]);$ug["Columns"]=array();foreach(array("Select","Insert","Update","References")as$X)$ug["Columns"][$X]=$ug["Tables"][$X];unset($ug["Server Admin"]["Usage"]);foreach($ug["Tables"]as$y=>$X)unset($ug["Databases"][$y]);$df=array();if($_POST){foreach($_POST["objects"]as$y=>$X)$df[$X]=(array)$df[$X]+(array)$_POST["grants"][$y];}$qd=array();$sf="";if(isset($_GET["host"])&&($G=$h->query("SHOW GRANTS FOR ".q($ha)."@".q($_GET["host"])))){while($I=$G->fetch_row()){if(preg_match(' ~ GRANT ( .* ) ON ( .* ) TO ~ ',$I[0],$A)&&preg_match_all(' ~ * ([ ^ (,] * [ ^ ,(])( * \ ([ ^ )] + \ )) ? ~ ' , $A [ 1 ], $Ie , PREG_SET_ORDER )){ foreach ( $Ie
as $X ){ if ( $X [ 1 ] != " USAGE " ) $qd [ " $A[2] $X[2] " ][ $X [ 1 ]] = true ; if ( preg_match ( '~ WITH GRANT OPTION~' , $I [ 0 ])) $qd [ " $A[2] $X[2] " ][ " GRANT OPTION " ] = true ;}} if ( preg_match ( " ~ IDENTIFIED BY PASSWORD '([^']+)~ " , $I [ 0 ], $A )) $sf = $A [ 1 ];}} if ( $_POST &&! $n ){ $tf = ( isset ( $_GET [ " host " ]) ? q ( $ha ) . " @ " . q ( $_GET [ " host " ]) : " '' " ); if ( $_POST [ " drop " ]) query_redirect ( " DROP USER $tf " , ME . " privileges= " , lang ( 238 )); else { $ff = q ( $_POST [ " user " ]) . " @ " . q ( $_POST [ " host " ]); $cg = $_POST [ " pass " ]; if ( $cg != '' &&! $_POST [ " hashed " ] &&! min_version ( 8 )){ $cg = $h -> result ( " SELECT PASSWORD( " . q ( $cg ) . " ) " ); $n =! $cg ;} $Jb = false ; if ( ! $n ){ if ( $tf != $ff ){ $Jb = queries (( min_version ( 5 ) ? " CREATE USER " : " GRANT USAGE ON *.* TO " ) . " $ff IDENTIFIED BY " . ( min_version ( 8 ) ? " " : " PASSWORD " ) . q ( $cg )); $n =! $Jb ;} elseif ( $cg != $sf ) queries ( " SET PASSWORD FOR $ff = " . q ( $cg ));} if ( ! $n ){ $Wg = array (); foreach ( $df
as $nf => $pd ){ if ( isset ( $_GET [ " grant " ])) $pd = array_filter ( $pd ); $pd = array_keys ( $pd ); if ( isset ( $_GET [ " grant " ])) $Wg = array_diff ( array_keys ( array_filter ( $df [ $nf ], 'strlen' )), $pd ); elseif ( $tf == $ff ){ $qf = array_keys (( array ) $qd [ $nf ]); $Wg = array_diff ( $qf , $pd ); $pd = array_diff ( $pd , $qf ); unset ( $qd [ $nf ]);} if ( preg_match ( '~^(.+)\s*(\(.*\))?$~U' , $nf , $A ) && ( ! grant ( " REVOKE " , $Wg , $A [ 2 ], " ON $A[1] FROM $ff " ) ||! grant ( " GRANT " , $pd , $A [ 2 ], " ON $A[1] TO $ff " ))){ $n = true ; break ;}}} if ( ! $n && isset ( $_GET [ " host " ])){ if ( $tf != $ff ) queries ( " DROP USER $tf " ); elseif ( ! isset ( $_GET [ " grant " ])){ foreach ( $qd
as $nf => $Wg ){ if ( preg_match ( '~^(.+)(\(.*\))?$~U' , $nf , $A )) grant ( " REVOKE " , array_keys ( $Wg ), $A [ 2 ], " ON $A[1] FROM $ff " );}}} queries_redirect ( ME . " privileges= " ,( isset ( $_GET [ " host " ]) ? lang ( 239 ) : lang ( 240 )), ! $n ); if ( $Jb ) $h -> query ( " DROP USER $ff " );}} page_header (( isset ( $_GET [ " host " ]) ? lang ( 36 ) . " : " . h ( " $ha @ $_GET[host] " ) : lang ( 146 )), $n , array ( " privileges " => array ( '' , lang ( 72 )))); if ( $_POST ){ $I = $_POST ; $qd = $df ;} else { $I = $_GET + array ( " host " => $h -> result ( " SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1) " )); $I [ " pass " ] = $sf ; if ( $sf != " " ) $I [ " hashed " ] = true ; $qd [( DB == " " || $qd ? " " : idf_escape ( addcslashes ( DB , " %_ \\ " ))) . " .* " ] = array ();} echo ' < form action = " " method = " post " >
2018-12-25 21:50:48 +01:00
< table cellspacing = " 0 " class = " layout " >
2020-04-26 00:47:07 +02:00
< tr >< th > ',lang(35),' < td >< input name = " host " data - maxlength = " 60 " value = " ',h( $I["host"] ),' " autocapitalize = " off " >
< tr >< th > ',lang(36),' < td >< input name = " user " data - maxlength = " 80 " value = " ',h( $I["user"] ),' " autocapitalize = " off " >
< tr >< th > ',lang(37),' < td >< input name = " pass " id = " pass " value = " ',h( $I["pass"] ),' " autocomplete = " new-password " >
' ; if ( ! $I [ " hashed " ]) echo
script ( " typePassword(qs('#pass')); " ); echo ( min_version ( 8 ) ? " " : checkbox ( " hashed " , 1 , $I [ " hashed " ], lang ( 241 ), " typePassword(this.form['pass'], this.checked); " )), ' </ table >
2014-05-08 19:46:08 +02:00
2020-04-26 00:47:07 +02:00
';echo"<table cellspacing=' 0 '>\n","<thead><tr><th colspan=' 2 '>".lang(72).doc_link(array(' sql ' => " grant.html#priv_level " )); $s = 0 ; foreach ( $qd
as $nf => $pd ){ echo '<th>' . ( $nf != " *.* " ? " <input name='objects[ $s ]' value=' " . h ( $nf ) . " ' size='10' autocapitalize='off'> " : " <input type='hidden' name='objects[ $s ]' value='*.*' size='10'>*.* " ); $s ++ ;} echo " </thead> \n " ; foreach ( array ( " " => " " , " Server Admin " => lang ( 35 ), " Databases " => lang ( 38 ), " Tables " => lang ( 131 ), " Columns " => lang ( 49 ), " Procedures " => lang ( 242 ),) as $Db => $bc ){ foreach (( array ) $ug [ $Db ] as $tg => $vb ){ echo " <tr " . odd () . " ><td " . ( $bc ? " > $bc <td " : " colspan='2' " ) . ' lang="en" title="' . h ( $vb ) . '">' . h ( $tg ); $s = 0 ; foreach ( $qd
as $nf => $pd ){ $B = " 'grants[ $s ][ " . h ( strtoupper ( $tg )) . " ]' " ; $Y = $pd [ strtoupper ( $tg )]; if ( $Db == " Server Admin " && $nf != ( isset ( $qd [ " *.* " ]) ? " *.* " : " .* " )) echo " <td> " ; elseif ( isset ( $_GET [ " grant " ])) echo " <td><select name= $B ><option><option value='1' " . ( $Y ? " selected " : " " ) . " > " . lang ( 243 ) . " <option value='0' " . ( $Y == " 0 " ? " selected " : " " ) . " > " . lang ( 244 ) . " </select> " ; else { echo " <td align='center'><label class='block'> " , " <input type='checkbox' name= $B value='1' " . ( $Y ? " checked " : " " ) . ( $tg == " All privileges " ? " id='grants- $s -all'> " : " > " . ( $tg == " Grant option " ? " " : script ( " qsl('input').onclick = function () { if (this.checked) formUncheck('grants- $s -all'); }; " ))), " </label> " ;} $s ++ ;}}} echo " </table> \n " , ' < p >
2014-05-08 19:46:08 +02:00
< input type = " submit " value = " ',lang(14),' " >
2020-04-26 00:47:07 +02:00
';if(isset($_GET["host"])){echo' < input type = " submit " name = " drop " value = " ',lang(127),' " > ',confirm(lang(175,"$ha@$_GET[host]"));}echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2020-04-26 00:47:07 +02:00
';}elseif(isset($_GET["processlist"])){if(support("kill")&&$_POST&&!$n){$ne=0;foreach((array)$_POST["kill"]as$X){if(kill_process($X))$ne++;}queries_redirect(ME."processlist=",lang(245,$ne),$ne||!$_POST["kill"]);}page_header(lang(116),$n);echo'
2014-05-08 19:46:08 +02:00
< form action = " " method = " post " >
2018-12-25 21:50:48 +01:00
< div class = " scrollable " >
2018-04-01 23:34:54 +02:00
< table cellspacing = " 0 " class = " nowrap checkable " >
2020-04-26 00:47:07 +02:00
',script("mixin(qsl(' table '), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");$s=-1;foreach(process_list()as$s=>$I){if(!$s){echo"<thead><tr lang=' en ' > " .(support( " kill " )? " < th > " : " " );foreach( $I
as $y => $X ) echo " <th> $y " . doc_link ( array ( 'sql' => " show-processlist.html#processlist_ " . strtolower ( $y ), 'pgsql' => " monitoring-stats.html#PG-STAT-ACTIVITY-VIEW " , 'oracle' => " REFRN30223 " ,)); echo " </thead> \n " ;} echo " <tr " . odd () . " > " . ( support ( " kill " ) ? " <td> " . checkbox ( " kill[] " , $I [ $x == " sql " ? " Id " : " pid " ], 0 ) : " " ); foreach ( $I
as $y => $X ) echo " <td> " . (( $x == " sql " && $y == " Info " && preg_match ( " ~Query|Killed~ " , $I [ " Command " ]) && $X != " " ) || ( $x == " pgsql " && $y == " current_query " && $X != " <IDLE> " ) || ( $x == " oracle " && $y == " sql_text " && $X != " " ) ? " <code class='jush- $x '> " . shorten_utf8 ( $X , 100 , " </code> " ) . ' <a href="' . h ( ME . ( $I [ " db " ] != " " ? " db= " . urlencode ( $I [ " db " ]) . " & " : " " ) . " sql= " . urlencode ( $X )) . '">' . lang ( 246 ) . '</a>' : h ( $X )); echo " \n " ;} echo ' </ table >
2018-12-25 21:50:48 +01:00
</ div >
2014-05-08 19:46:08 +02:00
< p >
2020-04-26 00:47:07 +02:00
';if(support("kill")){echo($s+1)."/".lang(247,max_connections()),"<p><input type=' submit ' value=' " .lang(248). " '>\n";}echo' < input type = " hidden " name = " token " value = " ', $ti ,' " >
2014-05-08 19:46:08 +02:00
</ form >
2020-04-26 00:47:07 +02:00
' , script ( " tableCheck(); " );} elseif ( isset ( $_GET [ " select " ])){ $a = $_GET [ " select " ]; $R = table_status1 ( $a ); $w = indexes ( $a ); $p = fields ( $a ); $id = column_foreign_keys ( $a ); $pf = $R [ " Oid " ]; parse_str ( $_COOKIE [ " adminer_import " ], $za ); $Xg = array (); $f = array (); $ii = null ; foreach ( $p
as $y => $o ){ $B = $b -> fieldName ( $o ); if ( isset ( $o [ " privileges " ][ " select " ]) && $B != " " ){ $f [ $y ] = html_entity_decode ( strip_tags ( $B ), ENT_QUOTES ); if ( is_shortable ( $o )) $ii = $b -> selectLengthProcess ();} $Xg += $o [ " privileges " ];} list ( $K , $rd ) = $b -> selectColumnsProcess ( $f , $w ); $ce = count ( $rd ) < count ( $K ); $Z = $b -> selectSearchProcess ( $p , $w ); $Ef = $b -> selectOrderProcess ( $p , $w ); $z = $b -> selectLimitProcess (); if ( $_GET [ " val " ] && is_ajax ()){ header ( " Content-Type: text/plain; charset=utf-8 " ); foreach ( $_GET [ " val " ] as $Ki => $I ){ $Ha = convert_field ( $p [ key ( $I )]); $K = array ( $Ha ? $Ha : idf_escape ( key ( $I ))); $Z [] = where_check ( $Ki , $p ); $H = $m -> select ( $a , $K , $Z , $K ); if ( $H ) echo
reset ( $H -> fetch_row ());} exit ;} $pg = $Mi = null ; foreach ( $w
as $v ){ if ( $v [ " type " ] == " PRIMARY " ){ $pg = array_flip ( $v [ " columns " ]); $Mi = ( $K ? $pg : array ()); foreach ( $Mi
as $y => $X ){ if ( in_array ( idf_escape ( $y ), $K )) unset ( $Mi [ $y ]);} break ;}} if ( $pf &&! $pg ){ $pg = $Mi = array ( $pf => 0 ); $w [] = array ( " type " => " PRIMARY " , " columns " => array ( $pf ));} if ( $_POST &&! $n ){ $oj = $Z ; if ( ! $_POST [ " all " ] && is_array ( $_POST [ " check " ])){ $hb = array (); foreach ( $_POST [ " check " ] as $eb ) $hb [] = where_check ( $eb , $p ); $oj [] = " (( " . implode ( " ) OR ( " , $hb ) . " )) " ;} $oj = ( $oj ? " \n WHERE " . implode ( " AND " , $oj ) : " " ); if ( $_POST [ " export " ]){ cookie ( " adminer_import " , " output= " . urlencode ( $_POST [ " output " ]) . " &format= " . urlencode ( $_POST [ " format " ])); dump_headers ( $a ); $b -> dumpTable ( $a , " " ); $nd = ( $K ? implode ( " , " , $K ) : " * " ) . convert_fields ( $f , $p , $K ) . " \n FROM " . table ( $a ); $td = ( $rd && $ce ? " \n GROUP BY " . implode ( " , " , $rd ) : " " ) . ( $Ef ? " \n ORDER BY " . implode ( " , " , $Ef ) : " " ); if ( ! is_array ( $_POST [ " check " ]) || $pg ) $F = " SELECT $nd $oj $td " ; else { $Ii = array (); foreach ( $_POST [ " check " ] as $X ) $Ii [] = " (SELECT " . limit ( $nd , " \n WHERE " . ( $Z ? implode ( " AND " , $Z ) . " AND " : " " ) . where_check ( $X , $p ) . $td , 1 ) . " ) " ; $F = implode ( " UNION ALL " , $Ii );} $b -> dumpData ( $a , " table " , $F ); exit ;} if ( ! $b -> selectEmailProcess ( $Z , $id )){ if ( $_POST [ " save " ] || $_POST [ " delete " ]){ $G = true ; $_a = 0 ; $N = array (); if ( ! $_POST [ " delete " ]){ foreach ( $f
as $B => $X ){ $X = process_input ( $p [ $B ]); if ( $X !== null && ( $_POST [ " clone " ] || $X !== false )) $N [ idf_escape ( $B )] = ( $X !== false ? $X : idf_escape ( $B ));}} if ( $_POST [ " delete " ] || $N ){ if ( $_POST [ " clone " ]) $F = " INTO " . table ( $a ) . " ( " . implode ( " , " , array_keys ( $N )) . " ) \n SELECT " . implode ( " , " , $N ) . " \n FROM " . table ( $a ); if ( $_POST [ " all " ] || ( $pg && is_array ( $_POST [ " check " ])) || $ce ){ $G = ( $_POST [ " delete " ] ? $m -> delete ( $a , $oj ) : ( $_POST [ " clone " ] ? queries ( " INSERT $F $oj " ) : $m -> update ( $a , $N , $oj ))); $_a = $h -> affected_rows ;} else { foreach (( array ) $_POST [ " check " ] as $X ){ $kj = " \n WHERE " . ( $Z ? implode ( " AND " , $Z ) . " AND " : " " ) . where_check ( $X , $p ); $G = ( $_POST [ " delete " ] ? $m -> delete ( $a , $kj , 1 ) : ( $_POST [ " clone " ] ? queries ( " INSERT " . limit1 ( $a , $F , $kj )) : $m -> update ( $a , $N , $kj , 1 ))); if ( ! $G ) break ; $_a += $h -> affected_rows ;}}} $Qe = lang ( 249 , $_a ); if ( $_POST [ " clone " ] && $G && $_a == 1 ){ $te = last_id (); if ( $te ) $Qe = lang ( 168 , " $te " );} queries_redirect ( remove_from_uri ( $_POST [ " all " ] && $_POST [ " delete " ] ? " page " : " " ), $Qe , $G ); if ( ! $_POST [ " delete " ]){ edit_form ( $a , $p ,( array ) $_POST [ " fields " ], ! $_POST [ " clone " ]); page_footer (); exit ;}} elseif ( ! $_POST [ " import " ]){ if ( ! $_POST [ " val " ]) $n = lang ( 250 ); else { $G = true ; $_a = 0 ; foreach ( $_POST [ " val " ] as $Ki => $I ){ $N = array (); foreach ( $I
as $y => $X ){ $y = bracket_escape ( $y , 1 ); $N [ idf_escape ( $y )] = ( preg_match ( '~char|text~' , $p [ $y ][ " type " ]) || $X != " " ? $b -> processInput ( $p [ $y ], $X ) : " NULL " );} $G = $m -> update ( $a , $N , " WHERE " . ( $Z ? implode ( " AND " , $Z ) . " AND " : " " ) . where_check ( $Ki , $p ), ! $ce &&! $pg , " " ); if ( ! $G ) break ; $_a += $h -> affected_rows ;} queries_redirect ( remove_from_uri (), lang ( 249 , $_a ), $G );}} elseif ( ! is_string ( $Xc = get_file ( " csv_file " , true ))) $n = upload_error ( $Xc ); elseif ( ! preg_match ( '~~u' , $Xc )) $n = lang ( 251 ); else { cookie ( " adminer_import " , " output= " . urlencode ( $za [ " output " ]) . " &format= " . urlencode ( $_POST [ " separator " ])); $G = true ; $sb = array_keys ( $p ); preg_match_all ( '~(?>"[^"]*"|[^"\r\n]+)+~' , $Xc , $Ie ); $_a = count ( $Ie [ 0 ]); $m -> begin (); $L = ( $_POST [ " separator " ] == " csv " ? " , " : ( $_POST [ " separator " ] == " tsv " ? " \t " : " ; " )); $J = array (); foreach ( $Ie [ 0 ] as $y => $X ){ preg_match_all ( " ~((?> \" [^ \" ]* \" )+|[^ $L ]*) $L ~ " , $X . $L , $Je ); if ( ! $y &&! array_diff ( $Je [ 1 ], $sb )){ $sb = $Je [ 1 ]; $_a -- ;} else { $N = array (); foreach ( $Je [ 1 ] as $s => $ob ) $N [ idf_escape ( $sb [ $s ])] = ( $ob == " " && $p [ $sb [ $s ]][ " null " ] ? " NULL " : q ( str_replace ( '""' , '"' , preg_replace ( '~^"|"$~' , '' , $ob )))); $J [] = $N ;}} $G = ( ! $J || $m -> insertUpdate ( $a , $J , $pg )); if ( $G ) $G = $m -> commit (); queries_redirect ( remove_from_uri ( " page " ), lang ( 252 , $_a ), $G ); $m -> rollback ();}}} $Uh = $b -> tableName ( $R ); if ( is_ajax ()){ page_headers (); ob_start ();} else
page_header ( lang ( 54 ) . " : $Uh " , $n ); $N = null ; if ( isset ( $Xg [ " insert " ]) ||! support ( " table " )){ $N = " " ; foreach (( array ) $_GET [ " where " ] as $X ){ if ( $id [ $X [ " col " ]] && count ( $id [ $X [ " col " ]]) == 1 && ( $X [ " op " ] == " = " || ( ! $X [ " op " ] &&! preg_match ( '~[_%]~' , $X [ " val " ])))) $N .= " &set " . urlencode ( " [ " . bracket_escape ( $X [ " col " ]) . " ] " ) . " = " . urlencode ( $X [ " val " ]);}} $b -> selectLinks ( $R , $N ); if ( ! $f && support ( " table " )) echo " <p class='error'> " . lang ( 253 ) . ( $p ? " . " : " : " . error ()) . " \n " ; else { echo " <form action='' id='form'> \n " , " <div style='display: none;'> " ; hidden_fields_get (); echo ( DB != " " ? '<input type="hidden" name="db" value="' . h ( DB ) . '">' . ( isset ( $_GET [ " ns " ]) ? '<input type="hidden" name="ns" value="' . h ( $_GET [ " ns " ]) . '">' : " " ) : " " ); echo '<input type="hidden" name="select" value="' . h ( $a ) . '">' , " </div> \n " ; $b -> selectColumnsPrint ( $K , $f ); $b -> selectSearchPrint ( $Z , $f , $w ); $b -> selectOrderPrint ( $Ef , $f , $w ); $b -> selectLimitPrint ( $z ); $b -> selectLengthPrint ( $ii ); $b -> selectActionPrint ( $w ); echo " </form> \n " ; $D = $_GET [ " page " ]; if ( $D == " last " ){ $ld = $h -> result ( count_rows ( $a , $Z , $ce , $rd )); $D = floor ( max ( 0 , $ld - 1 ) / $z );} $jh = $K ; $sd = $rd ; if ( ! $jh ){ $jh [] = " * " ; $Eb = convert_fields ( $f , $p , $K ); if ( $Eb ) $jh [] = substr ( $Eb , 2 );} foreach ( $K
as $y => $X ){ $o = $p [ idf_unescape ( $X )]; if ( $o && ( $Ha = convert_field ( $o ))) $jh [ $y ] = " $Ha AS $X " ;} if ( ! $ce && $Mi ){ foreach ( $Mi
as $y => $X ){ $jh [] = idf_escape ( $y ); if ( $sd ) $sd [] = idf_escape ( $y );}} $G = $m -> select ( $a , $jh , $Z , $sd , $Ef , $z , $D , true ); if ( ! $G ) echo " <p class='error'> " . error () . " \n " ; else { if ( $x == " mssql " && $D ) $G -> seek ( $z * $D ); $wc = array (); echo " <form action='' method='post' enctype='multipart/form-data'> \n " ; $J = array (); while ( $I = $G -> fetch_assoc ()){ if ( $D && $x == " oracle " ) unset ( $I [ " RNUM " ]); $J [] = $I ;} if ( $_GET [ " page " ] != " last " && $z != " " && $rd && $ce && $x == " sql " ) $ld = $h -> result ( " SELECT FOUND_ROWS() " ); if ( ! $J ) echo " <p class='message'> " . lang ( 12 ) . " \n " ; else { $Ra = $b -> backwardKeys ( $a , $Uh ); echo " <div class='scrollable'> " , " <table id='table' cellspacing='0' class='nowrap checkable'> " , script ( " mixin(qs('#table'), { onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown}); " ), " <thead><tr> " . ( ! $rd && $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 " ) . " '> " . lang ( 254 ) . " </a> " ); $cf = array (); $od = array (); reset ( $K ); $Dg = 1 ; foreach ( $J [ 0 ] as $y => $X ){ if ( ! isset ( $Mi [ $y ])){ $X = $_GET [ " columns " ][ key ( $K )]; $o = $p [ $K ? ( $X ? $X [ " col " ] : current ( $K )) : $y ]; $B = ( $o ? $b -> fieldName ( $o , $Dg ) : ( $X [ " fun " ] ? " * " : $y )); if ( $B != " " ){ $Dg ++ ; $cf [ $y ] = $B ; $e = idf_escape ( $y ); $Fd = remove_from_uri ( '(order|desc)[^=]*|page' ) . '&order%5B0%5D=' . urlencode ( $y ); $bc = " &desc%5B0%5D=1 " ; echo " <th> " . script ( " mixin(qsl('th'), { onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')}); " , " " ), '<a href="' . h ( $Fd . ( $Ef [ 0 ] == $e || $Ef [ 0 ] == $y || ( ! $Ef && $ce && $rd [ 0 ] == $e ) ? $bc : '' )) . '">' ; echo
apply_sql_function ( $X [ " fun " ], $B ) . " </a> " ; echo " <span class='column hidden'> " , " <a href=' " . h ( $Fd . $bc ) . " ' title=' " . lang ( 60 ) . " ' class='text'> ↓</a> " ; if ( ! $X [ " fun " ]){ echo '<a href="#fieldset-search" title="' . lang ( 57 ) . '" class="text jsonly"> =</a>' , script ( " qsl('a').onclick = partial(selectSearch, ' " . js_escape ( $y ) . " '); " );} echo " </span> " ;} $od [ $y ] = $X [ " fun " ]; next ( $K );}} $ze = array (); if ( $_GET [ " modify " ]){ foreach ( $J
as $I ){ foreach ( $I
as $y => $X ) $ze [ $y ] = max ( $ze [ $y ], min ( 40 , strlen ( utf8_decode ( $X ))));}} echo ( $Ra ? " <th> " . lang ( 255 ) : " " ) . " </thead> \n " ; if ( is_ajax ()){ if ( $z % 2 == 1 && $D % 2 == 1 ) odd (); ob_end_clean ();} foreach ( $b -> rowDescriptions ( $J , $id ) as $bf => $I ){ $Ji = unique_array ( $J [ $bf ], $w ); if ( ! $Ji ){ $Ji = array (); foreach ( $J [ $bf ] as $y => $X ){ if ( ! preg_match ( '~^(COUNT\((\*|(DISTINCT )?`(?:[^`]|``)+`)\)|(AVG|GROUP_CONCAT|MAX|MIN|SUM)\(`(?:[^`]|``)+`\))$~' , $y )) $Ji [ $y ] = $X ;}} $Ki = " " ; foreach ( $Ji
as $y => $X ){ if (( $x == " sql " || $x == " pgsql " ) && preg_match ( '~char|text|enum|set~' , $p [ $y ][ " type " ]) && strlen ( $X ) > 64 ){ $y = ( strpos ( $y , '(' ) ? $y : idf_escape ( $y )); $y = " MD5( " . ( $x != 'sql' || preg_match ( " ~^utf8~ " , $p [ $y ][ " collation " ]) ? $y : " CONVERT( $y USING " . charset ( $h ) . " ) " ) . " ) " ; $X = md5 ( $X );} $Ki .= " & " . ( $X !== null ? urlencode ( " where[ " . bracket_escape ( $y ) . " ] " ) . " = " . urlencode ( $X ) : " null%5B%5D= " . urlencode ( $y ));} echo " <tr " . odd () . " > " . ( ! $rd && $K ? " " : " <td> " . checkbox ( " check[] " , substr ( $Ki , 1 ), in_array ( substr ( $Ki , 1 ),( array ) $_POST [ " check " ])) . ( $ce || information_schema ( DB ) ? " " : " <a href=' " . h ( ME . " edit= " . urlencode ( $a ) . $Ki ) . " ' class='edit'> " . lang ( 256 ) . " </a> " )); foreach ( $I
as $y => $X ){ if ( isset ( $cf [ $y ])){ $o = $p [ $y ]; $X = $m -> value ( $X , $o ); if ( $X != " " && ( ! isset ( $wc [ $y ]) || $wc [ $y ] != " " )) $wc [ $y ] = ( is_mail ( $X ) ? $cf [ $y ] : " " ); $_ = " " ; if ( preg_match ( '~blob|bytea|raw|file~' , $o [ " type " ]) && $X != " " ) $_ = ME . 'download=' . urlencode ( $a ) . '&field=' . urlencode ( $y ) . $Ki ; if ( ! $_ && $X !== null ){ foreach (( array ) $id [ $y ] as $q ){ if ( count ( $id [ $y ]) == 1 || end ( $q [ " source " ]) == $y ){ $_ = " " ; foreach ( $q [ " source " ] as $s => $Ah ) $_ .= where_link ( $s , $q [ " target " ][ $s ], $J [ $bf ][ $Ah ]); $_ = ( $q [ " db " ] != " " ? preg_replace ( '~([?&]db=)[^&]+~' , '\1' . urlencode ( $q [ " db " ]), ME ) : ME ) . 'select=' . urlencode ( $q [ " table " ]) . $_ ; if ( $q [ " ns " ]) $_ = preg_replace ( '~([?&]ns=)[^&]+~' , '\1' . urlencode ( $q [ " ns " ]), $_ ); if ( count ( $q [ " source " ]) == 1 ) break ;}}} if ( $y == " COUNT(*) " ){ $_ = ME . " select= " . urlencode ( $a ); $s = 0 ; foreach (( array ) $_GET [ " where " ] as $W ){ if ( ! array_key_exists ( $W [ " col " ], $Ji )) $_ .= where_link ( $s ++ , $W [ " col " ], $W [ " val " ], $W [ " op " ]);} foreach ( $Ji
as $he => $W ) $_ .= where_link ( $s ++ , $he , $W );} $X = select_value ( $X , $_ , $o , $ii ); $t = h ( " val[ $Ki ][ " . bracket_escape ( $y ) . " ] " ); $Y = $_POST [ " val " ][ $Ki ][ bracket_escape ( $y )]; $rc =! is_array ( $I [ $y ]) && is_utf8 ( $X ) && $J [ $bf ][ $y ] == $I [ $y ] &&! $od [ $y ]; $hi = preg_match ( '~text|lob~' , $o [ " type " ]); echo " <td id=' $t ' " ; if (( $_GET [ " modify " ] && $rc ) || $Y !== null ){ $wd = h ( $Y !== null ? $Y : $I [ $y ]); echo " > " . ( $hi ? " <textarea name=' $t ' cols='30' rows=' " . ( substr_count ( $I [ $y ], " \n " ) + 1 ) . " '> $wd </textarea> " : " <input name=' $t ' value=' $wd ' size=' $ze[$y] '> " );} else { $De = strpos ( $X , " <i>…</i> " ); echo " data-text=' " . ( $De ? 2 : ( $hi ? 1 : 0 )) . " ' " . ( $rc ? " " : " data-warning=' " . h ( lang ( 257 )) . " ' " ) . " > $X </td> " ;}}} if ( $Ra ) echo " <td> " ; $b -> backwardKeysPrint ( $Ra , $J [ $bf ]); echo " </tr> \n " ;} if ( is_ajax ()) exit ; echo " </table> \n " , " </div> \n " ;} if ( ! is_ajax ()){ if ( $J || $D ){ $Fc = true ; if ( $_GET [ " page " ] != " last " ){ if ( $z == " " || ( count ( $J ) < $z && ( $J ||! $D ))) $ld = ( $D ? $D * $z : 0 ) + count ( $J ); elseif ( $x != " sql " ||! $ce ){ $ld = ( $ce ? false : found_rows ( $R , $Z )); if ( $ld < max ( 1e4 , 2 * ( $D + 1 ) * $z )) $ld = reset ( slow_query ( count_rows ( $a , $Z , $ce , $rd ))); else $Fc = false ;}} $Rf = ( $z != " " && ( $ld === false || $ld > $z || $D )); if ( $Rf ){ echo (( $ld === false ? count ( $J ) + 1 : $ld - $D * $z ) > $z ? '<p><a href="' . h ( remove_from_uri ( " page " ) . " &page= " . ( $D + 1 )) . '" class="loadmore">' . lang ( 258 ) . '</a>' . script ( " qsl('a').onclick = partial(selectLoadMore, " . ( + $z ) . " , ' " . lang ( 259 ) . " …'); " , " " ) : '' ), " \n " ;}} echo " <div class='footer'><div> \n " ; if ( $J || $D ){ if ( $Rf ){ $Le = ( $ld === false ? $D + ( count ( $J ) >= $z ? 2 : 1 ) : floor (( $ld - 1 ) / $z )); echo " <fieldset> " ; if ( $x != " simpledb " ){ echo " <legend><a href=' " . h ( remove_from_uri ( " page " )) . " '> " . lang ( 260 ) . " </a></legend> " , script ( " qsl('a').onclick = function () { pageClick(this.href, +prompt(' " . lang ( 260 ) . " ', ' " . ( $D + 1 ) . " ')); return false; }; " ), pagination ( 0 , $D ) . ( $D > 5 ? " … " : " " ); for ( $s = max ( 1 , $D - 4 ); $s < min ( $Le , $D + 5 ); $s ++ ) echo
pagination ( $s , $D ); if ( $Le > 0 ){ echo ( $D + 5 < $Le ? " … " : " " ),( $Fc && $ld !== false ? pagination ( $Le , $D ) : " <a href=' " . h ( remove_from_uri ( " page " ) . " &page=last " ) . " ' title='~ $Le '> " . lang ( 261 ) . " </a> " );}} else { echo " <legend> " . lang ( 260 ) . " </legend> " , pagination ( 0 , $D ) . ( $D > 1 ? " … " : " " ),( $D ? pagination ( $D , $D ) : " " ),( $Le > $D ? pagination ( $D + 1 , $D ) . ( $Le > $D + 1 ? " … " : " " ) : " " );} echo " </fieldset> \n " ;} echo " <fieldset> " , " <legend> " . lang ( 262 ) . " </legend> " ; $gc = ( $Fc ? " " : " ~ " ) . $ld ; echo
checkbox ( " all " , 1 , 0 ,( $ld !== false ? ( $Fc ? " " : " ~ " ) . lang ( 150 , $ld ) : " " ), " var checked = formChecked(this, /check/); selectCount('selected', this.checked ? ' $gc ' : checked); selectCount('selected2', this.checked || !checked ? ' $gc ' : checked); " ) . " \n " , " </fieldset> \n " ; if ( $b -> selectCommandPrint ()){ echo '<fieldset' ,( $_GET [ " modify " ] ? '' : ' class="jsonly"' ), '><legend>' , lang ( 254 ), ' </ legend >< div >
2018-12-25 21:50:48 +01:00
< input type = " submit " value = " ',lang(14),' " ',($_GET["modify"]?' ':' title = " '.lang(250).' " '),' >
2014-05-08 19:46:08 +02:00
</ div ></ fieldset >
2018-12-25 21:50:48 +01:00
< fieldset >< legend > ',lang(126),' < span id = " selected " ></ span ></ legend >< div >
2014-05-08 19:46:08 +02:00
< input type = " submit " name = " edit " value = " ',lang(10),' " >
2018-12-25 21:50:48 +01:00
< input type = " submit " name = " clone " value = " ',lang(246),' " >
2018-04-01 23:34:54 +02:00
< input type = " submit " name = " delete " value = " ',lang(18),' " > ',confirm(),' </ div ></ fieldset >
2020-04-26 00:47:07 +02:00
';}$jd=$b->dumpFormat();foreach((array)$_GET["columns"]as$e){if($e["fun"]){unset($jd[' sql ']);break;}}if($jd){print_fieldset("export",lang(74)." <span id=' selected2 '></span>");$Pf=$b->dumpOutput();echo($Pf?html_select("output",$Pf,$za["output"])." ":""),html_select("format",$jd,$za["format"])," <input type=' submit ' name=' export ' value=' " .lang(74). " '>\n","</div></fieldset>\n";}$b->selectEmailPrint(array_filter($wc,' strlen '),$f);}echo"</div></div>\n";if($b->selectImportPrint()){echo"<div>","<a href=' #import'>".lang(73)."</a>",script("qsl('a').onclick = partial(toggle, 'import');",""),"<span id='import' class='hidden'>: ","<input type='file' name='csv_file'> ",html_select("separator",array("csv"=>"CSV,","csv;"=>"CSV;","tsv"=>"TSV"),$za["format"],1);echo" <input type='submit' name='import' value='".lang(73)."'>","</span>","</div>";}echo"<input type='hidden' name='token' value='$ti'>\n","</form>\n",(!$rd&&$K?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["variables"])){$O=isset($_GET["status"]);page_header($O?lang(118):lang(117));$bj=($O?show_status():show_variables());if(!$bj)echo"<p class='message'>".lang(12)."\n";else{echo"<table cellspacing='0'>\n";foreach($bj
as $y => $X ){ echo " <tr> " , " <th><code class='jush- " . $x . ( $O ? " status " : " set " ) . " '> " . h ( $y ) . " </code> " , " <td> " . h ( $X );} echo " </table> \n " ;}} elseif ( isset ( $_GET [ " script " ])){ header ( " Content-Type: text/javascript; charset=utf-8 " ); if ( $_GET [ " script " ] == " db " ){ $Rh = array ( " Data_length " => 0 , " Index_length " => 0 , " Data_free " => 0 ); foreach ( table_status () as $B => $R ){ json_row ( " Comment- $B " , h ( $R [ " Comment " ])); if ( ! is_view ( $R )){ foreach ( array ( " Engine " , " Collation " ) as $y ) json_row ( " $y - $B " , h ( $R [ $y ])); foreach ( $Rh + array ( " Auto_increment " => 0 , " Rows " => 0 ) as $y => $X ){ if ( $R [ $y ] != " " ){ $X = format_number ( $R [ $y ]); json_row ( " $y - $B " ,( $y == " Rows " && $X && $R [ " Engine " ] == ( $Dh == " pgsql " ? " table " : " InnoDB " ) ? " ~ $X " : $X )); if ( isset ( $Rh [ $y ])) $Rh [ $y ] += ( $R [ " Engine " ] != " InnoDB " || $y != " Data_free " ? $R [ $y ] : 0 );} elseif ( array_key_exists ( $y , $R )) json_row ( " $y - $B " );}}} foreach ( $Rh
as $y => $X ) json_row ( " sum- $y " , format_number ( $X )); json_row ( " " );} elseif ( $_GET [ " script " ] == " kill " ) $h -> query ( " KILL " . number ( $_POST [ " kill " ])); else { foreach ( count_tables ( $b -> databases ()) as $l => $X ){ json_row ( " tables- $l " , $X ); json_row ( " size- $l " , db_size ( $l ));} json_row ( " " );} exit ;} else { $ai = array_merge (( array ) $_POST [ " tables " ],( array ) $_POST [ " views " ]); if ( $ai &&! $n &&! $_POST [ " search " ]){ $G = true ; $Qe = " " ; if ( $x == " sql " && $_POST [ " tables " ] && count ( $_POST [ " tables " ]) > 1 && ( $_POST [ " drop " ] || $_POST [ " truncate " ] || $_POST [ " copy " ])) queries ( " SET foreign_key_checks = 0 " ); if ( $_POST [ " truncate " ]){ if ( $_POST [ " tables " ]) $G = truncate_tables ( $_POST [ " tables " ]); $Qe = lang ( 263 );} elseif ( $_POST [ " move " ]){ $G = move_tables (( array ) $_POST [ " tables " ],( array ) $_POST [ " views " ], $_POST [ " target " ]); $Qe = lang ( 264 );} elseif ( $_POST [ " copy " ]){ $G = copy_tables (( array ) $_POST [ " tables " ],( array ) $_POST [ " views " ], $_POST [ " target " ]); $Qe = lang ( 265 );} elseif ( $_POST [ " drop " ]){ if ( $_POST [ " views " ]) $G = drop_views ( $_POST [ " views " ]); if ( $G && $_POST [ " tables " ]) $G = drop_tables ( $_POST [ " tables " ]); $Qe = lang ( 266 );} elseif ( $x != " sql " ){ $G = ( $x == " sqlite " ? queries ( " VACUUM " ) : apply_queries ( " VACUUM " . ( $_POST [ " optimize " ] ? " " : " ANALYZE " ), $_POST [ " tables " ])); $Qe = lang ( 267 );} elseif ( ! $_POST [ " tables " ]) $Qe = lang ( 9 ); elseif ( $G = queries (( $_POST [ " optimize " ] ? " OPTIMIZE " : ( $_POST [ " check " ] ? " CHECK " : ( $_POST [ " repair " ] ? " REPAIR " : " ANALYZE " ))) . " TABLE " . implode ( " , " , array_map ( 'idf_escape' , $_POST [ " tables " ])))){ while ( $I = $G -> fetch_assoc ()) $Qe .= " <b> " . h ( $I [ " Table " ]) . " </b>: " . h ( $I [ " Msg_text " ]) . " <br> " ;} queries_redirect ( substr ( ME , 0 , - 1 ), $Qe , $G );} page_header (( $_GET [ " ns " ] == " " ? lang ( 38 ) . " : " . h ( DB ) : lang ( 78 ) . " : " . h ( $_GET [ " ns " ])), $n , true ); if ( $b -> homepage ()){ if ( $_GET [ " ns " ] !== " " ){ echo " <h3 id='tables-views'> " . lang ( 268 ) . " </h3> \n " ; $Zh = tables_list (); if ( ! $Zh ) echo " <p class='message'> " . lang ( 9 ) . " \n " ; else { echo " <form action='' method='post'> \n " ; if ( support ( " table " )){ echo " <fieldset><legend> " . lang ( 269 ) . " <span id='selected2'></span></legend><div> " , " <input type='search' name='query' value=' " . h ( $_POST [ " query " ]) . " '> " , script ( " qsl('input').onkeydown = partialArg(bodyKeydown, 'search'); " , " " ), " <input type='submit' name='search' value=' " . lang ( 57 ) . " '> \n " , " </div></fieldset> \n " ; if ( $_POST [ " search " ] && $_POST [ " query " ] != " " ){ $_GET [ " where " ][ 0 ][ " op " ] = " LIKE %% " ; search_tables ();}} echo " <div class='scrollable'> \n " , " <table cellspacing='0' class='nowrap checkable'> \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|views) \ [/); " , " " ), '<th>' . lang ( 131 ), '<td>' . lang ( 270 ) . doc_link ( array ( 'sql' => 'storage-engines.html' )), '<td>' . lang ( 122 ) . doc_link ( array ( 'sql' => 'charset-charsets.html' , 'mariadb' => 'supported-character-sets-and-collations/' )), '<td>' . lang ( 271 ) . doc_link ( array ( 'sql' => 'show-table-status.html' , 'pgsql' => 'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT' , 'oracle' => 'REFRN20286' )), '<td>' . lang ( 272 ) . doc_link ( array ( 'sql' => 'show-table-status.html' , 'pgsql' => 'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT' )), '<td>' . lang ( 273 ) . doc_link ( array ( 'sql' => 'show-table-status.html' )), '<td>' . lang ( 52 ) . doc_link ( array ( 'sql' => 'example-auto-increment.html' , 'mariadb' => 'auto_increment/' )), '<td>' . lang ( 274 ) . doc_link ( array ( 'sql' => 'show-table-status.html' , 'pgsql' => 'catalog-pg-class.html#CATALOG-PG-CLASS' , 'oracle' => 'REFRN20286' )),( support ( " comment " ) ? '<td>' . lang ( 51 ) . doc_link ( array ( 'sql' => 'show-table-status.html' , 'pgsql' => 'functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE' )) : '' ), " </thead> \n " ; $S = 0 ; foreach ( $Zh
as $B => $T ){ $ej = ( $T !== null &&! preg_match ( '~table~i' , $T )); $t = h ( " Table- " . $B ); echo '<tr' . odd () . '><td>' . checkbox (( $ej ? " views[] " : " tables[] " ), $B , in_array ( $B , $ai , true ), " " , " " , " " , $t ), '<th>' . ( support ( " table " ) || support ( " indexes " ) ? " <a href=' " . h ( ME ) . " table= " . urlencode ( $B ) . " ' title=' " . lang ( 43 ) . " ' id=' $t '> " . h ( $B ) . '</a>' : h ( $B )); if ( $ej ){ echo '<td colspan="6"><a href="' . h ( ME ) . " view= " . urlencode ( $B ) . '" title="' . lang ( 44 ) . '">' . ( preg_match ( '~materialized~i' , $T ) ? lang ( 129 ) : lang ( 130 )) . '</a>' , '<td align="right"><a href="' . h ( ME ) . " select= " . urlencode ( $B ) . '" title="' . lang ( 42 ) . '">?</a>' ;} else { foreach ( array ( " Engine " => array (), " Collation " => array (), " Data_length " => array ( " create " , lang ( 45 )), " Index_length " => array ( " indexes " , lang ( 133 )), " Data_free " => array ( " edit " , lang ( 46 )), " Auto_increment " => array ( " auto_increment=1&create " , lang ( 45 )), " Rows " => array ( " select " , lang ( 42 )),) as $y => $_ ){ $t = " id=' $y - " . h ( $B ) . " ' " ; echo ( $_ ? " <td align='right'> " . ( support ( " table " ) || $y == " Rows " || ( support ( " indexes " ) && $y != " Data_length " ) ? " <a href=' " . h ( ME . " $_[0] = " ) . urlencode ( $B ) . " ' $t title=' $_[1] '>?</a> " : " <span $t >?</span> " ) : " <td id=' $y - " . h ( $B ) . " '> " );} $S ++ ;} echo ( support ( " comment " ) ? " <td id='Comment- " . h ( $B ) . " '> " : " " );} echo " <tr><td><th> " . lang ( 247 , count ( $Zh )), " <td> " . h ( $x == " sql " ? $h -> result ( " SELECT @@storage_engine " ) : " " ), " <td> " . h ( db_collation ( DB , collations ())); foreach ( array ( " Data_length " , " Index_length " , " Data_free " ) as $y ) echo " <td align='right' id='sum- $y '> " ; echo " </table> \n " , " </div> \n " ; if ( ! information_schema ( DB )){ echo " <div class='footer'><div> \n " ; $Yi = " <input type='submit' value=' " . lang ( 275 ) . " '> " . on_help ( " 'VACUUM' " ); $Af = " <input type='submit' name='optimize' value=' " . lang ( 276 ) . " '> " . on_help ( $x == " sql " ? " 'OPTIMIZE TABLE' " : " 'VACUUM OPTIMIZE' " ); echo " <fieldset><legend> " . lang ( 126 ) . " <span id='selected'></span></legend><div> " . ( $x == " sqlite " ? $Yi : ( $x == " pgsql " ? $Yi . $Af : ( $x == " sql " ? " <input type='submit' value=' " . lang ( 277 ) . " '> " . on_help ( " 'ANALYZE TABLE' " ) . $Af . " <input type='submit' name='check' value=' " . lang ( 278 ) . " '> " . on_help ( " 'CHECK TABLE' " ) . " <input type='submit' name='repair' value=' " . lang ( 279 ) . " '> " . on_help ( " 'REPAIR TABLE' " ) : " " ))) . " <input type='submit' name='truncate' value=' " . lang ( 280 ) . " '> " . on_help ( $x == " sqlite " ? " 'DELETE' " : " 'TRUNCATE " . ( $x == " pgsql " ? " ' " : " TABLE' " )) . confirm () . " <input type='submit' name='drop' value=' " . lang ( 127 ) . " '> " . on_help ( " 'DROP TABLE' " ) . confirm () . " \n " ; $k = ( support ( " scheme " ) ? $b -> schemas () : $b -> databases ()); if ( count ( $k ) != 1 && $x != " sqlite " ){ $l = ( isset ( $_POST [ " target " ]) ? $_POST [ " target " ] : ( support ( " scheme " ) ? $_GET [ " ns " ] : DB )); echo " <p> " . lang ( 281 ) . " : " ,( $k ? html_select ( " target " , $k , $l ) : '<input name="target" value="' . h ( $l ) . '" autocapitalize="off">' ), " <input type='submit' name='move' value=' " . lang ( 282 ) . " '> " ,( support ( " copy " ) ? " <input type='submit' name='copy' value=' " . lang ( 283 ) . " '> " . checkbox ( " overwrite " , 1 , $_POST [ " overwrite " ], lang ( 284 )) : " " ), " \n " ;} echo " <input type='hidden' name='all' value=''> " ; echo
script ( " qsl('input').onclick = function () { selectCount('selected', formChecked(this, /^(tables|views) \ [/)); " . ( support ( " table " ) ? " selectCount('selected2', formChecked(this, /^tables \ [/) || $S ); " : " " ) . " } " ), " <input type='hidden' name='token' value=' $ti '> \n " , " </div></fieldset> \n " , " </div></div> \n " ;} echo " </form> \n " , script ( " tableCheck(); " );} echo '<p class="links"><a href="' . h ( ME ) . 'create=">' . lang ( 75 ) . " </a> \n " ,( support ( " view " ) ? '<a href="' . h ( ME ) . 'view=">' . lang ( 204 ) . " </a> \n " : " " ); if ( support ( " routine " )){ echo " <h3 id='routines'> " . lang ( 143 ) . " </h3> \n " ; $bh = routines (); if ( $bh ){ echo " <table cellspacing='0'> \n " , '<thead><tr><th>' . lang ( 183 ) . '<td>' . lang ( 50 ) . '<td>' . lang ( 221 ) . " <td></thead> \n " ; odd ( '' ); foreach ( $bh
as $I ){ $B = ( $I [ " SPECIFIC_NAME " ] == $I [ " ROUTINE_NAME " ] ? " " : " &name= " . urlencode ( $I [ " ROUTINE_NAME " ])); echo '<tr' . odd () . '>' , '<th><a href="' . h ( ME . ( $I [ " ROUTINE_TYPE " ] != " PROCEDURE " ? 'callf=' : 'call=' ) . urlencode ( $I [ " SPECIFIC_NAME " ]) . $B ) . '">' . h ( $I [ " ROUTINE_NAME " ]) . '</a>' , '<td>' . h ( $I [ " ROUTINE_TYPE " ]), '<td>' . h ( $I [ " DTD_IDENTIFIER " ]), '<td><a href="' . h ( ME . ( $I [ " ROUTINE_TYPE " ] != " PROCEDURE " ? 'function=' : 'procedure=' ) . urlencode ( $I [ " SPECIFIC_NAME " ]) . $B ) . '">' . lang ( 136 ) . " </a> " ;} echo " </table> \n " ;} echo '<p class="links">' . ( support ( " procedure " ) ? '<a href="' . h ( ME ) . 'procedure=">' . lang ( 220 ) . '</a>' : '' ) . '<a href="' . h ( ME ) . 'function=">' . lang ( 219 ) . " </a> \n " ;} if ( support ( " sequence " )){ echo " <h3 id='sequences'> " . lang ( 285 ) . " </h3> \n " ; $ph = get_vals ( " SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema() ORDER BY sequence_name " ); if ( $ph ){ echo " <table cellspacing='0'> \n " , " <thead><tr><th> " . lang ( 183 ) . " </thead> \n " ; odd ( '' ); foreach ( $ph
as $X ) echo " <tr " . odd () . " ><th><a href=' " . h ( ME ) . " sequence= " . urlencode ( $X ) . " '> " . h ( $X ) . " </a> \n " ; echo " </table> \n " ;} echo " <p class='links'><a href=' " . h ( ME ) . " sequence='> " . lang ( 226 ) . " </a> \n " ;} if ( support ( " type " )){ echo " <h3 id='user-types'> " . lang ( 26 ) . " </h3> \n " ; $Wi = types (); if ( $Wi ){ echo " <table cellspacing='0'> \n " , " <thead><tr><th> " . lang ( 183 ) . " </thead> \n " ; odd ( '' ); foreach ( $Wi
as $X ) echo " <tr " . odd () . " ><th><a href=' " . h ( ME ) . " type= " . urlencode ( $X ) . " '> " . h ( $X ) . " </a> \n " ; echo " </table> \n " ;} echo " <p class='links'><a href=' " . h ( ME ) . " type='> " . lang ( 230 ) . " </a> \n " ;} if ( support ( " event " )){ echo " <h3 id='events'> " . lang ( 144 ) . " </h3> \n " ; $J = get_rows ( " SHOW EVENTS " ); if ( $J ){ echo " <table cellspacing='0'> \n " , " <thead><tr><th> " . lang ( 183 ) . " <td> " . lang ( 286 ) . " <td> " . lang ( 210 ) . " <td> " . lang ( 211 ) . " <td></thead> \n " ; foreach ( $J
as $I ){ echo " <tr> " , " <th> " . h ( $I [ " Name " ]), " <td> " . ( $I [ " Execute at " ] ? lang ( 287 ) . " <td> " . $I [ " Execute at " ] : lang ( 212 ) . " " . $I [ " Interval value " ] . " " . $I [ " Interval field " ] . " <td> $I[Starts] " ), " <td> $I[Ends] " , '<td><a href="' . h ( ME ) . 'event=' . urlencode ( $I [ " Name " ]) . '">' . lang ( 136 ) . '</a>' ;} echo " </table> \n " ; $Dc = $h -> result ( " SELECT @@event_scheduler " ); if ( $Dc && $Dc != " ON " ) echo " <p class='error'><code class='jush-sqlset'>event_scheduler</code>: " . h ( $Dc ) . " \n " ;} echo '<p class="links"><a href="' . h ( ME ) . 'event=">' . lang ( 209 ) . " </a> \n " ;} if ( $Zh ) echo
2018-04-01 23:34:54 +02:00
script ( " ajaxSetHtml(' " . js_escape ( ME ) . " script=db'); " );}}} page_footer ();