1
0
mirror of https://github.com/vrana/adminer.git synced 2025-09-02 02:42:37 +02:00

Compare commits

...

81 Commits

Author SHA1 Message Date
Jakub Vrana
6bbc8bc3ea Release 4.2.0 2015-02-07 11:08:21 -08:00
Jakub Vrana
c990de3b3e Fix XSS in login form (bug #436) 2015-02-07 10:40:51 -08:00
beerwine
411d198d0d Added support for ILIKE in pgsql. 2015-02-07 10:25:33 -08:00
Jakub Vrana
060c006875 Add referrer: never meta tag 2015-02-06 09:00:48 -08:00
Jakub Vrana
42fd6dea8b Improve Spanish translation (thanks to Anuncios Google) 2015-01-24 11:43:35 -08:00
Jakub Vrana
5b38a5b6f1 Avoid double escaping in script=db (thanks to trestna smradlavice) 2015-01-12 09:46:53 -08:00
Nima Amini
65f8a87629 Update Persian translation 2015-01-12 09:32:03 -08:00
Jakub Vrana
2e4b8c1d36 Fix version needed for utf8mb4 (thanks to dg) 2015-01-11 10:09:41 -08:00
Jakub Vrana
2a5aca0038 Improve error message for views 2015-01-09 11:38:22 -08:00
Matej Humpal
8cb8a75658 Fix tables list alphabetical order in PostgreSQL driver 2015-01-06 09:47:15 -08:00
Matej Humpal
647e8d5cc1 Order sequences list by name 2015-01-06 09:27:45 -08:00
Jakub Vrana
25329cebf3 Allow limiting number of displayed rows in SQL command (bug #406) 2014-12-06 11:12:51 -08:00
Fot0n
f839d5ac25 Correcting inaccuracies and errors 2014-12-06 09:04:10 -08:00
Jakub Vrana
406889d7c3 Update pappu687 design 2014-12-02 09:17:48 -08:00
Jakub Vrana
8bd53120df Fix handling of 64 bit numbers in auto_increment 2014-11-24 18:17:43 -08:00
Jakub Vrana
4a4e58179f Avoid comma before PARTITION 2014-11-20 09:53:52 -08:00
Jakub Vrana
0b0c0c7e89 Don't alter table comment if not changed (was crashing MySQL Cluster) 2014-11-18 09:50:02 -08:00
Jakub Vrana
594c626665 Relax foreign keys format for NDB engine 2014-11-15 14:06:46 -08:00
Jakub Vrana
001bf042b4 MySQL: Support foreign keys in NDB storage 2014-11-12 10:13:40 -08:00
Rob Loach
fe5a81fd08 Add Composer support 2014-11-11 08:41:58 -08:00
Jakub Vrana
fe76c6b887 Add links to documentation on table status page 2014-11-04 09:48:21 -08:00
Jakub Vrana
3ff5930d18 Improve Romanian translation (thanks to Marian-Nicolae V. Ion) 2014-11-04 09:17:04 -08:00
Radosław Kowalewski
f782af67e2 Update Polish translation 2014-10-30 09:58:12 -07:00
Jakub Vrana
536e9a58ad Improve CSRF message 2014-10-28 09:24:13 -07:00
Jakub Vrana
5dc5bfe7ff SQLite: Support CURRENT_* default values (bug #417) 2014-10-25 16:49:42 -07:00
Zemistr
8fc70327fb Fixed a bug when exporting without selecting a database 2014-10-12 12:10:56 -07:00
Gargaj
0fb7260fd4 MSSQL: avoid warnings if result is invalid 2014-10-06 09:11:59 -07:00
Zemistr
0ed7b6b058 Improved plugin to display JSON values as the table in edit form 2014-09-18 09:38:28 -07:00
Zemistr
00eb35b4f5 Created plugin for dump to PHP format 2014-09-18 09:37:34 -07:00
Zemistr
4f7ff182b1 Fixed column names and bug with data in result 2014-09-18 09:37:31 -07:00
Gargaj
9c534a0a80 Elasticsearch: sort as strings 2014-09-16 09:20:34 -07:00
Jakub Vrana
8871fffb7c Delete duplicate code 2014-09-14 21:47:03 -07:00
Jakub Vrana
d029cadd60 Plugin edit-foreign: Backwards compatible default 2014-09-14 21:46:52 -07:00
Robert Slootjes
45bc098262 Plugin edit-foreign: Add limit where it should stop creating a select 2014-09-14 21:40:57 -07:00
Lubor Bilek
3052952733 PostgreSQL: Fix timestamp(0) (fixes #383) 2014-09-14 21:34:26 -07:00
Jakub Vrana
f9d76cea9a Firebird: Alpha version (thanks to Steve Krämer) 2014-09-14 21:10:23 -07:00
Jonathan Vollebregt
da61118303 Fix missing primary_key in haeckel theme custom SQL execution
Automatically generated queries start with the primary_key field
which is linked to edit a row. The haeckel theme changes this link
into an edit icon, and there's no problem since adminer will
automatically select the primary_key a second time.

In custom SQL queries however this second field selection can't be
inserted and the primary_key is eaten by the icon, making it hard
to find a row by id.
2014-09-14 15:52:29 -07:00
Jakub Vrana
37c8a3a123 Report offline and other AJAX errors (bug #419) 2014-09-14 15:47:09 -07:00
Jakub Vrana
a987a2a4de Fix JS error on Ctrl+click in select 2014-09-14 14:49:39 -07:00
Jakub Vrana
1c56b3b206 Editor: Define help mouse handlers 2014-09-14 14:49:39 -07:00
Jakub Vrana
594085c6f5 Send 403 for auth error 2014-09-14 14:49:33 -07:00
Rossler Jan
7a370e7885 PostgreSQL: Adjusted detection of materialized views support 2014-09-13 11:19:38 -07:00
Rossler Jan
933f041f4d PostgreSQL: Fixed foreign tables not displaying in menu 2014-09-13 11:16:24 -07:00
Rossler Jan
abc8be3317 PostgreSQL: Added support for materialized views 2014-09-13 11:16:17 -07:00
Jakub Vrana
51986426b7 Fix displaying binary data 2014-09-13 11:00:00 -07:00
Jakub Vrana
a3e1cd7bb6 Fix saving NULL value
This reverts commit ed130065.

Conflicts:
	adminer/drivers/mongo.inc.php
	adminer/include/functions.inc.php
2014-09-13 10:59:28 -07:00
JorgeHeredia
3e769815bf Update on Oracle Driver
I added the code to display the foreign keys on the table description! cheers!
2014-09-13 09:32:46 -07:00
Jakub Vrana
9e28e9f7ae Fix a typo in translation 2014-09-12 09:19:27 -07:00
Jakub Vrana
0e78996fdb Specify encoding for PHP 5.6 with invalid default_charset (fixes #421) 2014-09-11 08:48:26 -07:00
Gargaj
8d432beb3d Elasticsearch: adapt select() to use $where 2014-09-11 08:44:05 -07:00
Gargaj
02e574c8e9 Elasticsearch: fix select when fields are explicit
If fields are explicitly said, ES returns each row as an array.
2014-09-11 08:44:05 -07:00
Gargaj
c38f25b5d6 Elasticsearch: sort databases 2014-09-11 08:44:00 -07:00
Gargaj
024d73934f Elasticsearch: fix tables_list
otherwise it only returns "mappings" as the table
2014-09-11 08:32:03 -07:00
Gargaj
9315954f3e Elasticsearch: check for valid mappings 2014-09-11 08:30:23 -07:00
Gargaj
fe57642b6c Elasticsearch: add "engines" virtual function to avoid error 2014-09-11 08:28:31 -07:00
Gargaj
7066325e41 Elasticsearch: only throw error on actual decoding error 2014-09-11 08:27:45 -07:00
Jakub Vrana
b08631dab3 Danish translation 2014-09-08 09:27:15 -07:00
Jarne W. Beutnagel
767af152f9 Fixed spelling error 2014-09-08 09:16:58 -07:00
Jarne W. Beutnagel
4ee84efa3e Added Danish language file 2014-09-08 09:16:58 -07:00
Gargaj
04356ca0b0 Adapt to mapping structure
Mappings return a different structure actually:
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/mapping-intro.html#_viewing_the_mapping
2014-07-03 16:36:05 -07:00
Jakub Vrana
f80b296a1a Make adminer.key group-readable 2014-06-27 08:17:33 -07:00
Jakub Vrana
52eee61247 Use chmod() instead of umask() 2014-06-27 08:15:15 -07:00
Jakub Vrana
7e3f2d9b1d Fix edit by long non-utf8 string (thanks Robert Vlach) 2014-06-26 14:36:47 +02:00
Jakub Vrana
8bd3dca2f7 Use utf8mb4 on more places 2014-06-26 13:38:50 +02:00
Jakub Vrana
b87d43fdcd Make master key unreadable to others (bug #410) 2014-06-26 13:30:02 +02:00
Jakub Vrana
06a2d87e55 Add CSS classes to navigation 2014-06-26 12:59:04 +02:00
Jakub Vrana
50b33db7e2 Change Dump to Export 2014-06-24 15:34:15 +02:00
Jakub Vrana
3e4c6d67e5 Unlock session in alter database 2014-06-24 15:26:51 +02:00
Jakub Vrana
4fe6bad829 Display explanation of default value 2014-06-24 15:05:35 +02:00
Jakub Vrana
13f08f7255 Use singular caption 2014-06-24 15:02:08 +02:00
Jakub Vrana
8c985124f2 MySQL: Use utf8mb4 if available 2014-06-24 14:59:19 +02:00
Jakub Vrana
1127082dd2 Centralize setting MySQL charset 2014-06-24 14:53:04 +02:00
Jakub Vrana
9b34f7906f Fix translation (bug #414) 2014-06-22 19:15:08 +02:00
Jakub Vrana
b9bc67d331 Fix reading routine column collations: http://sourceforge.net/p/adminer/discussion/960419/thread/3d0925f5/ 2014-06-15 18:43:45 +02:00
Jakub Vrana
033b967505 Clarify that global import supports only SQL 2014-06-15 18:43:45 +02:00
Jakub Vrana
5308e7171b Fix SQL textarea in skin (thanks to DanG) 2014-06-15 18:43:45 +02:00
Jakub Vrana
cbce3f1395 Improve French translation (thanks to Dominique Saussereau) 2014-06-15 18:43:44 +02:00
Jakub Vrana
e62fc3a07b Preserve null byte in HTML 2014-05-02 10:27:00 -07:00
Jakub Vrana
03e31ed154 Fix cookie name if the DB name contains dot 2014-04-21 09:59:52 -07:00
Jakub Vrana
ad96c516ac Rename variable to reduce confusion 2014-04-21 09:45:15 -07:00
Jakub Vrana
0c8cd8e5f7 Fix doc comment 2014-04-18 09:10:17 -07:00
77 changed files with 1705 additions and 739 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
/adminer/adminer.css /adminer/adminer.css
/adminer*.php /adminer*.php
/editor*.php /editor*.php
/vendor/

View File

@@ -107,10 +107,10 @@ if ($_POST && !process_fields($row["fields"]) && !$error) {
$name, $name,
($jush == "sqlite" && ($use_all_fields || $foreign) ? $all_fields : $fields), ($jush == "sqlite" && ($use_all_fields || $foreign) ? $all_fields : $fields),
$foreign, $foreign,
$row["Comment"], ($row["Comment"] != $table_status["Comment"] ? $row["Comment"] : null),
($row["Engine"] && $row["Engine"] != $table_status["Engine"] ? $row["Engine"] : ""), ($row["Engine"] && $row["Engine"] != $table_status["Engine"] ? $row["Engine"] : ""),
($row["Collation"] && $row["Collation"] != $table_status["Collation"] ? $row["Collation"] : ""), ($row["Collation"] && $row["Collation"] != $table_status["Collation"] ? $row["Collation"] : ""),
($row["Auto_increment"] != "" ? +$row["Auto_increment"] : ""), ($row["Auto_increment"] != "" ? number($row["Auto_increment"]) : ""),
$partitioning $partitioning
)); ));
} }

View File

@@ -2,7 +2,6 @@
$row = $_POST; $row = $_POST;
if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP changes add.x to add_x if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP changes add.x to add_x
restart_session();
$name = trim($row["name"]); $name = trim($row["name"]);
if ($_POST["drop"]) { if ($_POST["drop"]) {
$_GET["db"] = ""; // to save in global history $_GET["db"] = ""; // to save in global history
@@ -24,6 +23,8 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP c
$last = $db; $last = $db;
} }
} }
restart_session();
set_session("dbs", null);
queries_redirect(ME . "db=" . urlencode($last), lang('Database has been created.'), $success); queries_redirect(ME . "db=" . urlencode($last), lang('Database has been created.'), $success);
} }
} else { } else {

View File

@@ -65,15 +65,16 @@ if ($adminer->homepage()) {
echo "<table cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n"; echo "<table cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n";
echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^(tables|views)\[/);">'; echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^(tables|views)\[/);">';
$doc_link = doc_link(array('sql' => 'show-table-status.html'));
echo '<th>' . lang('Table'); echo '<th>' . lang('Table');
echo '<td>' . lang('Engine'); echo '<td>' . lang('Engine') . doc_link(array('sql' => 'storage-engines.html'));
echo '<td>' . lang('Collation'); echo '<td>' . lang('Collation') . doc_link(array('sql' => 'charset-mysql.html'));
echo '<td>' . lang('Data Length'); echo '<td>' . lang('Data Length') . $doc_link;
echo '<td>' . lang('Index Length'); echo '<td>' . lang('Index Length') . $doc_link;
echo '<td>' . lang('Data Free'); echo '<td>' . lang('Data Free') . $doc_link;
echo '<td>' . lang('Auto Increment'); echo '<td>' . lang('Auto Increment') . doc_link(array('sql' => 'example-auto-increment.html'));
echo '<td>' . lang('Rows'); echo '<td>' . lang('Rows') . $doc_link;
echo (support("comment") ? '<td>' . lang('Comment') : ''); echo (support("comment") ? '<td>' . lang('Comment') . $doc_link : '');
echo "</thead>\n"; echo "</thead>\n";
$tables = 0; $tables = 0;
@@ -82,7 +83,7 @@ if ($adminer->homepage()) {
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');"); echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');");
echo '<th>' . (support("table") || support("indexes") ? '<a href="' . h(ME) . 'table=' . urlencode($name) . '" title="' . lang('Show structure') . '">' . h($name) . '</a>' : h($name)); echo '<th>' . (support("table") || support("indexes") ? '<a href="' . h(ME) . 'table=' . urlencode($name) . '" title="' . lang('Show structure') . '">' . h($name) . '</a>' : h($name));
if ($view) { if ($view) {
echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '" title="' . lang('Alter view') . '">' . lang('View') . '</a>'; echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '" title="' . lang('Alter view') . '">' . (preg_match('~materialized~i', $type) ? lang('Materialized View') : lang('View')) . '</a>';
echo '<td align="right"><a href="' . h(ME) . "select=" . urlencode($name) . '" title="' . lang('Select data') . '">?</a>'; echo '<td align="right"><a href="' . h(ME) . "select=" . urlencode($name) . '" title="' . lang('Select data') . '">?</a>';
} else { } else {
foreach (array( foreach (array(
@@ -144,6 +145,7 @@ if ($adminer->homepage()) {
echo '<p class="links"><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n"; echo '<p class="links"><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n";
echo (support("view") ? '<a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n" : ""); echo (support("view") ? '<a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n" : "");
echo (support("materializedview") ? '<a href="' . h(ME) . 'view=&amp;materialized=1">' . lang('Create materialized view') . "</a>\n" : "");
if (support("routine")) { if (support("routine")) {
echo "<h3 id='routines'>" . lang('Routines') . "</h3>\n"; echo "<h3 id='routines'>" . lang('Routines') . "</h3>\n";
@@ -169,7 +171,7 @@ if ($adminer->homepage()) {
if (support("sequence")) { if (support("sequence")) {
echo "<h3 id='sequences'>" . lang('Sequences') . "</h3>\n"; echo "<h3 id='sequences'>" . lang('Sequences') . "</h3>\n";
$sequences = get_vals("SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema()"); $sequences = get_vals("SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema() ORDER BY sequence_name");
if ($sequences) { if ($sequences) {
echo "<table cellspacing='0'>\n"; echo "<table cellspacing='0'>\n";
echo "<thead><tr><th>" . lang('Name') . "</thead>\n"; echo "<thead><tr><th>" . lang('Name') . "</thead>\n";

View File

@@ -31,7 +31,7 @@ if (isset($_GET["elastic"])) {
return false; return false;
} }
$return = json_decode($file, true); $return = json_decode($file, true);
if (!$return) { if ($return === null) {
$this->errno = json_last_error(); $this->errno = json_last_error();
if (function_exists('json_last_error_msg')) { if (function_exists('json_last_error_msg')) {
$this->error = json_last_error_msg(); $this->error = json_last_error_msg();
@@ -126,17 +126,21 @@ if (isset($_GET["elastic"])) {
$data["from"] = ($page * $limit); $data["from"] = ($page * $limit);
} }
} }
foreach ((array) $_GET["where"] as $val) { foreach ($where as $val) {
if ("$val[col]$val[val]" != "") { list($col,$op,$val) = explode(" ",$val,3);
$term = array("match" => array(($val["col"] != "" ? $val["col"] : "_all") => $val["val"])); if ($col == "_id") {
if ($val["op"] == "=") { $data["query"]["ids"]["values"][] = $val;
}
elseif ($col . $val != "") {
$term = array("term" => array(($col != "" ? $col : "_all") => $val));
if ($op == "=") {
$data["query"]["filtered"]["filter"]["and"][] = $term; $data["query"]["filtered"]["filter"]["and"][] = $term;
} else { } else {
$data["query"]["filtered"]["query"]["bool"]["must"][] = $term; $data["query"]["filtered"]["query"]["bool"]["must"][] = $term;
} }
} }
} }
if ($data["query"] && !$data["query"]["filtered"]["query"]) { if ($data["query"] && !$data["query"]["filtered"]["query"] && !$data["query"]["ids"]) {
$data["query"]["filtered"]["query"] = array("match_all" => array()); $data["query"]["filtered"]["query"] = array("match_all" => array());
} }
$start = microtime(true); $start = microtime(true);
@@ -150,6 +154,9 @@ if (isset($_GET["elastic"])) {
$return = array(); $return = array();
foreach ($search['hits']['hits'] as $hit) { foreach ($search['hits']['hits'] as $hit) {
$row = array(); $row = array();
if ($select == array("*")) {
$row["_id"] = $hit["_id"];
}
$fields = $hit['_source']; $fields = $hit['_source'];
if ($select != array("*")) { if ($select != array("*")) {
$fields = array(); $fields = array();
@@ -158,6 +165,9 @@ if (isset($_GET["elastic"])) {
} }
} }
foreach ($fields as $key => $val) { foreach ($fields as $key => $val) {
if ($data["fields"]) {
$val = $val[0];
}
$row[$key] = (is_array($val) ? json_encode($val) : $val); //! display JSON and others differently $row[$key] = (is_array($val) ? json_encode($val) : $val); //! display JSON and others differently
} }
$return[] = $row; $return[] = $row;
@@ -194,6 +204,7 @@ if (isset($_GET["elastic"])) {
$return = $connection->rootQuery('_aliases'); $return = $connection->rootQuery('_aliases');
if ($return) { if ($return) {
$return = array_keys($return); $return = array_keys($return);
sort($return, SORT_STRING);
} }
return $return; return $return;
} }
@@ -204,6 +215,10 @@ if (isset($_GET["elastic"])) {
function db_collation($db, $collations) { function db_collation($db, $collations) {
} }
function engines() {
return array();
}
function count_tables($databases) { function count_tables($databases) {
global $connection; global $connection;
@@ -218,7 +233,7 @@ if (isset($_GET["elastic"])) {
global $connection; global $connection;
$return = $connection->query('_mapping'); $return = $connection->query('_mapping');
if ($return) { if ($return) {
$return = array_fill_keys(array_keys(reset($return)), 'table'); $return = array_fill_keys(array_keys($return[$connection->_db]["mappings"]), 'table');
} }
return $return; return $return;
} }
@@ -269,16 +284,26 @@ if (isset($_GET["elastic"])) {
function fields($table) { function fields($table) {
global $connection; global $connection;
$mapping = $connection->query("$table/_mapping"); $result = $connection->query("$table/_mapping");
$return = array(); $return = array();
if ($mapping) { if ($result) {
foreach ($mapping[$table]['properties'] as $name => $field) { $mappings = $result[$table]['properties'];
$return[$name] = array( if (!$mappings) {
"field" => $name, $mappings = $result[$connection->_db]['mappings'][$table]['properties'];
"full_type" => $field["type"], }
"type" => $field["type"], if ($mappings) {
"privileges" => array("insert" => 1, "select" => 1, "update" => 1), foreach ($mappings as $name => $field) {
); $return[$name] = array(
"field" => $name,
"full_type" => $field["type"],
"type" => $field["type"],
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
);
if ($field["properties"]) { // only leaf fields can be edited
unset($return[$name]["privileges"]["insert"]);
unset($return[$name]["privileges"]["update"]);
}
}
} }
} }
return $return; return $return;

View File

@@ -0,0 +1,320 @@
<?php
/**
* @author Steve Krämer
*/
$drivers['firebird'] = 'Firebird (alpha)';
if (isset($_GET["firebird"])) {
$possible_drivers = array("interbase");
define("DRIVER", "firebird");
if (extension_loaded("interbase") ) {
class Min_DB {
var
$extension = "Firebird",
$server_info,
$affected_rows,
$errno,
$error,
$_link, $_result
;
function connect($server, $username, $password) {
$this->_link = ibase_connect($server, $username, $password);
if ($this->_link) {
$url_parts = explode(':', $server);
$this->service_link = ibase_service_attach($url_parts[0], $username, $password);
$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 quote($string) {
return "'" . str_replace("'", "''", $string) . "'";
}
function select_db($database) {
return ($database == "domain");
}
function query($query, $unbuffered = false) {
$result = ibase_query($query, $this->_link);
if (!$result) {
$this->errno = ibase_errcode();
$this->error = ibase_errmsg();
return false;
}
$this->error = "";
if ($result === true) {
$this->affected_rows = ibase_affected_rows($this->_link);
return true;
}
return new Min_Result($result);
}
function multi_query($query) {
return $this->_result = $this->query($query);
}
function store_result() {
return $this->_result;
}
function next_result() {
return false;
}
function result($query, $field = 0) {
$result = $this->query($query);
if (!$result || !$result->num_rows) {
return false;
}
$row = $result->fetch_row();
return $row[$field];
}
}
class Min_Result {
var $num_rows, $_result, $_offset = 0;
function Min_Result($result) {
$this->_result = $result;
// $this->num_rows = ibase_num_rows($result);
}
function fetch_assoc() {
return ibase_fetch_assoc($this->_result);
}
function fetch_row() {
return ibase_fetch_row($this->_result);
}
function fetch_field() {
$field = ibase_field_info($this->_result, $this->_offset++);
return (object) array(
'name' => $field['name'],
'orgname' => $field['name'],
'type' => $field['type'],
'charsetnr' => $field['length'],
);
}
function __destruct() {
ibase_free_result($this->_result);
}
}
}
class Min_Driver extends Min_SQL {
}
function idf_escape($idf) {
return '"' . str_replace('"', '""', $idf) . '"';
}
function table($idf) {
return idf_escape($idf);
}
function connect() {
global $adminer;
$connection = new Min_DB;
$credentials = $adminer->credentials();
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
return $connection;
}
return $connection->error;
}
function get_databases($flush) {
return array("domain");
}
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
$return = '';
$return .= ($limit !== null ? $separator . "FIRST $limit" . ($offset ? " SKIP $offset" : "") : "");
$return .= " $query$where";
return $return;
}
function limit1($query, $where) {
return limit($query, $where, 1);
}
function db_collation($db, $collations) {
}
function engines() {
return array();
}
function logged_user() {
global $adminer;
$credentials = $adminer->credentials();
return $credentials[1];
}
function tables_list() {
global $connection;
$query = 'SELECT RDB$RELATION_NAME FROM rdb$relations WHERE rdb$system_flag = 0';
$result = ibase_query($connection->_link, $query);
$return = array();
while ($row = ibase_fetch_assoc($result)) {
$return[$row['RDB$RELATION_NAME']] = 'table';
}
ksort($return);
return $return;
}
function count_tables($databases) {
return array();
}
function table_status($name = "", $fast = false) {
global $connection;
$return = array();
$data = tables_list();
foreach ($data as $index => $val) {
$index = trim($index);
$return[$index] = array(
'Name' => $index,
'Engine' => 'standard',
);
if ($name == $index) {
return $return[$index];
}
}
return $return;
}
function is_view($table_status) {
return false;
}
function fk_support($table_status) {
return preg_match('~InnoDB|IBMDB2I~i', $table_status["Engine"]);
}
function fields($table) {
global $connection;
$return = array();
$query = 'SELECT r.RDB$FIELD_NAME AS field_name,
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
WHERE r.RDB$RELATION_NAME = ' . q($table) . '
ORDER BY r.RDB$FIELD_POSITION';
$result = ibase_query($connection->_link, $query);
while ($row = ibase_fetch_assoc($result)) {
$return[trim($row['FIELD_NAME'])] = array(
"field" => trim($row["FIELD_NAME"]),
"full_type" => trim($row["FIELD_TYPE"]),
"type" => trim($row["FIELD_SUB_TYPE"]),
"default" => trim($row['FIELD_DEFAULT_VALUE']),
"null" => (trim($row["FIELD_NOT_NULL_CONSTRAINT"]) == "YES"),
"auto_increment" => '0',
"collation" => trim($row["FIELD_COLLATION"]),
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
"comment" => trim($row["FIELD_DESCRIPTION"]),
);
}
return $return;
}
function indexes($table, $connection2 = null) {
$return = array();
/*
$query = 'SELECT RDB$INDEX_SEGMENTS.RDB$FIELD_NAME AS field_name,
RDB$INDICES.RDB$DESCRIPTION AS description,
(RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION + 1) AS field_position
FROM RDB$INDEX_SEGMENTS
LEFT JOIN RDB$INDICES ON RDB$INDICES.RDB$INDEX_NAME = RDB$INDEX_SEGMENTS.RDB$INDEX_NAME
LEFT JOIN RDB$RELATION_CONSTRAINTS ON RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME = RDB$INDEX_SEGMENTS.RDB$INDEX_NAME
WHERE UPPER(RDB$INDICES.RDB$RELATION_NAME) = ' . q($table) . '
// AND UPPER(RDB$INDICES.RDB$INDEX_NAME) = \'TEST2_FIELD5_IDX\'
AND RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE IS NULL
ORDER BY RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION';
*/
return $return;
}
function foreign_keys($table) {
return array();
}
function collations() {
return array();
}
function information_schema($db) {
return false;
}
function error() {
global $connection;
return h($connection->error);
}
function types() {
return array();
}
function schemas() {
return array();
}
function get_schema() {
return "";
}
function set_schema($schema) {
return true;
}
function support($feature) {
return preg_match("~^(columns|sql|status|table)$~", $feature);
}
$jush = "firebird";
$operators = array("=");
$functions = array();
$grouping = array();
$edit_functions = array();
}

View File

@@ -116,10 +116,6 @@ if (isset($_GET["mongo"])) {
class Min_Driver extends Min_SQL { class Min_Driver extends Min_SQL {
public $primary = "_id"; public $primary = "_id";
function quote($value) {
return ($value === null ? $value : parent::quote($value));
}
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) { function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
$select = ($select == array("*") $select = ($select == array("*")
? array() ? array()

View File

@@ -66,6 +66,9 @@ if (isset($_GET["mssql"])) {
if (!$result) { if (!$result) {
$result = $this->_result; $result = $this->_result;
} }
if (!$result) {
return false;
}
if (sqlsrv_field_metadata($result)) { if (sqlsrv_field_metadata($result)) {
return new Min_Result($result); return new Min_Result($result);
} }
@@ -74,7 +77,7 @@ if (isset($_GET["mssql"])) {
} }
function next_result() { function next_result() {
return sqlsrv_next_result($this->_result); return $this->_result ? sqlsrv_next_result($this->_result) : null;
} }
function result($query, $field = 0) { function result($query, $field = 0) {
@@ -427,7 +430,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
} }
function auto_increment() { function auto_increment() {
return " IDENTITY" . ($_POST["Auto_increment"] != "" ? "(" . (+$_POST["Auto_increment"]) . ",1)" : "") . " PRIMARY KEY"; return " IDENTITY" . ($_POST["Auto_increment"] != "" ? "(" . number($_POST["Auto_increment"]) . ",1)" : "") . " PRIMARY KEY";
} }
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) { function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {

View File

@@ -24,13 +24,6 @@ if (!defined("DRIVER")) {
(is_numeric($port) ? $port : ini_get("mysqli.default_port")), (is_numeric($port) ? $port : ini_get("mysqli.default_port")),
(!is_numeric($port) ? $port : null) (!is_numeric($port) ? $port : null)
); );
if ($return) {
if (method_exists($this, 'set_charset')) {
$this->set_charset("utf8");
} else {
$this->query("SET NAMES utf8");
}
}
return $return; return $return;
} }
@@ -75,17 +68,23 @@ if (!defined("DRIVER")) {
); );
if ($this->_link) { if ($this->_link) {
$this->server_info = mysql_get_server_info($this->_link); $this->server_info = mysql_get_server_info($this->_link);
if (function_exists('mysql_set_charset')) {
mysql_set_charset("utf8", $this->_link);
} else {
$this->query("SET NAMES utf8");
}
} else { } else {
$this->error = mysql_error(); $this->error = mysql_error();
} }
return (bool) $this->_link; return (bool) $this->_link;
} }
/** Sets the client character set
* @param string
* @return bool
*/
function set_charset($charset) {
if (function_exists('mysql_set_charset')) {
return mysql_set_charset($charset, $this->_link);
}
return $this->query("SET NAMES $charset");
}
/** Quote string to use in SQL /** Quote string to use in SQL
* @param string * @param string
* @return string escaped string enclosed in ' * @return string escaped string enclosed in '
@@ -212,10 +211,13 @@ if (!defined("DRIVER")) {
function connect($server, $username, $password) { function connect($server, $username, $password) {
$this->dsn("mysql:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\\d)~', ';port=\\1', $server)), $username, $password); $this->dsn("mysql:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\\d)~', ';port=\\1', $server)), $username, $password);
$this->query("SET NAMES utf8"); // charset in DSN is ignored before PHP 5.3.6
return true; return true;
} }
function set_charset($charset) {
$this->query("SET NAMES $charset"); // charset in DSN is ignored before PHP 5.3.6
}
function select_db($database) { function select_db($database) {
// database selection is separated from the connection so dbname in DSN can't be used // database selection is separated from the connection so dbname in DSN can't be used
return $this->query("USE " . idf_escape($database)); return $this->query("USE " . idf_escape($database));
@@ -290,6 +292,7 @@ if (!defined("DRIVER")) {
$connection = new Min_DB; $connection = new Min_DB;
$credentials = $adminer->credentials(); $credentials = $adminer->credentials();
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) { if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
$connection->set_charset(charset($connection)); // available in MySQLi since PHP 5.0.5
$connection->query("SET sql_quote_show_create = 1, autocommit = 1"); $connection->query("SET sql_quote_show_create = 1, autocommit = 1");
return $connection; return $connection;
} }
@@ -444,7 +447,9 @@ if (!defined("DRIVER")) {
* @return bool * @return bool
*/ */
function fk_support($table_status) { function fk_support($table_status) {
return preg_match('~InnoDB|IBMDB2I~i', $table_status["Engine"]); global $connection;
return preg_match('~InnoDB|IBMDB2I~i', $table_status["Engine"])
|| (preg_match('~NDB~i', $table_status["Engine"]) && version_compare($connection->server_info, '5.6') >= 0);
} }
/** Get information about fields /** Get information about fields
@@ -500,7 +505,7 @@ if (!defined("DRIVER")) {
$return = array(); $return = array();
$create_table = $connection->result("SHOW CREATE TABLE " . table($table), 1); $create_table = $connection->result("SHOW CREATE TABLE " . table($table), 1);
if ($create_table) { if ($create_table) {
preg_match_all("~CONSTRAINT ($pattern) FOREIGN KEY \\(((?:$pattern,? ?)+)\\) REFERENCES ($pattern)(?:\\.($pattern))? \\(((?:$pattern,? ?)+)\\)(?: ON DELETE ($on_actions))?(?: ON UPDATE ($on_actions))?~", $create_table, $matches, PREG_SET_ORDER); preg_match_all("~CONSTRAINT ($pattern) FOREIGN KEY ?\\(((?:$pattern,? ?)+)\\) REFERENCES ($pattern)(?:\\.($pattern))? \\(((?:$pattern,? ?)+)\\)(?: ON DELETE ($on_actions))?(?: ON UPDATE ($on_actions))?~", $create_table, $matches, PREG_SET_ORDER);
foreach ($matches as $match) { foreach ($matches as $match) {
preg_match_all("~$pattern~", $match[2], $source); preg_match_all("~$pattern~", $match[2], $source);
preg_match_all("~$pattern~", $match[5], $target); preg_match_all("~$pattern~", $match[5], $target);
@@ -579,7 +584,6 @@ if (!defined("DRIVER")) {
* @return string * @return string
*/ */
function create_database($db, $collation) { function create_database($db, $collation) {
set_session("dbs", null);
return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " COLLATE " . q($collation) : "")); return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " COLLATE " . q($collation) : ""));
} }
@@ -588,9 +592,10 @@ if (!defined("DRIVER")) {
* @return bool * @return bool
*/ */
function drop_databases($databases) { function drop_databases($databases) {
$return = apply_queries("DROP DATABASE", $databases, 'idf_escape');
restart_session(); restart_session();
set_session("dbs", null); set_session("dbs", null);
return apply_queries("DROP DATABASE", $databases, 'idf_escape'); return $return;
} }
/** Rename database from DB /** Rename database from DB
@@ -599,18 +604,21 @@ if (!defined("DRIVER")) {
* @return bool * @return bool
*/ */
function rename_database($name, $collation) { function rename_database($name, $collation) {
$return = false;
if (create_database($name, $collation)) { if (create_database($name, $collation)) {
//! move triggers //! move triggers
$rename = array(); $rename = array();
foreach (tables_list() as $table => $type) { foreach (tables_list() as $table => $type) {
$rename[] = table($table) . " TO " . idf_escape($name) . "." . table($table); $rename[] = table($table) . " TO " . idf_escape($name) . "." . table($table);
} }
if (!$rename || queries("RENAME TABLE " . implode(", ", $rename))) { $return = (!$rename || queries("RENAME TABLE " . implode(", ", $rename)));
if ($return) {
queries("DROP DATABASE " . idf_escape(DB)); queries("DROP DATABASE " . idf_escape(DB));
return true;
} }
restart_session();
set_session("dbs", null);
} }
return false; return $return;
} }
/** Generate modifier for auto increment column /** Generate modifier for auto increment column
@@ -641,7 +649,7 @@ if (!defined("DRIVER")) {
* @param string * @param string
* @param string * @param string
* @param string * @param string
* @param int * @param string number
* @param string * @param string
* @return bool * @return bool
*/ */
@@ -654,20 +662,21 @@ if (!defined("DRIVER")) {
); );
} }
$alter = array_merge($alter, $foreign); $alter = array_merge($alter, $foreign);
$status = "COMMENT=" . q($comment) $status = ($comment !== null ? " COMMENT=" . q($comment) : "")
. ($engine ? " ENGINE=" . q($engine) : "") . ($engine ? " ENGINE=" . q($engine) : "")
. ($collation ? " COLLATE " . q($collation) : "") . ($collation ? " COLLATE " . q($collation) : "")
. ($auto_increment != "" ? " AUTO_INCREMENT=$auto_increment" : "") . ($auto_increment != "" ? " AUTO_INCREMENT=$auto_increment" : "")
. $partitioning
; ;
if ($table == "") { if ($table == "") {
return queries("CREATE TABLE " . table($name) . " (\n" . implode(",\n", $alter) . "\n) $status"); return queries("CREATE TABLE " . table($name) . " (\n" . implode(",\n", $alter) . "\n)$status$partitioning");
} }
if ($table != $name) { if ($table != $name) {
$alter[] = "RENAME TO " . table($name); $alter[] = "RENAME TO " . table($name);
} }
$alter[] = $status; if ($status) {
return queries("ALTER TABLE " . table($table) . "\n" . implode(",\n", $alter)); $alter[] = ltrim($status);
}
return ($alter || $partitioning ? queries("ALTER TABLE " . table($table) . "\n" . implode(",\n", $alter) . $partitioning) : true);
} }
/** Run commands to alter indexes /** Run commands to alter indexes
@@ -796,7 +805,7 @@ if (!defined("DRIVER")) {
function routine($name, $type) { function routine($name, $type) {
global $connection, $enum_length, $inout, $types; global $connection, $enum_length, $inout, $types;
$aliases = array("bool", "boolean", "integer", "double precision", "real", "dec", "numeric", "fixed", "national char", "national varchar"); $aliases = array("bool", "boolean", "integer", "double precision", "real", "dec", "numeric", "fixed", "national char", "national varchar");
$type_pattern = "((" . implode("|", array_merge(array_keys($types), $aliases)) . ")\\b(?:\\s*\\(((?:[^'\")]|$enum_length)++)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s]+)['\"]?)?"; $type_pattern = "((" . implode("|", array_merge(array_keys($types), $aliases)) . ")\\b(?:\\s*\\(((?:[^'\")]|$enum_length)++)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s,]+)['\"]?)?";
$pattern = "\\s*(" . ($type == "FUNCTION" ? "" : $inout) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern"; $pattern = "\\s*(" . ($type == "FUNCTION" ? "" : $inout) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern";
$create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2); $create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2);
preg_match("~\\(((?:$pattern\\s*,?)*)\\)\\s*" . ($type == "FUNCTION" ? "RETURNS\\s+$type_pattern\\s+" : "") . "(.*)~is", $create, $match); preg_match("~\\(((?:$pattern\\s*,?)*)\\)\\s*" . ($type == "FUNCTION" ? "RETURNS\\s+$type_pattern\\s+" : "") . "(.*)~is", $create, $match);
@@ -995,7 +1004,7 @@ if (!defined("DRIVER")) {
} }
/** Check whether a feature is supported /** Check whether a feature is supported
* @param string "comment", "copy", "database", "drop_col", "dump", "event", "kill", "partitioning", "privileges", "procedure", "processlist", "routine", "scheme", "sequence", "status", "table", "trigger", "type", "variables", "view", "view_trigger" * @param string "comment", "copy", "database", "drop_col", "dump", "event", "kill", "materializedview", "partitioning", "privileges", "procedure", "processlist", "routine", "scheme", "sequence", "status", "table", "trigger", "type", "variables", "view", "view_trigger"
* @return bool * @return bool
*/ */
function support($feature) { function support($feature) {

View File

@@ -317,7 +317,29 @@ ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
} }
function foreign_keys($table) { function foreign_keys($table) {
return array(); //! $return = array();
$query = "SELECT c_list.CONSTRAINT_NAME as NAME,
c_src.COLUMN_NAME as SRC_COLUMN,
c_dest.OWNER as DEST_DB,
c_dest.TABLE_NAME as DEST_TABLE,
c_dest.COLUMN_NAME as DEST_COLUMN,
c_list.DELETE_RULE as ON_DELETE
FROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src, ALL_CONS_COLUMNS c_dest
WHERE c_list.CONSTRAINT_NAME = c_src.CONSTRAINT_NAME
AND c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME
AND c_list.CONSTRAINT_TYPE = 'R'
AND c_src.TABLE_NAME = " . q($table);
foreach (get_rows($query) as $row) {
$return[$row['NAME']] = array(
"db" => $row['DEST_DB'],
"table" => $row['DEST_TABLE'],
"source" => array($row['SRC_COLUMN']),
"target" => array($row['DEST_COLUMN']),
"on_delete" => $row['ON_DELETE'],
"on_update" => null,
);
}
return $return;
} }
function truncate_tables($tables) { function truncate_tables($tables) {

View File

@@ -225,7 +225,17 @@ if (isset($_GET["pgsql"])) {
} }
function tables_list() { function tables_list() {
return get_key_vals("SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema() ORDER BY table_name"); $query = "SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema()";
if (support('materializedview')) {
$query .= "
UNION ALL
SELECT matviewname, 'MATERIALIZED VIEW'
FROM pg_matviews
WHERE schemaname = current_schema()";
}
$query .= "
ORDER BY 1";
return get_key_vals($query);
} }
function count_tables($databases) { function count_tables($databases) {
@@ -234,9 +244,9 @@ if (isset($_GET["pgsql"])) {
function table_status($name = "") { function table_status($name = "") {
$return = array(); $return = array();
foreach (get_rows("SELECT relname AS \"Name\", CASE relkind WHEN 'r' THEN 'table' ELSE 'view' END AS \"Engine\", pg_relation_size(oid) AS \"Data_length\", pg_total_relation_size(oid) - pg_relation_size(oid) AS \"Index_length\", obj_description(oid, 'pg_class') AS \"Comment\", relhasoids::int AS \"Oid\", reltuples as \"Rows\" foreach (get_rows("SELECT relname AS \"Name\", CASE relkind WHEN 'r' THEN 'table' WHEN 'mv' THEN 'materialized view' WHEN 'f' THEN 'foreign table' ELSE 'view' END AS \"Engine\", pg_relation_size(oid) AS \"Data_length\", pg_total_relation_size(oid) - pg_relation_size(oid) AS \"Index_length\", obj_description(oid, 'pg_class') AS \"Comment\", relhasoids::int AS \"Oid\", reltuples as \"Rows\"
FROM pg_class FROM pg_class
WHERE relkind IN ('r','v') WHERE relkind IN ('r','v','mv','f')
AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema())
" . ($name != "" ? "AND relname = " . q($name) : "ORDER BY relname") " . ($name != "" ? "AND relname = " . q($name) : "ORDER BY relname")
) as $row) { //! Index_length, Auto_increment ) as $row) { //! Index_length, Auto_increment
@@ -246,7 +256,7 @@ AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema(
} }
function is_view($table_status) { function is_view($table_status) {
return $table_status["Engine"] == "view"; return in_array($table_status["Engine"], array("view", "materialized view"));
} }
function fk_support($table_status) { function fk_support($table_status) {
@@ -271,11 +281,17 @@ AND a.attnum > 0
ORDER BY a.attnum" ORDER BY a.attnum"
) as $row) { ) as $row) {
//! collation, primary //! collation, primary
preg_match('~([^([]+)(\((.*)\))?((\[[0-9]*])*)$~', $row["full_type"], $match); preg_match('~([^([]+)(\((.*)\))?([a-z ]+)?((\[[0-9]*])*)$~', $row["full_type"], $match);
list(, $type, $length, $row["length"], $array) = $match; list(, $type, $length, $row["length"], $addon, $array) = $match;
$row["length"] .= $array; $row["length"] .= $array;
$row["type"] = ($aliases[$type] ? $aliases[$type] : $type); $check_type = $type . $addon;
$row["full_type"] = $row["type"] . $length . $array; if (isset($aliases[$check_type])) {
$row["type"] = $aliases[$check_type];
$row["full_type"] = $row["type"] . $length . $array;
} else {
$row["type"] = $type;
$row["full_type"] = $row["type"] . $length . $addon . $array;
}
$row["null"] = !$row["attnotnull"]; $row["null"] = !$row["attnotnull"];
$row["auto_increment"] = preg_match('~^nextval\\(~i', $row["default"]); $row["auto_increment"] = preg_match('~^nextval\\(~i', $row["default"]);
$row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1); $row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
@@ -467,21 +483,23 @@ ORDER BY conkey, conname") as $row) {
} }
function drop_views($views) { function drop_views($views) {
return queries("DROP VIEW " . implode(", ", array_map('table', $views))); return drop_tables($views);
} }
function drop_tables($tables) { function drop_tables($tables) {
return queries("DROP TABLE " . implode(", ", array_map('table', $tables))); foreach ($tables as $table) {
$status = table_status($table);
if (!queries("DROP " . strtoupper($status["Engine"]) . " " . table($table))) {
return false;
}
}
return true;
} }
function move_tables($tables, $views, $target) { function move_tables($tables, $views, $target) {
foreach ($tables as $table) { foreach (array_merge($tables, $views) as $table) {
if (!queries("ALTER TABLE " . table($table) . " SET SCHEMA " . idf_escape($target))) { $status = table_status($table);
return false; if (!queries("ALTER " . strtoupper($status["Engine"]) . " " . table($table) . " SET SCHEMA " . idf_escape($target))) {
}
}
foreach ($views as $table) {
if (!queries("ALTER VIEW " . table($table) . " SET SCHEMA " . idf_escape($target))) {
return false; return false;
} }
} }
@@ -612,7 +630,8 @@ AND typelem = 0"
} }
function support($feature) { function support($feature) {
return preg_match('~^(database|table|columns|sql|indexes|comment|view|scheme|processlist|sequence|trigger|type|variables|drop_col)$~', $feature); //! routine| global $connection;
return preg_match('~^(database|table|columns|sql|indexes|comment|view|' . ($connection->server_info >= 9.3 ? 'materializedview|' : '') . 'scheme|processlist|sequence|trigger|type|variables|drop_col)$~', $feature); //! routine|
} }
$jush = "pgsql"; $jush = "pgsql";
@@ -630,7 +649,7 @@ AND typelem = 0"
$structured_types[$key] = array_keys($val); $structured_types[$key] = array_keys($val);
} }
$unsigned = array(); $unsigned = array();
$operators = array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // no "SQL" to avoid SQL injection $operators = array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "ILIKE", "ILIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // no "SQL" to avoid SQL injection
$functions = array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper"); $functions = array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper");
$grouping = array("avg", "count", "count distinct", "max", "min", "sum"); $grouping = array("avg", "count", "count distinct", "max", "min", "sum");
$edit_functions = array( $edit_functions = array(

View File

@@ -16,7 +16,7 @@ if ($_POST && !$error) {
if ($is_sql) { if ($is_sql) {
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump\n\n"; echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump\n\n";
if ($jush == "sql") { if ($jush == "sql") {
echo "SET NAMES utf8; echo "SET NAMES " . charset($connection) . ";
SET time_zone = '+00:00'; SET time_zone = '+00:00';
" . ($_POST["data_style"] ? "SET foreign_key_checks = 0; " . ($_POST["data_style"] ? "SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

View File

@@ -412,7 +412,7 @@ username.form['auth[driver]'].onchange();
* @return array expressions to join by AND * @return array expressions to join by AND
*/ */
function selectSearchProcess($fields, $indexes) { function selectSearchProcess($fields, $indexes) {
global $jush; global $connection, $jush;
$return = array(); $return = array();
foreach ($indexes as $i => $index) { foreach ($indexes as $i => $index) {
if ($index["type"] == "FULLTEXT" && $_GET["fulltext"][$i] != "") { if ($index["type"] == "FULLTEXT" && $_GET["fulltext"][$i] != "") {
@@ -429,6 +429,8 @@ username.form['auth[driver]'].onchange();
$cond = " $val[val]"; // SQL injection $cond = " $val[val]"; // SQL injection
} elseif ($val["op"] == "LIKE %%") { } elseif ($val["op"] == "LIKE %%") {
$cond = " LIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%"); $cond = " LIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%");
} elseif ($val["op"] == "ILIKE %%") {
$cond = " ILIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%");
} elseif (!preg_match('~NULL$~', $val["op"])) { } elseif (!preg_match('~NULL$~', $val["op"])) {
$cond .= " " . $this->processInput($fields[$val["col"]], $val["val"]); $cond .= " " . $this->processInput($fields[$val["col"]], $val["val"]);
} }
@@ -443,7 +445,7 @@ username.form['auth[driver]'].onchange();
&& (!preg_match("~[\x80-\xFF]~", $val["val"]) || $is_text) && (!preg_match("~[\x80-\xFF]~", $val["val"]) || $is_text)
) { ) {
$name = idf_escape($name); $name = idf_escape($name);
$cols[] = ($jush == "sql" && $is_text && !preg_match('~^utf8~', $field["collation"]) ? "CONVERT($name USING utf8)" : $name); $cols[] = ($jush == "sql" && $is_text && !preg_match("~^utf8_~", $field["collation"]) ? "CONVERT($name USING " . charset($connection) . ")" : $name);
} }
} }
$return[] = ($cols ? "(" . implode("$cond OR ", $cols) . "$cond)" : "0"); $return[] = ($cols ? "(" . implode("$cond OR ", $cols) . "$cond)" : "0");
@@ -828,7 +830,7 @@ bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info,
if (DB == "" || !$missing) { if (DB == "" || !$missing) {
echo "<p class='links'>" . (support("sql") ? "<a href='" . h(ME) . "sql='" . bold(isset($_GET["sql"]) && !isset($_GET["import"])) . ">" . lang('SQL command') . "</a>\n<a href='" . h(ME) . "import='" . bold(isset($_GET["import"])) . ">" . lang('Import') . "</a>\n" : "") . ""; echo "<p class='links'>" . (support("sql") ? "<a href='" . h(ME) . "sql='" . bold(isset($_GET["sql"]) && !isset($_GET["import"])) . ">" . lang('SQL command') . "</a>\n<a href='" . h(ME) . "import='" . bold(isset($_GET["import"])) . ">" . lang('Import') . "</a>\n" : "") . "";
if (support("dump")) { if (support("dump")) {
echo "<a href='" . h(ME) . "dump=" . urlencode(isset($_GET["table"]) ? $_GET["table"] : $_GET["select"]) . "' id='dump'" . bold(isset($_GET["dump"])) . ">" . lang('Dump') . "</a>\n"; echo "<a href='" . h(ME) . "dump=" . urlencode(isset($_GET["table"]) ? $_GET["table"] : $_GET["select"]) . "' id='dump'" . bold(isset($_GET["dump"])) . ">" . lang('Export') . "</a>\n";
} }
} }
if ($_GET["ns"] !== "" && !$missing && DB != "") { if ($_GET["ns"] !== "" && !$missing && DB != "") {
@@ -883,10 +885,12 @@ bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info,
function tablesPrint($tables) { function tablesPrint($tables) {
echo "<p id='tables' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n"; echo "<p id='tables' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
foreach ($tables as $table => $status) { foreach ($tables as $table => $status) {
echo '<a href="' . h(ME) . 'select=' . urlencode($table) . '"' . bold($_GET["select"] == $table || $_GET["edit"] == $table) . ">" . lang('select') . "</a> "; echo '<a href="' . h(ME) . 'select=' . urlencode($table) . '"' . bold($_GET["select"] == $table || $_GET["edit"] == $table, "select") . ">" . lang('select') . "</a> ";
$name = $this->tableName($status); $name = $this->tableName($status);
echo (support("table") || support("indexes") echo (support("table") || support("indexes")
? '<a href="' . h(ME) . 'table=' . urlencode($table) . '"' . bold(in_array($table, array($_GET["table"], $_GET["create"], $_GET["indexes"], $_GET["foreign"], $_GET["trigger"])), (is_view($status) ? "view" : "")) . " title='" . lang('Show structure') . "'>$name</a>" ? '<a href="' . h(ME) . 'table=' . urlencode($table) . '"'
. bold(in_array($table, array($_GET["table"], $_GET["create"], $_GET["indexes"], $_GET["foreign"], $_GET["trigger"])), (is_view($status) ? "view" : ""), "structure")
. " title='" . lang('Show structure') . "'>$name</a>"
: "<span>$name</span>" : "<span>$name</span>"
) . "<br>\n"; ) . "<br>\n";
} }

View File

@@ -57,26 +57,26 @@ if ($auth) {
auth_error(lang('Too many unsuccessful logins, try again in %d minute(s).', ceil($next_attempt / 60))); auth_error(lang('Too many unsuccessful logins, try again in %d minute(s).', ceil($next_attempt / 60)));
} }
session_regenerate_id(); // defense against session fixation session_regenerate_id(); // defense against session fixation
$driver = $auth["driver"]; $vendor = $auth["driver"];
$server = $auth["server"]; $server = $auth["server"];
$username = $auth["username"]; $username = $auth["username"];
$password = (string) $auth["password"]; $password = (string) $auth["password"];
$db = $auth["db"]; $db = $auth["db"];
set_password($driver, $server, $username, $password); set_password($vendor, $server, $username, $password);
$_SESSION["db"][$driver][$server][$username][$db] = true; $_SESSION["db"][$vendor][$server][$username][$db] = true;
if ($auth["permanent"]) { if ($auth["permanent"]) {
$key = base64_encode($driver) . "-" . base64_encode($server) . "-" . base64_encode($username) . "-" . base64_encode($db); $key = base64_encode($vendor) . "-" . base64_encode($server) . "-" . base64_encode($username) . "-" . base64_encode($db);
$private = $adminer->permanentLogin(true); $private = $adminer->permanentLogin(true);
$permanent[$key] = "$key:" . base64_encode($private ? encrypt_string($password, $private) : ""); $permanent[$key] = "$key:" . base64_encode($private ? encrypt_string($password, $private) : "");
cookie("adminer_permanent", implode(" ", $permanent)); cookie("adminer_permanent", implode(" ", $permanent));
} }
if (count($_POST) == 1 // 1 - auth if (count($_POST) == 1 // 1 - auth
|| DRIVER != $driver || DRIVER != $vendor
|| SERVER != $server || SERVER != $server
|| $_GET["username"] !== $username // "0" == "00" || $_GET["username"] !== $username // "0" == "00"
|| DB != $db || DB != $db
) { ) {
redirect(auth_url($driver, $server, $username, $db)); redirect(auth_url($vendor, $server, $username, $db));
} }
} elseif ($_POST["logout"]) { } elseif ($_POST["logout"]) {
@@ -114,12 +114,16 @@ function unset_permanent() {
cookie("adminer_permanent", implode(" ", $permanent)); cookie("adminer_permanent", implode(" ", $permanent));
} }
/** Renders an error message and a login form
* @param string plain text
* @return null exits
*/
function auth_error($error) { function auth_error($error) {
global $adminer, $has_token; global $adminer, $has_token;
$error = h($error);
$session_name = session_name(); $session_name = session_name();
if (!$_COOKIE[$session_name] && $_GET[$session_name] && ini_bool("session.use_only_cookies")) { if (isset($_GET["username"])) {
$error = lang('Session support must be enabled.'); header("HTTP/1.1 403 Forbidden"); // 401 requires sending WWW-Authenticate header
} elseif (isset($_GET["username"])) {
if (($_COOKIE[$session_name] || $_GET[$session_name]) && !$has_token) { if (($_COOKIE[$session_name] || $_GET[$session_name]) && !$has_token) {
$error = lang('Session expired, please login again.'); $error = lang('Session expired, please login again.');
} else { } else {
@@ -134,6 +138,9 @@ function auth_error($error) {
unset_permanent(); unset_permanent();
} }
} }
if (!$_COOKIE[$session_name] && $_GET[$session_name] && ini_bool("session.use_only_cookies")) {
$error = lang('Session support must be enabled.');
}
$params = session_get_cookie_params(); $params = session_get_cookie_params();
cookie("adminer_key", ($_COOKIE["adminer_key"] ? $_COOKIE["adminer_key"] : rand_string()), $params["lifetime"]); cookie("adminer_key", ($_COOKIE["adminer_key"] ? $_COOKIE["adminer_key"] : rand_string()), $params["lifetime"]);
page_header(lang('Login'), $error, null); page_header(lang('Login'), $error, null);
@@ -184,7 +191,7 @@ if ($_POST) {
} }
$error = (!$_POST["token"] && $max_vars $error = (!$_POST["token"] && $max_vars
? lang('Maximum number of allowed fields exceeded. Please increase %s.', "'$ini'") ? lang('Maximum number of allowed fields exceeded. Please increase %s.', "'$ini'")
: lang('Invalid CSRF token. Send the form again.') : lang('Invalid CSRF token. Send the form again.') . ' ' . lang('If you did not send this request from Adminer then close this page.')
); );
} }

View File

@@ -64,6 +64,7 @@ include "../adminer/drivers/sqlite.inc.php";
include "../adminer/drivers/pgsql.inc.php"; include "../adminer/drivers/pgsql.inc.php";
include "../adminer/drivers/oracle.inc.php"; include "../adminer/drivers/oracle.inc.php";
include "../adminer/drivers/mssql.inc.php"; include "../adminer/drivers/mssql.inc.php";
include "../adminer/drivers/firebird.inc.php";
include "../adminer/drivers/simpledb.inc.php"; include "../adminer/drivers/simpledb.inc.php";
include "../adminer/drivers/mongo.inc.php"; include "../adminer/drivers/mongo.inc.php";
include "../adminer/drivers/elastic.inc.php"; include "../adminer/drivers/elastic.inc.php";

View File

@@ -9,6 +9,10 @@
function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") { function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
global $LANG, $VERSION, $adminer, $drivers, $jush; global $LANG, $VERSION, $adminer, $drivers, $jush;
page_headers(); page_headers();
if (is_ajax() && $error) {
page_messages($error);
exit;
}
$title_all = $title . ($title2 != "" ? ": $title2" : ""); $title_all = $title . ($title2 != "" ? ": $title2" : "");
$title_page = strip_tags($title_all . (SERVER != "" && SERVER != "localhost" ? h(" - " . SERVER) : "") . " - " . $adminer->name()); $title_page = strip_tags($title_all . (SERVER != "" && SERVER != "localhost" ? h(" - " . SERVER) : "") . " - " . $adminer->name());
?> ?>
@@ -17,6 +21,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Script-Type" content="text/javascript">
<meta name="robots" content="noindex"> <meta name="robots" content="noindex">
<meta name="referrer" content="never">
<title><?php echo $title_page; ?></title> <title><?php echo $title_page; ?></title>
<link rel="stylesheet" type="text/css" href="../adminer/static/default.css"> <link rel="stylesheet" type="text/css" href="../adminer/static/default.css">
<script type="text/javascript" src="../adminer/static/functions.js"></script> <script type="text/javascript" src="../adminer/static/functions.js"></script>
@@ -32,6 +37,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
<body class="<?php echo lang('ltr'); ?> nojs" onkeydown="bodyKeydown(event);" onclick="bodyClick(event);"<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " onload=\"verifyVersion('$VERSION');\""); ?>> <body class="<?php echo lang('ltr'); ?> nojs" onkeydown="bodyKeydown(event);" onclick="bodyClick(event);"<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " onload=\"verifyVersion('$VERSION');\""); ?>>
<script type="text/javascript"> <script type="text/javascript">
document.body.className = document.body.className.replace(/ nojs/, ' js'); document.body.className = document.body.className.replace(/ nojs/, ' js');
var offlineMessage = '<?php echo js_escape(lang('You are offline.')); ?>';
</script> </script>
<div id="help" class="jush-<?php echo $jush; ?> jsonly hidden" onmouseover="helpOpen = 1;" onmouseout="helpMouseout(this, event);"></div> <div id="help" class="jush-<?php echo $jush; ?> jsonly hidden" onmouseover="helpOpen = 1;" onmouseout="helpMouseout(this, event);"></div>
@@ -65,6 +71,7 @@ document.body.className = document.body.className.replace(/ nojs/, ' js');
} }
} }
echo "<h2>$title_all</h2>\n"; echo "<h2>$title_all</h2>\n";
echo "<div id='ajaxstatus' class='jsonly hidden'></div>\n";
restart_session(); restart_session();
page_messages($error); page_messages($error);
$databases = &get_session("dbs"); $databases = &get_session("dbs");

View File

@@ -10,14 +10,6 @@
$this->_conn = $connection; $this->_conn = $connection;
} }
/** Quote a SQL string or null value
* @param string
* @return string
*/
function quote($value) {
return ($value === null ? "NULL" : $this->_conn->quote($value));
}
/** Select data from table /** Select data from table
* @param string * @param string
* @param array result of $adminer->selectColumnsProcess()[0] * @param array result of $adminer->selectColumnsProcess()[0]

View File

@@ -3,9 +3,10 @@
* @param Min_Result * @param Min_Result
* @param Min_DB connection to examine indexes * @param Min_DB connection to examine indexes
* @param array * @param array
* @param int
* @return array $orgtables * @return array $orgtables
*/ */
function select($result, $connection2 = null, $orgtables = array()) { function select($result, $connection2 = null, $orgtables = array(), $limit = 0) {
global $jush; global $jush;
$links = array(); // colno => orgtable - create links from these columns $links = array(); // colno => orgtable - create links from these columns
$indexes = array(); // orgtable => array(column => colno) - primary keys $indexes = array(); // orgtable => array(column => colno) - primary keys
@@ -14,7 +15,7 @@ function select($result, $connection2 = null, $orgtables = array()) {
$types = array(); // colno => type - display char in <code> $types = array(); // colno => type - display char in <code>
$return = array(); // table => orgtable - mapping to use in EXPLAIN $return = array(); // table => orgtable - mapping to use in EXPLAIN
odd(''); // reset odd for each result odd(''); // reset odd for each result
for ($i=0; $row = $result->fetch_row(); $i++) { for ($i=0; (!$limit || $i < $limit) && ($row = $result->fetch_row()); $i++) {
if (!$i) { if (!$i) {
echo "<table cellspacing='0' class='nowrap'>\n"; echo "<table cellspacing='0' class='nowrap'>\n";
echo "<thead><tr>"; echo "<thead><tr>";
@@ -196,6 +197,7 @@ function process_field($field, $type_field) {
($field["null"] ? " NULL" : " NOT NULL"), // NULL for timestamp ($field["null"] ? " NULL" : " NOT NULL"), // NULL for timestamp
(isset($default) ? " DEFAULT " . ( (isset($default) ? " DEFAULT " . (
(preg_match('~time~', $field["type"]) && preg_match('~^CURRENT_TIMESTAMP$~i', $default)) (preg_match('~time~', $field["type"]) && preg_match('~^CURRENT_TIMESTAMP$~i', $default))
|| ($jush == "sqlite" && preg_match('~^CURRENT_(TIME|TIMESTAMP|DATE)$~i', $default))
|| ($field["type"] == "bit" && preg_match("~^([0-9]+|b'[0-1]+')\$~", $default)) || ($field["type"] == "bit" && preg_match("~^([0-9]+|b'[0-1]+')\$~", $default))
|| ($jush == "pgsql" && preg_match("~^[a-z]+\\(('[^']*')+\\)\$~", $default)) || ($jush == "pgsql" && preg_match("~^[a-z]+\\(('[^']*')+\\)\$~", $default))
? $default : q($default)) : ""), ? $default : q($default)) : ""),
@@ -247,7 +249,7 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
'pgsql' => "datatype.html#DATATYPE-SERIAL", 'pgsql' => "datatype.html#DATATYPE-SERIAL",
'mssql' => "ms186775.aspx", 'mssql' => "ms186775.aspx",
)); ?> )); ?>
<td><?php echo lang('Default values'); ?> <td><?php echo lang('Default value'); ?>
<?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . ">" . lang('Comment') : ""); ?> <?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . ">" . lang('Comment') : ""); ?>
<?php } ?> <?php } ?>
<td><?php echo "<input type='image' class='icon' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script> <td><?php echo "<input type='image' class='icon' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script>

View File

@@ -33,6 +33,14 @@ function escape_string($val) {
return substr(q($val), 1, -1); return substr(q($val), 1, -1);
} }
/** Remove non-digits from a string
* @param string
* @return string
*/
function number($val) {
return preg_replace('~[^0-9]+~', '', $val);
}
/** Disable magic_quotes_gpc /** Disable magic_quotes_gpc
* @param array e.g. (&$_GET, &$_POST, &$_COOKIE) * @param array e.g. (&$_GET, &$_POST, &$_COOKIE)
* @param bool whether to leave values as is * @param bool whether to leave values as is
@@ -65,12 +73,20 @@ function bracket_escape($idf, $back = false) {
return strtr($idf, ($back ? array_flip($trans) : $trans)); return strtr($idf, ($back ? array_flip($trans) : $trans));
} }
/** Get connection charset
* @param Min_DB
* @return string
*/
function charset($connection) {
return (version_compare($connection->server_info, "5.5.3") >= 0 ? "utf8mb4" : "utf8"); // SHOW CHARSET would require an extra query
}
/** Escape for HTML /** Escape for HTML
* @param string * @param string
* @return string * @return string
*/ */
function h($string) { function h($string) {
return htmlspecialchars(str_replace("\0", "", $string), ENT_QUOTES); return str_replace("\0", "&#0;", htmlspecialchars($string, ENT_QUOTES, 'utf-8'));
} }
/** Escape for TD /** Escape for TD
@@ -277,13 +293,13 @@ function get_password() {
return $return; return $return;
} }
/** Shortcut for $driver->quote($string) /** Shortcut for $connection->quote($string)
* @param string * @param string
* @return string * @return string
*/ */
function q($string) { function q($string) {
global $driver; global $connection;
return $driver->quote($string); return $connection->quote($string);
} }
/** Get list of values from database /** Get list of values from database
@@ -367,18 +383,28 @@ function unique_array($row, $indexes) {
} }
} }
/** Escape column key used in where()
* @param string
* @return string
*/
function escape_key($key) {
if (preg_match('(^([\w(]+)(' . str_replace("_", ".*", preg_quote(idf_escape("_"))) . ')([ \w)]+)$)', $key, $match)) { //! columns looking like functions
return $match[1] . idf_escape(idf_unescape($match[2])) . $match[3]; //! SQL injection
}
return idf_escape($key);
}
/** Create SQL condition from parsed query string /** Create SQL condition from parsed query string
* @param array parsed query string * @param array parsed query string
* @param array * @param array
* @return string * @return string
*/ */
function where($where, $fields = array()) { function where($where, $fields = array()) {
global $jush; global $connection, $jush;
$return = array(); $return = array();
$function_pattern = '(^[\w\(]+(' . str_replace("_", ".*", preg_quote(idf_escape("_"))) . ')?\)+$)'; //! columns looking like functions
foreach ((array) $where["where"] as $key => $val) { foreach ((array) $where["where"] as $key => $val) {
$key = bracket_escape($key, 1); // 1 - back $key = bracket_escape($key, 1); // 1 - back
$column = (preg_match($function_pattern, $key) ? $key : idf_escape($key)); //! SQL injection $column = escape_key($key);
$return[] = $column $return[] = $column
. (($jush == "sql" && preg_match('~^[0-9]*\\.[0-9]*$~', $val)) || $jush == "mssql" . (($jush == "sql" && preg_match('~^[0-9]*\\.[0-9]*$~', $val)) || $jush == "mssql"
? " LIKE " . q(addcslashes($val, "%_\\")) ? " LIKE " . q(addcslashes($val, "%_\\"))
@@ -386,11 +412,11 @@ function where($where, $fields = array()) {
) // LIKE because of floats but slow with ints, in MS SQL because of text ) // LIKE because of floats but slow with ints, in MS SQL because of text
; //! enum and set ; //! enum and set
if ($jush == "sql" && preg_match('~char|text~', $fields[$key]["type"]) && preg_match("~[^ -@]~", $val)) { // not just [a-z] to catch non-ASCII characters if ($jush == "sql" && preg_match('~char|text~', $fields[$key]["type"]) && preg_match("~[^ -@]~", $val)) { // not just [a-z] to catch non-ASCII characters
$return[] = "$column = " . q($val) . " COLLATE utf8_bin"; $return[] = "$column = " . q($val) . " COLLATE " . charset($connection) . "_bin";
} }
} }
foreach ((array) $where["null"] as $key) { foreach ((array) $where["null"] as $key) {
$return[] = (preg_match($function_pattern, $key) ? $key : idf_escape($key)) . " IS NULL"; $return[] = escape_key($key) . " IS NULL";
} }
return implode(" AND ", $return); return implode(" AND ", $return);
} }
@@ -546,6 +572,7 @@ function redirect($location, $message = null) {
* @param bool * @param bool
* @param bool * @param bool
* @param bool * @param bool
* @param string
* @return bool * @return bool
*/ */
function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false, $time = "") { function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false, $time = "") {
@@ -918,7 +945,7 @@ function process_input($field) {
return ($field["on_update"] == "CURRENT_TIMESTAMP" ? idf_escape($field["field"]) : false); return ($field["on_update"] == "CURRENT_TIMESTAMP" ? idf_escape($field["field"]) : false);
} }
if ($function == "NULL") { if ($function == "NULL") {
$value = null; return "NULL";
} }
if ($field["type"] == "set") { if ($field["type"] == "set") {
return array_sum((array) $value); return array_sum((array) $value);
@@ -1066,6 +1093,7 @@ function password_file($create) {
} }
$fp = @fopen($filename, "w"); // @ - can have insufficient rights //! is not atomic $fp = @fopen($filename, "w"); // @ - can have insufficient rights //! is not atomic
if ($fp) { if ($fp) {
chmod($filename, 0660);
$return = rand_string(); $return = rand_string();
fwrite($fp, $return); fwrite($fp, $return);
fclose($fp); fclose($fp);
@@ -1117,7 +1145,9 @@ function select_value($val, $link, $field, $text_length) {
if ($return !== null) { if ($return !== null) {
if ($return === "") { // === - may be int if ($return === "") { // === - may be int
$return = "&nbsp;"; $return = "&nbsp;";
} elseif ($text_length != "" && is_shortable($field) && is_utf8($return)) { } elseif (!is_utf8($return)) {
$return = "\0"; // htmlspecialchars of binary data returns an empty string
} elseif ($text_length != "" && is_shortable($field)) {
$return = shorten_utf8($return, max(0, +$text_length)); // usage of LEFT() would reduce traffic but complicate query - expected average speedup: .001 s VS .01 s on local network $return = shorten_utf8($return, max(0, +$text_length)); // usage of LEFT() would reduce traffic but complicate query - expected average speedup: .001 s VS .01 s on local network
} else { } else {
$return = h($return); $return = h($return);
@@ -1285,7 +1315,6 @@ function edit_form($TABLE, $fields, $row, $update) {
echo "<p class='error'>" . lang('No rows.') . "\n"; echo "<p class='error'>" . lang('No rows.') . "\n";
} }
?> ?>
<div id="message"></div>
<form action="" method="post" enctype="multipart/form-data" id="form"> <form action="" method="post" enctype="multipart/form-data" id="form">
<?php <?php
if (!$fields) { if (!$fields) {

View File

@@ -7,10 +7,11 @@ $langs = array(
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com 'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com
'ca' => 'Català', // Joan Llosas 'ca' => 'Català', // Joan Llosas
'cs' => 'Čeština', // Jakub Vrána - http://www.vrana.cz 'cs' => 'Čeština', // Jakub Vrána - http://www.vrana.cz
'da' => 'Dansk', // Jarne W. Beutnagel - jarne@beutnagel.dk
'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com 'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com 'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com
'et' => 'Eesti', // Priit Kallas 'et' => 'Eesti', // Priit Kallas
'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com 'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com, Nima Amini - http://nimlog.com
'fr' => 'Français', // Francis Gagné, Aurélien Royer 'fr' => 'Français', // Francis Gagné, Aurélien Royer
'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu 'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org 'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org

View File

@@ -1,2 +1,2 @@
<?php <?php
$VERSION = "4.1.0"; $VERSION = "4.2.0";

View File

@@ -30,7 +30,6 @@ $translations = array(
'Alter database' => 'تعديل قاعدة البيانات', 'Alter database' => 'تعديل قاعدة البيانات',
'Create database' => 'إنشاء قاعدة بيانات', 'Create database' => 'إنشاء قاعدة بيانات',
'SQL command' => 'إستعلام SQL', 'SQL command' => 'إستعلام SQL',
'Dump' => 'تصدير',
'Logout' => 'تسجيل الخروج', 'Logout' => 'تسجيل الخروج',
'database' => 'قاعدة بيانات', 'database' => 'قاعدة بيانات',
'Use' => 'المستعمل', 'Use' => 'المستعمل',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'ডাটাবেজ সম্পাদনা', 'Alter database' => 'ডাটাবেজ সম্পাদনা',
'Create database' => 'ডাটাবেজ তৈরী', 'Create database' => 'ডাটাবেজ তৈরী',
'SQL command' => 'SQL-কোয়্যারী', 'SQL command' => 'SQL-কোয়্যারী',
'Dump' => 'এক্সপোর্ট',
'Logout' => 'লগআউট', 'Logout' => 'লগআউট',
'database' => 'ডাটাবেজ', 'database' => 'ডাটাবেজ',
'Use' => 'ব্যবহার', 'Use' => 'ব্যবহার',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'Modifica la base de dades', 'Alter database' => 'Modifica la base de dades',
'Create database' => 'Crea una base de dades', 'Create database' => 'Crea una base de dades',
'SQL command' => 'Ordre SQL', 'SQL command' => 'Ordre SQL',
'Dump' => 'Exporta',
'Logout' => 'Desconnecta', 'Logout' => 'Desconnecta',
'database' => 'base de dades', 'database' => 'base de dades',
'Use' => 'Utilitza', 'Use' => 'Utilitza',

View File

@@ -15,6 +15,7 @@ $translations = array(
'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Platnost hlavního hesla vypršela. <a href="http://www.adminer.org/cs/extension/" target="_blank">Implementujte</a> metodu %s, aby platilo stále.', 'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Platnost hlavního hesla vypršela. <a href="http://www.adminer.org/cs/extension/" target="_blank">Implementujte</a> metodu %s, aby platilo stále.',
'Language' => 'Jazyk', 'Language' => 'Jazyk',
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.', 'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.',
'If you did not send this request from Adminer then close this page.' => 'Pokud jste tento požadavek neposlali z Adminera, tak tuto stránku zavřete.',
'No extension' => 'Žádné rozšíření', 'No extension' => 'Žádné rozšíření',
'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).', 'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).',
'Session support must be enabled.' => 'Session proměnné musí být povolené.', 'Session support must be enabled.' => 'Session proměnné musí být povolené.',
@@ -67,9 +68,9 @@ $translations = array(
'Maximum allowed file size is %sB.' => 'Maximální povolená velikost souboru je %sB.', 'Maximum allowed file size is %sB.' => 'Maximální povolená velikost souboru je %sB.',
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Příliš velká POST data. Zmenšete data nebo zvyšte hodnotu konfigurační direktivy %s.', 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Příliš velká POST data. Zmenšete data nebo zvyšte hodnotu konfigurační direktivy %s.',
'You can upload a big SQL file via FTP and import it from server.' => 'Velký SQL soubor můžete nahrát pomocí FTP a importovat ho ze serveru.', 'You can upload a big SQL file via FTP and import it from server.' => 'Velký SQL soubor můžete nahrát pomocí FTP a importovat ho ze serveru.',
'You are offline.' => 'Jste offline.',
'Export' => 'Export', 'Export' => 'Export',
'Dump' => 'Export',
'Output' => 'Výstup', 'Output' => 'Výstup',
'open' => 'otevřít', 'open' => 'otevřít',
'save' => 'uložit', 'save' => 'uložit',
@@ -164,6 +165,7 @@ $translations = array(
'Auto Increment' => 'Auto Increment', 'Auto Increment' => 'Auto Increment',
'Options' => 'Volby', 'Options' => 'Volby',
'Comment' => 'Komentář', 'Comment' => 'Komentář',
'Default value' => 'Výchozí hodnota',
'Default values' => 'Výchozí hodnoty', 'Default values' => 'Výchozí hodnoty',
'Drop' => 'Odstranit', 'Drop' => 'Odstranit',
'Are you sure?' => 'Opravdu?', 'Are you sure?' => 'Opravdu?',
@@ -180,11 +182,13 @@ $translations = array(
'Values' => 'Hodnoty', 'Values' => 'Hodnoty',
'View' => 'Pohled', 'View' => 'Pohled',
'Materialized View' => 'Materializovaný pohled',
'View has been dropped.' => 'Pohled byl odstraněn.', 'View has been dropped.' => 'Pohled byl odstraněn.',
'View has been altered.' => 'Pohled byl změněn.', 'View has been altered.' => 'Pohled byl změněn.',
'View has been created.' => 'Pohled byl vytvořen.', 'View has been created.' => 'Pohled byl vytvořen.',
'Alter view' => 'Pozměnit pohled', 'Alter view' => 'Pozměnit pohled',
'Create view' => 'Vytvořit pohled', 'Create view' => 'Vytvořit pohled',
'Create materialized view' => 'Vytvořit materializovaný pohled',
'Indexes' => 'Indexy', 'Indexes' => 'Indexy',
'Indexes have been altered.' => 'Indexy byly změněny.', 'Indexes have been altered.' => 'Indexy byly změněny.',
@@ -231,11 +235,13 @@ $translations = array(
'Sort' => 'Seřadit', 'Sort' => 'Seřadit',
'descending' => 'sestupně', 'descending' => 'sestupně',
'Limit' => 'Limit', 'Limit' => 'Limit',
'Limit rows' => 'Limit řádek',
'Text length' => 'Délka textů', 'Text length' => 'Délka textů',
'Action' => 'Akce', 'Action' => 'Akce',
'Full table scan' => 'Průchod celé tabulky', 'Full table scan' => 'Průchod celé tabulky',
'Unable to select the table' => 'Nepodařilo se vypsat tabulku', 'Unable to select the table' => 'Nepodařilo se vypsat tabulku',
'No rows.' => 'Žádné řádky.', 'No rows.' => 'Žádné řádky.',
'%d / ' => '%d / ',
'%d row(s)' => array('%d řádek', '%d řádky', '%d řádků'), '%d row(s)' => array('%d řádek', '%d řádky', '%d řádků'),
'Page' => 'Stránka', 'Page' => 'Stránka',
'last' => 'poslední', 'last' => 'poslední',

283
adminer/lang/da.inc.php Normal file
View File

@@ -0,0 +1,283 @@
<?php
$translations = array(
'System' => 'System',
'Server' => 'Server',
'Username' => 'Brugernavn',
'Password' => 'Kodeord',
'Permanent login' => 'Permanent login',
'Login' => 'Log ind',
'Logout' => 'Log ud',
'Logged as: %s' => 'Logget ind som: %s',
'Logout successful.' => 'Log af vellykket.',
'Invalid credentials.' => 'Ugyldige log ind oplysninger.',
'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Master-kodeordet er udløbet. <a href="http://www.adminer.org/en/extension/" target="_blank">Implementer</a> en metode for %s for at gøre det permanent.',
'Language' => 'Sprog',
'Invalid CSRF token. Send the form again.' => 'Ugyldigt CSRF-token - Genindsend formen.',
'No extension' => 'Ingen udvidelse',
'None of the supported PHP extensions (%s) are available.' => 'Ingen af de understøttede PHP-udvidelser (%s) er tilgængelige.',
'Session support must be enabled.' => 'Session support skal være slået til.',
'Session expired, please login again.' => 'Sessionen er udløbet - Log venligst ind igen.',
'%s version: %s through PHP extension %s' => '%s version: %s via PHP-udvidelse %s',
'Refresh' => 'Genindlæs',
'ltr' => 'ltr',
'Privileges' => 'Privilegier',
'Create user' => 'Opret bruger',
'User has been dropped.' => 'Brugeren slettet.',
'User has been altered.' => 'Brugeren ændret.',
'User has been created.' => 'Brugeren oprettet.',
'Hashed' => 'Hashet',
'Column' => 'Kolonne',
'Routine' => 'Rutine',
'Grant' => 'Giv privilegier',
'Revoke' => 'Træk tilbage',
'Process list' => 'Procesliste',
'%d process(es) have been killed.' => array('%d proces afsluttet.', '%d processer afsluttet.'),
'Kill' => 'Afslut',
'Variables' => 'Variabler',
'Status' => 'Status',
'SQL command' => 'SQL-kommando',
'%d query(s) executed OK.' => array('%d kald udført OK.', '%d kald udført OK.'),
'Query executed OK, %d row(s) affected.' => array('Kald udført OK, %d række påvirket.', 'Kald udført OK, %d rækker påvirket.'),
'No commands to execute.' => 'Ingen kommandoer at udføre.',
'Error in query' => 'Fejl i forespørgelse',
'Execute' => 'Kør',
'Stop on error' => 'Stop ved fejl',
'Show only errors' => 'Vis kun fejl',
'%.3f s' => '%.3f s',
'History' => 'Historik',
'Clear' => 'Tøm',
'Edit all' => 'Rediger alle',
'File upload' => 'Fil upload',
'From server' => 'Fra server',
'Webserver file %s' => 'Webserver-fil %s',
'Run file' => 'Kør fil',
'File does not exist.' => 'Filen eksisterer ikke.',
'File uploads are disabled.' => 'Fil upload er slået fra.',
'Unable to upload a file.' => 'Kunne ikke uploade fil.',
'Maximum allowed file size is %sB.' => 'Maksimum tilladte filstørrelse er %sB.',
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Maks POST data er overskredet. Reducer mængden af data eller øg størrelsen i %s-konfigurationen.',
'You can upload a big SQL file via FTP and import it from server.' => 'Du kan uploade en stor SQL-fil via FTP og importere den fra serveren.',
'Export' => 'Eksport',
'Output' => 'Resultat',
'open' => 'Åben',
'save' => 'Gem',
'Format' => 'Format',
'Data' => 'Data',
'Database' => 'Database',
'database' => 'database',
'Use' => 'Brug',
'Select database' => 'Vælg database',
'Invalid database.' => 'Ugyldig database.',
'Create new database' => 'Opret ny database',
'Database has been dropped.' => 'Databasen er blevet slettet.',
'Databases have been dropped.' => 'Databasene er blevet slettet.',
'Database has been created.' => 'Databasen er oprettet.',
'Database has been renamed.' => 'Databasen har fået nyt navn.',
'Database has been altered.' => 'Databasen er ændret.',
'Alter database' => 'Ændre database',
'Create database' => 'Opret database',
'Database schema' => 'Databaseskema',
'Permanent link' => 'Permanent link',
',' => ' ',
'0123456789' => '0123456789',
'Engine' => 'Motor',
'Collation' => 'Tekstsortering',
'Data Length' => 'Datalængde',
'Index Length' => 'Indekslængde',
'Data Free' => 'Fri data',
'Rows' => 'Rader',
'%d in total' => '%d total',
'Analyze' => 'Analyser',
'Optimize' => 'Optimaliser',
'Vacuum' => 'Støvsug',
'Check' => 'Tjek',
'Repair' => 'Reparer',
'Truncate' => 'Afkort',
'Tables have been truncated.' => 'Tabellerne er blevet afkortet.',
'Move to other database' => 'Flyt til anden database',
'Move' => 'Flyt',
'Tables have been moved.' => 'Tabellerne er blevet flyttet.',
'Copy' => 'Kopier',
'Tables have been copied.' => 'Tabellerne er blevet kopiert.',
'Routines' => 'Rutiner',
'Routine has been called, %d row(s) affected.' => array('Rutinen er udført, %d række påvirket.', 'Rutinen er udført, %d rækker påvirket.'),
'Call' => 'Kald',
'Parameter name' => 'Parameternavn',
'Create procedure' => 'Opret procedure',
'Create function' => 'Opret funktion',
'Routine has been dropped.' => 'Rutinen er slettet.',
'Routine has been altered.' => 'Rutinen er ændret.',
'Routine has been created.' => 'Rutinen er oprettet.',
'Alter function' => 'Ændre funktion',
'Alter procedure' => 'Ændre procedure',
'Return type' => 'Returtype',
'Events' => 'Hændelser',
'Event has been dropped.' => 'Hændelsen er slettet.',
'Event has been altered.' => 'Hændelsen er ændret.',
'Event has been created.' => 'Hændelsen er oprettet.',
'Alter event' => 'Ændre hændelse',
'Create event' => 'Opret hændelse',
'At given time' => 'På givne tid',
'Every' => 'Hver',
'Schedule' => 'Tidsplan',
'Start' => 'Start',
'End' => 'Slut',
'On completion preserve' => 'Ved fuldførelse bevar',
'Tables' => 'Tabeller',
'Tables and views' => 'Tabeller og views',
'Table' => 'Tabel',
'No tables.' => 'Ingen tabeller.',
'Alter table' => 'Ændre tabel',
'Create table' => 'Opret tabel',
'Table has been dropped.' => 'Tabellen er slettet.',
'Tables have been dropped.' => 'Tabellerne er slettet.',
'Tables have been optimized.' => 'Tabellerne er blevet optimaliseret.',
'Table has been altered.' => 'Tabellen er ændret.',
'Table has been created.' => 'Tabellen er oprettet.',
'Table name' => 'Tabelnavn',
'Show structure' => 'Vis struktur',
'engine' => 'motor',
'collation' => 'sortering',
'Column name' => 'Kolonnenavn',
'Type' => 'Type',
'Length' => 'Længde',
'Auto Increment' => 'Auto Increment',
'Options' => 'Valg',
'Comment' => 'Kommentarer',
'Default values' => 'Standardværdier',
'Drop' => 'Drop',
'Are you sure?' => 'Er du sikker?',
'Move up' => 'Flyt op',
'Move down' => 'Flyt ned',
'Remove' => 'Fjern',
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maksimum antal feltnavne overskredet - øg venligst %s.',
'Partition by' => 'Partition ved',
'Partitions' => 'Partitioner',
'Partition name' => 'Partitionsnavn',
'Values' => 'Værdier',
'View' => 'View',
'View has been dropped.' => 'Viewet er slettet.',
'View has been altered.' => 'Viewet er ændret.',
'View has been created.' => 'Viewet er oprettet.',
'Alter view' => 'Ændre view',
'Create view' => 'Nyt view',
'Indexes' => 'Indekser',
'Indexes have been altered.' => 'Indekserne er ændret.',
'Alter indexes' => 'Ændre indekser',
'Add next' => 'Læg til næste',
'Index Type' => 'Indekstype',
'Column (length)' => 'Kolonne (længde)',
'Foreign keys' => 'Fremmednøgler',
'Foreign key' => 'Fremmednøgle',
'Foreign key has been dropped.' => 'Fremmednøglen er slettet.',
'Foreign key has been altered.' => 'Fremmednøglen er ændret.',
'Foreign key has been created.' => 'Fremmednøglen er oprettet.',
'Target table' => 'Måltabel',
'Change' => 'Ændre',
'Source' => 'Kilde',
'Target' => 'Mål',
'Add column' => 'Tilføj kolonne',
'Alter' => 'Ændre',
'Add foreign key' => 'Tilføj fremmednøgle',
'ON DELETE' => 'ON DELETE',
'ON UPDATE' => 'ON UPDATE',
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kilde- og målkolonner skal have samme datatype, der skal være en indeks på mål-kolonnen, og data som refereres til skal eksistere.',
'Triggers' => 'Triggere',
'Add trigger' => 'Tilføj trigger',
'Trigger has been dropped.' => 'Triggeren er slettet.',
'Trigger has been altered.' => 'Triggeren er ændret.',
'Trigger has been created.' => 'Triggeren er oprettet.',
'Alter trigger' => 'Ændre trigger',
'Create trigger' => 'Opret trigger',
'Time' => 'Tid',
'Event' => 'Hændelse',
'Name' => 'Navn',
'select' => 'Vis',
'Select' => 'Vælg',
'Select data' => 'Vælg data',
'Functions' => 'Funktioner',
'Aggregation' => 'Sammenfatning',
'Search' => 'Søg',
'anywhere' => 'hvorsomhelst',
'Search data in tables' => 'Søg data i tabeller',
'Sort' => 'Sorter',
'descending' => 'faldende',
'Limit' => 'Limit',
'Text length' => 'Tekstlængde',
'Action' => 'Handling',
'Full table scan' => 'Fuld tabel-scan',
'Unable to select the table' => 'Kan ikke vælge tabellen',
'No rows.' => 'Ingen rækker.',
'%d row(s)' => array('%d række', '%d rækker'),
'Page' => 'Side',
'last' => 'sidste',
'Load more data' => 'Indlæs mere data',
'Loading' => 'Indlæser',
'whole result' => 'hele resultatet',
'%d byte(s)' => array('%d byte', '%d bytes'),
'Import' => 'Importer',
'%d row(s) have been imported.' => array('%d række er importeret.', '%d rækker er importeret.'),
'File must be in UTF-8 encoding.' => 'Filen skal være i UTF8-tegnkoding.',
'Modify' => 'Ændre',
'Ctrl+click on a value to modify it.' => 'Ctrl+klik på en værdi for at ændre den.',
'Use edit link to modify this value.' => 'Brug rediger-link for at ændre dennne værdi.',
'Item%s has been inserted.' => 'Emne%s er sat ind.',
'Item has been deleted.' => 'Emnet er slettet.',
'Item has been updated.' => 'Emnet er opdateret.',
'%d item(s) have been affected.' => array('%d emne påvirket.', '%d emner påvirket.'),
'New item' => 'Nyt emne',
'original' => 'original',
'empty' => 'tom',
'edit' => 'rediger',
'Edit' => 'Rediger',
'Insert' => 'Indsæt',
'Save' => 'Gem',
'Save and continue edit' => 'Gem og fortsæt redigering',
'Save and insert next' => 'Gem og indsæt næste',
'Selected' => 'Valgt',
'Clone' => 'Klon',
'Delete' => 'Slet',
'You have no privileges to update this table.' => 'Du mangler rettigheder til at ændre denne tabellen.',
'E-mail' => 'E-mail',
'From' => 'Fra',
'Subject' => 'Titel',
'Attachments' => 'Vedhæft',
'Send' => 'Send',
'%d e-mail(s) have been sent.' => array('%d email sendt.', '%d emails sendt.'),
'Numbers' => 'Nummer',
'Date and time' => 'Dato og tid',
'Strings' => 'Strenge',
'Binary' => 'Binær',
'Lists' => 'Lister',
'Network' => 'Netværk',
'Geometry' => 'Geometri',
'Relations' => 'Relationer',
'Editor' => 'Redigering',
'$1-$3-$5' => '$6/$4 $1',
'[yyyy]-mm-dd' => 'd/m [åååå]',
'HH:MM:SS' => 'HH:MM:SS',
'now' => 'nu',
'yes' => 'ja',
'no' => 'nej',
'File exists.' => 'Filen findes.',
'Please use one of the extensions %s.' => 'Brug venligst en af filendelserne %s.',
'Alter schema' => 'Ændre skema',
'Create schema' => 'Opret skema',
'Schema has been dropped.' => 'Skemaet er slettet.',
'Schema has been created.' => 'Skemaet er oprettet.',
'Schema has been altered.' => 'Skemaet er ændret.',
'Schema' => 'Skema',
'Invalid schema.' => 'Ugyldigt skema.',
'Sequences' => 'Sekvenser',
'Create sequence' => 'Opret sekvens',
'Sequence has been dropped.' => 'Sekvensen er slettet.',
'Sequence has been created.' => 'Sekvensen er oprettet.',
'Sequence has been altered.' => 'Sekvensen er ændret.',
'Alter sequence' => 'Ændre sekvens',
'User types' => 'Brugertyper',
'Create type' => 'Opret type',
'Type has been dropped.' => 'Typen er slettet.',
'Type has been created.' => 'Typen er oprettet.',
'Alter type' => 'Ændre type',
'Saving' => 'Gemmer',
);

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'Datenbank ändern', 'Alter database' => 'Datenbank ändern',
'Create database' => 'Neue Datenbank', 'Create database' => 'Neue Datenbank',
'SQL command' => 'SQL-Query', 'SQL command' => 'SQL-Query',
'Dump' => 'Export',
'Logout' => 'Abmelden', 'Logout' => 'Abmelden',
'database' => 'Datenbank', 'database' => 'Datenbank',
'Use' => 'Benutzung', 'Use' => 'Benutzung',

View File

@@ -5,6 +5,7 @@ $translations = array(
'%d byte(s)' => array('%d byte', '%d bytes'), '%d byte(s)' => array('%d byte', '%d bytes'),
'Routine has been called, %d row(s) affected.' => array('Routine has been called, %d row affected.', 'Routine has been called, %d rows affected.'), 'Routine has been called, %d row(s) affected.' => array('Routine has been called, %d row affected.', 'Routine has been called, %d rows affected.'),
'%d process(es) have been killed.' => array('%d process has been killed.', '%d processes have been killed.'), '%d process(es) have been killed.' => array('%d process has been killed.', '%d processes have been killed.'),
'%d / ' => '%d / ',
'%d row(s)' => array('%d row', '%d rows'), '%d row(s)' => array('%d row', '%d rows'),
'%d item(s) have been affected.' => array('%d item has been affected.', '%d items have been affected.'), '%d item(s) have been affected.' => array('%d item has been affected.', '%d items have been affected.'),
'%d row(s) have been imported.' => array('%d row has been imported.', '%d rows have been imported.'), '%d row(s) have been imported.' => array('%d row has been imported.', '%d rows have been imported.'),

View File

@@ -1,18 +1,18 @@
<?php <?php
$translations = array( $translations = array(
'Login' => 'Login', 'Login' => 'Login',
'Logout successful.' => 'Salida exitosa.', 'Logout successful.' => 'Sesión finalizada con éxito.',
'Invalid credentials.' => 'Identificacion inválida.', 'Invalid credentials.' => 'Usuario y/o clave de acceso incorrecta.',
'Server' => 'Servidor', 'Server' => 'Servidor',
'Username' => 'Usuario', 'Username' => 'Usuario',
'Password' => 'Contraseña', 'Password' => 'Contraseña',
'Select database' => 'Seleccionar Base de datos', 'Select database' => 'Seleccionar Base de datos',
'Invalid database.' => 'Base de datos inválida.', 'Invalid database.' => 'Base de datos incorrecta.',
'Create new database' => 'Ingrese nueva base de datos', 'Create new database' => 'Crear nueva base de datos',
'Table has been dropped.' => 'Tabla eliminada.', 'Table has been dropped.' => 'Tabla eliminada.',
'Table has been altered.' => 'Tabla modificada.', 'Table has been altered.' => 'Tabla modificada.',
'Table has been created.' => 'Tabla creada.', 'Table has been created.' => 'Tabla creada.',
'Alter table' => 'Modifique estructura', 'Alter table' => 'Modificar tabla',
'Create table' => 'Crear tabla', 'Create table' => 'Crear tabla',
'Table name' => 'Nombre de la tabla', 'Table name' => 'Nombre de la tabla',
'engine' => 'motor', 'engine' => 'motor',
@@ -31,8 +31,7 @@ $translations = array(
'Alter database' => 'Modificar Base de datos', 'Alter database' => 'Modificar Base de datos',
'Create database' => 'Crear Base de datos', 'Create database' => 'Crear Base de datos',
'SQL command' => 'Comando SQL', 'SQL command' => 'Comando SQL',
'Dump' => 'Export', 'Logout' => 'Cerrar sesión',
'Logout' => 'Logout',
'database' => 'base de datos', 'database' => 'base de datos',
'Use' => 'Usar', 'Use' => 'Usar',
'No tables.' => 'No existen tablas.', 'No tables.' => 'No existen tablas.',
@@ -42,11 +41,11 @@ $translations = array(
'Item%s has been inserted.' => 'Registro%s insertado.', 'Item%s has been inserted.' => 'Registro%s insertado.',
'Edit' => 'Modificar', 'Edit' => 'Modificar',
'Insert' => 'Agregar', 'Insert' => 'Agregar',
'Save and insert next' => 'Guardar e insertar otro', 'Save and insert next' => 'Guardar e insertar siguiente',
'Delete' => 'Eliminar', 'Delete' => 'Eliminar',
'Database' => 'Base de datos', 'Database' => 'Base de datos',
'Routines' => 'Procedimientos', 'Routines' => 'Procedimientos',
'Indexes have been altered.' => 'Indices modificados.', 'Indexes have been altered.' => 'Indices actualizados.',
'Indexes' => 'Indices', 'Indexes' => 'Indices',
'Alter indexes' => 'Modificar indices', 'Alter indexes' => 'Modificar indices',
'Add next' => 'Agregar', 'Add next' => 'Agregar',
@@ -56,33 +55,33 @@ $translations = array(
'Search' => 'Condición', 'Search' => 'Condición',
'Sort' => 'Ordenar', 'Sort' => 'Ordenar',
'descending' => 'descendiente', 'descending' => 'descendiente',
'Limit' => 'Limit', 'Limit' => 'Limite',
'No rows.' => 'No existen registros.', 'No rows.' => 'No existen registros.',
'Action' => 'Acción', 'Action' => 'Acción',
'edit' => 'modificar', 'edit' => 'modificar',
'Page' => 'Página', 'Page' => 'Página',
'Query executed OK, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'), 'Query executed OK, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'),
'Error in query' => 'Error en consulta', 'Error in query' => 'Error al ejecutar consulta',
'Execute' => 'Ejecutar', 'Execute' => 'Ejecutar',
'Table' => 'Tabla', 'Table' => 'Tabla',
'Foreign keys' => 'Claves foráneas', 'Foreign keys' => 'Claves externas',
'Triggers' => 'Triggers', 'Triggers' => 'Disparadores',
'View' => 'Vistas', 'View' => 'Vista',
'Unable to select the table' => 'No es posible seleccionar la tabla', 'Unable to select the table' => 'No es posible seleccionar la tabla',
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Vuelva a enviar los datos del formulario.', 'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Vuelva a enviar los datos del formulario.',
'Comment' => 'Comentario', 'Comment' => 'Comentario',
'Default values' => 'Valores predeterminados', 'Default values' => 'Valores predeterminados',
'%d byte(s)' => array('%d byte', '%d bytes'), '%d byte(s)' => array('%d byte', '%d bytes'),
'No commands to execute.' => 'No hay comando para ejecutar.', 'No commands to execute.' => 'No es posible ejecutar ningún comando.',
'Unable to upload a file.' => 'No es posible importar archivo.', 'Unable to upload a file.' => 'No es posible importar el archivo.',
'File upload' => 'Importar archivo', 'File upload' => 'Importar archivo',
'File uploads are disabled.' => 'Importación de archivos deshablilitado.', 'File uploads are disabled.' => 'Importación de archivos deshablilitada.',
'Routine has been called, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'), 'Routine has been called, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'),
'Call' => 'Llamar', 'Call' => 'Llamar',
'No extension' => 'No hay extension', 'No extension' => 'No hay extension',
'None of the supported PHP extensions (%s) are available.' => 'Ninguna de las extensiones PHP soportadas (%s) está disponible.', 'None of the supported PHP extensions (%s) are available.' => 'Ninguna de las extensiones PHP soportadas (%s) está disponible.',
'Session support must be enabled.' => 'Deben estar habilitadas las sesiones.', 'Session support must be enabled.' => 'Deben estar habilitadas las sesiones.',
'Session expired, please login again.' => 'Sesión expirada, por favor ingrese su clave de nuevo.', 'Session expired, please login again.' => 'Sesión caducada, por favor escriba su clave de nuevo.',
'Text length' => 'Longitud de texto', 'Text length' => 'Longitud de texto',
'Foreign key has been dropped.' => 'Clave externa eliminada.', 'Foreign key has been dropped.' => 'Clave externa eliminada.',
'Foreign key has been altered.' => 'Clave externa modificada.', 'Foreign key has been altered.' => 'Clave externa modificada.',
@@ -94,9 +93,9 @@ $translations = array(
'Target' => 'Destino', 'Target' => 'Destino',
'Add column' => 'Agregar columna', 'Add column' => 'Agregar columna',
'Alter' => 'Modificar', 'Alter' => 'Modificar',
'Add foreign key' => 'Agregar clave foránea', 'Add foreign key' => 'Agregar clave externa',
'ON DELETE' => 'ON DELETE', 'ON DELETE' => 'AL BORRAR',
'ON UPDATE' => 'ON UPDATE', 'ON UPDATE' => 'AL ACTUALIZAR',
'Index Type' => 'Tipo de índice', 'Index Type' => 'Tipo de índice',
'Column (length)' => 'Columna (longitud)', 'Column (length)' => 'Columna (longitud)',
'View has been dropped.' => 'Vista eliminada.', 'View has been dropped.' => 'Vista eliminada.',
@@ -117,16 +116,16 @@ $translations = array(
'Routine has been created.' => 'Procedimiento creado.', 'Routine has been created.' => 'Procedimiento creado.',
'Alter function' => 'Modificar Función', 'Alter function' => 'Modificar Función',
'Alter procedure' => 'Modificar procedimiento', 'Alter procedure' => 'Modificar procedimiento',
'Return type' => 'Tipo de valor de regreso', 'Return type' => 'Tipo de valor de vuelta',
'Add trigger' => 'Agregar trigger', 'Add trigger' => 'Agregar disparador',
'Trigger has been dropped.' => 'Trigger eliminado.', 'Trigger has been dropped.' => 'Disparador eliminado.',
'Trigger has been altered.' => 'Trigger modificado.', 'Trigger has been altered.' => 'Disparador modificado.',
'Trigger has been created.' => 'Trigger creado.', 'Trigger has been created.' => 'Disparador creado.',
'Alter trigger' => 'Modificar Trigger', 'Alter trigger' => 'Modificar Disparador',
'Create trigger' => 'Agregar Trigger', 'Create trigger' => 'Agregar Disparador',
'Time' => 'Tiempo', 'Time' => 'Tiempo',
'Event' => 'Evento', 'Event' => 'Evento',
'%s version: %s through PHP extension %s' => 'Versión %s: %s a través de extensión PHP %s', '%s version: %s through PHP extension %s' => 'Versión %s: %s a través de la extensión de PHP %s',
'%d row(s)' => array('%d registro', '%d registros'), '%d row(s)' => array('%d registro', '%d registros'),
'Remove' => 'Eliminar', 'Remove' => 'Eliminar',
'Are you sure?' => 'Está seguro?', 'Are you sure?' => 'Está seguro?',
@@ -145,7 +144,7 @@ $translations = array(
'Move up' => 'Mover arriba', 'Move up' => 'Mover arriba',
'Move down' => 'Mover abajo', 'Move down' => 'Mover abajo',
'Functions' => 'Funciones', 'Functions' => 'Funciones',
'Aggregation' => 'Agregaciones', 'Aggregation' => 'Agregados',
'Export' => 'Exportar', 'Export' => 'Exportar',
'Output' => 'Salida', 'Output' => 'Salida',
'open' => 'mostrar', 'open' => 'mostrar',
@@ -158,14 +157,14 @@ $translations = array(
'Event has been created.' => 'Evento creado.', 'Event has been created.' => 'Evento creado.',
'Alter event' => 'Modificar Evento', 'Alter event' => 'Modificar Evento',
'Create event' => 'Crear Evento', 'Create event' => 'Crear Evento',
'At given time' => 'A hora determinada', 'At given time' => 'En el momento indicado',
'Every' => 'Cada', 'Every' => 'Cada',
'Events' => 'Eventos', 'Events' => 'Eventos',
'Schedule' => 'Agenda', 'Schedule' => 'Agenda',
'Start' => 'Inicio', 'Start' => 'Inicio',
'End' => 'Fin', 'End' => 'Fin',
'Status' => 'Estado', 'Status' => 'Estado',
'On completion preserve' => 'Al completar preservar', 'On completion preserve' => 'Al completar mantener',
'Tables and views' => 'Tablas y vistas', 'Tables and views' => 'Tablas y vistas',
'Data Length' => 'Longitud de datos', 'Data Length' => 'Longitud de datos',
'Index Length' => 'Longitud de índice', 'Index Length' => 'Longitud de índice',
@@ -176,7 +175,7 @@ $translations = array(
'Check' => 'Comprobar', 'Check' => 'Comprobar',
'Repair' => 'Reparar', 'Repair' => 'Reparar',
'Truncate' => 'Vaciar', 'Truncate' => 'Vaciar',
'Tables have been truncated.' => 'Tablas vaciadas (truncate).', 'Tables have been truncated.' => 'Las tablas han sido vaciadas.',
'Rows' => 'Registros', 'Rows' => 'Registros',
',' => ' ', ',' => ' ',
'0123456789' => '0123456789', '0123456789' => '0123456789',
@@ -187,10 +186,10 @@ $translations = array(
'Save and continue edit' => 'Guardar y continuar editando', 'Save and continue edit' => 'Guardar y continuar editando',
'original' => 'original', 'original' => 'original',
'Tables have been dropped.' => 'Tablas eliminadas.', 'Tables have been dropped.' => 'Tablas eliminadas.',
'%d item(s) have been affected.' => array('%d ítem afectado.', '%d itemes afectados.'), '%d item(s) have been affected.' => array('%d elemento afectado.', '%d elementos afectados.'),
'whole result' => 'resultado completo', 'whole result' => 'resultado completo',
'Clone' => 'Clonar', 'Clone' => 'Clonar',
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Cantida máxima de campos permitidos excedidos. Por favor aumente %s.', 'Maximum number of allowed fields exceeded. Please increase %s.' => 'Excedida la cantidad máxima de campos permitidos. Por favor aumente %s.',
'Partition by' => 'Particionar por', 'Partition by' => 'Particionar por',
'Partitions' => 'Particiones', 'Partitions' => 'Particiones',
'Partition name' => 'Nombre de Partición', 'Partition name' => 'Nombre de Partición',
@@ -202,13 +201,13 @@ $translations = array(
'%.3f s' => '%.3f s', '%.3f s' => '%.3f s',
'$1-$3-$5' => '$5/$3/$1', '$1-$3-$5' => '$5/$3/$1',
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]', '[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
'History' => 'History', 'History' => 'Histórico',
'Variables' => 'Variables', 'Variables' => 'Variables',
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Las columnas de origen y destino deben ser del mismo tipo, debe existir un índice entre las columnas del destino y el registro referenciado debe existir.', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Las columnas de origen y destino deben ser del mismo tipo, debe existir un índice entre las columnas del destino y el registro referenciado debe existir también.',
'Relations' => 'Relaciones', 'Relations' => 'Relaciones',
'Run file' => 'Ejecutar Archivo', 'Run file' => 'Ejecutar Archivo',
'Clear' => 'Vaciar', 'Clear' => 'Vaciar',
'Maximum allowed file size is %sB.' => 'Tamaño máximo de archivo es %sB.', 'Maximum allowed file size is %sB.' => 'El tamaño máximo de archivo es %sB.',
'Numbers' => 'Números', 'Numbers' => 'Números',
'Date and time' => 'Fecha y hora', 'Date and time' => 'Fecha y hora',
'Strings' => 'Cadena', 'Strings' => 'Cadena',
@@ -221,7 +220,7 @@ $translations = array(
'Send' => 'Enviar', 'Send' => 'Enviar',
'%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'), '%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'),
'Webserver file %s' => 'Archivo de servidor web %s', 'Webserver file %s' => 'Archivo de servidor web %s',
'File does not exist.' => 'Archivo no existe.', 'File does not exist.' => 'Ese archivo no existe.',
'%d in total' => '%d en total', '%d in total' => '%d en total',
'Permanent login' => 'Guardar contraseña', 'Permanent login' => 'Guardar contraseña',
'Databases have been dropped.' => 'Bases de datos eliminadas.', 'Databases have been dropped.' => 'Bases de datos eliminadas.',
@@ -238,13 +237,13 @@ $translations = array(
'Sequence has been dropped.' => 'Secuencia eliminada.', 'Sequence has been dropped.' => 'Secuencia eliminada.',
'Sequence has been created.' => 'Secuencia creada.', 'Sequence has been created.' => 'Secuencia creada.',
'Sequence has been altered.' => 'Secuencia modificada.', 'Sequence has been altered.' => 'Secuencia modificada.',
'User types' => 'Tipos definido por el usuario', 'User types' => 'Tipos definidos por el usuario',
'Create type' => 'Crear tipo', 'Create type' => 'Crear tipo',
'Alter type' => 'Modificar tipo', 'Alter type' => 'Modificar tipo',
'Type has been dropped.' => 'Tipo eliminado.', 'Type has been dropped.' => 'Tipo eliminado.',
'Type has been created.' => 'Tipo creado.', 'Type has been created.' => 'Tipo creado.',
'Ctrl+click on a value to modify it.' => 'Ctrl+clic sobre el valor para editarlo.', 'Ctrl+click on a value to modify it.' => 'Ctrl+clic sobre el valor para editarlo.',
'Use edit link to modify this value.' => 'Utilice el enlace de modificar para realizar los cambios.', 'Use edit link to modify this value.' => 'Utilice el enlace de edición para realizar cambios.',
'last' => 'último', 'last' => 'último',
'From server' => 'Desde servidor', 'From server' => 'Desde servidor',
'System' => 'Motor de base de datos', 'System' => 'Motor de base de datos',
@@ -253,7 +252,7 @@ $translations = array(
'empty' => 'ningúno', 'empty' => 'ningúno',
'Network' => 'Red', 'Network' => 'Red',
'Geometry' => 'Geometría', 'Geometry' => 'Geometría',
'File exists.' => 'Archivo ya existe.', 'File exists.' => 'Ese archivo ya existe.',
'Attachments' => 'Adjuntos', 'Attachments' => 'Adjuntos',
'%d query(s) executed OK.' => array('%d sentencia sql ejecutada correctamente.', '%d sentencias sql ejecutadas correctamente.'), '%d query(s) executed OK.' => array('%d sentencia sql ejecutada correctamente.', '%d sentencias sql ejecutadas correctamente.'),
'Show only errors' => 'Mostrar solamente errores', 'Show only errors' => 'Mostrar solamente errores',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'Muuda andmebaasi', 'Alter database' => 'Muuda andmebaasi',
'Create database' => 'Loo uus andmebaas', 'Create database' => 'Loo uus andmebaas',
'SQL command' => 'SQL-Päring', 'SQL command' => 'SQL-Päring',
'Dump' => 'Ekspordi',
'Logout' => 'Logi välja', 'Logout' => 'Logi välja',
'database' => 'andmebaas', 'database' => 'andmebaas',
'Use' => 'Kasuta', 'Use' => 'Kasuta',

View File

@@ -1,92 +1,95 @@
<?php <?php
$translations = array( $translations = array(
// label for database system selection (MySQL, SQLite, ...) // label for database system selection (MySQL, SQLite, ...)
'System' => يستم', 'System' => یستم',
'Server' => 'سرور', 'Server' => 'سرور',
'Username' => 'نام كاربري', 'Username' => 'نام کاربری',
'Password' => 'كلمه عبور', 'Password' => 'کلمه عبور',
'Permanent login' => '', 'Permanent login' => 'ورود دائم',
'Login' => 'ورود', 'Login' => 'ورود',
'Logout' => 'خروج', 'Logout' => 'خروج',
'Logged as: %s' => 'ورود به عنوان: %s', 'Logged as: %s' => 'ورود به عنوان: %s',
'Logout successful.' => 'با موفقيت خارج شديد', 'Logout successful.' => 'با موفقیت خارج شدید.',
'Invalid credentials.' => 'اعتبار سنجي نامعتبر', 'Invalid credentials.' => 'اعتبار سنجی نامعتبر.',
'Too many unsuccessful logins, try again in %d minute(s).' => array('ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.', 'ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.'),
'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'رمز اصلی باطل شده است. روش %s را <a href="http://www.adminer.org/en/extension/" target="_blank">پیاده سازی</a> کرده تا آن را دائمی سازید.',
'Language' => 'زبان', 'Language' => 'زبان',
'Invalid CSRF token. Send the form again.' => 'نامعتبر است. دوباره سعی کنید Token CSRF', 'Invalid CSRF token. Send the form again.' => 'CSRF token نامعتبر است. دوباره سعی کنید.',
'No extension' => 'پسوند نامعتبر', 'No extension' => 'پسوند نامعتبر',
'None of the supported PHP extensions (%s) are available.' => ' پسوند پی اچ پی در دسترس نیست (%s) تعداد', 'None of the supported PHP extensions (%s) are available.' => 'هیچ کدام از افزونه های PHP پشتیبانی شده (%s) موجود نمی باشند.',
'Session support must be enabled.' => 'پشتيباني از نشست بايستي فعال گردد', 'Session support must be enabled.' => 'پشتیبانی از نشست بایستی فعال گردد.',
'Session expired, please login again.' => 'نشست پايان يافته، لطفا دوباره وارد شويد', 'Session expired, please login again.' => 'نشست پایان یافته، لطفا دوباره وارد شوید.',
'%s version: %s through PHP extension %s' => 'نسخه %s : %s توسعه پی اچ پی %s', '%s version: %s through PHP extension %s' => 'نسخه %s : %s توسعه پی اچ پی %s',
'Refresh' => 'بازيابي', 'Refresh' => 'بازیابی',
// text direction - 'ltr' or 'rtl' // text direction - 'ltr' or 'rtl'
'ltr' => 'rtl', 'ltr' => 'rtl',
'Privileges' => 'امتيازات', 'Privileges' => 'امتیازات',
'Create user' => 'ایجاد كاربر', 'Create user' => 'ایجاد کاربر',
'User has been dropped.' => 'كاربر حذف شد', 'User has been dropped.' => 'کاربر حذف شد.',
'User has been altered.' => 'كاربر ويرايش گرديد', 'User has been altered.' => 'کاربر ویرایش گردید.',
'User has been created.' => 'كاربر ايجاد شد', 'User has been created.' => 'کاربر ایجاد شد.',
'Hashed' => 'به هم ريخته', 'Hashed' => 'به هم ریخته',
'Column' => 'ستون', 'Column' => 'ستون',
'Routine' => 'روتين', 'Routine' => 'روتین',
'Grant' => 'اعطا', 'Grant' => 'اعطا',
'Revoke' => 'لغو كردن', 'Revoke' => 'لغو کردن',
'Process list' => يست فرآيند', 'Process list' => یست فرآیند',
'%d process(es) have been killed.' => '%d فرآيند متوقف شد', '%d process(es) have been killed.' => '%d فرآیند متوقف شد.',
'Kill' => 'حذف فرآيند', 'Kill' => 'حذف فرآیند',
'Variables' => 'متغيرها', 'Variables' => 'متغیرها',
'Status' => 'وضعيت', 'Status' => 'وضعیت',
'SQL command' => 'دستور اس كيو ال', 'SQL command' => 'دستور SQL',
'%d query(s) executed OK.' => '%d كوئري اجرا شد', '%d query(s) executed OK.' => '%d کوئری اجرا شد.',
'Query executed OK, %d row(s) affected.' => 'كوئري اجرا شد. %d سطر تغيير كرد.', 'Query executed OK, %d row(s) affected.' => 'کوئری اجرا شد. %d سطر تغیر کرد.',
'No commands to execute.' => 'دستوري براي اجرا وجود ندارد', 'No commands to execute.' => 'دستوری برای اجرا وجود ندارد.',
'Error in query' => 'خطا در كوئري', 'Error in query' => 'خطا در کوئری',
'Execute' => 'اجرا', 'Execute' => 'اجرا',
'Stop on error' => 'توقف در خطا', 'Stop on error' => 'توقف بر روی خطا',
'Show only errors' => 'فقط نمايش خطاها', 'Show only errors' => 'فقط نمایش خطاها',
// sprintf() format for time of the command // sprintf() format for time of the command
'%.3f s' => '%.3f s', '%.3f s' => '%.3f s',
'History' => 'تاريخ', 'History' => 'تاریخ',
'Clear' => 'پاك كردن', 'Clear' => 'پاک کردن',
'Edit all' => يرايش همه', 'Edit all' => یرایش همه',
'File upload' => 'بارگذاري فايل', 'File upload' => 'بارگذاری فایل',
'From server' => 'از سرور', 'From server' => 'از سرور',
'Webserver file %s' => '%s فايل وب سرور', 'Webserver file %s' => '%s فایل وب سرور',
'Run file' => 'نمايش فايل', 'Run file' => 'اجرای فایل',
'File does not exist.' => 'فايل وجود ندارد', 'File does not exist.' => 'فایل وجود ندارد.',
'File uploads are disabled.' => 'بارگذاري غير فعال است', 'File uploads are disabled.' => 'بارگذاری غیر فعال است.',
'Unable to upload a file.' => 'قادر به بارگذاري فايل نيستيد', 'Unable to upload a file.' => 'قادر به بارگذاری فایل نیستید.',
'Maximum allowed file size is %sB.' => ' %sB حداكثر اندازه فايل', 'Maximum allowed file size is %sB.' => ' %sB حداکثر اندازه فایل.',
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'حجم داده ارسالي برزگ است. حجم داده كاهش دهيد و يا مقدار %s را در پيكربندي افزايش دهيد.', 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'حجم داده ارسالی برزگ است. حجم داده کاهش دهید و یا مقدار %s را در پیکربندی افزایش دهید.',
'You can upload a big SQL file via FTP and import it from server.' => 'شما می توانید فایل SQL حجیم را از طریق FTP بارگزاری و از روی سرور وارد نمایید.',
'You are offline.' => 'شما آفلاین می باشید.',
'Export' => 'استخراج', 'Export' => 'استخراج',
'Dump' => الي كردن', 'Output' => روجی',
'Output' => 'خروجي', 'open' => 'بازکردن',
'open' => 'بازكردن', 'save' => 'ذخیره',
'save' => 'ذخيره',
'Format' => 'حذف', 'Format' => 'حذف',
'Data' => 'داده', 'Data' => 'داده',
'Database' => 'پايگاه داده', 'Database' => 'پایگاه داده',
'database' => 'پايگاه داده', 'database' => 'پایگاه داده',
'Use' => 'استفاده', 'Use' => 'استفاده',
'Select database' => 'انتخاب پايگاه داده', 'Select database' => 'انتخاب پایگاه داده',
'Invalid database.' => 'پايگاه داده نامعتبر', 'Invalid database.' => 'پایگاه داده نامعتبر.',
'Create new database' => 'ایجاد پايگاه داده جديد', 'Create new database' => 'ایجاد پایگاه داده جدید',
'Database has been dropped.' => 'پايگاه داده حذف شد', 'Database has been dropped.' => 'پایگاه داده حذف شد.',
'Databases have been dropped.' => 'پايگاه دادها حذف شدند', 'Databases have been dropped.' => 'پایگاه های داده حذف شدند.',
'Database has been created.' => 'پايگاه داده ايجاد شد', 'Database has been created.' => 'پایگاه داده ایجاد شد.',
'Database has been renamed.' => 'نام پايگاه داده تغيير كرد', 'Database has been renamed.' => 'نام پایگاه داده تغیر کرد.',
'Database has been altered.' => 'پايگاه داده ويرايش شد', 'Database has been altered.' => 'پایگاه داده ویرایش شد.',
'Alter database' => يرايش پايگاه داده', 'Alter database' => یرایش پایگاه داده',
'Create database' => 'ایجاد پايگاه داده', 'Create database' => 'ایجاد پایگاه داده',
'Database schema' => 'ساختار پايگاه داده', 'Database schema' => 'ساختار پایگاه داده',
// link to current database schema layout // link to current database schema layout
'Permanent link' => 'ارتباط دائم', 'Permanent link' => 'ارتباط دائم',
@@ -103,33 +106,34 @@ $translations = array(
'%d in total' => ' به طور کل %d ', '%d in total' => ' به طور کل %d ',
'Analyze' => 'تحلیل', 'Analyze' => 'تحلیل',
'Optimize' => 'بهینه سازی', 'Optimize' => 'بهینه سازی',
'Vacuum' => 'پاک سازی',
'Check' => 'بررسی', 'Check' => 'بررسی',
'Repair' => 'تعمیر', 'Repair' => 'تعمیر',
'Truncate' => 'کوتاه کردن', 'Truncate' => 'کوتاه کردن',
'Tables have been truncated.' => 'جدولها بریده شدند', 'Tables have been truncated.' => 'جدولها بریده شدند.',
'Move to other database' => 'انتقال به یک پایگاه داده دیگر', 'Move to other database' => 'انتقال به یک پایگاه داده دیگر',
'Move' => 'انتقال', 'Move' => 'انتقال',
'Tables have been moved.' => 'جدولها انتقال داده شدند', 'Tables have been moved.' => 'جدولها انتقال داده شدند.',
'Copy' => 'کپی کردن', 'Copy' => 'کپی کردن',
'Tables have been copied.' => 'جدولها کپی شدند', 'Tables have been copied.' => 'جدولها کپی شدند.',
'Routines' => 'روالها', 'Routines' => 'روالها',
'Routine has been called, %d row(s) affected.' => array('روال فراخوانی شد %d سطر متاثر شد', 'روال فراخوانی شد %d سطر متاثر شد'), 'Routine has been called, %d row(s) affected.' => array('روال فراخوانی شد %d سطر متاثر شد.', 'روال فراخوانی شد %d سطر متاثر شد.'),
'Call' => 'صدا زدن', 'Call' => 'صدا زدن',
'Parameter name' => 'نام پارامتر', 'Parameter name' => 'نام پارامتر',
'Create procedure' => 'ایجاد زیربرنامه', 'Create procedure' => 'ایجاد زیربرنامه',
'Create function' => 'ایجاد تابع', 'Create function' => 'ایجاد تابع',
'Routine has been dropped.' => 'روال حذف شد', 'Routine has been dropped.' => 'روال حذف شد.',
'Routine has been altered.' => 'روال ویرایش شد', 'Routine has been altered.' => 'روال ویرایش شد.',
'Routine has been created.' => 'روال ایجاد شد', 'Routine has been created.' => 'روال ایجاد شد.',
'Alter function' => 'ویرایش تابع', 'Alter function' => 'ویرایش تابع',
'Alter procedure' => 'ویرایش زیربرنامه', 'Alter procedure' => 'ویرایش زیربرنامه',
'Return type' => 'برگرداندن نوع', 'Return type' => 'برگرداندن نوع',
'Events' => 'رویدادها', 'Events' => 'رویدادها',
'Event has been dropped.' => 'رویداد حذف شد', 'Event has been dropped.' => 'رویداد حذف شد.',
'Event has been altered.' => 'رویداد ویرایش شد', 'Event has been altered.' => 'رویداد ویرایش شد.',
'Event has been created.' => 'رویداد ایجاد شد', 'Event has been created.' => 'رویداد ایجاد شد.',
'Alter event' => 'ویرایش رویداد', 'Alter event' => 'ویرایش رویداد',
'Create event' => 'ایجاد رویداد', 'Create event' => 'ایجاد رویداد',
'At given time' => 'زمان معین', 'At given time' => 'زمان معین',
@@ -145,10 +149,11 @@ $translations = array(
'No tables.' => 'جدولی وجود ندارد', 'No tables.' => 'جدولی وجود ندارد',
'Alter table' => 'ویرایش جدول', 'Alter table' => 'ویرایش جدول',
'Create table' => 'ایجاد جدول', 'Create table' => 'ایجاد جدول',
'Table has been dropped.' => 'جدول حذف شد', 'Table has been dropped.' => 'جدول حذف شد.',
'Tables have been dropped.' => 'جدولها حذف شدند', 'Tables have been dropped.' => 'جدولها حذف شدند.',
'Table has been altered.' => 'جدول ویرایش شد', 'Tables have been optimized.' => 'جدولها بهینه شدند.',
'Table has been created.' => 'جدول ایجاد شد', 'Table has been altered.' => 'جدول ویرایش شد.',
'Table has been created.' => 'جدول ایجاد شد.',
'Table name' => 'نام جدول', 'Table name' => 'نام جدول',
'Show structure' => 'نمایش ساختار', 'Show structure' => 'نمایش ساختار',
'engine' => 'موتور', 'engine' => 'موتور',
@@ -159,13 +164,16 @@ $translations = array(
'Auto Increment' => 'افزایش خودکار', 'Auto Increment' => 'افزایش خودکار',
'Options' => 'اختیارات', 'Options' => 'اختیارات',
'Comment' => 'توضیح', 'Comment' => 'توضیح',
'Default value' => 'مقدار پیش فرض',
'Default values' => 'مقادیر پیش فرض', 'Default values' => 'مقادیر پیش فرض',
'Drop' => 'حذف', 'Drop' => 'حذف',
'Are you sure?' => 'مطمئن هستید؟', 'Are you sure?' => 'مطمئن هستید؟',
'Size' => 'حجم',
'Compute' => 'محاسبه',
'Move up' => 'انتقال به بالا', 'Move up' => 'انتقال به بالا',
'Move down' => 'انتقال به پایین', 'Move down' => 'انتقال به پایین',
'Remove' => 'حذف', 'Remove' => 'حذف',
'Maximum number of allowed fields exceeded. Please increase %s.' => 'حداکثر مجاز فیلدهای مجاز اشباع شد. لطفا %s را کاهش دهید', 'Maximum number of allowed fields exceeded. Please increase %s.' => 'حداکثر تعداد فیلدهای مجاز اشباع شد. لطفا %s را افزایش دهید.',
'Partition by' => 'بخشبندی توسط', 'Partition by' => 'بخشبندی توسط',
'Partitions' => 'بخشبندیها', 'Partitions' => 'بخشبندیها',
@@ -173,14 +181,16 @@ $translations = array(
'Values' => 'مقادیر', 'Values' => 'مقادیر',
'View' => 'نمایش', 'View' => 'نمایش',
'View has been dropped.' => 'نمایش حذف شد', 'Materialized View' => 'نمایه مادی',
'View has been altered.' => 'نمایش ویرایش شد', 'View has been dropped.' => 'نمایش حذف شد.',
'View has been created.' => 'نمایش ایجاد شد', 'View has been altered.' => 'نمایش ویرایش شد.',
'View has been created.' => 'نمایش ایجاد شد.',
'Alter view' => 'حذف نمایش', 'Alter view' => 'حذف نمایش',
'Create view' => 'ایجاد نمایش', 'Create view' => 'ایجاد نمایش',
'Create materialized view' => 'ایجاد نمایه مادی',
'Indexes' => 'ایندکسها', 'Indexes' => 'ایندکسها',
'Indexes have been altered.' => 'ایندکسها ویرایش شد', 'Indexes have been altered.' => 'ایندکسها ویرایش شدند.',
'Alter indexes' => 'ویرایش ایندکسها', 'Alter indexes' => 'ویرایش ایندکسها',
'Add next' => 'افرودن بعدی', 'Add next' => 'افرودن بعدی',
'Index Type' => 'نوع ایندکس', 'Index Type' => 'نوع ایندکس',
@@ -188,9 +198,9 @@ $translations = array(
'Foreign keys' => 'کلیدهای خارجی', 'Foreign keys' => 'کلیدهای خارجی',
'Foreign key' => 'کلید خارجی', 'Foreign key' => 'کلید خارجی',
'Foreign key has been dropped.' => 'کلید خارجی حذف شد', 'Foreign key has been dropped.' => 'کلید خارجی حذف شد.',
'Foreign key has been altered.' => 'کلید خارجی ویرایش شد', 'Foreign key has been altered.' => 'کلید خارجی ویرایش شد.',
'Foreign key has been created.' => 'کلید خارجی ایجاد شد', 'Foreign key has been created.' => 'کلید خارجی ایجاد شد.',
'Target table' => 'جدول هدف', 'Target table' => 'جدول هدف',
'Change' => 'تغییر', 'Change' => 'تغییر',
'Source' => 'منبع', 'Source' => 'منبع',
@@ -200,13 +210,13 @@ $translations = array(
'Add foreign key' => 'افزودن کلید خارجی', 'Add foreign key' => 'افزودن کلید خارجی',
'ON DELETE' => 'ON DELETE', 'ON DELETE' => 'ON DELETE',
'ON UPDATE' => 'ON UPDATE', 'ON UPDATE' => 'ON UPDATE',
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'داده مبدا و مقصد ستونها بایستی شبیه هم باشند', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'داده مبدا و مقصد ستونها بایستی شبیه هم باشند.',
'Triggers' => 'تریگرها', 'Triggers' => 'تریگرها',
'Add trigger' => 'افزودن تریگر', 'Add trigger' => 'افزودن تریگر',
'Trigger has been dropped.' => 'تریگر حذف شد', 'Trigger has been dropped.' => 'تریگر حذف شد.',
'Trigger has been altered.' => 'تریگر ویرایش شد', 'Trigger has been altered.' => 'تریگر ویرایش شد.',
'Trigger has been created.' => 'تریگر ایجاد شد', 'Trigger has been created.' => 'تریگر ایجاد شد.',
'Alter trigger' => 'ویرایش تریگر', 'Alter trigger' => 'ویرایش تریگر',
'Create trigger' => 'ایجاد تریگر', 'Create trigger' => 'ایجاد تریگر',
'Time' => 'زمان', 'Time' => 'زمان',
@@ -224,27 +234,35 @@ $translations = array(
'Sort' => 'مرتب کردن', 'Sort' => 'مرتب کردن',
'descending' => 'نزولی', 'descending' => 'نزولی',
'Limit' => 'محدودیت', 'Limit' => 'محدودیت',
'Limit rows' => 'محدودیت سطرها',
'Text length' => 'طول متن', 'Text length' => 'طول متن',
'Action' => 'عملیات', 'Action' => 'عملیات',
'Full table scan' => 'اسکن کامل جدول',
'Unable to select the table' => 'قادر به انتخاب جدول نیستید', 'Unable to select the table' => 'قادر به انتخاب جدول نیستید',
'No rows.' => 'سطری وجود ندارد', 'No rows.' => 'سطری وجود ندارد',
'%d / ' => '%d / ',
'%d row(s)' => array('%d سطر', '%d سطر'), '%d row(s)' => array('%d سطر', '%d سطر'),
'Page' => 'صفحه', 'Page' => 'صفحه',
'last' => 'آخری', 'last' => 'آخری',
'Load more data' => 'بارگزاری اطلاعات بیشتر',
'Loading' => 'در حال بارگزاری',
'whole result' => 'همه نتایج', 'whole result' => 'همه نتایج',
'%d byte(s)' => array('%d بایت', '%d بایت'), '%d byte(s)' => array('%d بایت', '%d بایت'),
'Import' => 'وارد کردن', 'Import' => 'وارد کردن',
'%d row(s) have been imported.' => array('%d سطر وارد شد', '%d سطر وارد شد'), '%d row(s) have been imported.' => array('%d سطر وارد شد.', '%d سطر وارد شد.'),
'File must be in UTF-8 encoding.' => 'فرمت فایل باید UTF-8 باشید.',
// in-place editing in select // in-place editing in select
'Use edit link to modify this value.' => 'از لینک ویرایش برای ویرایش این مقدار استفاده کنید', 'Modify' => 'ویرایش',
'Ctrl+click on a value to modify it.' => 'برای ویرایش بر روی مقدار ctrl+click کنید.',
'Use edit link to modify this value.' => 'از لینک ویرایش برای ویرایش این مقدار استفاده کنید.',
// %s can contain auto-increment value // %s can contain auto-increment value
'Item%s has been inserted.' => '%s آیتم درج شد', 'Item%s has been inserted.' => '%s آیتم درج شد.',
'Item has been deleted.' => 'آیتم حذف شد', 'Item has been deleted.' => 'آیتم حذف شد.',
'Item has been updated.' => 'آیتم بروز رسانی شد', 'Item has been updated.' => 'آیتم بروز رسانی شد.',
'%d item(s) have been affected.' => array('%d آیتم متاثر شد', '%d آیتم متاثر شد'), '%d item(s) have been affected.' => array('%d آیتم متاثر شد.', '%d آیتم متاثر شد.'),
'New item' => 'آیتم جدید', 'New item' => 'آیتم جدید',
'original' => 'اصلی', 'original' => 'اصلی',
// label for value '' in enum data type // label for value '' in enum data type
@@ -255,15 +273,17 @@ $translations = array(
'Save' => 'ذخیره', 'Save' => 'ذخیره',
'Save and continue edit' => 'ذخیره و ادامه ویرایش', 'Save and continue edit' => 'ذخیره و ادامه ویرایش',
'Save and insert next' => 'ذخیره و درج بعدی', 'Save and insert next' => 'ذخیره و درج بعدی',
'Selected' => 'انتخاب شده',
'Clone' => 'تکثیر', 'Clone' => 'تکثیر',
'Delete' => 'حذف', 'Delete' => 'حذف',
'You have no privileges to update this table.' => 'شما اختیار ویرایش این جدول را ندارید.',
'E-mail' => 'پست الکترونیک', 'E-mail' => 'پست الکترونیک',
'From' => 'فرستنده', 'From' => 'فرستنده',
'Subject' => 'موضوع', 'Subject' => 'موضوع',
'Attachments' => 'پیوست ها', 'Attachments' => 'پیوست ها',
'Send' => 'ارسال', 'Send' => 'ارسال',
'%d e-mail(s) have been sent.' => array('%d ایمیل ارسال شد', '%d ایمیل ارسال شد'), '%d e-mail(s) have been sent.' => array('%d ایمیل ارسال شد.', '%d ایمیل ارسال شد.'),
// data type descriptions // data type descriptions
'Numbers' => 'اعداد', 'Numbers' => 'اعداد',
@@ -283,32 +303,34 @@ $translations = array(
// hint for time format - use language equivalents for hour, minute and second shortcuts // hint for time format - use language equivalents for hour, minute and second shortcuts
'HH:MM:SS' => 'HH:MM:SS', 'HH:MM:SS' => 'HH:MM:SS',
'now' => 'اکنون', 'now' => 'اکنون',
'yes' => 'بله',
'no' => 'خیر',
// general SQLite error in create, drop or rename database // general SQLite error in create, drop or rename database
'File exists.' => 'فایل موجود است', 'File exists.' => 'فایل موجود است.',
'Please use one of the extensions %s.' => 'لطفا یکی از پسوندهای زیر را انتخاب نمائید %s ', 'Please use one of the extensions %s.' => 'لطفا یکی از پسوندها را انتخاب نمائید %s.',
// PostgreSQL and MS SQL schema support // PostgreSQL and MS SQL schema support
'Alter schema' => 'ویرایش ساختار', 'Alter schema' => 'ویرایش ساختار',
'Create schema' => 'ایجاد ساختار', 'Create schema' => 'ایجاد ساختار',
'Schema has been dropped.' => 'ساختار حذف شد', 'Schema has been dropped.' => 'ساختار حذف شد.',
'Schema has been created.' => 'ساختار ایجاد شد', 'Schema has been created.' => 'ساختار ایجاد شد.',
'Schema has been altered.' => 'ساختار ویرایش شد', 'Schema has been altered.' => 'ساختار ویرایش شد.',
'Schema' => 'ساختار', 'Schema' => 'ساختار',
'Invalid schema.' => 'ساختار نامعتبر', 'Invalid schema.' => 'ساختار نامعتبر.',
// PostgreSQL sequences support // PostgreSQL sequences support
'Sequences' => 'صف ها', 'Sequences' => 'صف ها',
'Create sequence' => 'ایجاد صف', 'Create sequence' => 'ایجاد صف',
'Sequence has been dropped.' => 'صف حذف شد', 'Sequence has been dropped.' => 'صف حذف شد.',
'Sequence has been created.' => 'صف ایجاد شد', 'Sequence has been created.' => 'صف ایجاد شد.',
'Sequence has been altered.' => 'صف ویرایش شد', 'Sequence has been altered.' => 'صف ویرایش شد.',
'Alter sequence' => 'ویرایش صف', 'Alter sequence' => 'ویرایش صف',
// PostgreSQL user types support // PostgreSQL user types support
'User types' => 'انواع کاربر', 'User types' => 'انواع کاربر',
'Create type' => 'ایجاد نوع', 'Create type' => 'ایجاد نوع',
'Type has been dropped.' => 'نوع حذف شد', 'Type has been dropped.' => 'نوع حذف شد.',
'Type has been created.' => 'نوع ایجاد شد', 'Type has been created.' => 'نوع ایجاد شد.',
'Alter type' => 'ویرایش نوع', 'Alter type' => 'ویرایش نوع',
); );

View File

@@ -20,7 +20,7 @@ $translations = array(
'Column name' => 'Nom de la colonne', 'Column name' => 'Nom de la colonne',
'Type' => 'Type', 'Type' => 'Type',
'Length' => 'Longueur', 'Length' => 'Longueur',
'Auto Increment' => 'Auto increment', 'Auto Increment' => 'Incrément automatique',
'Options' => 'Options', 'Options' => 'Options',
'Save' => 'Enregistrer', 'Save' => 'Enregistrer',
'Drop' => 'Supprimer', 'Drop' => 'Supprimer',
@@ -30,7 +30,6 @@ $translations = array(
'Alter database' => 'Modifier la base de données', 'Alter database' => 'Modifier la base de données',
'Create database' => 'Créer une base de données', 'Create database' => 'Créer une base de données',
'SQL command' => 'Requête SQL', 'SQL command' => 'Requête SQL',
'Dump' => 'Exporter',
'Logout' => 'Déconnexion', 'Logout' => 'Déconnexion',
'database' => 'base de données', 'database' => 'base de données',
'Use' => 'Utiliser', 'Use' => 'Utiliser',
@@ -49,7 +48,7 @@ $translations = array(
'Alter indexes' => 'Modifier les index', 'Alter indexes' => 'Modifier les index',
'Add next' => 'Ajouter le prochain', 'Add next' => 'Ajouter le prochain',
'Language' => 'Langue', 'Language' => 'Langue',
'Select' => 'Select', 'Select' => 'Sélectionner',
'New item' => 'Nouvel élément', 'New item' => 'Nouvel élément',
'Search' => 'Rechercher', 'Search' => 'Rechercher',
'Sort' => 'Trier', 'Sort' => 'Trier',
@@ -64,10 +63,10 @@ $translations = array(
'Execute' => 'Exécuter', 'Execute' => 'Exécuter',
'Table' => 'Table', 'Table' => 'Table',
'Foreign keys' => 'Clés étrangères', 'Foreign keys' => 'Clés étrangères',
'Triggers' => 'Triggers', 'Triggers' => 'Déclencheurs',
'View' => 'Vue', 'View' => 'Vue',
'Unable to select the table' => 'Impossible de sélectionner la table', 'Unable to select the table' => 'Impossible de sélectionner la table',
'Invalid CSRF token. Send the form again.' => 'Token CSRF invalide. Veuillez réenvoyer le formulaire.', 'Invalid CSRF token. Send the form again.' => 'Token CSRF invalide. Veuillez renvoyer le formulaire.',
'Comment' => 'Commentaire', 'Comment' => 'Commentaire',
'Default values' => 'Valeurs par défaut', 'Default values' => 'Valeurs par défaut',
'%d byte(s)' => array('%d octet', '%d octets'), '%d byte(s)' => array('%d octet', '%d octets'),
@@ -116,17 +115,17 @@ $translations = array(
'Alter function' => 'Modifier la fonction', 'Alter function' => 'Modifier la fonction',
'Alter procedure' => 'Modifier la procédure', 'Alter procedure' => 'Modifier la procédure',
'Return type' => 'Type de retour', 'Return type' => 'Type de retour',
'Add trigger' => 'Ajouter un trigger', 'Add trigger' => 'Ajouter un déclencheur',
'Trigger has been dropped.' => 'Le trigger a été supprimé.', 'Trigger has been dropped.' => 'Le déclencheur a été supprimé.',
'Trigger has been altered.' => 'Le trigger a été modifié.', 'Trigger has been altered.' => 'Le déclencheur a été modifié.',
'Trigger has been created.' => 'Le trigger a été créé.', 'Trigger has been created.' => 'Le déclencheur a été créé.',
'Alter trigger' => 'Modifier un trigger', 'Alter trigger' => 'Modifier un déclencheur',
'Create trigger' => 'Ajouter un trigger', 'Create trigger' => 'Ajouter un déclencheur',
'Time' => 'Temps', 'Time' => 'Temps',
'Event' => 'Évènement', 'Event' => 'Évènement',
'%d row(s)' => array('%d ligne', '%d lignes'), '%d row(s)' => array('%d ligne', '%d lignes'),
'Remove' => 'Effacer', 'Remove' => 'Effacer',
'Are you sure?' => 'Êtes-vous certain ?', 'Are you sure?' => 'Êtes-vous certain(e) ?',
'Privileges' => 'Privilèges', 'Privileges' => 'Privilèges',
'Create user' => 'Créer un utilisateur', 'Create user' => 'Créer un utilisateur',
'User has been dropped.' => 'L\'utilisateur a été effacé.', 'User has been dropped.' => 'L\'utilisateur a été effacé.',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'Adatbázis módosítása', 'Alter database' => 'Adatbázis módosítása',
'Create database' => 'Adatbázis létrehozása', 'Create database' => 'Adatbázis létrehozása',
'SQL command' => 'SQL parancs', 'SQL command' => 'SQL parancs',
'Dump' => 'Exportálás',
'Logout' => 'Kilépés', 'Logout' => 'Kilépés',
'database' => 'adatbázis', 'database' => 'adatbázis',
'Use' => 'Használ', 'Use' => 'Használ',

View File

@@ -66,7 +66,6 @@ $translations = array(
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Data POST terlalu besar. Kurangi data atau perbesar pengarah konfigurasi %s.', 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Data POST terlalu besar. Kurangi data atau perbesar pengarah konfigurasi %s.',
'Export' => 'Ekspor', 'Export' => 'Ekspor',
'Dump' => 'Ekspor',
'Output' => 'Hasil', 'Output' => 'Hasil',
'open' => 'buka', 'open' => 'buka',
'save' => 'simpan', 'save' => 'simpan',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'Modifica database', 'Alter database' => 'Modifica database',
'Create database' => 'Crea database', 'Create database' => 'Crea database',
'SQL command' => 'Comando SQL', 'SQL command' => 'Comando SQL',
'Dump' => 'Dump',
'Logout' => 'Esci', 'Logout' => 'Esci',
'database' => 'database', 'database' => 'database',
'Use' => 'Usa', 'Use' => 'Usa',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'データベースを変更', 'Alter database' => 'データベースを変更',
'Create database' => 'データベースを作成', 'Create database' => 'データベースを作成',
'SQL command' => 'SQLコマンド', 'SQL command' => 'SQLコマンド',
'Dump' => 'ダンプ',
'Logout' => 'ログアウト', 'Logout' => 'ログアウト',
'database' => 'データベース', 'database' => 'データベース',
'Use' => '使用', 'Use' => '使用',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => '데이터베이스 변경', 'Alter database' => '데이터베이스 변경',
'Create database' => '데이터베이스 만들기', 'Create database' => '데이터베이스 만들기',
'SQL command' => 'SQL 명령', 'SQL command' => 'SQL 명령',
'Dump' => '덤프',
'Logout' => '로그아웃', 'Logout' => '로그아웃',
'database' => '데이터베이스', 'database' => '데이터베이스',
'Use' => '사용', 'Use' => '사용',

View File

@@ -66,7 +66,6 @@ $translations = array(
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Per daug POST duomenų. Sumažinkite duomenų kiekį arba padidinkite konfigūracijos nustatymą %s.', 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Per daug POST duomenų. Sumažinkite duomenų kiekį arba padidinkite konfigūracijos nustatymą %s.',
'Export' => 'Eksportas', 'Export' => 'Eksportas',
'Dump' => 'Eksportuoti',
'Output' => 'Išvestis', 'Output' => 'Išvestis',
'open' => 'atidaryti', 'open' => 'atidaryti',
'save' => 'išsaugoti', 'save' => 'išsaugoti',

View File

@@ -32,7 +32,6 @@ $translations = array(
'Alter database' => 'Database aanpassen', 'Alter database' => 'Database aanpassen',
'Create database' => 'Database aanmaken', 'Create database' => 'Database aanmaken',
'SQL command' => 'SQL opdracht', 'SQL command' => 'SQL opdracht',
'Dump' => 'Exporteer',
'Logout' => 'Uitloggen', 'Logout' => 'Uitloggen',
'database' => 'database', 'database' => 'database',
'Use' => 'Gebruik', 'Use' => 'Gebruik',

View File

@@ -58,7 +58,6 @@ $translations = array(
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'For stor datamengde i skjemaet. Reduser datamengden, eller øk størrelsen på %s-konfigurasjonsdirektivet.', 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'For stor datamengde i skjemaet. Reduser datamengden, eller øk størrelsen på %s-konfigurasjonsdirektivet.',
'You can upload a big SQL file via FTP and import it from server.' => 'Du kan laste opp en stor SQL-fil via FTP og importere den fra serveren.', 'You can upload a big SQL file via FTP and import it from server.' => 'Du kan laste opp en stor SQL-fil via FTP og importere den fra serveren.',
'Export' => 'Eksport', 'Export' => 'Eksport',
'Dump' => 'Dump',
'Output' => 'Resultat', 'Output' => 'Resultat',
'open' => 'åpne', 'open' => 'åpne',
'save' => 'lagre', 'save' => 'lagre',

View File

@@ -15,6 +15,7 @@ $translations = array(
'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href="http://www.adminer.org/pl/extension/" target="_blank">Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.', 'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href="http://www.adminer.org/pl/extension/" target="_blank">Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.',
'Language' => 'Język', 'Language' => 'Język',
'Invalid CSRF token. Send the form again.' => 'Nieprawidłowy token CSRF. Spróbuj wysłać formularz ponownie.', 'Invalid CSRF token. Send the form again.' => 'Nieprawidłowy token CSRF. Spróbuj wysłać formularz ponownie.',
'If you did not send this request from Adminer then close this page.' => 'Jeżeli nie wywołałeś tej strony z Adminera, zamknij to okno.',
'No extension' => 'Brak rozszerzenia', 'No extension' => 'Brak rozszerzenia',
'None of the supported PHP extensions (%s) are available.' => 'Żadne z rozszerzeń PHP umożliwiających połączenie się z bazą danych (%s) nie jest dostępne.', 'None of the supported PHP extensions (%s) are available.' => 'Żadne z rozszerzeń PHP umożliwiających połączenie się z bazą danych (%s) nie jest dostępne.',
'Session support must be enabled.' => 'Wymagana jest obsługa sesji w PHP.', 'Session support must be enabled.' => 'Wymagana jest obsługa sesji w PHP.',
@@ -67,9 +68,9 @@ $translations = array(
'Maximum allowed file size is %sB.' => 'Maksymalna wielkość pliku to %sB.', 'Maximum allowed file size is %sB.' => 'Maksymalna wielkość pliku to %sB.',
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Przesłano zbyt dużo danych. Zmniejsz objętość danych lub zwiększ zmienną konfiguracyjną %s.', 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Przesłano zbyt dużo danych. Zmniejsz objętość danych lub zwiększ zmienną konfiguracyjną %s.',
'You can upload a big SQL file via FTP and import it from server.' => 'Większe pliki SQL możesz wgrać na serwer poprzez FTP przed zaimportowaniem.', 'You can upload a big SQL file via FTP and import it from server.' => 'Większe pliki SQL możesz wgrać na serwer poprzez FTP przed zaimportowaniem.',
'You are offline.' => 'Jesteś offline.',
'Export' => 'Eksport', 'Export' => 'Eksport',
'Dump' => 'Eksport',
'Output' => 'Rezultat', 'Output' => 'Rezultat',
'open' => 'otwórz', 'open' => 'otwórz',
'save' => 'zapisz', 'save' => 'zapisz',
@@ -164,6 +165,7 @@ $translations = array(
'Auto Increment' => 'Auto Increment', 'Auto Increment' => 'Auto Increment',
'Options' => 'Opcje', 'Options' => 'Opcje',
'Comment' => 'Komentarz', 'Comment' => 'Komentarz',
'Default value' => 'Wartość domyślna',
'Default values' => 'Wartości domyślne', 'Default values' => 'Wartości domyślne',
'Drop' => 'Usuń', 'Drop' => 'Usuń',
'Are you sure?' => 'Czy jesteś pewien?', 'Are you sure?' => 'Czy jesteś pewien?',
@@ -180,11 +182,13 @@ $translations = array(
'Values' => 'Wartości', 'Values' => 'Wartości',
'View' => 'Perspektywa', 'View' => 'Perspektywa',
'Materialized View' => 'Zmaterializowana perspektywa',
'View has been dropped.' => 'Perspektywa została usunięta.', 'View has been dropped.' => 'Perspektywa została usunięta.',
'View has been altered.' => 'Perspektywa została zmieniona.', 'View has been altered.' => 'Perspektywa została zmieniona.',
'View has been created.' => 'Perspektywa została utworzona.', 'View has been created.' => 'Perspektywa została utworzona.',
'Alter view' => 'Zmień perspektywę', 'Alter view' => 'Zmień perspektywę',
'Create view' => 'Utwórz perspektywę', 'Create view' => 'Utwórz perspektywę',
'Create materialized view' => 'Utwórz zmaterializowaną perspektywę',
'Indexes' => 'Indeksy', 'Indexes' => 'Indeksy',
'Indexes have been altered.' => 'Indeksy zostały zmienione.', 'Indexes have been altered.' => 'Indeksy zostały zmienione.',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'Alterar Base de dados', 'Alter database' => 'Alterar Base de dados',
'Create database' => 'Criar Base de dados', 'Create database' => 'Criar Base de dados',
'SQL command' => 'Comando SQL', 'SQL command' => 'Comando SQL',
'Dump' => 'Exportar',
'Logout' => 'Sair', 'Logout' => 'Sair',
'database' => 'base de dados', 'database' => 'base de dados',
'Use' => 'Usar', 'Use' => 'Usar',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'Modificar Base de dados', 'Alter database' => 'Modificar Base de dados',
'Create database' => 'Criar Base de dados', 'Create database' => 'Criar Base de dados',
'SQL command' => 'Comando SQL', 'SQL command' => 'Comando SQL',
'Dump' => 'Exportar',
'Logout' => 'Terminar sessão', 'Logout' => 'Terminar sessão',
'database' => 'base de dados', 'database' => 'base de dados',
'Use' => 'Usar', 'Use' => 'Usar',

View File

@@ -1,7 +1,7 @@
<?php <?php
$translations = array( $translations = array(
'Login' => 'Intră', 'Login' => 'Intră',
'Logout successful.' => 'Ați eșit cu succes.', 'Logout successful.' => 'Ați ieșit cu succes.',
'Invalid credentials.' => 'Numele de utilizator sau parola este greșită.', 'Invalid credentials.' => 'Numele de utilizator sau parola este greșită.',
'Server' => 'Server', 'Server' => 'Server',
'Username' => 'Nume de utilizator', 'Username' => 'Nume de utilizator',
@@ -31,8 +31,7 @@ $translations = array(
'Alter database' => 'Modifică baza de date', 'Alter database' => 'Modifică baza de date',
'Create database' => 'Crează baza de date', 'Create database' => 'Crează baza de date',
'SQL command' => 'SQL query', 'SQL command' => 'SQL query',
'Dump' => 'Dump', 'Logout' => 'Ieșire',
'Logout' => 'Eșire',
'database' => 'baza de date', 'database' => 'baza de date',
'Use' => 'Alege', 'Use' => 'Alege',
'No tables.' => 'În baza de date nu sunt tabele.', 'No tables.' => 'În baza de date nu sunt tabele.',
@@ -46,9 +45,9 @@ $translations = array(
'Delete' => 'Șterge', 'Delete' => 'Șterge',
'Database' => 'Baza de date', 'Database' => 'Baza de date',
'Routines' => 'Proceduri și funcții salvate', 'Routines' => 'Proceduri și funcții salvate',
'Indexes have been altered.' => 'Indexele au fost modificate.', 'Indexes have been altered.' => 'Indexurile au fost modificate.',
'Indexes' => 'Indexe', 'Indexes' => 'Indexuri',
'Alter indexes' => 'Modifică indexe', 'Alter indexes' => 'Modifică indexuri',
'Add next' => 'Adaugă încă', 'Add next' => 'Adaugă încă',
'Language' => 'Limba', 'Language' => 'Limba',
'Select' => 'Selectează', 'Select' => 'Selectează',
@@ -62,11 +61,11 @@ $translations = array(
'edit' => 'editare', 'edit' => 'editare',
'Page' => 'Pagina', 'Page' => 'Pagina',
'Query executed OK, %d row(s) affected.' => array('Query executat, %d înscriere modificată.', 'Query executat, %d înscrieri modificate.'), 'Query executed OK, %d row(s) affected.' => array('Query executat, %d înscriere modificată.', 'Query executat, %d înscrieri modificate.'),
'Error in query' => 'Eroare în query', 'Error in query' => 'Greșeală în query',
'Execute' => 'Execută', 'Execute' => 'Execută',
'Table' => 'Tabel', 'Table' => 'Tabel',
'Foreign keys' => 'Cheiuri externe', 'Foreign keys' => 'Chei externe',
'Triggers' => 'Triggere', 'Triggers' => 'Declanșatoare',
'View' => 'Reprezentare', 'View' => 'Reprezentare',
'Unable to select the table' => 'Nu am putut selecta date din tabel', 'Unable to select the table' => 'Nu am putut selecta date din tabel',
'Invalid CSRF token. Send the form again.' => 'CSRF token imposibil. Retrimite forma.', 'Invalid CSRF token. Send the form again.' => 'CSRF token imposibil. Retrimite forma.',
@@ -77,24 +76,24 @@ $translations = array(
'Unable to upload a file.' => 'Nu am putut încărca fișierul pe server.', 'Unable to upload a file.' => 'Nu am putut încărca fișierul pe server.',
'File upload' => 'Încarcă fișierul', 'File upload' => 'Încarcă fișierul',
'File uploads are disabled.' => 'Încărcarea fișierelor este interzisă.', 'File uploads are disabled.' => 'Încărcarea fișierelor este interzisă.',
'Routine has been called, %d row(s) affected.' => array('A fost executată procedură, %d înscriere a fost modificată.', 'A fost executată procedură, %d înscrieri au fost modificate.'), 'Routine has been called, %d row(s) affected.' => array('A fost executată procedura, %d înscriere a fost modificată.', 'A fost executată procedura, %d înscrieri au fost modificate.'),
'Call' => 'Apelează', 'Call' => 'Apelează',
'No extension' => 'Nu este extensie', 'No extension' => 'Nu este extensie',
'None of the supported PHP extensions (%s) are available.' => 'Nu este aviabilă nici o extensie suportată (%s).', 'None of the supported PHP extensions (%s) are available.' => 'Nu este aviabilă nici o extensie suportată (%s).',
'Session support must be enabled.' => 'Sesiunile trebuie să fie pornite.', 'Session support must be enabled.' => 'Sesiunile trebuie să fie pornite.',
'Session expired, please login again.' => 'Timpul sesiunii a expirat, rog să te loghezi din nou.', 'Session expired, please login again.' => 'Timpul sesiunii a expirat, rog să vă conectați din nou.',
'Text length' => 'Lungimea textului', 'Text length' => 'Lungimea textului',
'Foreign key has been dropped.' => 'Chei extern a fost șters.', 'Foreign key has been dropped.' => 'Cheia externă a fost ștearsă.',
'Foreign key has been altered.' => 'Chei extern a fost modificat.', 'Foreign key has been altered.' => 'Cheia externă a fost modificată.',
'Foreign key has been created.' => 'Chei extern a fost creat.', 'Foreign key has been created.' => 'Cheia externă a fost creată.',
'Foreign key' => 'Chei extern', 'Foreign key' => 'Cheie externă',
'Target table' => 'Tabela scop', 'Target table' => 'Tabela scop',
'Change' => 'Modifică', 'Change' => 'Modifică',
'Source' => 'Sursă', 'Source' => 'Sursă',
'Target' => 'Scop', 'Target' => 'Scop',
'Add column' => 'Adaugă coloană', 'Add column' => 'Adaugă coloană',
'Alter' => 'Modifică', 'Alter' => 'Modifică',
'Add foreign key' => 'Adaugă chei extern', 'Add foreign key' => 'Adaugă cheie externă',
'ON DELETE' => 'La ștergere', 'ON DELETE' => 'La ștergere',
'ON UPDATE' => 'La modificare', 'ON UPDATE' => 'La modificare',
'Index Type' => 'Tipul indexului', 'Index Type' => 'Tipul indexului',
@@ -102,11 +101,11 @@ $translations = array(
'View has been dropped.' => 'Reprezentarea a fost ștearsă.', 'View has been dropped.' => 'Reprezentarea a fost ștearsă.',
'View has been altered.' => 'Reprezentarea a fost modificată.', 'View has been altered.' => 'Reprezentarea a fost modificată.',
'View has been created.' => 'Reprezentarea a fost creată.', 'View has been created.' => 'Reprezentarea a fost creată.',
'Alter view' => 'Modifică reprezentare', 'Alter view' => 'Modifică reprezentarea',
'Create view' => 'Crează reprezentare', 'Create view' => 'Crează reprezentare',
'Name' => 'Titlu', 'Name' => 'Titlu',
'Process list' => 'Lista proceselor', 'Process list' => 'Lista proceselor',
'%d process(es) have been killed.' => array('A fost finisat %d proces.', 'Au fost finisate %d procese.'), '%d process(es) have been killed.' => array('A fost terminat %d proces.', 'Au fost terminate %d procese.'),
'Kill' => 'Termină', 'Kill' => 'Termină',
'Parameter name' => 'Numele parametrului', 'Parameter name' => 'Numele parametrului',
'Database schema' => 'Schema bazei de date', 'Database schema' => 'Schema bazei de date',
@@ -118,7 +117,7 @@ $translations = array(
'Alter function' => 'Modifică funcția', 'Alter function' => 'Modifică funcția',
'Alter procedure' => 'Modifică procedura', 'Alter procedure' => 'Modifică procedura',
'Return type' => 'Tipul returnării', 'Return type' => 'Tipul returnării',
'Add trigger' => 'Adaugă trigger', 'Add trigger' => 'Adaugă trigger (declanșator)',
'Trigger has been dropped.' => 'Triggerul a fost șters.', 'Trigger has been dropped.' => 'Triggerul a fost șters.',
'Trigger has been altered.' => 'Triggerul a fost modificat.', 'Trigger has been altered.' => 'Triggerul a fost modificat.',
'Trigger has been created.' => 'Triggerul a fost creat.', 'Trigger has been created.' => 'Triggerul a fost creat.',
@@ -129,8 +128,8 @@ $translations = array(
'%s version: %s through PHP extension %s' => 'Versiunea %s: %s cu extensia PHP %s', '%s version: %s through PHP extension %s' => 'Versiunea %s: %s cu extensia PHP %s',
'%d row(s)' => array('%d înscriere', '%d înscrieri'), '%d row(s)' => array('%d înscriere', '%d înscrieri'),
'Remove' => 'Șterge', 'Remove' => 'Șterge',
'Are you sure?' => 'Ești precis?', 'Are you sure?' => 'Sunteți sigur(ă)?',
'Privileges' => 'Privelegii', 'Privileges' => 'Privilegii',
'Create user' => 'Crează utilizator', 'Create user' => 'Crează utilizator',
'User has been dropped.' => 'Utilizatorul a fost șters.', 'User has been dropped.' => 'Utilizatorul a fost șters.',
'User has been altered.' => 'Utilizatorul a fost modificat.', 'User has been altered.' => 'Utilizatorul a fost modificat.',
@@ -147,7 +146,7 @@ $translations = array(
'Functions' => 'Funcții', 'Functions' => 'Funcții',
'Aggregation' => 'Agregare', 'Aggregation' => 'Agregare',
'Export' => 'Export', 'Export' => 'Export',
'Output' => 'Date de eșire', 'Output' => 'Date de ieșire',
'open' => 'deschide', 'open' => 'deschide',
'save' => 'salvează', 'save' => 'salvează',
'Format' => 'Format', 'Format' => 'Format',
@@ -163,12 +162,12 @@ $translations = array(
'Events' => 'Evenimente', 'Events' => 'Evenimente',
'Schedule' => 'Program', 'Schedule' => 'Program',
'Start' => 'Început', 'Start' => 'Început',
'End' => 'Svârșit', 'End' => 'Sfârșit',
'Status' => 'Stare', 'Status' => 'Stare',
'On completion preserve' => 'Salvează după finisare', 'On completion preserve' => 'Salvează după finisare',
'Tables and views' => 'Tabele și reprezentări', 'Tables and views' => 'Tabele și reprezentări',
'Data Length' => 'Cantitatea de date', 'Data Length' => 'Cantitatea de date',
'Index Length' => 'Cantitatea de indexe', 'Index Length' => 'Cantitatea de indecși',
'Data Free' => 'Spațiu liber', 'Data Free' => 'Spațiu liber',
'Collation' => 'Colaționare', 'Collation' => 'Colaționare',
'Analyze' => 'Analizează', 'Analyze' => 'Analizează',
@@ -196,7 +195,7 @@ $translations = array(
'Values' => 'Parametru', 'Values' => 'Parametru',
'%d row(s) have been imported.' => array('%d rînd importat.', '%d rînduri importate.'), '%d row(s) have been imported.' => array('%d rînd importat.', '%d rînduri importate.'),
'Import' => 'Importă', 'Import' => 'Importă',
'Stop on error' => 'Opreștete la eroare', 'Stop on error' => 'Se oprește la greșeală',
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Numărul maxim de înscrieri disponibile a fost atins. Majorați %s.', 'Maximum number of allowed fields exceeded. Please increase %s.' => 'Numărul maxim de înscrieri disponibile a fost atins. Majorați %s.',
'anywhere' => 'oriunde', 'anywhere' => 'oriunde',
'%.3f s' => '%.3f s', '%.3f s' => '%.3f s',
@@ -207,11 +206,11 @@ $translations = array(
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Coloanele ar trebui să aibă aceleaşi tipuri de date, trebuie să existe date de referinţă și un index pe coloanela-ţintă.', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Coloanele ar trebui să aibă aceleaşi tipuri de date, trebuie să existe date de referinţă și un index pe coloanela-ţintă.',
'Relations' => 'Relații', 'Relations' => 'Relații',
'Run file' => 'Execută fișier', 'Run file' => 'Execută fișier',
'Clear' => 'Curățp', 'Clear' => 'Curăță',
'Maximum allowed file size is %sB.' => 'Fișierul maxim admis - %sO.', 'Maximum allowed file size is %sB.' => 'Fișierul maxim admis - %sO.',
'Numbers' => 'Număr', 'Numbers' => 'Număr',
'Date and time' => 'Data și timpul', 'Date and time' => 'Data și timpul',
'Strings' => 'Șire de caractere', 'Strings' => 'Șiruri de caractere',
'Binary' => 'Tip binar', 'Binary' => 'Tip binar',
'Lists' => 'Liste', 'Lists' => 'Liste',
'Editor' => 'Editor', 'Editor' => 'Editor',
@@ -219,12 +218,12 @@ $translations = array(
'From' => 'De la', 'From' => 'De la',
'Subject' => 'Pentru', 'Subject' => 'Pentru',
'Send' => 'Trimite', 'Send' => 'Trimite',
'%d e-mail(s) have been sent.' => array('A fost trimisă %d scrisoare.', 'Au fost trimise %d scrisori.'), '%d e-mail(s) have been sent.' => array('A fost trimis %d mail.', 'Au fost trimise %d mail-uri.'),
'Webserver file %s' => 'Fișierul %s pe server', 'Webserver file %s' => 'Fișierul %s pe server',
'File does not exist.' => 'Așa fișier nu există.', 'File does not exist.' => 'Acest fișier nu există.',
'%d in total' => 'În total %d', '%d in total' => 'În total %d',
'Permanent login' => 'Logare permanentă', 'Permanent login' => 'Logare permanentă',
'Databases have been dropped.' => 'Baze de date au fost șterse.', 'Databases have been dropped.' => 'Bazele de date au fost șterse.',
'Search data in tables' => 'Caută în tabele', 'Search data in tables' => 'Caută în tabele',
'Schema' => 'Schema', 'Schema' => 'Schema',
'Alter schema' => 'Modifică schema', 'Alter schema' => 'Modifică schema',
@@ -247,13 +246,13 @@ $translations = array(
'Use edit link to modify this value.' => 'Valoare poate fi modificată cu ajutorul butonului «modifică».', 'Use edit link to modify this value.' => 'Valoare poate fi modificată cu ajutorul butonului «modifică».',
'last' => 'ultima', 'last' => 'ultima',
'From server' => 'De pe server', 'From server' => 'De pe server',
'System' => 'Sistema', 'System' => 'Sistem',
'Select data' => 'Selectează', 'Select data' => 'Selectează',
'Show structure' => 'Arată structura', 'Show structure' => 'Arată structura',
'empty' => 'gol', 'empty' => 'gol',
'Network' => 'Rețea', 'Network' => 'Rețea',
'Geometry' => 'Geometrie', 'Geometry' => 'Geometrie',
'File exists.' => 'Fișierul deja există.', 'File exists.' => 'Fișierul există deja.',
'Attachments' => 'Fișiere atașate', 'Attachments' => 'Fișiere atașate',
'%d query(s) executed OK.' => array('%d query executat.', '%d query-uri executate cu succes.'), '%d query(s) executed OK.' => array('%d query executat.', '%d query-uri executate cu succes.'),
'Show only errors' => 'Arată doar greșeli', 'Show only errors' => 'Arată doar greșeli',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'Изменить базу данных', 'Alter database' => 'Изменить базу данных',
'Create database' => 'Создать базу данных', 'Create database' => 'Создать базу данных',
'SQL command' => 'SQL запрос', 'SQL command' => 'SQL запрос',
'Dump' => 'Дамп',
'Logout' => 'Выйти', 'Logout' => 'Выйти',
'database' => 'база данных', 'database' => 'база данных',
'Use' => 'Выбрать', 'Use' => 'Выбрать',
@@ -42,14 +41,14 @@ $translations = array(
'Item%s has been inserted.' => 'Запись%s была вставлена.', 'Item%s has been inserted.' => 'Запись%s была вставлена.',
'Edit' => 'Редактировать', 'Edit' => 'Редактировать',
'Insert' => 'Вставить', 'Insert' => 'Вставить',
'Save and insert next' => 'Сохранить и вставить еще', 'Save and insert next' => 'Сохранить и вставить ещё',
'Delete' => 'Стереть', 'Delete' => 'Стереть',
'Database' => 'База данных', 'Database' => 'База данных',
'Routines' => 'Хранимые процедуры и функции', 'Routines' => 'Хранимые процедуры и функции',
'Indexes have been altered.' => 'Индексы изменены.', 'Indexes have been altered.' => 'Индексы изменены.',
'Indexes' => 'Индексы', 'Indexes' => 'Индексы',
'Alter indexes' => 'Изменить индексы', 'Alter indexes' => 'Изменить индексы',
'Add next' => 'Добавить еще', 'Add next' => 'Добавить ещё',
'Language' => 'Язык', 'Language' => 'Язык',
'Select' => 'Выбрать', 'Select' => 'Выбрать',
'New item' => 'Новая запись', 'New item' => 'Новая запись',
@@ -61,7 +60,7 @@ $translations = array(
'Action' => 'Действие', 'Action' => 'Действие',
'edit' => 'редактировать', 'edit' => 'редактировать',
'Page' => 'Страница', 'Page' => 'Страница',
'Query executed OK, %d row(s) affected.' => array('Запрос завершен, изменена %d запись.', 'Запрос завершен, изменены %d записи.', 'Запрос завершен, изменено %d записей.'), 'Query executed OK, %d row(s) affected.' => array('Запрос завершён, изменена %d запись.', 'Запрос завершён, изменены %d записи.', 'Запрос завершён, изменено %d записей.'),
'Error in query' => 'Ошибка в запросe', 'Error in query' => 'Ошибка в запросe',
'Execute' => 'Выполнить', 'Execute' => 'Выполнить',
'Table' => 'Таблица', 'Table' => 'Таблица',
@@ -80,12 +79,12 @@ $translations = array(
'Routine has been called, %d row(s) affected.' => array('Была вызвана процедура, %d запись была изменена.', 'Была вызвана процедура, %d записи было изменено.', 'Была вызвана процедура, %d записей было изменено.'), 'Routine has been called, %d row(s) affected.' => array('Была вызвана процедура, %d запись была изменена.', 'Была вызвана процедура, %d записи было изменено.', 'Была вызвана процедура, %d записей было изменено.'),
'Call' => 'Вызвать', 'Call' => 'Вызвать',
'No extension' => 'Нет расширений', 'No extension' => 'Нет расширений',
'None of the supported PHP extensions (%s) are available.' => 'Не доступно ни одного расширения из поддерживаемых (%s).', 'None of the supported PHP extensions (%s) are available.' => 'Недоступно ни одного расширения из поддерживаемых (%s).',
'Session support must be enabled.' => 'Сессии должны быть включены.', 'Session support must be enabled.' => 'Сессии должны быть включены.',
'Session expired, please login again.' => 'Срок действия сесси истек, нужно снова войти в систему.', 'Session expired, please login again.' => 'Срок действия сессии истёк, нужно снова войти в систему.',
'Text length' => 'Длина текста', 'Text length' => 'Длина текста',
'Foreign key has been dropped.' => 'Внешний ключ был удален.', 'Foreign key has been dropped.' => 'Внешний ключ был удалён.',
'Foreign key has been altered.' => 'Внешний ключ был изменен.', 'Foreign key has been altered.' => 'Внешний ключ был изменён.',
'Foreign key has been created.' => 'Внешний ключ был создан.', 'Foreign key has been created.' => 'Внешний ключ был создан.',
'Foreign key' => 'Внешний ключ', 'Foreign key' => 'Внешний ключ',
'Target table' => 'Результирующая таблица', 'Target table' => 'Результирующая таблица',
@@ -106,7 +105,7 @@ $translations = array(
'Create view' => 'Создать представление', 'Create view' => 'Создать представление',
'Name' => 'Название', 'Name' => 'Название',
'Process list' => 'Список процессов', 'Process list' => 'Список процессов',
'%d process(es) have been killed.' => array('Был завершен %d процесс.', 'Было завершено %d процесса.', 'Было завершёно %d процессов.'), '%d process(es) have been killed.' => array('Был завершён %d процесс.', 'Было завершено %d процесса.', 'Было завершено %d процессов.'),
'Kill' => 'Завершить', 'Kill' => 'Завершить',
'Parameter name' => 'Название параметра', 'Parameter name' => 'Название параметра',
'Database schema' => 'Схема базы данных', 'Database schema' => 'Схема базы данных',
@@ -119,8 +118,8 @@ $translations = array(
'Alter procedure' => 'Изменить процедуру', 'Alter procedure' => 'Изменить процедуру',
'Return type' => 'Возвращаемый тип', 'Return type' => 'Возвращаемый тип',
'Add trigger' => 'Добавить триггер', 'Add trigger' => 'Добавить триггер',
'Trigger has been dropped.' => 'Триггер был удален.', 'Trigger has been dropped.' => 'Триггер был удалён.',
'Trigger has been altered.' => 'Триггер был изменен.', 'Trigger has been altered.' => 'Триггер был изменён.',
'Trigger has been created.' => 'Триггер был создан.', 'Trigger has been created.' => 'Триггер был создан.',
'Alter trigger' => 'Изменить триггер', 'Alter trigger' => 'Изменить триггер',
'Create trigger' => 'Создать триггер', 'Create trigger' => 'Создать триггер',
@@ -132,8 +131,8 @@ $translations = array(
'Are you sure?' => 'Вы уверены?', 'Are you sure?' => 'Вы уверены?',
'Privileges' => 'Полномочия', 'Privileges' => 'Полномочия',
'Create user' => 'Создать пользователя', 'Create user' => 'Создать пользователя',
'User has been dropped.' => 'Пользователь был удален.', 'User has been dropped.' => 'Пользователь был удалён.',
'User has been altered.' => 'Пользователь был изменен.', 'User has been altered.' => 'Пользователь был изменён.',
'User has been created.' => 'Пользователь был создан.', 'User has been created.' => 'Пользователь был создан.',
'Hashed' => 'Хешировано', 'Hashed' => 'Хешировано',
'Column' => 'Колонка', 'Column' => 'Колонка',
@@ -208,7 +207,7 @@ $translations = array(
'Relations' => 'Реляции', 'Relations' => 'Реляции',
'Run file' => 'Запустить файл', 'Run file' => 'Запустить файл',
'Clear' => 'Очистить', 'Clear' => 'Очистить',
'Maximum allowed file size is %sB.' => 'Максимальный разрешенный размер файла - %sB.', 'Maximum allowed file size is %sB.' => 'Максимальный разрешённый размер файла - %sB.',
'Numbers' => 'Число', 'Numbers' => 'Число',
'Date and time' => 'Дата и время', 'Date and time' => 'Дата и время',
'Strings' => 'Строки', 'Strings' => 'Строки',
@@ -254,7 +253,7 @@ $translations = array(
'Network' => 'Сеть', 'Network' => 'Сеть',
'Geometry' => 'Геометрия', 'Geometry' => 'Геометрия',
'File exists.' => 'Файл уже существует.', 'File exists.' => 'Файл уже существует.',
'Attachments' => 'Прикрепленные файлы', 'Attachments' => 'Прикреплённые файлы',
'%d query(s) executed OK.' => array('%d запрос выполнен успешно.', '%d запроса выполнено успешно.', '%d запросов выполнено успешно.'), '%d query(s) executed OK.' => array('%d запрос выполнен успешно.', '%d запроса выполнено успешно.', '%d запросов выполнено успешно.'),
'Show only errors' => 'Только ошибки', 'Show only errors' => 'Только ошибки',
'Refresh' => 'Обновить', 'Refresh' => 'Обновить',

View File

@@ -32,7 +32,6 @@ $translations = array(
'Alter database' => 'Zmeniť databázu', 'Alter database' => 'Zmeniť databázu',
'Create database' => 'Vytvoriť databázu', 'Create database' => 'Vytvoriť databázu',
'SQL command' => 'SQL príkaz', 'SQL command' => 'SQL príkaz',
'Dump' => 'Export',
'Logout' => 'Odhlásiť', 'Logout' => 'Odhlásiť',
'database' => 'databáza', 'database' => 'databáza',
'Use' => 'Vybrať', 'Use' => 'Vybrať',

View File

@@ -65,7 +65,6 @@ $translations = array(
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Preveliko podatkov za POST. Zmanjšajte število podatkov ali povečajte nastavitev za %s.', 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Preveliko podatkov za POST. Zmanjšajte število podatkov ali povečajte nastavitev za %s.',
'Export' => 'Izvozi', 'Export' => 'Izvozi',
'Dump' => 'Izvozi',
'Output' => 'Izhod rezultata', 'Output' => 'Izhod rezultata',
'open' => 'odpri', 'open' => 'odpri',
'save' => 'shrani', 'save' => 'shrani',

View File

@@ -66,7 +66,6 @@ $translations = array(
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Превелики POST податак. Морате да смањите податак или повећајте вредност конфигурационе директиве %s.', 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Превелики POST податак. Морате да смањите податак или повећајте вредност конфигурационе директиве %s.',
'Export' => 'Извоз', 'Export' => 'Извоз',
'Dump' => 'Истовар',
'Output' => 'Испис', 'Output' => 'Испис',
'open' => 'отвори', 'open' => 'отвори',
'save' => 'сачувај', 'save' => 'сачувај',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'த‌க‌வ‌ல்த‌ள‌த்தை மாற்று', 'Alter database' => 'த‌க‌வ‌ல்த‌ள‌த்தை மாற்று',
'Create database' => 'த‌க‌வ‌ல்த‌ள‌த்தை உருவாக்கு', 'Create database' => 'த‌க‌வ‌ல்த‌ள‌த்தை உருவாக்கு',
'SQL command' => 'SQL க‌ட்ட‌ளை', 'SQL command' => 'SQL க‌ட்ட‌ளை',
'Dump' => 'Dump',
'Logout' => 'வெளியேறு', 'Logout' => 'வெளியேறு',
'database' => 'த‌க‌வ‌ல்த‌ள‌ம்', 'database' => 'த‌க‌வ‌ல்த‌ள‌ம்',
'Use' => 'உப‌யோகி', 'Use' => 'உப‌யோகி',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => 'เปลี่ยนแปลงฐานข้อมูล', 'Alter database' => 'เปลี่ยนแปลงฐานข้อมูล',
'Create database' => 'สร้างฐานข้อมูล', 'Create database' => 'สร้างฐานข้อมูล',
'SQL command' => 'คำสั่ง SQL', 'SQL command' => 'คำสั่ง SQL',
'Dump' => 'ส่งออก',
'Logout' => 'ออกจากระบบ', 'Logout' => 'ออกจากระบบ',
'database' => 'ฐานข้อมูล', 'database' => 'ฐานข้อมูล',
'Use' => 'ใช้งาน', 'Use' => 'ใช้งาน',

View File

@@ -66,7 +66,6 @@ $translations = array(
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Çok büyük POST verisi, veriyi azaltın ya da %s ayar yönergesini uygun olarak yapılandırın.', 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Çok büyük POST verisi, veriyi azaltın ya da %s ayar yönergesini uygun olarak yapılandırın.',
'Export' => 'Dışarı Aktar', 'Export' => 'Dışarı Aktar',
'Dump' => 'Döküm',
'Output' => ıktı', 'Output' => ıktı',
'open' => 'aç', 'open' => 'aç',
'save' => 'kaydet', 'save' => 'kaydet',

View File

@@ -66,7 +66,6 @@ $translations = array(
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Занадто великий об\'єм POST-даних. Зменшіть об\'єм або збільшіть параметр директиви %s конфигурації.', 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Занадто великий об\'єм POST-даних. Зменшіть об\'єм або збільшіть параметр директиви %s конфигурації.',
'Export' => 'Експорт', 'Export' => 'Експорт',
'Dump' => 'Дамп',
'Output' => 'Вихідні дані', 'Output' => 'Вихідні дані',
'open' => 'відкрити', 'open' => 'відкрити',
'save' => 'зберегти', 'save' => 'зберегти',

View File

@@ -69,7 +69,6 @@ $translations = array(
'You can upload a big SQL file via FTP and import it from server.' => 'Bạn có thể tải tệp lên dùng FTP và nhập vào cơ sở dữ liệu.', 'You can upload a big SQL file via FTP and import it from server.' => 'Bạn có thể tải tệp lên dùng FTP và nhập vào cơ sở dữ liệu.',
'Export' => 'Xuất', 'Export' => 'Xuất',
'Dump' => 'Sao lưu',
'Output' => 'Kết quả', 'Output' => 'Kết quả',
'open' => 'xem', 'open' => 'xem',
'save' => 'lưu', 'save' => 'lưu',

View File

@@ -67,9 +67,9 @@ $translations = array(
'Maximum allowed file size is %sB.' => 'xx', 'Maximum allowed file size is %sB.' => 'xx',
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'xx', 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'xx',
'You can upload a big SQL file via FTP and import it from server.' => 'xx', 'You can upload a big SQL file via FTP and import it from server.' => 'xx',
'You are offline.' => 'xx',
'Export' => 'xx', 'Export' => 'xx',
'Dump' => 'xx',
'Output' => 'xx', 'Output' => 'xx',
'open' => 'xx', 'open' => 'xx',
'save' => 'xx', 'save' => 'xx',
@@ -164,6 +164,7 @@ $translations = array(
'Auto Increment' => 'xx', 'Auto Increment' => 'xx',
'Options' => 'xx', 'Options' => 'xx',
'Comment' => 'xx', 'Comment' => 'xx',
'Default value' => 'xx',
'Default values' => 'xx', 'Default values' => 'xx',
'Drop' => 'xx', 'Drop' => 'xx',
'Are you sure?' => 'xx', 'Are you sure?' => 'xx',
@@ -180,11 +181,13 @@ $translations = array(
'Values' => 'xx', 'Values' => 'xx',
'View' => 'xx', 'View' => 'xx',
'Materialized View' => 'xx',
'View has been dropped.' => 'xx', 'View has been dropped.' => 'xx',
'View has been altered.' => 'xx', 'View has been altered.' => 'xx',
'View has been created.' => 'xx', 'View has been created.' => 'xx',
'Alter view' => 'xx', 'Alter view' => 'xx',
'Create view' => 'xx', 'Create view' => 'xx',
'Create materialized view' => 'xx',
'Indexes' => 'xx', 'Indexes' => 'xx',
'Indexes have been altered.' => 'xx', 'Indexes have been altered.' => 'xx',
@@ -231,11 +234,13 @@ $translations = array(
'Sort' => 'xx', 'Sort' => 'xx',
'descending' => 'xx', 'descending' => 'xx',
'Limit' => 'xx', 'Limit' => 'xx',
'Limit rows' => 'xx',
'Text length' => 'xx', 'Text length' => 'xx',
'Action' => 'xx', 'Action' => 'xx',
'Full table scan' => 'xx', 'Full table scan' => 'xx',
'Unable to select the table' => 'xx', 'Unable to select the table' => 'xx',
'No rows.' => 'xx', 'No rows.' => 'xx',
'%d / ' => 'xx',
'%d row(s)' => array('xx', 'xx'), '%d row(s)' => array('xx', 'xx'),
'Page' => 'xx', 'Page' => 'xx',
'last' => 'xx', 'last' => 'xx',

View File

@@ -30,7 +30,6 @@ $translations = array(
'Alter database' => '修改資料庫', 'Alter database' => '修改資料庫',
'Create database' => '建立資料庫', 'Create database' => '建立資料庫',
'SQL command' => 'SQL命令', 'SQL command' => 'SQL命令',
'Dump' => '匯出',
'Logout' => '登出', 'Logout' => '登出',
'database' => '資料庫', 'database' => '資料庫',
'Use' => '使用', 'Use' => '使用',

View File

@@ -31,7 +31,6 @@ $translations = array(
'Alter database' => '修改数据库', 'Alter database' => '修改数据库',
'Create database' => '创建数据库', 'Create database' => '创建数据库',
'SQL command' => 'SQL命令', 'SQL command' => 'SQL命令',
'Dump' => '导出',
'Logout' => '注销', 'Logout' => '注销',
'database' => '数据库', 'database' => '数据库',
'Use' => '使用', 'Use' => '使用',

View File

@@ -2,7 +2,7 @@
if (support("kill") && $_POST && !$error) { if (support("kill") && $_POST && !$error) {
$killed = 0; $killed = 0;
foreach ((array) $_POST["kill"] as $val) { foreach ((array) $_POST["kill"] as $val) {
if (queries("KILL " . (+$val))) { if (queries("KILL " . number($val))) {
$killed++; $killed++;
} }
} }

View File

@@ -3,8 +3,7 @@ page_header(lang('Database schema'), "", array(), h(DB . ($_GET["ns"] ? ".$_GET[
$table_pos = array(); $table_pos = array();
$table_pos_js = array(); $table_pos_js = array();
$name = "adminer_schema"; $SCHEMA = ($_GET["schema"] ? $_GET["schema"] : $_COOKIE["adminer_schema-" . str_replace(".", "_", DB)]); // $_COOKIE["adminer_schema"] was used before 3.2.0 //! ':' in table name
$SCHEMA = ($_GET["schema"] ? $_GET["schema"] : $_COOKIE[($_COOKIE["$name-" . DB] ? "$name-" . DB : $name)]); // $_COOKIE["adminer_schema"] was used before 3.2.0 //! ':' in table name
preg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~', $SCHEMA, $matches, PREG_SET_ORDER); preg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~', $SCHEMA, $matches, PREG_SET_ORDER);
foreach ($matches as $i => $match) { foreach ($matches as $i => $match) {
$table_pos[$match[1]] = array($match[2], $match[3]); $table_pos[$match[1]] = array($match[2], $match[3]);

View File

@@ -4,16 +4,15 @@ header("Content-Type: text/javascript; charset=utf-8");
if ($_GET["script"] == "db") { if ($_GET["script"] == "db") {
$sums = array("Data_length" => 0, "Index_length" => 0, "Data_free" => 0); $sums = array("Data_length" => 0, "Index_length" => 0, "Data_free" => 0);
foreach (table_status() as $name => $table_status) { foreach (table_status() as $name => $table_status) {
$id = js_escape($name); json_row("Comment-$name", nbsp($table_status["Comment"]));
json_row("Comment-$id", nbsp($table_status["Comment"]));
if (!is_view($table_status)) { if (!is_view($table_status)) {
foreach (array("Engine", "Collation") as $key) { foreach (array("Engine", "Collation") as $key) {
json_row("$key-$id", nbsp($table_status[$key])); json_row("$key-$name", nbsp($table_status[$key]));
} }
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) { foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
if ($table_status[$key] != "") { if ($table_status[$key] != "") {
$val = format_number($table_status[$key]); $val = format_number($table_status[$key]);
json_row("$key-$id", ($key == "Rows" && $val && $table_status["Engine"] == ($sql == "pgsql" ? "table" : "InnoDB") json_row("$key-$name", ($key == "Rows" && $val && $table_status["Engine"] == ($sql == "pgsql" ? "table" : "InnoDB")
? "~ $val" ? "~ $val"
: $val : $val
)); ));
@@ -22,7 +21,7 @@ if ($_GET["script"] == "db") {
$sums[$key] += ($table_status["Engine"] != "InnoDB" || $key != "Data_free" ? $table_status[$key] : 0); $sums[$key] += ($table_status["Engine"] != "InnoDB" || $key != "Data_free" ? $table_status[$key] : 0);
} }
} elseif (array_key_exists($key, $table_status)) { } elseif (array_key_exists($key, $table_status)) {
json_row("$key-$id"); json_row("$key-$name");
} }
} }
} }
@@ -33,7 +32,7 @@ if ($_GET["script"] == "db") {
json_row(""); json_row("");
} elseif ($_GET["script"] == "kill") { } elseif ($_GET["script"] == "kill") {
$connection->query("KILL " . (+$_POST["kill"])); $connection->query("KILL " . number($_POST["kill"]));
} else { // connect } else { // connect
foreach (count_tables($adminer->databases()) as $db => $val) { foreach (count_tables($adminer->databases()) as $db => $val) {

View File

@@ -360,7 +360,8 @@ if (!$columns && support("table")) {
$unique_idf = ""; $unique_idf = "";
foreach ($unique_array as $key => $val) { foreach ($unique_array as $key => $val) {
if (($jush == "sql" || $jush == "pgsql") && strlen($val) > 64) { if (($jush == "sql" || $jush == "pgsql") && strlen($val) > 64) {
$key = "MD5(" . (strpos($key, '(') ? $key : idf_escape($key)) . ")"; //! columns looking like functions $key = (strpos($key, '(') ? $key : idf_escape($key)); //! columns looking like functions
$key = "MD5(" . ($jush == 'sql' && preg_match("~^utf8_~", $fields[$key]["collation"]) ? $key : "CONVERT($key USING " . charset($connection) . ")") . ")";
$val = md5($val); $val = md5($val);
} }
$unique_idf .= "&" . ($val !== null ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key)); $unique_idf .= "&" . ($val !== null ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));

View File

@@ -121,10 +121,13 @@ if (!$error && $_POST) {
} }
} elseif (is_object($result)) { } elseif (is_object($result)) {
$orgtables = select($result, $connection2); $limit = $_POST["limit"];
$orgtables = select($result, $connection2, array(), $limit);
if (!$_POST["only_errors"]) { if (!$_POST["only_errors"]) {
echo "<form action='' method='post'>\n"; echo "<form action='' method='post'>\n";
echo "<p>" . ($result->num_rows ? lang('%d row(s)', $result->num_rows) : "") . $time; $num_rows = $result->num_rows;
echo "<p>" . ($num_rows ? ($limit && $num_rows > $limit ? lang('%d / ', $limit) : "") . lang('%d row(s)', $num_rows) : "");
echo $time;
$id = "export-$commands"; $id = "export-$commands";
$export = ", <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('Export') . "</a><span id='$id' class='hidden'>: " $export = ", <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('Export') . "</a><span id='$id' class='hidden'>: "
. html_select("output", $adminer->dumpOutput(), $adminer_export["output"]) . " " . html_select("output", $adminer->dumpOutput(), $adminer_export["output"]) . " "
@@ -199,14 +202,14 @@ if (!isset($_GET["import"])) {
textarea("query", $q, 20); textarea("query", $q, 20);
echo ($_POST ? "" : "<script type='text/javascript'>focus(document.getElementsByTagName('textarea')[0]);</script>\n"); echo ($_POST ? "" : "<script type='text/javascript'>focus(document.getElementsByTagName('textarea')[0]);</script>\n");
echo "<p>$execute\n"; echo "<p>$execute\n";
echo lang('Limit rows') . ": <input type='number' name='limit' class='size' value='" . h($_POST ? $_POST["limit"] : $_GET["limit"]) . "'>\n";
} else { } else {
echo "<fieldset><legend>" . lang('File upload') . "</legend><div>"; echo "<fieldset><legend>" . lang('File upload') . "</legend><div>";
echo (ini_bool("file_uploads") echo (ini_bool("file_uploads")
? '<input type="file" name="sql_file[]" multiple> (&lt; ' . ini_get("upload_max_filesize") . 'B)' // ignore post_max_size because it is for all form fields together and bytes computing would be necessary ? "SQL (&lt; " . ini_get("upload_max_filesize") . "B): <input type='file' name='sql_file[]' multiple>\n$execute" // ignore post_max_size because it is for all form fields together and bytes computing would be necessary
: lang('File uploads are disabled.') : lang('File uploads are disabled.')
); );
echo "\n$execute";
echo "</div></fieldset>\n"; echo "</div></fieldset>\n";
echo "<fieldset><legend>" . lang('From server') . "</legend><div>"; echo "<fieldset><legend>" . lang('From server') . "</legend><div>";
echo lang('Webserver file %s', "<code>adminer.sql" . (extension_loaded("zlib") ? "[.gz]" : "") . "</code>"); echo lang('Webserver file %s', "<code>adminer.sql" . (extension_loaded("zlib") ? "[.gz]" : "") . "</code>");

View File

@@ -186,6 +186,9 @@ function tableClick(event, click) {
click = false; click = false;
} }
el = el.parentNode; el = el.parentNode;
if (!el) { // Ctrl+click on text fields hides the element
return;
}
} }
el = el.firstChild.firstChild; el = el.firstChild.firstChild;
if (click) { if (click) {
@@ -500,11 +503,19 @@ function fieldChange(field) {
* @param string * @param string
* @param function (XMLHttpRequest) * @param function (XMLHttpRequest)
* @param [string] * @param [string]
* @param [string]
* @return XMLHttpRequest or false in case of an error * @return XMLHttpRequest or false in case of an error
*/ */
function ajax(url, callback, data) { function ajax(url, callback, data, message) {
var request = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false)); var request = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false));
if (request) { if (request) {
var ajaxStatus = document.getElementById('ajaxstatus');
if (message) {
ajaxStatus.innerHTML = '<div class="message">' + message + '</div>';
ajaxStatus.className = ajaxStatus.className.replace(/ hidden/g, '');
} else {
ajaxStatus.className += ' hidden';
}
request.open((data ? 'POST' : 'GET'), url); request.open((data ? 'POST' : 'GET'), url);
if (data) { if (data) {
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
@@ -512,7 +523,12 @@ function ajax(url, callback, data) {
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
request.onreadystatechange = function () { request.onreadystatechange = function () {
if (request.readyState == 4) { if (request.readyState == 4) {
callback(request); if (/^2/.test(request.status)) {
callback(request);
} else {
ajaxStatus.innerHTML = (request.status ? request.responseText : '<div class="error">' + offlineMessage + '</div>');
ajaxStatus.className = ajaxStatus.className.replace(/ hidden/g, '');
}
} }
}; };
request.send(data); request.send(data);
@@ -526,11 +542,9 @@ function ajax(url, callback, data) {
*/ */
function ajaxSetHtml(url) { function ajaxSetHtml(url) {
return ajax(url, function (request) { return ajax(url, function (request) {
if (request.status) { var data = eval('(' + request.responseText + ')');
var data = eval('(' + request.responseText + ')'); for (var key in data) {
for (var key in data) { setHtml(key, data[key]);
setHtml(key, data[key]);
}
} }
}); });
} }
@@ -557,18 +571,17 @@ function ajaxForm(form, message, button) {
} }
data = data.join('&'); data = data.join('&');
setHtml('message', '<div class="message">' + message + '</div>');
var url = form.action; var url = form.action;
if (!/post/i.test(form.method)) { if (!/post/i.test(form.method)) {
url = url.replace(/\?.*/, '') + '?' + data; url = url.replace(/\?.*/, '') + '?' + data;
data = ''; data = '';
} }
return ajax(url, function (request) { return ajax(url, function (request) {
setHtml('message', request.responseText); setHtml('ajaxstatus', request.responseText);
if (window.jush) { if (window.jush) {
jush.highlight_tag(document.getElementById('message').getElementsByTagName('code'), 0); jush.highlight_tag(document.getElementById('ajaxstatus').getElementsByTagName('code'), 0);
} }
}, data); }, data, message);
} }
@@ -626,7 +639,7 @@ function selectClick(td, event, text, warning) {
input.focus(); input.focus();
if (text == 2) { // long text if (text == 2) { // long text
return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (request) { return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (request) {
if (request.status && request.responseText) { if (request.responseText) {
input.value = request.responseText; input.value = request.responseText;
input.name = td.id; input.name = td.id;
} }

View File

@@ -19,8 +19,10 @@ if ($fields) {
echo "<thead><tr><th>" . lang('Column') . "<td>" . lang('Type') . (support("comment") ? "<td>" . lang('Comment') : "") . "</thead>\n"; echo "<thead><tr><th>" . lang('Column') . "<td>" . lang('Type') . (support("comment") ? "<td>" . lang('Comment') : "") . "</thead>\n";
foreach ($fields as $field) { foreach ($fields as $field) {
echo "<tr" . odd() . "><th>" . h($field["field"]); echo "<tr" . odd() . "><th>" . h($field["field"]);
echo "<td title='" . h($field["collation"]) . "'>" . h($field["full_type"]) . ($field["null"] ? " <i>NULL</i>" : "") . ($field["auto_increment"] ? " <i>" . lang('Auto Increment') . "</i>" : ""); echo "<td><span title='" . h($field["collation"]) . "'>" . h($field["full_type"]) . "</span>";
echo (isset($field["default"]) ? " [<b>" . h($field["default"]) . "</b>]" : ""); echo ($field["null"] ? " <i>NULL</i>" : "");
echo ($field["auto_increment"] ? " <i>" . lang('Auto Increment') . "</i>" : "");
echo (isset($field["default"]) ? " <span title='" . lang('Default value') . "'>[<b>" . h($field["default"]) . "</b>]</span>" : "");
echo (support("comment") ? "<td>" . nbsp($field["comment"]) : ""); echo (support("comment") ? "<td>" . nbsp($field["comment"]) : "");
echo "\n"; echo "\n";
} }

View File

@@ -7,17 +7,27 @@ if ($_POST && !$error) {
$as = " AS\n$row[select]"; $as = " AS\n$row[select]";
$location = ME . "table=" . urlencode($name); $location = ME . "table=" . urlencode($name);
$message = lang('View has been altered.'); $message = lang('View has been altered.');
if (!$_POST["drop"] && $TABLE == $name && $jush != "sqlite") { if ($_GET["materialized"]) {
$type = "MATERIALIZED VIEW";
} else {
$type = "VIEW";
if ($jush == "pgsql") {
$status = table_status($name);
$type = ($status ? strtoupper($status["Engine"]) : $type);
}
}
if (!$_POST["drop"] && $TABLE == $name && $jush != "sqlite" && $type != "MATERIALIZED VIEW") {
query_redirect(($jush == "mssql" ? "ALTER" : "CREATE OR REPLACE") . " VIEW " . table($name) . $as, $location, $message); query_redirect(($jush == "mssql" ? "ALTER" : "CREATE OR REPLACE") . " VIEW " . table($name) . $as, $location, $message);
} else { } else {
$temp_name = $name . "_adminer_" . uniqid(); $temp_name = $name . "_adminer_" . uniqid();
drop_create( drop_create(
"DROP VIEW " . table($TABLE), "DROP $type " . table($TABLE),
"CREATE VIEW " . table($name) . $as, "CREATE $type " . table($name) . $as,
"DROP VIEW " . table($name), "DROP $type " . table($name),
"CREATE VIEW " . table($temp_name) . $as, "CREATE $type " . table($temp_name) . $as,
"DROP VIEW " . table($temp_name), "DROP $type " . table($temp_name),
($_POST["drop"] ? substr(ME, 0, -1) : $location), ($_POST["drop"] ? substr(ME, 0, -1) : $location),
lang('View has been dropped.'), lang('View has been dropped.'),
$message, $message,
@@ -32,7 +42,7 @@ if (!$_POST && $TABLE != "") {
$row = view($TABLE); $row = view($TABLE);
$row["name"] = $TABLE; $row["name"] = $TABLE;
if (!$error) { if (!$error) {
$error = $connection->error; $error = error();
} }
} }

View File

@@ -1,3 +1,26 @@
Adminer 4.2.0 (released 2015-02-07)
Fix XSS in login form (bug #436)
Allow limiting number of displayed rows in SQL command
Fix reading routine column collations
Unlock session in alter database
Make master key unreadable to others (bug #410)
Fix edit by long non-utf8 string
Specify encoding for PHP 5.6 with invalid default_charset
Fix saving NULL value, bug since Adminer 4.0.3
Send 403 for auth error
Report offline and other AJAX errors (bug #419)
Don't alter table comment if not changed
Add links to documentation on table status page
Fix handling of 64 bit numbers in auto_increment
Add referrer: never meta tag
MySQL: Use utf8mb4 if available
MySQL: Support foreign keys in NDB storage
PostgreSQL: Materialized views
SQLite: Support CURRENT_* default values (bug #417)
Elasticsearch: Use where in select
Firebird: Alpha version
Danish translation
Adminer 4.1.0 (released 2014-04-18) Adminer 4.1.0 (released 2014-04-18)
Provide size of all databases in the overview Provide size of all databases in the overview
Prevent against brute force login attempts from the same IP address Prevent against brute force login attempts from the same IP address

31
composer.json Normal file
View File

@@ -0,0 +1,31 @@
{
"name": "vrana/adminer",
"description": "Database management in a single PHP file.",
"homepage": "http://www.adminer.org/",
"keywords": [
"database"
],
"support": {
"issues": "http://sourceforge.net/p/adminer/bugs-and-features/",
"forum": "http://sourceforge.net/p/adminer/discussion/",
"source": "https://github.com/vrana/adminer/"
},
"authors": [
{
"name": "Jakub Vrána",
"homepage": "http://www.vrana.cz/"
}
],
"autoload": {
"classmap": [
"plugins/"
]
},
"license": [
"Apache-2.0",
"GPL-2.0"
],
"scripts": {
"compile": "php compile.php"
}
}

View File

@@ -146,8 +146,13 @@ html>/**/body table a[href*="&edit="][href*="&where"] {
height: 16px; height: 16px;
overflow: hidden; overflow: hidden;
padding-left: 24px; padding-left: 24px;
}
/* Hide text in automatic selects */
html>/**/body form>table a[href*="&edit="][href*="&where"] {
width: 0; width: 0;
} }
/* Select data */ /* Select data */
html>/**/body #menu p a[href*="&select="], html>/**/body .links a[href*="&select="] { html>/**/body #menu p a[href*="&select="], html>/**/body .links a[href*="&select="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqck8tO21AQhn8bB8ehRe0SUEBOlIsSVFGqqlK3oey6K+9A96wTKU/RFU/AG7CrKhAg7gmKiJKIplFWqItWIQEfuzOT2LmsSo408j+2/5lvjo+1rULhM4AFTLfahuu6i3vF4rdp3F/y+W3DVUrzKNk8BTzPC4IKS3h8Hc0Hz49zr8BeXSml8wu8PsU1uW7EhjpHOmd7wX1fs4e9hnIcTUkBDfs1DzGjS5N1pPOGRR3bLjR6ztoNNJm9ebDXcBxnjMD99YCdzGvJT25v8T6ZFH1QLuNjNiv6++UlESyDvSMEEIKcCZzX6zLvXDiMo0pFZn5hWfhxfS2aF3sCAkUvDwmA1ZUVyS9qNawnEn0aKvQhkxF9WCqBPUIgBSYISnd3QmCZJs6qVekaYZqbmzGCfoGnp2AEnyAdjUpeajTwJh4XfU778S6d7tNQISlA3rFN9AkqzaYQmLOzuKIxuGuYaE4H++F/RvbqVEVXE+cgsbSEFFH0Hh+RtW2sxmLo9npYoy/yNpUajkBeo9ftzkwSVFstIeBVpjH8rhc0xigBe43f9/dmKBTCburv4ISb//VvsYe9mmXbX/VIZHman8ntdH7y0BbFSwrjmX6H4s8/AQYAQChL+KIinhAAAAAASUVORK5CYII=") no-repeat left bottom background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqck8tO21AQhn8bB8ehRe0SUEBOlIsSVFGqqlK3oey6K+9A96wTKU/RFU/AG7CrKhAg7gmKiJKIplFWqItWIQEfuzOT2LmsSo408j+2/5lvjo+1rULhM4AFTLfahuu6i3vF4rdp3F/y+W3DVUrzKNk8BTzPC4IKS3h8Hc0Hz49zr8BeXSml8wu8PsU1uW7EhjpHOmd7wX1fs4e9hnIcTUkBDfs1DzGjS5N1pPOGRR3bLjR6ztoNNJm9ebDXcBxnjMD99YCdzGvJT25v8T6ZFH1QLuNjNiv6++UlESyDvSMEEIKcCZzX6zLvXDiMo0pFZn5hWfhxfS2aF3sCAkUvDwmA1ZUVyS9qNawnEn0aKvQhkxF9WCqBPUIgBSYISnd3QmCZJs6qVekaYZqbmzGCfoGnp2AEnyAdjUpeajTwJh4XfU778S6d7tNQISlA3rFN9AkqzaYQmLOzuKIxuGuYaE4H++F/RvbqVEVXE+cgsbSEFFH0Hh+RtW2sxmLo9npYoy/yNpUajkBeo9ftzkwSVFstIeBVpjH8rhc0xigBe43f9/dmKBTCburv4ISb//VvsYe9mmXbX/VIZHman8ntdH7y0BbFSwrjmX6H4s8/AQYAQChL+KIinhAAAAAASUVORK5CYII=") no-repeat left bottom

File diff suppressed because one or more lines are too long

View File

@@ -62,7 +62,6 @@ td{background-color:#f4f8ff}
tbody tr:hover td,tbody tr:hover th{background-color:#FFE} tbody tr:hover td,tbody tr:hover th{background-color:#FFE}
p.tabs{margin:0 20px 0 0} p.tabs{margin:0 20px 0 0}
.jush-sql{background:0} .jush-sql{background:0}
.jush{padding:5px 15px 3px;margin:0 20px;background-color:#fff;border:1px solid #369;border-radius:4px}
fieldset{border:1px solid #999;border-radius:5px;display:inline;margin:.8em .5em 0 0;padding:.5em .8em;vertical-align:top} fieldset{border:1px solid #999;border-radius:5px;display:inline;margin:.8em .5em 0 0;padding:.5em .8em;vertical-align:top}
a{color:#369} a{color:#369}
a:hover{color:#28c} a:hover{color:#28c}

View File

@@ -585,7 +585,10 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
foreach ($tables as $row) { foreach ($tables as $row) {
$name = $this->tableName($row); $name = $this->tableName($row);
if (isset($row["Engine"]) && $name != "") { // ignore views and tables without name if (isset($row["Engine"]) && $name != "") { // ignore views and tables without name
echo "<a href='" . h(ME) . 'select=' . urlencode($row["Name"]) . "'" . bold($_GET["select"] == $row["Name"] || $_GET["edit"] == $row["Name"]) . " title='" . lang('Select data') . "'>$name</a><br>\n"; echo "<a href='" . h(ME) . 'select=' . urlencode($row["Name"]) . "'"
. bold($_GET["select"] == $row["Name"] || $_GET["edit"] == $row["Name"], "select")
. " title='" . lang('Select data') . "'>$name</a><br>\n"
;
} }
} }
} }

View File

@@ -1,6 +1,6 @@
<?php <?php
if ($_GET["script"] == "kill") { if ($_GET["script"] == "kill") {
$connection->query("KILL " . (+$_POST["kill"])); $connection->query("KILL " . number($_POST["kill"]));
} elseif (list($table, $id, $name) = $adminer->_foreignColumn(column_foreign_keys($_GET["source"]), $_GET["field"])) { } elseif (list($table, $id, $name) = $adminer->_foreignColumn(column_foreign_keys($_GET["source"]), $_GET["field"])) {
$limit = 11; $limit = 11;

View File

@@ -1,6 +1,14 @@
// Editor specific functions // Editor specific functions
function selectFieldChange(form) { function selectFieldChange() {
}
var helpOpen;
function helpMouseover() {
}
function helpMouseout() {
} }
function whisperClick(event, field) { function whisperClick(event, field) {

2
externals/jush vendored

View File

@@ -12,7 +12,7 @@ class AdminerDumpAlter {
if (DRIVER == 'server') { if (DRIVER == 'server') {
return array('sql_alter' => 'Alter'); return array('sql_alter' => 'Alter');
} }
} }
function _database() { function _database() {
// drop old tables // drop old tables
@@ -29,15 +29,15 @@ CREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN
FETCH tables INTO _table_name, _engine, _table_collation, _table_comment; FETCH tables INTO _table_name, _engine, _table_collation, _table_comment;
IF NOT done THEN IF NOT done THEN
CASE _table_name"; CASE _table_name";
foreach (get_rows($query) as $row) { foreach (get_rows($query) as $row) {
$comment = q($row["ENGINE"] == "InnoDB" ? preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["TABLE_COMMENT"]) : $row["TABLE_COMMENT"]); $comment = q($row["ENGINE"] == "InnoDB" ? preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["TABLE_COMMENT"]) : $row["TABLE_COMMENT"]);
echo " echo "
WHEN " . q($row["TABLE_NAME"]) . " THEN WHEN " . q($row["TABLE_NAME"]) . " THEN
" . (isset($row["ENGINE"]) ? "IF _engine != '$row[ENGINE]' OR _table_collation != '$row[TABLE_COLLATION]' OR _table_comment != $comment THEN " . (isset($row["ENGINE"]) ? "IF _engine != '$row[ENGINE]' OR _table_collation != '$row[TABLE_COLLATION]' OR _table_comment != $comment THEN
ALTER TABLE " . idf_escape($row["TABLE_NAME"]) . " ENGINE=$row[ENGINE] COLLATE=$row[TABLE_COLLATION] COMMENT=$comment; ALTER TABLE " . idf_escape($row["TABLE_NAME"]) . " ENGINE=$row[ENGINE] COLLATE=$row[TABLE_COLLATION] COMMENT=$comment;
END IF" : "BEGIN END") . ";"; END IF" : "BEGIN END") . ";";
} }
echo " echo "
ELSE ELSE
SET alter_command = CONCAT(alter_command, 'DROP TABLE `', REPLACE(_table_name, '`', '``'), '`;\\n'); SET alter_command = CONCAT(alter_command, 'DROP TABLE `', REPLACE(_table_name, '`', '``'), '`;\\n');
END CASE; END CASE;
@@ -114,17 +114,16 @@ CREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN
IF NOT done THEN IF NOT done THEN
SET set_after = 1; SET set_after = 1;
CASE _column_name"; CASE _column_name";
foreach ($fields as $row) { foreach ($fields as $row) {
echo " echo "
WHEN " . q($row["COLUMN_NAME"]) . " THEN WHEN " . q($row["COLUMN_NAME"]) . " THEN
SET add_columns = REPLACE(add_columns, ', ADD $row[alter]', IF( SET add_columns = REPLACE(add_columns, ', ADD $row[alter]', IF(
_column_default <=> $row[default] AND _is_nullable = '$row[IS_NULLABLE]' AND _collation_name <=> " . (isset($row["COLLATION_NAME"]) ? "'$row[COLLATION_NAME]'" : "NULL") . " AND _column_type = " . q($row["COLUMN_TYPE"]) . " AND _extra = '$row[EXTRA]' AND _column_comment = " . q($row["COLUMN_COMMENT"]) . " AND after = $row[after] _column_default <=> $row[default] AND _is_nullable = '$row[IS_NULLABLE]' AND _collation_name <=> " . (isset($row["COLLATION_NAME"]) ? "'$row[COLLATION_NAME]'" : "NULL") . " AND _column_type = " . q($row["COLUMN_TYPE"]) . " AND _extra = '$row[EXTRA]' AND _column_comment = " . q($row["COLUMN_COMMENT"]) . " AND after = $row[after]
, '', ', MODIFY $row[alter]'));" , '', ', MODIFY $row[alter]'));"; //! don't replace in comment
; //! don't replace in comment }
} echo "
echo "
ELSE ELSE
SET @alter_table = CONCAT(@alter_table, ', DROP ', _column_name); SET @alter_table = CONCAT(@alter_table, ', DROP ', '`', REPLACE(_column_name, '`', '``'), '`');
SET set_after = 0; SET set_after = 0;
END CASE; END CASE;
IF set_after THEN IF set_after THEN
@@ -148,4 +147,9 @@ DROP PROCEDURE adminer_alter;
} }
} }
function dumpData() {
if ($_POST["format"] == "sql_alter") {
return true;
}
}
} }

51
plugins/dump-php.php Normal file
View File

@@ -0,0 +1,51 @@
<?php
/** Dump to PHP format
* @author Martin Zeman (Zemistr), http://www.zemistr.eu/
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
*/
class AdminerDumpPhp {
var $output = array();
var $shutdown_callback = false;
function dumpFormat() {
return array('php' => 'PHP');
}
function dumpHeaders() {
if ($_POST['format'] == 'php') {
header('Content-Type: text/plain; charset=utf-8');
return 'php';
}
}
function dumpTable($table) {
if ($_POST['format'] == 'php') {
$this->output[$table] = array();
if (!$this->shutdown_callback) {
$this->shutdown_callback = true;
register_shutdown_function(array($this, '_export'));
}
return true;
}
}
function dumpData($table, $style, $query) {
if ($_POST['format'] == 'php') {
$connection = connection();
$result = $connection->query($query, 1);
if ($result) {
while ($row = $result->fetch_assoc()) {
$this->output[$table][] = $row;
}
}
return true;
}
}
function _export() {
echo "<?php\n";
var_export($this->output);
}
}

View File

@@ -7,6 +7,11 @@
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other) * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
*/ */
class AdminerEditForeign { class AdminerEditForeign {
var $_limit;
function AdminerEditForeign($limit = 0) {
$this->_limit = $limit;
}
function editInput($table, $field, $attrs, $value) { function editInput($table, $field, $attrs, $value) {
static $foreignTables = array(); static $foreignTables = array();
@@ -22,6 +27,9 @@ class AdminerEditForeign {
$options = &$values[$target][$id]; $options = &$values[$target][$id];
if (!$options) { if (!$options) {
$options = array("" => "") + get_vals("SELECT " . idf_escape($id) . " FROM " . table($target) . " ORDER BY 1"); $options = array("" => "") + get_vals("SELECT " . idf_escape($id) . " FROM " . table($target) . " ORDER BY 1");
if ($this->_limit && count($options) - 1 > $this->_limit) {
return;
}
} }
return "<select$attrs>" . optionlist($options, $value) . "</select>"; return "<select$attrs>" . optionlist($options, $value) . "</select>";
} }

View File

@@ -3,19 +3,46 @@
/** Display JSON values as table in edit /** Display JSON values as table in edit
* @link http://www.adminer.org/plugins/#use * @link http://www.adminer.org/plugins/#use
* @author Jakub Vrana, http://www.vrana.cz/ * @author Jakub Vrana, http://www.vrana.cz/
* @author Martin Zeman (Zemistr), http://www.zemistr.eu/
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other) * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
*/ */
class AdminerJsonColumn { class AdminerJsonColumn {
private function _testJson($value) {
function editInput($table, $field, $attrs, $value) { if ((substr($value, 0, 1) == '{' || substr($value, 0, 1) == '[') && ($json = json_decode($value, true))) {
if (substr($value, 0, 1) == '{' && ($json = json_decode($value, true))) { return $json;
echo "<table cellspacing='0'>";
foreach ($json as $key => $val) {
echo "<tr><th>" . h($key) . "<td><code class='jush-js'>" . h(json_encode($val)) . "</code>";
}
echo "</table>";
} }
return $value;
} }
private function _buildTable($json) {
echo '<table cellspacing="0" style="margin:2px">';
foreach ($json as $key => $val) {
echo '<tr>';
echo '<th>' . h($key) . '</th>';
echo '<td>';
if (is_scalar($val) || $val === null) {
if (is_bool($val)) {
$val = $val ? 'true' : 'false';
} elseif ($val === null) {
$val = 'null';
} elseif (!is_numeric($val)) {
$val = '"' . h(addcslashes($val, "\r\n\"")) . '"';
}
echo '<code class="jush-js">' . $val . '</code>';
} else {
$this->_buildTable($val);
}
echo '</td>';
echo '</tr>';
}
echo '</table>';
}
function editInput($table, $field, $attrs, $value) {
$json = $this->_testJson($value);
if ($json !== $value) {
$this->_buildTable($json);
}
}
} }