mirror of
https://github.com/vrana/adminer.git
synced 2025-08-30 01:30:12 +02:00
Compare commits
295 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
6b20230d50 | ||
|
836dba07af | ||
|
883e0a6619 | ||
|
5000e7dc16 | ||
|
798432935d | ||
|
08060f3253 | ||
|
6d59ed6d7e | ||
|
eb0d5c3c5e | ||
|
04d707ef94 | ||
|
004ac1c782 | ||
|
3ad62d55c8 | ||
|
42de70d032 | ||
|
aa2907190e | ||
|
5c8b6a3408 | ||
|
7f883b9302 | ||
|
27db0914ca | ||
|
483cbf1616 | ||
|
08a956cf2a | ||
|
9d992e4be6 | ||
|
7ece69a8c4 | ||
|
1838df9465 | ||
|
4e6ad13eac | ||
|
ba35e11bae | ||
|
834f4b6c5b | ||
|
176f2923cd | ||
|
aaaca731cd | ||
|
ee9932a0dd | ||
|
c34c672df9 | ||
|
550289de51 | ||
|
f652ff807e | ||
|
746603bdc7 | ||
|
e9d9a30844 | ||
|
4d5de895e2 | ||
|
e282ced59e | ||
|
20d722b882 | ||
|
c1c3b84fff | ||
|
b176a0fbd4 | ||
|
8456779e18 | ||
|
3b69ff4ce2 | ||
|
3a101e873f | ||
|
6ecef5eca6 | ||
|
707958c63d | ||
|
5d18df1d82 | ||
|
8602304d86 | ||
|
e744fecd98 | ||
|
b58e03f5fc | ||
|
40a86bffa2 | ||
|
b7b22486b2 | ||
|
cbf7373b54 | ||
|
b29767dcfb | ||
|
db75be9ba7 | ||
|
67c991846e | ||
|
7d3266b369 | ||
|
5f3a820571 | ||
|
e7df6bf616 | ||
|
1d8bd0a210 | ||
|
6fe9827eea | ||
|
7900062d4d | ||
|
63cffbbc8a | ||
|
0b3baa1e23 | ||
|
e3fbc56b6f | ||
|
00607012af | ||
|
e4e5941b90 | ||
|
097f2a1242 | ||
|
c81bed0baa | ||
|
9c9fc4a85b | ||
|
b46b1dd574 | ||
|
f248fb29b1 | ||
|
94f75f9798 | ||
|
f2e2c6e4ac | ||
|
e321a26ee5 | ||
|
f35dd89c65 | ||
|
8f2b4ced62 | ||
|
5eb3446908 | ||
|
a685d414ad | ||
|
7c9fec4e6b | ||
|
224cbfed56 | ||
|
490d274662 | ||
|
3a27c4f64c | ||
|
bd6ebcaab9 | ||
|
1f97968e65 | ||
|
dfb33a323d | ||
|
869c2b92ea | ||
|
675dbaad73 | ||
|
a001a3a061 | ||
|
df451f4374 | ||
|
9def8d7f95 | ||
|
2385bf72bd | ||
|
12427467f7 | ||
|
2bec4ca11b | ||
|
e676303a26 | ||
|
9261abc415 | ||
|
e5c05fe26c | ||
|
21bf7e0570 | ||
|
93f04464a2 | ||
|
e03713ce2d | ||
|
2da5683b99 | ||
|
8ff20622fb | ||
|
9ef14dbf77 | ||
|
274fa2259b | ||
|
7541149522 | ||
|
2a3626faae | ||
|
d94e348f57 | ||
|
51dbfb6987 | ||
|
578c9fca92 | ||
|
d9289355d7 | ||
|
874b9ee746 | ||
|
17974cdf76 | ||
|
2d8b6ec771 | ||
|
5982060f3b | ||
|
6496ff5a47 | ||
|
6aa55d806b | ||
|
0ef358a6b5 | ||
|
882e9d02a0 | ||
|
e346f47384 | ||
|
fdd02a5485 | ||
|
7238bc7900 | ||
|
15ac0889c0 | ||
|
ab40931365 | ||
|
5d6e9fff65 | ||
|
d6d86fa26a | ||
|
f25ffb36f9 | ||
|
49fd7858ac | ||
|
0628b8de02 | ||
|
99434644ef | ||
|
5492b3e055 | ||
|
84b69da58d | ||
|
a51d0f4701 | ||
|
7cd82c8fd7 | ||
|
d065c9ba51 | ||
|
f79340a0b5 | ||
|
4bc9a29f3e | ||
|
81530227c2 | ||
|
d8217d6ee2 | ||
|
02c13131e3 | ||
|
21c339901c | ||
|
06c4fd4855 | ||
|
0a473cef18 | ||
|
652a09bb91 | ||
|
47a9453ace | ||
|
d4f99d5cdc | ||
|
72ed1b5cdc | ||
|
4e825a36d3 | ||
|
927444ffdd | ||
|
d9976c25fc | ||
|
c5fa212b26 | ||
|
edef2b1a3d | ||
|
7eccd59856 | ||
|
476b957565 | ||
|
8e43fffe53 | ||
|
d2c6ea21b6 | ||
|
a310d52327 | ||
|
0717bce535 | ||
|
53aad3bb62 | ||
|
99cd514a29 | ||
|
8ea4892523 | ||
|
74e4bb9a6f | ||
|
3d2d39e7d0 | ||
|
06a4d294bd | ||
|
0d5e5819a0 | ||
|
b17ffcc512 | ||
|
d91bd659a5 | ||
|
1efb87fcbe | ||
|
d8f1521b60 | ||
|
cb6e2f9a86 | ||
|
4824c578bf | ||
|
f4607d763c | ||
|
12293ce215 | ||
|
c47d933ab0 | ||
|
6e6785ebc4 | ||
|
6d848bf165 | ||
|
2189947c43 | ||
|
b6f9f58712 | ||
|
fdeb9557cd | ||
|
11e1290b5b | ||
|
ac9fd04f87 | ||
|
2128c05e53 | ||
|
550db0691e | ||
|
4484f5f620 | ||
|
c2f8ccc8d8 | ||
|
bd279b2758 | ||
|
76575a95f1 | ||
|
95bab4c077 | ||
|
e85af88227 | ||
|
c6bb98ad22 | ||
|
2a0f17b6d9 | ||
|
dc1ad9e8ed | ||
|
1270748f74 | ||
|
266fda37a1 | ||
|
1f14ab470f | ||
|
501234c2d1 | ||
|
197ab976b8 | ||
|
b2759df1f9 | ||
|
de07f00ccb | ||
|
031d2c6a34 | ||
|
e2810adc05 | ||
|
baeeb362f7 | ||
|
347ac77bab | ||
|
6b9eb3f446 | ||
|
f58b13e994 | ||
|
fe295bc78a | ||
|
b39469eb9f | ||
|
20684a5166 | ||
|
2c8dbf49cc | ||
|
88647b93e4 | ||
|
b8c5eec46d | ||
|
dadbb37f00 | ||
|
ea1acfc8bc | ||
|
2dd65f0c0f | ||
|
473f7264f8 | ||
|
db01282e29 | ||
|
1f173e18bd | ||
|
4043092ec2 | ||
|
60ad161178 | ||
|
a12d31c5a8 | ||
|
f6880b59d6 | ||
|
72beecc0ab | ||
|
42de1051a6 | ||
|
af1a908f56 | ||
|
205305d6b5 | ||
|
0e5f39042a | ||
|
f94f29124a | ||
|
28996e2286 | ||
|
7f8c93a6f1 | ||
|
25dda09bce | ||
|
ff45b8f7a9 | ||
|
3a36112a10 | ||
|
e9e61fce26 | ||
|
5a1498d160 | ||
|
ccb7442d1b | ||
|
eebda8695b | ||
|
94d18d003e | ||
|
3881fc1680 | ||
|
9bd63a1326 | ||
|
92d5858b03 | ||
|
d506f1e241 | ||
|
cd7f06c8b2 | ||
|
b83c61fca3 | ||
|
3882bfaac1 | ||
|
29e2475b5a | ||
|
fd1dd4ecf4 | ||
|
dc9e87dbd6 | ||
|
66f335fb63 | ||
|
574c07b8f5 | ||
|
84e4122225 | ||
|
a61a76716b | ||
|
5d317111c7 | ||
|
6af375c67d | ||
|
609b8690ec | ||
|
13260dcb76 | ||
|
e002a3bc99 | ||
|
f44f186b38 | ||
|
c24a6a6aef | ||
|
f11a31e0a9 | ||
|
38e741054a | ||
|
513e1f425f | ||
|
a023e98c4d | ||
|
633e7ced9c | ||
|
3a3df6962b | ||
|
1e4fb073b5 | ||
|
08637cee62 | ||
|
4742bde873 | ||
|
7a89b5a037 | ||
|
c5b5b61be1 | ||
|
2b0ac4c0e1 | ||
|
ef53494df0 | ||
|
98458f737d | ||
|
68edea54ea | ||
|
6660789d04 | ||
|
ee4ffe9b65 | ||
|
27de0417fe | ||
|
339981b9d6 | ||
|
53a8496412 | ||
|
fb38ae2ffd | ||
|
91da14b15c | ||
|
51abdcdab9 | ||
|
4038144c38 | ||
|
50ed4f7ce7 | ||
|
4f8ecd3c11 | ||
|
f2063c92c5 | ||
|
5db1ea3301 | ||
|
e915f73f18 | ||
|
92f197b7c1 | ||
|
63484fb875 | ||
|
701c5cd73b | ||
|
4310d710d9 | ||
|
2bb472d7a6 | ||
|
9e74c0632f | ||
|
d4f7e04156 | ||
|
124092fd7c | ||
|
144039d0cb | ||
|
a8c218f192 | ||
|
2dd3bd0e1a | ||
|
28209301ca | ||
|
7ccc1e3e15 |
20
.editorconfig
Normal file
20
.editorconfig
Normal file
@@ -0,0 +1,20 @@
|
||||
# https://editorconfig.org/
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.{php,css,js}]
|
||||
indent_style = tab
|
||||
|
||||
[*.json]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[*.md]
|
||||
indent_style = space
|
||||
trim_trailing_whitespace = false
|
||||
max_line_length = 120
|
6
.gitattributes
vendored
Normal file
6
.gitattributes
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
/.gitattributes export-ignore
|
||||
/.github export-ignore
|
||||
/.gitignore export-ignore
|
||||
/.gitmodules export-ignore
|
||||
/.travis.yml export-ignore
|
||||
/tests export-ignore
|
3
.github/FUNDING.yml
vendored
3
.github/FUNDING.yml
vendored
@@ -1,2 +1,3 @@
|
||||
github: vrana
|
||||
patreon: jakubvrana
|
||||
custom: ["https://sourceforge.net/p/adminer/donate/"]
|
||||
custom: ["https://www.paypal.com/donate/?item_name=Donation+to+Adminer&business=jakub%40vrana.cz"]
|
||||
|
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '20 16 * * 0'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||
# Learn more:
|
||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
10
.gitmodules
vendored
10
.gitmodules
vendored
@@ -1,12 +1,6 @@
|
||||
[submodule "jush"]
|
||||
path = externals/jush
|
||||
url = git://github.com/vrana/jush
|
||||
url = https://github.com/vrana/jush
|
||||
[submodule "JsShrink"]
|
||||
path = externals/JsShrink
|
||||
url = git://github.com/vrana/JsShrink
|
||||
[submodule "designs/hydra"]
|
||||
path = designs/hydra
|
||||
url = https://github.com/Niyko/Hydra-Dark-Theme-for-Adminer
|
||||
[submodule "designs/pepa-linha-dark"]
|
||||
path = designs/pepa-linha-dark
|
||||
url = https://github.com/pepa-linha/Adminer-Design-Dark/
|
||||
url = https://github.com/vrana/JsShrink
|
||||
|
@@ -6,4 +6,8 @@ php:
|
||||
- 7.3
|
||||
- 7.4
|
||||
- 8.0
|
||||
- 8.1
|
||||
- 8.2
|
||||
- 8.3
|
||||
- 8.4
|
||||
script: git diff --name-only $TRAVIS_COMMIT_RANGE | grep '\.php$' | xargs -n1 -P8 php -l | grep -v 'No syntax errors'; test $? -eq 1
|
||||
|
11
SECURITY.md
Normal file
11
SECURITY.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
I support only the last published version and the last development version (last commit).
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
To report a vulnerability, create a private bug at https://sourceforge.net/p/adminer/bugs-and-features/new/?private=1.
|
||||
|
||||
I handle security issues with top priority. If you don't hear from me in a week then please ping the bug. Once I accept the bug, the fix should be available and new version released within days. I will mark the bug as public after releasing a new version or declining the bug.
|
@@ -28,13 +28,13 @@ if (!$error && $_POST) {
|
||||
}
|
||||
$call[] = (isset($out[$key]) ? "@" . idf_escape($field["field"]) : $val);
|
||||
}
|
||||
|
||||
|
||||
$query = (isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . table($PROCEDURE) . "(" . implode(", ", $call) . ")";
|
||||
$start = microtime(true);
|
||||
$result = $connection->multi_query($query);
|
||||
$affected = $connection->affected_rows; // getting warnigns overwrites this
|
||||
$affected = $connection->affected_rows; // getting warnings overwrites this
|
||||
echo $adminer->selectQuery($query, $start, !$result);
|
||||
|
||||
|
||||
if (!$result) {
|
||||
echo "<p class='error'>" . error() . "\n";
|
||||
} else {
|
||||
@@ -42,7 +42,7 @@ if (!$error && $_POST) {
|
||||
if (is_object($connection2)) {
|
||||
$connection2->select_db(DB);
|
||||
}
|
||||
|
||||
|
||||
do {
|
||||
$result = $connection->store_result();
|
||||
if (is_object($result)) {
|
||||
@@ -53,7 +53,7 @@ if (!$error && $_POST) {
|
||||
;
|
||||
}
|
||||
} while ($connection->next_result());
|
||||
|
||||
|
||||
if ($out) {
|
||||
select($connection->query("SELECT " . implode(", ", $out)));
|
||||
}
|
||||
@@ -64,7 +64,7 @@ if (!$error && $_POST) {
|
||||
<form action="" method="post">
|
||||
<?php
|
||||
if ($in) {
|
||||
echo "<table cellspacing='0' class='layout'>\n";
|
||||
echo "<table class='layout'>\n";
|
||||
foreach ($in as $key) {
|
||||
$field = $routine["fields"][$key];
|
||||
$name = $field["field"];
|
||||
@@ -88,3 +88,22 @@ if ($in) {
|
||||
<input type="submit" value="<?php echo lang('Call'); ?>">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
||||
<pre>
|
||||
<?php
|
||||
function pre_tr($s) {
|
||||
return preg_replace('~^~m', '<tr>', preg_replace('~\|~', '<td>', preg_replace('~\|$~m', "", rtrim($s))));
|
||||
}
|
||||
$table = '(\+--[-+]+\+\n)';
|
||||
$row = '(\| .* \|\n)';
|
||||
echo
|
||||
preg_replace_callback("~^$table?$row$table?($row*)$table?~m", function ($match) {
|
||||
$first_row = pre_tr($match[2]);
|
||||
return "<table>\n" . ($match[1] ? "<thead>$first_row</thead>\n" : $first_row) . pre_tr($match[4]) . "\n</table>";
|
||||
},
|
||||
preg_replace('~(\n( -|mysql)> )(.+)~', "\\1<code class='jush-sql'>\\3</code>",
|
||||
preg_replace('~(.+)\n---+\n~', "<b>\\1</b>\n",
|
||||
h($routine['comment'])
|
||||
)));
|
||||
?>
|
||||
</pre>
|
||||
|
35
adminer/check.inc.php
Normal file
35
adminer/check.inc.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
$TABLE = $_GET["check"];
|
||||
$name = $_GET["name"];
|
||||
$row = $_POST;
|
||||
|
||||
if ($row && !$error) {
|
||||
$result = ($name == "" || queries("ALTER TABLE " . table($TABLE) . " DROP CONSTRAINT " . idf_escape($name)));
|
||||
if (!$row["drop"]) {
|
||||
$result = queries("ALTER TABLE " . table($TABLE) . " ADD" . ($row["name"] != "" ? " CONSTRAINT " . idf_escape($row["name"]) . "" : "") . " CHECK ($row[clause])"); //! SQL injection
|
||||
}
|
||||
queries_redirect(
|
||||
ME . "table=" . urlencode($TABLE),
|
||||
($row["drop"] ? lang('Check has been dropped.') : ($name != "" ? lang('Check has been altered.') : lang('Check has been created.'))),
|
||||
$result
|
||||
);
|
||||
}
|
||||
|
||||
page_header(($name != "" ? lang('Alter check') . ": " . h($name) : lang('Create check')), $error, array("table" => $TABLE));
|
||||
|
||||
if (!$row) {
|
||||
$checks = check_constraints($TABLE);
|
||||
$row = array("name" => $name, "clause" => $checks[$name]);
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" data-maxlength="64" autocapitalize="off"><?php echo doc_link(array(
|
||||
'sql' => 'create-table-check-constraints.html',
|
||||
'mariadb' => 'constraint/',
|
||||
)); ?>
|
||||
<p><?php textarea("clause", $row["clause"]); ?>
|
||||
<p><input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php if ($name != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $name)); ?><?php } ?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
@@ -49,12 +49,9 @@ if ($_POST && !process_fields($row["fields"]) && !$error) {
|
||||
if (!$field["has_default"]) {
|
||||
$field["default"] = null;
|
||||
}
|
||||
if ($key == $row["auto_increment_col"]) {
|
||||
$field["auto_increment"] = true;
|
||||
}
|
||||
$process_field = process_field($field, $type_field);
|
||||
$all_fields[] = array($field["orig"], $process_field, $after);
|
||||
if ($process_field != process_field($orig_field, $orig_field)) {
|
||||
if (!$orig_field || $process_field !== process_field($orig_field, $orig_field)) {
|
||||
$fields[] = array($field["orig"], $process_field, $after);
|
||||
if ($field["orig"] != "" || $after) {
|
||||
$use_all_fields = true;
|
||||
@@ -82,20 +79,39 @@ if ($_POST && !process_fields($row["fields"]) && !$error) {
|
||||
}
|
||||
|
||||
$partitioning = "";
|
||||
if ($partition_by[$row["partition_by"]]) {
|
||||
$partitions = array();
|
||||
if ($row["partition_by"] == 'RANGE' || $row["partition_by"] == 'LIST') {
|
||||
foreach (array_filter($row["partition_names"]) as $key => $val) {
|
||||
$value = $row["partition_values"][$key];
|
||||
$partitions[] = "\n PARTITION " . idf_escape($val) . " VALUES " . ($row["partition_by"] == 'RANGE' ? "LESS THAN" : "IN") . ($value != "" ? " ($value)" : " MAXVALUE"); //! SQL injection
|
||||
if (support("partitioning")) {
|
||||
if (isset($partition_by[$row["partition_by"]])) {
|
||||
$params = array_filter($row, function ($key) {
|
||||
return preg_match('~^partition~', $key);
|
||||
}, ARRAY_FILTER_USE_KEY);
|
||||
|
||||
foreach ($params["partition_names"] as $key => $name) {
|
||||
if ($name == "") {
|
||||
unset($params["partition_names"][$key]);
|
||||
unset($params["partition_values"][$key]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($params != get_partitions_info($TABLE)) {
|
||||
$partitions = array();
|
||||
if ($params["partition_by"] == 'RANGE' || $params["partition_by"] == 'LIST') {
|
||||
foreach ($params["partition_names"] as $key => $name) {
|
||||
$value = $params["partition_values"][$key];
|
||||
$partitions[] = "\n PARTITION " . idf_escape($name) . " VALUES " . ($params["partition_by"] == 'RANGE' ? "LESS THAN" : "IN") . ($value != "" ? " ($value)" : " MAXVALUE"); //! SQL injection
|
||||
}
|
||||
}
|
||||
|
||||
// $params["partition"] can be expression, not only column
|
||||
$partitioning .= "\nPARTITION BY $params[partition_by]($params[partition])";
|
||||
if ($partitions) {
|
||||
$partitioning .= " (" . implode(",", $partitions) . "\n)";
|
||||
} elseif ($params["partitions"]) {
|
||||
$partitioning .= " PARTITIONS " . (+$params["partitions"]);
|
||||
}
|
||||
}
|
||||
} elseif (preg_match("~partitioned~", $table_status["Create_options"])) {
|
||||
$partitioning .= "\nREMOVE PARTITIONING";
|
||||
}
|
||||
$partitioning .= "\nPARTITION BY $row[partition_by]($row[partition])" . ($partitions // $row["partition"] can be expression, not only column
|
||||
? " (" . implode(",", $partitions) . "\n)"
|
||||
: ($row["partitions"] ? " PARTITIONS " . (+$row["partitions"]) : "")
|
||||
);
|
||||
} elseif (support("partitioning") && preg_match("~partitioned~", $table_status["Create_options"])) {
|
||||
$partitioning .= "\nREMOVE PARTITIONING";
|
||||
}
|
||||
|
||||
$message = lang('Table has been altered.');
|
||||
@@ -141,13 +157,9 @@ if (!$_POST) {
|
||||
}
|
||||
|
||||
if (support("partitioning")) {
|
||||
$from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . q(DB) . " AND TABLE_NAME = " . q($TABLE);
|
||||
$result = $connection->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");
|
||||
list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row();
|
||||
$partitions = get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");
|
||||
$partitions[""] = "";
|
||||
$row["partition_names"] = array_keys($partitions);
|
||||
$row["partition_values"] = array_values($partitions);
|
||||
$row += get_partitions_info($TABLE);
|
||||
$row["partition_names"][] = "";
|
||||
$row["partition_values"][] = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -166,8 +178,7 @@ foreach ($engines as $engine) {
|
||||
<form action="" method="post" id="form">
|
||||
<p>
|
||||
<?php if (support("columns") || $TABLE == "") { ?>
|
||||
<?php echo lang('Table name'); ?>: <input name="name" data-maxlength="64" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
||||
<?php if ($TABLE == "" && !$_POST) { echo script("focus(qs('#form')['name']);"); } ?>
|
||||
<?php echo lang('Table name'); ?>: <input name="name"<?php echo ($TABLE == "" && !$_POST ? " autofocus" : ""); ?> data-maxlength="64" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
||||
<?php echo ($engines ? "<select name='Engine'>" . optionlist(array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) . "</select>" . on_help("getTarget(event).value", 1) . script("qsl('select').onchange = helpClose;") : ""); ?>
|
||||
<?php echo ($collations && !preg_match("~sqlite|mssql~", $jush) ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
@@ -175,7 +186,7 @@ foreach ($engines as $engine) {
|
||||
|
||||
<?php if (support("columns")) { ?>
|
||||
<div class="scrollable">
|
||||
<table cellspacing="0" id="edit-fields" class="nowrap">
|
||||
<table id="edit-fields" class="nowrap">
|
||||
<?php
|
||||
edit_fields($row["fields"], $collations, "TABLE", $foreign_keys);
|
||||
?>
|
||||
@@ -183,13 +194,19 @@ edit_fields($row["fields"], $collations, "TABLE", $foreign_keys);
|
||||
<?php echo script("editFields();"); ?>
|
||||
</div>
|
||||
<p>
|
||||
<?php echo lang('Auto Increment'); ?>: <input type="number" name="Auto_increment" size="6" value="<?php echo h($row["Auto_increment"]); ?>">
|
||||
<?php echo lang('Auto Increment'); ?>: <input type="number" name="Auto_increment" class="size" value="<?php echo h($row["Auto_increment"]); ?>">
|
||||
<?php echo checkbox("defaults", 1, ($_POST ? $_POST["defaults"] : adminer_setting("defaults")), lang('Default values'), "columnShow(this.checked, 5)", "jsonly"); ?>
|
||||
<?php echo (support("comment")
|
||||
? checkbox("comments", 1, ($_POST ? $_POST["comments"] : adminer_setting("comments")), lang('Comment'), "editingCommentsClick(this, true);", "jsonly")
|
||||
. ' <input name="Comment" value="' . h($row["Comment"]) . '" data-maxlength="' . (min_version(5.5) ? 2048 : 60) . '">'
|
||||
<?php
|
||||
$comments = ($_POST ? $_POST["comments"] : adminer_setting("comments"));
|
||||
echo (support("comment")
|
||||
? checkbox("comments", 1, $comments, lang('Comment'), "editingCommentsClick(this, true);", "jsonly")
|
||||
. ' ' . (preg_match('~\n~', $row["Comment"])
|
||||
? "<textarea name='Comment' rows='2' cols='20'" . ($comments ? "" : " class='hidden'") . ">" . h($row["Comment"]) . "</textarea>"
|
||||
: '<input name="Comment" value="' . h($row["Comment"]) . '" data-maxlength="' . (min_version(5.5) ? 2048 : 60) . '"' . ($comments ? "" : " class='hidden'") . '>'
|
||||
)
|
||||
: '')
|
||||
; ?>
|
||||
;
|
||||
?>
|
||||
<p>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php } ?>
|
||||
@@ -204,7 +221,7 @@ if (support("partitioning")) {
|
||||
<?php echo "<select name='partition_by'>" . optionlist(array("" => "") + $partition_by, $row["partition_by"]) . "</select>" . on_help("getTarget(event).value.replace(/./, 'PARTITION BY \$&')", 1) . script("qsl('select').onchange = partitionByChange;"); ?>
|
||||
(<input name="partition" value="<?php echo h($row["partition"]); ?>">)
|
||||
<?php echo lang('Partitions'); ?>: <input type="number" name="partitions" class="size<?php echo ($partition_table || !$row["partition_by"] ? " hidden" : ""); ?>" value="<?php echo h($row["partitions"]); ?>">
|
||||
<table cellspacing="0" id="partition-table"<?php echo ($partition_table ? "" : " class='hidden'"); ?>>
|
||||
<table id="partition-table"<?php echo ($partition_table ? "" : " class='hidden'"); ?>>
|
||||
<thead><tr><th><?php echo lang('Partition name'); ?><th><?php echo lang('Values'); ?></thead>
|
||||
<?php
|
||||
foreach ($row["partition_names"] as $key => $val) {
|
||||
|
@@ -59,14 +59,13 @@ if ($_POST) {
|
||||
<p>
|
||||
<?php
|
||||
echo ($_POST["add_x"] || strpos($name, "\n")
|
||||
? '<textarea id="name" name="name" rows="10" cols="40">' . h($name) . '</textarea><br>'
|
||||
: '<input name="name" id="name" value="' . h($name) . '" data-maxlength="64" autocapitalize="off">'
|
||||
? '<textarea autofocus name="name" rows="10" cols="40">' . h($name) . '</textarea><br>'
|
||||
: '<input name="name" autofocus value="' . h($name) . '" data-maxlength="64" autocapitalize="off">'
|
||||
) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $row["collation"]) . doc_link(array(
|
||||
'sql' => "charset-charsets.html",
|
||||
'mariadb' => "supported-character-sets-and-collations/",
|
||||
'mssql' => "ms187963.aspx",
|
||||
)) : "");
|
||||
echo script("focus(qs('#name'));");
|
||||
?>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php
|
||||
|
@@ -61,12 +61,12 @@ if ($adminer->homepage()) {
|
||||
echo " <input type='submit' name='search' value='" . lang('Search') . "'>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
if ($_POST["search"] && $_POST["query"] != "") {
|
||||
$_GET["where"][0]["op"] = "LIKE %%";
|
||||
$_GET["where"][0]["op"] = $driver->convertOperator("LIKE %%");
|
||||
search_tables();
|
||||
}
|
||||
}
|
||||
echo "<div class='scrollable'>\n";
|
||||
echo "<table cellspacing='0' class='nowrap checkable'>\n";
|
||||
echo "<table class='nowrap checkable odds'>\n";
|
||||
echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
|
||||
echo '<thead><tr class="wrap">';
|
||||
echo '<td><input id="check-all" type="checkbox" class="jsonly">' . script("qs('#check-all').onclick = partial(formCheck, /^(tables|views)\[/);", "");
|
||||
@@ -83,9 +83,9 @@ if ($adminer->homepage()) {
|
||||
|
||||
$tables = 0;
|
||||
foreach ($tables_list as $name => $type) {
|
||||
$view = ($type !== null && !preg_match('~table~i', $type));
|
||||
$view = ($type !== null && !preg_match('~table|sequence~i', $type));
|
||||
$id = h("Table-" . $name);
|
||||
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "", "", $id);
|
||||
echo '<tr><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "", "", $id);
|
||||
echo '<th>' . (support("table") || support("indexes") ? "<a href='" . h(ME) . "table=" . urlencode($name) . "' title='" . lang('Show structure') . "' id='$id'>" . h($name) . '</a>' : h($name));
|
||||
if ($view) {
|
||||
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>';
|
||||
@@ -109,6 +109,7 @@ if ($adminer->homepage()) {
|
||||
$tables++;
|
||||
}
|
||||
echo (support("comment") ? "<td id='Comment-" . h($name) . "'>" : "");
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
echo "<tr><td><th>" . lang('%d in total', count($tables_list));
|
||||
@@ -117,6 +118,7 @@ if ($adminer->homepage()) {
|
||||
foreach (array("Data_length", "Index_length", "Data_free") as $key) {
|
||||
echo "<td align='right' id='sum-$key'>";
|
||||
}
|
||||
echo "\n";
|
||||
|
||||
echo "</table>\n";
|
||||
echo "</div>\n";
|
||||
@@ -159,12 +161,11 @@ if ($adminer->homepage()) {
|
||||
echo "<h3 id='routines'>" . lang('Routines') . "</h3>\n";
|
||||
$routines = routines();
|
||||
if ($routines) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<table class='odds'>\n";
|
||||
echo '<thead><tr><th>' . lang('Name') . '<td>' . lang('Type') . '<td>' . lang('Return type') . "<td></thead>\n";
|
||||
odd('');
|
||||
foreach ($routines as $row) {
|
||||
$name = ($row["SPECIFIC_NAME"] == $row["ROUTINE_NAME"] ? "" : "&name=" . urlencode($row["ROUTINE_NAME"])); // not computed on the pages to be able to print the header first
|
||||
echo '<tr' . odd() . '>';
|
||||
echo '<tr>';
|
||||
echo '<th><a href="' . h(ME . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'callf=' : 'call=') . urlencode($row["SPECIFIC_NAME"]) . $name) . '">' . h($row["ROUTINE_NAME"]) . '</a>';
|
||||
echo '<td>' . h($row["ROUTINE_TYPE"]);
|
||||
echo '<td>' . h($row["DTD_IDENTIFIER"]);
|
||||
@@ -182,11 +183,10 @@ if ($adminer->homepage()) {
|
||||
echo "<h3 id='sequences'>" . lang('Sequences') . "</h3>\n";
|
||||
$sequences = get_vals("SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema() ORDER BY sequence_name");
|
||||
if ($sequences) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<table class='odds'>\n";
|
||||
echo "<thead><tr><th>" . lang('Name') . "</thead>\n";
|
||||
odd('');
|
||||
foreach ($sequences as $val) {
|
||||
echo "<tr" . odd() . "><th><a href='" . h(ME) . "sequence=" . urlencode($val) . "'>" . h($val) . "</a>\n";
|
||||
echo "<tr><th><a href='" . h(ME) . "sequence=" . urlencode($val) . "'>" . h($val) . "</a>\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
@@ -197,11 +197,10 @@ if ($adminer->homepage()) {
|
||||
echo "<h3 id='user-types'>" . lang('User types') . "</h3>\n";
|
||||
$user_types = types();
|
||||
if ($user_types) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<table class='odds'>\n";
|
||||
echo "<thead><tr><th>" . lang('Name') . "</thead>\n";
|
||||
odd('');
|
||||
foreach ($user_types as $val) {
|
||||
echo "<tr" . odd() . "><th><a href='" . h(ME) . "type=" . urlencode($val) . "'>" . h($val) . "</a>\n";
|
||||
echo "<tr><th><a href='" . h(ME) . "type=" . urlencode($val) . "'>" . h($val) . "</a>\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
@@ -212,7 +211,7 @@ if ($adminer->homepage()) {
|
||||
echo "<h3 id='events'>" . lang('Events') . "</h3>\n";
|
||||
$rows = get_rows("SHOW EVENTS");
|
||||
if ($rows) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<table>\n";
|
||||
echo "<thead><tr><th>" . lang('Name') . "<td>" . lang('Schedule') . "<td>" . lang('Start') . "<td>" . lang('End') . "<td></thead>\n";
|
||||
foreach ($rows as $row) {
|
||||
echo "<tr>";
|
||||
|
@@ -1,386 +1,30 @@
|
||||
<?php
|
||||
$drivers["mongo"] = "MongoDB";
|
||||
$drivers["mongo"] = "MongoDB (alpha)";
|
||||
|
||||
if (isset($_GET["mongo"])) {
|
||||
$possible_drivers = array("mongo", "mongodb");
|
||||
define("DRIVER", "mongo");
|
||||
|
||||
if (class_exists('MongoDB\Driver\Manager')) {
|
||||
class Min_DB {
|
||||
var $extension = "MongoDB", $server_info = MONGODB_VERSION, $error, $last_id;
|
||||
/** @var MongoDB\Driver\Manager */
|
||||
var $_link;
|
||||
var $_db, $_db_name;
|
||||
|
||||
function connect($uri, $options) {
|
||||
$class = 'MongoDB\Driver\Manager';
|
||||
return new $class($uri, $options);
|
||||
}
|
||||
|
||||
function query($query) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
$this->_db_name = $database;
|
||||
return true;
|
||||
}
|
||||
|
||||
function quote($string) {
|
||||
return $string;
|
||||
}
|
||||
|
||||
function ping($link) {
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
$link->executeCommand('admin', new $class(array('ping' => 1)));
|
||||
}
|
||||
}
|
||||
|
||||
class Min_Result {
|
||||
var $num_rows, $_rows = array(), $_offset = 0, $_charset = array();
|
||||
|
||||
function __construct($result) {
|
||||
foreach ($result as $item) {
|
||||
$row = array();
|
||||
foreach ($item as $key => $val) {
|
||||
if (is_a($val, 'MongoDB\BSON\Binary')) {
|
||||
$this->_charset[$key] = 63;
|
||||
}
|
||||
$row[$key] =
|
||||
(is_a($val, 'MongoDB\BSON\ObjectID') ? 'MongoDB\BSON\ObjectID("' . strval($val) . '")' :
|
||||
(is_a($val, 'MongoDB\BSON\UTCDatetime') ? $val->toDateTime()->format('Y-m-d H:i:s') :
|
||||
(is_a($val, 'MongoDB\BSON\Binary') ? $val->bin : //! allow downloading
|
||||
(is_a($val, 'MongoDB\BSON\Regex') ? strval($val) :
|
||||
(is_object($val) ? json_encode($val, 256) : // 256 = JSON_UNESCAPED_UNICODE
|
||||
$val // MongoMinKey, MongoMaxKey
|
||||
)))));
|
||||
}
|
||||
$this->_rows[] = $row;
|
||||
foreach ($row as $key => $val) {
|
||||
if (!isset($this->_rows[0][$key])) {
|
||||
$this->_rows[0][$key] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->num_rows = $result->count;
|
||||
}
|
||||
|
||||
function fetch_assoc() {
|
||||
$row = current($this->_rows);
|
||||
if (!$row) {
|
||||
return $row;
|
||||
}
|
||||
$return = array();
|
||||
foreach ($this->_rows[0] as $key => $val) {
|
||||
$return[$key] = $row[$key];
|
||||
}
|
||||
next($this->_rows);
|
||||
return $return;
|
||||
}
|
||||
|
||||
function fetch_row() {
|
||||
$return = $this->fetch_assoc();
|
||||
if (!$return) {
|
||||
return $return;
|
||||
}
|
||||
return array_values($return);
|
||||
}
|
||||
|
||||
function fetch_field() {
|
||||
$keys = array_keys($this->_rows[0]);
|
||||
$name = $keys[$this->_offset++];
|
||||
return (object) array(
|
||||
'name' => $name,
|
||||
'charsetnr' => $this->_charset[$name],
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
public $primary = "_id";
|
||||
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
global $connection;
|
||||
$select = ($select == array("*")
|
||||
? array()
|
||||
: array_fill_keys($select, 1)
|
||||
);
|
||||
if (count($select) && !isset($select['_id'])) {
|
||||
$select['_id'] = 0;
|
||||
}
|
||||
$where = where_to_query($where);
|
||||
$sort = array();
|
||||
foreach ($order as $val) {
|
||||
$val = preg_replace('~ DESC$~', '', $val, 1, $count);
|
||||
$sort[$val] = ($count ? -1 : 1);
|
||||
}
|
||||
if (isset($_GET['limit']) && is_numeric($_GET['limit']) && $_GET['limit'] > 0) {
|
||||
$limit = $_GET['limit'];
|
||||
}
|
||||
$limit = min(200, max(1, (int) $limit));
|
||||
$skip = $page * $limit;
|
||||
$class = 'MongoDB\Driver\Query';
|
||||
$query = new $class($where, array('projection' => $select, 'limit' => $limit, 'skip' => $skip, 'sort' => $sort));
|
||||
$results = $connection->_link->executeQuery("$connection->_db_name.$table", $query);
|
||||
return new Min_Result($results);
|
||||
}
|
||||
|
||||
function update($table, $set, $queryWhere, $limit = 0, $separator = "\n") {
|
||||
global $connection;
|
||||
$db = $connection->_db_name;
|
||||
$where = sql_query_where_parser($queryWhere);
|
||||
$class = 'MongoDB\Driver\BulkWrite';
|
||||
$bulk = new $class(array());
|
||||
if (isset($set['_id'])) {
|
||||
unset($set['_id']);
|
||||
}
|
||||
$removeFields = array();
|
||||
foreach ($set as $key => $value) {
|
||||
if ($value == 'NULL') {
|
||||
$removeFields[$key] = 1;
|
||||
unset($set[$key]);
|
||||
}
|
||||
}
|
||||
$update = array('$set' => $set);
|
||||
if (count($removeFields)) {
|
||||
$update['$unset'] = $removeFields;
|
||||
}
|
||||
$bulk->update($where, $update, array('upsert' => false));
|
||||
$results = $connection->_link->executeBulkWrite("$db.$table", $bulk);
|
||||
$connection->affected_rows = $results->getModifiedCount();
|
||||
return true;
|
||||
}
|
||||
|
||||
function delete($table, $queryWhere, $limit = 0) {
|
||||
global $connection;
|
||||
$db = $connection->_db_name;
|
||||
$where = sql_query_where_parser($queryWhere);
|
||||
$class = 'MongoDB\Driver\BulkWrite';
|
||||
$bulk = new $class(array());
|
||||
$bulk->delete($where, array('limit' => $limit));
|
||||
$results = $connection->_link->executeBulkWrite("$db.$table", $bulk);
|
||||
$connection->affected_rows = $results->getDeletedCount();
|
||||
return true;
|
||||
}
|
||||
|
||||
function insert($table, $set) {
|
||||
global $connection;
|
||||
$db = $connection->_db_name;
|
||||
$class = 'MongoDB\Driver\BulkWrite';
|
||||
$bulk = new $class(array());
|
||||
if (isset($set['_id']) && empty($set['_id'])) {
|
||||
unset($set['_id']);
|
||||
}
|
||||
$bulk->insert($set);
|
||||
$results = $connection->_link->executeBulkWrite("$db.$table", $bulk);
|
||||
$connection->affected_rows = $results->getInsertedCount();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function get_databases($flush) {
|
||||
/** @var Min_DB */
|
||||
global $connection;
|
||||
$return = array();
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
$command = new $class(array('listDatabases' => 1));
|
||||
$results = $connection->_link->executeCommand('admin', $command);
|
||||
foreach ($results as $dbs) {
|
||||
foreach ($dbs->databases as $db) {
|
||||
$return[] = $db->name;
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function count_tables($databases) {
|
||||
$return = array();
|
||||
return $return;
|
||||
}
|
||||
|
||||
function tables_list() {
|
||||
global $connection;
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
$command = new $class(array('listCollections' => 1));
|
||||
$results = $connection->_link->executeCommand($connection->_db_name, $command);
|
||||
$collections = array();
|
||||
foreach ($results as $result) {
|
||||
$collections[$result->name] = 'table';
|
||||
}
|
||||
return $collections;
|
||||
}
|
||||
|
||||
function drop_databases($databases) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function indexes($table, $connection2 = null) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
$command = new $class(array('listIndexes' => $table));
|
||||
$results = $connection->_link->executeCommand($connection->_db_name, $command);
|
||||
foreach ($results as $index) {
|
||||
$descs = array();
|
||||
$columns = array();
|
||||
foreach (get_object_vars($index->key) as $column => $type) {
|
||||
$descs[] = ($type == -1 ? '1' : null);
|
||||
$columns[] = $column;
|
||||
}
|
||||
$return[$index->name] = array(
|
||||
"type" => ($index->name == "_id_" ? "PRIMARY" : (isset($index->unique) ? "UNIQUE" : "INDEX")),
|
||||
"columns" => $columns,
|
||||
"lengths" => array(),
|
||||
"descs" => $descs,
|
||||
);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
$fields = fields_from_edit();
|
||||
if (!count($fields)) {
|
||||
global $driver;
|
||||
$result = $driver->select($table, array("*"), null, null, array(), 10);
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
foreach ($row as $key => $val) {
|
||||
$row[$key] = null;
|
||||
$fields[$key] = array(
|
||||
"field" => $key,
|
||||
"type" => "string",
|
||||
"null" => ($key != $driver->primary),
|
||||
"auto_increment" => ($key == $driver->primary),
|
||||
"privileges" => array(
|
||||
"insert" => 1,
|
||||
"select" => 1,
|
||||
"update" => 1,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $fields;
|
||||
}
|
||||
|
||||
function found_rows($table_status, $where) {
|
||||
global $connection;
|
||||
$where = where_to_query($where);
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
$command = new $class(array('count' => $table_status['Name'], 'query' => $where));
|
||||
$results = $connection->_link->executeCommand($connection->_db_name, $command);
|
||||
$toArray = $results->toArray();
|
||||
return $toArray[0]->n;
|
||||
}
|
||||
|
||||
function sql_query_where_parser($queryWhere) {
|
||||
$queryWhere = trim(preg_replace('/WHERE[\s]?[(]?\(?/', '', $queryWhere));
|
||||
$queryWhere = preg_replace('/\)\)\)$/', ')', $queryWhere);
|
||||
$wheres = explode(' AND ', $queryWhere);
|
||||
$wheresOr = explode(') OR (', $queryWhere);
|
||||
$where = array();
|
||||
foreach ($wheres as $whereStr) {
|
||||
$where[] = trim($whereStr);
|
||||
}
|
||||
if (count($wheresOr) == 1) {
|
||||
$wheresOr = array();
|
||||
} elseif (count($wheresOr) > 1) {
|
||||
$where = array();
|
||||
}
|
||||
return where_to_query($where, $wheresOr);
|
||||
}
|
||||
|
||||
function where_to_query($whereAnd = array(), $whereOr = array()) {
|
||||
global $adminer;
|
||||
$data = array();
|
||||
foreach (array('and' => $whereAnd, 'or' => $whereOr) as $type => $where) {
|
||||
if (is_array($where)) {
|
||||
foreach ($where as $expression) {
|
||||
list($col, $op, $val) = explode(" ", $expression, 3);
|
||||
if ($col == "_id") {
|
||||
$val = str_replace('MongoDB\BSON\ObjectID("', "", $val);
|
||||
$val = str_replace('")', "", $val);
|
||||
$class = 'MongoDB\BSON\ObjectID';
|
||||
$val = new $class($val);
|
||||
}
|
||||
if (!in_array($op, $adminer->operators)) {
|
||||
continue;
|
||||
}
|
||||
if (preg_match('~^\(f\)(.+)~', $op, $match)) {
|
||||
$val = (float) $val;
|
||||
$op = $match[1];
|
||||
} elseif (preg_match('~^\(date\)(.+)~', $op, $match)) {
|
||||
$dateTime = new DateTime($val);
|
||||
$class = 'MongoDB\BSON\UTCDatetime';
|
||||
$val = new $class($dateTime->getTimestamp() * 1000);
|
||||
$op = $match[1];
|
||||
}
|
||||
switch ($op) {
|
||||
case '=':
|
||||
$op = '$eq';
|
||||
break;
|
||||
case '!=':
|
||||
$op = '$ne';
|
||||
break;
|
||||
case '>':
|
||||
$op = '$gt';
|
||||
break;
|
||||
case '<':
|
||||
$op = '$lt';
|
||||
break;
|
||||
case '>=':
|
||||
$op = '$gte';
|
||||
break;
|
||||
case '<=':
|
||||
$op = '$lte';
|
||||
break;
|
||||
case 'regex':
|
||||
$op = '$regex';
|
||||
break;
|
||||
default:
|
||||
continue 2;
|
||||
}
|
||||
if ($type == 'and') {
|
||||
$data['$and'][] = array($col => array($op => $val));
|
||||
} elseif ($type == 'or') {
|
||||
$data['$or'][] = array($col => array($op => $val));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
$operators = array(
|
||||
"=",
|
||||
"!=",
|
||||
">",
|
||||
"<",
|
||||
">=",
|
||||
"<=",
|
||||
"regex",
|
||||
"(f)=",
|
||||
"(f)!=",
|
||||
"(f)>",
|
||||
"(f)<",
|
||||
"(f)>=",
|
||||
"(f)<=",
|
||||
"(date)=",
|
||||
"(date)!=",
|
||||
"(date)>",
|
||||
"(date)<",
|
||||
"(date)>=",
|
||||
"(date)<=",
|
||||
);
|
||||
} elseif (class_exists('MongoDB')) {
|
||||
if (class_exists('MongoDB')) {
|
||||
class Min_DB {
|
||||
var $extension = "Mongo", $server_info = MongoClient::VERSION, $error, $last_id, $_link, $_db;
|
||||
|
||||
function connect($uri, $options) {
|
||||
return @new MongoClient($uri, $options);
|
||||
try {
|
||||
$this->_link = new MongoClient($uri, $options);
|
||||
if ($options["password"] != "") {
|
||||
$options["password"] = "";
|
||||
try {
|
||||
new MongoClient($uri, $options);
|
||||
$this->error = lang('Database does not support password.');
|
||||
} catch (Exception $e) {
|
||||
// this is what we want
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$this->error = $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function query($query) {
|
||||
return false;
|
||||
}
|
||||
@@ -398,9 +42,6 @@ if (isset($_GET["mongo"])) {
|
||||
function quote($string) {
|
||||
return $string;
|
||||
}
|
||||
|
||||
function ping($link) {
|
||||
}
|
||||
}
|
||||
|
||||
class Min_Result {
|
||||
@@ -414,10 +55,10 @@ if (isset($_GET["mongo"])) {
|
||||
$this->_charset[$key] = 63;
|
||||
}
|
||||
$row[$key] =
|
||||
(is_a($val, 'MongoId') ? 'ObjectId("' . strval($val) . '")' :
|
||||
(is_a($val, 'MongoId') ? "ObjectId(\"$val\")" :
|
||||
(is_a($val, 'MongoDate') ? gmdate("Y-m-d H:i:s", $val->sec) . " GMT" :
|
||||
(is_a($val, 'MongoBinData') ? $val->bin : //! allow downloading
|
||||
(is_a($val, 'MongoRegex') ? strval($val) :
|
||||
(is_a($val, 'MongoRegex') ? "$val" :
|
||||
(is_object($val) ? get_class($val) : // MongoMinKey, MongoMaxKey
|
||||
$val
|
||||
)))));
|
||||
@@ -468,7 +109,7 @@ if (isset($_GET["mongo"])) {
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
public $primary = "_id";
|
||||
|
||||
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
$select = ($select == array("*")
|
||||
? array()
|
||||
@@ -486,7 +127,7 @@ if (isset($_GET["mongo"])) {
|
||||
->skip($page * $limit)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function insert($table, $set) {
|
||||
try {
|
||||
$return = $this->_conn->_db->selectCollection($table)->insert($set);
|
||||
@@ -566,6 +207,379 @@ if (isset($_GET["mongo"])) {
|
||||
|
||||
$operators = array("=");
|
||||
|
||||
} elseif (class_exists('MongoDB\Driver\Manager')) {
|
||||
class Min_DB {
|
||||
var $extension = "MongoDB", $server_info = MONGODB_VERSION, $affected_rows, $error, $last_id;
|
||||
/** @var MongoDB\Driver\Manager */
|
||||
var $_link;
|
||||
var $_db, $_db_name;
|
||||
|
||||
function connect($uri, $options) {
|
||||
$class = 'MongoDB\Driver\Manager';
|
||||
$this->_link = new $class($uri, $options);
|
||||
$this->executeCommand($options["db"], array('ping' => 1));
|
||||
}
|
||||
|
||||
function executeCommand($db, $command) {
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
try {
|
||||
return $this->_link->executeCommand($db, new $class($command));
|
||||
} catch (Exception $e) {
|
||||
$this->error = $e->getMessage();
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
function executeBulkWrite($namespace, $bulk, $counter) {
|
||||
try {
|
||||
$results = $this->_link->executeBulkWrite($namespace, $bulk);
|
||||
$this->affected_rows = $results->$counter();
|
||||
return true;
|
||||
} catch (Exception $e) {
|
||||
$this->error = $e->getMessage();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function query($query) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
$this->_db_name = $database;
|
||||
return true;
|
||||
}
|
||||
|
||||
function quote($string) {
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
class Min_Result {
|
||||
var $num_rows, $_rows = array(), $_offset = 0, $_charset = array();
|
||||
|
||||
function __construct($result) {
|
||||
foreach ($result as $item) {
|
||||
$row = array();
|
||||
foreach ($item as $key => $val) {
|
||||
if (is_a($val, 'MongoDB\BSON\Binary')) {
|
||||
$this->_charset[$key] = 63;
|
||||
}
|
||||
$row[$key] =
|
||||
(is_a($val, 'MongoDB\BSON\ObjectID') ? 'MongoDB\BSON\ObjectID("' . "$val\")" :
|
||||
(is_a($val, 'MongoDB\BSON\UTCDatetime') ? $val->toDateTime()->format('Y-m-d H:i:s') :
|
||||
(is_a($val, 'MongoDB\BSON\Binary') ? $val->getData() : //! allow downloading
|
||||
(is_a($val, 'MongoDB\BSON\Regex') ? "$val" :
|
||||
(is_object($val) || is_array($val) ? json_encode($val, 256) : // 256 = JSON_UNESCAPED_UNICODE
|
||||
$val // MongoMinKey, MongoMaxKey
|
||||
)))));
|
||||
}
|
||||
$this->_rows[] = $row;
|
||||
foreach ($row as $key => $val) {
|
||||
if (!isset($this->_rows[0][$key])) {
|
||||
$this->_rows[0][$key] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->num_rows = count($this->_rows);
|
||||
}
|
||||
|
||||
function fetch_assoc() {
|
||||
$row = current($this->_rows);
|
||||
if (!$row) {
|
||||
return $row;
|
||||
}
|
||||
$return = array();
|
||||
foreach ($this->_rows[0] as $key => $val) {
|
||||
$return[$key] = $row[$key];
|
||||
}
|
||||
next($this->_rows);
|
||||
return $return;
|
||||
}
|
||||
|
||||
function fetch_row() {
|
||||
$return = $this->fetch_assoc();
|
||||
if (!$return) {
|
||||
return $return;
|
||||
}
|
||||
return array_values($return);
|
||||
}
|
||||
|
||||
function fetch_field() {
|
||||
$keys = array_keys($this->_rows[0]);
|
||||
$name = $keys[$this->_offset++];
|
||||
return (object) array(
|
||||
'name' => $name,
|
||||
'charsetnr' => $this->_charset[$name],
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
public $primary = "_id";
|
||||
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
global $connection;
|
||||
$select = ($select == array("*")
|
||||
? array()
|
||||
: array_fill_keys($select, 1)
|
||||
);
|
||||
if (count($select) && !isset($select['_id'])) {
|
||||
$select['_id'] = 0;
|
||||
}
|
||||
$where = where_to_query($where);
|
||||
$sort = array();
|
||||
foreach ($order as $val) {
|
||||
$val = preg_replace('~ DESC$~', '', $val, 1, $count);
|
||||
$sort[$val] = ($count ? -1 : 1);
|
||||
}
|
||||
if (isset($_GET['limit']) && is_numeric($_GET['limit']) && $_GET['limit'] > 0) {
|
||||
$limit = $_GET['limit'];
|
||||
}
|
||||
$limit = min(200, max(1, (int) $limit));
|
||||
$skip = $page * $limit;
|
||||
$class = 'MongoDB\Driver\Query';
|
||||
try {
|
||||
return new Min_Result($connection->_link->executeQuery("$connection->_db_name.$table", new $class($where, array('projection' => $select, 'limit' => $limit, 'skip' => $skip, 'sort' => $sort))));
|
||||
} catch (Exception $e) {
|
||||
$connection->error = $e->getMessage();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function update($table, $set, $queryWhere, $limit = 0, $separator = "\n") {
|
||||
global $connection;
|
||||
$db = $connection->_db_name;
|
||||
$where = sql_query_where_parser($queryWhere);
|
||||
$class = 'MongoDB\Driver\BulkWrite';
|
||||
$bulk = new $class(array());
|
||||
if (isset($set['_id'])) {
|
||||
unset($set['_id']);
|
||||
}
|
||||
$removeFields = array();
|
||||
foreach ($set as $key => $value) {
|
||||
if ($value == 'NULL') {
|
||||
$removeFields[$key] = 1;
|
||||
unset($set[$key]);
|
||||
}
|
||||
}
|
||||
$update = array('$set' => $set);
|
||||
if (count($removeFields)) {
|
||||
$update['$unset'] = $removeFields;
|
||||
}
|
||||
$bulk->update($where, $update, array('upsert' => false));
|
||||
return $connection->executeBulkWrite("$db.$table", $bulk, 'getModifiedCount');
|
||||
}
|
||||
|
||||
function delete($table, $queryWhere, $limit = 0) {
|
||||
global $connection;
|
||||
$db = $connection->_db_name;
|
||||
$where = sql_query_where_parser($queryWhere);
|
||||
$class = 'MongoDB\Driver\BulkWrite';
|
||||
$bulk = new $class(array());
|
||||
$bulk->delete($where, array('limit' => $limit));
|
||||
return $connection->executeBulkWrite("$db.$table", $bulk, 'getDeletedCount');
|
||||
}
|
||||
|
||||
function insert($table, $set) {
|
||||
global $connection;
|
||||
$db = $connection->_db_name;
|
||||
$class = 'MongoDB\Driver\BulkWrite';
|
||||
$bulk = new $class(array());
|
||||
if ($set['_id'] == '') {
|
||||
unset($set['_id']);
|
||||
}
|
||||
$bulk->insert($set);
|
||||
return $connection->executeBulkWrite("$db.$table", $bulk, 'getInsertedCount');
|
||||
}
|
||||
}
|
||||
|
||||
function get_databases($flush) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach ($connection->executeCommand($connection->_db_name, array('listDatabases' => 1)) as $dbs) {
|
||||
foreach ($dbs->databases as $db) {
|
||||
$return[] = $db->name;
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function count_tables($databases) {
|
||||
$return = array();
|
||||
return $return;
|
||||
}
|
||||
|
||||
function tables_list() {
|
||||
global $connection;
|
||||
$collections = array();
|
||||
foreach ($connection->executeCommand($connection->_db_name, array('listCollections' => 1)) as $result) {
|
||||
$collections[$result->name] = 'table';
|
||||
}
|
||||
return $collections;
|
||||
}
|
||||
|
||||
function drop_databases($databases) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function indexes($table, $connection2 = null) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach ($connection->executeCommand($connection->_db_name, array('listIndexes' => $table)) as $index) {
|
||||
$descs = array();
|
||||
$columns = array();
|
||||
foreach (get_object_vars($index->key) as $column => $type) {
|
||||
$descs[] = ($type == -1 ? '1' : null);
|
||||
$columns[] = $column;
|
||||
}
|
||||
$return[$index->name] = array(
|
||||
"type" => ($index->name == "_id_" ? "PRIMARY" : (isset($index->unique) ? "UNIQUE" : "INDEX")),
|
||||
"columns" => $columns,
|
||||
"lengths" => array(),
|
||||
"descs" => $descs,
|
||||
);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
global $driver;
|
||||
$fields = fields_from_edit();
|
||||
if (!$fields) {
|
||||
$result = $driver->select($table, array("*"), null, null, array(), 10);
|
||||
if ($result) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
foreach ($row as $key => $val) {
|
||||
$row[$key] = null;
|
||||
$fields[$key] = array(
|
||||
"field" => $key,
|
||||
"type" => "string",
|
||||
"null" => ($key != $driver->primary),
|
||||
"auto_increment" => ($key == $driver->primary),
|
||||
"privileges" => array(
|
||||
"insert" => 1,
|
||||
"select" => 1,
|
||||
"update" => 1,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $fields;
|
||||
}
|
||||
|
||||
function found_rows($table_status, $where) {
|
||||
global $connection;
|
||||
$where = where_to_query($where);
|
||||
$toArray = $connection->executeCommand($connection->_db_name, array('count' => $table_status['Name'], 'query' => $where))->toArray();
|
||||
return $toArray[0]->n;
|
||||
}
|
||||
|
||||
function sql_query_where_parser($queryWhere) {
|
||||
$queryWhere = preg_replace('~^\s*WHERE\s*~', "", $queryWhere);
|
||||
while ($queryWhere[0] == "(") {
|
||||
$queryWhere = preg_replace('~^\((.*)\)$~', "$1", $queryWhere);
|
||||
}
|
||||
|
||||
$wheres = explode(' AND ', $queryWhere);
|
||||
$wheresOr = explode(') OR (', $queryWhere);
|
||||
$where = array();
|
||||
foreach ($wheres as $whereStr) {
|
||||
$where[] = trim($whereStr);
|
||||
}
|
||||
if (count($wheresOr) == 1) {
|
||||
$wheresOr = array();
|
||||
} elseif (count($wheresOr) > 1) {
|
||||
$where = array();
|
||||
}
|
||||
return where_to_query($where, $wheresOr);
|
||||
}
|
||||
|
||||
function where_to_query($whereAnd = array(), $whereOr = array()) {
|
||||
global $adminer;
|
||||
$data = array();
|
||||
foreach (array('and' => $whereAnd, 'or' => $whereOr) as $type => $where) {
|
||||
if (is_array($where)) {
|
||||
foreach ($where as $expression) {
|
||||
list($col, $op, $val) = explode(" ", $expression, 3);
|
||||
if ($col == "_id" && preg_match('~^(MongoDB\\\\BSON\\\\ObjectID)\("(.+)"\)$~', $val, $match)) {
|
||||
list(, $class, $val) = $match;
|
||||
$val = new $class($val);
|
||||
}
|
||||
if (!in_array($op, $adminer->operators)) {
|
||||
continue;
|
||||
}
|
||||
if (preg_match('~^\(f\)(.+)~', $op, $match)) {
|
||||
$val = (float) $val;
|
||||
$op = $match[1];
|
||||
} elseif (preg_match('~^\(date\)(.+)~', $op, $match)) {
|
||||
$dateTime = new DateTime($val);
|
||||
$class = 'MongoDB\BSON\UTCDatetime';
|
||||
$val = new $class($dateTime->getTimestamp() * 1000);
|
||||
$op = $match[1];
|
||||
}
|
||||
switch ($op) {
|
||||
case '=':
|
||||
$op = '$eq';
|
||||
break;
|
||||
case '!=':
|
||||
$op = '$ne';
|
||||
break;
|
||||
case '>':
|
||||
$op = '$gt';
|
||||
break;
|
||||
case '<':
|
||||
$op = '$lt';
|
||||
break;
|
||||
case '>=':
|
||||
$op = '$gte';
|
||||
break;
|
||||
case '<=':
|
||||
$op = '$lte';
|
||||
break;
|
||||
case 'regex':
|
||||
$op = '$regex';
|
||||
break;
|
||||
default:
|
||||
continue 2;
|
||||
}
|
||||
if ($type == 'and') {
|
||||
$data['$and'][] = array($col => array($op => $val));
|
||||
} elseif ($type == 'or') {
|
||||
$data['$or'][] = array($col => array($op => $val));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
$operators = array(
|
||||
"=",
|
||||
"!=",
|
||||
">",
|
||||
"<",
|
||||
">=",
|
||||
"<=",
|
||||
"regex",
|
||||
"(f)=",
|
||||
"(f)!=",
|
||||
"(f)>",
|
||||
"(f)<",
|
||||
"(f)>=",
|
||||
"(f)<=",
|
||||
"(date)=",
|
||||
"(date)!=",
|
||||
"(date)>",
|
||||
"(date)<",
|
||||
"(date)>=",
|
||||
"(date)<=",
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function table($idf) {
|
||||
@@ -615,6 +629,11 @@ if (isset($_GET["mongo"])) {
|
||||
global $adminer;
|
||||
$connection = new Min_DB;
|
||||
list($server, $username, $password) = $adminer->credentials();
|
||||
|
||||
if ($server == "") {
|
||||
$server = "localhost:27017";
|
||||
}
|
||||
|
||||
$options = array();
|
||||
if ($username . $password != "") {
|
||||
$options["username"] = $username;
|
||||
@@ -627,21 +646,11 @@ if (isset($_GET["mongo"])) {
|
||||
if (($auth_source = getenv("MONGO_AUTH_SOURCE"))) {
|
||||
$options["authSource"] = $auth_source;
|
||||
}
|
||||
try {
|
||||
$connection->_link = $connection->connect("mongodb://$server", $options);
|
||||
if ($password != "") {
|
||||
$options["password"] = "";
|
||||
try {
|
||||
$connection->ping($connection->connect("mongodb://$server", $options));
|
||||
return lang('Database does not support password.');
|
||||
} catch (Exception $ex) {
|
||||
// this is what we want
|
||||
}
|
||||
}
|
||||
return $connection;
|
||||
} catch (Exception $ex) {
|
||||
return $ex->getMessage();
|
||||
$connection->connect("mongodb://$server", $options);
|
||||
if ($connection->error) {
|
||||
return $connection->error;
|
||||
}
|
||||
return $connection;
|
||||
}
|
||||
|
||||
function alter_indexes($table, $alter) {
|
||||
@@ -731,8 +740,15 @@ if (isset($_GET["mongo"])) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$jush = "mongo";
|
||||
$functions = array();
|
||||
$grouping = array();
|
||||
$edit_functions = array(array("json"));
|
||||
function driver_config() {
|
||||
global $operators;
|
||||
return array(
|
||||
'possible_drivers' => array("mongo", "mongodb"),
|
||||
'jush' => "mongo",
|
||||
'operators' => $operators,
|
||||
'functions' => array(),
|
||||
'grouping' => array(),
|
||||
'edit_functions' => array(array("json")),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -5,10 +5,9 @@
|
||||
* @author Jakub Vrana
|
||||
*/
|
||||
|
||||
$drivers["mssql"] = "MS SQL (beta)";
|
||||
$drivers["mssql"] = "MS SQL";
|
||||
|
||||
if (isset($_GET["mssql"])) {
|
||||
$possible_drivers = array("SQLSRV", "MSSQL", "PDO_DBLIB");
|
||||
define("DRIVER", "mssql");
|
||||
if (extension_loaded("sqlsrv")) {
|
||||
class Min_DB {
|
||||
@@ -25,8 +24,15 @@ if (isset($_GET["mssql"])) {
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
global $adminer;
|
||||
$db = $adminer->database();
|
||||
$connection_info = array("UID" => $username, "PWD" => $password, "CharacterSet" => "UTF-8");
|
||||
$ssl = $adminer->connectSsl();
|
||||
if (isset($ssl["Encrypt"])) {
|
||||
$connection_info["Encrypt"] = $ssl["Encrypt"];
|
||||
}
|
||||
if (isset($ssl["TrustServerCertificate"])) {
|
||||
$connection_info["TrustServerCertificate"] = $ssl["TrustServerCertificate"];
|
||||
}
|
||||
$db = $adminer->database();
|
||||
if ($db != "") {
|
||||
$connection_info["Database"] = $db;
|
||||
}
|
||||
@@ -41,7 +47,8 @@ if (isset($_GET["mssql"])) {
|
||||
}
|
||||
|
||||
function quote($string) {
|
||||
return "'" . str_replace("'", "''", $string) . "'";
|
||||
$unicode = strlen($string) != strlen(utf8_decode($string));
|
||||
return ($unicode ? "N" : "") . "'" . str_replace("'", "''", $string) . "'";
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
@@ -164,7 +171,8 @@ if (isset($_GET["mssql"])) {
|
||||
}
|
||||
|
||||
function quote($string) {
|
||||
return "'" . str_replace("'", "''", $string) . "'";
|
||||
$unicode = strlen($string) != strlen(utf8_decode($string));
|
||||
return ($unicode ? "N" : "") . "'" . str_replace("'", "''", $string) . "'";
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
@@ -302,6 +310,11 @@ if (isset($_GET["mssql"])) {
|
||||
global $adminer;
|
||||
$connection = new Min_DB;
|
||||
$credentials = $adminer->credentials();
|
||||
|
||||
if ($credentials[0] == "") {
|
||||
$credentials[0] = "localhost:1433";
|
||||
}
|
||||
|
||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||
return $connection;
|
||||
}
|
||||
@@ -350,7 +363,9 @@ if (isset($_GET["mssql"])) {
|
||||
|
||||
function table_status($name = "") {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT ao.name AS Name, ao.type_desc AS Engine, (SELECT value FROM fn_listextendedproperty(default, 'SCHEMA', schema_name(schema_id), 'TABLE', ao.name, null, null)) AS Comment FROM sys.all_objects AS ao WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V') " . ($name != "" ? "AND name = " . q($name) : "ORDER BY name")) as $row) {
|
||||
foreach (get_rows("SELECT ao.name AS Name, ao.type_desc AS Engine, (SELECT value FROM fn_listextendedproperty(default, 'SCHEMA', schema_name(schema_id), 'TABLE', ao.name, null, null)) AS Comment
|
||||
FROM sys.all_objects AS ao
|
||||
WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V') " . ($name != "" ? "AND name = " . q($name) : "ORDER BY name")) as $row) {
|
||||
if ($name != "") {
|
||||
return $row;
|
||||
}
|
||||
@@ -370,21 +385,25 @@ if (isset($_GET["mssql"])) {
|
||||
function fields($table) {
|
||||
$comments = get_key_vals("SELECT objname, cast(value as varchar(max)) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', " . q(get_schema()) . ", 'table', " . q($table) . ", 'column', NULL)");
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, CAST(d.definition as text) [default]
|
||||
foreach (get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, CAST(d.definition as text) [default], d.name default_constraint
|
||||
FROM sys.all_columns c
|
||||
JOIN sys.all_objects o ON c.object_id = o.object_id
|
||||
JOIN sys.types t ON c.user_type_id = t.user_type_id
|
||||
LEFT JOIN sys.default_constraints d ON c.default_object_id = d.parent_column_id
|
||||
LEFT JOIN sys.default_constraints d ON c.default_object_id = d.object_id
|
||||
WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U', 'V') AND o.name = " . q($table)
|
||||
) as $row) {
|
||||
$type = $row["type"];
|
||||
$length = (preg_match("~char|binary~", $type) ? $row["max_length"] : ($type == "decimal" ? "$row[precision],$row[scale]" : ""));
|
||||
$length = (preg_match("~char|binary~", $type)
|
||||
? $row["max_length"] / ($type[0] == 'n' ? 2 : 1)
|
||||
: ($type == "decimal" ? "$row[precision],$row[scale]" : "")
|
||||
);
|
||||
$return[$row["name"]] = array(
|
||||
"field" => $row["name"],
|
||||
"full_type" => $type . ($length ? "($length)" : ""),
|
||||
"type" => $type,
|
||||
"length" => $length,
|
||||
"default" => $row["default"],
|
||||
"default" => (preg_match("~^\('(.*)'\)$~", $row["default"], $match) ? str_replace("''", "'", $match[1]) : $row["default"]),
|
||||
"default_constraint" => $row["default_constraint"],
|
||||
"null" => $row["is_nullable"],
|
||||
"auto_increment" => $row["is_identity"],
|
||||
"collation" => $row["collation_name"],
|
||||
@@ -459,6 +478,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||
$alter = array();
|
||||
$comments = array();
|
||||
$orig_fields = fields($table);
|
||||
foreach ($fields as $field) {
|
||||
$column = idf_escape($field[0]);
|
||||
$val = $field[1];
|
||||
@@ -471,11 +491,22 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
if ($field[0] == "") {
|
||||
$alter["ADD"][] = "\n " . implode("", $val) . ($table == "" ? substr($foreign[$val[0]], 16 + strlen($val[0])) : ""); // 16 - strlen(" FOREIGN KEY ()")
|
||||
} else {
|
||||
$default = $val[3];
|
||||
unset($val[3]); // default values are set separately
|
||||
unset($val[6]); //! identity can't be removed
|
||||
if ($column != $val[0]) {
|
||||
queries("EXEC sp_rename " . q(table($table) . ".$column") . ", " . q(idf_unescape($val[0])) . ", 'COLUMN'");
|
||||
}
|
||||
$alter["ALTER COLUMN " . implode("", $val)][] = "";
|
||||
$orig_field = $orig_fields[$field[0]];
|
||||
if (default_value($orig_field) != $default) {
|
||||
if ($orig_field["default"] !== null) {
|
||||
$alter["DROP"][] = " " . idf_escape($orig_field["default_constraint"]);
|
||||
}
|
||||
if ($default) {
|
||||
$alter["ADD"][] = "\n $default FOR $column";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -489,14 +520,14 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
$alter[""] = $foreign;
|
||||
}
|
||||
foreach ($alter as $key => $val) {
|
||||
if (!queries("ALTER TABLE " . idf_escape($name) . " $key" . implode(",", $val))) {
|
||||
if (!queries("ALTER TABLE " . table($name) . " $key" . implode(",", $val))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
foreach ($comments as $key => $val) {
|
||||
$comment = substr($val, 9); // 9 - strlen(" COMMENT ")
|
||||
queries("EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
queries("EXEC sp_addextendedproperty @name = N'MS_Description', @value = " . $comment . ", @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
queries("EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
queries("EXEC sp_addextendedproperty @name = N'MS_Description', @value = " . $comment . ", @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -540,7 +571,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
|
||||
function foreign_keys($table) {
|
||||
$return = array();
|
||||
foreach (get_rows("EXEC sp_fkeys @fktable_name = " . q($table)) as $row) {
|
||||
foreach (get_rows("EXEC sp_fkeys @fktable_name = " . q($table) . ", @fktable_owner = " . q(get_schema())) as $row) {
|
||||
$foreign_key = &$return[$row["FK_NAME"]];
|
||||
$foreign_key["db"] = $row["PKTABLE_QUALIFIER"];
|
||||
$foreign_key["table"] = $row["PKTABLE_NAME"];
|
||||
@@ -631,6 +662,10 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
||||
return array();
|
||||
}
|
||||
|
||||
function is_c_style_escapes() {
|
||||
return false;
|
||||
}
|
||||
|
||||
function show_status() {
|
||||
return array();
|
||||
}
|
||||
@@ -643,31 +678,38 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
||||
}
|
||||
|
||||
function support($feature) {
|
||||
return preg_match('~^(comment|columns|database|drop_col|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~', $feature); //! routine|
|
||||
return preg_match('~^(check|comment|columns|database|drop_col|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~', $feature); //! routine|
|
||||
}
|
||||
|
||||
$jush = "mssql";
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! use sys.types
|
||||
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "int" => 10, "bigint" => 20, "bit" => 1, "decimal" => 0, "real" => 12, "float" => 53, "smallmoney" => 10, "money" => 20),
|
||||
lang('Date and time') => array("date" => 10, "smalldatetime" => 19, "datetime" => 19, "datetime2" => 19, "time" => 8, "datetimeoffset" => 10),
|
||||
lang('Strings') => array("char" => 8000, "varchar" => 8000, "text" => 2147483647, "nchar" => 4000, "nvarchar" => 4000, "ntext" => 1073741823),
|
||||
lang('Binary') => array("binary" => 8000, "varbinary" => 8000, "image" => 2147483647),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
function driver_config() {
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! use sys.types
|
||||
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "int" => 10, "bigint" => 20, "bit" => 1, "decimal" => 0, "real" => 12, "float" => 53, "smallmoney" => 10, "money" => 20),
|
||||
lang('Date and time') => array("date" => 10, "smalldatetime" => 19, "datetime" => 19, "datetime2" => 19, "time" => 8, "datetimeoffset" => 10),
|
||||
lang('Strings') => array("char" => 8000, "varchar" => 8000, "text" => 2147483647, "nchar" => 4000, "nvarchar" => 4000, "ntext" => 1073741823),
|
||||
lang('Binary') => array("binary" => 8000, "varbinary" => 8000, "image" => 2147483647),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("SQLSRV", "MSSQL", "PDO_DBLIB"),
|
||||
'jush' => "mssql",
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"),
|
||||
'functions' => array("len", "lower", "round", "upper"),
|
||||
'grouping' => array("avg", "count", "count distinct", "max", "min", "sum"),
|
||||
'edit_functions' => array(
|
||||
array(
|
||||
"date|time" => "getdate",
|
||||
), array(
|
||||
"int|decimal|real|float|money|datetime" => "+/-",
|
||||
"char|text" => "+",
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL");
|
||||
$functions = array("len", "lower", "round", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
array(
|
||||
"date|time" => "getdate",
|
||||
), array(
|
||||
"int|decimal|real|float|money|datetime" => "+/-",
|
||||
"char|text" => "+",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@@ -2,7 +2,6 @@
|
||||
$drivers = array("server" => "MySQL") + $drivers;
|
||||
|
||||
if (!defined("DRIVER")) {
|
||||
$possible_drivers = array("MySQLi", "MySQL", "PDO_MySQL");
|
||||
define("DRIVER", "server"); // server - backwards compatibility
|
||||
// MySQLi supports everything, MySQL doesn't support multiple result sets, PDO_MySQL doesn't support orgtable
|
||||
if (extension_loaded("mysqli")) {
|
||||
@@ -28,7 +27,7 @@ if (!defined("DRIVER")) {
|
||||
$database,
|
||||
(is_numeric($port) ? $port : ini_get("mysqli.default_port")),
|
||||
(!is_numeric($port) ? $port : $socket),
|
||||
($ssl ? 64 : 0) // 64 - MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT (not available before PHP 5.6.16)
|
||||
($ssl ? (empty($ssl['cert']) ? 2048 : 64) : 0) // 2048 - MYSQLI_CLIENT_SSL, 64 - MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT (not available before PHP 5.6.16)
|
||||
);
|
||||
$this->options(MYSQLI_OPT_LOCAL_INFILE, false);
|
||||
return $return;
|
||||
@@ -51,7 +50,7 @@ if (!defined("DRIVER")) {
|
||||
$row = $result->fetch_array();
|
||||
return $row[$field];
|
||||
}
|
||||
|
||||
|
||||
function quote($string) {
|
||||
return "'" . $this->escape_string($string) . "'";
|
||||
}
|
||||
@@ -247,6 +246,9 @@ if (!defined("DRIVER")) {
|
||||
if (!empty($ssl['ca'])) {
|
||||
$options[PDO::MYSQL_ATTR_SSL_CA] = $ssl['ca'];
|
||||
}
|
||||
if (!empty($ssl['verify'])) {
|
||||
$options[PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT] = $ssl['verify'];
|
||||
}
|
||||
}
|
||||
$this->dsn(
|
||||
"mysql:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\d)~', ';port=\1', $server)),
|
||||
@@ -267,7 +269,7 @@ if (!defined("DRIVER")) {
|
||||
}
|
||||
|
||||
function query($query, $unbuffered = false) {
|
||||
$this->pdo->setAttribute(1000, !$unbuffered); // 1000 - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
|
||||
$this->pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, !$unbuffered);
|
||||
return parent::query($query, $unbuffered);
|
||||
}
|
||||
}
|
||||
@@ -306,7 +308,7 @@ if (!defined("DRIVER")) {
|
||||
}
|
||||
return queries($prefix . implode(",\n", $values) . $suffix);
|
||||
}
|
||||
|
||||
|
||||
function slowQuery($query, $timeout) {
|
||||
if (min_version('5.7.8', '10.1.2')) {
|
||||
if (preg_match('~MariaDB~', $this->_conn->server_info)) {
|
||||
@@ -323,7 +325,7 @@ if (!defined("DRIVER")) {
|
||||
: $idf
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function warnings() {
|
||||
$result = $this->_conn->query("SHOW WARNINGS");
|
||||
if ($result && $result->num_rows) {
|
||||
@@ -336,10 +338,10 @@ if (!defined("DRIVER")) {
|
||||
function tableHelp($name) {
|
||||
$maria = preg_match('~MariaDB~', $this->_conn->server_info);
|
||||
if (information_schema(DB)) {
|
||||
return strtolower(($maria ? "information-schema-$name-table/" : str_replace("_", "-", $name) . "-table.html"));
|
||||
return strtolower("information-schema-" . ($maria ? "$name-table/" : str_replace("_", "-", $name) . "-table.html"));
|
||||
}
|
||||
if (DB == "mysql") {
|
||||
return ($maria ? "mysql$name-table/" : "system-database.html"); //! more precise link
|
||||
return ($maria ? "mysql$name-table/" : "system-schema.html"); //! more precise link
|
||||
}
|
||||
}
|
||||
|
||||
@@ -367,7 +369,7 @@ if (!defined("DRIVER")) {
|
||||
* @return mixed Min_DB or string for error
|
||||
*/
|
||||
function connect() {
|
||||
global $adminer, $types, $structured_types;
|
||||
global $adminer, $types, $structured_types, $edit_functions;
|
||||
$connection = new Min_DB;
|
||||
$credentials = $adminer->credentials();
|
||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||
@@ -377,6 +379,16 @@ if (!defined("DRIVER")) {
|
||||
$structured_types[lang('Strings')][] = "json";
|
||||
$types["json"] = 4294967295;
|
||||
}
|
||||
if (min_version('', 10.7, $connection)) {
|
||||
$structured_types[lang('Strings')][] = "uuid";
|
||||
$types["uuid"] = 128;
|
||||
$edit_functions[0]['uuid'] = 'uuid';
|
||||
}
|
||||
if (min_version(9, '', $connection)) {
|
||||
$structured_types[lang('Numbers')][] = "vector";
|
||||
$types["vector"] = 16383;
|
||||
$edit_functions[0]['vector'] = 'string_to_vector';
|
||||
}
|
||||
return $connection;
|
||||
}
|
||||
$return = $connection->error;
|
||||
@@ -469,7 +481,7 @@ if (!defined("DRIVER")) {
|
||||
}
|
||||
|
||||
/** Get tables list
|
||||
* @return array array($name => $type)
|
||||
* @return array [$name => $type]
|
||||
*/
|
||||
function tables_list() {
|
||||
return get_key_vals(min_version(5)
|
||||
@@ -480,7 +492,7 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Count tables in all databases
|
||||
* @param array
|
||||
* @return array array($db => $tables)
|
||||
* @return array arra($db => $tables)
|
||||
*/
|
||||
function count_tables($databases) {
|
||||
$return = array();
|
||||
@@ -493,7 +505,7 @@ if (!defined("DRIVER")) {
|
||||
/** Get table status
|
||||
* @param string
|
||||
* @param bool return only "Name", "Engine" and "Comment" fields
|
||||
* @return array array($name => array("Name" => , "Engine" => , "Comment" => , "Oid" => , "Rows" => , "Collation" => , "Auto_increment" => , "Data_length" => , "Index_length" => , "Data_free" => )) or only inner array with $name
|
||||
* @return array [$name => array("Name" => , "Engine" => , "Comment" => , "Oid" => , "Rows" => , "Collation" => , "Auto_increment" => , "Data_length" => , "Index_length" => , "Data_free" => )] or only inner array with $name
|
||||
*/
|
||||
function table_status($name = "", $fast = false) {
|
||||
$return = array();
|
||||
@@ -509,6 +521,8 @@ if (!defined("DRIVER")) {
|
||||
$row["Comment"] = "";
|
||||
}
|
||||
if ($name != "") {
|
||||
// MariaDB: Table name is returned as lowercase on macOS, so we fix it here.
|
||||
$row["Name"] = $name;
|
||||
return $row;
|
||||
}
|
||||
$return[$row["Name"]] = $row;
|
||||
@@ -535,7 +549,7 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Get information about fields
|
||||
* @param string
|
||||
* @return array array($name => array("field" => , "full_type" => , "type" => , "length" => , "unsigned" => , "default" => , "null" => , "auto_increment" => , "on_update" => , "collation" => , "privileges" => , "comment" => , "primary" => ))
|
||||
* @return array [$name => array("field" => , "full_type" => , "type" => , "length" => , "unsigned" => , "default" => , "null" => , "auto_increment" => , "on_update" => , "collation" => , "privileges" => , "comment" => , "primary" => )]
|
||||
*/
|
||||
function fields($table) {
|
||||
$return = array();
|
||||
@@ -565,7 +579,7 @@ if (!defined("DRIVER")) {
|
||||
/** Get table indexes
|
||||
* @param string
|
||||
* @param string Min_DB to use
|
||||
* @return array array($key_name => array("type" => , "columns" => array(), "lengths" => array(), "descs" => array()))
|
||||
* @return array [$key_name => array("type" => , "columns" => array(), "lengths" => array(), "descs" => array())]
|
||||
*/
|
||||
function indexes($table, $connection2 = null) {
|
||||
$return = array();
|
||||
@@ -581,7 +595,7 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Get foreign keys in table
|
||||
* @param string
|
||||
* @return array array($name => array("db" => , "ns" => , "table" => , "source" => array(), "target" => array(), "on_delete" => , "on_update" => ))
|
||||
* @return array [$name => array("db" => , "ns" => , "table" => , "source" => array(), "target" => array(), "on_delete" => , "on_update" => )]
|
||||
*/
|
||||
function foreign_keys($table) {
|
||||
global $connection, $on_actions;
|
||||
@@ -608,7 +622,7 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Get view SELECT
|
||||
* @param string
|
||||
* @return array array("select" => )
|
||||
* @return array ["select" => ]
|
||||
*/
|
||||
function view($name) {
|
||||
global $connection;
|
||||
@@ -679,17 +693,17 @@ if (!defined("DRIVER")) {
|
||||
function rename_database($name, $collation) {
|
||||
$return = false;
|
||||
if (create_database($name, $collation)) {
|
||||
//! move triggers
|
||||
$rename = array();
|
||||
$tables = array();
|
||||
$views = array();
|
||||
foreach (tables_list() as $table => $type) {
|
||||
$rename[] = table($table) . " TO " . idf_escape($name) . "." . table($table);
|
||||
if ($type == 'VIEW') {
|
||||
$views[] = $table;
|
||||
} else {
|
||||
$tables[] = $table;
|
||||
}
|
||||
}
|
||||
$return = (!$rename || queries("RENAME TABLE " . implode(", ", $rename)));
|
||||
if ($return) {
|
||||
queries("DROP DATABASE " . idf_escape(DB));
|
||||
}
|
||||
restart_session();
|
||||
set_session("dbs", null);
|
||||
$return = (!$tables && !$views) || move_tables($tables, $views, $name);
|
||||
drop_databases($return ? array(DB) : array());
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -798,12 +812,27 @@ if (!defined("DRIVER")) {
|
||||
* @return bool
|
||||
*/
|
||||
function move_tables($tables, $views, $target) {
|
||||
global $connection;
|
||||
$rename = array();
|
||||
foreach (array_merge($tables, $views) as $table) { // views will report SQL error
|
||||
foreach ($tables as $table) {
|
||||
$rename[] = table($table) . " TO " . idf_escape($target) . "." . table($table);
|
||||
}
|
||||
return queries("RENAME TABLE " . implode(", ", $rename));
|
||||
if (!$rename || queries("RENAME TABLE " . implode(", ", $rename))) {
|
||||
$definitions = array();
|
||||
foreach ($views as $table) {
|
||||
$definitions[table($table)] = view($table);
|
||||
}
|
||||
$connection->select_db($target);
|
||||
$db = idf_escape(DB);
|
||||
foreach ($definitions as $name => $view) {
|
||||
if (!queries("CREATE VIEW $name AS " . str_replace(" $db.", " ", $view["select"])) || !queries("DROP VIEW $db.$name")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//! move triggers
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Copy tables to other schema
|
||||
@@ -842,7 +871,7 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Get information about trigger
|
||||
* @param string trigger name
|
||||
* @return array array("Trigger" => , "Timing" => , "Event" => , "Of" => , "Type" => , "Statement" => )
|
||||
* @return array ["Trigger" => , "Timing" => , "Event" => , "Of" => , "Type" => , "Statement" => ]
|
||||
*/
|
||||
function trigger($name) {
|
||||
if ($name == "") {
|
||||
@@ -854,7 +883,7 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Get defined triggers
|
||||
* @param string
|
||||
* @return array array($name => array($timing, $event))
|
||||
* @return array [$name => array($timing, $event)]
|
||||
*/
|
||||
function triggers($table) {
|
||||
$return = array();
|
||||
@@ -865,7 +894,7 @@ if (!defined("DRIVER")) {
|
||||
}
|
||||
|
||||
/** Get trigger options
|
||||
* @return array ("Timing" => array(), "Event" => array(), "Type" => array())
|
||||
* @return array ["Timing" => array(), "Event" => array(), "Type" => array()]
|
||||
*/
|
||||
function trigger_options() {
|
||||
return array(
|
||||
@@ -878,7 +907,7 @@ if (!defined("DRIVER")) {
|
||||
/** Get information about stored routine
|
||||
* @param string
|
||||
* @param string "FUNCTION" or "PROCEDURE"
|
||||
* @return array ("fields" => array("field" => , "type" => , "length" => , "unsigned" => , "inout" => , "collation" => ), "returns" => , "definition" => , "language" => )
|
||||
* @return array ["fields" => array("field" => , "type" => , "length" => , "unsigned" => , "inout" => , "collation" => ), "returns" => , "definition" => , "language" => ]
|
||||
*/
|
||||
function routine($name, $type) {
|
||||
global $connection, $enum_length, $inout, $types;
|
||||
@@ -902,19 +931,18 @@ if (!defined("DRIVER")) {
|
||||
"collation" => strtolower($param[9]),
|
||||
);
|
||||
}
|
||||
if ($type != "FUNCTION") {
|
||||
return array("fields" => $fields, "definition" => $match[11]);
|
||||
}
|
||||
return array(
|
||||
"fields" => $fields,
|
||||
"comment" => $connection->result("SELECT ROUTINE_COMMENT FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . q(DB) . " AND ROUTINE_NAME = " . q($name)),
|
||||
) + ($type != "FUNCTION" ? array("definition" => $match[11]) : array(
|
||||
"returns" => array("type" => $match[12], "length" => $match[13], "unsigned" => $match[15], "collation" => $match[16]),
|
||||
"definition" => $match[17],
|
||||
"language" => "SQL", // available in information_schema.ROUTINES.PARAMETER_STYLE
|
||||
);
|
||||
"language" => "SQL", // available in information_schema.ROUTINES.BODY_STYLE
|
||||
));
|
||||
}
|
||||
|
||||
/** Get list of routines
|
||||
* @return array ("SPECIFIC_NAME" => , "ROUTINE_NAME" => , "ROUTINE_TYPE" => , "DTD_IDENTIFIER" => )
|
||||
* @return array ["SPECIFIC_NAME" => , "ROUTINE_NAME" => , "ROUTINE_TYPE" => , "DTD_IDENTIFIER" => ]
|
||||
*/
|
||||
function routines() {
|
||||
return get_rows("SELECT ROUTINE_NAME AS SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . q(DB));
|
||||
@@ -950,7 +978,7 @@ if (!defined("DRIVER")) {
|
||||
* @return Min_Result
|
||||
*/
|
||||
function explain($connection, $query) {
|
||||
return $connection->query("EXPLAIN " . (min_version(5.1) ? "PARTITIONS " : "") . $query);
|
||||
return $connection->query("EXPLAIN " . (min_version(5.1) && !min_version(5.7) ? "PARTITIONS " : "") . $query);
|
||||
}
|
||||
|
||||
/** Get approximate number of rows
|
||||
@@ -1036,21 +1064,34 @@ if (!defined("DRIVER")) {
|
||||
}
|
||||
|
||||
/** Get server variables
|
||||
* @return array ($name => $value)
|
||||
* @return array [$name => $value]
|
||||
*/
|
||||
function show_variables() {
|
||||
return get_key_vals("SHOW VARIABLES");
|
||||
}
|
||||
|
||||
/** Check if C-style escapes are supported
|
||||
* @return bool
|
||||
*/
|
||||
function is_c_style_escapes() {
|
||||
global $connection;
|
||||
static $c_style;
|
||||
if ($c_style === null) {
|
||||
$sql_mode = $connection->result("SHOW VARIABLES LIKE 'sql_mode'", 1);
|
||||
$c_style = (strpos($sql_mode, 'NO_BACKSLASH_ESCAPES') === false);
|
||||
}
|
||||
return $c_style;
|
||||
}
|
||||
|
||||
/** Get process list
|
||||
* @return array ($row)
|
||||
* @return array [$row]
|
||||
*/
|
||||
function process_list() {
|
||||
return get_rows("SHOW FULL PROCESSLIST");
|
||||
}
|
||||
|
||||
/** Get status variables
|
||||
* @return array ($name => $value)
|
||||
* @return array [$name => $value]
|
||||
*/
|
||||
function show_status() {
|
||||
return get_key_vals("SHOW STATUS");
|
||||
@@ -1082,63 +1123,84 @@ if (!defined("DRIVER")) {
|
||||
$return = "UNHEX($return)";
|
||||
}
|
||||
if ($field["type"] == "bit") {
|
||||
$return = "CONV($return, 2, 10) + 0";
|
||||
$return = "CONVERT(b$return, UNSIGNED)";
|
||||
}
|
||||
if (preg_match("~geometry|point|linestring|polygon~", $field["type"])) {
|
||||
$return = (min_version(8) ? "ST_" : "") . "GeomFromText($return, SRID($field[field]))";
|
||||
$prefix = (min_version(8) ? "ST_" : "");
|
||||
$return = $prefix . "GeomFromText($return, $prefix" . "SRID($field[field]))";
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Check whether a feature is supported
|
||||
* @param string "comment", "copy", "database", "descidx", "drop_col", "dump", "event", "indexes", "kill", "materializedview", "partitioning", "privileges", "procedure", "processlist", "routine", "scheme", "sequence", "status", "table", "trigger", "type", "variables", "view", "view_trigger"
|
||||
* @param string "check", "comment", "copy", "database", "descidx", "drop_col", "dump", "event", "indexes", "kill", "materializedview", "partitioning", "privileges", "procedure", "processlist", "routine", "scheme", "sequence", "status", "table", "trigger", "type", "variables", "view", "view_trigger"
|
||||
* @return bool
|
||||
*/
|
||||
function support($feature) {
|
||||
return !preg_match("~scheme|sequence|type|view_trigger|materializedview" . (min_version(8) ? "" : "|descidx" . (min_version(5.1) ? "" : "|event|partitioning" . (min_version(5) ? "" : "|routine|trigger|view"))) . "~", $feature);
|
||||
return !preg_match("~scheme|sequence|type|view_trigger|materializedview" . (min_version(8) ? "" : "|descidx" . (min_version(5.1) ? "" : "|event|partitioning" . (min_version(5) ? "" : "|routine|trigger|view"))) . (min_version('8.0.16', '10.2.1') ? "" : "|check") . "~", $feature);
|
||||
}
|
||||
|
||||
/** Kill a process
|
||||
* @param int
|
||||
* @return bool
|
||||
*/
|
||||
function kill_process($val) {
|
||||
return queries("KILL " . number($val));
|
||||
}
|
||||
|
||||
/** Return query to get connection ID
|
||||
* @return string
|
||||
*/
|
||||
function connection_id(){
|
||||
return "SELECT CONNECTION_ID()";
|
||||
}
|
||||
|
||||
/** Get maximum number of connections
|
||||
* @return int
|
||||
*/
|
||||
function max_connections() {
|
||||
global $connection;
|
||||
return $connection->result("SELECT @@max_connections");
|
||||
}
|
||||
|
||||
$jush = "sql"; ///< @var string JUSH identifier
|
||||
$types = array(); ///< @var array ($type => $maximum_unsigned_length, ...)
|
||||
$structured_types = array(); ///< @var array ($description => array($type, ...), ...)
|
||||
foreach (array(
|
||||
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "mediumint" => 8, "int" => 10, "bigint" => 20, "decimal" => 66, "float" => 12, "double" => 21),
|
||||
lang('Date and time') => array("date" => 10, "datetime" => 19, "timestamp" => 19, "time" => 10, "year" => 4),
|
||||
lang('Strings') => array("char" => 255, "varchar" => 65535, "tinytext" => 255, "text" => 65535, "mediumtext" => 16777215, "longtext" => 4294967295),
|
||||
lang('Lists') => array("enum" => 65535, "set" => 64),
|
||||
lang('Binary') => array("bit" => 20, "binary" => 255, "varbinary" => 65535, "tinyblob" => 255, "blob" => 65535, "mediumblob" => 16777215, "longblob" => 4294967295),
|
||||
lang('Geometry') => array("geometry" => 0, "point" => 0, "linestring" => 0, "polygon" => 0, "multipoint" => 0, "multilinestring" => 0, "multipolygon" => 0, "geometrycollection" => 0),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
/** Get driver config
|
||||
* @return array ['possible_drivers' => , 'jush' => , 'types' => , 'structured_types' => , 'unsigned' => , 'operators' => , 'functions' => , 'grouping' => , 'edit_functions' => ]
|
||||
*/
|
||||
function driver_config() {
|
||||
$types = array(); ///< @var array [$type => $maximum_unsigned_length, ...]
|
||||
$structured_types = array(); ///< @var array [$description => array($type, ...), ...]
|
||||
foreach (array(
|
||||
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "mediumint" => 8, "int" => 10, "bigint" => 20, "decimal" => 66, "float" => 12, "double" => 21),
|
||||
lang('Date and time') => array("dat`e" => 10, "datetime" => 19, "timestamp" => 19, "time" => 10, "year" => 4),
|
||||
lang('Strings') => array("char" => 255, "varchar" => 65535, "tinytext" => 255, "text" => 65535, "mediumtext" => 16777215, "longtext" => 4294967295),
|
||||
lang('Lists') => array("enum" => 65535, "set" => 64),
|
||||
lang('Binary') => array("bit" => 20, "binary" => 255, "varbinary" => 65535, "tinyblob" => 255, "blob" => 65535, "mediumblob" => 16777215, "longblob" => 4294967295),
|
||||
lang('Geometry') => array("geometry" => 0, "point" => 0, "linestring" => 0, "polygon" => 0, "multipoint" => 0, "multilinestring" => 0, "multipolygon" => 0, "geometrycollection" => 0),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("MySQLi", "MySQL", "PDO_MySQL"),
|
||||
'jush' => "sql", ///< @var string JUSH identifier
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
'unsigned' => array("unsigned", "zerofill", "unsigned zerofill"), ///< @var array number variants
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "REGEXP", "IN", "FIND_IN_SET", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "SQL"), ///< @var array operators used in select
|
||||
'functions' => array("char_length", "date", "from_unixtime", "lower", "round", "floor", "ceil", "sec_to_time", "time_to_sec", "upper"), ///< @var array functions used in select
|
||||
'grouping' => array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"), ///< @var array grouping functions used in select
|
||||
'edit_functions' => array( ///< @var array of array("$type|$type2" => "$function/$function2") functions used in editing, [0] - edit and insert, [1] - edit only
|
||||
array(
|
||||
"char" => "md5/sha1/password/encrypt/uuid",
|
||||
"binary" => "md5/sha1",
|
||||
"date|time" => "now",
|
||||
), array(
|
||||
number_type() => "+/-",
|
||||
"date" => "+ interval/- interval",
|
||||
"time" => "addtime/subtime",
|
||||
"char|text" => "concat",
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
$unsigned = array("unsigned", "zerofill", "unsigned zerofill"); ///< @var array number variants
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "REGEXP", "IN", "FIND_IN_SET", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "SQL"); ///< @var array operators used in select
|
||||
$functions = array("char_length", "date", "from_unixtime", "lower", "round", "floor", "ceil", "sec_to_time", "time_to_sec", "upper"); ///< @var array functions used in select
|
||||
$grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); ///< @var array grouping functions used in select
|
||||
$edit_functions = array( ///< @var array of array("$type|$type2" => "$function/$function2") functions used in editing, [0] - edit and insert, [1] - edit only
|
||||
array(
|
||||
"char" => "md5/sha1/password/encrypt/uuid",
|
||||
"binary" => "md5/sha1",
|
||||
"date|time" => "now",
|
||||
), array(
|
||||
number_type() => "+/-",
|
||||
"date" => "+ interval/- interval",
|
||||
"time" => "addtime/subtime",
|
||||
"char|text" => "concat",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@@ -2,11 +2,11 @@
|
||||
$drivers["oracle"] = "Oracle (beta)";
|
||||
|
||||
if (isset($_GET["oracle"])) {
|
||||
$possible_drivers = array("OCI8", "PDO_OCI");
|
||||
define("DRIVER", "oracle");
|
||||
if (extension_loaded("oci8")) {
|
||||
class Min_DB {
|
||||
var $extension = "oci8", $_link, $_result, $server_info, $affected_rows, $errno, $error;
|
||||
var $_current_db;
|
||||
|
||||
function _error($errno, $error) {
|
||||
if (ini_bool("html_errors")) {
|
||||
@@ -32,6 +32,7 @@ if (isset($_GET["oracle"])) {
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
$this->_current_db = $database;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -52,6 +53,7 @@ if (isset($_GET["oracle"])) {
|
||||
return new Min_Result($result);
|
||||
}
|
||||
$this->affected_rows = oci_num_rows($result);
|
||||
oci_free_statement($result);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -119,6 +121,7 @@ if (isset($_GET["oracle"])) {
|
||||
} elseif (extension_loaded("pdo_oci")) {
|
||||
class Min_DB extends Min_PDO {
|
||||
var $extension = "PDO_OCI";
|
||||
var $_current_db;
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
$this->dsn("oci:dbname=//$server;charset=AL32UTF8", $username, $password);
|
||||
@@ -126,6 +129,7 @@ if (isset($_GET["oracle"])) {
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
$this->_current_db = $database;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -142,6 +146,25 @@ if (isset($_GET["oracle"])) {
|
||||
return true; // automatic start
|
||||
}
|
||||
|
||||
function insertUpdate($table, $rows, $primary) {
|
||||
global $connection;
|
||||
foreach ($rows as $set) {
|
||||
$update = array();
|
||||
$where = array();
|
||||
foreach ($set as $key => $val) {
|
||||
$update[] = "$key = $val";
|
||||
if (isset($primary[idf_unescape($key)])) {
|
||||
$where[] = "$key = $val";
|
||||
}
|
||||
}
|
||||
if (!(($where && queries("UPDATE " . table($table) . " SET " . implode(", ", $update) . " WHERE " . implode(" AND ", $where)) && $connection->affected_rows)
|
||||
|| queries("INSERT INTO " . table($table) . " (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ")")
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -165,7 +188,12 @@ if (isset($_GET["oracle"])) {
|
||||
}
|
||||
|
||||
function get_databases() {
|
||||
return get_vals("SELECT tablespace_name FROM user_tablespaces");
|
||||
return get_vals("SELECT DISTINCT tablespace_name FROM (
|
||||
SELECT tablespace_name FROM user_tablespaces
|
||||
UNION SELECT tablespace_name FROM all_tables WHERE tablespace_name IS NOT NULL
|
||||
)
|
||||
ORDER BY 1"
|
||||
);
|
||||
}
|
||||
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
@@ -193,22 +221,51 @@ if (isset($_GET["oracle"])) {
|
||||
return $connection->result("SELECT USER FROM DUAL");
|
||||
}
|
||||
|
||||
function get_current_db() {
|
||||
global $connection;
|
||||
$db = $connection->_current_db ? $connection->_current_db : DB;
|
||||
unset($connection->_current_db);
|
||||
return $db;
|
||||
}
|
||||
|
||||
function where_owner($prefix, $owner = "owner") {
|
||||
if (!$_GET["ns"]) {
|
||||
return '';
|
||||
}
|
||||
return "$prefix$owner = sys_context('USERENV', 'CURRENT_SCHEMA')";
|
||||
}
|
||||
|
||||
function views_table($columns) {
|
||||
$owner = where_owner('');
|
||||
return "(SELECT $columns FROM all_views WHERE " . ($owner ? $owner : "rownum < 0") . ")";
|
||||
}
|
||||
|
||||
function tables_list() {
|
||||
return get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = " . q(DB) . "
|
||||
UNION SELECT view_name, 'view' FROM user_views
|
||||
$view = views_table("view_name");
|
||||
$owner = where_owner(" AND ");
|
||||
return get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = " . q(DB) . "$owner
|
||||
UNION SELECT view_name, 'view' FROM $view
|
||||
ORDER BY 1"
|
||||
); //! views don't have schema
|
||||
}
|
||||
|
||||
function count_tables($databases) {
|
||||
return array();
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach ($databases as $db) {
|
||||
$return[$db] = $connection->result("SELECT COUNT(*) FROM all_tables WHERE tablespace_name = " . q($db));
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function table_status($name = "") {
|
||||
$return = array();
|
||||
$search = q($name);
|
||||
foreach (get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = ' . q(DB) . ($name != "" ? " AND table_name = $search" : "") . "
|
||||
UNION SELECT view_name, 'view', 0, 0 FROM user_views" . ($name != "" ? " WHERE view_name = $search" : "") . "
|
||||
$db = get_current_db();
|
||||
$view = views_table("view_name");
|
||||
$owner = where_owner(" AND ");
|
||||
foreach (get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = ' . q($db) . $owner . ($name != "" ? " AND table_name = $search" : "") . "
|
||||
UNION SELECT view_name, 'view', 0, 0 FROM $view" . ($name != "" ? " WHERE view_name = $search" : "") . "
|
||||
ORDER BY 1"
|
||||
) as $row) {
|
||||
if ($name != "") {
|
||||
@@ -229,11 +286,12 @@ ORDER BY 1"
|
||||
|
||||
function fields($table) {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT * FROM all_tab_columns WHERE table_name = " . q($table) . " ORDER BY column_id") as $row) {
|
||||
$owner = where_owner(" AND ");
|
||||
foreach (get_rows("SELECT * FROM all_tab_columns WHERE table_name = " . q($table) . "$owner ORDER BY column_id") as $row) {
|
||||
$type = $row["DATA_TYPE"];
|
||||
$length = "$row[DATA_PRECISION],$row[DATA_SCALE]";
|
||||
if ($length == ",") {
|
||||
$length = $row["DATA_LENGTH"];
|
||||
$length = $row["CHAR_COL_DECL_LENGTH"];
|
||||
} //! int
|
||||
$return[$row["COLUMN_NAME"]] = array(
|
||||
"field" => $row["COLUMN_NAME"],
|
||||
@@ -254,22 +312,27 @@ ORDER BY 1"
|
||||
|
||||
function indexes($table, $connection2 = null) {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT uic.*, uc.constraint_type
|
||||
FROM user_ind_columns uic
|
||||
LEFT JOIN user_constraints uc ON uic.index_name = uc.constraint_name AND uic.table_name = uc.table_name
|
||||
WHERE uic.table_name = " . q($table) . "
|
||||
ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
||||
$owner = where_owner(" AND ", "aic.table_owner");
|
||||
foreach (get_rows("SELECT aic.*, ac.constraint_type, atc.data_default
|
||||
FROM all_ind_columns aic
|
||||
LEFT JOIN all_constraints ac ON aic.index_name = ac.constraint_name AND aic.table_name = ac.table_name AND aic.index_owner = ac.owner
|
||||
LEFT JOIN all_tab_cols atc ON aic.column_name = atc.column_name AND aic.table_name = atc.table_name AND aic.index_owner = atc.owner
|
||||
WHERE aic.table_name = " . q($table) . "$owner
|
||||
ORDER BY ac.constraint_type, aic.column_position", $connection2) as $row) {
|
||||
$index_name = $row["INDEX_NAME"];
|
||||
$column_name = $row["DATA_DEFAULT"];
|
||||
$column_name = ($column_name ? trim($column_name, '"') : $row["COLUMN_NAME"]); // trim - possibly wrapped in quotes but never contains quotes inside
|
||||
$return[$index_name]["type"] = ($row["CONSTRAINT_TYPE"] == "P" ? "PRIMARY" : ($row["CONSTRAINT_TYPE"] == "U" ? "UNIQUE" : "INDEX"));
|
||||
$return[$index_name]["columns"][] = $row["COLUMN_NAME"];
|
||||
$return[$index_name]["columns"][] = $column_name;
|
||||
$return[$index_name]["lengths"][] = ($row["CHAR_LENGTH"] && $row["CHAR_LENGTH"] != $row["COLUMN_LENGTH"] ? $row["CHAR_LENGTH"] : null);
|
||||
$return[$index_name]["descs"][] = ($row["DESCEND"] ? '1' : null);
|
||||
$return[$index_name]["descs"][] = ($row["DESCEND"] && $row["DESCEND"] == "DESC" ? '1' : null);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function view($name) {
|
||||
$rows = get_rows('SELECT text "select" FROM user_views WHERE view_name = ' . q($name));
|
||||
$view = views_table("view_name, text");
|
||||
$rows = get_rows('SELECT text "select" FROM ' . $view . ' WHERE view_name = ' . q($name));
|
||||
return reset($rows);
|
||||
}
|
||||
|
||||
@@ -294,13 +357,25 @@ ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
||||
function found_rows($table_status, $where) {
|
||||
}
|
||||
|
||||
function auto_increment() {
|
||||
return "";
|
||||
}
|
||||
|
||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||
$alter = $drop = array();
|
||||
$orig_fields = ($table ? fields($table) : array());
|
||||
foreach ($fields as $field) {
|
||||
$val = $field[1];
|
||||
if ($val && $field[0] != "" && idf_escape($field[0]) != $val[0]) {
|
||||
queries("ALTER TABLE " . table($table) . " RENAME COLUMN " . idf_escape($field[0]) . " TO $val[0]");
|
||||
}
|
||||
$orig_field = $orig_fields[$field[0]];
|
||||
if ($val && $orig_field) {
|
||||
$old = process_field($orig_field, $orig_field);
|
||||
if ($val[2] == $old[2]) {
|
||||
$val[2] = "";
|
||||
}
|
||||
}
|
||||
if ($val) {
|
||||
$alter[] = ($table != "" ? ($field[0] != "" ? "MODIFY (" : "ADD (") : " ") . implode($val) . ($table != "" ? ")" : ""); //! error with name change only
|
||||
} else {
|
||||
@@ -316,6 +391,35 @@ ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
||||
;
|
||||
}
|
||||
|
||||
function alter_indexes($table, $alter) {
|
||||
$drop = array();
|
||||
$queries = array();
|
||||
foreach ($alter as $val) {
|
||||
if ($val[0] != "INDEX") {
|
||||
//! descending UNIQUE indexes results in syntax error
|
||||
$val[2] = preg_replace('~ DESC$~', '', $val[2]);
|
||||
$create = ($val[2] == "DROP"
|
||||
? "\nDROP CONSTRAINT " . idf_escape($val[1])
|
||||
: "\nADD" . ($val[1] != "" ? " CONSTRAINT " . idf_escape($val[1]) : "") . " $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . "(" . implode(", ", $val[2]) . ")"
|
||||
);
|
||||
array_unshift($queries, "ALTER TABLE " . table($table) . $create);
|
||||
} elseif ($val[2] == "DROP") {
|
||||
$drop[] = idf_escape($val[1]);
|
||||
} else {
|
||||
$queries[] = "CREATE INDEX " . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " (" . implode(", ", $val[2]) . ")";
|
||||
}
|
||||
}
|
||||
if ($drop) {
|
||||
array_unshift($queries, "DROP INDEX " . implode(", ", $drop));
|
||||
}
|
||||
foreach ($queries as $query) {
|
||||
if (!queries($query)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function foreign_keys($table) {
|
||||
$return = array();
|
||||
$query = "SELECT c_list.CONSTRAINT_NAME as NAME,
|
||||
@@ -359,7 +463,8 @@ AND c_src.TABLE_NAME = " . q($table);
|
||||
}
|
||||
|
||||
function schemas() {
|
||||
return get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX'))");
|
||||
$return = get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX')) ORDER BY 1");
|
||||
return ($return ? $return : get_vals("SELECT DISTINCT owner FROM all_tables WHERE tablespace_name = " . q(DB) . " ORDER BY 1"));
|
||||
}
|
||||
|
||||
function get_schema() {
|
||||
@@ -379,6 +484,10 @@ AND c_src.TABLE_NAME = " . q($table);
|
||||
return get_key_vals('SELECT name, display_value FROM v$parameter');
|
||||
}
|
||||
|
||||
function is_c_style_escapes() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function process_list() {
|
||||
return get_rows('SELECT sess.process AS "process", sess.username AS "user", sess.schemaname AS "schema", sess.status AS "status", sess.wait_class AS "wait_class", sess.seconds_in_wait AS "seconds_in_wait", sql.sql_text AS "sql_text", sess.machine AS "machine", sess.port AS "port"
|
||||
FROM v$session sess LEFT OUTER JOIN v$sql sql
|
||||
@@ -401,33 +510,40 @@ ORDER BY PROCESS
|
||||
}
|
||||
|
||||
function support($feature) {
|
||||
return preg_match('~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view|view_trigger)$~', $feature); //!
|
||||
return preg_match('~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view)$~', $feature); //!
|
||||
}
|
||||
|
||||
$jush = "oracle";
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array(
|
||||
lang('Numbers') => array("number" => 38, "binary_float" => 12, "binary_double" => 21),
|
||||
lang('Date and time') => array("date" => 10, "timestamp" => 29, "interval year" => 12, "interval day" => 28), //! year(), day() to second()
|
||||
lang('Strings') => array("char" => 2000, "varchar2" => 4000, "nchar" => 2000, "nvarchar2" => 4000, "clob" => 4294967295, "nclob" => 4294967295),
|
||||
lang('Binary') => array("raw" => 2000, "long raw" => 2147483648, "blob" => 4294967295, "bfile" => 4294967296),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
function driver_config() {
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array(
|
||||
lang('Numbers') => array("number" => 38, "binary_float" => 12, "binary_double" => 21),
|
||||
lang('Date and time') => array("date" => 10, "timestamp" => 29, "interval year" => 12, "interval day" => 28), //! year(), day() to second()
|
||||
lang('Strings') => array("char" => 2000, "varchar2" => 4000, "nchar" => 2000, "nvarchar2" => 4000, "clob" => 4294967295, "nclob" => 4294967295),
|
||||
lang('Binary') => array("raw" => 2000, "long raw" => 2147483648, "blob" => 4294967295, "bfile" => 4294967296),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("OCI8", "PDO_OCI"),
|
||||
'jush' => "oracle",
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "SQL"),
|
||||
'functions' => array("length", "lower", "round", "upper"),
|
||||
'grouping' => array("avg", "count", "count distinct", "max", "min", "sum"),
|
||||
'edit_functions' => array(
|
||||
array( //! no parentheses
|
||||
"date" => "current_date",
|
||||
"timestamp" => "current_timestamp",
|
||||
), array(
|
||||
"number|float|double" => "+/-",
|
||||
"date|timestamp" => "+ interval/- interval",
|
||||
"char|clob" => "||",
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "SQL");
|
||||
$functions = array("length", "lower", "round", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
array( //! no parentheses
|
||||
"date" => "current_date",
|
||||
"timestamp" => "current_timestamp",
|
||||
), array(
|
||||
"number|float|double" => "+/-",
|
||||
"date|timestamp" => "+ interval/- interval",
|
||||
"char|clob" => "||",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@@ -2,7 +2,6 @@
|
||||
$drivers["pgsql"] = "PostgreSQL";
|
||||
|
||||
if (isset($_GET["pgsql"])) {
|
||||
$possible_drivers = array("PgSQL", "PDO_PgSQL");
|
||||
define("DRIVER", "pgsql");
|
||||
if (extension_loaded("pgsql")) {
|
||||
class Min_DB {
|
||||
@@ -21,6 +20,10 @@ if (isset($_GET["pgsql"])) {
|
||||
$db = $adminer->database();
|
||||
set_error_handler(array($this, '_error'));
|
||||
$this->_string = "host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' user='" . addcslashes($username, "'\\") . "' password='" . addcslashes($password, "'\\") . "'";
|
||||
$ssl = $adminer->connectSsl();
|
||||
if (isset($ssl["mode"])) {
|
||||
$this->_string .= " sslmode='" . $ssl["mode"] . "'";
|
||||
}
|
||||
$this->_link = @pg_connect("$this->_string dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", PGSQL_CONNECT_FORCE_NEW);
|
||||
if (!$this->_link && $db != "") {
|
||||
// try to connect directly with database for performance
|
||||
@@ -37,11 +40,11 @@ if (isset($_GET["pgsql"])) {
|
||||
}
|
||||
|
||||
function quote($string) {
|
||||
return "'" . pg_escape_string($this->_link, $string) . "'";
|
||||
return pg_escape_literal($this->_link, $string);
|
||||
}
|
||||
|
||||
function value($val, $field) {
|
||||
return ($field["type"] == "bytea" ? pg_unescape_bytea($val) : $val);
|
||||
return ($field["type"] == "bytea" && $val !== null ? pg_unescape_bytea($val) : $val);
|
||||
}
|
||||
|
||||
function quoteBinary($string) {
|
||||
@@ -150,8 +153,13 @@ if (isset($_GET["pgsql"])) {
|
||||
function connect($server, $username, $password) {
|
||||
global $adminer;
|
||||
$db = $adminer->database();
|
||||
$this->dsn("pgsql:host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' client_encoding=utf8 dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", $username, $password); //! client_encoding is supported since 9.1 but we can't yet use min_version here
|
||||
//! connect without DB in case of an error
|
||||
//! client_encoding is supported since 9.1, but we can't yet use min_version here
|
||||
$dsn = "pgsql:host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' client_encoding=utf8 dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'";
|
||||
$ssl = $adminer->connectSsl();
|
||||
if (isset($ssl["mode"])) {
|
||||
$dsn .= " sslmode='" . $ssl["mode"] . "'";
|
||||
}
|
||||
$this->dsn($dsn, $username, $password);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -214,12 +222,12 @@ if (isset($_GET["pgsql"])) {
|
||||
}
|
||||
|
||||
function convertSearch($idf, $val, $field) {
|
||||
return (preg_match('~char|text'
|
||||
. (!preg_match('~LIKE~', $val["op"]) ? '|date|time(stamp)?|boolean|uuid|' . number_type() : '')
|
||||
. '~', $field["type"])
|
||||
? $idf
|
||||
: "CAST($idf AS text)"
|
||||
);
|
||||
$textTypes = "char|text";
|
||||
if (strpos($val["op"], "LIKE") === false) {
|
||||
$textTypes .= "|date|time(stamp)?|boolean|uuid|inet|cidr|macaddr|" . number_type();
|
||||
}
|
||||
|
||||
return (preg_match("~$textTypes~", $field["type"]) ? $idf : "CAST($idf AS text)");
|
||||
}
|
||||
|
||||
function quoteBinary($s) {
|
||||
@@ -275,7 +283,9 @@ if (isset($_GET["pgsql"])) {
|
||||
}
|
||||
|
||||
function get_databases() {
|
||||
return get_vals("SELECT datname FROM pg_database WHERE has_database_privilege(datname, 'CONNECT') ORDER BY datname");
|
||||
return get_vals("SELECT d.datname FROM pg_database d JOIN pg_roles r ON d.datdba = r.oid
|
||||
WHERE d.datallowconn = TRUE AND has_database_privilege(d.datname, 'CONNECT') AND pg_has_role(r.rolname, 'USAGE')
|
||||
ORDER BY d.datname");
|
||||
}
|
||||
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
@@ -285,7 +295,7 @@ if (isset($_GET["pgsql"])) {
|
||||
function limit1($table, $query, $where, $separator = "\n") {
|
||||
return (preg_match('~^INTO~', $query)
|
||||
? limit($query, $where, 1, 0, $separator)
|
||||
: " $query" . (is_view(table_status1($table)) ? $where : " WHERE ctid = (SELECT ctid FROM " . table($table) . $where . $separator . "LIMIT 1)")
|
||||
: " $query" . (is_view(table_status1($table)) ? $where : $separator . "WHERE ctid = (SELECT ctid FROM " . table($table) . $where . $separator . "LIMIT 1)")
|
||||
);
|
||||
}
|
||||
|
||||
@@ -305,7 +315,7 @@ if (isset($_GET["pgsql"])) {
|
||||
|
||||
function tables_list() {
|
||||
$query = "SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema()";
|
||||
if (support('materializedview')) {
|
||||
if (support('materializedview')) { // ' - support("materializedview") could be removed by compile.php
|
||||
$query .= "
|
||||
UNION ALL
|
||||
SELECT matviewname, 'MATERIALIZED VIEW'
|
||||
@@ -323,7 +333,15 @@ ORDER BY 1";
|
||||
|
||||
function table_status($name = "") {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT c.relname AS \"Name\", CASE c.relkind WHEN 'r' THEN 'table' WHEN 'm' THEN 'materialized view' ELSE 'view' END AS \"Engine\", pg_relation_size(c.oid) AS \"Data_length\", pg_total_relation_size(c.oid) - pg_relation_size(c.oid) AS \"Index_length\", obj_description(c.oid, 'pg_class') AS \"Comment\", " . (min_version(12) ? "''" : "CASE WHEN c.relhasoids THEN 'oid' ELSE '' END") . " AS \"Oid\", c.reltuples as \"Rows\", n.nspname
|
||||
foreach (get_rows("SELECT
|
||||
c.relname AS \"Name\",
|
||||
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'm' THEN 'materialized view' ELSE 'view' END AS \"Engine\",
|
||||
pg_table_size(c.oid) AS \"Data_length\",
|
||||
pg_indexes_size(c.oid) AS \"Index_length\",
|
||||
obj_description(c.oid, 'pg_class') AS \"Comment\",
|
||||
" . (min_version(12) ? "''" : "CASE WHEN c.relhasoids THEN 'oid' ELSE '' END") . " AS \"Oid\",
|
||||
c.reltuples as \"Rows\",
|
||||
n.nspname
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON(n.nspname = current_schema() AND n.oid = c.relnamespace)
|
||||
WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
|
||||
@@ -348,10 +366,7 @@ WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
|
||||
'timestamp without time zone' => 'timestamp',
|
||||
'timestamp with time zone' => 'timestamptz',
|
||||
);
|
||||
|
||||
$identity_column = min_version(10) ? 'a.attidentity' : '0';
|
||||
|
||||
foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, pg_get_expr(d.adbin, d.adrelid) AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment, $identity_column AS identity
|
||||
foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, pg_get_expr(d.adbin, d.adrelid) AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment" . (min_version(10) ? ", a.attidentity" : "") . "
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON c.relnamespace = n.oid
|
||||
JOIN pg_attribute a ON c.oid = a.attrelid
|
||||
@@ -374,14 +389,14 @@ ORDER BY a.attnum"
|
||||
$row["type"] = $type;
|
||||
$row["full_type"] = $row["type"] . $length . $addon . $array;
|
||||
}
|
||||
if (in_array($row['identity'], array('a', 'd'))) {
|
||||
$row['default'] = 'GENERATED ' . ($row['identity'] == 'd' ? 'BY DEFAULT' : 'ALWAYS') . ' AS IDENTITY';
|
||||
if (in_array($row['attidentity'], array('a', 'd'))) {
|
||||
$row['default'] = 'GENERATED ' . ($row['attidentity'] == 'd' ? 'BY DEFAULT' : 'ALWAYS') . ' AS IDENTITY';
|
||||
}
|
||||
$row["null"] = !$row["attnotnull"];
|
||||
$row["auto_increment"] = $row['identity'] || preg_match('~^nextval\(~i', $row["default"]);
|
||||
$row["auto_increment"] = $row['attidentity'] || preg_match('~^nextval\(~i', $row["default"]);
|
||||
$row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
|
||||
if (preg_match('~(.+)::[^)]+(.*)~', $row["default"], $match)) {
|
||||
$row["default"] = ($match[1] == "NULL" ? null : (($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]) . $match[2]));
|
||||
if (preg_match('~(.+)::[^,)]+(.*)~', $row["default"], $match)) {
|
||||
$row["default"] = ($match[1] == "NULL" ? null : idf_unescape($match[1]) . $match[2]);
|
||||
}
|
||||
$return[$row["field"]] = $row;
|
||||
}
|
||||
@@ -396,7 +411,7 @@ ORDER BY a.attnum"
|
||||
$return = array();
|
||||
$table_oid = $connection2->result("SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = " . q($table));
|
||||
$columns = get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $table_oid AND attnum > 0", $connection2);
|
||||
foreach (get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey, indoption , (indpred IS NOT NULL)::int as indispartial FROM pg_index i, pg_class ci WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid", $connection2) as $row) {
|
||||
foreach (get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey, indoption, (indpred IS NOT NULL)::int as indispartial FROM pg_index i, pg_class ci WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid", $connection2) as $row) {
|
||||
$relname = $row["relname"];
|
||||
$return[$relname]["type"] = ($row["indispartial"] ? "INDEX" : ($row["indisprimary"] ? "PRIMARY" : ($row["indisunique"] ? "UNIQUE" : "INDEX")));
|
||||
$return[$relname]["columns"] = array();
|
||||
@@ -421,12 +436,12 @@ WHERE conrelid = (SELECT pc.oid FROM pg_class AS pc INNER JOIN pg_namespace AS p
|
||||
AND contype = 'f'::char
|
||||
ORDER BY conkey, conname") as $row) {
|
||||
if (preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA', $row['definition'], $match)) {
|
||||
$row['source'] = array_map('trim', explode(',', $match[1]));
|
||||
$row['source'] = array_map('idf_unescape', array_map('trim', explode(',', $match[1])));
|
||||
if (preg_match('~^(("([^"]|"")+"|[^"]+)\.)?"?("([^"]|"")+"|[^"]+)$~', $match[2], $match2)) {
|
||||
$row['ns'] = str_replace('""', '"', preg_replace('~^"(.+)"$~', '\1', $match2[2]));
|
||||
$row['table'] = str_replace('""', '"', preg_replace('~^"(.+)"$~', '\1', $match2[4]));
|
||||
$row['ns'] = idf_unescape($match2[2]);
|
||||
$row['table'] = idf_unescape($match2[4]);
|
||||
}
|
||||
$row['target'] = array_map('trim', explode(',', $match[3]));
|
||||
$row['target'] = array_map('idf_unescape', array_map('trim', explode(',', $match[3])));
|
||||
$row['on_delete'] = (preg_match("~ON DELETE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
||||
$row['on_update'] = (preg_match("~ON UPDATE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
||||
$return[$row['conname']] = $row;
|
||||
@@ -435,23 +450,6 @@ ORDER BY conkey, conname") as $row) {
|
||||
return $return;
|
||||
}
|
||||
|
||||
function constraints($table) {
|
||||
global $on_actions;
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT conname, consrc
|
||||
FROM pg_catalog.pg_constraint
|
||||
INNER JOIN pg_catalog.pg_namespace ON pg_constraint.connamespace = pg_namespace.oid
|
||||
INNER JOIN pg_catalog.pg_class ON pg_constraint.conrelid = pg_class.oid AND pg_constraint.connamespace = pg_class.relnamespace
|
||||
WHERE pg_constraint.contype = 'c'
|
||||
AND conrelid != 0 -- handle only CONSTRAINTs here, not TYPES
|
||||
AND nspname = current_schema()
|
||||
AND relname = " . q($table) . "
|
||||
ORDER BY connamespace, conname") as $row) {
|
||||
$return[$row['conname']] = $row['consrc'];
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function view($name) {
|
||||
global $connection;
|
||||
return array("select" => trim($connection->result("SELECT pg_get_viewdef(" . $connection->result("SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = " . q($name)) . ")")));
|
||||
@@ -486,12 +484,13 @@ ORDER BY connamespace, conname") as $row) {
|
||||
}
|
||||
|
||||
function rename_database($name, $collation) {
|
||||
//! current database cannot be renamed
|
||||
global $connection;
|
||||
$connection->close();
|
||||
return queries("ALTER DATABASE " . idf_escape(DB) . " RENAME TO " . idf_escape($name));
|
||||
}
|
||||
|
||||
function auto_increment() {
|
||||
return (min_version(11) ? " PRIMARY KEY" : "");
|
||||
return "";
|
||||
}
|
||||
|
||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||
@@ -500,6 +499,7 @@ ORDER BY connamespace, conname") as $row) {
|
||||
if ($table != "" && $table != $name) {
|
||||
$queries[] = "ALTER TABLE " . table($table) . " RENAME TO " . table($name);
|
||||
}
|
||||
$sequence = "";
|
||||
foreach ($fields as $field) {
|
||||
$column = idf_escape($field[0]);
|
||||
$val = $field[1];
|
||||
@@ -508,20 +508,28 @@ ORDER BY connamespace, conname") as $row) {
|
||||
} else {
|
||||
$val5 = $val[5];
|
||||
unset($val[5]);
|
||||
if (isset($val[6]) && $field[0] == "") { // auto_increment
|
||||
$val[1] = ($val[1] == " bigint" ? " big" : ($val[1] == " smallint" ? " small" : " ")) . "serial";
|
||||
}
|
||||
if ($field[0] == "") {
|
||||
if (isset($val[6])) { // auto_increment
|
||||
$val[1] = ($val[1] == " bigint" ? " big" : ($val[1] == " smallint" ? " small" : " ")) . "serial";
|
||||
}
|
||||
$alter[] = ($table != "" ? "ADD " : " ") . implode($val);
|
||||
if (isset($val[6])) {
|
||||
$alter[] = ($table != "" ? "ADD" : " ") . " PRIMARY KEY ($val[0])";
|
||||
}
|
||||
} else {
|
||||
if ($column != $val[0]) {
|
||||
$queries[] = "ALTER TABLE " . table($name) . " RENAME $column TO $val[0]";
|
||||
}
|
||||
$alter[] = "ALTER $column TYPE$val[1]";
|
||||
if (!$val[6]) {
|
||||
$alter[] = "ALTER $column " . ($val[3] ? "SET$val[3]" : "DROP DEFAULT");
|
||||
$alter[] = "ALTER $column " . ($val[2] == " NULL" ? "DROP NOT" : "SET") . $val[2];
|
||||
$sequence_name = $table . "_" . idf_unescape($val[0]) . "_seq";
|
||||
$alter[] = "ALTER $column " . ($val[3] ? "SET$val[3]"
|
||||
: (isset($val[6]) ? "SET DEFAULT nextval(" . q($sequence_name) . ")"
|
||||
: "DROP DEFAULT"
|
||||
));
|
||||
if (isset($val[6])) {
|
||||
$sequence = "CREATE SEQUENCE IF NOT EXISTS " . idf_escape($sequence_name) . " OWNED BY " . idf_escape($table) . ".$val[0]";
|
||||
}
|
||||
$alter[] = "ALTER $column " . ($val[2] == " NULL" ? "DROP NOT" : "SET") . $val[2];
|
||||
}
|
||||
if ($field[0] != "" || $val5 != "") {
|
||||
$queries[] = "COMMENT ON COLUMN " . table($name) . ".$val[0] IS " . ($val5 != "" ? substr($val5, 9) : "''");
|
||||
@@ -534,7 +542,10 @@ ORDER BY connamespace, conname") as $row) {
|
||||
} elseif ($alter) {
|
||||
array_unshift($queries, "ALTER TABLE " . table($table) . "\n" . implode(",\n", $alter));
|
||||
}
|
||||
if ($table != "" || $comment != "") {
|
||||
if ($sequence) {
|
||||
array_unshift($queries, $sequence);
|
||||
}
|
||||
if ($comment !== null) {
|
||||
$queries[] = "COMMENT ON TABLE " . table($name) . " IS " . q($comment);
|
||||
}
|
||||
if ($auto_increment != "") {
|
||||
@@ -608,21 +619,34 @@ ORDER BY connamespace, conname") as $row) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function trigger($name, $table = null) {
|
||||
function trigger($name, $table) {
|
||||
if ($name == "") {
|
||||
return array("Statement" => "EXECUTE PROCEDURE ()");
|
||||
}
|
||||
if ($table === null) {
|
||||
$table = $_GET['trigger'];
|
||||
$columns = array();
|
||||
$where = "WHERE trigger_schema = current_schema() AND event_object_table = " . q($table) . " AND trigger_name = " . q($name);
|
||||
foreach (get_rows("SELECT * FROM information_schema.triggered_update_columns $where") as $row) {
|
||||
$columns[] = $row["event_object_column"];
|
||||
}
|
||||
$rows = get_rows('SELECT t.trigger_name AS "Trigger", t.action_timing AS "Timing", (SELECT STRING_AGG(event_manipulation, \' OR \') FROM information_schema.triggers WHERE event_object_table = t.event_object_table AND trigger_name = t.trigger_name ) AS "Events", t.event_manipulation AS "Event", \'FOR EACH \' || t.action_orientation AS "Type", t.action_statement AS "Statement" FROM information_schema.triggers t WHERE t.event_object_table = ' . q($table) . ' AND t.trigger_name = ' . q($name));
|
||||
return reset($rows);
|
||||
$return = array();
|
||||
foreach (get_rows('SELECT trigger_name AS "Trigger", action_timing AS "Timing", event_manipulation AS "Event", \'FOR EACH \' || action_orientation AS "Type", action_statement AS "Statement" FROM information_schema.triggers ' . "$where ORDER BY event_manipulation DESC") as $row) {
|
||||
if ($columns && $row["Event"] == "UPDATE") {
|
||||
$row["Event"] .= " OF";
|
||||
}
|
||||
$row["Of"] = implode(", ", $columns);
|
||||
if ($return) {
|
||||
$row["Event"] .= " OR $return[Event]";
|
||||
}
|
||||
$return = $row;
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function triggers($table) {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT * FROM information_schema.triggers WHERE event_object_table = " . q($table)) as $row) {
|
||||
$return[$row["trigger_name"]] = array($row["action_timing"], $row["event_manipulation"]);
|
||||
foreach (get_rows("SELECT * FROM information_schema.triggers WHERE trigger_schema = current_schema() AND event_object_table = " . q($table)) as $row) {
|
||||
$trigger = trigger($row["trigger_name"], $table);
|
||||
$return[$trigger["Trigger"]] = array($trigger["Timing"], $trigger["Event"]);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -630,7 +654,7 @@ ORDER BY connamespace, conname") as $row) {
|
||||
function trigger_options() {
|
||||
return array(
|
||||
"Timing" => array("BEFORE", "AFTER"),
|
||||
"Event" => array("INSERT", "UPDATE", "DELETE"),
|
||||
"Event" => array("INSERT", "UPDATE", "UPDATE OF", "DELETE", "INSERT OR UPDATE", "INSERT OR UPDATE OF", "DELETE OR INSERT", "DELETE OR UPDATE", "DELETE OR UPDATE OF", "DELETE OR INSERT OR UPDATE", "DELETE OR INSERT OR UPDATE OF"),
|
||||
"Type" => array("FOR EACH ROW", "FOR EACH STATEMENT"),
|
||||
);
|
||||
}
|
||||
@@ -688,7 +712,7 @@ ORDER BY SPECIFIC_NAME');
|
||||
}
|
||||
|
||||
function types() {
|
||||
return get_vals("SELECT typname
|
||||
return get_key_vals("SELECT oid, typname
|
||||
FROM pg_type
|
||||
WHERE typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema())
|
||||
AND typtype IN ('b','d','e')
|
||||
@@ -711,9 +735,9 @@ AND typelem = 0"
|
||||
$connection2 = $connection;
|
||||
}
|
||||
$return = $connection2->query("SET search_path TO " . idf_escape($schema));
|
||||
foreach (types() as $type) { //! get types from current_schemas('t')
|
||||
foreach (types() as $key => $type) { //! get types from current_schemas('t')
|
||||
if (!isset($types[$type])) {
|
||||
$types[$type] = 0;
|
||||
$types[$type] = $key;
|
||||
$structured_types[lang('User types')][] = $type;
|
||||
}
|
||||
}
|
||||
@@ -738,8 +762,6 @@ AND typelem = 0"
|
||||
}
|
||||
|
||||
function create_sql($table, $auto_increment, $style) {
|
||||
global $connection;
|
||||
$return = '';
|
||||
$return_parts = array();
|
||||
$sequences = array();
|
||||
|
||||
@@ -751,7 +773,6 @@ AND typelem = 0"
|
||||
$fields = fields($table);
|
||||
$indexes = indexes($table);
|
||||
ksort($indexes);
|
||||
$constraints = constraints($table);
|
||||
|
||||
if (!$status || empty($fields)) {
|
||||
return false;
|
||||
@@ -760,7 +781,7 @@ AND typelem = 0"
|
||||
$return = "CREATE TABLE " . idf_escape($status['nspname']) . "." . idf_escape($status['Name']) . " (\n ";
|
||||
|
||||
// fields' definitions
|
||||
foreach ($fields as $field_name => $field) {
|
||||
foreach ($fields as $field) {
|
||||
$part = idf_escape($field['field']) . ' ' . $field['full_type']
|
||||
. default_value($field)
|
||||
. ($field['attnotnull'] ? " NOT NULL" : "");
|
||||
@@ -770,11 +791,14 @@ AND typelem = 0"
|
||||
if (preg_match('~nextval\(\'([^\']+)\'\)~', $field['default'], $matches)) {
|
||||
$sequence_name = $matches[1];
|
||||
$sq = reset(get_rows(min_version(10)
|
||||
? "SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = " . q($sequence_name)
|
||||
? "SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = " . q(idf_unescape($sequence_name))
|
||||
: "SELECT * FROM $sequence_name"
|
||||
));
|
||||
$sequences[] = ($style == "DROP+CREATE" ? "DROP SEQUENCE IF EXISTS $sequence_name;\n" : "")
|
||||
. "CREATE SEQUENCE $sequence_name INCREMENT $sq[increment_by] MINVALUE $sq[min_value] MAXVALUE $sq[max_value] START " . ($auto_increment ? $sq['last_value'] : 1) . " CACHE $sq[cache_value];";
|
||||
. "CREATE SEQUENCE $sequence_name INCREMENT $sq[increment_by] MINVALUE $sq[min_value] MAXVALUE $sq[max_value]"
|
||||
. ($auto_increment && $sq['last_value'] ? " START " . ($sq["last_value"] + 1) : "")
|
||||
. " CACHE $sq[cache_value];"
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -791,8 +815,18 @@ AND typelem = 0"
|
||||
}
|
||||
}
|
||||
|
||||
$constraints = get_key_vals("SELECT conname, " . (min_version(8) ? "pg_get_constraintdef(pg_constraint.oid)" : "CONCAT('CHECK ', consrc)") . "
|
||||
FROM pg_catalog.pg_constraint
|
||||
INNER JOIN pg_catalog.pg_namespace ON pg_constraint.connamespace = pg_namespace.oid
|
||||
INNER JOIN pg_catalog.pg_class ON pg_constraint.conrelid = pg_class.oid AND pg_constraint.connamespace = pg_class.relnamespace
|
||||
WHERE pg_constraint.contype = 'c'
|
||||
AND conrelid != 0 -- handle only CONSTRAINTs here, not TYPES
|
||||
AND nspname = current_schema()
|
||||
AND relname = " . q($table) . "
|
||||
ORDER BY connamespace, conname"
|
||||
);
|
||||
foreach ($constraints as $conname => $consrc) {
|
||||
$return_parts[] = "CONSTRAINT " . idf_escape($conname) . " CHECK $consrc";
|
||||
$return_parts[] = "CONSTRAINT " . idf_escape($conname) . " $consrc";
|
||||
}
|
||||
|
||||
$return .= implode(",\n ", $return_parts) . "\n) WITH (oids = " . ($status['Oid'] ? 'true' : 'false') . ");";
|
||||
@@ -808,7 +842,7 @@ AND typelem = 0"
|
||||
}
|
||||
}
|
||||
|
||||
// coments for table & fields
|
||||
// comments for table & fields
|
||||
if ($status['Comment']) {
|
||||
$return .= "\n\nCOMMENT ON TABLE " . idf_escape($status['nspname']) . "." . idf_escape($status['Name']) . " IS " . q($status['Comment']) . ";";
|
||||
}
|
||||
@@ -831,7 +865,7 @@ AND typelem = 0"
|
||||
$return = "";
|
||||
foreach (triggers($table) as $trg_id => $trg) {
|
||||
$trigger = trigger($trg_id, $status['Name']);
|
||||
$return .= "\nCREATE TRIGGER " . idf_escape($trigger['Trigger']) . " $trigger[Timing] $trigger[Events] ON " . idf_escape($status["nspname"]) . "." . idf_escape($status['Name']) . " $trigger[Type] $trigger[Statement];;\n";
|
||||
$return .= "\nCREATE TRIGGER " . idf_escape($trigger['Trigger']) . " $trigger[Timing] $trigger[Event] ON " . idf_escape($status["nspname"]) . "." . idf_escape($status['Name']) . " $trigger[Type] $trigger[Statement];;\n";
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -845,6 +879,15 @@ AND typelem = 0"
|
||||
return get_key_vals("SHOW ALL");
|
||||
}
|
||||
|
||||
function is_c_style_escapes() {
|
||||
global $connection;
|
||||
static $c_style;
|
||||
if ($c_style === null) {
|
||||
$c_style = ($connection->result("SHOW standard_conforming_strings") == "off");
|
||||
}
|
||||
return $c_style;
|
||||
}
|
||||
|
||||
function process_list() {
|
||||
return get_rows("SELECT * FROM pg_stat_activity ORDER BY " . (min_version(9.2) ? "pid" : "procpid"));
|
||||
}
|
||||
@@ -860,7 +903,7 @@ AND typelem = 0"
|
||||
}
|
||||
|
||||
function support($feature) {
|
||||
return preg_match('~^(database|table|columns|sql|indexes|descidx|comment|view|' . (min_version(9.3) ? 'materializedview|' : '') . 'scheme|routine|processlist|sequence|trigger|type|variables|drop_col|kill|dump)$~', $feature);
|
||||
return preg_match('~^(check|database|table|columns|sql|indexes|descidx|comment|view|' . (min_version(9.3) ? 'materializedview|' : '') . 'scheme|routine|processlist|sequence|trigger|type|variables|drop_col|kill|dump)$~', $feature);
|
||||
}
|
||||
|
||||
function kill_process($val) {
|
||||
@@ -876,32 +919,39 @@ AND typelem = 0"
|
||||
return $connection->result("SHOW max_connections");
|
||||
}
|
||||
|
||||
$jush = "pgsql";
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! arrays
|
||||
lang('Numbers') => array("smallint" => 5, "integer" => 10, "bigint" => 19, "boolean" => 1, "numeric" => 0, "real" => 7, "double precision" => 16, "money" => 20),
|
||||
lang('Date and time') => array("date" => 13, "time" => 17, "timestamp" => 20, "timestamptz" => 21, "interval" => 0),
|
||||
lang('Strings') => array("character" => 0, "character varying" => 0, "text" => 0, "tsquery" => 0, "tsvector" => 0, "uuid" => 0, "xml" => 0),
|
||||
lang('Binary') => array("bit" => 0, "bit varying" => 0, "bytea" => 0),
|
||||
lang('Network') => array("cidr" => 43, "inet" => 43, "macaddr" => 17, "txid_snapshot" => 0),
|
||||
lang('Geometry') => array("box" => 0, "circle" => 0, "line" => 0, "lseg" => 0, "path" => 0, "point" => 0, "polygon" => 0),
|
||||
) as $key => $val) { //! can be retrieved from pg_type
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
function driver_config() {
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! arrays
|
||||
lang('Numbers') => array("smallint" => 5, "integer" => 10, "bigint" => 19, "boolean" => 1, "numeric" => 0, "real" => 7, "double precision" => 16, "money" => 20),
|
||||
lang('Date and time') => array("date" => 13, "time" => 17, "timestamp" => 20, "timestamptz" => 21, "interval" => 0),
|
||||
lang('Strings') => array("character" => 0, "character varying" => 0, "text" => 0, "tsquery" => 0, "tsvector" => 0, "uuid" => 0, "xml" => 0),
|
||||
lang('Binary') => array("bit" => 0, "bit varying" => 0, "bytea" => 0),
|
||||
lang('Network') => array("cidr" => 43, "inet" => 43, "macaddr" => 17, "macaddr8" => 23, "txid_snapshot" => 0),
|
||||
lang('Geometry') => array("box" => 0, "circle" => 0, "line" => 0, "lseg" => 0, "path" => 0, "point" => 0, "polygon" => 0),
|
||||
) as $key => $val) { //! can be retrieved from pg_type
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("PgSQL", "PDO_PgSQL"),
|
||||
'jush' => "pgsql",
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "ILIKE", "ILIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"), // no "SQL" to avoid CSRF
|
||||
'functions' => array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper"),
|
||||
'grouping' => array("avg", "count", "count distinct", "max", "min", "sum"),
|
||||
'edit_functions' => array(
|
||||
array(
|
||||
"char" => "md5",
|
||||
"date|time" => "now",
|
||||
), array(
|
||||
number_type() => "+/-",
|
||||
"date|time" => "+ interval/- interval", //! escape
|
||||
"char|text" => "||",
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "ILIKE", "ILIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // no "SQL" to avoid CSRF
|
||||
$functions = array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
array(
|
||||
"char" => "md5",
|
||||
"date|time" => "now",
|
||||
), array(
|
||||
number_type() => "+/-",
|
||||
"date|time" => "+ interval/- interval", //! escape
|
||||
"char|text" => "||",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@@ -3,7 +3,6 @@ $drivers["sqlite"] = "SQLite 3";
|
||||
$drivers["sqlite2"] = "SQLite 2";
|
||||
|
||||
if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
$possible_drivers = array((isset($_GET["sqlite"]) ? "SQLite3" : "SQLite"), "PDO_SQLite");
|
||||
define("DRIVER", (isset($_GET["sqlite"]) ? "sqlite" : "sqlite2"));
|
||||
if (class_exists(isset($_GET["sqlite"]) ? "SQLite3" : "SQLiteDatabase")) {
|
||||
if (isset($_GET["sqlite"])) {
|
||||
@@ -48,7 +47,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
return false;
|
||||
}
|
||||
$row = $result->_result->fetchArray();
|
||||
return $row[$field];
|
||||
return $row ? $row[$field] : false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +140,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
$return = array();
|
||||
foreach ($row as $key => $val) {
|
||||
$return[($key[0] == '"' ? idf_unescape($key) : $key)] = $val;
|
||||
$return[idf_unescape($key)] = $val;
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -320,7 +319,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
"field" => $name,
|
||||
"type" => (preg_match('~int~i', $type) ? "integer" : (preg_match('~char|clob|text~i', $type) ? "text" : (preg_match('~blob~i', $type) ? "blob" : (preg_match('~real|floa|doub~i', $type) ? "real" : "numeric")))),
|
||||
"full_type" => $type,
|
||||
"default" => (preg_match("~'(.*)'~", $default, $match) ? str_replace("''", "'", $match[1]) : ($default == "NULL" ? null : $default)),
|
||||
"default" => (preg_match("~^'(.*)'$~", $default, $match) ? str_replace("''", "'", $match[1]) : ($default == "NULL" ? null : $default)),
|
||||
"null" => !$row["notnull"],
|
||||
"privileges" => array("select" => 1, "insert" => 1, "update" => 1),
|
||||
"primary" => $row["pk"],
|
||||
@@ -524,7 +523,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function recreate_table($table, $name, $fields, $originals, $foreign, $auto_increment, $indexes = array()) {
|
||||
function recreate_table($table, $name, $fields, $originals, $foreign, $auto_increment = 0, $indexes = array()) {
|
||||
global $connection;
|
||||
if ($table != "") {
|
||||
if (!$fields) {
|
||||
@@ -677,7 +676,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
return array(
|
||||
"Timing" => strtoupper($match[1]),
|
||||
"Event" => strtoupper($match[2]) . ($of ? " OF" : ""),
|
||||
"Of" => ($of[0] == '`' || $of[0] == '"' ? idf_unescape($of) : $of),
|
||||
"Of" => idf_unescape($of),
|
||||
"Trigger" => $name,
|
||||
"Statement" => $match[4],
|
||||
);
|
||||
@@ -759,12 +758,17 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
function show_variables() {
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach (array("auto_vacuum", "cache_size", "count_changes", "default_cache_size", "empty_result_callbacks", "encoding", "foreign_keys", "full_column_names", "fullfsync", "journal_mode", "journal_size_limit", "legacy_file_format", "locking_mode", "page_size", "max_page_count", "read_uncommitted", "recursive_triggers", "reverse_unordered_selects", "secure_delete", "short_column_names", "synchronous", "temp_store", "temp_store_directory", "schema_version", "integrity_check", "quick_check") as $key) {
|
||||
$return[$key] = $connection->result("PRAGMA $key");
|
||||
$result = $connection->query("PRAGMA pragma_list");
|
||||
while ($row = $result->fetch_row()) {
|
||||
$return[$row[0]] = $connection->result("PRAGMA $row[0]");
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function is_c_style_escapes() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function show_status() {
|
||||
$return = array();
|
||||
foreach (get_vals("PRAGMA compile_options") as $option) {
|
||||
@@ -785,20 +789,26 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
return preg_match('~^(columns|database|drop_col|dump|indexes|descidx|move_col|sql|status|table|trigger|variables|view|view_trigger)$~', $feature);
|
||||
}
|
||||
|
||||
$jush = "sqlite";
|
||||
$types = array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0);
|
||||
$structured_types = array_keys($types);
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "SQL"); // REGEXP can be user defined function
|
||||
$functions = array("hex", "length", "lower", "round", "unixepoch", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
array(
|
||||
// "text" => "date('now')/time('now')/datetime('now')",
|
||||
), array(
|
||||
"integer|real|numeric" => "+/-",
|
||||
// "text" => "date/time/datetime",
|
||||
"text" => "||",
|
||||
)
|
||||
);
|
||||
function driver_config() {
|
||||
$types = array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0);
|
||||
return array(
|
||||
'possible_drivers' => array((isset($_GET["sqlite"]) ? "SQLite3" : "SQLite"), "PDO_SQLite"),
|
||||
'jush' => "sqlite",
|
||||
'types' => $types,
|
||||
'structured_types' => array_keys($types),
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "SQL"), // REGEXP can be user defined function
|
||||
'functions' => array("hex", "length", "lower", "round", "unixepoch", "upper"),
|
||||
'grouping' => array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"),
|
||||
'edit_functions' => array(
|
||||
array(
|
||||
// "text" => "date('now')/time('now')/datetime('now')",
|
||||
), array(
|
||||
"integer|real|numeric" => "+/-",
|
||||
// "text" => "date/time/datetime",
|
||||
"text" => "||",
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -14,7 +14,7 @@ if ($_POST && !$error) {
|
||||
$is_sql = preg_match('~sql~', $_POST["format"]);
|
||||
|
||||
if ($is_sql) {
|
||||
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump\n\n";
|
||||
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " " . str_replace("\n", " ", $connection->server_info) . " dump\n\n";
|
||||
if ($jush == "sql") {
|
||||
echo "SET NAMES utf8;
|
||||
SET time_zone = '+00:00';
|
||||
@@ -53,12 +53,12 @@ SET foreign_key_checks = 0;
|
||||
$out = "";
|
||||
|
||||
if ($_POST["routines"]) {
|
||||
foreach (array("FUNCTION", "PROCEDURE") as $routine) {
|
||||
foreach (get_rows("SHOW $routine STATUS WHERE Db = " . q($db), null, "-- ") as $row) {
|
||||
$create = remove_definer($connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2));
|
||||
set_utf8mb4($create);
|
||||
$out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") . "$create;;\n\n";
|
||||
}
|
||||
foreach (routines() as $row) {
|
||||
$name = $row["ROUTINE_NAME"];
|
||||
$routine = $row["ROUTINE_TYPE"];
|
||||
$create = create_routine($routine, array("name" => $name) + routine($row["SPECIFIC_NAME"], $routine));
|
||||
set_utf8mb4($create);
|
||||
$out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($name) . ";;\n" : "") . "$create;\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,9 +70,7 @@ SET foreign_key_checks = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if ($out) {
|
||||
echo "DELIMITER ;;\n\n$out" . "DELIMITER ;\n\n";
|
||||
}
|
||||
echo ($out && $jush == 'sql' ? "DELIMITER ;;\n\n$out" . "DELIMITER ;\n\n" : $out);
|
||||
}
|
||||
|
||||
if ($_POST["table_style"] || $_POST["data_style"]) {
|
||||
@@ -137,7 +135,7 @@ page_header(lang('Export'), $error, ($_GET["export"] != "" ? array("table" => $_
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<table cellspacing="0" class="layout">
|
||||
<table class="layout">
|
||||
<?php
|
||||
$db_style = array('', 'USE', 'DROP+CREATE', 'CREATE');
|
||||
$table_style = array('', 'DROP+CREATE', 'CREATE');
|
||||
@@ -174,7 +172,7 @@ echo "<tr><th>" . lang('Data') . "<td>" . html_select('data_style', $data_style,
|
||||
<p><input type="submit" value="<?php echo lang('Export'); ?>">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
|
||||
<table cellspacing="0">
|
||||
<table>
|
||||
<?php
|
||||
echo script("qsl('table').onclick = dumpClick;");
|
||||
$prefixes = array();
|
||||
|
13
adminer/elastic.php
Normal file
13
adminer/elastic.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
function adminer_object() {
|
||||
include_once "../plugins/plugin.php";
|
||||
include_once "../plugins/login-password-less.php";
|
||||
include_once "../plugins/drivers/elastic.php";
|
||||
include_once "../plugins/drivers/elastic5.php";
|
||||
return new AdminerPlugin(array(
|
||||
// TODO: inline the result of password_hash() so that the password is not visible in source codes
|
||||
new AdminerLoginPasswordLess(password_hash("YOUR_PASSWORD_HERE", PASSWORD_DEFAULT)),
|
||||
));
|
||||
}
|
||||
|
||||
include "./index.php";
|
@@ -15,7 +15,7 @@ if ($_POST && !$error) {
|
||||
: "AT " . q($row["STARTS"])
|
||||
) . " ON COMPLETION" . ($row["ON_COMPLETION"] ? "" : " NOT") . " PRESERVE"
|
||||
;
|
||||
|
||||
|
||||
queries_redirect(substr(ME, 0, -1), ($EVENT != "" ? lang('Event has been altered.') : lang('Event has been created.')), queries(($EVENT != ""
|
||||
? "ALTER EVENT " . idf_escape($EVENT) . $schedule
|
||||
. ($EVENT != $row["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($row["EVENT_NAME"]) : "")
|
||||
@@ -35,7 +35,7 @@ if (!$row && $EVENT != "") {
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<table cellspacing="0" class="layout">
|
||||
<table class="layout">
|
||||
<tr><th><?php echo lang('Name'); ?><td><input name="EVENT_NAME" value="<?php echo h($row["EVENT_NAME"]); ?>" data-maxlength="64" autocapitalize="off">
|
||||
<tr><th title="datetime"><?php echo lang('Start'); ?><td><input name="STARTS" value="<?php echo h("$row[EXECUTE_AT]$row[STARTS]"); ?>">
|
||||
<tr><th title="datetime"><?php echo lang('End'); ?><td><input name="ENDS" value="<?php echo h($row["ENDS"]); ?>">
|
||||
|
@@ -6,7 +6,7 @@ $row = $_POST;
|
||||
if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-js"]) {
|
||||
$message = ($_POST["drop"] ? lang('Foreign key has been dropped.') : ($name != "" ? lang('Foreign key has been altered.') : lang('Foreign key has been created.')));
|
||||
$location = ME . "table=" . urlencode($TABLE);
|
||||
|
||||
|
||||
if (!$_POST["drop"]) {
|
||||
$row["source"] = array_filter($row["source"], 'strlen');
|
||||
ksort($row["source"]); // enforce input order
|
||||
@@ -16,7 +16,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-
|
||||
}
|
||||
$row["target"] = $target;
|
||||
}
|
||||
|
||||
|
||||
if ($jush == "sqlite") {
|
||||
queries_redirect($location, $message, recreate_table($TABLE, $TABLE, array(), array(), array(" $name" => ($_POST["drop"] ? "" : " " . format_foreign_key($row)))));
|
||||
} else {
|
||||
@@ -77,7 +77,7 @@ if ($jush == "pgsql") {
|
||||
?>
|
||||
<input type="hidden" name="change-js" value="">
|
||||
<noscript><p><input type="submit" name="change" value="<?php echo lang('Change'); ?>"></noscript>
|
||||
<table cellspacing="0">
|
||||
<table>
|
||||
<thead><tr><th id="label-source"><?php echo lang('Source'); ?><th id="label-target"><?php echo lang('Target'); ?></thead>
|
||||
<?php
|
||||
$j = 0;
|
||||
|
@@ -13,14 +13,14 @@ class Adminer {
|
||||
}
|
||||
|
||||
/** Connection parameters
|
||||
* @return array ($server, $username, $password)
|
||||
* @return array [$server, $username, $password]
|
||||
*/
|
||||
function credentials() {
|
||||
return array(SERVER, $_GET["username"], get_password());
|
||||
}
|
||||
|
||||
/** Get SSL connection options
|
||||
* @return array array("key" => filename, "cert" => filename, "ca" => filename) or null
|
||||
* @return array ["key" => filename, "cert" => filename, "ca" => filename] or null
|
||||
*/
|
||||
function connectSsl() {
|
||||
}
|
||||
@@ -39,7 +39,7 @@ class Adminer {
|
||||
function bruteForceKey() {
|
||||
return $_SERVER["REMOTE_ADDR"];
|
||||
}
|
||||
|
||||
|
||||
/** Get server name displayed in breadcrumbs
|
||||
* @param string
|
||||
* @return string HTML code or null
|
||||
@@ -118,17 +118,17 @@ class Adminer {
|
||||
*/
|
||||
function loginForm() {
|
||||
global $drivers;
|
||||
echo "<table cellspacing='0' class='layout'>\n";
|
||||
echo "<table class='layout'>\n";
|
||||
echo $this->loginFormField('driver', '<tr><th>' . lang('System') . '<td>', html_select("auth[driver]", $drivers, DRIVER, "loginDriver(this);") . "\n");
|
||||
echo $this->loginFormField('server', '<tr><th>' . lang('Server') . '<td>', '<input name="auth[server]" value="' . h(SERVER) . '" title="hostname[:port]" placeholder="localhost" autocapitalize="off">' . "\n");
|
||||
echo $this->loginFormField('username', '<tr><th>' . lang('Username') . '<td>', '<input name="auth[username]" id="username" value="' . h($_GET["username"]) . '" autocomplete="username" autocapitalize="off">' . script("focus(qs('#username')); qs('#username').form['auth[driver]'].onchange();"));
|
||||
echo $this->loginFormField('username', '<tr><th>' . lang('Username') . '<td>', '<input name="auth[username]" id="username" autofocus value="' . h($_GET["username"]) . '" autocomplete="username" autocapitalize="off">' . script("qs('#username').form['auth[driver]'].onchange();"));
|
||||
echo $this->loginFormField('password', '<tr><th>' . lang('Password') . '<td>', '<input type="password" name="auth[password]" autocomplete="current-password">' . "\n");
|
||||
echo $this->loginFormField('db', '<tr><th>' . lang('Database') . '<td>', '<input name="auth[db]" value="' . h($_GET["db"]) . '" autocapitalize="off">' . "\n");
|
||||
echo "</table>\n";
|
||||
echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
|
||||
echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||
}
|
||||
|
||||
|
||||
/** Get login form field
|
||||
* @param string
|
||||
* @param string HTML
|
||||
@@ -248,8 +248,7 @@ class Adminer {
|
||||
* @param string query to be executed
|
||||
* @return string escaped query to be printed
|
||||
*/
|
||||
function sqlCommandQuery($query)
|
||||
{
|
||||
function sqlCommandQuery($query) {
|
||||
return shorten_utf8(trim($query), 1000);
|
||||
}
|
||||
|
||||
@@ -310,12 +309,17 @@ class Adminer {
|
||||
* @return null
|
||||
*/
|
||||
function tableStructurePrint($fields) {
|
||||
global $structured_types;
|
||||
echo "<div class='scrollable'>\n";
|
||||
echo "<table cellspacing='0' class='nowrap'>\n";
|
||||
echo "<table class='nowrap odds'>\n";
|
||||
echo "<thead><tr><th>" . lang('Column') . "<td>" . lang('Type') . (support("comment") ? "<td>" . lang('Comment') : "") . "</thead>\n";
|
||||
foreach ($fields as $field) {
|
||||
echo "<tr" . odd() . "><th>" . h($field["field"]);
|
||||
echo "<td><span title='" . h($field["collation"]) . "'>" . h($field["full_type"]) . "</span>";
|
||||
echo "<tr><th>" . h($field["field"]);
|
||||
$type = h($field["full_type"]);
|
||||
echo "<td><span title='" . h($field["collation"]) . "'>"
|
||||
. (in_array($type, (array) $structured_types[lang('User types')]) ? "<a href='" . h(ME . 'type=' . urlencode($type)) . "'>$type</a>" : $type)
|
||||
. "</span>"
|
||||
;
|
||||
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>" : "");
|
||||
@@ -331,7 +335,7 @@ class Adminer {
|
||||
* @return null
|
||||
*/
|
||||
function tableIndexesPrint($indexes) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<table>\n";
|
||||
foreach ($indexes as $name => $index) {
|
||||
ksort($index["columns"]); // enforce correct columns order
|
||||
$print = array();
|
||||
@@ -506,7 +510,7 @@ class Adminer {
|
||||
/** Process columns box in select
|
||||
* @param array selectable columns
|
||||
* @param array
|
||||
* @return array (array(select_expressions), array(group_expressions))
|
||||
* @return array [array(select_expressions), array(group_expressions)]
|
||||
*/
|
||||
function selectColumnsProcess($columns, $indexes) {
|
||||
global $functions, $grouping;
|
||||
@@ -563,6 +567,7 @@ class Adminer {
|
||||
foreach ($fields as $name => $field) {
|
||||
if ((preg_match('~^[-\d.' . (preg_match('~IN$~', $val["op"]) ? ',' : '') . ']+$~', $val["val"]) || !preg_match('~' . number_type() . '|bit~', $field["type"]))
|
||||
&& (!preg_match("~[\x80-\xFF]~", $val["val"]) || preg_match('~char|text|enum|set~', $field["type"]))
|
||||
&& (!preg_match('~date|timestamp~', $field["type"]) || preg_match('~^\d+-\d+-\d+~', $val["val"]))
|
||||
) {
|
||||
$cols[] = $prefix . $driver->convertSearch(idf_escape($name), $val, $field) . $cond;
|
||||
}
|
||||
@@ -658,6 +663,16 @@ class Adminer {
|
||||
;
|
||||
}
|
||||
|
||||
/** Print before edit form
|
||||
* @param string
|
||||
* @param array
|
||||
* @param mixed
|
||||
* @param bool
|
||||
* @return null
|
||||
*/
|
||||
function editRowPrint($table, $fields, $row, $update) {
|
||||
}
|
||||
|
||||
/** Functions displayed in edit form
|
||||
* @param array single field from fields()
|
||||
* @return array
|
||||
@@ -665,19 +680,20 @@ class Adminer {
|
||||
function editFunctions($field) {
|
||||
global $edit_functions;
|
||||
$return = ($field["null"] ? "NULL/" : "");
|
||||
$update = isset($_GET["select"]) || where($_GET);
|
||||
foreach ($edit_functions as $key => $functions) {
|
||||
if (!$key || (!isset($_GET["call"]) && (isset($_GET["select"]) || where($_GET)))) { // relative functions
|
||||
if (!$key || (!isset($_GET["call"]) && $update)) { // relative functions
|
||||
foreach ($functions as $pattern => $val) {
|
||||
if (!$pattern || preg_match("~$pattern~", $field["type"])) {
|
||||
$return .= "/$val";
|
||||
}
|
||||
}
|
||||
if ($key && !preg_match('~set|blob|bytea|raw|file|bool~', $field["type"])) {
|
||||
$return .= "/SQL";
|
||||
}
|
||||
}
|
||||
if ($key && !preg_match('~set|blob|bytea|raw|file|bool~', $field["type"])) {
|
||||
$return .= "/SQL";
|
||||
}
|
||||
}
|
||||
if ($field["auto_increment"] && !isset($_GET["select"]) && !where($_GET)) {
|
||||
if ($field["auto_increment"] && !$update) {
|
||||
$return = lang('Auto Increment');
|
||||
}
|
||||
return explode("/", $return);
|
||||
@@ -694,7 +710,7 @@ class Adminer {
|
||||
if ($field["type"] == "enum") {
|
||||
return (isset($_GET["select"]) ? "<label><input type='radio'$attrs value='-1' checked><i>" . lang('original') . "</i></label> " : "")
|
||||
. ($field["null"] ? "<label><input type='radio'$attrs value=''" . ($value !== null || isset($_GET["select"]) ? "" : " checked") . "><i>NULL</i></label> " : "")
|
||||
. enum_input("radio", $attrs, $field, $value, 0) // 0 - empty
|
||||
. enum_input("radio", $attrs, $field, $value, $value === 0 ? 0 : null) // 0 - empty value
|
||||
;
|
||||
}
|
||||
return "";
|
||||
@@ -806,8 +822,9 @@ class Adminer {
|
||||
*/
|
||||
function dumpData($table, $style, $query) {
|
||||
global $connection, $jush;
|
||||
$max_packet = ($jush == "sqlite" ? 0 : 1048576); // default, minimum is 1024
|
||||
if ($style) {
|
||||
$max_packet = ($jush == "sqlite" ? 0 : 1048576); // default, minimum is 1024
|
||||
$fields = array();
|
||||
if ($_POST["format"] == "sql") {
|
||||
if ($style == "TRUNCATE+INSERT") {
|
||||
echo truncate_sql($table) . ";\n";
|
||||
@@ -819,6 +836,7 @@ class Adminer {
|
||||
$insert = "";
|
||||
$buffer = "";
|
||||
$keys = array();
|
||||
$generated = array();
|
||||
$suffix = "";
|
||||
$fetch_function = ($table != '' ? 'fetch_assoc' : 'fetch_row');
|
||||
while ($row = $result->$fetch_function()) {
|
||||
@@ -826,6 +844,10 @@ class Adminer {
|
||||
$values = array();
|
||||
foreach ($row as $val) {
|
||||
$field = $result->fetch_field();
|
||||
if ($fields[$field->name]['generated']) {
|
||||
$generated[$field->name] = true;
|
||||
continue;
|
||||
}
|
||||
$keys[] = $field->name;
|
||||
$key = idf_escape($field->name);
|
||||
$values[] = "$key = VALUES($key)";
|
||||
@@ -843,6 +865,10 @@ class Adminer {
|
||||
$insert = "INSERT INTO " . table($table) . " (" . implode(", ", array_map('idf_escape', $keys)) . ") VALUES";
|
||||
}
|
||||
foreach ($row as $key => $val) {
|
||||
if ($generated[$key]) {
|
||||
unset($row[$key]);
|
||||
continue;
|
||||
}
|
||||
$field = $fields[$key];
|
||||
$row[$key] = ($val !== null
|
||||
? unconvert_field($field, preg_match(number_type(), $field["type"]) && !preg_match('~\[~', $field["full_type"]) && is_numeric($val) ? $val : q(($val === false ? 0 : $val)))
|
||||
@@ -922,10 +948,14 @@ class Adminer {
|
||||
global $VERSION, $jush, $drivers, $connection;
|
||||
?>
|
||||
<h1>
|
||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
||||
<a href="https://www.adminer.org/#download"<?php echo target_blank(); ?> id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
||||
<?php echo $this->name(); ?>
|
||||
<span class="version">
|
||||
<?php echo $VERSION; ?>
|
||||
<a href="https://www.adminer.org/#download"<?php echo target_blank(); ?> id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
||||
</span>
|
||||
</h1>
|
||||
<?php
|
||||
switch_lang();
|
||||
if ($missing == "auth") {
|
||||
$output = "";
|
||||
foreach ((array) $_SESSION["pwds"] as $vendor => $servers) {
|
||||
@@ -944,6 +974,7 @@ class Adminer {
|
||||
echo "<ul id='logins'>\n$output</ul>\n" . script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");
|
||||
}
|
||||
} else {
|
||||
$tables = array();
|
||||
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
||||
$connection->select_db(DB);
|
||||
$tables = table_status('', true);
|
||||
@@ -974,18 +1005,26 @@ bodyLoad('<?php echo (is_object($connection) ? preg_replace('~^(\d\.?\d).*~s', '
|
||||
<?php
|
||||
}
|
||||
$this->databasesPrint($missing);
|
||||
$actions = array();
|
||||
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" : "") . "";
|
||||
if (support("sql")) {
|
||||
$actions[] = "<a href='" . h(ME) . "sql='" . bold(isset($_GET["sql"]) && !isset($_GET["import"])) . ">" . lang('SQL command') . "</a>";
|
||||
$actions[] = "<a href='" . h(ME) . "import='" . bold(isset($_GET["import"])) . ">" . lang('Import') . "</a>";
|
||||
}
|
||||
if (support("dump")) {
|
||||
echo "<a href='" . h(ME) . "dump=" . urlencode(isset($_GET["table"]) ? $_GET["table"] : $_GET["select"]) . "' id='dump'" . bold(isset($_GET["dump"])) . ">" . lang('Export') . "</a>\n";
|
||||
$actions[] = "<a href='" . h(ME) . "dump=" . urlencode(isset($_GET["table"]) ? $_GET["table"] : $_GET["select"]) . "' id='dump'" . bold(isset($_GET["dump"])) . ">" . lang('Export') . "</a>";
|
||||
}
|
||||
}
|
||||
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
||||
echo '<a href="' . h(ME) . 'create="' . bold($_GET["create"] === "") . ">" . lang('Create table') . "</a>\n";
|
||||
if (!$tables) {
|
||||
echo "<p class='message'>" . lang('No tables.') . "\n";
|
||||
} else {
|
||||
$in_db = $_GET["ns"] !== "" && !$missing && DB != "";
|
||||
if ($in_db) {
|
||||
$actions[] = '<a href="' . h(ME) . 'create="' . bold($_GET["create"] === "") . ">" . lang('Create table') . "</a>";
|
||||
}
|
||||
echo ($actions ? "<p class='links'>\n" . implode("\n", $actions) . "\n" : "");
|
||||
if ($in_db) {
|
||||
if ($tables) {
|
||||
$this->tablesPrint($tables);
|
||||
} else {
|
||||
echo "<p class='message'>" . lang('No tables.') . "</p>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1007,13 +1046,13 @@ bodyLoad('<?php echo (is_object($connection) ? preg_replace('~^(\d\.?\d).*~s', '
|
||||
<?php
|
||||
hidden_fields_get();
|
||||
$db_events = script("mixin(qsl('select'), {onmousedown: dbMouseDown, onchange: dbChange});");
|
||||
echo "<span title='" . lang('database') . "'>" . lang('DB') . "</span>: " . ($databases
|
||||
echo "<span title='" . lang('Database') . "'>" . lang('DB') . "</span>: " . ($databases
|
||||
? "<select name='db'>" . optionlist(array("" => "") + $databases, DB) . "</select>$db_events"
|
||||
: "<input name='db' value='" . h(DB) . "' autocapitalize='off'>\n"
|
||||
: "<input name='db' value='" . h(DB) . "' autocapitalize='off' size='19'>\n"
|
||||
);
|
||||
echo "<input type='submit' value='" . lang('Use') . "'" . ($databases ? " class='hidden'" : "") . ">\n";
|
||||
if ($missing != "db" && DB != "" && $connection->select_db(DB)) {
|
||||
if (support("scheme")) {
|
||||
if (support("scheme")) {
|
||||
if ($missing != "db" && DB != "" && $connection->select_db(DB)) {
|
||||
echo "<br>" . lang('Schema') . ": <select name='ns'>" . optionlist(array("" => "") + $adminer->schemas(), $_GET["ns"]) . "</select>$db_events";
|
||||
if ($_GET["ns"] != "") {
|
||||
set_schema($_GET["ns"]);
|
||||
@@ -1054,8 +1093,3 @@ bodyLoad('<?php echo (is_object($connection) ? preg_replace('~^(\d\.?\d).*~s', '
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer);
|
||||
if ($adminer->operators === null) {
|
||||
$adminer->operators = $operators;
|
||||
}
|
||||
|
@@ -41,7 +41,7 @@ function add_invalid_login() {
|
||||
function check_invalid_login() {
|
||||
global $adminer;
|
||||
$invalids = unserialize(@file_get_contents(get_temp_dir() . "/adminer.invalid")); // @ - may not exist
|
||||
$invalid = $invalids[$adminer->bruteForceKey()];
|
||||
$invalid = ($invalids ? $invalids[$adminer->bruteForceKey()] : array());
|
||||
$next_attempt = ($invalid[1] > 29 ? $invalid[0] - time() : 0); // allow 30 invalid attempts
|
||||
if ($next_attempt > 0) { //! do the same with permanent login
|
||||
auth_error(lang('Too many unsuccessful logins, try again in %d minute(s).', ceil($next_attempt / 60)));
|
||||
@@ -72,14 +72,14 @@ if ($auth) {
|
||||
) {
|
||||
redirect(auth_url($vendor, $server, $username, $db));
|
||||
}
|
||||
|
||||
|
||||
} elseif ($_POST["logout"] && (!$has_token || verify_token())) {
|
||||
foreach (array("pwds", "db", "dbs", "queries") as $key) {
|
||||
set_session($key, null);
|
||||
}
|
||||
unset_permanent();
|
||||
redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.') . ' ' . lang('Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.'));
|
||||
|
||||
|
||||
} elseif ($permanent && !$_SESSION["pwds"]) {
|
||||
session_regenerate_id();
|
||||
$private = $adminer->permanentLogin();
|
||||
@@ -119,7 +119,7 @@ function auth_error($error) {
|
||||
$password = get_password();
|
||||
if ($password !== null) {
|
||||
if ($password === false) {
|
||||
$error .= '<br>' . lang('Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.', target_blank(), '<code>permanentLogin()</code>');
|
||||
$error .= ($error ? '<br>' : '') . lang('Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.', target_blank(), '<code>permanentLogin()</code>');
|
||||
}
|
||||
set_password(DRIVER, SERVER, $_GET["username"], null);
|
||||
}
|
||||
@@ -166,7 +166,7 @@ if (isset($_GET["username"]) && is_string(get_password())) {
|
||||
|
||||
$login = null;
|
||||
if (!is_object($connection) || ($login = $adminer->login($_GET["username"], get_password())) !== true) {
|
||||
$error = (is_string($connection) ? h($connection) : (is_string($login) ? $login : lang('Invalid credentials.')));
|
||||
$error = (is_string($connection) ? nl_br(h($connection)) : (is_string($login) ? $login : lang('Invalid credentials.')));
|
||||
auth_error($error . (preg_match('~^ | $~', get_password()) ? '<br>' . lang('There is a space in the input password which might be the cause.') : ''));
|
||||
}
|
||||
|
||||
@@ -199,7 +199,7 @@ if ($_POST) {
|
||||
: lang('Invalid CSRF token. Send the form again.') . ' ' . lang('If you did not send this request from Adminer then close this page.')
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
} elseif ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
// posted form with no data means that post_max_size exceeded because Adminer always sends token at least
|
||||
$error = lang('Too big POST data. Reduce the data or increase the %s configuration directive.', "'post_max_size'");
|
||||
|
@@ -1,11 +1,6 @@
|
||||
<?php
|
||||
function adminer_errors($errno, $errstr) {
|
||||
return !!preg_match('~^(Trying to access array offset on value of type null|Undefined array key)~', $errstr);
|
||||
}
|
||||
|
||||
error_reporting(6135); // errors and warnings
|
||||
set_error_handler('adminer_errors', 2); // 2 - E_WARNING
|
||||
|
||||
include "../adminer/include/version.inc.php";
|
||||
include "../adminer/include/errors.inc.php";
|
||||
include "../adminer/include/coverage.inc.php";
|
||||
|
||||
// disable filter.default
|
||||
@@ -80,13 +75,25 @@ include "../adminer/drivers/sqlite.inc.php";
|
||||
include "../adminer/drivers/pgsql.inc.php";
|
||||
include "../adminer/drivers/oracle.inc.php";
|
||||
include "../adminer/drivers/mssql.inc.php";
|
||||
include "../adminer/drivers/firebird.inc.php";
|
||||
include "../adminer/drivers/simpledb.inc.php";
|
||||
include "../adminer/drivers/mongo.inc.php";
|
||||
include "../adminer/drivers/elastic.inc.php";
|
||||
include "../adminer/drivers/clickhouse.inc.php";
|
||||
include "./include/adminer.inc.php";
|
||||
$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer);
|
||||
include "../adminer/drivers/mysql.inc.php"; // must be included as last driver
|
||||
|
||||
$config = driver_config();
|
||||
$possible_drivers = $config['possible_drivers'];
|
||||
$jush = $config['jush'];
|
||||
$types = $config['types'];
|
||||
$structured_types = $config['structured_types'];
|
||||
$unsigned = $config['unsigned'];
|
||||
$operators = $config['operators'];
|
||||
$functions = $config['functions'];
|
||||
$grouping = $config['grouping'];
|
||||
$edit_functions = $config['edit_functions'];
|
||||
if ($adminer->operators === null) {
|
||||
$adminer->operators = $operators;
|
||||
}
|
||||
|
||||
define("SERVER", $_GET[DRIVER]); // read from pgsql=localhost
|
||||
define("DB", $_GET["db"]); // for the sake of speed and size
|
||||
define("ME", preg_replace('~\?.*~', '', relative_uri()) . '?'
|
||||
@@ -96,8 +103,6 @@ define("ME", preg_replace('~\?.*~', '', relative_uri()) . '?'
|
||||
. (DB != "" ? 'db=' . urlencode(DB) . '&' . (isset($_GET["ns"]) ? "ns=" . urlencode($_GET["ns"]) . "&" : "") : '')
|
||||
);
|
||||
|
||||
include "../adminer/include/version.inc.php";
|
||||
include "./include/adminer.inc.php";
|
||||
include "../adminer/include/design.inc.php";
|
||||
include "../adminer/include/xxtea.inc.php";
|
||||
include "../adminer/include/auth.inc.php";
|
||||
|
@@ -8,7 +8,7 @@ function connect_error() {
|
||||
if ($_POST["db"] && !$error) {
|
||||
queries_redirect(substr(ME, 0, -1), lang('Databases have been dropped.'), drop_databases($_POST["db"]));
|
||||
}
|
||||
|
||||
|
||||
page_header(lang('Select database'), $error, false);
|
||||
echo "<p class='links'>\n";
|
||||
foreach (array(
|
||||
@@ -29,7 +29,7 @@ function connect_error() {
|
||||
$scheme = support("scheme");
|
||||
$collations = collations();
|
||||
echo "<form action='' method='post'>\n";
|
||||
echo "<table cellspacing='0' class='checkable'>\n";
|
||||
echo "<table class='checkable odds'>\n";
|
||||
echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
|
||||
echo "<thead><tr>"
|
||||
. (support("database") ? "<td>" : "")
|
||||
@@ -39,13 +39,13 @@ function connect_error() {
|
||||
. "<td>" . lang('Size') . " - <a href='" . h(ME) . "dbsize=1'>" . lang('Compute') . "</a>" . script("qsl('a').onclick = partial(ajaxSetHtml, '" . js_escape(ME) . "script=connect');", "")
|
||||
. "</thead>\n"
|
||||
;
|
||||
|
||||
|
||||
$databases = ($_GET["dbsize"] ? count_tables($databases) : array_flip($databases));
|
||||
|
||||
|
||||
foreach ($databases as $db => $tables) {
|
||||
$root = h(ME) . "db=" . urlencode($db);
|
||||
$id = h("Db-" . $db);
|
||||
echo "<tr" . odd() . ">" . (support("database") ? "<td>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"]), "", "", "", $id) : "");
|
||||
echo "<tr>" . (support("database") ? "<td>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"]), "", "", "", $id) : "");
|
||||
echo "<th><a href='$root' id='$id'>" . h($db) . "</a>";
|
||||
$collation = h(db_collation($db, $collations));
|
||||
echo "<td>" . (support("database") ? "<a href='$root" . ($scheme ? "&ns=" : "") . "&database=' title='" . lang('Alter database') . "'>$collation</a>" : $collation);
|
||||
@@ -53,7 +53,7 @@ function connect_error() {
|
||||
echo "<td align='right' id='size-" . h($db) . "'>" . ($_GET["dbsize"] ? db_size($db) : "?");
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
|
||||
echo "</table>\n";
|
||||
echo (support("database")
|
||||
? "<div class='footer'><div>\n"
|
||||
@@ -69,7 +69,7 @@ function connect_error() {
|
||||
echo script("tableCheck();");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
page_footer("db");
|
||||
}
|
||||
|
||||
@@ -89,14 +89,16 @@ if (!(DB != "" ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET
|
||||
exit;
|
||||
}
|
||||
|
||||
if (support("scheme") && DB != "" && $_GET["ns"] !== "") {
|
||||
if (!isset($_GET["ns"])) {
|
||||
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
||||
}
|
||||
if (!set_schema($_GET["ns"])) {
|
||||
header("HTTP/1.1 404 Not Found");
|
||||
page_header(lang('Schema') . ": " . h($_GET["ns"]), lang('Invalid schema.'), true);
|
||||
page_footer("ns");
|
||||
exit;
|
||||
if (support("scheme")) {
|
||||
if (DB != "" && $_GET["ns"] !== "") {
|
||||
if (!isset($_GET["ns"])) {
|
||||
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
||||
}
|
||||
if (!set_schema($_GET["ns"])) {
|
||||
header("HTTP/1.1 404 Not Found");
|
||||
page_header(lang('Schema') . ": " . h($_GET["ns"]), lang('Invalid schema.'), true);
|
||||
page_footer("ns");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -20,6 +20,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
||||
<html lang="<?php echo $LANG; ?>" dir="<?php echo lang('ltr'); ?>">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta name="robots" content="noindex">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title><?php echo $title_page; ?></title>
|
||||
<link rel="stylesheet" type="text/css" href="../adminer/static/default.css">
|
||||
<?php echo script_src("../adminer/static/functions.js"); ?>
|
||||
@@ -68,25 +69,25 @@ var thousandsSeparator = '<?php echo js_escape(lang(',')); ?>';
|
||||
<?php
|
||||
if ($breadcrumb !== null) {
|
||||
$link = substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||
echo '<p id="breadcrumb"><a href="' . h($link ? $link : ".") . '">' . $drivers[DRIVER] . '</a> » ';
|
||||
echo '<p id="breadcrumb"><a href="' . h($link ? $link : ".") . '">' . $drivers[DRIVER] . '</a> » ';
|
||||
$link = substr(preg_replace('~\b(db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||
$server = $adminer->serverName(SERVER);
|
||||
$server = ($server != "" ? $server : lang('Server'));
|
||||
if ($breadcrumb === false) {
|
||||
echo "$server\n";
|
||||
} else {
|
||||
echo "<a href='" . h($link) . "' accesskey='1' title='Alt+Shift+1'>$server</a> » ";
|
||||
echo "<a href='" . h($link) . "' accesskey='1' title='Alt+Shift+1'>$server</a> » ";
|
||||
if ($_GET["ns"] != "" || (DB != "" && is_array($breadcrumb))) {
|
||||
echo '<a href="' . h($link . "&db=" . urlencode(DB) . (support("scheme") ? "&ns=" : "")) . '">' . h(DB) . '</a> » ';
|
||||
echo '<a href="' . h($link . "&db=" . urlencode(DB) . (support("scheme") ? "&ns=" : "")) . '">' . h(DB) . '</a> » ';
|
||||
}
|
||||
if (is_array($breadcrumb)) {
|
||||
if ($_GET["ns"] != "") {
|
||||
echo '<a href="' . h(substr(ME, 0, -1)) . '">' . h($_GET["ns"]) . '</a> » ';
|
||||
echo '<a href="' . h(substr(ME, 0, -1)) . '">' . h($_GET["ns"]) . '</a> » ';
|
||||
}
|
||||
foreach ($breadcrumb as $key => $val) {
|
||||
$desc = (is_array($val) ? $val[1] : h($val));
|
||||
if ($desc != "") {
|
||||
echo "<a href='" . h(ME . "$key=") . urlencode(is_array($val) ? $val[0] : $val) . "'>$desc</a> » ";
|
||||
echo "<a href='" . h(ME . "$key=") . urlencode(is_array($val) ? $val[0] : $val) . "'>$desc</a> » ";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -178,18 +179,19 @@ function page_footer($missing = "") {
|
||||
?>
|
||||
</div>
|
||||
|
||||
<?php switch_lang(); ?>
|
||||
<div id="menu">
|
||||
<?php $adminer->navigation($missing); ?>
|
||||
</div>
|
||||
|
||||
<?php if ($missing != "auth") { ?>
|
||||
<form action="" method="post">
|
||||
<p class="logout">
|
||||
<?php echo h($_GET["username"]) . "\n"; ?>
|
||||
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>" id="logout">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</p>
|
||||
</form>
|
||||
<?php } ?>
|
||||
<div id="menu">
|
||||
<?php $adminer->navigation($missing); ?>
|
||||
</div>
|
||||
<?php
|
||||
echo script("setupSubmitHighlight(document);");
|
||||
}
|
||||
|
@@ -1,15 +1,35 @@
|
||||
<?php
|
||||
$drivers = array();
|
||||
|
||||
/** Add a driver
|
||||
* @param string
|
||||
* @param string
|
||||
* @return null
|
||||
*/
|
||||
function add_driver($id, $name) {
|
||||
global $drivers;
|
||||
$drivers[$id] = $name;
|
||||
}
|
||||
|
||||
/** Get driver name
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function get_driver($id) {
|
||||
global $drivers;
|
||||
return $drivers[$id];
|
||||
}
|
||||
|
||||
/*abstract*/ class Min_SQL {
|
||||
var $_conn;
|
||||
|
||||
|
||||
/** Create object for performing database operations
|
||||
* @param Min_DB
|
||||
*/
|
||||
function __construct($connection) {
|
||||
$this->_conn = $connection;
|
||||
}
|
||||
|
||||
|
||||
/** Select data from table
|
||||
* @param string
|
||||
* @param array result of $adminer->selectColumnsProcess()[0]
|
||||
@@ -41,7 +61,7 @@
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
/** Delete data from table
|
||||
* @param string
|
||||
* @param string " WHERE ..."
|
||||
@@ -52,7 +72,7 @@
|
||||
$query = "FROM " . table($table);
|
||||
return queries("DELETE" . ($limit ? limit1($table, $query, $queryWhere) : " $query$queryWhere"));
|
||||
}
|
||||
|
||||
|
||||
/** Update data in table
|
||||
* @param string
|
||||
* @param array escaped columns in keys, quoted data in values
|
||||
@@ -69,7 +89,7 @@
|
||||
$query = table($table) . " SET$separator" . implode(",$separator", $values);
|
||||
return queries("UPDATE" . ($limit ? limit1($table, $query, $queryWhere, $separator) : " $query$queryWhere"));
|
||||
}
|
||||
|
||||
|
||||
/** Insert data into table
|
||||
* @param string
|
||||
* @param array escaped columns in keys, quoted data in values
|
||||
@@ -81,7 +101,7 @@
|
||||
: " DEFAULT VALUES"
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
/** Insert or update data in table
|
||||
* @param string
|
||||
* @param array
|
||||
@@ -91,28 +111,28 @@
|
||||
/*abstract*/ function insertUpdate($table, $rows, $primary) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/** Begin transaction
|
||||
* @return bool
|
||||
*/
|
||||
function begin() {
|
||||
return queries("BEGIN");
|
||||
}
|
||||
|
||||
|
||||
/** Commit transaction
|
||||
* @return bool
|
||||
*/
|
||||
function commit() {
|
||||
return queries("COMMIT");
|
||||
}
|
||||
|
||||
|
||||
/** Rollback transaction
|
||||
* @return bool
|
||||
*/
|
||||
function rollback() {
|
||||
return queries("ROLLBACK");
|
||||
}
|
||||
|
||||
|
||||
/** Return query with a timeout
|
||||
* @param string
|
||||
* @param int seconds
|
||||
@@ -120,10 +140,10 @@
|
||||
*/
|
||||
function slowQuery($query, $timeout) {
|
||||
}
|
||||
|
||||
|
||||
/** Convert column to be searchable
|
||||
* @param string escaped column name
|
||||
* @param array array("op" => , "val" => )
|
||||
* @param array ["op" => , "val" => ]
|
||||
* @param array
|
||||
* @return string
|
||||
*/
|
||||
@@ -131,6 +151,14 @@
|
||||
return $idf;
|
||||
}
|
||||
|
||||
/** Convert operator so it can be used in search
|
||||
* @param string $operator
|
||||
* @return string
|
||||
*/
|
||||
function convertOperator($operator) {
|
||||
return $operator;
|
||||
}
|
||||
|
||||
/** Convert value returned by database to actual value
|
||||
* @param string
|
||||
* @param array
|
||||
@@ -150,19 +178,19 @@
|
||||
function quoteBinary($s) {
|
||||
return q($s);
|
||||
}
|
||||
|
||||
|
||||
/** Get warnings about the last command
|
||||
* @return string HTML
|
||||
*/
|
||||
function warnings() {
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
/** Get help link for table
|
||||
* @param string
|
||||
* @return string relative URL or null
|
||||
*/
|
||||
function tableHelp($name) {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
// This file is not used in Adminer Editor.
|
||||
|
||||
/** Print select result
|
||||
* @param Min_Result
|
||||
* @param Min_DB connection to examine indexes
|
||||
@@ -14,11 +16,10 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
|
||||
$blobs = array(); // colno => bool - display bytes for blobs
|
||||
$types = array(); // colno => type - display char in <code>
|
||||
$return = array(); // table => orgtable - mapping to use in EXPLAIN
|
||||
odd(''); // reset odd for each result
|
||||
for ($i=0; (!$limit || $i < $limit) && ($row = $result->fetch_row()); $i++) {
|
||||
if (!$i) {
|
||||
echo "<div class='scrollable'>\n";
|
||||
echo "<table cellspacing='0' class='nowrap'>\n";
|
||||
echo "<table class='nowrap odds'>\n";
|
||||
echo "<thead><tr>";
|
||||
for ($j=0; $j < count($row); $j++) {
|
||||
$field = $result->fetch_field();
|
||||
@@ -59,7 +60,7 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
|
||||
}
|
||||
echo "</thead>\n";
|
||||
}
|
||||
echo "<tr" . odd() . ">";
|
||||
echo "<tr>";
|
||||
foreach ($row as $key => $val) {
|
||||
$link = "";
|
||||
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
||||
@@ -97,7 +98,7 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
|
||||
|
||||
/** Get referencable tables with single column primary key except self
|
||||
* @param string
|
||||
* @return array ($table_name => $field)
|
||||
* @return array [$table_name => $field]
|
||||
*/
|
||||
function referencable_primary($self) {
|
||||
$return = array(); // table_name => field
|
||||
@@ -151,7 +152,7 @@ function set_adminer_settings($settings) {
|
||||
*/
|
||||
function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||
global $jush;
|
||||
echo "<textarea name='$name' rows='$rows' cols='$cols' class='sqlarea jush-$jush' spellcheck='false' wrap='off'>";
|
||||
echo "<textarea name='" . h($name) . "' rows='$rows' cols='$cols' class='sqlarea jush-$jush' spellcheck='false' wrap='off'>";
|
||||
if (is_array($value)) {
|
||||
foreach ($value as $val) { // not implode() to save memory
|
||||
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time, $elapsed)
|
||||
@@ -162,6 +163,41 @@ function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||
echo "</textarea>";
|
||||
}
|
||||
|
||||
/** Generate HTML <select> or <input> if $options are empty
|
||||
* @param string
|
||||
* @param array
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function select_input($attrs, $options, $value = "", $onchange = "", $placeholder = "") {
|
||||
$tag = ($options ? "select" : "input");
|
||||
return "<$tag$attrs" . ($options
|
||||
? "><option value=''>$placeholder" . optionlist($options, $value, true) . "</select>"
|
||||
: " size='10' value='" . h($value) . "' placeholder='$placeholder'>"
|
||||
) . ($onchange ? script("qsl('$tag').onchange = $onchange;", "") : ""); //! use oninput for input
|
||||
}
|
||||
|
||||
/** Print one row in JSON object
|
||||
* @param string or "" to close the object
|
||||
* @param string
|
||||
* @return null
|
||||
*/
|
||||
function json_row($key, $val = null) {
|
||||
static $first = true;
|
||||
if ($first) {
|
||||
echo "{";
|
||||
}
|
||||
if ($key != "") {
|
||||
echo ($first ? "" : ",") . "\n\t\"" . addcslashes($key, "\r\n\t\"\\/") . '": ' . ($val !== null ? '"' . addcslashes($val, "\r\n\"\\/") . '"' : 'null');
|
||||
$first = false;
|
||||
} else {
|
||||
echo "\n}\n";
|
||||
$first = true;
|
||||
}
|
||||
}
|
||||
|
||||
/** Print table columns for type edit
|
||||
* @param string
|
||||
* @param array
|
||||
@@ -173,22 +209,45 @@ function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||
function edit_type($key, $field, $collations, $foreign_keys = array(), $extra_types = array()) {
|
||||
global $structured_types, $types, $unsigned, $on_actions;
|
||||
$type = $field["type"];
|
||||
?>
|
||||
<td><select name="<?php echo h($key); ?>[type]" class="type" aria-labelledby="label-type"><?php
|
||||
if ($type && !isset($types[$type]) && !isset($foreign_keys[$type]) && !in_array($type, $extra_types)) {
|
||||
$extra_types[] = $type;
|
||||
}
|
||||
if ($foreign_keys) {
|
||||
$structured_types[lang('Foreign keys')] = $foreign_keys;
|
||||
}
|
||||
echo optionlist(array_merge($extra_types, $structured_types), $type);
|
||||
?></select><td><input name="<?php echo h($key); ?>[length]" value="<?php echo h($field["length"]); ?>" size="3"<?php echo (!$field["length"] && preg_match('~var(char|binary)$~', $type) ? " class='required'" : ""); //! type="number" with enabled JavaScript ?> aria-labelledby="label-length"><td class="options"><?php
|
||||
echo "<select name='" . h($key) . "[collation]'" . (preg_match('~(char|text|enum|set)$~', $type) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>';
|
||||
?><td><select name="<?php echo h($key); ?>[type]" class="type" aria-labelledby="label-type"><?php
|
||||
if ($type && !isset($types[$type]) && !isset($foreign_keys[$type]) && !in_array($type, $extra_types)) {
|
||||
$extra_types[] = $type;
|
||||
}
|
||||
if ($foreign_keys) {
|
||||
$structured_types[lang('Foreign keys')] = $foreign_keys;
|
||||
}
|
||||
echo optionlist(array_merge($extra_types, $structured_types), $type);
|
||||
?></select><td><input
|
||||
name="<?php echo h($key); ?>[length]"
|
||||
value="<?php echo h($field["length"]); ?>"
|
||||
size="3"
|
||||
<?php echo (!$field["length"] && preg_match('~var(char|binary)$~', $type) ? " class='required'" : ""); //! type="number" with enabled JavaScript ?>
|
||||
aria-labelledby="label-length"><td class="options"><?php
|
||||
echo ($collations ? "<select name='" . h($key) . "[collation]'" . (preg_match('~(char|text|enum|set)$~', $type) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>' : '');
|
||||
echo ($unsigned ? "<select name='" . h($key) . "[unsigned]'" . (!$type || preg_match(number_type(), $type) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : '');
|
||||
echo (isset($field['on_update']) ? "<select name='" . h($key) . "[on_update]'" . (preg_match('~timestamp|datetime~', $type) ? "" : " class='hidden'") . '>' . optionlist(array("" => "(" . lang('ON UPDATE') . ")", "CURRENT_TIMESTAMP"), (preg_match('~^CURRENT_TIMESTAMP~i', $field["on_update"]) ? "CURRENT_TIMESTAMP" : $field["on_update"])) . '</select>' : '');
|
||||
echo (isset($field['on_update']) ? "<select name='" . h($key) . "[on_update]'" . (preg_match('~timestamp|datetime~', $type) ? "" : " class='hidden'") . '>'
|
||||
. optionlist(array("" => "(" . lang('ON UPDATE') . ")", "CURRENT_TIMESTAMP"), (preg_match('~^CURRENT_TIMESTAMP~i', $field["on_update"]) ? "CURRENT_TIMESTAMP" : $field["on_update"]))
|
||||
. '</select>' : ''
|
||||
);
|
||||
echo ($foreign_keys ? "<select name='" . h($key) . "[on_delete]'" . (preg_match("~`~", $type) ? "" : " class='hidden'") . "><option value=''>(" . lang('ON DELETE') . ")" . optionlist(explode("|", $on_actions), $field["on_delete"]) . "</select> " : " "); // space for IE
|
||||
}
|
||||
|
||||
/** Get partition info
|
||||
* @param string
|
||||
* @return array
|
||||
*/
|
||||
function get_partitions_info($table) {
|
||||
global $connection;
|
||||
$from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . q(DB) . " AND TABLE_NAME = " . q($table);
|
||||
$result = $connection->query("SELECT PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_ORDINAL_POSITION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");
|
||||
$return = array();
|
||||
list($return["partition_by"], $return["partition"], $return["partitions"]) = $result->fetch_row();
|
||||
$partitions = get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");
|
||||
$return["partition_names"] = array_keys($partitions);
|
||||
$return["partition_values"] = array_values($partitions);
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Filter length value including enums
|
||||
* @param string
|
||||
* @return string
|
||||
@@ -218,9 +277,13 @@ function process_type($field, $collate = "COLLATE") {
|
||||
/** Create SQL string from field
|
||||
* @param array basic field information
|
||||
* @param array information about field type
|
||||
* @return array array("field", "type", "NULL", "DEFAULT", "ON UPDATE", "COMMENT", "AUTO_INCREMENT")
|
||||
* @return array ["field", "type", "NULL", "DEFAULT", "ON UPDATE", "COMMENT", "AUTO_INCREMENT"]
|
||||
*/
|
||||
function process_field($field, $type_field) {
|
||||
// MariaDB exports CURRENT_TIMESTAMP as a function.
|
||||
if ($field["on_update"]) {
|
||||
$field["on_update"] = str_ireplace("current_timestamp()", "CURRENT_TIMESTAMP", $field["on_update"]);
|
||||
}
|
||||
return array(
|
||||
idf_escape(trim($field["field"])),
|
||||
process_type($type_field),
|
||||
@@ -237,8 +300,12 @@ function process_field($field, $type_field) {
|
||||
* @return string
|
||||
*/
|
||||
function default_value($field) {
|
||||
global $jush;
|
||||
$default = $field["default"];
|
||||
return ($default === null ? "" : " DEFAULT " . (preg_match('~char|binary|text|enum|set~', $field["type"]) || preg_match('~^(?![a-z])~i', $default) ? q($default) : $default));
|
||||
return ($default === null ? "" : " DEFAULT " .
|
||||
(!preg_match('~^GENERATED ~i', $default) && (preg_match('~char|binary|text|enum|set~', $field["type"]) || preg_match('~^(?![a-z])~i', $default))
|
||||
? q($default) : str_ireplace("current_timestamp()", "CURRENT_TIMESTAMP", ($jush == "sqlite" ? "($default)" : $default)))
|
||||
);
|
||||
}
|
||||
|
||||
/** Get type class to use in CSS
|
||||
@@ -279,11 +346,11 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
|
||||
<td><?php echo lang('Options'); /* no label required, options have their own label */ ?>
|
||||
<?php if ($type == "TABLE") { ?>
|
||||
<td id="label-null">NULL
|
||||
<td><input type="radio" name="auto_increment_col" value=""><acronym id="label-ai" title="<?php echo lang('Auto Increment'); ?>">AI</acronym><?php echo doc_link(array(
|
||||
<td><input type="radio" name="auto_increment_col" value=""><abbr id="label-ai" title="<?php echo lang('Auto Increment'); ?>">AI</abbr><?php echo doc_link(array(
|
||||
'sql' => "example-auto-increment.html",
|
||||
'mariadb' => "auto_increment/",
|
||||
'sqlite' => "autoinc.html",
|
||||
'pgsql' => "datatype.html#DATATYPE-SERIAL",
|
||||
'pgsql' => "datatype-numeric.html#DATATYPE-SERIAL",
|
||||
'mssql' => "ms186775.aspx",
|
||||
)); ?>
|
||||
<td id="label-default"<?php echo $default_class; ?>><?php echo lang('Default value'); ?>
|
||||
@@ -430,7 +497,7 @@ function drop_create($drop, $create, $drop_created, $test, $drop_test, $location
|
||||
*/
|
||||
function create_trigger($on, $row) {
|
||||
global $jush;
|
||||
$timing_event = " $row[Timing] $row[Event]" . ($row["Event"] == "UPDATE OF" ? " " . idf_escape($row["Of"]) : "");
|
||||
$timing_event = " $row[Timing] $row[Event]" . (preg_match('~ OF~', $row["Event"]) ? " $row[Of]" : ""); // SQL injection
|
||||
return "CREATE TRIGGER "
|
||||
. idf_escape($row["Trigger"])
|
||||
. ($jush == "mssql" ? $on . $timing_event : $timing_event . $on)
|
||||
@@ -454,16 +521,30 @@ function create_routine($routine, $row) {
|
||||
$set[] = (preg_match("~^($inout)\$~", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
|
||||
}
|
||||
}
|
||||
$definition = rtrim("\n$row[definition]", ";");
|
||||
$definition = rtrim($row["definition"], ";");
|
||||
return "CREATE $routine "
|
||||
. idf_escape(trim($row["name"]))
|
||||
. " (" . implode(", ", $set) . ")"
|
||||
. (isset($_GET["function"]) ? " RETURNS" . process_type($row["returns"], "CHARACTER SET") : "")
|
||||
. ($routine == "FUNCTION" ? " RETURNS" . process_type($row["returns"], "CHARACTER SET") : "")
|
||||
. ($row["language"] ? " LANGUAGE $row[language]" : "")
|
||||
. ($jush == "pgsql" ? " AS " . q($definition) : "$definition;")
|
||||
. ($jush == "pgsql" ? " AS " . q($definition) : "\n$definition;")
|
||||
;
|
||||
}
|
||||
|
||||
/** Get defined check constraints
|
||||
* @param string
|
||||
* @return array [$name => $clause]
|
||||
*/
|
||||
function check_constraints($table) {
|
||||
// MariaDB contains CHECK_CONSTRAINTS.TABLE_NAME, MySQL and PostrgreSQL not
|
||||
return get_key_vals("SELECT c.CONSTRAINT_NAME, CHECK_CLAUSE
|
||||
FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS c
|
||||
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t ON c.CONSTRAINT_SCHEMA = t.CONSTRAINT_SCHEMA AND c.CONSTRAINT_NAME = t.CONSTRAINT_NAME
|
||||
WHERE c.CONSTRAINT_SCHEMA = " . q($_GET["ns"] != "" ? $_GET["ns"] : DB) . "
|
||||
AND t.TABLE_NAME = " . q($table) . "
|
||||
AND CHECK_CLAUSE NOT LIKE '% IS NOT NULL'"); // ignore default IS NOT NULL checks in PostrgreSQL
|
||||
}
|
||||
|
||||
/** Remove current user definer from SQL command
|
||||
* @param string
|
||||
* @return string
|
||||
@@ -473,7 +554,7 @@ function remove_definer($query) {
|
||||
}
|
||||
|
||||
/** Format foreign key to use in SQL query
|
||||
* @param array ("db" => string, "ns" => string, "table" => string, "source" => array, "target" => array, "on_delete" => one of $on_actions, "on_update" => one of $on_actions)
|
||||
* @param array ["db" => string, "ns" => string, "table" => string, "source" => array, "target" => array, "on_delete" => one of $on_actions, "on_update" => one of $on_actions]
|
||||
* @return string
|
||||
*/
|
||||
function format_foreign_key($foreign_key) {
|
||||
@@ -515,9 +596,9 @@ function tar_file($filename, $tmp_file) {
|
||||
function ini_bytes($ini) {
|
||||
$val = ini_get($ini);
|
||||
switch (strtolower(substr($val, -1))) {
|
||||
case 'g': $val *= 1024; // no break
|
||||
case 'm': $val *= 1024; // no break
|
||||
case 'k': $val *= 1024;
|
||||
case 'g': $val = (int)$val * 1024; // no break
|
||||
case 'm': $val = (int)$val * 1024; // no break
|
||||
case 'k': $val = (int)$val * 1024;
|
||||
}
|
||||
return $val;
|
||||
}
|
||||
@@ -539,10 +620,10 @@ function doc_link($paths, $text = "<sup>?</sup>") {
|
||||
'oracle' => "https://www.oracle.com/pls/topic/lookup?ctx=db" . preg_replace('~^.* (\d+)\.(\d+)\.\d+\.\d+\.\d+.*~s', '\1\2', $server_info) . "&id=",
|
||||
);
|
||||
if (preg_match('~MariaDB~', $server_info)) {
|
||||
$urls['sql'] = "https://mariadb.com/kb/en/library/";
|
||||
$urls['sql'] = "https://mariadb.com/kb/en/";
|
||||
$paths['sql'] = (isset($paths['mariadb']) ? $paths['mariadb'] : str_replace(".html", "/", $paths['sql']));
|
||||
}
|
||||
return ($paths[$jush] ? "<a href='$urls[$jush]$paths[$jush]'" . target_blank() . ">$text</a>" : "");
|
||||
return ($paths[$jush] ? "<a href='" . h($urls[$jush] . $paths[$jush]) . "'" . target_blank() . ">$text</a>" : "");
|
||||
}
|
||||
|
||||
/** Wrap gzencode() for usage in ob_start()
|
||||
@@ -550,7 +631,7 @@ function doc_link($paths, $text = "<sup>?</sup>") {
|
||||
* @return string
|
||||
*/
|
||||
function ob_gzencode($string) {
|
||||
// ob_start() callback recieves an optional parameter $phase but gzencode() accepts optional parameter $level
|
||||
// ob_start() callback receives an optional parameter $phase but gzencode() accepts optional parameter $level
|
||||
return gzencode($string);
|
||||
}
|
||||
|
||||
|
7
adminer/include/errors.inc.php
Normal file
7
adminer/include/errors.inc.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
function adminer_errors($errno, $errstr) {
|
||||
return !!preg_match('~^(Trying to access array offset on( value of type)? null|Undefined (array key|property))~', $errstr);
|
||||
}
|
||||
|
||||
error_reporting(6135); // errors and warnings
|
||||
set_error_handler('adminer_errors', E_WARNING);
|
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
// This file is used both in Adminer and Adminer Editor.
|
||||
|
||||
/** Get database connection
|
||||
* @return Min_DB
|
||||
*/
|
||||
@@ -29,6 +31,9 @@ function version() {
|
||||
* @return string
|
||||
*/
|
||||
function idf_unescape($idf) {
|
||||
if (!preg_match('~^[`\'"[]~', $idf)) {
|
||||
return $idf;
|
||||
}
|
||||
$last = substr($idf, -1);
|
||||
return str_replace($last . $last, $last, substr($idf, 1, -1));
|
||||
}
|
||||
@@ -104,7 +109,7 @@ function min_version($version, $maria_db = "", $connection2 = null) {
|
||||
$server_info = $match[1];
|
||||
$version = $maria_db;
|
||||
}
|
||||
return (version_compare($server_info, $version) >= 0);
|
||||
return $version && version_compare($server_info, $version) >= 0;
|
||||
}
|
||||
|
||||
/** Get connection charset
|
||||
@@ -197,7 +202,11 @@ function optionlist($options, $selected = null, $use_keys = false) {
|
||||
$opts = $v;
|
||||
}
|
||||
foreach ($opts as $key => $val) {
|
||||
$return .= '<option' . ($use_keys || is_string($key) ? ' value="' . h($key) . '"' : '') . (($use_keys || is_string($key) ? (string) $key : $val) === $selected ? ' selected' : '') . '>' . h($val);
|
||||
$return .= '<option'
|
||||
. ($use_keys || is_string($key) ? ' value="' . h($key) . '"' : '')
|
||||
. ($selected !== null && ($use_keys || is_string($key) ? (string) $key : $val) === $selected ? ' selected' : '')
|
||||
. '>' . h($val)
|
||||
;
|
||||
}
|
||||
if (is_array($v)) {
|
||||
$return .= '</optgroup>';
|
||||
@@ -229,22 +238,6 @@ function html_select($name, $options, $value = "", $onchange = true, $labelled_b
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Generate HTML <select> or <input> if $options are empty
|
||||
* @param string
|
||||
* @param array
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function select_input($attrs, $options, $value = "", $onchange = "", $placeholder = "") {
|
||||
$tag = ($options ? "select" : "input");
|
||||
return "<$tag$attrs" . ($options
|
||||
? "><option value=''>$placeholder" . optionlist($options, $value, true) . "</select>"
|
||||
: " size='10' value='" . h($value) . "' placeholder='$placeholder'>"
|
||||
) . ($onchange ? script("qsl('$tag').onchange = $onchange;", "") : ""); //! use oninput for input
|
||||
}
|
||||
|
||||
/** Get onclick confirmation
|
||||
* @param string
|
||||
* @param string
|
||||
@@ -277,18 +270,6 @@ function bold($bold, $class = "") {
|
||||
return ($bold ? " class='active $class'" : ($class ? " class='$class'" : ""));
|
||||
}
|
||||
|
||||
/** Generate class for odd rows
|
||||
* @param string return this for odd rows, empty to reset counter
|
||||
* @return string
|
||||
*/
|
||||
function odd($return = ' class="odd"') {
|
||||
static $i = 0;
|
||||
if (!$return) { // reset counter
|
||||
$i = -1;
|
||||
}
|
||||
return ($i++ % 2 ? $return : '');
|
||||
}
|
||||
|
||||
/** Escape string for JavaScript apostrophes
|
||||
* @param string
|
||||
* @return string
|
||||
@@ -297,25 +278,6 @@ function js_escape($string) {
|
||||
return addcslashes($string, "\r\n'\\/"); // slash for <script>
|
||||
}
|
||||
|
||||
/** Print one row in JSON object
|
||||
* @param string or "" to close the object
|
||||
* @param string
|
||||
* @return null
|
||||
*/
|
||||
function json_row($key, $val = null) {
|
||||
static $first = true;
|
||||
if ($first) {
|
||||
echo "{";
|
||||
}
|
||||
if ($key != "") {
|
||||
echo ($first ? "" : ",") . "\n\t\"" . addcslashes($key, "\r\n\t\"\\/") . '": ' . ($val !== null ? '"' . addcslashes($val, "\r\n\"\\/") . '"' : 'null');
|
||||
$first = false;
|
||||
} else {
|
||||
echo "\n}\n";
|
||||
$first = true;
|
||||
}
|
||||
}
|
||||
|
||||
/** Get INI boolean value
|
||||
* @param string
|
||||
* @return bool
|
||||
@@ -325,7 +287,7 @@ function ini_bool($ini) {
|
||||
return (preg_match('~^(on|true|yes)$~i', $val) || (int) $val); // boolean values set by php_value are strings
|
||||
}
|
||||
|
||||
/** Check if SID is neccessary
|
||||
/** Check if SID is necessary
|
||||
* @return bool
|
||||
*/
|
||||
function sid() {
|
||||
@@ -430,7 +392,7 @@ function get_rows($query, $connection2 = null, $error = "<p class='error'>") {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$return[] = $row;
|
||||
}
|
||||
} elseif (!$result && !is_object($connection2) && $error && defined("PAGE_HEADER")) {
|
||||
} elseif (!$result && !is_object($connection2) && $error && (defined("PAGE_HEADER") || $error == "-- ")) {
|
||||
echo $error . error() . "\n";
|
||||
}
|
||||
return $return;
|
||||
@@ -479,10 +441,11 @@ function where($where, $fields = array()) {
|
||||
$key = bracket_escape($key, 1); // 1 - back
|
||||
$column = escape_key($key);
|
||||
$return[] = $column
|
||||
. ($jush == "sql" && is_numeric($val) && preg_match('~\.~', $val) ? " LIKE " . q($val) // LIKE because of floats but slow with ints
|
||||
. ($jush == "sql" && $fields[$key]["type"] == "json" ? " = CAST(" . q($val) . " AS JSON)"
|
||||
: ($jush == "sql" && is_numeric($val) && preg_match('~\.~', $val) ? " LIKE " . q($val) // LIKE because of floats but slow with ints
|
||||
: ($jush == "mssql" ? " LIKE " . q(preg_replace('~[_%[]~', '[\0]', $val)) // LIKE because of text
|
||||
: " = " . unconvert_field($fields[$key], q($val))
|
||||
))
|
||||
)))
|
||||
; //! 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
|
||||
$return[] = "$column = " . q($val) . " COLLATE " . charset($connection) . "_bin";
|
||||
@@ -888,7 +851,7 @@ function table_status1($table, $fast = false) {
|
||||
|
||||
/** Find out foreign keys for each column
|
||||
* @param string
|
||||
* @return array array($col => array())
|
||||
* @return array [$col => array()]
|
||||
*/
|
||||
function column_foreign_keys($table) {
|
||||
global $adminer;
|
||||
@@ -910,13 +873,13 @@ function column_foreign_keys($table) {
|
||||
* @return null
|
||||
*/
|
||||
function enum_input($type, $attrs, $field, $value, $empty = null) {
|
||||
global $adminer;
|
||||
global $adminer, $jush;
|
||||
preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
|
||||
$return = ($empty !== null ? "<label><input type='$type'$attrs value='$empty'" . ((is_array($value) ? in_array($empty, $value) : $value === 0) ? " checked" : "") . "><i>" . lang('empty') . "</i></label>" : "");
|
||||
foreach ($matches[1] as $i => $val) {
|
||||
$val = stripcslashes(str_replace("''", "'", $val));
|
||||
$checked = (is_int($value) ? $value == $i+1 : (is_array($value) ? in_array($i+1, $value) : $value === $val));
|
||||
$return .= " <label><input type='$type'$attrs value='" . ($i+1) . "'" . ($checked ? ' checked' : '') . '>' . h($adminer->editVal($val, $field)) . '</label>';
|
||||
$return .= " <label><input type='$type'$attrs value='" . ($jush == "sql" ? $i+1 : h($val)) . "'" . ($checked ? ' checked' : '') . '>' . h($adminer->editVal($val, $field)) . '</label>';
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -928,7 +891,7 @@ function enum_input($type, $attrs, $field, $value, $empty = null) {
|
||||
* @return null
|
||||
*/
|
||||
function input($field, $value, $function) {
|
||||
global $types, $adminer, $jush;
|
||||
global $types, $structured_types, $adminer, $jush;
|
||||
$name = h(bracket_escape($field["field"]));
|
||||
echo "<td class='function'>";
|
||||
if (is_array($value) && !$function) {
|
||||
@@ -944,13 +907,21 @@ function input($field, $value, $function) {
|
||||
$function = null;
|
||||
}
|
||||
$functions = (isset($_GET["select"]) || $reset ? array("orig" => lang('original')) : array()) + $adminer->editFunctions($field);
|
||||
$attrs = " name='fields[$name]'";
|
||||
$disabled = stripos($field["default"], "GENERATED ALWAYS AS ") === 0 ? " disabled=''" : "";
|
||||
$attrs = " name='fields[$name]'$disabled";
|
||||
if ($jush == "pgsql" && in_array($field["type"], (array) $structured_types[lang('User types')])) {
|
||||
$enums = get_vals("SELECT enumlabel FROM pg_enum WHERE enumtypid = " . $types[$field["type"]] . " ORDER BY enumsortorder");
|
||||
if ($enums) {
|
||||
$field["type"] = "enum";
|
||||
$field["length"] = "'" . implode("','", array_map('addslashes', $enums)) . "'";
|
||||
}
|
||||
}
|
||||
if ($field["type"] == "enum") {
|
||||
echo h($functions[""]) . "<td>" . $adminer->editInput($_GET["edit"], $field, $attrs, $value);
|
||||
} else {
|
||||
$has_function = (in_array($function, $functions) || isset($functions[$function]));
|
||||
echo (count($functions) > 1
|
||||
? "<select name='function[$name]'>" . optionlist($functions, $function === null || $has_function ? $function : "") . "</select>"
|
||||
? "<select name='function[$name]'$disabled>" . optionlist($functions, $function === null || $has_function ? $function : "") . "</select>"
|
||||
. on_help("getTarget(event).value.replace(/^SQL\$/, '')", 1)
|
||||
. script("qsl('select').onchange = functionChange;", "")
|
||||
: h(reset($functions))
|
||||
@@ -959,8 +930,8 @@ function input($field, $value, $function) {
|
||||
if ($input != "") {
|
||||
echo $input;
|
||||
} elseif (preg_match('~bool~', $field["type"])) {
|
||||
echo "<input type='hidden'$attrs value='0'>" .
|
||||
"<input type='checkbox'" . (preg_match('~^(1|t|true|y|yes|on)$~i', $value) ? " checked='checked'" : "") . "$attrs value='1'>";
|
||||
echo "<input type='hidden'$attrs value='0'>"
|
||||
. "<input type='checkbox'" . (preg_match('~^(1|t|true|y|yes|on)$~i', $value) ? " checked='checked'" : "") . "$attrs value='1'>";
|
||||
} elseif ($field["type"] == "set") { //! 64 bits
|
||||
preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
|
||||
foreach ($matches[1] as $i => $val) {
|
||||
@@ -982,7 +953,10 @@ function input($field, $value, $function) {
|
||||
echo "<textarea$attrs cols='50' rows='12' class='jush-js'>" . h($value) . '</textarea>';
|
||||
} else {
|
||||
// int(3) is only a display hint
|
||||
$maxlength = (!preg_match('~int~', $field["type"]) && preg_match('~^(\d+)(,(\d+))?$~', $field["length"], $match) ? ((preg_match("~binary~", $field["type"]) ? 2 : 1) * $match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field["unsigned"] ? 1 : 0)) : ($types[$field["type"]] ? $types[$field["type"]] + ($field["unsigned"] ? 0 : 1) : 0));
|
||||
$maxlength = (!preg_match('~int~', $field["type"]) && preg_match('~^(\d+)(,(\d+))?$~', $field["length"], $match)
|
||||
? ((preg_match("~binary~", $field["type"]) ? 2 : 1) * $match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field["unsigned"] ? 1 : 0))
|
||||
: ($types[$field["type"]] ? $types[$field["type"]] + ($field["unsigned"] ? 0 : 1) : 0)
|
||||
);
|
||||
if ($jush == 'sql' && min_version(5.6) && preg_match('~time~', $field["type"])) {
|
||||
$maxlength += 7; // microtime
|
||||
}
|
||||
@@ -1015,6 +989,11 @@ function input($field, $value, $function) {
|
||||
*/
|
||||
function process_input($field) {
|
||||
global $adminer, $driver;
|
||||
|
||||
if (stripos($field["default"], "GENERATED ALWAYS AS ") === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$idf = bracket_escape($field["field"]);
|
||||
$function = $_POST["function"][$idf];
|
||||
$value = $_POST["fields"][$idf];
|
||||
@@ -1238,7 +1217,7 @@ function select_value($val, $link, $field, $text_length) {
|
||||
. "<td>" . select_value($v, $link, $field, $text_length)
|
||||
;
|
||||
}
|
||||
return "<table cellspacing='0'>$return</table>";
|
||||
return "<table>$return</table>";
|
||||
}
|
||||
if (!$link) {
|
||||
$link = $adminer->selectLink($val, $field);
|
||||
@@ -1411,17 +1390,19 @@ function on_help($command, $side = 0) {
|
||||
* @param bool
|
||||
* @return null
|
||||
*/
|
||||
function edit_form($TABLE, $fields, $row, $update) {
|
||||
function edit_form($table, $fields, $row, $update) {
|
||||
global $adminer, $jush, $token, $error;
|
||||
$table_name = $adminer->tableName(table_status1($TABLE, true));
|
||||
$table_name = $adminer->tableName(table_status1($table, true));
|
||||
page_header(
|
||||
($update ? lang('Edit') : lang('Insert')),
|
||||
$error,
|
||||
array("select" => array($TABLE, $table_name)),
|
||||
array("select" => array($table, $table_name)),
|
||||
$table_name
|
||||
);
|
||||
$adminer->editRowPrint($table, $fields, $row, $update);
|
||||
if ($row === false) {
|
||||
echo "<p class='error'>" . lang('No rows.') . "\n";
|
||||
return;
|
||||
}
|
||||
?>
|
||||
<form action="" method="post" enctype="multipart/form-data" id="form">
|
||||
@@ -1429,8 +1410,7 @@ function edit_form($TABLE, $fields, $row, $update) {
|
||||
if (!$fields) {
|
||||
echo "<p class='error'>" . lang('You have no privileges to update this table.') . "\n";
|
||||
} else {
|
||||
echo "<table cellspacing='0' class='layout'>" . script("qsl('table').onkeydown = editingKeydown;");
|
||||
|
||||
echo "<table class='layout'>" . script("qsl('table').onkeydown = editingKeydown;");
|
||||
foreach ($fields as $name => $field) {
|
||||
echo "<tr><th>" . $adminer->fieldName($field);
|
||||
$default = $_GET["set"][bracket_escape($name)];
|
||||
@@ -1443,7 +1423,7 @@ function edit_form($TABLE, $fields, $row, $update) {
|
||||
$value = ($row !== null
|
||||
? ($row[$name] != "" && $jush == "sql" && preg_match("~enum|set~", $field["type"])
|
||||
? (is_array($row[$name]) ? array_sum($row[$name]) : +$row[$name])
|
||||
: $row[$name]
|
||||
: (is_bool($row[$name]) ? +$row[$name] : $row[$name])
|
||||
)
|
||||
: (!$update && $field["auto_increment"]
|
||||
? ""
|
||||
@@ -1460,10 +1440,17 @@ function edit_form($TABLE, $fields, $row, $update) {
|
||||
: ($value === false ? null : ($value !== null ? '' : 'NULL'))
|
||||
)
|
||||
);
|
||||
if (!$_POST && !$update && $value == $field["default"] && preg_match('~^[\w.]+\(~', $value)) {
|
||||
$function = "SQL";
|
||||
}
|
||||
if (preg_match("~time~", $field["type"]) && preg_match('~^CURRENT_TIMESTAMP~i', $value)) {
|
||||
$value = "";
|
||||
$function = "now";
|
||||
}
|
||||
if ($field["type"] == "uuid" && $value == "uuid()") {
|
||||
$value = "";
|
||||
$function = "uuid";
|
||||
}
|
||||
input($field, $value, $function);
|
||||
echo "\n";
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@ $langs = array(
|
||||
'en' => 'English', // Jakub Vrána - https://www.vrana.cz
|
||||
'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
|
||||
'bg' => 'Български', // Deyan Delchev
|
||||
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com
|
||||
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com, Hossain Ahmed Saiman - hossain.ahmed@altscope.com
|
||||
'bs' => 'Bosanski', // Emir Kurtovic
|
||||
'ca' => 'Català', // Joan Llosas
|
||||
'cs' => 'Čeština', // Jakub Vrána - https://www.vrana.cz
|
||||
@@ -26,6 +26,7 @@ $langs = array(
|
||||
'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org
|
||||
'ko' => '한국어', // dalli - skcha67@gmail.com
|
||||
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
||||
'lv' => 'Latviešu', // Kristaps Lediņš - https://krysits.com
|
||||
'ms' => 'Bahasa Melayu', // Pisyek
|
||||
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
|
||||
'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com
|
||||
@@ -70,9 +71,10 @@ function lang($idf, $number = null) {
|
||||
: ($LANG == 'pl' ? ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2) // different forms for 1, 2-4 except 12-14, other
|
||||
: ($LANG == 'sl' ? ($number % 100 == 1 ? 0 : ($number % 100 == 2 ? 1 : ($number % 100 == 3 || $number % 100 == 4 ? 2 : 3))) // different forms for 1, 2, 3-4, other
|
||||
: ($LANG == 'lt' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 12-19, other
|
||||
: ($LANG == 'lv' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number ? 1 : 2)) // different forms for 1 except 11, other, 0
|
||||
: ($LANG == 'bs' || $LANG == 'ru' || $LANG == 'sr' || $LANG == 'uk' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1 except 11, 2-4 except 12-14, other
|
||||
: 1 // different forms for 1, other
|
||||
))))))); // http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html
|
||||
)))))))); // http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html
|
||||
$translation = $translation[$pos];
|
||||
}
|
||||
$args = func_get_args();
|
||||
|
@@ -3,7 +3,7 @@
|
||||
if (extension_loaded('pdo')) {
|
||||
/*abstract*/ class Min_PDO {
|
||||
var $_result, $server_info, $affected_rows, $errno, $error, $pdo;
|
||||
|
||||
|
||||
function __construct() {
|
||||
global $adminer;
|
||||
$pos = array_search("SQL", $adminer->operators);
|
||||
@@ -11,24 +11,24 @@ if (extension_loaded('pdo')) {
|
||||
unset($adminer->operators[$pos]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function dsn($dsn, $username, $password, $options = array()) {
|
||||
$options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_SILENT;
|
||||
$options[PDO::ATTR_STATEMENT_CLASS] = array('Min_PDOStatement');
|
||||
try {
|
||||
$this->pdo = new PDO($dsn, $username, $password, $options);
|
||||
} catch (Exception $ex) {
|
||||
auth_error(h($ex->getMessage()));
|
||||
}
|
||||
$this->pdo->setAttribute(3, 1); // 3 - PDO::ATTR_ERRMODE, 1 - PDO::ERRMODE_WARNING
|
||||
$this->pdo->setAttribute(13, array('Min_PDOStatement')); // 13 - PDO::ATTR_STATEMENT_CLASS
|
||||
$this->server_info = @$this->pdo->getAttribute(4); // 4 - PDO::ATTR_SERVER_VERSION
|
||||
$this->server_info = @$this->pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
|
||||
}
|
||||
|
||||
|
||||
/*abstract function select_db($database);*/
|
||||
|
||||
|
||||
function quote($string) {
|
||||
return $this->pdo->quote($string);
|
||||
}
|
||||
|
||||
|
||||
function query($query, $unbuffered = false) {
|
||||
$result = $this->pdo->query($query);
|
||||
$this->error = "";
|
||||
@@ -42,11 +42,11 @@ if (extension_loaded('pdo')) {
|
||||
$this->store_result($result);
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
function multi_query($query) {
|
||||
return $this->_result = $this->query($query);
|
||||
}
|
||||
|
||||
|
||||
function store_result($result = null) {
|
||||
if (!$result) {
|
||||
$result = $this->_result;
|
||||
@@ -61,7 +61,7 @@ if (extension_loaded('pdo')) {
|
||||
$this->affected_rows = $result->rowCount();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function next_result() {
|
||||
if (!$this->_result) {
|
||||
return false;
|
||||
@@ -69,7 +69,7 @@ if (extension_loaded('pdo')) {
|
||||
$this->_result->_offset = 0;
|
||||
return @$this->_result->nextRowset(); // @ - PDO_PgSQL doesn't support it
|
||||
}
|
||||
|
||||
|
||||
function result($query, $field = 0) {
|
||||
$result = $this->query($query);
|
||||
if (!$result) {
|
||||
@@ -79,18 +79,18 @@ if (extension_loaded('pdo')) {
|
||||
return $row[$field];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class Min_PDOStatement extends PDOStatement {
|
||||
var $_offset = 0, $num_rows;
|
||||
|
||||
|
||||
function fetch_assoc() {
|
||||
return $this->fetch(2); // PDO::FETCH_ASSOC
|
||||
return $this->fetch(PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
|
||||
function fetch_row() {
|
||||
return $this->fetch(3); // PDO::FETCH_NUM
|
||||
return $this->fetch(PDO::FETCH_NUM);
|
||||
}
|
||||
|
||||
|
||||
function fetch_field() {
|
||||
$row = (object) $this->getColumnMeta($this->_offset++);
|
||||
$row->orgtable = $row->table;
|
||||
@@ -100,5 +100,3 @@ if (extension_loaded('pdo')) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$drivers = array();
|
||||
|
@@ -3,20 +3,20 @@
|
||||
class TmpFile {
|
||||
var $handler;
|
||||
var $size;
|
||||
|
||||
|
||||
function __construct() {
|
||||
$this->handler = tmpfile();
|
||||
}
|
||||
|
||||
|
||||
function write($contents) {
|
||||
$this->size += strlen($contents);
|
||||
fwrite($this->handler, $contents);
|
||||
}
|
||||
|
||||
|
||||
function send() {
|
||||
fseek($this->handler, 0);
|
||||
fpassthru($this->handler);
|
||||
fclose($this->handler);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@@ -1,2 +1,2 @@
|
||||
<?php
|
||||
$VERSION = "4.7.9";
|
||||
$VERSION = "4.17.0";
|
||||
|
@@ -59,6 +59,8 @@ if (isset($_GET["download"])) {
|
||||
include "./sequence.inc.php";
|
||||
} elseif (isset($_GET["type"])) {
|
||||
include "./type.inc.php";
|
||||
} elseif (isset($_GET["check"])) {
|
||||
include "./check.inc.php";
|
||||
} elseif (isset($_GET["trigger"])) {
|
||||
include "./trigger.inc.php";
|
||||
} elseif (isset($_GET["user"])) {
|
||||
|
@@ -16,7 +16,9 @@ if ($jush == "mongo") { // doesn't support primary key
|
||||
unset($indexes["_id_"]);
|
||||
}
|
||||
$row = $_POST;
|
||||
|
||||
if ($row) {
|
||||
set_adminer_settings(array("index_options" => $row["options"]));
|
||||
}
|
||||
if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"]) {
|
||||
$alter = array();
|
||||
foreach ($row["indexes"] as $index) {
|
||||
@@ -91,14 +93,21 @@ if (!$row) {
|
||||
$indexes[] = array("columns" => array(1 => ""));
|
||||
$row["indexes"] = $indexes;
|
||||
}
|
||||
$lengths = ($jush == "sql" || $jush == "mssql");
|
||||
$show_options = ($_POST ? $_POST["options"] : adminer_setting("index_options"));
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<div class="scrollable">
|
||||
<table cellspacing="0" class="nowrap">
|
||||
<table class="nowrap">
|
||||
<thead><tr>
|
||||
<th id="label-type"><?php echo lang('Index Type'); ?>
|
||||
<th><input type="submit" class="wayoff"><?php echo lang('Column (length)'); ?>
|
||||
<th><input type="submit" class="wayoff"><?php
|
||||
echo lang('Column') . ($lengths ? "<span class='idxopts" . ($show_options ? "" : " hidden") . "'> (" . lang('length') . ")</span>" : "");
|
||||
if ($lengths || support("descidx")) {
|
||||
echo checkbox("options", 1, $show_options, lang('Options'), "indexOptionsShow(this.checked)", "jsonly") . "\n";
|
||||
}
|
||||
?>
|
||||
<th id="label-name"><?php echo lang('Name'); ?>
|
||||
<th><noscript><?php echo "<input type='image' class='icon' name='add[0]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?></noscript>
|
||||
</thead>
|
||||
@@ -126,9 +135,10 @@ foreach ($row["indexes"] as $index) {
|
||||
$column,
|
||||
"partial(" . ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . ", '" . js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_") . "')"
|
||||
);
|
||||
echo ($jush == "sql" || $jush == "mssql" ? "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "' title='" . lang('Length') . "'>" : "");
|
||||
echo "<span class='idxopts" . ($show_options ? "" : " hidden") . "'>";
|
||||
echo ($lengths ? "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "' title='" . lang('Length') . "'>" : "");
|
||||
echo (support("descidx") ? checkbox("indexes[$j][descs][$i]", 1, $index["descs"][$key], lang('descending')) : "");
|
||||
echo " </span>";
|
||||
echo "</span> </span>";
|
||||
$i++;
|
||||
}
|
||||
|
||||
|
@@ -30,7 +30,6 @@ $translations = array(
|
||||
'Create database' => 'إنشاء قاعدة بيانات',
|
||||
'SQL command' => 'استعلام SQL',
|
||||
'Logout' => 'تسجيل الخروج',
|
||||
'database' => 'قاعدة بيانات',
|
||||
'Use' => 'استعمال',
|
||||
'No tables.' => 'لا توجد جداول.',
|
||||
'select' => 'تحديد',
|
||||
@@ -94,7 +93,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'نوع المؤشر',
|
||||
'Column (length)' => 'العمود (الطول)',
|
||||
'length' => 'الطول',
|
||||
'View has been dropped.' => 'تم مسح العرض.',
|
||||
'View has been altered.' => 'تم تعديل العرض.',
|
||||
'View has been created.' => 'تم إنشاء العرض.',
|
||||
|
@@ -22,10 +22,10 @@ $translations = array(
|
||||
'Session expired, please login again.' => 'Сесията е изтекла; моля, влезте отново.',
|
||||
'%s version: %s through PHP extension %s' => '%s версия: %s през PHP разширение %s',
|
||||
'Refresh' => 'Обновяване',
|
||||
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
|
||||
'Privileges' => 'Права',
|
||||
'Create user' => 'Създаване на потребител',
|
||||
'User has been dropped.' => 'Потребителя беше премахнат.',
|
||||
@@ -36,14 +36,14 @@ $translations = array(
|
||||
'Routine' => 'Процедура',
|
||||
'Grant' => 'Осигуряване',
|
||||
'Revoke' => 'Отнемане',
|
||||
|
||||
|
||||
'Process list' => 'Списък с процеси',
|
||||
'%d process(es) have been killed.' => array('%d процес беше прекъснат.', '%d процеса бяха прекъснати.'),
|
||||
'Kill' => 'Прекъсване',
|
||||
|
||||
|
||||
'Variables' => 'Променливи',
|
||||
'Status' => 'Състояние',
|
||||
|
||||
|
||||
'SQL command' => 'SQL команда',
|
||||
'%d query(s) executed OK.' => array('%d заявка е изпълнена.', '%d заявки са изпълнени.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Заявката е изпълнена, %d ред е засегнат.', 'Заявката е изпълнена, %d редове са засегнати.'),
|
||||
@@ -57,7 +57,7 @@ $translations = array(
|
||||
'History' => 'Хронология',
|
||||
'Clear' => 'Изчистване',
|
||||
'Edit all' => 'Редактиране на всички',
|
||||
|
||||
|
||||
'File upload' => 'Прикачване на файл',
|
||||
'From server' => 'От сървър',
|
||||
'Webserver file %s' => 'Сървърен файл %s',
|
||||
@@ -69,16 +69,15 @@ $translations = array(
|
||||
'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' => 'Експорт',
|
||||
'Output' => 'Резултат',
|
||||
'open' => 'показване',
|
||||
'save' => 'запис',
|
||||
'Format' => 'Формат',
|
||||
'Data' => 'Данни',
|
||||
|
||||
|
||||
'Database' => 'База данни',
|
||||
'database' => 'база данни',
|
||||
'Use' => 'Избор',
|
||||
'Select database' => 'Избор на база данни',
|
||||
'Invalid database.' => 'Невалидна база данни.',
|
||||
@@ -90,10 +89,10 @@ $translations = array(
|
||||
'Alter database' => 'Промяна на база данни',
|
||||
'Create database' => 'Създаване на база данни',
|
||||
'Database schema' => 'Схема на базата данни',
|
||||
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Постоянна препратка',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
@@ -116,7 +115,7 @@ $translations = array(
|
||||
'Tables have been moved.' => 'Таблиците бяха преместени.',
|
||||
'Copy' => 'Копиране',
|
||||
'Tables have been copied.' => 'Таблиците бяха копирани.',
|
||||
|
||||
|
||||
'Routines' => 'Процедури',
|
||||
'Routine has been called, %d row(s) affected.' => array('Беше приложена процедура, %d ред е засегнат.', 'Беше приложена процедура, %d редове са засегнати.'),
|
||||
'Call' => 'Прилагане',
|
||||
@@ -129,7 +128,7 @@ $translations = array(
|
||||
'Alter function' => 'Промяна на функция',
|
||||
'Alter procedure' => 'Промяна на процедура',
|
||||
'Return type' => 'Резултат',
|
||||
|
||||
|
||||
'Events' => 'Събития',
|
||||
'Event has been dropped.' => 'Събитието беше премахнато.',
|
||||
'Event has been altered.' => 'Събитието беше променено.',
|
||||
@@ -142,7 +141,7 @@ $translations = array(
|
||||
'Start' => 'Начало',
|
||||
'End' => 'Край',
|
||||
'On completion preserve' => 'Запазване след завършване',
|
||||
|
||||
|
||||
'Tables' => 'Таблици',
|
||||
'Tables and views' => 'Таблици и изгледи',
|
||||
'Table' => 'Таблица',
|
||||
@@ -174,12 +173,12 @@ $translations = array(
|
||||
'Move down' => 'Преместване надолу',
|
||||
'Remove' => 'Премахване',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Максималния брой полета е превишен. Моля, увеличете %s.',
|
||||
|
||||
|
||||
'Partition by' => 'Разделяне на',
|
||||
'Partitions' => 'Раздели',
|
||||
'Partition name' => 'Име на раздела',
|
||||
'Values' => 'Стойности',
|
||||
|
||||
|
||||
'View' => 'Изглед',
|
||||
'Materialized view' => 'Запаметен изглед',
|
||||
'View has been dropped.' => 'Изгледа беше премахнат.',
|
||||
@@ -187,14 +186,14 @@ $translations = array(
|
||||
'View has been created.' => 'Изгледа беше създаден.',
|
||||
'Alter view' => 'Промяна на изглед',
|
||||
'Create view' => 'Създаване на изглед',
|
||||
|
||||
|
||||
'Indexes' => 'Индекси',
|
||||
'Indexes have been altered.' => 'Индексите бяха променени.',
|
||||
'Alter indexes' => 'Промяна на индекси',
|
||||
'Add next' => 'Добавяне на следващ',
|
||||
'Index Type' => 'Вид на индекса',
|
||||
'Column (length)' => 'Колона (дължина)',
|
||||
|
||||
'length' => 'дължина',
|
||||
|
||||
'Foreign keys' => 'Препратки',
|
||||
'Foreign key' => 'Препратка',
|
||||
'Foreign key has been dropped.' => 'Препратката беше премахната.',
|
||||
@@ -210,7 +209,7 @@ $translations = array(
|
||||
'ON DELETE' => 'При изтриване',
|
||||
'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.' => 'Колоните източник и цел трябва да са от еднакъв вид, трябва да има индекс на колоните приемник и да има въведени данни.',
|
||||
|
||||
|
||||
'Triggers' => 'Тригери',
|
||||
'Add trigger' => 'Добавяне на тригер',
|
||||
'Trigger has been dropped.' => 'Тригера беше премахнат.',
|
||||
@@ -221,7 +220,7 @@ $translations = array(
|
||||
'Time' => 'Време',
|
||||
'Event' => 'Събитие',
|
||||
'Name' => 'Име',
|
||||
|
||||
|
||||
'select' => 'показване',
|
||||
'Select' => 'Показване',
|
||||
'Select data' => 'Показване на данни',
|
||||
@@ -247,16 +246,16 @@ $translations = array(
|
||||
'Loading' => 'Зареждане',
|
||||
'Whole result' => 'Пълен резултат',
|
||||
'%d byte(s)' => array('%d байт', '%d байта'),
|
||||
|
||||
|
||||
'Import' => 'Импорт',
|
||||
'%d row(s) have been imported.' => array('%d ред беше импортиран.', '%d реда бяха импортирани.'),
|
||||
'File must be in UTF-8 encoding.' => 'Файла трябва да е с UTF-8 кодировка.',
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Промяна',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+щракване в стойността, за да я промените.',
|
||||
'Use edit link to modify this value.' => 'Използвайте "редакция" за промяна на данните.',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Елементи%s бяха вмъкнати.',
|
||||
'Item has been deleted.' => 'Елемента беше изтрит.',
|
||||
@@ -277,14 +276,14 @@ $translations = array(
|
||||
'Clone' => 'Клониране',
|
||||
'Delete' => 'Изтриване',
|
||||
'You have no privileges to update this table.' => 'Нямате праве за обновяване на таблицата.',
|
||||
|
||||
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'От',
|
||||
'Subject' => 'Тема',
|
||||
'Attachments' => 'Прикачени',
|
||||
'Send' => 'Изпращане',
|
||||
'%d e-mail(s) have been sent.' => array('%d писмо беше изпратено.', '%d писма бяха изпратени.'),
|
||||
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Числа',
|
||||
'Date and time' => 'Дата и час',
|
||||
@@ -294,7 +293,7 @@ $translations = array(
|
||||
'Network' => 'Мрежа',
|
||||
'Geometry' => 'Геометрия',
|
||||
'Relations' => 'Зависимости',
|
||||
|
||||
|
||||
'Editor' => 'Редактор',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
@@ -305,11 +304,11 @@ $translations = array(
|
||||
'now' => 'сега',
|
||||
'yes' => 'да',
|
||||
'no' => 'не',
|
||||
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Файла вече съществува.',
|
||||
'Please use one of the extensions %s.' => 'Моля, използвайте някое от разширенията %s.',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Промяна на схемата',
|
||||
'Create schema' => 'Създаване на схема',
|
||||
@@ -318,7 +317,7 @@ $translations = array(
|
||||
'Schema has been altered.' => 'Схемата беше променена.',
|
||||
'Schema' => 'Схема',
|
||||
'Invalid schema.' => 'Невалидна схема.',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Последователности',
|
||||
'Create sequence' => 'Създаване на последователност',
|
||||
@@ -326,7 +325,7 @@ $translations = array(
|
||||
'Sequence has been created.' => 'Последователността беше създадена.',
|
||||
'Sequence has been altered.' => 'Последователността беше променена.',
|
||||
'Alter sequence' => 'Промяна на последователност',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Видове потребители',
|
||||
'Create type' => 'Създаване на вид',
|
||||
|
@@ -1,53 +1,52 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'লগইন',
|
||||
'Logout successful.' => 'লগআউট সম্পন্ন হয়েছে।',
|
||||
'Logout successful.' => 'সফলভাবে লগআউট হয়েছে।',
|
||||
'Invalid credentials.' => 'ভুল পাসওয়ার্ড।',
|
||||
'Server' => 'সার্ভার',
|
||||
'Username' => 'ইউজারের নাম',
|
||||
'Password' => 'পাসওয়ার্ড',
|
||||
'Select database' => 'ডাটাবেজ নির্বাচন করো',
|
||||
'Invalid database.' => 'ভুল ডাটাবেজ।',
|
||||
'Select database' => 'ডাটাবেজ নির্বাচন করুন',
|
||||
'Invalid database.' => 'অকার্যকর ডাটাবেজ।',
|
||||
'Table has been dropped.' => 'টেবিল মুছে ফেলা হয়েছে।',
|
||||
'Table has been altered.' => 'টেবিল সম্পাদনা করা হয়েছে।',
|
||||
'Table has been altered.' => 'টেবিল পরিবর্তন করা হয়েছে।',
|
||||
'Table has been created.' => 'টেবিল তৈরী করা হয়েছে।',
|
||||
'Alter table' => 'টেবিল সম্পাদনা',
|
||||
'Create table' => 'টেবিল তৈরী করো',
|
||||
'Alter table' => 'টেবিল পরিবর্তন করুন',
|
||||
'Create table' => 'টেবিল তৈরী করুন',
|
||||
'Table name' => 'টেবিলের নাম',
|
||||
'engine' => 'ইন্জিন',
|
||||
'collation' => 'কলোকেশন',
|
||||
'collation' => 'সমষ্টি',
|
||||
'Column name' => 'কলামের নাম',
|
||||
'Type' => 'টাইপ',
|
||||
'Type' => 'ধরণ',
|
||||
'Length' => 'দৈর্ঘ্য',
|
||||
'Auto Increment' => 'স্বয়ংক্রিয় বৃদ্ধি',
|
||||
'Options' => 'অপশন',
|
||||
'Save' => 'সংরক্ষণ',
|
||||
'Options' => 'বিকল্পসমূহ',
|
||||
'Save' => 'সংরক্ষণ করুন',
|
||||
'Drop' => 'মুছে ফেলো',
|
||||
'Database has been dropped.' => 'ডাটাবেজ মুছে ফেলা হয়েছে।',
|
||||
'Database has been created.' => 'ডাটাবেজ তৈরী করা হয়েছে।',
|
||||
'Database has been renamed.' => 'ডাটাবেজের নতুন নামকরণ করা হয়েছে।',
|
||||
'Database has been altered.' => 'ডাটাবেজ সম্পাদনা করা হয়েছে।',
|
||||
'Alter database' => 'ডাটাবেজ সম্পাদনা',
|
||||
'Create database' => 'ডাটাবেজ তৈরী',
|
||||
'SQL command' => 'SQL-কোয়্যারী',
|
||||
'Database has been altered.' => 'ডাটাবেজ পরিবর্তন করা হয়েছে।',
|
||||
'Alter database' => 'ডাটাবেজ পরিবর্তন করুন',
|
||||
'Create database' => 'ডাটাবেজ তৈরী করুন',
|
||||
'SQL command' => 'SQL-কমান্ড',
|
||||
'Logout' => 'লগআউট',
|
||||
'database' => 'ডাটাবেজ',
|
||||
'Use' => 'ব্যবহার',
|
||||
'No tables.' => 'কোন টেবিল নাই।',
|
||||
'select' => 'নির্বাচন',
|
||||
'Item has been deleted.' => 'বিষয়বস্তু মুছে ফেলা হয়েছে।',
|
||||
'Item has been updated.' => 'বিষয়বস্তু আপডেট করা হয়েছে।',
|
||||
'Item has been updated.' => 'বিষয়বস্তু হালনাগাদ করা হয়েছে।',
|
||||
'Item%s has been inserted.' => 'বিষয়বস্তুসমূহ সংযোজন করা হয়েছে।',
|
||||
'Edit' => 'সম্পাদনা',
|
||||
'Insert' => 'সংযোজন',
|
||||
'Save and insert next' => 'সংরক্ষন ও পরবর্তী সংযোজন',
|
||||
'Delete' => 'মুছে ফেলো',
|
||||
'Save and insert next' => 'সংরক্ষন ও পরবর্তী সংযোজন করুন',
|
||||
'Delete' => 'মুছে ফেলুন',
|
||||
'Database' => 'ডাটাবেজ',
|
||||
'Routines' => 'রুটিনসমূহ',
|
||||
'Indexes have been altered.' => 'সূচীসমূহ সম্পাদনা করা হয়েছে।',
|
||||
'Indexes' => 'সূচীসমূহ',
|
||||
'Alter indexes' => 'সূচীসমূহ সম্পাদনা',
|
||||
'Add next' => 'সংযোজন',
|
||||
'Alter indexes' => 'সূচীসমূহ পরিবর্তন করুন',
|
||||
'Add next' => 'পরবর্তী সংযোজন করুন',
|
||||
'Language' => 'ভাষা',
|
||||
'Select' => 'নির্বাচন',
|
||||
'New item' => 'নতুন বিষয়বস্তু',
|
||||
@@ -60,90 +59,90 @@ $translations = array(
|
||||
'edit' => 'সম্পাদনা',
|
||||
'Page' => 'পৃষ্ঠা',
|
||||
'Query executed OK, %d row(s) affected.' => array('কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।', 'কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।'),
|
||||
'Error in query' => 'কোয়্যারীতে ভুল আছে।',
|
||||
'Error in query' => 'অনুসন্ধানে ভুল আছে।',
|
||||
'Execute' => 'সম্পাদন করো',
|
||||
'Table' => 'টেবিল',
|
||||
'Foreign keys' => 'ফরেন কী',
|
||||
'Triggers' => 'ট্রিগার',
|
||||
'View' => 'ভিউ',
|
||||
'Unable to select the table' => 'টেবিল নির্বাচন করতে অক্ষম',
|
||||
'Invalid CSRF token. Send the form again.' => 'অবৈধ CSRF টোকেন। ফর্ম আবার পাঠাও।',
|
||||
'Invalid CSRF token. Send the form again.' => 'অবৈধ CSRF টোকেন। ফর্মটি আবার পাঠান।',
|
||||
'Comment' => 'মন্তব্য',
|
||||
'Default values' => 'ডিফল্ট মান',
|
||||
'%d byte(s)' => array('%d বাইট', '%d বাইটসমূহ'),
|
||||
'No commands to execute.' => 'সম্পাদন করার মত কোন নির্দেশ নাই।',
|
||||
'No commands to execute.' => 'সম্পাদন করার মত কোন নির্দেশ নেই।',
|
||||
'Unable to upload a file.' => 'ফাইল আপলোড করা সম্ভব হচ্ছে না।',
|
||||
'File upload' => 'ফাইল আপলোড',
|
||||
'File uploads are disabled.' => 'ফাইল আপলোড নিষ্ক্রিয় করা আছে।',
|
||||
'Routine has been called, %d row(s) affected.' => array('রুটিন কল করা হয়েছে, %d টি সারি (সমূহ) প্রভাবিত হয়েছে।', 'রুটিন কল করা হয়েছে, %d টি সারি (সমূহ) প্রভাবিত হয়েছে।'),
|
||||
'Routine has been called, %d row(s) affected.' => array('রুটিন কল করা হয়েছে, %d টি সারি(সমূহ) প্রভাবিত হয়েছে।', 'রুটিন কল করা হয়েছে, %d টি সারি(সমূহ) প্রভাবিত হয়েছে।'),
|
||||
'Call' => 'কল',
|
||||
'No extension' => 'কোন এক্সটেনশান নাই',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'কোন PHP সমর্থিত এক্সটেনশন (%s) পাওয়া যায় নাই।',
|
||||
'Session support must be enabled.' => 'সেশন সমর্থন সক্রিয় করা আবশ্যক।',
|
||||
'Session expired, please login again.' => 'সেশানের মেয়াদ শেষ হয়েছে, আবার লগইন করুন।',
|
||||
'Session expired, please login again.' => 'সেশনের মেয়াদ শেষ হয়েছে, আবার লগইন করুন।',
|
||||
'Text length' => 'টেক্সট দৈর্ঘ্য',
|
||||
'Foreign key has been dropped.' => 'ফরেন কী মুছে ফেলা হয়েছে।',
|
||||
'Foreign key has been altered.' => 'ফরেন কী সম্পাদনা করা হয়েছে।',
|
||||
'Foreign key has been altered.' => 'ফরেন কী পরিবর্তন করা হয়েছে।',
|
||||
'Foreign key has been created.' => 'ফরেন কী তৈরী করা হয়েছে।',
|
||||
'Foreign key' => 'ফরেন কী ',
|
||||
'Target table' => 'টার্গেট টেবিল',
|
||||
'Change' => 'পরিবর্তন',
|
||||
'Source' => 'উৎস',
|
||||
'Target' => 'লক্ষ্য',
|
||||
'Add column' => 'কলাম সংযোজন',
|
||||
'Alter' => 'সম্পাদনা',
|
||||
'Add foreign key' => 'ফরেন কী সংযোজন করো',
|
||||
'Add column' => 'কলাম সংযোজন করুন',
|
||||
'Alter' => 'পরিবর্তন',
|
||||
'Add foreign key' => 'ফরেন কী সংযোজন করুন',
|
||||
'ON DELETE' => 'অন ডিলিট',
|
||||
'ON UPDATE' => 'অন আপডেট',
|
||||
'Index Type' => 'সূচী-ধরণ',
|
||||
'Column (length)' => 'কলাম (দৈর্ঘ্য)',
|
||||
'length' => 'দৈর্ঘ্য',
|
||||
'View has been dropped.' => 'ভিউ মুছে ফেলা হয়েছে।',
|
||||
'View has been altered.' => 'ভিউ সম্পাদনা করা হয়েছে।',
|
||||
'View has been altered.' => 'ভিউ পরিবর্তন করা হয়েছে।',
|
||||
'View has been created.' => 'ভিউ তৈরী করা হয়েছে।',
|
||||
'Alter view' => 'ভিউ সম্পাদনা করো',
|
||||
'Create view' => 'ভিউ তৈরী করো',
|
||||
'Alter view' => 'ভিউ পরিবর্তন করুন',
|
||||
'Create view' => 'ভিউ তৈরী করুন',
|
||||
'Name' => 'নাম',
|
||||
'Process list' => 'প্রসেস তালিকা',
|
||||
'%d process(es) have been killed.' => array('%d টি প্রসেস (সমূহ) বিনষ্ট করা হয়েছে।', '%d টি প্রসেস (সমূহ) বিনষ্ট করা হয়েছে।'),
|
||||
'%d process(es) have been killed.' => array('%d টি প্রসেস(সমূহ) বিনষ্ট করা হয়েছে।', '%d টি প্রসেস(সমূহ) বিনষ্ট করা হয়েছে।'),
|
||||
'Kill' => 'বিনষ্ট করো',
|
||||
'Parameter name' => 'প্যারামিটারের নাম',
|
||||
'Database schema' => 'ডাটাবেজ স্কিমা',
|
||||
'Create procedure' => 'প্রসিডিওর তৈরী করো',
|
||||
'Create function' => 'ফাংশন তৈরী করো',
|
||||
'Create procedure' => 'কার্যপ্রণালী তৈরী করুন',
|
||||
'Create function' => 'ফাংশন তৈরী করুন',
|
||||
'Routine has been dropped.' => 'রুটিন মুছে ফেলা হয়েছে।',
|
||||
'Routine has been altered.' => 'রুটিন সম্পাদনা করা হয়েছে।',
|
||||
'Routine has been altered.' => 'রুটিন পরিবর্তন করা হয়েছে।',
|
||||
'Routine has been created.' => 'রুটিন তৈরী করা হয়েছে।',
|
||||
'Alter function' => 'ফাংশন সম্পাদনা করো',
|
||||
'Alter procedure' => 'প্রসিডিওর সম্পাদনা করো',
|
||||
'Alter function' => 'ফাংশন পরিবর্তন করুন',
|
||||
'Alter procedure' => 'কার্যপ্রণালী পরিবর্তন করুন',
|
||||
'Return type' => 'রিটার্ন টাইপ',
|
||||
'Add trigger' => 'ট্রিগার সংযোজন করো',
|
||||
'Add trigger' => 'ট্রিগার সংযোজন করুন',
|
||||
'Trigger has been dropped.' => 'ট্রিগার মুছে ফেলা হয়েছে।',
|
||||
'Trigger has been altered.' => 'ট্রিগার সম্পাদনা করা হয়েছে।',
|
||||
'Trigger has been altered.' => 'ট্রিগার পরিবর্তন করা হয়েছে।',
|
||||
'Trigger has been created.' => 'ট্রিগার তৈরী করা হয়েছে।',
|
||||
'Alter trigger' => 'ট্রিগার সম্পাদনা করো',
|
||||
'Create trigger' => 'ট্রিগার তৈরী করো',
|
||||
'Alter trigger' => 'ট্রিগার পরিবর্তন করুন',
|
||||
'Create trigger' => 'ট্রিগার তৈরী করুন',
|
||||
'Time' => 'সময়',
|
||||
'Event' => 'ইভেন্ট',
|
||||
'%s version: %s through PHP extension %s' => 'ভার্সন %s: %s, %s PHP এক্সটেনশনের মধ্য দিয়ে',
|
||||
'%d row(s)' => array('%d সারি', '%d সারি সমূহ'),
|
||||
'Remove' => 'অপসারণ',
|
||||
'Are you sure?' => 'তুমি কি নিশ্চিত?',
|
||||
'Remove' => 'মুছে ফেলুন',
|
||||
'Are you sure?' => 'আপনি কি নিশ্চিত?',
|
||||
'Privileges' => 'প্রিভিলেজেস',
|
||||
'Create user' => 'ইউজার তৈরী করো',
|
||||
'User has been dropped.' => 'ইউজার মুছে ফেলা হয়েছে।',
|
||||
'User has been altered.' => 'ইউজার সম্পাদনা করা হয়েছে।',
|
||||
'User has been created.' => 'ইউজার তৈরী করা হয়েছে।',
|
||||
'Hashed' => 'হ্যাসড',
|
||||
'Create user' => 'ব্যবহারকারি তৈরী করুন',
|
||||
'User has been dropped.' => 'ব্যবহারকারি মুছে ফেলা হয়েছে।',
|
||||
'User has been altered.' => 'ব্যবহারকারি সম্পাদনা করা হয়েছে।',
|
||||
'User has been created.' => 'ব্যবহারকারি তৈরী করা হয়েছে।',
|
||||
'Hashed' => 'হ্যাশড',
|
||||
'Column' => 'কলাম',
|
||||
'Routine' => 'রুটিন',
|
||||
'Grant' => 'গ্র্যান্ট',
|
||||
'Revoke' => 'রিভোক',
|
||||
'Grant' => 'অনুমতি',
|
||||
'Revoke' => 'প্রত্যাহার',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'খুব বড় POST ডাটা। ডাটা সংক্ষিপ্ত করো অথবা %s কনফিগারেশন নির্দেশ বৃদ্ধি করো',
|
||||
'Logged as: %s' => '%s হিসাবে লগড',
|
||||
'Move up' => 'উপরে স্থানান্তর',
|
||||
'Move down' => 'নীচে স্থানান্তর',
|
||||
'Functions' => 'ফাংশন সমূহ',
|
||||
'Aggregation' => 'মোট পরিমাণ',
|
||||
'Aggregation' => 'সমষ্টি',
|
||||
'Export' => 'এক্সপোর্ট',
|
||||
'Output' => 'আউটপুট',
|
||||
'open' => 'খোলা',
|
||||
@@ -162,8 +161,8 @@ $translations = array(
|
||||
'Schedule' => 'সময়সূচি',
|
||||
'Start' => 'শুরু',
|
||||
'End' => 'সমাপ্তি',
|
||||
'Status' => 'স্ট্যাটাস',
|
||||
'On completion preserve' => 'সমাপ্ত হওয়ার পর সংরক্ষন করো',
|
||||
'Status' => 'অবস্থা',
|
||||
'On completion preserve' => 'সমাপ্ত হওয়ার পর সংরক্ষন করুন',
|
||||
'Tables and views' => 'টেবিল এবং ভিউ সমূহ',
|
||||
'Data Length' => 'ডাটার দৈর্ঘ্য',
|
||||
'Index Length' => 'ইনডেক্স এর দৈর্ঘ্য',
|
||||
@@ -175,14 +174,14 @@ $translations = array(
|
||||
'Repair' => 'মেরামত',
|
||||
'Truncate' => 'ছাঁটাই',
|
||||
'Tables have been truncated.' => 'টেবিল ছাঁটাই করা হয়েছে',
|
||||
'Rows' => 'সারি',
|
||||
'Rows' => 'সারিসমূহ',
|
||||
',' => ',',
|
||||
'0123456789' => '০১২৩৪৫৬৭৮৯',
|
||||
'Tables have been moved.' => 'টেবিল স্থানান্তর করা হয়েছে।',
|
||||
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করো',
|
||||
'Move' => 'স্থানান্তর করো',
|
||||
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করুন',
|
||||
'Move' => 'স্থানান্তর করুন',
|
||||
'Engine' => 'ইঞ্জিন',
|
||||
'Save and continue edit' => 'সংরক্ষণ করো এবং সম্পাদনা চালিয়ে যাও',
|
||||
'Save and continue edit' => 'সংরক্ষণ করুন এবং সম্পাদনা চালিয়ে যান',
|
||||
'original' => 'প্রকৃত',
|
||||
'Tables have been dropped.' => 'টেবিলসমূহ মুছে ফেলা হয়েছে।',
|
||||
'%d item(s) have been affected.' => '%d টি বিষয়বস্তু প্রভাবিত হয়েছে',
|
||||
@@ -193,10 +192,10 @@ $translations = array(
|
||||
'Partitions' => 'পার্টিশন',
|
||||
'Partition name' => 'পার্টিশনের নাম',
|
||||
'Values' => 'মানসমূহ',
|
||||
'%d row(s) have been imported.' => array('%d টি সারি (সমূহ) ইমপোর্ট করা হয়েছে।', '%d টি সারি (সমূহ) ইমপোর্ট করা হয়েছে।'),
|
||||
'%d row(s) have been imported.' => array('%d টি সারি(সমূহ) ইমপোর্ট করা হয়েছে।', '%d টি সারি(সমূহ) ইমপোর্ট করা হয়েছে।'),
|
||||
'anywhere' => 'যে কোন স্থানে',
|
||||
'Import' => 'ইমপোর্ট',
|
||||
'Stop on error' => 'ত্রুটি পেলে থেমে যাও',
|
||||
'Stop on error' => 'ত্রুটি পেলে থেমে যান',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
'[yyyy]-mm-dd' => 't.m.[jjjj]',
|
||||
@@ -216,14 +215,14 @@ $translations = array(
|
||||
'E-mail' => 'ই-মেইল',
|
||||
'From' => 'থেকে',
|
||||
'Subject' => 'বিষয়',
|
||||
'Send' => 'পাঠাও',
|
||||
'%d e-mail(s) have been sent.' => array('%d ইমেইল (গুলি) পাঠানো হয়েছে।', '%d ইমেইল (গুলি) পাঠানো হয়েছে।'),
|
||||
'Send' => 'পাঠান',
|
||||
'%d e-mail(s) have been sent.' => array('%d ইমেইল(গুলি) পাঠানো হয়েছে।', '%d ইমেইল(গুলি) পাঠানো হয়েছে।'),
|
||||
'Webserver file %s' => 'ওয়েবসার্ভার ফাইল %s',
|
||||
'File does not exist.' => 'ফাইলের কোন অস্তিত্ব নেই।',
|
||||
'File does not exist.' => 'ফাইলটির কোন অস্তিত্ব নেই।',
|
||||
'%d in total' => 'সর্বমোটঃ %d টি',
|
||||
'Permanent login' => 'স্থায়ী লগইন',
|
||||
'Databases have been dropped.' => 'ডাটাবেজসমূহ মুছে ফেলা হয়েছে।',
|
||||
'Search data in tables' => 'টেবিলে খোঁজ করো',
|
||||
'Search data in tables' => 'টেবিলে তথ্য খুঁজুন',
|
||||
'Schema' => 'স্কিমা',
|
||||
'Alter schema' => 'স্কিমা পরিবর্তন করো',
|
||||
'Create schema' => 'স্কিমা তৈরী করো',
|
||||
@@ -236,32 +235,32 @@ $translations = array(
|
||||
'Sequence has been dropped.' => 'অনুক্রম মুছে ফেলা হয়েছে।',
|
||||
'Sequence has been created.' => 'অনুক্রম তৈরি করা হয়েছে।',
|
||||
'Sequence has been altered.' => 'অনুক্রম সম্পাদনা করা হয়েছে।',
|
||||
'User types' => 'ইউজারের টাইপ',
|
||||
'Create type' => 'টাইপ তৈরী করো',
|
||||
'Alter type' => 'টাইপ পরিবর্তন করো',
|
||||
'Type has been dropped.' => 'টাইপ মুছে ফেলা হয়েছে।',
|
||||
'Type has been created.' => 'টাইপ তৈরি করা হয়েছে।',
|
||||
'Use edit link to modify this value.' => 'এই মান পরিবর্তনের জন্য সম্পাদনা লিঙ্ক ব্যবহার করো।',
|
||||
'User types' => 'ব্যবহারকারির ধরণ',
|
||||
'Create type' => 'ধরণ তৈরী করুন',
|
||||
'Alter type' => 'ধরণ পরিবর্তন করুন',
|
||||
'Type has been dropped.' => 'ধরণ মুছে ফেলা হয়েছে।',
|
||||
'Type has been created.' => 'ধরণ তৈরি করা হয়েছে।',
|
||||
'Use edit link to modify this value.' => 'এই মানটি পরিবর্তনের জন্য সম্পাদনা লিঙ্ক ব্যবহার করুন।',
|
||||
'last' => 'সর্বশেষ',
|
||||
'From server' => 'সার্ভার থেকে',
|
||||
'System' => 'সিস্টেম',
|
||||
'Select data' => 'তথ্য নির্বাচন করো',
|
||||
'Show structure' => 'গঠন দেখাও',
|
||||
'Show structure' => 'গঠন দেখান',
|
||||
'empty' => 'খালি',
|
||||
'Network' => 'নেটওয়ার্ক',
|
||||
'Geometry' => 'জ্যামিতি',
|
||||
'File exists.' => 'ফাইল রয়েছে।',
|
||||
'Attachments' => 'সংযুক্তি',
|
||||
'%d query(s) executed OK.' => array('SQL-কোয়্যারী সফলভাবে সম্পন্ন হয়েছে', '%d SQL-কোয়্যারীসমূহ সফলভাবে সম্পন্ন হয়েছে'),
|
||||
'Show only errors' => 'শুধুমাত্র ত্রুটি দেখাও',
|
||||
'Attachments' => 'সংযুক্তিগুলো',
|
||||
'%d query(s) executed OK.' => array('SQL-অনুসন্ধান সফলভাবে সম্পন্ন হয়েছে', '%d SQL-অনুসন্ধানসমূহ সফলভাবে সম্পন্ন হয়েছে'),
|
||||
'Show only errors' => 'শুধুমাত্র ত্রুটিগুলো দেখান',
|
||||
'Refresh' => 'রিফ্রেশ',
|
||||
'Invalid schema.' => 'অবৈধ স্কিমা।',
|
||||
'Please use one of the extensions %s.' => 'কোন একটা এক্সটেনশন %s ব্যবহার করো।',
|
||||
'Please use one of the extensions %s.' => 'কোন একটা এক্সটেনশন %s ব্যবহার করুন।',
|
||||
'now' => 'এখন',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'টেবিল কপি করা হয়েছে।',
|
||||
'Tables have been copied.' => 'টেবিলগুলো কপি করা হয়েছে।',
|
||||
'Copy' => 'কপি',
|
||||
'Permanent link' => 'স্থায়ী লিংক',
|
||||
'Edit all' => 'সকল সম্পাদনা করো',
|
||||
'Edit all' => 'সবগুলো সম্পাদনা করুন',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -73,7 +73,6 @@ $translations = array(
|
||||
'Data' => 'Podaci',
|
||||
|
||||
'Database' => 'Baza podataka',
|
||||
'database' => 'baza podataka',
|
||||
'Use' => 'Koristi',
|
||||
'Select database' => 'Izaberite bazu',
|
||||
'Invalid database.' => 'Neispravna baza podataka.',
|
||||
@@ -183,7 +182,7 @@ $translations = array(
|
||||
'Alter indexes' => 'Ažuriraj indekse',
|
||||
'Add next' => 'Dodaj slijedeći',
|
||||
'Index Type' => 'Tip indeksa',
|
||||
'Column (length)' => 'kolumna (dužina)',
|
||||
'length' => 'dužina',
|
||||
|
||||
'Foreign keys' => 'Strani ključevi',
|
||||
'Foreign key' => 'Strani ključ',
|
||||
|
@@ -2,7 +2,7 @@
|
||||
$translations = array(
|
||||
'Login' => 'Inicia la sessió',
|
||||
'Logout successful.' => 'Desconnexió correcta.',
|
||||
'Invalid credentials.' => 'Credencials invàlids.',
|
||||
'Invalid credentials.' => 'Credencials invàlides.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Nom d\'usuari',
|
||||
'Password' => 'Contrasenya',
|
||||
@@ -31,11 +31,10 @@ $translations = array(
|
||||
'Create database' => 'Crea una base de dades',
|
||||
'SQL command' => 'Ordre SQL',
|
||||
'Logout' => 'Desconnecta',
|
||||
'database' => 'base de dades',
|
||||
'Use' => 'Utilitza',
|
||||
'No tables.' => 'No hi ha cap taula.',
|
||||
'select' => 'registres',
|
||||
'Item has been deleted.' => 'S\'ha suprmit l\'element.',
|
||||
'Item has been deleted.' => 'S\'ha suprimit l\'element.',
|
||||
'Item has been updated.' => 'S\'ha actualitzat l\'element.',
|
||||
'Item%s has been inserted.' => 'S\'ha insertat l\'element%s.',
|
||||
'Edit' => 'Edita',
|
||||
@@ -44,9 +43,9 @@ $translations = array(
|
||||
'Delete' => 'Suprimeix',
|
||||
'Database' => 'Base de dades',
|
||||
'Routines' => 'Rutines',
|
||||
'Indexes have been altered.' => 'S\'han modificat els índexs.',
|
||||
'Indexes have been altered.' => 'S\'han modificat els índex.',
|
||||
'Indexes' => 'Índexs',
|
||||
'Alter indexes' => 'Modifica els índexs',
|
||||
'Alter indexes' => 'Modifica els índex',
|
||||
'Add next' => 'Afegeix el següent',
|
||||
'Language' => 'Idioma',
|
||||
'Select' => 'Selecciona',
|
||||
@@ -74,11 +73,11 @@ $translations = array(
|
||||
'No commands to execute.' => 'Cap comanda per executar.',
|
||||
'Unable to upload a file.' => 'Impossible adjuntar el fitxer.',
|
||||
'File upload' => 'Adjunta un fitxer',
|
||||
'File uploads are disabled.' => 'L\'ddjunció de fitxers està desactivada.',
|
||||
'File uploads are disabled.' => 'La pujada de fitxers està desactivada.',
|
||||
'Routine has been called, %d row(s) affected.' => array('S\'ha cridat la rutina, %d registre modificat.', 'S\'ha cridat la rutina, %d registres modificats.'),
|
||||
'Call' => 'Crida',
|
||||
'No extension' => 'Cap extensió',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'No hi ha cap de les extensions PHP soporatades (%s) disponible.',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'No hi ha cap de les extensions PHP suportades (%s) disponible.',
|
||||
'Session support must be enabled.' => 'Cal que estigui permès l\'us de sessions.',
|
||||
'Session expired, please login again.' => 'La sessió ha expirat, torna a iniciar-ne una.',
|
||||
'Text length' => 'Longitud del text',
|
||||
@@ -86,7 +85,7 @@ $translations = array(
|
||||
'Foreign key has been altered.' => 'S\'ha modificat la clau forana.',
|
||||
'Foreign key has been created.' => 'S\'ha creat la clau forana.',
|
||||
'Foreign key' => 'Clau forana',
|
||||
'Target table' => 'Taula de destí',
|
||||
'Target table' => 'Taula de destinació',
|
||||
'Change' => 'Canvi',
|
||||
'Source' => 'Font',
|
||||
'Target' => 'Destí',
|
||||
@@ -96,7 +95,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Tipus d\'índex',
|
||||
'Column (length)' => 'Columna (longitud)',
|
||||
'length' => 'longitud',
|
||||
'View has been dropped.' => 'S\'ha suprimit la vista.',
|
||||
'View has been altered.' => 'S\'ha modificat la vista.',
|
||||
'View has been created.' => 'S\'ha creat la vista.',
|
||||
@@ -139,7 +138,7 @@ $translations = array(
|
||||
'Grant' => 'Grant',
|
||||
'Revoke' => 'Revoke',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Les dades POST són massa grans. Redueix les dades o incrementa la directiva de configuració %s.',
|
||||
'Logged as: %s' => 'Connectat com: %s',
|
||||
'Logged as: %s' => 'Connectat com a: %s',
|
||||
'Move up' => 'Mou a dalt',
|
||||
'Move down' => 'Mou a baix',
|
||||
'Functions' => 'Funcions',
|
||||
@@ -204,7 +203,7 @@ $translations = array(
|
||||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
||||
'History' => 'Història',
|
||||
'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.' => 'Les columnes origen i destí han de ser del mateix tipus, la columna destí ha d\'estar indexada i les dades referenciades han d\'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.' => 'Les columnes d\'origen i de destinació han de ser del mateix tipus, la columna de destinació ha d\'estar indexada i les dades referenciades han d\'existir.',
|
||||
'E-mail' => 'Correu electrònic',
|
||||
'From' => 'De',
|
||||
'Subject' => 'Assumpte',
|
||||
|
@@ -23,16 +23,16 @@ $translations = array(
|
||||
'No extension' => 'Žádné rozšíření',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).',
|
||||
'Connecting to privileged ports is not allowed.' => 'Připojování k privilegovaným portům není povoleno.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Zakažte %s nebo povolte extenze %s nebo %s.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Zakažte %s nebo povolte rozšíření %s nebo %s.',
|
||||
'Session support must be enabled.' => 'Session proměnné musí být povolené.',
|
||||
'Session expired, please login again.' => 'Session vypršela, přihlašte se prosím znovu.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Akce bude provedena po úspěšném přihlášení se stejnými přihlašovacími údaji.',
|
||||
'%s version: %s through PHP extension %s' => 'Verze %s: %s přes PHP rozšíření %s',
|
||||
'Refresh' => 'Obnovit',
|
||||
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
|
||||
'Privileges' => 'Oprávnění',
|
||||
'Create user' => 'Vytvořit uživatele',
|
||||
'User has been dropped.' => 'Uživatel byl odstraněn.',
|
||||
@@ -43,14 +43,14 @@ $translations = array(
|
||||
'Routine' => 'Procedura',
|
||||
'Grant' => 'Povolit',
|
||||
'Revoke' => 'Zakázat',
|
||||
|
||||
|
||||
'Process list' => 'Seznam procesů',
|
||||
'%d process(es) have been killed.' => array('Byl ukončen %d proces.', 'Byly ukončeny %d procesy.', 'Bylo ukončeno %d procesů.'),
|
||||
'Kill' => 'Ukončit',
|
||||
|
||||
|
||||
'Variables' => 'Proměnné',
|
||||
'Status' => 'Stav',
|
||||
|
||||
|
||||
'SQL command' => 'SQL příkaz',
|
||||
'%d query(s) executed OK.' => array('%d příkaz proběhl v pořádku.', '%d příkazy proběhly v pořádku.', '%d příkazů proběhlo v pořádku.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Příkaz proběhl v pořádku, byl změněn %d záznam.', 'Příkaz proběhl v pořádku, byly změněny %d záznamy.', 'Příkaz proběhl v pořádku, bylo změněno %d záznamů.'),
|
||||
@@ -67,7 +67,7 @@ $translations = array(
|
||||
'History' => 'Historie',
|
||||
'Clear' => 'Vyčistit',
|
||||
'Edit all' => 'Upravit vše',
|
||||
|
||||
|
||||
'File upload' => 'Nahrání souboru',
|
||||
'From server' => 'Ze serveru',
|
||||
'Webserver file %s' => 'Soubor %s na webovém serveru',
|
||||
@@ -79,16 +79,15 @@ $translations = array(
|
||||
'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 are offline.' => 'Jste offline.',
|
||||
|
||||
|
||||
'Export' => 'Export',
|
||||
'Output' => 'Výstup',
|
||||
'open' => 'otevřít',
|
||||
'save' => 'uložit',
|
||||
'Format' => 'Formát',
|
||||
'Data' => 'Data',
|
||||
|
||||
|
||||
'Database' => 'Databáze',
|
||||
'database' => 'databáze',
|
||||
'DB' => 'DB',
|
||||
'Use' => 'Vybrat',
|
||||
'Select database' => 'Vybrat databázi',
|
||||
@@ -101,10 +100,10 @@ $translations = array(
|
||||
'Alter database' => 'Pozměnit databázi',
|
||||
'Create database' => 'Vytvořit databázi',
|
||||
'Database schema' => 'Schéma databáze',
|
||||
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Trvalý odkaz',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
@@ -128,7 +127,7 @@ $translations = array(
|
||||
'Copy' => 'Zkopírovat',
|
||||
'Tables have been copied.' => 'Tabulky byly zkopírovány.',
|
||||
'overwrite' => 'přepsat',
|
||||
|
||||
|
||||
'Routines' => 'Procedury a funkce',
|
||||
'Routine has been called, %d row(s) affected.' => array('Procedura byla zavolána, byl změněn %d záznam.', 'Procedura byla zavolána, byly změněny %d záznamy.', 'Procedura byla zavolána, bylo změněno %d záznamů.'),
|
||||
'Call' => 'Zavolat',
|
||||
@@ -141,7 +140,7 @@ $translations = array(
|
||||
'Alter function' => 'Změnit funkci',
|
||||
'Alter procedure' => 'Změnit proceduru',
|
||||
'Return type' => 'Návratový typ',
|
||||
|
||||
|
||||
'Events' => 'Události',
|
||||
'Event has been dropped.' => 'Událost byla odstraněna.',
|
||||
'Event has been altered.' => 'Událost byla změněna.',
|
||||
@@ -154,7 +153,7 @@ $translations = array(
|
||||
'Start' => 'Začátek',
|
||||
'End' => 'Konec',
|
||||
'On completion preserve' => 'Po dokončení zachovat',
|
||||
|
||||
|
||||
'Tables' => 'Tabulky',
|
||||
'Tables and views' => 'Tabulky a pohledy',
|
||||
'Table' => 'Tabulka',
|
||||
@@ -187,12 +186,12 @@ $translations = array(
|
||||
'Move down' => 'Přesunout dolů',
|
||||
'Remove' => 'Odebrat',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Byl překročen maximální povolený počet polí. Zvyšte prosím %s.',
|
||||
|
||||
|
||||
'Partition by' => 'Rozdělit podle',
|
||||
'Partitions' => 'Oddíly',
|
||||
'Partition name' => 'Název oddílu',
|
||||
'Values' => 'Hodnoty',
|
||||
|
||||
|
||||
'View' => 'Pohled',
|
||||
'Materialized view' => 'Materializovaný pohled',
|
||||
'View has been dropped.' => 'Pohled byl odstraněn.',
|
||||
@@ -200,14 +199,14 @@ $translations = array(
|
||||
'View has been created.' => 'Pohled byl vytvořen.',
|
||||
'Alter view' => 'Pozměnit pohled',
|
||||
'Create view' => 'Vytvořit pohled',
|
||||
|
||||
|
||||
'Indexes' => 'Indexy',
|
||||
'Indexes have been altered.' => 'Indexy byly změněny.',
|
||||
'Alter indexes' => 'Pozměnit indexy',
|
||||
'Add next' => 'Přidat další',
|
||||
'Index Type' => 'Typ indexu',
|
||||
'Column (length)' => 'Sloupec (délka)',
|
||||
|
||||
'length' => 'délka',
|
||||
|
||||
'Foreign keys' => 'Cizí klíče',
|
||||
'Foreign key' => 'Cizí klíč',
|
||||
'Foreign key has been dropped.' => 'Cizí klíč byl odstraněn.',
|
||||
@@ -223,7 +222,7 @@ $translations = array(
|
||||
'ON DELETE' => 'Při smazání',
|
||||
'ON UPDATE' => 'Při změně',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Zdrojové a cílové sloupce musí mít stejný datový typ, nad cílovými sloupci musí být definován index a odkazovaná data musí existovat.',
|
||||
|
||||
|
||||
'Triggers' => 'Triggery',
|
||||
'Add trigger' => 'Přidat trigger',
|
||||
'Trigger has been dropped.' => 'Trigger byl odstraněn.',
|
||||
@@ -234,7 +233,7 @@ $translations = array(
|
||||
'Time' => 'Čas',
|
||||
'Event' => 'Událost',
|
||||
'Name' => 'Název',
|
||||
|
||||
|
||||
'select' => 'vypsat',
|
||||
'Select' => 'Vypsat',
|
||||
'Select data' => 'Vypsat data',
|
||||
@@ -256,20 +255,20 @@ $translations = array(
|
||||
'%d row(s)' => array('%d řádek', '%d řádky', '%d řádků'),
|
||||
'Page' => 'Stránka',
|
||||
'last' => 'poslední',
|
||||
'Load more data' => 'Nahrát další data',
|
||||
'Loading' => 'Nahrává se',
|
||||
'Load more data' => 'Načíst další data',
|
||||
'Loading' => 'Načítá se',
|
||||
'Whole result' => 'Celý výsledek',
|
||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtů'),
|
||||
|
||||
|
||||
'Import' => 'Import',
|
||||
'%d row(s) have been imported.' => array('Byl importován %d záznam.', 'Byly importovány %d záznamy.', 'Bylo importováno %d záznamů.'),
|
||||
'File must be in UTF-8 encoding.' => 'Soubor musí být v kódování UTF-8.',
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Změnit',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klikněte na políčko, které chcete změnit.',
|
||||
'Use edit link to modify this value.' => 'Ke změně této hodnoty použijte odkaz upravit.',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Položka%s byla vložena.',
|
||||
'Item has been deleted.' => 'Položka byla smazána.',
|
||||
@@ -290,14 +289,14 @@ $translations = array(
|
||||
'Clone' => 'Klonovat',
|
||||
'Delete' => 'Smazat',
|
||||
'You have no privileges to update this table.' => 'Nemáte oprávnění editovat tuto tabulku.',
|
||||
|
||||
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'Odesílatel',
|
||||
'Subject' => 'Předmět',
|
||||
'Attachments' => 'Přílohy',
|
||||
'Send' => 'Odeslat',
|
||||
'%d e-mail(s) have been sent.' => array('Byl odeslán %d e-mail.', 'Byly odeslány %d e-maily.', 'Bylo odesláno %d e-mailů.'),
|
||||
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Čísla',
|
||||
'Date and time' => 'Datum a čas',
|
||||
@@ -307,7 +306,7 @@ $translations = array(
|
||||
'Network' => 'Síť',
|
||||
'Geometry' => 'Geometrie',
|
||||
'Relations' => 'Vztahy',
|
||||
|
||||
|
||||
'Editor' => 'Editor',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
@@ -318,11 +317,11 @@ $translations = array(
|
||||
'now' => 'teď',
|
||||
'yes' => 'ano',
|
||||
'no' => 'ne',
|
||||
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Soubor existuje.',
|
||||
'Please use one of the extensions %s.' => 'Prosím použijte jednu z koncovek %s.',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Pozměnit schéma',
|
||||
'Create schema' => 'Vytvořit schéma',
|
||||
@@ -331,7 +330,7 @@ $translations = array(
|
||||
'Schema has been altered.' => 'Schéma bylo změněno.',
|
||||
'Schema' => 'Schéma',
|
||||
'Invalid schema.' => 'Nesprávné schéma.',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Sekvence',
|
||||
'Create sequence' => 'Vytvořit sekvenci',
|
||||
@@ -339,11 +338,19 @@ $translations = array(
|
||||
'Sequence has been created.' => 'Sekvence byla vytvořena.',
|
||||
'Sequence has been altered.' => 'Sekvence byla změněna.',
|
||||
'Alter sequence' => 'Pozměnit sekvenci',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Uživatelské typy',
|
||||
'Create type' => 'Vytvořit typ',
|
||||
'Type has been dropped.' => 'Typ byl odstraněn.',
|
||||
'Type has been created.' => 'Typ byl vytvořen.',
|
||||
'Alter type' => 'Pozměnit typ',
|
||||
|
||||
// Table check constraints
|
||||
'Checks' => 'Kontroly',
|
||||
'Create check' => 'Vytvořit kontrolu',
|
||||
'Alter check' => 'Změnit kontrolu',
|
||||
'Check has been created.' => 'Kontrola byla vytvořena.',
|
||||
'Check has been altered.' => 'Kontrola byla změněna.',
|
||||
'Check has been dropped.' => 'Kontrola byla odstraněna.',
|
||||
);
|
||||
|
@@ -64,7 +64,6 @@ $translations = array(
|
||||
'Format' => 'Format',
|
||||
'Data' => 'Data',
|
||||
'Database' => 'Database',
|
||||
'database' => 'database',
|
||||
'Use' => 'Brug',
|
||||
'Select database' => 'Vælg database',
|
||||
'Invalid database.' => 'Ugyldig database.',
|
||||
@@ -165,7 +164,7 @@ $translations = array(
|
||||
'Alter indexes' => 'Ændre indekser',
|
||||
'Add next' => 'Læg til næste',
|
||||
'Index Type' => 'Indekstype',
|
||||
'Column (length)' => 'Kolonne (længde)',
|
||||
'length' => 'længde',
|
||||
'Foreign keys' => 'Fremmednøgler',
|
||||
'Foreign key' => 'Fremmednøgle',
|
||||
'Foreign key has been dropped.' => 'Fremmednøglen er slettet.',
|
||||
|
@@ -32,8 +32,7 @@ $translations = array(
|
||||
'Create database' => 'Datenbank erstellen',
|
||||
'SQL command' => 'SQL-Kommando',
|
||||
'Logout' => 'Abmelden',
|
||||
'database' => 'Datenbank',
|
||||
'Use' => 'Benutzung',
|
||||
'Use' => 'Auswählen',
|
||||
'No tables.' => 'Keine Tabellen.',
|
||||
'select' => 'zeigen',
|
||||
'Item has been deleted.' => 'Datensatz wurde gelöscht.',
|
||||
@@ -97,7 +96,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Index-Typ',
|
||||
'Column (length)' => 'Spalte (Länge)',
|
||||
'length' => 'Länge',
|
||||
'View has been dropped.' => 'View wurde entfernt.',
|
||||
'View has been altered.' => 'View wurde geändert.',
|
||||
'View has been created.' => 'View wurde erstellt.',
|
||||
@@ -280,10 +279,25 @@ $translations = array(
|
||||
'If you did not send this request from Adminer then close this page.' => 'Wenn Sie diese Anfrage nicht von Adminer gesendet haben, schließen Sie diese Seite.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Sie können eine große SQL-Datei per FTP hochladen und dann vom Server importieren.',
|
||||
'You are offline.' => 'Sie sind offline.',
|
||||
'You have no privileges to update this table.' => 'Sie haben keine Rechte, um diese Tabelle zu aktualisieren.' ,
|
||||
'You have no privileges to update this table.' => 'Sie haben keine Rechte, diese Tabelle zu aktualisieren.',
|
||||
'Saving' => 'Speichere',
|
||||
'yes' => 'ja',
|
||||
'no' => 'nein',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Das Master-Passwort ist abgelaufen. <a href="https://www.adminer.org/de/extension/"%s>Implementieren</a> Sie die %s Methode, um es permanent zu machen.',
|
||||
'%d / ' => '%d / ',
|
||||
'Drop %s?' => '%s entfernen?',
|
||||
'Materialized view' => 'Strukturierte Ansicht',
|
||||
'Vacuum' => 'Vacuum',
|
||||
'overwrite' => 'überschreiben',
|
||||
'DB' => 'DB',
|
||||
'ATTACH queries are not supported.' => 'ATTACH Abfragen werden nicht unterstützt.',
|
||||
'Warnings' => 'Warnungen',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer unterstützt den Zugriff auf eine Datenbank ohne Passwort nicht, <a href="https://www.adminer.org/en/password/"%s>mehr Informationen</a>.',
|
||||
'Full table scan' => 'Vollständige Überprüfung der Tabelle',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Die Aktion wird nach erfolgreicher Anmeldung mit denselben Anmeldedaten ausgeführt.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Die Verbindung zu privilegierten Ports ist nicht erlaubt.',
|
||||
'There is a space in the input password which might be the cause.' => 'Es gibt ein Leerzeichen im Eingabepasswort, das die Ursache sein könnte.',
|
||||
'Unknown error.' => 'Unbekannter Fehler.',
|
||||
'Database does not support password.' => 'Die Datenbank unterstützt kein Passwort.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Deaktivieren Sie %s oder aktivieren Sie die Erweiterungen %s oder %s.',
|
||||
);
|
||||
|
@@ -11,22 +11,22 @@ $translations = array(
|
||||
'Logged as: %s' => 'Συνδεθήκατε ως %s',
|
||||
'Logout successful.' => 'Αποσυνδεθήκατε με επιτυχία.',
|
||||
'Invalid credentials.' => 'Εσφαλμένα Διαπιστευτήρια.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Επανηλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτό.', 'Επανηλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτά.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Έλειξε ο Κύριος Κωδικός. <a href="https://www.adminer.org/en/extension/"%s>Ενεργοποιήστε</a> τη μέθοδο %s για να τον κάνετε μόνιμο.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Επανειλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτό.', 'Επανειλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτά.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Έληξε ο Κύριος Κωδικός. <a href="https://www.adminer.org/en/extension/"%s>Ενεργοποιήστε</a> τη μέθοδο %s για να τον κάνετε μόνιμο.',
|
||||
'Language' => 'Γλώσσα',
|
||||
'Invalid CSRF token. Send the form again.' => 'Άκυρο κουπόνι CSRF. Στείλτε τη φόρμα ξανά.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Αν δε στείλατε αυτό το αίτημα από το Adminer, τότε κλείστε αυτή τη σελίδα.',
|
||||
'No extension' => 'Χωρίς Επεκτάσεις',
|
||||
'No extension' => 'Καμία Επέκταση',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Καμία από τις υποστηριζόμενες επεκτάσεις PHP (%s) δεν είναι διαθέσιμη.',
|
||||
'Session support must be enabled.' => 'Πρέπει να είναι ενεργοποιημένη η υποστήριξη συνεδριών.',
|
||||
'Session expired, please login again.' => 'Η συνεδρία έληξε, παρακαλώ συνδεθείτε ξανά.',
|
||||
'%s version: %s through PHP extension %s' => '%s έκδοση: %s μέσω επέκτασης PHP %s',
|
||||
'Refresh' => 'Ανανέωση',
|
||||
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Προνόμια',
|
||||
|
||||
'Privileges' => 'Δικαιώματα',
|
||||
'Create user' => 'Δημιουργία Χρήστη',
|
||||
'User has been dropped.' => 'Ο Χρήστης διαγράφηκε.',
|
||||
'User has been altered.' => 'Ο Χρήστης τροποποιήθηκε.',
|
||||
@@ -36,18 +36,18 @@ $translations = array(
|
||||
'Routine' => 'Ρουτίνα',
|
||||
'Grant' => 'Παραχώρηση',
|
||||
'Revoke' => 'Ανάκληση',
|
||||
|
||||
|
||||
'Process list' => 'Λίστα διεργασιών',
|
||||
'%d process(es) have been killed.' => array('Τερματίστηκαν %d διεργασία.', 'Τερματίστηκαν %d διεργασίες.'),
|
||||
'%d process(es) have been killed.' => array('Τερματίστηκε %d διεργασία.', 'Τερματίστηκαν %d διεργασίες.'),
|
||||
'Kill' => 'Τερματισμός',
|
||||
|
||||
|
||||
'Variables' => 'Μεταβλητές',
|
||||
'Status' => 'Κατάσταση',
|
||||
|
||||
|
||||
'SQL command' => 'Εντολή SQL',
|
||||
'%d query(s) executed OK.' => array('Το ερώτημα %d εκτελέστηκε ΟΚ.', 'Τα ερώτηματα %d εκτελέστηκαν ΟΚ.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Το ερώτημα εκτελέστηκε ΟΚ, επιρρεάστηκε %d σειρά.', 'Το ερώτημα εκτελέστηκε ΟΚ, επιρρεάστηκαν %d σειρές.'),
|
||||
'No commands to execute.' => 'Δεν υπάρχει εντολή να εκτελεστεί.',
|
||||
'Query executed OK, %d row(s) affected.' => array('Το ερώτημα εκτελέστηκε ΟΚ, επηρεάστηκε %d σειρά.', 'Το ερώτημα εκτελέστηκε ΟΚ, επηρεάστηκαν %d σειρές.'),
|
||||
'No commands to execute.' => 'Δεν υπάρχουν εντολές να εκτελεστούν.',
|
||||
'Error in query' => 'Σφάλμα στο ερώτημα',
|
||||
'Execute' => 'Εκτέλεση',
|
||||
'Stop on error' => 'Διακοπή όταν υπάρχει σφάλμα',
|
||||
@@ -57,19 +57,19 @@ $translations = array(
|
||||
'History' => 'Ιστορικό',
|
||||
'Clear' => 'Καθαρισμός',
|
||||
'Edit all' => 'Επεξεργασία όλων',
|
||||
|
||||
'File upload' => 'Ανέβασμα αρχείου',
|
||||
|
||||
'File upload' => 'Μεταφόρτωση αρχείου',
|
||||
'From server' => 'Από διακομιστή',
|
||||
'Webserver file %s' => 'Αρχείο %s από διακομιστή web',
|
||||
'Run file' => 'Εκτέλεση αρχείου',
|
||||
'File does not exist.' => 'Το αρχείο δεν υπάρχει.',
|
||||
'File uploads are disabled.' => 'Έχει απενεργοποιηθεί το ανέβασμα αρχείων.',
|
||||
'Unable to upload a file.' => 'Δεν είναι δυνατόν να ανεβεί το αρχείο.',
|
||||
'Maximum allowed file size is %sB.' => 'Το μέγιστο επιτρεπόμενο μέγεθος αρχείο για ανέβασμα είναι %sB.',
|
||||
'File uploads are disabled.' => 'Έχει απενεργοποιηθεί η μεταφόρτωση αρχείων.',
|
||||
'Unable to upload a file.' => 'Αδυναμία μεταφόρτωσης αρχείου.',
|
||||
'Maximum allowed file size is %sB.' => 'Το μέγιστο επιτρεπόμενο μέγεθος αρχείου είναι %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Πολλά δεδομένα POST. Μείωστε τα περιεχόμενα ή αυξήστε την σχετική ρύθμιση %s.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Μπορείτε να ανεβάσετε ένα μεγάλο αρχείο SQL μέσω FTP και να το εισάγετε από το διακομιστή.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Μπορείτε να μεταφορτώσετε ένα μεγάλο αρχείο SQL μέσω FTP και να το εισάγετε από το διακομιστή.',
|
||||
'You are offline.' => 'Βρίσκεστε εκτός σύνδεσης.',
|
||||
|
||||
|
||||
'Export' => 'Εξαγωγή',
|
||||
'Output' => 'Αποτέλεσμα',
|
||||
'open' => 'άνοιγμα',
|
||||
@@ -77,12 +77,11 @@ $translations = array(
|
||||
'Saving' => 'Γίνεται Αποθήκευση',
|
||||
'Format' => 'Μορφή',
|
||||
'Data' => 'Δεδομένα',
|
||||
|
||||
|
||||
'Database' => 'Β. Δεδομένων',
|
||||
'database' => 'β. δεδομένων',
|
||||
'Use' => 'χρήση',
|
||||
'Select database' => 'Επιλέξτε Β.Δ.',
|
||||
'Invalid database.' => 'Άκυρη Β.Δ.',
|
||||
'Invalid database.' => 'Λανθασμένη Β.Δ.',
|
||||
'Database has been dropped.' => 'Η Β.Δ. διαγράφηκε.',
|
||||
'Databases have been dropped.' => 'Οι Β.Δ. διαγράφηκαν.',
|
||||
'Database has been created.' => 'Η Β.Δ. δημιουργήθηκε.',
|
||||
@@ -91,10 +90,10 @@ $translations = array(
|
||||
'Alter database' => 'Τροποποίηση Β.Δ.',
|
||||
'Create database' => 'Δημιουργία Β.Δ.',
|
||||
'Database schema' => 'Σχήμα Β.Δ.',
|
||||
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Μόνιμος Σύνδεσμος',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => '.',
|
||||
'0123456789' => '0123456789',
|
||||
@@ -111,26 +110,26 @@ $translations = array(
|
||||
'Check' => 'Έλεγχος',
|
||||
'Repair' => 'Επιδιόρθωση',
|
||||
'Truncate' => 'Περικοπή',
|
||||
'Tables have been truncated.' => 'Οι πίνακες περικόπτηκαν.',
|
||||
'Tables have been truncated.' => 'Οι πίνακες περικόπηκαν.',
|
||||
'Move to other database' => 'Μεταφορά σε άλλη Β.Δ.',
|
||||
'Move' => 'Μεταφορά',
|
||||
'Tables have been moved.' => 'Οι πίνακες μεταφέρθηκαν.',
|
||||
'Copy' => 'Αντιγραφή',
|
||||
'Tables have been copied.' => 'Οι πίνακες αντιγράφηκαν.',
|
||||
|
||||
|
||||
'Routines' => 'Ρουτίνες',
|
||||
'Routine has been called, %d row(s) affected.' => array('Η ρουτίνα εκτελέστηκε, επιρρεάστηκε %d σειρά.', 'Η ρουτίνα εκτελέστηκε, επιρρεάστηκαν %d σειρές.'),
|
||||
'Routine has been called, %d row(s) affected.' => array('Η ρουτίνα εκτελέστηκε, επηρεάστηκε %d σειρά.', 'Η ρουτίνα εκτελέστηκε, επηρεάστηκαν %d σειρές.'),
|
||||
'Call' => 'Εκτέλεση',
|
||||
'Parameter name' => 'Όνομα παραμέτρου',
|
||||
'Create procedure' => 'Δημιουργία διαδικασίας',
|
||||
'Create function' => 'Δημιουργία Λειτουργίας',
|
||||
'Create function' => 'Δημιουργία Συνάρτησης',
|
||||
'Routine has been dropped.' => 'Η ρουτίνα διαγράφηκε.',
|
||||
'Routine has been altered.' => 'Η ρουτίνα τροποποιήθηκε.',
|
||||
'Routine has been created.' => 'Η ρουτίνα δημιουργήθηκε.',
|
||||
'Alter function' => 'Τροποποίηση λειτουργίας',
|
||||
'Alter procedure' => 'Τροποποίηση διαδικασίας',
|
||||
'Return type' => 'Επιστρεφόμενος τύπος',
|
||||
|
||||
|
||||
'Events' => 'Γεγονός',
|
||||
'Event has been dropped.' => 'Το γεγονός διαγράφηκε.',
|
||||
'Event has been altered.' => 'Το γεγονός τροποποιήθηκε.',
|
||||
@@ -143,7 +142,7 @@ $translations = array(
|
||||
'Start' => 'Έναρξη',
|
||||
'End' => 'Λήξη',
|
||||
'On completion preserve' => 'Κατά την ολοκλήρωση διατήρησε',
|
||||
|
||||
|
||||
'Tables' => 'Πίνακες',
|
||||
'Tables and views' => 'Πίνακες και Προβολές',
|
||||
'Table' => 'Πίνακας',
|
||||
@@ -151,7 +150,7 @@ $translations = array(
|
||||
'Alter table' => 'Τροποποίηση πίνακα',
|
||||
'Create table' => 'Δημιουργία πίνακα',
|
||||
'Table has been dropped.' => 'Ο πίνακας διαγράφηκε.',
|
||||
'Tables have been dropped.' => 'Οι πινακες διαγράφηκαν.',
|
||||
'Tables have been dropped.' => 'Οι πίνακες διαγράφηκαν.',
|
||||
'Tables have been optimized.' => 'Οι πίνακες βελτιστοποιήθηκαν.',
|
||||
'Table has been altered.' => 'Ο πίνακας τροποποιήθηκε.',
|
||||
'Table has been created.' => 'Ο πίνακας δημιουργήθηκε.',
|
||||
@@ -175,12 +174,12 @@ $translations = array(
|
||||
'Move down' => 'Μετακίνηση προς τα κάτω',
|
||||
'Remove' => 'Αφαίρεση',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Υπέρβαση μέγιστου επιτρεπόμενου αριθμού πεδίων. Παρακαλώ αυξήστε %s.',
|
||||
|
||||
|
||||
'Partition by' => 'Τμηματοποίηση ανά',
|
||||
'Partitions' => 'Τμήματα',
|
||||
'Partition name' => 'Όνομα Τμήματος',
|
||||
'Values' => 'Τιμές',
|
||||
|
||||
|
||||
'View' => 'Προβολή',
|
||||
'Materialized view' => 'Υλοποιημένη προβολή',
|
||||
'View has been dropped.' => 'Η προβολή διαγράφηκε.',
|
||||
@@ -188,14 +187,14 @@ $translations = array(
|
||||
'View has been created.' => 'Η προβολή δημιουργήθηκε.',
|
||||
'Alter view' => 'Τροποποίηση προβολής',
|
||||
'Create view' => 'Δημιουργία προβολής',
|
||||
|
||||
|
||||
'Indexes' => 'Δείκτες',
|
||||
'Indexes have been altered.' => 'Οι δείκτες τροποποιήθηκαν.',
|
||||
'Alter indexes' => 'Τροποποίηση δεικτών',
|
||||
'Add next' => 'Προσθήκη επόμενου',
|
||||
'Index Type' => 'Τύπος δείκτη',
|
||||
'Column (length)' => 'Στήλη (μήκος)',
|
||||
|
||||
'length' => 'μήκος',
|
||||
|
||||
'Foreign keys' => 'Εξαρτημένα κλειδιά',
|
||||
'Foreign key' => 'Εξαρτημένο κλειδί',
|
||||
'Foreign key has been dropped.' => 'Το εξαρτημένο κλειδί διαγράφηκε.',
|
||||
@@ -210,8 +209,8 @@ $translations = array(
|
||||
'Add foreign key' => 'Προσθήκη εξαρτημένου κλειδιού',
|
||||
'ON DELETE' => 'ΚΑΤΑ ΤΗ ΔΙΑΓΡΑΦΗ',
|
||||
'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' => 'Εναύσματα',
|
||||
'Add trigger' => 'Προσθήκη εναύσματος',
|
||||
'Trigger has been dropped.' => 'Το έναυσμα διαγράφηκε.',
|
||||
@@ -222,7 +221,7 @@ $translations = array(
|
||||
'Time' => 'Ώρα',
|
||||
'Event' => 'Γεγονός',
|
||||
'Name' => 'Όνομα',
|
||||
|
||||
|
||||
'select' => 'επιλογή',
|
||||
'Select' => 'Επιλογή',
|
||||
'Select data' => 'Επιλέξτε δεδομένα',
|
||||
@@ -248,21 +247,21 @@ $translations = array(
|
||||
'Loading' => 'Φορτώνει',
|
||||
'Whole result' => 'Όλο το αποτέλεσμα',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
|
||||
|
||||
'Import' => 'Εισαγωγή',
|
||||
'%d row(s) have been imported.' => array('$d σειρά εισήχθη.', '%d σειρές εισήχθησαν.'),
|
||||
'File must be in UTF-8 encoding.' => 'Το αρχείο πρέπει να έχει κωδικοποίηση UTF-8.',
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Τροποποίηση',
|
||||
'Ctrl+click on a value to modify it.' => 'Πιέστε Ctrl+click σε μια τιμή για να την τροποποιήσετε.',
|
||||
'Use edit link to modify this value.' => 'Χρησιμοποιήστε το σύνδεσμο επεξεργασία για να τροποποιήσετε την τιμή.',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Η εγγραφή%s εισήχθη.',
|
||||
'Item has been deleted.' => 'Η εγγραφή διαγράφηκε.',
|
||||
'Item has been updated.' => 'Η εγγραφή ενημερώθηκε.',
|
||||
'%d item(s) have been affected.' => array('Επιρρεάστηκε %d εγγραφή.', 'Επιρρεάστηκαν %d εγγραφές.'),
|
||||
'%d item(s) have been affected.' => array('Επηρεάστηκε %d εγγραφή.', 'Επηρεάστηκαν %d εγγραφές.'),
|
||||
'New item' => 'Νέα εγγραφή',
|
||||
'original' => 'πρωτότυπο',
|
||||
// label for value '' in enum data type
|
||||
@@ -274,17 +273,17 @@ $translations = array(
|
||||
'Save and continue edit' => 'Αποθήκευση και συνέχεια επεξεργασίας',
|
||||
'Save and insert next' => 'Αποθήκευση και εισαγωγή επόμενου',
|
||||
'Selected' => 'Επιλεγμένα',
|
||||
'Clone' => 'Κλονοποίηση',
|
||||
'Clone' => 'Κλωνοποίηση',
|
||||
'Delete' => 'Διαγραφή',
|
||||
'You have no privileges to update this table.' => 'Δεν έχετε δικαίωμα να τροποποιήσετε αυτό τον πίνακα.',
|
||||
|
||||
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'Από',
|
||||
'Subject' => 'Θέμα',
|
||||
'Attachments' => 'Συνημμένα',
|
||||
'Send' => 'Αποστολή',
|
||||
'%d e-mail(s) have been sent.' => array('%d e-mail απεστάλλει.', '%d e-mail απεστάλλησαν.'),
|
||||
|
||||
'%d e-mail(s) have been sent.' => array('%d e-mail απεστάλη.', '%d e-mail απεστάλησαν.'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Αριθμοί',
|
||||
'Date and time' => 'Ημερομηνία και ώρα',
|
||||
@@ -294,7 +293,7 @@ $translations = array(
|
||||
'Network' => 'Δίκτυο',
|
||||
'Geometry' => 'Γεωμετρία',
|
||||
'Relations' => 'Συσχετήσεις',
|
||||
|
||||
|
||||
'Editor' => 'Επεξεργαστής',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$5/$3/$1',
|
||||
@@ -305,11 +304,11 @@ $translations = array(
|
||||
'now' => 'τώρα',
|
||||
'yes' => 'ναι',
|
||||
'no' => 'όχι',
|
||||
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Το αρχείο υπάρχει.',
|
||||
'Please use one of the extensions %s.' => 'Παρακαλώ χρησιμοποιείστε μια από τις επεκτάσεις %s.',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Τροποποίηση σχήματος',
|
||||
'Create schema' => 'Δημιουργία σχήματος',
|
||||
@@ -318,7 +317,7 @@ $translations = array(
|
||||
'Schema has been altered.' => 'Το σχήμα τροποποιήθηκε.',
|
||||
'Schema' => 'Σχήμα',
|
||||
'Invalid schema.' => 'Άκυρο σχήμα.',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Αλληλουχία',
|
||||
'Create sequence' => 'Δημιουργία αλληλουχίας',
|
||||
@@ -326,7 +325,7 @@ $translations = array(
|
||||
'Sequence has been created.' => 'Η αλληλουχία δημιουργήθηκε.',
|
||||
'Sequence has been altered.' => 'Η αλληλουχία τροποποιήθηκε.',
|
||||
'Alter sequence' => 'Τροποποίηση αλληλουχίας',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Τύποι χρήστη',
|
||||
'Create type' => 'Δημιουργία τύπου',
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'Crear Base de datos',
|
||||
'SQL command' => 'Comando SQL',
|
||||
'Logout' => 'Cerrar sesión',
|
||||
'database' => 'base de datos',
|
||||
'Use' => 'Usar',
|
||||
'No tables.' => 'No existen tablas.',
|
||||
'select' => 'registros',
|
||||
@@ -96,7 +95,7 @@ $translations = array(
|
||||
'ON DELETE' => 'AL BORRAR',
|
||||
'ON UPDATE' => 'AL ACTUALIZAR',
|
||||
'Index Type' => 'Tipo de índice',
|
||||
'Column (length)' => 'Columna (longitud)',
|
||||
'length' => 'longitud',
|
||||
'View has been dropped.' => 'Vista eliminada.',
|
||||
'View has been altered.' => 'Vista modificada.',
|
||||
'View has been created.' => 'Vista creada.',
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'Loo uus andmebaas',
|
||||
'SQL command' => 'SQL-Päring',
|
||||
'Logout' => 'Logi välja',
|
||||
'database' => 'andmebaas',
|
||||
'Use' => 'Kasuta',
|
||||
'No tables.' => 'Tabeleid ei leitud.',
|
||||
'select' => 'kuva',
|
||||
@@ -96,7 +95,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Indeksi tüüp',
|
||||
'Column (length)' => 'Veerg (pikkus)',
|
||||
'length' => 'pikkus',
|
||||
'View has been dropped.' => 'Vaade (VIEW) on edukalt kustutatud.',
|
||||
'View has been altered.' => 'Vaade (VIEW) on edukalt muudetud.',
|
||||
'View has been created.' => 'Vaade (VIEW) on edukalt loodud.',
|
||||
|
@@ -21,10 +21,10 @@ $translations = array(
|
||||
'Session expired, please login again.' => 'نشست پایان یافته، لطفا دوباره وارد شوید.',
|
||||
'%s version: %s through PHP extension %s' => 'نسخه %s : %s توسعه پی اچ پی %s',
|
||||
'Refresh' => 'بازیابی',
|
||||
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'rtl',
|
||||
|
||||
|
||||
'Privileges' => 'امتیازات',
|
||||
'Create user' => 'ایجاد کاربر',
|
||||
'User has been dropped.' => 'کاربر حذف شد.',
|
||||
@@ -35,14 +35,14 @@ $translations = array(
|
||||
'Routine' => 'روتین',
|
||||
'Grant' => 'اعطا',
|
||||
'Revoke' => 'لغو کردن',
|
||||
|
||||
|
||||
'Process list' => 'لیست فرآیند',
|
||||
'%d process(es) have been killed.' => '%d فرآیند متوقف شد.',
|
||||
'Kill' => 'حذف فرآیند',
|
||||
|
||||
|
||||
'Variables' => 'متغیرها',
|
||||
'Status' => 'وضعیت',
|
||||
|
||||
|
||||
'SQL command' => 'دستور SQL',
|
||||
'%d query(s) executed OK.' => '%d کوئری اجرا شد.',
|
||||
'Query executed OK, %d row(s) affected.' => 'کوئری اجرا شد. %d سطر تغیر کرد.',
|
||||
@@ -56,7 +56,7 @@ $translations = array(
|
||||
'History' => 'تاریخ',
|
||||
'Clear' => 'پاک کردن',
|
||||
'Edit all' => 'ویرایش همه',
|
||||
|
||||
|
||||
'File upload' => 'بارگذاری فایل',
|
||||
'From server' => 'از سرور',
|
||||
'Webserver file %s' => '%s فایل وب سرور',
|
||||
@@ -75,9 +75,8 @@ $translations = array(
|
||||
'save' => 'ذخیره',
|
||||
'Format' => 'حذف',
|
||||
'Data' => 'داده',
|
||||
|
||||
|
||||
'Database' => 'پایگاه داده',
|
||||
'database' => 'پایگاه داده',
|
||||
'Use' => 'استفاده',
|
||||
'Select database' => 'انتخاب پایگاه داده',
|
||||
'Invalid database.' => 'پایگاه داده نامعتبر.',
|
||||
@@ -89,10 +88,10 @@ $translations = array(
|
||||
'Alter database' => 'ویرایش پایگاه داده',
|
||||
'Create database' => 'ایجاد پایگاه داده',
|
||||
'Database schema' => 'ساختار پایگاه داده',
|
||||
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'ارتباط دائم',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '۰۱۲۳۴۵۶۷۸۹',
|
||||
@@ -115,7 +114,7 @@ $translations = array(
|
||||
'Tables have been moved.' => 'جدولها انتقال داده شدند.',
|
||||
'Copy' => 'کپی کردن',
|
||||
'Tables have been copied.' => 'جدولها کپی شدند.',
|
||||
|
||||
|
||||
'Routines' => 'روالها',
|
||||
'Routine has been called, %d row(s) affected.' => array('روال فراخوانی شد %d سطر متاثر شد.', 'روال فراخوانی شد %d سطر متاثر شد.'),
|
||||
'Call' => 'صدا زدن',
|
||||
@@ -128,7 +127,7 @@ $translations = array(
|
||||
'Alter function' => 'ویرایش تابع',
|
||||
'Alter procedure' => 'ویرایش زیربرنامه',
|
||||
'Return type' => 'برگرداندن نوع',
|
||||
|
||||
|
||||
'Events' => 'رویدادها',
|
||||
'Event has been dropped.' => 'رویداد حذف شد.',
|
||||
'Event has been altered.' => 'رویداد ویرایش شد.',
|
||||
@@ -141,7 +140,7 @@ $translations = array(
|
||||
'Start' => 'آغاز',
|
||||
'End' => 'پایان',
|
||||
'On completion preserve' => 'تکمیل حفاظت فعال است',
|
||||
|
||||
|
||||
'Tables' => 'جدولها',
|
||||
'Tables and views' => 'جدولها و نمایه ها',
|
||||
'Table' => 'جدول',
|
||||
@@ -173,12 +172,12 @@ $translations = array(
|
||||
'Move down' => 'انتقال به پایین',
|
||||
'Remove' => 'حذف',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'حداکثر تعداد فیلدهای مجاز اشباع شد. لطفا %s را افزایش دهید.',
|
||||
|
||||
|
||||
'Partition by' => 'بخشبندی توسط',
|
||||
'Partitions' => 'بخشبندیها',
|
||||
'Partition name' => 'نام بخش',
|
||||
'Values' => 'مقادیر',
|
||||
|
||||
|
||||
'View' => 'نمایش',
|
||||
'Materialized view' => 'نمایه مادی',
|
||||
'View has been dropped.' => 'نمایش حذف شد.',
|
||||
@@ -186,14 +185,14 @@ $translations = array(
|
||||
'View has been created.' => 'نمایش ایجاد شد.',
|
||||
'Alter view' => 'حذف نمایش',
|
||||
'Create view' => 'ایجاد نمایش',
|
||||
|
||||
|
||||
'Indexes' => 'ایندکسها',
|
||||
'Indexes have been altered.' => 'ایندکسها ویرایش شدند.',
|
||||
'Alter indexes' => 'ویرایش ایندکسها',
|
||||
'Add next' => 'افرودن بعدی',
|
||||
'Index Type' => 'نوع ایندکس',
|
||||
'Column (length)' => 'ستون (طول)',
|
||||
|
||||
'length' => 'طول',
|
||||
|
||||
'Foreign keys' => 'کلیدهای خارجی',
|
||||
'Foreign key' => 'کلید خارجی',
|
||||
'Foreign key has been dropped.' => 'کلید خارجی حذف شد.',
|
||||
@@ -209,7 +208,7 @@ $translations = array(
|
||||
'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.' => 'داده مبدا و مقصد ستونها بایستی شبیه هم باشند.',
|
||||
|
||||
|
||||
'Triggers' => 'تریگرها',
|
||||
'Add trigger' => 'افزودن تریگر',
|
||||
'Trigger has been dropped.' => 'تریگر حذف شد.',
|
||||
@@ -220,7 +219,7 @@ $translations = array(
|
||||
'Time' => 'زمان',
|
||||
'Event' => 'رویداد',
|
||||
'Name' => 'نام',
|
||||
|
||||
|
||||
'select' => 'انتخاب',
|
||||
'Select' => 'انتخاب',
|
||||
'Select data' => 'انتخاب داده',
|
||||
@@ -246,16 +245,16 @@ $translations = array(
|
||||
'Loading' => 'در حال بارگزاری',
|
||||
'Whole result' => 'همه نتایج',
|
||||
'%d byte(s)' => array('%d بایت', '%d بایت'),
|
||||
|
||||
|
||||
'Import' => 'وارد کردن',
|
||||
'%d row(s) have been imported.' => array('%d سطر وارد شد.', '%d سطر وارد شد.'),
|
||||
'File must be in UTF-8 encoding.' => 'فرمت فایل باید UTF-8 باشید.',
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'ویرایش',
|
||||
'Ctrl+click on a value to modify it.' => 'برای ویرایش بر روی مقدار ctrl+click کنید.',
|
||||
'Use edit link to modify this value.' => 'از لینک ویرایش برای ویرایش این مقدار استفاده کنید.',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => '%s آیتم درج شد.',
|
||||
'Item has been deleted.' => 'آیتم حذف شد.',
|
||||
@@ -275,14 +274,14 @@ $translations = array(
|
||||
'Clone' => 'تکثیر',
|
||||
'Delete' => 'حذف',
|
||||
'You have no privileges to update this table.' => 'شما اختیار ویرایش این جدول را ندارید.',
|
||||
|
||||
|
||||
'E-mail' => 'پست الکترونیک',
|
||||
'From' => 'فرستنده',
|
||||
'Subject' => 'موضوع',
|
||||
'Attachments' => 'پیوست ها',
|
||||
'Send' => 'ارسال',
|
||||
'%d e-mail(s) have been sent.' => array('%d ایمیل ارسال شد.', '%d ایمیل ارسال شد.'),
|
||||
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'اعداد',
|
||||
'Date and time' => 'تاریخ و زمان',
|
||||
@@ -292,7 +291,7 @@ $translations = array(
|
||||
'Network' => 'شبکه',
|
||||
'Geometry' => 'هندسه',
|
||||
'Relations' => 'رابطه ها',
|
||||
|
||||
|
||||
'Editor' => 'ویرایشگر',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
@@ -307,7 +306,7 @@ $translations = array(
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'فایل موجود است.',
|
||||
'Please use one of the extensions %s.' => 'لطفا یکی از پسوندها را انتخاب نمائید %s.',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'ویرایش ساختار',
|
||||
'Create schema' => 'ایجاد ساختار',
|
||||
@@ -316,7 +315,7 @@ $translations = array(
|
||||
'Schema has been altered.' => 'ساختار ویرایش شد.',
|
||||
'Schema' => 'ساختار',
|
||||
'Invalid schema.' => 'ساختار نامعتبر.',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'صف ها',
|
||||
'Create sequence' => 'ایجاد صف',
|
||||
@@ -324,7 +323,7 @@ $translations = array(
|
||||
'Sequence has been created.' => 'صف ایجاد شد.',
|
||||
'Sequence has been altered.' => 'صف ویرایش شد.',
|
||||
'Alter sequence' => 'ویرایش صف',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'انواع کاربر',
|
||||
'Create type' => 'ایجاد نوع',
|
||||
|
@@ -22,10 +22,10 @@ $translations = array(
|
||||
'Session expired, please login again.' => 'Istunto vanhentunut, kirjaudu uudelleen.',
|
||||
'%s version: %s through PHP extension %s' => '%s versio: %s PHP-laajennuksella %s',
|
||||
'Refresh' => 'Virkistä',
|
||||
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
|
||||
'Privileges' => 'Oikeudet',
|
||||
'Create user' => 'Luo käyttäjä',
|
||||
'User has been dropped.' => 'Käyttäjä poistettiin.',
|
||||
@@ -36,14 +36,14 @@ $translations = array(
|
||||
'Routine' => 'Rutiini',
|
||||
'Grant' => 'Myönnä',
|
||||
'Revoke' => 'Kiellä',
|
||||
|
||||
|
||||
'Process list' => 'Prosessilista',
|
||||
'%d process(es) have been killed.' => array('%d prosessi lopetettu.', '%d prosessia lopetettu..'),
|
||||
'Kill' => 'Lopeta',
|
||||
|
||||
|
||||
'Variables' => 'Muuttujat',
|
||||
'Status' => 'Tila',
|
||||
|
||||
|
||||
'SQL command' => 'SQL-komento',
|
||||
'%d query(s) executed OK.' => array('%d kysely onnistui.', '%d kyselyä onnistui.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Kysely onnistui, kohdistui %d riviin.', 'Kysely onnistui, kohdistui %d riviin.'),
|
||||
@@ -57,7 +57,7 @@ $translations = array(
|
||||
'History' => 'Historia',
|
||||
'Clear' => 'Tyhjennä',
|
||||
'Edit all' => 'Muokkaa kaikkia',
|
||||
|
||||
|
||||
'File upload' => 'Tiedoston lataus palvelimelle',
|
||||
'From server' => 'Verkkopalvelimella Adminer-kansiossa oleva tiedosto',
|
||||
'Webserver file %s' => 'Verkkopalvelintiedosto %s',
|
||||
@@ -69,7 +69,7 @@ $translations = array(
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Liian suuri POST-datamäärä. Pienennä dataa tai kasvata arvoa %s konfigurointitiedostossa.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Voit ladata suuren SQL-tiedoston FTP:n kautta ja tuoda sen sitten palvelimelta.',
|
||||
'You are offline.' => 'Olet offline-tilassa.',
|
||||
|
||||
|
||||
'Export' => 'Vienti',
|
||||
'Output' => 'Tulos',
|
||||
'open' => 'avaa',
|
||||
@@ -77,9 +77,8 @@ $translations = array(
|
||||
'Saving' => 'Tallennetaan',
|
||||
'Format' => 'Muoto',
|
||||
'Data' => 'Data',
|
||||
|
||||
|
||||
'Database' => 'Tietokanta',
|
||||
'database' => 'tietokanta',
|
||||
'Use' => 'Käytä',
|
||||
'Select database' => 'Valitse tietokanta',
|
||||
'Invalid database.' => 'Tietokanta ei kelpaa.',
|
||||
@@ -91,10 +90,10 @@ $translations = array(
|
||||
'Alter database' => 'Muuta tietokantaa',
|
||||
'Create database' => 'Luo tietokanta',
|
||||
'Database schema' => 'Tietokantakaava',
|
||||
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Pysyvä linkki',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
@@ -117,7 +116,7 @@ $translations = array(
|
||||
'Tables have been moved.' => 'Taulut on siirretty.',
|
||||
'Copy' => 'Kopioi',
|
||||
'Tables have been copied.' => 'Taulut on kopioitu.',
|
||||
|
||||
|
||||
'Routines' => 'Rutiinit',
|
||||
'Routine has been called, %d row(s) affected.' => array('Rutiini kutsuttu, kohdistui %d riviin.', 'Rutiini kutsuttu, kohdistui %d riviin.'),
|
||||
'Call' => 'Kutsua',
|
||||
@@ -130,7 +129,7 @@ $translations = array(
|
||||
'Alter function' => 'Muuta funktiota',
|
||||
'Alter procedure' => 'Muuta proseduuria',
|
||||
'Return type' => 'Palautustyyppi',
|
||||
|
||||
|
||||
'Events' => 'Tapahtumat',
|
||||
'Event has been dropped.' => 'Tapahtuma on poistettu.',
|
||||
'Event has been altered.' => 'Tapahtumaa on muutettu.',
|
||||
@@ -143,7 +142,7 @@ $translations = array(
|
||||
'Start' => 'Aloitus',
|
||||
'End' => 'Lopetus',
|
||||
'On completion preserve' => 'Säilytä, kun valmis',
|
||||
|
||||
|
||||
'Tables' => 'Taulut',
|
||||
'Tables and views' => 'Taulut ja näkymät',
|
||||
'Table' => 'Taulu',
|
||||
@@ -175,12 +174,12 @@ $translations = array(
|
||||
'Move down' => 'Siirrä alas',
|
||||
'Remove' => 'Poista',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Kenttien sallittu enimmäismäärä ylitetty. Kasvata arvoa %s.',
|
||||
|
||||
|
||||
'Partition by' => 'Osioi arvolla',
|
||||
'Partitions' => 'Osiot',
|
||||
'Partition name' => 'Osion nimi',
|
||||
'Values' => 'Arvot',
|
||||
|
||||
|
||||
'View' => 'Näkymä',
|
||||
'Materialized view' => 'Materialisoitunut näkymä',
|
||||
'View has been dropped.' => 'Näkymä on poistettu.',
|
||||
@@ -188,14 +187,14 @@ $translations = array(
|
||||
'View has been created.' => 'Näkymä on luotu.',
|
||||
'Alter view' => 'Muuta näkymää',
|
||||
'Create view' => 'Luo näkymä',
|
||||
|
||||
|
||||
'Indexes' => 'Indeksit',
|
||||
'Indexes have been altered.' => 'Indeksejä on muutettu.',
|
||||
'Alter indexes' => 'Muuta indeksejä',
|
||||
'Add next' => 'Lisää seuraava',
|
||||
'Index Type' => 'Indeksityyppi',
|
||||
'Column (length)' => 'Sarake (pituus)',
|
||||
|
||||
'length' => 'pituus',
|
||||
|
||||
'Foreign keys' => 'Vieraat avaimet',
|
||||
'Foreign key' => 'Vieras avain',
|
||||
'Foreign key has been dropped.' => 'Vieras avain on poistettu.',
|
||||
@@ -211,7 +210,7 @@ $translations = array(
|
||||
'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.' => 'Lähde- ja kohdesarakkeiden tulee olla samaa tietotyyppiä, kohdesarakkeisiin tulee olla indeksi ja dataa, johon viitataan, täytyy olla.',
|
||||
|
||||
|
||||
'Triggers' => 'Liipaisimet',
|
||||
'Add trigger' => 'Lisää liipaisin',
|
||||
'Trigger has been dropped.' => 'Liipaisin on poistettu.',
|
||||
@@ -222,7 +221,7 @@ $translations = array(
|
||||
'Time' => 'Aika',
|
||||
'Event' => 'Tapahtuma',
|
||||
'Name' => 'Nimi',
|
||||
|
||||
|
||||
'select' => 'valitse',
|
||||
'Select' => 'Valitse',
|
||||
'Select data' => 'Valitse data',
|
||||
@@ -248,16 +247,16 @@ $translations = array(
|
||||
'Loading' => 'Ladataan',
|
||||
'Whole result' => 'Koko tulos',
|
||||
'%d byte(s)' => array('%d tavu', '%d tavua'),
|
||||
|
||||
|
||||
'Import' => 'Tuonti',
|
||||
'%d row(s) have been imported.' => array('%d rivi tuotiin.', '%d riviä tuotiin.'),
|
||||
'File must be in UTF-8 encoding.' => 'Tiedoston täytyy olla UTF-8-muodossa.',
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Muuta',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+napsauta arvoa muuttaaksesi.',
|
||||
'Use edit link to modify this value.' => 'Käytä muokkaa-linkkiä muuttaaksesi tätä arvoa.',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Tietue%s lisättiin.',
|
||||
'Item has been deleted.' => 'Tietue poistettiin.',
|
||||
@@ -277,14 +276,14 @@ $translations = array(
|
||||
'Clone' => 'Kloonaa',
|
||||
'Delete' => 'Poista',
|
||||
'You have no privileges to update this table.' => 'Sinulla ei ole oikeutta päivittää tätä taulua.',
|
||||
|
||||
|
||||
'E-mail' => 'S-posti',
|
||||
'From' => 'Lähettäjä',
|
||||
'Subject' => 'Aihe',
|
||||
'Attachments' => 'Liitteet',
|
||||
'Send' => 'Lähetä',
|
||||
'%d e-mail(s) have been sent.' => array('% sähköpostiviestiä lähetetty.', '% sähköpostiviestiä lähetetty.'),
|
||||
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Numerot',
|
||||
'Date and time' => 'Päiväys ja aika',
|
||||
@@ -294,7 +293,7 @@ $translations = array(
|
||||
'Network' => 'Verkko',
|
||||
'Geometry' => 'Geometria',
|
||||
'Relations' => 'Suhteet',
|
||||
|
||||
|
||||
'Editor' => 'Editori',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$5.$3.$1',
|
||||
@@ -305,11 +304,11 @@ $translations = array(
|
||||
'now' => 'nyt',
|
||||
'yes' => 'kyllä',
|
||||
'no' => 'ei',
|
||||
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Tiedosto on olemassa.',
|
||||
'Please use one of the extensions %s.' => 'Käytä jotain %s-laajennuksista.',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Muuta kaavaa',
|
||||
'Create schema' => 'Luo kaava',
|
||||
@@ -318,7 +317,7 @@ $translations = array(
|
||||
'Schema has been altered.' => 'Kaavaa muutettiin.',
|
||||
'Schema' => 'Kaava',
|
||||
'Invalid schema.' => 'Kaava ei kelpaa.',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Sekvenssit',
|
||||
'Create sequence' => 'Luo sekvenssi',
|
||||
@@ -326,7 +325,7 @@ $translations = array(
|
||||
'Sequence has been created.' => 'Sekvenssi on luotu.',
|
||||
'Sequence has been altered.' => 'Sekvenssiä on muutettu.',
|
||||
'Alter sequence' => 'Muuta sekvenssiä',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Käyttäjän tyypit',
|
||||
'Create type' => 'Luo tyyppi',
|
||||
|
@@ -30,7 +30,6 @@ $translations = array(
|
||||
'Create database' => 'Créer une base de données',
|
||||
'SQL command' => 'Requête SQL',
|
||||
'Logout' => 'Déconnexion',
|
||||
'database' => 'base de données',
|
||||
'Use' => 'Utiliser',
|
||||
'No tables.' => 'Aucune table.',
|
||||
'select' => 'select',
|
||||
@@ -94,7 +93,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Type d\'index',
|
||||
'Column (length)' => 'Colonne (longueur)',
|
||||
'length' => 'longueur',
|
||||
'View has been dropped.' => 'La vue a été effacée.',
|
||||
'View has been altered.' => 'La vue a été modifiée.',
|
||||
'View has been created.' => 'La vue a été créée.',
|
||||
@@ -288,4 +287,16 @@ $translations = array(
|
||||
'Default value' => 'Valeur par défaut',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Si vous n\'avez pas envoyé cette requête depuis Adminer, alors fermez cette page.',
|
||||
'You are offline.' => 'Vous êtes hors ligne.',
|
||||
'Drop %s?' => 'Supprimer %s?',
|
||||
'overwrite' => 'écraser',
|
||||
'DB' => 'BD',
|
||||
'ATTACH queries are not supported.' => 'Requêtes ATTACH ne sont pas supportées.',
|
||||
'Warnings' => 'Avertissements',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer ne supporte pas l\'accès aux bases de données sans mot de passe, <a href="https://www.adminer.org/en/password/"%s>plus d\'information</a>.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Cette action sera exécutée après s\'être connecté avec les mêmes données de connexion.',
|
||||
'Connecting to privileged ports is not allowed.' => 'La connexion aux ports privilégiés n\'est pas autorisée.',
|
||||
'There is a space in the input password which might be the cause.' => 'Il y a un espace dans le mot de passe entré qui pourrait en être la cause.',
|
||||
'Unknown error.' => 'Erreur inconnue',
|
||||
'Database does not support password.' => 'La base de données ne support pas les mots de passe',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Désactiver %s ou activer %s or %s extensions.',
|
||||
);
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'Crear Base de datos',
|
||||
'SQL command' => 'Comando SQL',
|
||||
'Logout' => 'Pechar sesión',
|
||||
'database' => 'base de datos',
|
||||
'Use' => 'Usar',
|
||||
'No tables.' => 'Nengunha táboa.',
|
||||
'select' => 'selecciona',
|
||||
@@ -96,7 +95,7 @@ $translations = array(
|
||||
'ON DELETE' => 'AO BORRAR (ON DELETE)',
|
||||
'ON UPDATE' => 'AO ACTUALIZAR (ON UPDATE)',
|
||||
'Index Type' => 'Tipo de índice',
|
||||
'Column (length)' => 'Columna (lonxitude)',
|
||||
'length' => 'lonxitude',
|
||||
'View has been dropped.' => 'Eliminouse a vista.',
|
||||
'View has been altered.' => 'Modificouse a vista.',
|
||||
'View has been created.' => 'Creouse a vista.',
|
||||
|
@@ -30,7 +30,6 @@ $translations = array(
|
||||
'Create database' => 'צור מסד נתונים',
|
||||
'SQL command' => 'שאילתת SQL',
|
||||
'Logout' => 'התנתק',
|
||||
'database' => 'מסד נתונים',
|
||||
'Use' => 'השתמש',
|
||||
'No tables.' => 'אין טבלאות',
|
||||
'select' => 'בחר',
|
||||
@@ -94,7 +93,7 @@ $translations = array(
|
||||
'ON DELETE' => 'בעת מחיקה',
|
||||
'ON UPDATE' => 'בעת עידכון',
|
||||
'Index Type' => 'סוג אינדקס',
|
||||
'Column (length)' => 'עמודה (אורך)',
|
||||
'length' => 'אורך',
|
||||
'View has been dropped.' => 'התצוגה הושלכה',
|
||||
'View has been altered.' => 'התצוגה שונתה',
|
||||
'View has been created.' => 'התצוגה נוצרה',
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'Adatbázis létrehozása',
|
||||
'SQL command' => 'SQL parancs',
|
||||
'Logout' => 'Kilépés',
|
||||
'database' => 'adatbázis',
|
||||
'Use' => 'Használ',
|
||||
'No tables.' => 'Nincs tábla.',
|
||||
'select' => 'kiválasztás',
|
||||
@@ -96,7 +95,7 @@ $translations = array(
|
||||
'ON DELETE' => 'törléskor',
|
||||
'ON UPDATE' => 'frissítéskor',
|
||||
'Index Type' => 'Index típusa',
|
||||
'Column (length)' => 'Oszop (méret)',
|
||||
'length' => 'méret',
|
||||
'View has been dropped.' => 'A nézet eldobva.',
|
||||
'View has been altered.' => 'A nézet módosult.',
|
||||
'View has been created.' => 'A nézet létrejött.',
|
||||
|
@@ -73,7 +73,6 @@ $translations = array(
|
||||
'Data' => 'Data',
|
||||
|
||||
'Database' => 'Basis data',
|
||||
'database' => 'basis data',
|
||||
'Use' => 'Gunakan',
|
||||
'Select database' => 'Pilih basis data',
|
||||
'Invalid database.' => 'Basis data tidak sah.',
|
||||
@@ -183,7 +182,7 @@ $translations = array(
|
||||
'Alter indexes' => 'Ubah indeks',
|
||||
'Add next' => 'Tambah setelahnya',
|
||||
'Index Type' => 'Jenis Indeks',
|
||||
'Column (length)' => 'Kolom (panjang)',
|
||||
'length' => 'panjang',
|
||||
|
||||
'Foreign keys' => 'Kunci asing',
|
||||
'Foreign key' => 'Kunci asing',
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'Crea database',
|
||||
'SQL command' => 'Comando SQL',
|
||||
'Logout' => 'Esci',
|
||||
'database' => 'database',
|
||||
'Use' => 'Usa',
|
||||
'No tables.' => 'No tabelle.',
|
||||
'select' => 'seleziona',
|
||||
@@ -96,7 +95,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Tipo indice',
|
||||
'Column (length)' => 'Colonna (lunghezza)',
|
||||
'length' => 'lunghezza',
|
||||
'View has been dropped.' => 'Vista eliminata.',
|
||||
'View has been altered.' => 'Vista modificata.',
|
||||
'View has been created.' => 'Vista creata.',
|
||||
@@ -265,4 +264,39 @@ $translations = array(
|
||||
'Permanent link' => 'Link permanente',
|
||||
'Edit all' => 'Modifica tutto',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'Drop %s?' => 'Scartare %s?',
|
||||
'Tables have been optimized.' => 'Le tabelle sono state ottimizzate',
|
||||
'Materialized view' => 'Vista materializzata',
|
||||
'Vacuum' => 'Aspira',
|
||||
'Selected' => 'Selezionato',
|
||||
'overwrite' => 'sovrascrivi',
|
||||
'DB' => 'DB',
|
||||
'File must be in UTF-8 encoding.' => 'Il file deve avere codifica UTF-8.',
|
||||
'Modify' => 'Modifica',
|
||||
'Load more data' => 'Carica piú dati',
|
||||
'Loading' => 'Caricamento',
|
||||
'ATTACH queries are not supported.' => 'ATTACH queries non sono supportate.',
|
||||
'Warnings' => 'Attenzione',
|
||||
'%d / ' => '%d / ',
|
||||
'Limit rows' => 'Limite righe',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer non supporta accesso a databse senza password, <a href="https://www.adminer.org/it/password/"%s>piú informazioni</a>.',
|
||||
'Default value' => 'Valore predefinito',
|
||||
'Full table scan' => 'Analizza intera tabella',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuto.', 'Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuti.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'La password principale é scaduta. <a href="https://www.adminer.org/it/extension/"%s>Implementare</a> %s come metodo per renderla permanente.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'La azione verrá eseguita dopo un login valido con le stesse credenziali.',
|
||||
'Connecting to privileged ports is not allowed.' => 'LA connessione a porte privilegiate non é permessa.',
|
||||
'There is a space in the input password which might be the cause.' => 'Esiste uno spazio nella passoword inserita che potrebbe essere la causa.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Se non hai inviato tu la richiesta tramite Adminer puoi chiudere la pagina.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Puoi caricare un grande file SQL tramite FTP ed impirtarlo dal server.',
|
||||
'Size' => 'Taglia',
|
||||
'Compute' => 'Elabora',
|
||||
'You are offline.' => 'Sei disconnesso.',
|
||||
'You have no privileges to update this table.' => 'Non hai i privilegi per aggiornare questa tabella.',
|
||||
'Saving' => 'Salvataggio',
|
||||
'Unknown error.' => 'Errore sconosciuto',
|
||||
'Database does not support password.' => 'Il database non supporta password.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Disabilita %s o abilita %s oppure %s estensioni.',
|
||||
'yes' => 'si',
|
||||
'no' => 'no',
|
||||
);
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'データベースを作成',
|
||||
'SQL command' => 'SQLコマンド',
|
||||
'Logout' => 'ログアウト',
|
||||
'database' => 'データベース',
|
||||
'Use' => '使用',
|
||||
'No tables.' => 'テーブルがありません。',
|
||||
'select' => '選択',
|
||||
@@ -95,7 +94,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => '索引の型',
|
||||
'Column (length)' => '列(長さ)',
|
||||
'length' => '長さ',
|
||||
'View has been dropped.' => 'ビューを削除しました',
|
||||
'View has been altered.' => 'ビューを変更しました',
|
||||
'View has been created.' => 'ビューを作成しました',
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'ბაზის შექმნა',
|
||||
'SQL command' => 'SQL-ბრძანება',
|
||||
'Logout' => 'გასვლა',
|
||||
'database' => 'ბაზა',
|
||||
'Use' => 'არჩევა',
|
||||
'No tables.' => 'ბაზაში ცხრილი არაა.',
|
||||
'select' => 'არჩევა',
|
||||
@@ -94,7 +93,7 @@ $translations = array(
|
||||
'ON DELETE' => 'წაშლისას',
|
||||
'ON UPDATE' => 'განახლებისას',
|
||||
'Index Type' => 'ინდექსის სახეობა',
|
||||
'Column (length)' => 'ველი (სიგრძე)',
|
||||
'length' => 'სიგრძე',
|
||||
'View has been dropped.' => 'წარმოდგენა წაიშალა.',
|
||||
'View has been altered.' => 'წარმოდგენა შეიცვალა.',
|
||||
'View has been created.' => 'წარმოდგენა შეიქმნა.',
|
||||
|
@@ -46,7 +46,7 @@ $translations = array(
|
||||
'Clone' => '복제',
|
||||
'collation' => '정렬',
|
||||
'Collation' => '정렬',
|
||||
'Column (length)' => '열 (길이)',
|
||||
'length' => '길이',
|
||||
'Column name' => '열 이름',
|
||||
'Column' => '열',
|
||||
'Comment' => '주석',
|
||||
@@ -71,7 +71,6 @@ $translations = array(
|
||||
'Database has been dropped.' => '데이터베이스를 삭제했습니다.',
|
||||
'Database has been renamed.' => '데이터베이스의 이름을 바꾸었습니다.',
|
||||
'Database schema' => '데이터베이스 구조',
|
||||
'database' => '데이터베이스',
|
||||
'Database' => '데이터베이스',
|
||||
'Databases have been dropped.' => '데이터베이스를 삭제했습니다.',
|
||||
'Date and time' => '시간',
|
||||
|
@@ -19,10 +19,10 @@ $translations = array(
|
||||
'Session expired, please login again.' => 'Sesijos galiojimas baigėsi. Prisijunkite iš naujo.',
|
||||
'%s version: %s through PHP extension %s' => '%s versija: %s per PHP plėtinį %s',
|
||||
'Refresh' => 'Atnaujinti',
|
||||
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
|
||||
'Privileges' => 'Privilegijos',
|
||||
'Create user' => 'Sukurti vartotoją',
|
||||
'User has been dropped.' => 'Vartotojas ištrintas.',
|
||||
@@ -33,14 +33,14 @@ $translations = array(
|
||||
'Routine' => 'Procedūra',
|
||||
'Grant' => 'Suteikti',
|
||||
'Revoke' => 'Atšaukti',
|
||||
|
||||
|
||||
'Process list' => 'Procesų sąrašas',
|
||||
'%d process(es) have been killed.' => array('%d procesas nutrauktas.', '%d procesai nutraukti.', '%d procesų nutraukta.'),
|
||||
'Kill' => 'Nutraukti',
|
||||
|
||||
|
||||
'Variables' => 'Kintamieji',
|
||||
'Status' => 'Būsena',
|
||||
|
||||
|
||||
'SQL command' => 'SQL užklausa',
|
||||
'%d query(s) executed OK.' => array('%d užklausa įvykdyta.', '%d užklausos įvykdytos.', '%d užklausų įvykdyta.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Užklausa įvykdyta. Pakeistas %d įrašas.', 'Užklausa įvykdyta. Pakeisti %d įrašai.', 'Užklausa įvykdyta. Pakeista %d įrašų.'),
|
||||
@@ -54,7 +54,7 @@ $translations = array(
|
||||
'History' => 'Istorija',
|
||||
'Clear' => 'Išvalyti',
|
||||
'Edit all' => 'Redaguoti visus',
|
||||
|
||||
|
||||
'File upload' => 'Failo įkėlimas',
|
||||
'From server' => 'Iš serverio',
|
||||
'Webserver file %s' => 'Failas %s iš serverio',
|
||||
@@ -64,16 +64,15 @@ $translations = array(
|
||||
'Unable to upload a file.' => 'Nepavyko įkelti failo.',
|
||||
'Maximum allowed file size is %sB.' => 'Maksimalus failo dydis - %sB.',
|
||||
'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',
|
||||
'Output' => 'Išvestis',
|
||||
'open' => 'atidaryti',
|
||||
'save' => 'išsaugoti',
|
||||
'Format' => 'Formatas',
|
||||
'Data' => 'Duomenys',
|
||||
|
||||
|
||||
'Database' => 'Duomenų bazė',
|
||||
'database' => 'duomenų bazė',
|
||||
'Use' => 'Naudoti',
|
||||
'Select database' => 'Pasirinkti duomenų bazę',
|
||||
'Invalid database.' => 'Neteisinga duomenų bazė.',
|
||||
@@ -85,10 +84,10 @@ $translations = array(
|
||||
'Alter database' => 'Redaguoti duomenų bazę',
|
||||
'Create database' => 'Sukurti duomenų bazę',
|
||||
'Database schema' => 'Duomenų bazės schema',
|
||||
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Pastovi nuoroda',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
@@ -110,7 +109,7 @@ $translations = array(
|
||||
'Tables have been moved.' => 'Lentelės perkeltos.',
|
||||
'Copy' => 'Kopijuoti',
|
||||
'Tables have been copied.' => 'Lentelės nukopijuotos.',
|
||||
|
||||
|
||||
'Routines' => 'Procedūros',
|
||||
'Routine has been called, %d row(s) affected.' => array('Procedūra įvykdyta. %d įrašas pakeistas.', 'Procedūra įvykdyta. %d įrašai pakeisti.', 'Procedūra įvykdyta. %d įrašų pakeista.'),
|
||||
'Call' => 'Vykdyti',
|
||||
@@ -123,7 +122,7 @@ $translations = array(
|
||||
'Alter function' => 'Keisti funkciją',
|
||||
'Alter procedure' => 'Keiskti procedūrą',
|
||||
'Return type' => 'Grąžinimo tipas',
|
||||
|
||||
|
||||
'Events' => 'Įvykiai',
|
||||
'Event has been dropped.' => 'Įvykis pašalintas.',
|
||||
'Event has been altered.' => 'Įvykis pakeistas.',
|
||||
@@ -136,7 +135,7 @@ $translations = array(
|
||||
'Start' => 'Pradžia',
|
||||
'End' => 'Pabaiga',
|
||||
'On completion preserve' => 'Įvykdžius išsaugoti',
|
||||
|
||||
|
||||
'Tables' => 'Lentelės',
|
||||
'Tables and views' => 'Lentelės ir vaizdai',
|
||||
'Table' => 'Lentelė',
|
||||
@@ -164,26 +163,26 @@ $translations = array(
|
||||
'Move down' => 'Perkelti žemyn',
|
||||
'Remove' => 'Pašalinti',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Viršytas maksimalus leidžiamų stulpelių kiekis. Padidinkite %s.',
|
||||
|
||||
|
||||
'Partition by' => 'Skirstyti pagal',
|
||||
'Partitions' => 'Skirsniai',
|
||||
'Partition name' => 'Skirsnio pavadinimas',
|
||||
'Values' => 'Reikšmės',
|
||||
|
||||
|
||||
'View' => 'Vaizdas',
|
||||
'View has been dropped.' => 'Vaizdas pašalintas.',
|
||||
'View has been altered.' => 'Vaizdas pakeistas.',
|
||||
'View has been created.' => 'Vaizdas sukurtas.',
|
||||
'Alter view' => 'Redaguoti vaizdą',
|
||||
'Create view' => 'Sukurti vaizdą',
|
||||
|
||||
|
||||
'Indexes' => 'Indeksai',
|
||||
'Indexes have been altered.' => 'Indeksai pakeisti.',
|
||||
'Alter indexes' => 'Redaguoti indeksus',
|
||||
'Add next' => 'Pridėti kitą',
|
||||
'Index Type' => 'Indekso tipas',
|
||||
'Column (length)' => 'Stulpelis (ilgis)',
|
||||
|
||||
'length' => 'ilgis',
|
||||
|
||||
'Foreign keys' => 'Išoriniai raktai',
|
||||
'Foreign key' => 'Išorinis raktas',
|
||||
'Foreign key has been dropped.' => 'Išorinis raktas pašalintas.',
|
||||
@@ -199,7 +198,7 @@ $translations = array(
|
||||
'ON DELETE' => 'Ištrinant',
|
||||
'ON UPDATE' => 'Atnaujinant',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Šaltinio ir tikslinis stulpelis turi būti to paties tipo, tiksliniame stulpelyje turi būti naudojamas indeksas ir duomenys turi egzistuoti.',
|
||||
|
||||
|
||||
'Triggers' => 'Trigeriai',
|
||||
'Add trigger' => 'Pridėti trigerį',
|
||||
'Trigger has been dropped.' => 'Trigeris pašalintas.',
|
||||
@@ -210,7 +209,7 @@ $translations = array(
|
||||
'Time' => 'Laikas',
|
||||
'Event' => 'Įvykis',
|
||||
'Name' => 'Pavadinimas',
|
||||
|
||||
|
||||
'select' => 'atrinkti',
|
||||
'Select' => 'Atrinkti',
|
||||
'Select data' => 'Atrinkti duomenis',
|
||||
@@ -231,13 +230,13 @@ $translations = array(
|
||||
'last' => 'paskutinis',
|
||||
'Whole result' => 'Visas rezultatas',
|
||||
'%d byte(s)' => array('%d baitas', '%d baigai', '%d baitų'),
|
||||
|
||||
|
||||
'Import' => 'Importas',
|
||||
'%d row(s) have been imported.' => array('%d įrašas įkelta.', '%d įrašai įkelti.', '%d įrašų įkelta.'),
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Use edit link to modify this value.' => 'Norėdami redaguoti reikšmę naudokite redagavimo nuorodą.',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Įrašas%s sukurtas.',
|
||||
'Item has been deleted.' => 'Įrašas ištrintas.',
|
||||
@@ -255,14 +254,14 @@ $translations = array(
|
||||
'Save and insert next' => 'Išsaugoti ir įrašyti kitą',
|
||||
'Clone' => 'Klonuoti',
|
||||
'Delete' => 'Trinti',
|
||||
|
||||
|
||||
'E-mail' => 'El. paštas',
|
||||
'From' => 'Nuo',
|
||||
'Subject' => 'Antraštė',
|
||||
'Attachments' => 'Priedai',
|
||||
'Send' => 'Siųsti',
|
||||
'%d e-mail(s) have been sent.' => array('Išsiųstas %d laiškas.', 'Išsiųsti %d laiškai.', 'Išsiųsta %d laiškų.'),
|
||||
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Skaičiai',
|
||||
'Date and time' => 'Data ir laikas',
|
||||
@@ -272,7 +271,7 @@ $translations = array(
|
||||
'Network' => 'Tinklas',
|
||||
'Geometry' => 'Geometrija',
|
||||
'Relations' => 'Ryšiai',
|
||||
|
||||
|
||||
'Editor' => 'Redaktorius',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
@@ -281,11 +280,11 @@ $translations = array(
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'dabar',
|
||||
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Failas egzistuoja.',
|
||||
'Please use one of the extensions %s.' => 'Naudokite vieną iš plėtinių %s.',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Keisti schemą',
|
||||
'Create schema' => 'Sukurti schemą',
|
||||
@@ -294,7 +293,7 @@ $translations = array(
|
||||
'Schema has been altered.' => 'Schema pakeista.',
|
||||
'Schema' => 'Schema',
|
||||
'Invalid schema.' => 'Neteisinga schema.',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Sekos',
|
||||
'Create sequence' => 'Sukurti seką',
|
||||
@@ -302,7 +301,7 @@ $translations = array(
|
||||
'Sequence has been created.' => 'Seka sukurta.',
|
||||
'Sequence has been altered.' => 'Seka pakeista.',
|
||||
'Alter sequence' => 'Keisti seką',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Vartotojų tipai',
|
||||
'Create type' => 'Sukurti tipą',
|
||||
|
302
adminer/lang/lv.inc.php
Normal file
302
adminer/lang/lv.inc.php
Normal file
@@ -0,0 +1,302 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'Ieiet',
|
||||
'Logout successful.' => 'Jūs veiksmīgi izgājāt no sistēmas.',
|
||||
'Invalid credentials.' => 'Nepareizs lietotāja vārds vai parole.',
|
||||
'Server' => 'Serveris',
|
||||
'Username' => 'Lietotājs',
|
||||
'Password' => 'Parole',
|
||||
'Select database' => 'Izvēlēties datubāzi',
|
||||
'Invalid database.' => 'Nederīga datubāze.',
|
||||
'Table has been dropped.' => 'Tabula dzēsta.',
|
||||
'Table has been altered.' => 'Tabula mainīta.',
|
||||
'Table has been created.' => 'Tabula izveidota.',
|
||||
'Alter table' => 'Mainīt tabulu',
|
||||
'Create table' => 'Izveidot tabulu',
|
||||
'Table name' => 'Tabulas nosaukums',
|
||||
'engine' => 'Tabulas tips',
|
||||
'collation' => 'Kolācija',
|
||||
'Column name' => 'Lauka nosaukums',
|
||||
'Type' => 'Tips',
|
||||
'Length' => 'Garums',
|
||||
'Auto Increment' => 'Auto inkrements',
|
||||
'Options' => 'Opcijas',
|
||||
'Save' => 'Saglabāt',
|
||||
'Drop' => 'Dzēst',
|
||||
'Database has been dropped.' => 'Datubāze tika nodzēsta.',
|
||||
'Database has been created.' => 'Datubāze tika izveidota.',
|
||||
'Database has been renamed.' => 'Datubāze tika pārsaukta.',
|
||||
'Database has been altered.' => 'Datubāze tika mainīta.',
|
||||
'Alter database' => 'Mainīt datubāzi',
|
||||
'Create database' => 'Izveidot datubāzi',
|
||||
'SQL command' => 'SQL pieprasījums',
|
||||
'Logout' => 'Iziet',
|
||||
'Use' => 'Lietot',
|
||||
'No tables.' => 'Datubāzē nav tabulu.',
|
||||
'select' => 'izvēlēties',
|
||||
'Item has been deleted.' => 'Ieraksts dzests.',
|
||||
'Item has been updated.' => 'Ieraksts atjaunots.',
|
||||
'Item%s has been inserted.' => 'Ieraksti tika ievietoti.',
|
||||
'Edit' => 'Rediģēt',
|
||||
'Insert' => 'Ievietot',
|
||||
'Save and insert next' => 'Saglabāt un ievietot nākamo',
|
||||
'Delete' => 'Dzēst',
|
||||
'Database' => 'Datubāze',
|
||||
'Routines' => 'Procedūras un funkcijas',
|
||||
'Indexes have been altered.' => 'Indeksi mainīti.',
|
||||
'Indexes' => 'Indeksi',
|
||||
'Alter indexes' => 'Izmainīt indeksus',
|
||||
'Add next' => 'Pievienot vēl',
|
||||
'Language' => 'Valoda',
|
||||
'Select' => 'Izvēlēties',
|
||||
'New item' => 'Jauns ieraksts',
|
||||
'Search' => 'Meklēšana',
|
||||
'Sort' => 'Kārtošana',
|
||||
'descending' => 'dilstoši',
|
||||
'Limit' => 'Limits',
|
||||
'No rows.' => 'Nav rindu.',
|
||||
'Action' => 'Darbība',
|
||||
'edit' => 'rediģēt',
|
||||
'Page' => 'Lapa',
|
||||
'Query executed OK, %d row(s) affected.' => array('Pieprasījums pabeigts, izmainīts %d ieraksts.', 'Pieprasījums pabeigts, izmainīti %d ieraksti.', 'Pieprasījums pabeigts, izmainīti %d ieraksti.'),
|
||||
'Error in query' => 'Kļūda pieprasījumā',
|
||||
'Execute' => 'Izpidīt',
|
||||
'Table' => 'Tabula',
|
||||
'Foreign keys' => 'Ārejā atslēgas',
|
||||
'Triggers' => 'Trigeri',
|
||||
'View' => 'Skats',
|
||||
'Unable to select the table' => 'Tabula nav pieejama',
|
||||
'Invalid CSRF token. Send the form again.' => 'Nederīgs CSRF žetons. Nosūtiet formu vēl vienu reizi.',
|
||||
'Comment' => 'Komentārs',
|
||||
'Default values' => 'Noklusētā vērtība',
|
||||
'%d byte(s)' => array('%d baits', '%d baiti', '%d baiti'),
|
||||
'No commands to execute.' => 'Nav izpildāmu komandu.',
|
||||
'Unable to upload a file.' => 'Neizdevās ielādēt failu uz servera.',
|
||||
'File upload' => 'Augšupielāde',
|
||||
'File uploads are disabled.' => 'Augšupielādes aizliegtas.',
|
||||
'Routine has been called, %d row(s) affected.' => array('Procedūra izsaukta, izmainīts %d ieraksts.', 'Procedūra izsaukta, izmainīti %d ieraksti.', 'Procedūra izsaukta, izmainīti %d ieraksti.'),
|
||||
'Call' => 'Izsaukt',
|
||||
'No extension' => 'Nav paplašinājuma',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Neviens PHP no atbalstītajiem paplašinājumiem (%s) nav pieejams.',
|
||||
'Session support must be enabled.' => 'Sesiju atbalstam jābūt ieslēgtam.',
|
||||
'Session expired, please login again.' => 'Sesijas laiks ir beidzies, piesakies no jauna sistēmā.',
|
||||
'Text length' => 'Teksta garums',
|
||||
'Foreign key has been dropped.' => 'Ārejā atslēga dzēsta.',
|
||||
'Foreign key has been altered.' => 'Ārejā atslēga izmainīta.',
|
||||
'Foreign key has been created.' => 'Ārejā atslēga izveidota.',
|
||||
'Foreign key' => 'Ārejā atslēga',
|
||||
'Target table' => 'Mērķa tabula',
|
||||
'Change' => 'Mainīt',
|
||||
'Source' => 'Avots',
|
||||
'Target' => 'Mērķis',
|
||||
'Add column' => 'Pievienot lauku',
|
||||
'Alter' => 'Izmainīt',
|
||||
'Add foreign key' => 'Pievienot ārējo atslēgu',
|
||||
'ON DELETE' => 'Pie dzēšanas',
|
||||
'ON UPDATE' => 'Pie atjaunošanas',
|
||||
'Index Type' => 'Indeksa tips',
|
||||
'length' => 'garums',
|
||||
'View has been dropped.' => 'Skats dzēsts.',
|
||||
'View has been altered.' => 'Skats izmainīts.',
|
||||
'View has been created.' => 'Skats izveidots.',
|
||||
'Alter view' => 'Izmainīt skatu',
|
||||
'Create view' => 'Izveidot skatu',
|
||||
'Name' => 'Nosaukums',
|
||||
'Process list' => 'Procesu saraksts',
|
||||
'%d process(es) have been killed.' => array('Pabeigts %d process.', 'Pabeigti %d procesi.', 'Pabeigti %d procesi.'),
|
||||
'Kill' => 'Nobeigt',
|
||||
'Parameter name' => 'Parametra nosaukums',
|
||||
'Database schema' => 'Datubāzes shēma',
|
||||
'Create procedure' => 'Izveidot procedūru',
|
||||
'Create function' => 'Izveidot funkciju',
|
||||
'Routine has been dropped.' => 'Procedūru dzēsta.',
|
||||
'Routine has been altered.' => 'Procedūru izmainīta.',
|
||||
'Routine has been created.' => 'Procedūru izveidota.',
|
||||
'Alter function' => 'Mainīt funkciju',
|
||||
'Alter procedure' => 'Mainīt procedūru',
|
||||
'Return type' => 'Atgriezt tips',
|
||||
'Add trigger' => 'Pievienot trigeri',
|
||||
'Trigger has been dropped.' => 'Trigeris dzēsts.',
|
||||
'Trigger has been altered.' => 'Trigeris izmainīts.',
|
||||
'Trigger has been created.' => 'Trigeris izveidots.',
|
||||
'Alter trigger' => 'Izmainīt trigeri',
|
||||
'Create trigger' => 'Izveidot trigeri',
|
||||
'Time' => 'Laiks',
|
||||
'Event' => 'Notikums',
|
||||
'%s version: %s through PHP extension %s' => 'Versija %s: %s ar PHP paplašinājumu %s',
|
||||
'%d row(s)' => array('%d rinda', '%d rindas', '%d rindu'),
|
||||
'Remove' => 'Noņemt',
|
||||
'Are you sure?' => 'Vai Tu esi pārliecināts?',
|
||||
'Privileges' => 'Tiesības',
|
||||
'Create user' => 'Izveidot lietotāju',
|
||||
'User has been dropped.' => 'Lietotājs dzests.',
|
||||
'User has been altered.' => 'Lietotājs izmainīts.',
|
||||
'User has been created.' => 'Lietotājs izveidots.',
|
||||
'Hashed' => 'Sajaukts',
|
||||
'Column' => 'Lauks',
|
||||
'Routine' => 'Procedūra',
|
||||
'Grant' => 'Atļaut',
|
||||
'Revoke' => 'Aizliegt',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST metodes pieprasījums apjoms par lielu. Atsūtiet mazāka apjoma pieprasījumu kā konfigurācijas %s.',
|
||||
'Logged as: %s' => 'Ielogojies kā: %s',
|
||||
'Move up' => 'Pārvietot uz augšu',
|
||||
'Move down' => 'Pārvietot uz leju',
|
||||
'Functions' => 'Funkcijas',
|
||||
'Aggregation' => 'Agregācija',
|
||||
'Export' => 'Eksports',
|
||||
'Output' => 'Izejas dati',
|
||||
'open' => 'atvērt',
|
||||
'save' => 'saglabāt',
|
||||
'Format' => 'Formāts',
|
||||
'Tables' => 'Tabulas',
|
||||
'Data' => 'Dati',
|
||||
'Event has been dropped.' => 'Notikums dzēsts.',
|
||||
'Event has been altered.' => 'Notikums izmainīts.',
|
||||
'Event has been created.' => 'Notikums izveidots.',
|
||||
'Alter event' => 'Izmainīt notikumu',
|
||||
'Create event' => 'Izveidot notikumu',
|
||||
'At given time' => 'Norāditā laikā',
|
||||
'Every' => 'Katru',
|
||||
'Events' => 'Notikumi',
|
||||
'Schedule' => 'Grafiks',
|
||||
'Start' => 'Sākums',
|
||||
'End' => 'Beigas',
|
||||
'Status' => 'Statuss',
|
||||
'On completion preserve' => 'Beigās saglabāt',
|
||||
'Tables and views' => 'Tabulas un skati',
|
||||
'Data Length' => 'Datu apjoms',
|
||||
'Index Length' => 'Indeksu izmērs',
|
||||
'Data Free' => 'Brīvā vieta',
|
||||
'Collation' => 'Kolācija',
|
||||
'Analyze' => 'Analizēt',
|
||||
'Optimize' => 'Optimizēt',
|
||||
'Check' => 'Pārbaudīt',
|
||||
'Repair' => 'Salabot',
|
||||
'Truncate' => 'Iztīrīt',
|
||||
'Tables have been truncated.' => 'Tabulas iztīrītas.',
|
||||
'Rows' => 'Rindas',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Tabulas pārvietotas.',
|
||||
'Move to other database' => 'Pārvietot uz citu datubāzi',
|
||||
'Move' => 'Pārvietot',
|
||||
'Engine' => 'Dzinējs',
|
||||
'Save and continue edit' => 'Saglabāt un turpināt rediģēt',
|
||||
'original' => 'oriģināls',
|
||||
'%d item(s) have been affected.' => array('Izmainīts %d ieraksts.', 'Izmainīti %d ieraksti.', 'Izmainīti %d ieraksti.'),
|
||||
'Whole result' => 'Viss rezultāts',
|
||||
'Tables have been dropped.' => 'Tabulas dzēstas.',
|
||||
'Clone' => 'Klonēt',
|
||||
'Partition by' => 'Sadalīt pēc',
|
||||
'Partitions' => 'Partīcijas',
|
||||
'Partition name' => 'Partīcijas nosaukums',
|
||||
'Values' => 'Vērtības',
|
||||
'%d row(s) have been imported.' => array('Importēta %d rinda.', 'Importētas %d rindas.', 'Importētas %d rindas.'),
|
||||
'Import' => 'Imports',
|
||||
'Stop on error' => 'Astāties kļūdas gadījumā',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Sasniegts maksimālais lauku skaita ierobežojums. Palieliniet %s.',
|
||||
'anywhere' => 'jebkurā vietā',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$5.$3.$1',
|
||||
'[yyyy]-mm-dd' => 'dd.mm.[gggg]',
|
||||
'History' => 'Vēsture',
|
||||
'Variables' => 'Mainīgie',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Lauku tipiem jābūt vienādiem, rezultējošā laukā jābut indeksa datiem.',
|
||||
'Relations' => 'Relācijas',
|
||||
'Run file' => 'Izpildīt failu',
|
||||
'Clear' => 'Notīrīt',
|
||||
'Maximum allowed file size is %sB.' => 'Faila maksimālais izmērs — %sB.',
|
||||
'Numbers' => 'Skaitļi',
|
||||
'Date and time' => 'Datums un laiks',
|
||||
'Strings' => 'Virknes',
|
||||
'Binary' => 'Binārie',
|
||||
'Lists' => 'Saraksti',
|
||||
'Editor' => 'Redaktors',
|
||||
'E-mail' => 'Epasts',
|
||||
'From' => 'No',
|
||||
'Subject' => 'Tēma',
|
||||
'Send' => 'Sūtīt',
|
||||
'%d e-mail(s) have been sent.' => array('Nosūtīts %d epasts.', 'Nosūtīti %d epasti.', 'Nosūtīti %d epasti.'),
|
||||
'Webserver file %s' => 'Fails %s uz servera',
|
||||
'File does not exist.' => 'Fails neeksistē.',
|
||||
'%d in total' => 'Kopā %d',
|
||||
'Permanent login' => 'Atcerēties mani',
|
||||
'Databases have been dropped.' => 'Datubāzes dzēstas.',
|
||||
'Search data in tables' => 'Meklēt tabulās',
|
||||
'Schema' => 'Shēma',
|
||||
'Alter schema' => 'Izmainīt shēmu',
|
||||
'Create schema' => 'Jauna shēma',
|
||||
'Schema has been dropped.' => 'Shēma dzēsta.',
|
||||
'Schema has been created.' => 'Izveidota jauna shēma.',
|
||||
'Schema has been altered.' => 'Shēma izmainīta.',
|
||||
'Sequences' => 'Virknes',
|
||||
'Create sequence' => 'Izveidot virkni',
|
||||
'Alter sequence' => 'Izmainīt virkni',
|
||||
'Sequence has been dropped.' => 'Virkne dzēsta.',
|
||||
'Sequence has been created.' => 'Izveidota virkne.',
|
||||
'Sequence has been altered.' => 'Virkne izmainīta.',
|
||||
'User types' => 'Lietotāju tipi',
|
||||
'Create type' => 'Izveidot tipu',
|
||||
'Alter type' => 'Izmainīt tipu',
|
||||
'Type has been dropped.' => 'Tips dzēsts.',
|
||||
'Type has been created.' => 'Tips izveidots.',
|
||||
'Ctrl+click on a value to modify it.' => 'Lai izmainītu vērtību, izmanto Ctrl + peles klikšķi.',
|
||||
'Use edit link to modify this value.' => 'Izmainīt vērtību var tikai ar saiti "Izmainīt".',
|
||||
'last' => 'pēdējā',
|
||||
'From server' => 'No servera',
|
||||
'System' => 'Sistēma',
|
||||
'Select data' => 'Izvēlēties datus',
|
||||
'Show structure' => 'Parādīt struktūru',
|
||||
'empty' => 'tukšs',
|
||||
'Network' => 'Tīkls',
|
||||
'Geometry' => 'Ģeometrija',
|
||||
'File exists.' => 'Fails eksistē.',
|
||||
'Attachments' => 'Pielikumi',
|
||||
'%d query(s) executed OK.' => array('%d pieprasījums veiksmīgs.', '%d pieprasījumi veiksmīgi.', '%d pieprasījumi veiksmīgi.'),
|
||||
'Show only errors' => 'Rādīt tikai kļūdas',
|
||||
'Refresh' => 'Atjaunot',
|
||||
'Invalid schema.' => 'Nederīga shēma.',
|
||||
'Please use one of the extensions %s.' => 'Izmainojiet kādu no paplašinājumiem %s.',
|
||||
'now' => 'tagad',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'Tabulas nokopētas.',
|
||||
'Copy' => 'kopēt',
|
||||
'Permanent link' => 'Pastāvīga saite',
|
||||
'Edit all' => 'Rediģēt visus',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'Tables have been optimized.' => 'Tabulas optimizētas.',
|
||||
'Materialized view' => 'Matrializēts skats',
|
||||
'Vacuum' => 'Vakums',
|
||||
'Selected' => 'Izvēlētie',
|
||||
'File must be in UTF-8 encoding.' => 'Failam jābūt UTF-8 kodējumam.',
|
||||
'Modify' => 'Izmainīt',
|
||||
'Loading' => 'Ielāde',
|
||||
'Load more data' => 'Ielādēt vēl datus',
|
||||
'ATTACH queries are not supported.' => 'ATTACH-pieprasījumi nav atbalstīti.',
|
||||
'%d / ' => '%d / ',
|
||||
'Limit rows' => 'Rindu limits',
|
||||
'Default value' => 'Noklusētā vērtība',
|
||||
'Full table scan' => 'Pilna tabulas analīze',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtes.', 'Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtēm.', 'Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtēm.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-parole nav derīga. <a href="https://www.adminer.org/en/extension/"%s>Implementējiet</a> metodi %s, lai padarīgu šo par ierastu metodi.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Ja nesūtījāt šo pieprasījumu no Adminer, tad aizveriet pārlūka logu.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Varat ielādēt lielu SQL failu uz servera un tad importēt to.',
|
||||
'Size' => 'Izmērs',
|
||||
'Compute' => 'Izskaitļot',
|
||||
'You are offline.' => 'Jūs est bezsasaistē.',
|
||||
'You have no privileges to update this table.' => 'jums nav pieejas labot šo tabulu.',
|
||||
'Saving' => 'Saglabāšana',
|
||||
'yes' => 'Jā',
|
||||
'no' => 'Nē',
|
||||
'Drop %s?' => 'Dzēst %s?',
|
||||
'overwrite' => 'pārrakstīt',
|
||||
'DB' => 'DB',
|
||||
'Warnings' => 'Brīdinājumi',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer neatbalsta pieeju bez paroles, <a href="https://www.adminer.org/en/password/"%s>vairāk informācijas šeit</a>.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Paldies, ka izmantoji Adminer, vai vēlies veikt <a href="https://www.adminer.org/en/donation/">ziedojumu</a>.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Darbība tiks pabeigta pēc derīgas pieteikšanās sistēmā.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Pieeja priviliģētiem portiem nav atļauta.',
|
||||
'There is a space in the input password which might be the cause.' => 'Parole satur atstarpi, kas varētu būt lieka.',
|
||||
'Unknown error.' => 'Nezināma kļūda.',
|
||||
'Database does not support password.' => 'Datubāze neatbalsta paroli.',
|
||||
);
|
@@ -82,7 +82,6 @@ $translations = array(
|
||||
'Data' => 'Data',
|
||||
|
||||
'Database' => 'Pangkalan data',
|
||||
'database' => 'pangkalan data',
|
||||
'Use' => 'Guna',
|
||||
'Select database' => 'Pilih pangkalan data',
|
||||
'Invalid database.' => 'Pangkalan data tidak sah.',
|
||||
@@ -198,7 +197,7 @@ $translations = array(
|
||||
'Alter indexes' => 'Ubah indeks',
|
||||
'Add next' => 'Tambah yang seterusnya',
|
||||
'Index Type' => 'Jenis Indeks',
|
||||
'Column (length)' => 'Kolum (kepanjangan)',
|
||||
'length' => 'kepanjangan',
|
||||
|
||||
'Foreign keys' => 'Kunci asing',
|
||||
'Foreign key' => 'Kunci asing',
|
||||
|
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'Inloggen',
|
||||
'Logout successful.' => 'Uitloggen geslaagd.',
|
||||
'Invalid credentials.' => 'Ongeldige logingegevens.',
|
||||
'Login' => 'Aanmelden',
|
||||
'Logout successful.' => 'Successvol afgemeld.',
|
||||
'Invalid credentials.' => 'Ongeldige gebruikersgegevens.',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Gebruikersnaam',
|
||||
'Password' => 'Wachtwoord',
|
||||
@@ -31,8 +31,7 @@ $translations = array(
|
||||
'Alter database' => 'Database aanpassen',
|
||||
'Create database' => 'Database aanmaken',
|
||||
'SQL command' => 'SQL opdracht',
|
||||
'Logout' => 'Uitloggen',
|
||||
'database' => 'database',
|
||||
'Logout' => 'Afmelden',
|
||||
'Use' => 'Gebruik',
|
||||
'No tables.' => 'Geen tabellen.',
|
||||
'select' => 'kies',
|
||||
@@ -41,7 +40,7 @@ $translations = array(
|
||||
'Item%s has been inserted.' => 'Item%s toegevoegd.',
|
||||
'Edit' => 'Bewerk',
|
||||
'Insert' => 'Toevoegen',
|
||||
'Save and insert next' => 'Opslaan, daarna toevoegen',
|
||||
'Save and insert next' => 'Opslaan en volgende toevoegen',
|
||||
'Delete' => 'Verwijderen',
|
||||
'Database' => 'Database',
|
||||
'Routines' => 'Procedures',
|
||||
@@ -60,7 +59,7 @@ $translations = array(
|
||||
'Action' => 'Acties',
|
||||
'edit' => 'bewerk',
|
||||
'Page' => 'Pagina',
|
||||
'Query executed OK, %d row(s) affected.' => array('Query uitgevoerd, %d rij geraakt.', 'Query uitgevoerd, %d rijen beïnvloed.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Query uitgevoerd, %d rij aangepast.', 'Query uitgevoerd, %d rijen aangepast.'),
|
||||
'Error in query' => 'Fout in query',
|
||||
'Execute' => 'Uitvoeren',
|
||||
'Table' => 'Tabel',
|
||||
@@ -81,7 +80,7 @@ $translations = array(
|
||||
'No extension' => 'Geen extensie',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Geen geldige PHP extensies beschikbaar (%s).',
|
||||
'Session support must be enabled.' => 'Sessies moeten geactiveerd zijn.',
|
||||
'Session expired, please login again.' => 'Uw sessie is verlopen. Gelieve opnieuw in te loggen.',
|
||||
'Session expired, please login again.' => 'Uw sessie is verlopen. Gelieve opnieuw aan te melden.',
|
||||
'Text length' => 'Tekst lengte',
|
||||
'Foreign key has been dropped.' => 'Foreign key verwijderd.',
|
||||
'Foreign key has been altered.' => 'Foreign key aangepast.',
|
||||
@@ -97,7 +96,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Index type',
|
||||
'Column (length)' => 'Kolom (lengte)',
|
||||
'length' => 'lengte',
|
||||
'View has been dropped.' => 'View verwijderd.',
|
||||
'View has been altered.' => 'View aangepast.',
|
||||
'View has been created.' => 'View aangemaakt.',
|
||||
@@ -265,4 +264,39 @@ $translations = array(
|
||||
'Permanent link' => 'Permanente link',
|
||||
'Edit all' => 'Alles bewerken',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'Drop %s?' => 'Verwijder %s?',
|
||||
'Tables have been optimized.' => 'Tabellen zijn geoptimaliseerd.',
|
||||
'Materialized view' => 'Materialized view',
|
||||
'Vacuum' => 'Vacuum',
|
||||
'Selected' => 'Geselecteerd',
|
||||
'overwrite' => 'overschrijven',
|
||||
'DB' => 'DB',
|
||||
'File must be in UTF-8 encoding.' => 'Het bestand moet met UTF-8 encodering zijn opgeslagen.',
|
||||
'Modify' => 'Aanpassen',
|
||||
'Load more data' => 'Meer data inladen',
|
||||
'Loading' => 'Aan het laden',
|
||||
'ATTACH queries are not supported.' => 'ATTACH queries worden niet ondersteund',
|
||||
'Warnings' => 'Waarschuwingen',
|
||||
'%d / ' => '%d / ',
|
||||
'Limit rows' => 'Rijen beperken',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer ondersteunt geen toegang tot databases zonder wachtwoord, <a href="https://www.adminer.org/en/password/"%s>meer informatie</a>.',
|
||||
'Default value' => 'Standaardwaarde',
|
||||
'Full table scan' => 'Full table scan',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuut.', 'Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuten.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master wachtwoord verlopen. <a href="https://www.adminer.org/en/extension/"%s>Implementeer</a> de %s methode om het permanent te maken.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Deze actie zal uitgevoerd worden na het succesvol aanmelden met dezelfde gebruikersgegevens',
|
||||
'Connecting to privileged ports is not allowed.' => 'Verbindingen naar geprivilegieerde poorten is niet toegestaan.',
|
||||
'There is a space in the input password which might be the cause.' => 'Er staat een spatie in het wachtwoord, wat misschien de oorzaak is.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Als u deze actie niet via Adminer hebt gedaan, gelieve deze pagina dan te sluiten.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'U kan een groot SQL-bestand uploaden via FTP en het importeren via de server.',
|
||||
'Size' => 'Grootte',
|
||||
'Compute' => 'Bereken',
|
||||
'You are offline.' => 'U bent offline.',
|
||||
'You have no privileges to update this table.' => 'U bent niet gemachtigd om deze tabel aan te passen.',
|
||||
'Saving' => 'Opslaan',
|
||||
'Unknown error.' => 'Onbekende fout',
|
||||
'Database does not support password.' => 'Database ondersteunt het wachtwoord niet.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Schakel %s uit or schakel extensies %s of %s in.',
|
||||
'yes' => 'ja',
|
||||
'no' => 'neen',
|
||||
);
|
||||
|
@@ -64,7 +64,6 @@ $translations = array(
|
||||
'Format' => 'Format',
|
||||
'Data' => 'Data',
|
||||
'Database' => 'Database',
|
||||
'database' => 'database',
|
||||
'Use' => 'Bruk',
|
||||
'Select database' => 'Velg database',
|
||||
'Invalid database.' => 'Ugyldig database.',
|
||||
@@ -165,7 +164,7 @@ $translations = array(
|
||||
'Alter indexes' => 'Endre indekser',
|
||||
'Add next' => 'Legg til neste',
|
||||
'Index Type' => 'Indekstype',
|
||||
'Column (length)' => 'Kolonne (lengde)',
|
||||
'length' => 'lengde',
|
||||
'Foreign keys' => 'Fremmednøkler',
|
||||
'Foreign key' => 'Fremmednøkkel',
|
||||
'Foreign key has been dropped.' => 'Fremmednøkkelen er slettet.',
|
||||
|
@@ -42,10 +42,10 @@ $translations = array(
|
||||
'Process list' => 'Lista procesów',
|
||||
'%d process(es) have been killed.' => array('Przerwano %d wątek.', 'Przerwano %d wątki.', 'Przerwano %d wątków.'),
|
||||
'Kill' => 'Przerwij wykonywanie',
|
||||
|
||||
|
||||
'Variables' => 'Zmienne',
|
||||
'Status' => 'Status',
|
||||
|
||||
|
||||
'SQL command' => 'Zapytanie SQL',
|
||||
'%d query(s) executed OK.' => array('Pomyślnie wykonano %d zapytanie.', 'Pomyślnie wykonano %d zapytania.', 'Pomyślnie wykonano %d zapytań.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Zapytanie wykonane pomyślnie, zmieniono %d rekord.', 'Zapytanie wykonane pomyślnie, zmieniono %d rekordy.', 'Zapytanie wykonane pomyślnie, zmieniono %d rekordów.'),
|
||||
@@ -60,7 +60,7 @@ $translations = array(
|
||||
'History' => 'Historia',
|
||||
'Clear' => 'Wyczyść',
|
||||
'Edit all' => 'Edytuj wszystkie',
|
||||
|
||||
|
||||
'File upload' => 'Wgranie pliku',
|
||||
'From server' => 'Z serwera',
|
||||
'Webserver file %s' => 'Plik %s na serwerze',
|
||||
@@ -72,16 +72,15 @@ $translations = array(
|
||||
'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 are offline.' => 'Jesteś offline.',
|
||||
|
||||
|
||||
'Export' => 'Eksport',
|
||||
'Output' => 'Rezultat',
|
||||
'open' => 'otwórz',
|
||||
'save' => 'zapisz',
|
||||
'Format' => 'Format',
|
||||
'Data' => 'Dane',
|
||||
|
||||
|
||||
'Database' => 'Baza danych',
|
||||
'database' => 'baza danych',
|
||||
'Use' => 'Wybierz',
|
||||
'Select database' => 'Wybierz bazę danych',
|
||||
'Invalid database.' => 'Nie znaleziono bazy danych.',
|
||||
@@ -93,10 +92,10 @@ $translations = array(
|
||||
'Alter database' => 'Zmień bazę danych',
|
||||
'Create database' => 'Utwórz bazę danych',
|
||||
'Database schema' => 'Schemat bazy danych',
|
||||
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Trwały link',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
@@ -119,7 +118,7 @@ $translations = array(
|
||||
'Tables have been moved.' => 'Tabele zostały przeniesione.',
|
||||
'Copy' => 'Kopiuj',
|
||||
'Tables have been copied.' => 'Tabele zostały skopiowane.',
|
||||
|
||||
|
||||
'Routines' => 'Procedury i funkcje',
|
||||
'Routine has been called, %d row(s) affected.' => array('Procedura została uruchomiona, zmieniono %d rekord.', 'Procedura została uruchomiona, zmieniono %d rekordy.', 'Procedura została uruchomiona, zmieniono %d rekordów.'),
|
||||
'Call' => 'Uruchom',
|
||||
@@ -132,7 +131,7 @@ $translations = array(
|
||||
'Alter function' => 'Zmień funkcję',
|
||||
'Alter procedure' => 'Zmień procedurę',
|
||||
'Return type' => 'Zwracany typ',
|
||||
|
||||
|
||||
'Events' => 'Wydarzenia',
|
||||
'Event has been dropped.' => 'Wydarzenie zostało usunięte.',
|
||||
'Event has been altered.' => 'Wydarzenie zostało zmienione.',
|
||||
@@ -145,7 +144,7 @@ $translations = array(
|
||||
'Start' => 'Początek',
|
||||
'End' => 'Koniec',
|
||||
'On completion preserve' => 'Nie kasuj wydarzenia po przeterminowaniu',
|
||||
|
||||
|
||||
'Tables' => 'Tabele',
|
||||
'Tables and views' => 'Tabele i perspektywy',
|
||||
'Table' => 'Tabela',
|
||||
@@ -178,12 +177,12 @@ $translations = array(
|
||||
'Move down' => 'Przesuń w dół',
|
||||
'Remove' => 'Usuń',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Przekroczono maksymalną liczbę pól. Zwiększ %s.',
|
||||
|
||||
|
||||
'Partition by' => 'Partycjonowanie',
|
||||
'Partitions' => 'Partycje',
|
||||
'Partition name' => 'Nazwa partycji',
|
||||
'Values' => 'Wartości',
|
||||
|
||||
|
||||
'View' => 'Perspektywa',
|
||||
'Materialized view' => 'Zmaterializowana perspektywa',
|
||||
'View has been dropped.' => 'Perspektywa została usunięta.',
|
||||
@@ -191,14 +190,14 @@ $translations = array(
|
||||
'View has been created.' => 'Perspektywa została utworzona.',
|
||||
'Alter view' => 'Zmień perspektywę',
|
||||
'Create view' => 'Utwórz perspektywę',
|
||||
|
||||
|
||||
'Indexes' => 'Indeksy',
|
||||
'Indexes have been altered.' => 'Indeksy zostały zmienione.',
|
||||
'Alter indexes' => 'Zmień indeksy',
|
||||
'Add next' => 'Dodaj następny',
|
||||
'Index Type' => 'Typ indeksu',
|
||||
'Column (length)' => 'Kolumna (długość)',
|
||||
|
||||
'length' => 'długość',
|
||||
|
||||
'Foreign keys' => 'Klucze obce',
|
||||
'Foreign key' => 'Klucz obcy',
|
||||
'Foreign key has been dropped.' => 'Klucz obcy został usunięty.',
|
||||
@@ -214,7 +213,7 @@ $translations = array(
|
||||
'ON DELETE' => 'W przypadku usunięcia',
|
||||
'ON UPDATE' => 'W przypadku zmiany',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Źródłowa i docelowa kolumna muszą być tego samego typu, powinien istnieć indeks na docelowej kolumnie oraz muszą istnieć dane referencyjne.',
|
||||
|
||||
|
||||
'Triggers' => 'Wyzwalacze',
|
||||
'Add trigger' => 'Dodaj wyzwalacz',
|
||||
'Trigger has been dropped.' => 'Wyzwalacz został usunięty.',
|
||||
@@ -225,7 +224,7 @@ $translations = array(
|
||||
'Time' => 'Czas',
|
||||
'Event' => 'Wydarzenie',
|
||||
'Name' => 'Nazwa',
|
||||
|
||||
|
||||
'select' => 'przeglądaj',
|
||||
'Select' => 'pokaż',
|
||||
'Select data' => 'Pokaż dane',
|
||||
@@ -251,16 +250,16 @@ $translations = array(
|
||||
'Loading' => 'Wczytywanie',
|
||||
'Whole result' => 'Wybierz wszystkie',
|
||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtów'),
|
||||
|
||||
|
||||
'Import' => 'Import',
|
||||
'%d row(s) have been imported.' => array('%d rekord został zaimportowany.', '%d rekordy zostały zaimportowane.', '%d rekordów zostało zaimportowanych.'),
|
||||
'File must be in UTF-8 encoding.' => 'Kodowanie pliku musi być ustawione na UTF-8.',
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Zmień',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+kliknij wartość, aby ją edytować.',
|
||||
'Use edit link to modify this value.' => 'Użyj linku edycji aby zmienić tę wartość.',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Rekord%s został dodany.',
|
||||
'Item has been deleted.' => 'Rekord został usunięty.',
|
||||
@@ -281,14 +280,14 @@ $translations = array(
|
||||
'Clone' => 'Duplikuj',
|
||||
'Delete' => 'Usuń',
|
||||
'You have no privileges to update this table.' => 'Brak uprawnień do edycji tej tabeli',
|
||||
|
||||
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'Nadawca',
|
||||
'Subject' => 'Temat',
|
||||
'Attachments' => 'Załączniki',
|
||||
'Send' => 'Wyślij',
|
||||
'%d e-mail(s) have been sent.' => array('Wysłano %d e-mail.', 'Wysłano %d e-maile.', 'Wysłano %d e-maili.'),
|
||||
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Numeryczne',
|
||||
'Date and time' => 'Data i czas',
|
||||
@@ -298,7 +297,7 @@ $translations = array(
|
||||
'Network' => 'Sieć',
|
||||
'Geometry' => 'Geometria',
|
||||
'Relations' => 'Relacje',
|
||||
|
||||
|
||||
'Editor' => 'Edytor',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
@@ -309,11 +308,11 @@ $translations = array(
|
||||
'now' => 'teraz',
|
||||
'yes' => 'tak',
|
||||
'no' => 'nie',
|
||||
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Plik już istnieje.',
|
||||
'Please use one of the extensions %s.' => 'Proszę użyć jednego z rozszerzeń: %s.',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Zmień schemat',
|
||||
'Create schema' => 'Utwórz schemat',
|
||||
@@ -322,7 +321,7 @@ $translations = array(
|
||||
'Schema has been altered.' => 'Schemat został zmieniony.',
|
||||
'Schema' => 'Schemat',
|
||||
'Invalid schema.' => 'Nieprawidłowy schemat.',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Sekwencje',
|
||||
'Create sequence' => 'Utwórz sekwencję',
|
||||
@@ -330,7 +329,7 @@ $translations = array(
|
||||
'Sequence has been created.' => 'Sekwencja została utworzona.',
|
||||
'Sequence has been altered.' => 'Sekwencja została zmieniona.',
|
||||
'Alter sequence' => 'Zmień sekwencję',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Typy użytkownika',
|
||||
'Create type' => 'Utwórz typ',
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'Criar Base de dados',
|
||||
'SQL command' => 'Comando SQL',
|
||||
'Logout' => 'Sair',
|
||||
'database' => 'base de dados',
|
||||
'Use' => 'Usar',
|
||||
'No tables.' => 'Não existem tabelas.',
|
||||
'select' => 'selecionar',
|
||||
@@ -96,7 +95,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Tipo de índice',
|
||||
'Column (length)' => 'Coluna (tamanho)',
|
||||
'length' => 'tamanho',
|
||||
'View has been dropped.' => 'A Visão foi apagada.',
|
||||
'View has been altered.' => 'A Visão foi alterada.',
|
||||
'View has been created.' => 'A Visão foi criada.',
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'Criar Base de dados',
|
||||
'SQL command' => 'Comando SQL',
|
||||
'Logout' => 'Terminar sessão',
|
||||
'database' => 'base de dados',
|
||||
'Use' => 'Usar',
|
||||
'No tables.' => 'Não existem tabelas.',
|
||||
'select' => 'registos',
|
||||
@@ -96,7 +95,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Tipo de índice',
|
||||
'Column (length)' => 'coluna (tamanho)',
|
||||
'length' => 'tamanho',
|
||||
'View has been dropped.' => 'Vista eliminada.',
|
||||
'View has been altered.' => 'Vista modificada.',
|
||||
'View has been created.' => 'Vista criada.',
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'Crează baza de date',
|
||||
'SQL command' => 'SQL query',
|
||||
'Logout' => 'Ieșire',
|
||||
'database' => 'baza de date',
|
||||
'Use' => 'Alege',
|
||||
'No tables.' => 'În baza de date nu sunt tabele.',
|
||||
'select' => 'selectează',
|
||||
@@ -96,7 +95,7 @@ $translations = array(
|
||||
'ON DELETE' => 'La ștergere',
|
||||
'ON UPDATE' => 'La modificare',
|
||||
'Index Type' => 'Tipul indexului',
|
||||
'Column (length)' => 'Coloană (lungimea)',
|
||||
'length' => 'lungimea',
|
||||
'View has been dropped.' => 'Reprezentarea a fost ștearsă.',
|
||||
'View has been altered.' => 'Reprezentarea a fost modificată.',
|
||||
'View has been created.' => 'Reprezentarea a fost creată.',
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'Создать базу данных',
|
||||
'SQL command' => 'SQL-запрос',
|
||||
'Logout' => 'Выйти',
|
||||
'database' => 'база данных',
|
||||
'Use' => 'Выбрать',
|
||||
'No tables.' => 'В базе данных нет таблиц.',
|
||||
'select' => 'выбрать',
|
||||
@@ -96,7 +95,7 @@ $translations = array(
|
||||
'ON DELETE' => 'При стирании',
|
||||
'ON UPDATE' => 'При обновлении',
|
||||
'Index Type' => 'Тип индекса',
|
||||
'Column (length)' => 'Поле (длина)',
|
||||
'length' => 'длина',
|
||||
'View has been dropped.' => 'Представление было удалено.',
|
||||
'View has been altered.' => 'Представление было изменено.',
|
||||
'View has been created.' => 'Представление было создано.',
|
||||
@@ -300,4 +299,5 @@ $translations = array(
|
||||
'There is a space in the input password which might be the cause.' => 'В введеном пароле есть пробел, это может быть причиною.',
|
||||
'Unknown error.' => 'Неизвестная ошибка.',
|
||||
'Database does not support password.' => 'База данных не поддерживает пароль.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Отключите %s или включите расширения %s или %s.',
|
||||
);
|
||||
|
@@ -32,7 +32,6 @@ $translations = array(
|
||||
'Create database' => 'Vytvoriť databázu',
|
||||
'SQL command' => 'SQL príkaz',
|
||||
'Logout' => 'Odhlásiť',
|
||||
'database' => 'databáza',
|
||||
'Use' => 'Vybrať',
|
||||
'No tables.' => 'Žiadne tabuľky.',
|
||||
'select' => 'vypísať',
|
||||
@@ -70,7 +69,7 @@ $translations = array(
|
||||
'Unable to select the table' => 'Tabuľku sa nepodarilo vypísať',
|
||||
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odošlite formulár znova.',
|
||||
'Comment' => 'Komentár',
|
||||
'Default values' => 'Východzie hodnoty',
|
||||
'Default values' => 'Predvolené hodnoty',
|
||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtov'),
|
||||
'No commands to execute.' => 'Žiadne príkazy na vykonanie.',
|
||||
'Unable to upload a file.' => 'Súbor sa nepodarilo nahrať.',
|
||||
@@ -94,10 +93,10 @@ $translations = array(
|
||||
'Add column' => 'Pridať stĺpec',
|
||||
'Alter' => 'Zmeniť',
|
||||
'Add foreign key' => 'Pridať cudzí kľúč',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'ON DELETE' => 'Pri zmazaní',
|
||||
'ON UPDATE' => 'Pri aktualizácii',
|
||||
'Index Type' => 'Typ indexu',
|
||||
'Column (length)' => 'Stĺpec (dĺžka)',
|
||||
'length' => 'dĺžka',
|
||||
'View has been dropped.' => 'Pohľad bol odstránený.',
|
||||
'View has been altered.' => 'Pohľad bol zmenený.',
|
||||
'View has been created.' => 'Pohľad bol vytvorený.',
|
||||
@@ -265,4 +264,40 @@ $translations = array(
|
||||
'Permanent link' => 'Permanentný odkaz',
|
||||
'Edit all' => 'Upraviť všetko',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'Drop %s?' => 'Odstrániť %s?',
|
||||
'Tables have been optimized.' => 'Tabuľky boli optimalizované.',
|
||||
'Materialized view' => 'Materializovaný pohľad',
|
||||
'Vacuum' => 'Vyčistiť',
|
||||
'Selected' => 'Označené',
|
||||
'overwrite' => 'prepísať',
|
||||
'DB' => 'DB',
|
||||
'File must be in UTF-8 encoding.' => 'Súbor musí byť v kódovaní UTF-8.',
|
||||
'Modify' => 'Zmeniť',
|
||||
'Load more data' => 'Načítať ďalšie dáta',
|
||||
'Loading' => 'Načítava sa',
|
||||
'ATTACH queries are not supported.' => 'Dotazy ATTACH nie sú podporované.',
|
||||
'Warnings' => 'Varovania',
|
||||
'%d / ' => '%d / ',
|
||||
'Limit rows' => 'Limit riadkov',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer nepodporuje prístup k databáze bez hesla, <a href="https://www.adminer.org/cs/password/"%s>viac informácií</a>.',
|
||||
'Default value' => 'Predvolená hodnota',
|
||||
'Full table scan' => 'Prechod celej tabuľky',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Príliš veľa pokusov o prihlásenie, skúste to znova za %d minutu.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minuty.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minút.'),
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Vďaka za používanie Admineru, <a href="https://www.adminer.org/cs/donation/">prispejte</a> na vývoj.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Platnosť hlavného hesla vypršala. <a href="https://www.adminer.org/cs/extension/"%s>Implementujte</a> metodu %s, aby platilo natrvalo.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Akcia sa vykoná po úspešnom prihlásení s rovnakými prihlasovacími údajmi.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Pripojenie k privilegovaným portom nie je povolené.',
|
||||
'There is a space in the input password which might be the cause.' => 'V zadanom hesle je medzera, ktorá môže byť príčinou.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Pokiaľ ste tento požiadavok neodoslali z Adminera, zatvorte túto stránku.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Veľký SQL soubor môžete nahrať pomocou FTP a importovať ho zo servera.',
|
||||
'Size' => 'Veľkosť',
|
||||
'Compute' => 'Spočítať',
|
||||
'You are offline.' => 'Ste offline.',
|
||||
'You have no privileges to update this table.' => 'Nemáte oprávnenie na aktualizáciu tejto tabuľky.',
|
||||
'Saving' => 'Ukladá sa',
|
||||
'Unknown error.' => 'Neznáma chyba.',
|
||||
'Database does not support password.' => 'Databáza nepodporuje heslo.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Zakážte %s alebo povoľte rozšírenie %s alebo %s.',
|
||||
'yes' => 'áno',
|
||||
'no' => 'nie',
|
||||
);
|
||||
|
@@ -19,10 +19,10 @@ $translations = array(
|
||||
'Session expired, please login again.' => 'Seja je potekla. Prosimo, ponovno se prijavite.',
|
||||
'%s version: %s through PHP extension %s' => 'Verzija %s: %s preko dodatka za PHP %s',
|
||||
'Refresh' => 'Osveži',
|
||||
|
||||
|
||||
// text direction
|
||||
'ltr' => 'ltr',
|
||||
|
||||
|
||||
'Privileges' => 'Pravice',
|
||||
'Create user' => 'Ustvari uporabnika',
|
||||
'User has been dropped.' => 'Uporabnik je odstranjen.',
|
||||
@@ -33,14 +33,14 @@ $translations = array(
|
||||
'Routine' => 'Postopek',
|
||||
'Grant' => 'Dovoli',
|
||||
'Revoke' => 'Odvzemi',
|
||||
|
||||
|
||||
'Process list' => 'Seznam procesov',
|
||||
'%d process(es) have been killed.' => array('Končan je %d proces.', 'Končana sta %d procesa.', 'Končani so %d procesi.', 'Končanih je %d procesov.'),
|
||||
'Kill' => 'Končaj',
|
||||
|
||||
|
||||
'Variables' => 'Spremenljivke',
|
||||
'Status' => 'Stanje',
|
||||
|
||||
|
||||
'SQL command' => 'Ukaz SQL',
|
||||
'%d query(s) executed OK.' => array('Uspešno se je končala %d poizvedba.', 'Uspešno sta se končali %d poizvedbi.', 'Uspešno so se končale %d poizvedbe.', 'Uspešno se je končalo %d poizvedb.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Poizvedba se je uspešno izvedla, spremenjena je %d vrstica.', 'Poizvedba se je uspešno izvedla, spremenjeni sta %d vrstici.', 'Poizvedba se je uspešno izvedla, spremenjene so %d vrstice.', 'Poizvedba se je uspešno izvedla, spremenjenih je %d vrstic.'),
|
||||
@@ -53,7 +53,7 @@ $translations = array(
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Zgodovina',
|
||||
'Clear' => 'Počisti',
|
||||
|
||||
|
||||
'File upload' => 'Naloži datoteko',
|
||||
'From server' => 'z strežnika',
|
||||
'Webserver file %s' => 'Datoteka na spletnem strežniku %s',
|
||||
@@ -63,16 +63,15 @@ $translations = array(
|
||||
'Unable to upload a file.' => 'Ne morem naložiti datoteke.',
|
||||
'Maximum allowed file size is %sB.' => 'Največja velikost datoteke je %sB.',
|
||||
'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',
|
||||
'Output' => 'Izhod rezultata',
|
||||
'open' => 'odpri',
|
||||
'save' => 'shrani',
|
||||
'Format' => 'Format',
|
||||
'Data' => 'Podatki',
|
||||
|
||||
|
||||
'Database' => 'Baza',
|
||||
'database' => 'baza',
|
||||
'Use' => 'Uporabi',
|
||||
'Select database' => 'Izberi bazo',
|
||||
'Invalid database.' => 'Neveljavna baza.',
|
||||
@@ -84,7 +83,7 @@ $translations = array(
|
||||
'Alter database' => 'Spremeni bazo',
|
||||
'Create database' => 'Ustvari bazo',
|
||||
'Database schema' => 'Shema baze',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
@@ -106,7 +105,7 @@ $translations = array(
|
||||
'Tables have been moved.' => 'Tabele so premaknjene.',
|
||||
'Copy' => 'Kopiraj',
|
||||
'Tables have been copied.' => 'Tabele so kopirane.',
|
||||
|
||||
|
||||
'Routines' => 'Postopki',
|
||||
'Routine has been called, %d row(s) affected.' => array('Klican je bil postopek, spremenjena je %d vrstica.', 'Klican je bil postopek, spremenjeni sta %d vrstici.', 'Klican je bil postopek, spremenjene so %d vrstice.', 'Klican je bil postopek, spremenjenih je %d vrstic.'),
|
||||
'Call' => 'Pokliči',
|
||||
@@ -119,7 +118,7 @@ $translations = array(
|
||||
'Alter function' => 'Spremeni funkcijo',
|
||||
'Alter procedure' => 'Spremeni postopek',
|
||||
'Return type' => 'Vračalni tip',
|
||||
|
||||
|
||||
'Events' => 'Dogodki',
|
||||
'Event has been dropped.' => 'Dogodek je zavržen.',
|
||||
'Event has been altered.' => 'Dogodek je spremenjen.',
|
||||
@@ -132,7 +131,7 @@ $translations = array(
|
||||
'Start' => 'Začetek',
|
||||
'End' => 'Konec',
|
||||
'On completion preserve' => 'Po zaključku ohrani',
|
||||
|
||||
|
||||
'Tables' => 'Tabele',
|
||||
'Tables and views' => 'Tabele in pogledi',
|
||||
'Table' => 'Tabela',
|
||||
@@ -160,26 +159,26 @@ $translations = array(
|
||||
'Move down' => 'Premakni dol',
|
||||
'Remove' => 'Odstrani',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Največje število dovoljenih polje je preseženo. Prosimo, povečajte %s.',
|
||||
|
||||
|
||||
'Partition by' => 'Porazdeli po',
|
||||
'Partitions' => 'Porazdelitve',
|
||||
'Partition name' => 'Ime porazdelitve',
|
||||
'Values' => 'Vrednosti',
|
||||
|
||||
|
||||
'View' => 'Pogledi',
|
||||
'View has been dropped.' => 'Pogled je zavržen.',
|
||||
'View has been altered.' => 'Pogled je spremenjen.',
|
||||
'View has been created.' => 'Pogled je ustvarjen.',
|
||||
'Alter view' => 'Spremeni pogled',
|
||||
'Create view' => 'Ustvari pogled',
|
||||
|
||||
|
||||
'Indexes' => 'Indeksi',
|
||||
'Indexes have been altered.' => 'Indeksi so spremenjeni.',
|
||||
'Alter indexes' => 'Spremeni indekse',
|
||||
'Add next' => 'Dodaj naslednjega',
|
||||
'Index Type' => 'Tip indeksa',
|
||||
'Column (length)' => 'Stolpec (dolžina)',
|
||||
|
||||
'length' => 'dolžina',
|
||||
|
||||
'Foreign keys' => 'Tuji ključi',
|
||||
'Foreign key' => 'Tuj ključ',
|
||||
'Foreign key has been dropped.' => 'Tuj ključ je zavržen.',
|
||||
@@ -195,7 +194,7 @@ $translations = array(
|
||||
'ON DELETE' => 'pri brisanju',
|
||||
'ON UPDATE' => 'pri posodabljanju',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Izvorni in ciljni stolpec mora imeti isti podatkovni tip. Obstajati mora indeks na ciljnih stolpcih in obstajati morajo referenčni podatki.',
|
||||
|
||||
|
||||
'Triggers' => 'Sprožilniki',
|
||||
'Add trigger' => 'Dodaj sprožilnik',
|
||||
'Trigger has been dropped.' => 'Sprožilnik je odstranjen.',
|
||||
@@ -206,7 +205,7 @@ $translations = array(
|
||||
'Time' => 'Čas',
|
||||
'Event' => 'Dogodek',
|
||||
'Name' => 'Naziv',
|
||||
|
||||
|
||||
'select' => 'izberi',
|
||||
'Select' => 'Izberi',
|
||||
'Select data' => 'Izberi podatke',
|
||||
@@ -227,14 +226,14 @@ $translations = array(
|
||||
'last' => 'Zadnja',
|
||||
'Whole result' => 'Cel razultat',
|
||||
'%d byte(s)' => array('%d bajt', '%d bajta', '%d bajti', '%d bajtov'),
|
||||
|
||||
|
||||
'Import' => 'Uvozi',
|
||||
'%d row(s) have been imported.' => array('Uvožena je %d vrstica.', 'Uvoženi sta %d vrstici.', 'Uvožene so %d vrstice.', 'Uvoženih je %d vrstic.'),
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klik na vrednost za urejanje.',
|
||||
'Use edit link to modify this value.' => 'Uporabite urejanje povezave za spreminjanje te vrednosti.',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Predmet%s je vstavljen.',
|
||||
'Item has been deleted.' => 'Predmet je izbrisan.',
|
||||
@@ -252,14 +251,14 @@ $translations = array(
|
||||
'Save and insert next' => 'Shrani in vstavi tekst',
|
||||
'Clone' => 'Kloniraj',
|
||||
'Delete' => 'Izbriši',
|
||||
|
||||
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'Od',
|
||||
'Subject' => 'Zadeva',
|
||||
'Attachments' => 'Priponke',
|
||||
'Send' => 'Pošlji',
|
||||
'%d e-mail(s) have been sent.' => array('Poslan je %d e-mail.', 'Poslana sta %d e-maila.', 'Poslani so %d e-maili.', 'Poslanih je %d e-mailov.'),
|
||||
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Števila',
|
||||
'Date and time' => 'Datum in čas',
|
||||
@@ -269,18 +268,18 @@ $translations = array(
|
||||
'Network' => 'Mrežni',
|
||||
'Geometry' => 'Geometrčni',
|
||||
'Relations' => 'Relacijski',
|
||||
|
||||
|
||||
'Editor' => 'Urejevalnik',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => 'd.m.[rrrr]',
|
||||
'now' => 'zdaj',
|
||||
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Datoteka obstaja.',
|
||||
'Please use one of the extensions %s.' => 'Prosim, uporabite enega od dodatkov %s.',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Spremeni shemo',
|
||||
'Create schema' => 'Ustvari shemo',
|
||||
@@ -289,7 +288,7 @@ $translations = array(
|
||||
'Schema has been altered.' => 'Shema je spremenjena.',
|
||||
'Schema' => 'Shema',
|
||||
'Invalid schema.' => 'Neveljavna shema.',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Sekvence',
|
||||
'Create sequence' => 'Ustvari sekvenco',
|
||||
@@ -297,7 +296,7 @@ $translations = array(
|
||||
'Sequence has been created.' => 'Sekvence je ustvarjena.',
|
||||
'Sequence has been altered.' => 'Sekvence je spremenjena.',
|
||||
'Alter sequence' => 'Spremni sekvenco',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Uporabniški tipi',
|
||||
'Create type' => 'Ustvari tip',
|
||||
|
@@ -73,7 +73,6 @@ $translations = array(
|
||||
'Data' => 'Податци',
|
||||
|
||||
'Database' => 'База података',
|
||||
'database' => 'база података',
|
||||
'Use' => 'Користи',
|
||||
'Select database' => 'Изаберите базу',
|
||||
'Invalid database.' => 'Неисправна база података.',
|
||||
@@ -183,7 +182,7 @@ $translations = array(
|
||||
'Alter indexes' => 'Уреди индексе',
|
||||
'Add next' => 'Додај следећи',
|
||||
'Index Type' => 'Тип индекса',
|
||||
'Column (length)' => 'Колона (дужина)',
|
||||
'length' => 'дужина',
|
||||
|
||||
'Foreign keys' => 'Страни кључеви',
|
||||
'Foreign key' => 'Страни кључ',
|
||||
|
@@ -14,7 +14,7 @@ $translations = array(
|
||||
'Invalid credentials.' => 'Ogiltiga inloggningsuppgifter.',
|
||||
'There is a space in the input password which might be the cause.' => 'Det finns ett mellanslag i lösenordet, vilket kan vara anledningen.',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer tillåter inte att ansluta till en databas utan lösenord. <a href="https://www.adminer.org/en/password/"%s>Mer information</a>.',
|
||||
'Database does not support password.' => 'Databasen stöder inte lösenord.',
|
||||
'Database does not support password.' => 'Databasen stödjer inte lösenord.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('För många misslyckade inloggningar, försök igen om %d minut.', 'För många misslyckade inloggningar, försök igen om %d minuter.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Huvudlösenordet har löpt ut. <a href="https://www.adminer.org/en/extension/"%s>Implementera</a> %s en metod för att göra det permanent.',
|
||||
'Language' => 'Språk',
|
||||
@@ -25,7 +25,7 @@ $translations = array(
|
||||
'Connecting to privileged ports is not allowed.' => 'Anslutning till privilegierade portar är inte tillåtet.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Stäng av %s eller sätt på %s eller %s tilläggen.',
|
||||
'Session support must be enabled.' => 'Support för sessioner måste vara på.',
|
||||
'Session expired, please login again.' => 'Session har löpt ur, vänligen logga in igen.',
|
||||
'Session expired, please login again.' => 'Session har löpt ut, vänligen logga in igen.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Åtgärden kommer att utföras efter en lyckad inloggning med samma inloggningsuppgifter.',
|
||||
'%s version: %s through PHP extension %s' => '%s version: %s genom PHP-tillägg %s',
|
||||
'Refresh' => 'Ladda om',
|
||||
@@ -89,7 +89,6 @@ $translations = array(
|
||||
'Data' => 'Data',
|
||||
|
||||
'Database' => 'Databas',
|
||||
'database' => 'databas',
|
||||
'DB' => 'DB',
|
||||
'Use' => 'Använd',
|
||||
'Select database' => 'Välj databas',
|
||||
@@ -207,7 +206,7 @@ $translations = array(
|
||||
'Alter indexes' => 'Ändra index',
|
||||
'Add next' => 'Lägg till nästa',
|
||||
'Index Type' => 'Indextyp',
|
||||
'Column (length)' => 'Kolumn (längd)',
|
||||
'length' => 'längd',
|
||||
|
||||
'Foreign keys' => 'Främmande nycklar',
|
||||
'Foreign key' => 'Främmande nyckel',
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'தகவல்தளத்தை உருவாக்கு',
|
||||
'SQL command' => 'SQL கட்டளை',
|
||||
'Logout' => 'வெளியேறு',
|
||||
'database' => 'தகவல்தளம்',
|
||||
'Use' => 'உபயோகி',
|
||||
'No tables.' => 'அட்டவணை இல்லை.',
|
||||
'select' => 'தேர்வு செய்',
|
||||
@@ -94,7 +93,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'அகவரிசை வகை (Index Type)',
|
||||
'Column (length)' => 'நெடுவரிசை (நீளம்)',
|
||||
'length' => 'நீளம்',
|
||||
'View has been dropped.' => 'தோற்றம் நீக்கப்பட்டது.',
|
||||
'View has been altered.' => 'தோற்றம் மாற்றப்பட்டது.',
|
||||
'View has been created.' => 'தோற்றம் உருவாக்கப்பட்டது.',
|
||||
|
@@ -31,7 +31,6 @@ $translations = array(
|
||||
'Create database' => 'สร้างฐานข้อมูล',
|
||||
'SQL command' => 'คำสั่ง SQL',
|
||||
'Logout' => 'ออกจากระบบ',
|
||||
'database' => 'ฐานข้อมูล',
|
||||
'Use' => 'ใช้งาน',
|
||||
'No tables.' => 'ไม่พบตาราง.',
|
||||
'select' => 'เลือก',
|
||||
@@ -96,7 +95,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'ชนิดของดัชนี',
|
||||
'Column (length)' => 'คอลัมน์ (ความยาว)',
|
||||
'length' => 'ความยาว',
|
||||
'View has been dropped.' => 'วิวถูกลบแล้ว.',
|
||||
'View has been altered.' => 'วิวถูกเปลี่ยนแปลงแล้ว.',
|
||||
'View has been created.' => 'วิวถูกสร้างแล้ว.',
|
||||
|
@@ -84,7 +84,6 @@ $translations = array(
|
||||
'Data' => 'Veri',
|
||||
|
||||
'Database' => 'Veri Tabanı',
|
||||
'database' => 'veri tabanı',
|
||||
'DB' => 'DB',
|
||||
'Use' => 'Kullan',
|
||||
'Select database' => 'Veri tabanı seç',
|
||||
@@ -201,7 +200,7 @@ $translations = array(
|
||||
'Alter indexes' => 'İndeksleri değiştir',
|
||||
'Add next' => 'Bundan sonra ekle',
|
||||
'Index Type' => 'İndex Türü',
|
||||
'Column (length)' => 'Kolon (uzunluğu)',
|
||||
'length' => 'uzunluğu',
|
||||
|
||||
'Foreign keys' => 'Dış anahtarlar',
|
||||
'Foreign key' => 'Dış anahtar',
|
||||
|
@@ -19,10 +19,10 @@ $translations = array(
|
||||
'Session expired, please login again.' => 'Сесія закінчилась, будь ласка, увійдіть в систему знову.',
|
||||
'%s version: %s through PHP extension %s' => 'Версія %s: %s з PHP-розширенням %s',
|
||||
'Refresh' => 'Оновити',
|
||||
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
|
||||
'Privileges' => 'Привілеї',
|
||||
'Create user' => 'Створити користувача',
|
||||
'User has been dropped.' => 'Користувача було видалено.',
|
||||
@@ -33,14 +33,14 @@ $translations = array(
|
||||
'Routine' => 'Процедура',
|
||||
'Grant' => 'Дозволити',
|
||||
'Revoke' => 'Заборонити',
|
||||
|
||||
|
||||
'Process list' => 'Перелік процесів',
|
||||
'%d process(es) have been killed.' => array('Було завершено %d процес.', 'Було завершено %d процеси.', 'Було завершёно %d процесів.'),
|
||||
'Kill' => 'Завершити процес',
|
||||
|
||||
|
||||
'Variables' => 'Змінні',
|
||||
'Status' => 'Статус',
|
||||
|
||||
|
||||
'SQL command' => 'SQL запит',
|
||||
'%d query(s) executed OK.' => array('%d запит виконано успішно.', '%d запити виконано успішно.', '%d запитів виконано успішно.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Запит виконано успішно, змінено %d рядок.', 'Запит виконано успішно, змінено %d рядки.', 'Запит виконано успішно, змінено %d рядків.'),
|
||||
@@ -54,7 +54,7 @@ $translations = array(
|
||||
'History' => 'Історія',
|
||||
'Clear' => 'Очистити',
|
||||
'Edit all' => 'Редагувати все',
|
||||
|
||||
|
||||
'File upload' => 'Завантажити файл',
|
||||
'From server' => 'З сервера',
|
||||
'Webserver file %s' => 'Файл %s на вебсервері',
|
||||
@@ -64,16 +64,15 @@ $translations = array(
|
||||
'Unable to upload a file.' => 'Неможливо завантажити файл.',
|
||||
'Maximum allowed file size is %sB.' => 'Максимально допустимий розмір файлу %sБ.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Занадто великий об\'єм POST-даних. Зменшіть об\'єм або збільшіть параметр директиви %s конфигурації.',
|
||||
|
||||
|
||||
'Export' => 'Експорт',
|
||||
'Output' => 'Вихідні дані',
|
||||
'open' => 'відкрити',
|
||||
'save' => 'зберегти',
|
||||
'Format' => 'Формат',
|
||||
'Data' => 'Дані',
|
||||
|
||||
|
||||
'Database' => 'База даних',
|
||||
'database' => 'база даних',
|
||||
'Use' => 'Обрати',
|
||||
'Select database' => 'Обрати базу даних',
|
||||
'Invalid database.' => 'Погана база даних.',
|
||||
@@ -85,10 +84,10 @@ $translations = array(
|
||||
'Alter database' => 'Змінити базу даних',
|
||||
'Create database' => 'Створити базу даних',
|
||||
'Database schema' => 'Схема бази даних',
|
||||
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Постійне посилання',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
@@ -110,7 +109,7 @@ $translations = array(
|
||||
'Tables have been moved.' => 'Таблиці було перенесено.',
|
||||
'Copy' => 'копіювати',
|
||||
'Tables have been copied.' => 'Таблиці було зкопійовано.',
|
||||
|
||||
|
||||
'Routines' => 'Збережені процедури',
|
||||
'Routine has been called, %d row(s) affected.' => array('Була викликана процедура, %d запис було змінено.', 'Була викликана процедура, %d записи було змінено.', 'Була викликана процедура, %d записів було змінено.'),
|
||||
'Call' => 'Викликати',
|
||||
@@ -123,7 +122,7 @@ $translations = array(
|
||||
'Alter function' => 'Змінити функцію',
|
||||
'Alter procedure' => 'Змінити процедуру',
|
||||
'Return type' => 'Тип, що повернеться',
|
||||
|
||||
|
||||
'Events' => 'Події',
|
||||
'Event has been dropped.' => 'Подію було видалено.',
|
||||
'Event has been altered.' => 'Подію було змінено.',
|
||||
@@ -136,7 +135,7 @@ $translations = array(
|
||||
'Start' => 'Початок',
|
||||
'End' => 'Кінець',
|
||||
'On completion preserve' => 'Після завершення зберегти',
|
||||
|
||||
|
||||
'Tables' => 'Таблиці',
|
||||
'Tables and views' => 'Таблиці і вигляди',
|
||||
'Table' => 'Таблиця',
|
||||
@@ -165,26 +164,26 @@ $translations = array(
|
||||
'Move down' => 'Пересунути вниз',
|
||||
'Remove' => 'Видалити',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Досягнута максимальна кількість доступних полів. Будь ласка, збільшіть %s.',
|
||||
|
||||
|
||||
'Partition by' => 'Розділити по',
|
||||
'Partitions' => 'Розділи',
|
||||
'Partition name' => 'Назва розділу',
|
||||
'Values' => 'Значення',
|
||||
|
||||
|
||||
'View' => 'Вигляд',
|
||||
'View has been dropped.' => 'Вигляд було видалено.',
|
||||
'View has been altered.' => 'Вигляд було змінено.',
|
||||
'View has been created.' => 'Вигляд було створено.',
|
||||
'Alter view' => 'Змінити вигляд',
|
||||
'Create view' => 'Створити вигляд',
|
||||
|
||||
|
||||
'Indexes' => 'Індекси',
|
||||
'Indexes have been altered.' => 'Індексування було змінено.',
|
||||
'Alter indexes' => 'Змінити індексування',
|
||||
'Add next' => 'Додати ще',
|
||||
'Index Type' => 'Тип індексу',
|
||||
'Column (length)' => 'Стовпець (довжина)',
|
||||
|
||||
'length' => 'довжина',
|
||||
|
||||
'Foreign keys' => 'Зовнішні ключі',
|
||||
'Foreign key' => 'Зовнішній ключ',
|
||||
'Foreign key has been dropped.' => 'Зовнішній ключ було видалено.',
|
||||
@@ -200,7 +199,7 @@ $translations = array(
|
||||
'ON DELETE' => 'ПРИ ВИДАЛЕННІ',
|
||||
'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.' => 'Стовпці повинні мати той самий тип даних, цільові стовпці повинні бути проіндексовані і дані, на які посилаються повинні існувати.',
|
||||
|
||||
|
||||
'Triggers' => 'Тригери',
|
||||
'Add trigger' => 'Додати тригер',
|
||||
'Trigger has been dropped.' => 'Тригер було видалено.',
|
||||
@@ -211,7 +210,7 @@ $translations = array(
|
||||
'Time' => 'Час',
|
||||
'Event' => 'Подія',
|
||||
'Name' => 'Назва',
|
||||
|
||||
|
||||
'select' => 'вибрати',
|
||||
'Select' => 'Вибрати',
|
||||
'Select data' => 'Вибрати дані',
|
||||
@@ -232,14 +231,14 @@ $translations = array(
|
||||
'last' => 'остання',
|
||||
'Whole result' => 'Весь результат',
|
||||
'%d byte(s)' => array('%d байт', '%d байта', '%d байтів'),
|
||||
|
||||
|
||||
'Import' => 'Імпортувати',
|
||||
'%d row(s) have been imported.' => array('%d рядок було імпортовано.', '%d рядки було імпортовано.', '%d рядків було імпортовано.'),
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+клікніть на значенні щоб змінити його.',
|
||||
'Use edit link to modify this value.' => 'Використовуйте посилання щоб змінити це значення.',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Запис%s було вставлено.',
|
||||
'Item has been deleted.' => 'Запис було видалено.',
|
||||
@@ -257,14 +256,14 @@ $translations = array(
|
||||
'Save and insert next' => 'Зберегти і вставити знову',
|
||||
'Clone' => 'Клонувати',
|
||||
'Delete' => 'Видалити',
|
||||
|
||||
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'Від',
|
||||
'Subject' => 'Заголовок',
|
||||
'Attachments' => 'Додатки',
|
||||
'Send' => 'Надіслати',
|
||||
'%d e-mail(s) have been sent.' => array('Було надіслано %d повідомлення.', 'Було надіслано %d повідомлення.', 'Було надіслано %d повідомлень.'),
|
||||
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Числа',
|
||||
'Date and time' => 'Дата і час',
|
||||
@@ -274,7 +273,7 @@ $translations = array(
|
||||
'Network' => 'Мережа',
|
||||
'Geometry' => 'Геометрія',
|
||||
'Relations' => 'Зв\'язки',
|
||||
|
||||
|
||||
'Editor' => 'Редактор',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$5.$3.$1',
|
||||
@@ -285,11 +284,11 @@ $translations = array(
|
||||
'now' => 'зараз',
|
||||
'yes' => 'так',
|
||||
'no' => 'ні',
|
||||
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Файл існує.',
|
||||
'Please use one of the extensions %s.' => 'Будь ласка, використовуйте одне з розширень %s.',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Змінити схему',
|
||||
'Create schema' => 'Створити схему',
|
||||
@@ -298,7 +297,7 @@ $translations = array(
|
||||
'Schema has been altered.' => 'Схему було змінено.',
|
||||
'Schema' => 'Схема',
|
||||
'Invalid schema.' => 'Невірна схема.',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Послідовності',
|
||||
'Create sequence' => 'Створити послідовність',
|
||||
@@ -306,7 +305,7 @@ $translations = array(
|
||||
'Sequence has been created.' => 'Послідовність було створено.',
|
||||
'Sequence has been altered.' => 'Послідовність було змінено.',
|
||||
'Alter sequence' => 'Змінити послідовність',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Типи користувачів',
|
||||
'Create type' => 'Створити тип',
|
||||
|
@@ -21,10 +21,10 @@ $translations = array(
|
||||
'Session expired, please login again.' => 'Phiên làm việc đã hết, hãy đăng nhập lại.',
|
||||
'%s version: %s through PHP extension %s' => 'Phiên bản %s: %s (PHP extension: %s)',
|
||||
'Refresh' => 'Làm mới',
|
||||
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
|
||||
'Privileges' => 'Quyền truy cập',
|
||||
'Create user' => 'Tạo người dùng',
|
||||
'User has been dropped.' => 'Đã xoá người dùng.',
|
||||
@@ -35,14 +35,14 @@ $translations = array(
|
||||
'Routine' => 'Hàm tích hợp',
|
||||
'Grant' => 'Cấp quyền',
|
||||
'Revoke' => 'Tước quyền',
|
||||
|
||||
|
||||
'Process list' => 'Danh sách tiến trình',
|
||||
'%d process(es) have been killed.' => '%d tiến trình đã dừng.',
|
||||
'Kill' => 'Dừng',
|
||||
|
||||
|
||||
'Variables' => 'Biến',
|
||||
'Status' => 'Trạng thái',
|
||||
|
||||
|
||||
'SQL command' => 'Câu lệnh SQL',
|
||||
'%d query(s) executed OK.' => '%d câu lệnh đã chạy thành công.',
|
||||
'Query executed OK, %d row(s) affected.' => 'Đã thực hiện xong, ảnh hưởng đến %d dòng.',
|
||||
@@ -56,7 +56,7 @@ $translations = array(
|
||||
'History' => 'Lịch sử',
|
||||
'Clear' => 'Xoá',
|
||||
'Edit all' => 'Sửa tất cả',
|
||||
|
||||
|
||||
'File upload' => 'Tải tệp lên',
|
||||
'From server' => 'Dùng tệp trên máy chủ',
|
||||
'Webserver file %s' => 'Tệp trên máy chủ',
|
||||
@@ -67,16 +67,15 @@ $translations = array(
|
||||
'Maximum allowed file size is %sB.' => 'Kích thước tệp tối đa là %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Dữ liệu tải lên/POST quá lớn. Hãy giảm kích thước tệp hoặc tăng cấu hình (hiện tại %s).',
|
||||
'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',
|
||||
'Output' => 'Kết quả',
|
||||
'open' => 'xem',
|
||||
'save' => 'lưu',
|
||||
'Format' => 'Định dạng',
|
||||
'Data' => 'Dữ liệu',
|
||||
|
||||
|
||||
'Database' => 'Cơ sở dữ liệu',
|
||||
'database' => 'cơ sở dữ liệu',
|
||||
'Use' => 'Sử dụng',
|
||||
'Select database' => 'Chọn CSDL',
|
||||
'Invalid database.' => 'CSDL sai.',
|
||||
@@ -88,10 +87,10 @@ $translations = array(
|
||||
'Alter database' => 'Thay đổi CSDL',
|
||||
'Create database' => 'Tạo CSDL',
|
||||
'Database schema' => 'Cấu trúc CSDL',
|
||||
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Liên kết cố định',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
@@ -114,7 +113,7 @@ $translations = array(
|
||||
'Tables have been moved.' => 'Bảng.',
|
||||
'Copy' => 'Sao chép',
|
||||
'Tables have been copied.' => 'Bảng đã được sao chép.',
|
||||
|
||||
|
||||
'Routines' => 'Routines',
|
||||
'Routine has been called, %d row(s) affected.' => 'Đã chạy routine, thay đổi %d dòng.',
|
||||
'Call' => 'Gọi',
|
||||
@@ -139,7 +138,7 @@ $translations = array(
|
||||
'Start' => 'Bắt đầu',
|
||||
'End' => 'Kết thúc',
|
||||
'On completion preserve' => 'Khi kết thúc, duy trì',
|
||||
|
||||
|
||||
'Tables' => 'Các bảng',
|
||||
'Tables and views' => 'Bảng và khung nhìn',
|
||||
'Table' => 'Bảng',
|
||||
@@ -170,26 +169,26 @@ $translations = array(
|
||||
'Move down' => 'Chuyển xuống dưới',
|
||||
'Remove' => 'Xoá',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Thiết lập %s cần tăng thêm. (Đã vượt giới hạnố trường tối đa cho phép trong một biểu mẫu).',
|
||||
|
||||
|
||||
'Partition by' => 'Phân chia bằng',
|
||||
'Partitions' => 'Phân hoạch',
|
||||
'Partition name' => 'Tên phân hoạch',
|
||||
'Values' => 'Giá trị',
|
||||
|
||||
|
||||
'View' => 'Khung nhìn',
|
||||
'View has been dropped.' => 'Khung nhìn đã bị xoá.',
|
||||
'View has been altered.' => 'Khung nhìn đã được sửa.',
|
||||
'View has been created.' => 'Khung nhìn đã được tạo.',
|
||||
'Alter view' => 'Sửa khung nhìn',
|
||||
'Create view' => 'Tạo khung nhìn',
|
||||
|
||||
|
||||
'Indexes' => 'Chỉ mục',
|
||||
'Indexes have been altered.' => 'Chỉ mục đã được sửa.',
|
||||
'Alter indexes' => 'Sửa chỉ mục',
|
||||
'Add next' => 'Thêm tiếp',
|
||||
'Index Type' => 'Loại chỉ mục',
|
||||
'Column (length)' => 'Cột (độ dài)',
|
||||
|
||||
'length' => 'độ dài',
|
||||
|
||||
'Foreign keys' => 'Các khoá ngoại',
|
||||
'Foreign key' => 'Khoá ngoại',
|
||||
'Foreign key has been dropped.' => 'Khoá ngoại đã bị xoá.',
|
||||
@@ -205,7 +204,7 @@ $translations = array(
|
||||
'ON DELETE' => 'Khi xoá',
|
||||
'ON UPDATE' => 'Khi cập nhật',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Cột gốc và cột đích phải cùng kiểu, phải đặt chỉ mục trong cột đích và dữ liệu tham chiếu phải tồn tại.',
|
||||
|
||||
|
||||
'Triggers' => 'Phản xạ',
|
||||
'Add trigger' => 'Thêm phản xạ',
|
||||
'Trigger has been dropped.' => 'Đã xoá phản xạ.',
|
||||
@@ -216,7 +215,7 @@ $translations = array(
|
||||
'Time' => 'Thời gian',
|
||||
'Event' => 'Sự kiện',
|
||||
'Name' => 'Tên',
|
||||
|
||||
|
||||
'select' => 'xem',
|
||||
'Select' => 'Xem',
|
||||
'Select data' => 'Xem dữ liệu',
|
||||
@@ -240,16 +239,16 @@ $translations = array(
|
||||
'Loading' => 'Đang nạp',
|
||||
'Whole result' => 'Toàn bộ kết quả',
|
||||
'%d byte(s)' => '%d byte(s)',
|
||||
|
||||
|
||||
'Import' => 'Nhập khẩu',
|
||||
'%d row(s) have been imported.' => 'Đã nhập % dòng dữ liệu.',
|
||||
'File must be in UTF-8 encoding.' => 'Tệp phải mã hoá bằng chuẩn UTF-8.',
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Sửa',
|
||||
'Ctrl+click on a value to modify it.' => 'Nhấn Ctrl và bấm vào giá trị để sửa.',
|
||||
'Use edit link to modify this value.' => 'Dùng nút sửa để thay đổi giá trị này.',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Đã thêm%s.',
|
||||
'Item has been deleted.' => 'Đã xoá.',
|
||||
@@ -269,14 +268,14 @@ $translations = array(
|
||||
'Clone' => 'Sao chép',
|
||||
'Delete' => 'Xoá',
|
||||
'You have no privileges to update this table.' => 'Bạn không có quyền sửa bảng này.',
|
||||
|
||||
|
||||
'E-mail' => 'Địa chỉ email',
|
||||
'From' => 'Người gửi',
|
||||
'Subject' => 'Chủ đề',
|
||||
'Attachments' => 'Đính kèm',
|
||||
'Send' => 'Gửi',
|
||||
'%d e-mail(s) have been sent.' => '%d thư đã gửi.',
|
||||
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Số',
|
||||
'Date and time' => 'Ngày giờ',
|
||||
@@ -286,7 +285,7 @@ $translations = array(
|
||||
'Network' => 'Mạng',
|
||||
'Geometry' => 'Toạ độ',
|
||||
'Relations' => 'Quan hệ',
|
||||
|
||||
|
||||
'Editor' => 'Biên tập',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
@@ -297,11 +296,11 @@ $translations = array(
|
||||
'now' => 'hiện tại',
|
||||
'yes' => 'có',
|
||||
'no' => 'không',
|
||||
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Tệp đã có rồi.',
|
||||
'Please use one of the extensions %s.' => 'Cần phải dùng một trong các phần mở rộng sau: %s.',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Thay đổi schema',
|
||||
'Create schema' => 'Tạo schema',
|
||||
@@ -310,7 +309,7 @@ $translations = array(
|
||||
'Schema has been altered.' => 'Đã thay đổi schema.',
|
||||
'Schema' => 'Schema',
|
||||
'Invalid schema.' => 'Schema không hợp lệ.',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Dãy số',
|
||||
'Create sequence' => 'Tạo dãy số',
|
||||
@@ -318,7 +317,7 @@ $translations = array(
|
||||
'Sequence has been created.' => 'Đã tạo dãy số.',
|
||||
'Sequence has been altered.' => 'Đã sửa dãy số.',
|
||||
'Alter sequence' => 'Thay đổi dãy số',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Kiểu tự định nghĩa',
|
||||
'Create type' => 'Tạo kiểu',
|
||||
|
@@ -29,10 +29,10 @@ $translations = array(
|
||||
'The action will be performed after successful login with the same credentials.' => 'Xx.',
|
||||
'%s version: %s through PHP extension %s' => '%s xx: %s xx %s',
|
||||
'Refresh' => 'Xx',
|
||||
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'xx',
|
||||
|
||||
|
||||
'Privileges' => 'Xx',
|
||||
'Create user' => 'Xx',
|
||||
'User has been dropped.' => 'Xx.',
|
||||
@@ -43,14 +43,14 @@ $translations = array(
|
||||
'Routine' => 'Xx',
|
||||
'Grant' => 'Xx',
|
||||
'Revoke' => 'Xx',
|
||||
|
||||
|
||||
'Process list' => 'Xx',
|
||||
'%d process(es) have been killed.' => array('%d xx.', '%d xx.'),
|
||||
'Kill' => 'Xx',
|
||||
|
||||
|
||||
'Variables' => 'Xx',
|
||||
'Status' => 'Xx',
|
||||
|
||||
|
||||
'SQL command' => 'Xx',
|
||||
'%d query(s) executed OK.' => array('%d xx.', '%d xx.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Xx, %d.', 'Xx, %d.'),
|
||||
@@ -67,7 +67,7 @@ $translations = array(
|
||||
'History' => 'Xx',
|
||||
'Clear' => 'Xx',
|
||||
'Edit all' => 'Xx',
|
||||
|
||||
|
||||
'File upload' => 'Xx',
|
||||
'From server' => 'Xx',
|
||||
'Webserver file %s' => 'Xx %s',
|
||||
@@ -79,7 +79,7 @@ $translations = array(
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Xx %s.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Xx.',
|
||||
'You are offline.' => 'Xx.',
|
||||
|
||||
|
||||
'Export' => 'Xx',
|
||||
'Output' => 'Xx',
|
||||
'open' => 'xx',
|
||||
@@ -87,9 +87,8 @@ $translations = array(
|
||||
'Saving' => 'Xx',
|
||||
'Format' => 'Xx',
|
||||
'Data' => 'Xx',
|
||||
|
||||
|
||||
'Database' => 'Xx',
|
||||
'database' => 'xx',
|
||||
'DB' => 'XX',
|
||||
'Use' => 'Xx',
|
||||
'Select database' => 'Xx',
|
||||
@@ -102,10 +101,10 @@ $translations = array(
|
||||
'Alter database' => 'Xx',
|
||||
'Create database' => 'Xx',
|
||||
'Database schema' => 'Xx',
|
||||
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Xx',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => 'x',
|
||||
'0123456789' => 'xxxxxxxxxx',
|
||||
@@ -129,7 +128,7 @@ $translations = array(
|
||||
'Copy' => 'Xx',
|
||||
'Tables have been copied.' => 'Xx.',
|
||||
'overwrite' => 'xx',
|
||||
|
||||
|
||||
'Routines' => 'Xx',
|
||||
'Routine has been called, %d row(s) affected.' => array('Xx, %d.', 'Xx, %d.'),
|
||||
'Call' => 'Xx',
|
||||
@@ -142,7 +141,7 @@ $translations = array(
|
||||
'Alter function' => 'Xx',
|
||||
'Alter procedure' => 'Xx',
|
||||
'Return type' => 'Xx',
|
||||
|
||||
|
||||
'Events' => 'Xx',
|
||||
'Event has been dropped.' => 'Xx.',
|
||||
'Event has been altered.' => 'Xx.',
|
||||
@@ -155,7 +154,7 @@ $translations = array(
|
||||
'Start' => 'Xx',
|
||||
'End' => 'Xx',
|
||||
'On completion preserve' => 'Xx',
|
||||
|
||||
|
||||
'Tables' => 'Xx',
|
||||
'Tables and views' => 'Xx',
|
||||
'Table' => 'Xx',
|
||||
@@ -188,12 +187,12 @@ $translations = array(
|
||||
'Move down' => 'Xx',
|
||||
'Remove' => 'Xx',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Xx %s.',
|
||||
|
||||
|
||||
'Partition by' => 'Xx',
|
||||
'Partitions' => 'Xx',
|
||||
'Partition name' => 'Xx',
|
||||
'Values' => 'Xx',
|
||||
|
||||
|
||||
'View' => 'Xx',
|
||||
'Materialized view' => 'Xx',
|
||||
'View has been dropped.' => 'Xx.',
|
||||
@@ -201,14 +200,14 @@ $translations = array(
|
||||
'View has been created.' => 'Xx.',
|
||||
'Alter view' => 'Xx',
|
||||
'Create view' => 'Xx',
|
||||
|
||||
|
||||
'Indexes' => 'Xx',
|
||||
'Indexes have been altered.' => 'Xx.',
|
||||
'Alter indexes' => 'Xx',
|
||||
'Add next' => 'Xx',
|
||||
'Index Type' => 'Xx',
|
||||
'Column (length)' => 'Xx',
|
||||
|
||||
'length' => 'xx',
|
||||
|
||||
'Foreign keys' => 'Xx',
|
||||
'Foreign key' => 'Xx',
|
||||
'Foreign key has been dropped.' => 'Xx.',
|
||||
@@ -224,7 +223,7 @@ $translations = array(
|
||||
'ON DELETE' => 'Xx',
|
||||
'ON UPDATE' => 'Xx',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Xx.',
|
||||
|
||||
|
||||
'Triggers' => 'Xx',
|
||||
'Add trigger' => 'Xx',
|
||||
'Trigger has been dropped.' => 'Xx.',
|
||||
@@ -235,7 +234,7 @@ $translations = array(
|
||||
'Time' => 'Xx',
|
||||
'Event' => 'Xx',
|
||||
'Name' => 'Xx',
|
||||
|
||||
|
||||
'select' => 'xx',
|
||||
'Select' => 'Xx',
|
||||
'Select data' => 'Xx',
|
||||
@@ -261,16 +260,16 @@ $translations = array(
|
||||
'Loading' => 'Xx',
|
||||
'Whole result' => 'Xx',
|
||||
'%d byte(s)' => array('%d xx', '%d xx'),
|
||||
|
||||
|
||||
'Import' => 'Xx',
|
||||
'%d row(s) have been imported.' => array('%d xx.', '%d xx.'),
|
||||
'File must be in UTF-8 encoding.' => 'Xx.',
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Xx',
|
||||
'Ctrl+click on a value to modify it.' => 'Xx.',
|
||||
'Use edit link to modify this value.' => 'Xx.',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Xx%s.',
|
||||
'Item has been deleted.' => 'Xx.',
|
||||
@@ -290,14 +289,14 @@ $translations = array(
|
||||
'Clone' => 'Xx',
|
||||
'Delete' => 'Xx',
|
||||
'You have no privileges to update this table.' => 'Xx.',
|
||||
|
||||
|
||||
'E-mail' => 'Xx',
|
||||
'From' => 'Xx',
|
||||
'Subject' => 'Xx',
|
||||
'Attachments' => 'Xx',
|
||||
'Send' => 'Xx',
|
||||
'%d e-mail(s) have been sent.' => array('%d xx.', '%d xx.'),
|
||||
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Xx',
|
||||
'Date and time' => 'Xx',
|
||||
@@ -307,7 +306,7 @@ $translations = array(
|
||||
'Network' => 'Xx',
|
||||
'Geometry' => 'Xx',
|
||||
'Relations' => 'Xx',
|
||||
|
||||
|
||||
'Editor' => 'Xx',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => 'xx',
|
||||
@@ -318,11 +317,11 @@ $translations = array(
|
||||
'now' => 'xx',
|
||||
'yes' => 'xx',
|
||||
'no' => 'xx',
|
||||
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Xx.',
|
||||
'Please use one of the extensions %s.' => 'Xx %s.',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Xx',
|
||||
'Create schema' => 'Xx',
|
||||
@@ -331,7 +330,7 @@ $translations = array(
|
||||
'Schema has been altered.' => 'Xx.',
|
||||
'Schema' => 'Xx',
|
||||
'Invalid schema.' => 'Xx.',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Xx',
|
||||
'Create sequence' => 'Xx',
|
||||
@@ -339,11 +338,19 @@ $translations = array(
|
||||
'Sequence has been created.' => 'Xx.',
|
||||
'Sequence has been altered.' => 'Xx.',
|
||||
'Alter sequence' => 'Xx',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Xx',
|
||||
'Create type' => 'Xx',
|
||||
'Type has been dropped.' => 'Xx.',
|
||||
'Type has been created.' => 'Xx.',
|
||||
'Alter type' => 'Xx',
|
||||
|
||||
// Table check constraints
|
||||
'Checks' => 'Xx',
|
||||
'Create check' => 'Xx',
|
||||
'Alter check' => 'Xx',
|
||||
'Check has been created.' => 'Xx.',
|
||||
'Check has been altered.' => 'Xx.',
|
||||
'Check has been dropped.' => 'Xx.',
|
||||
);
|
||||
|
@@ -29,10 +29,10 @@ $translations = array(
|
||||
'The action will be performed after successful login with the same credentials.' => '此操作將在成功使用相同的憑據登錄後執行。',
|
||||
'%s version: %s through PHP extension %s' => '%s 版本:%s 透過 PHP 擴充模組 %s',
|
||||
'Refresh' => '重新載入',
|
||||
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
|
||||
'Privileges' => '權限',
|
||||
'Create user' => '建立使用者',
|
||||
'User has been dropped.' => '已刪除使用者。',
|
||||
@@ -43,14 +43,14 @@ $translations = array(
|
||||
'Routine' => '程序',
|
||||
'Grant' => '授權',
|
||||
'Revoke' => '廢除',
|
||||
|
||||
|
||||
'Process list' => '處理程序列表',
|
||||
'%d process(es) have been killed.' => '%d 個 Process(es) 被終止',
|
||||
'Kill' => '終止',
|
||||
|
||||
|
||||
'Variables' => '變數',
|
||||
'Status' => '狀態',
|
||||
|
||||
|
||||
'SQL command' => 'SQL 命令',
|
||||
'%d query(s) executed OK.' => '已順利執行 %d 個查詢。',
|
||||
'Query executed OK, %d row(s) affected.' => '執行查詢 OK,%d 行受影響。',
|
||||
@@ -67,7 +67,7 @@ $translations = array(
|
||||
'History' => '紀錄',
|
||||
'Clear' => '清除',
|
||||
'Edit all' => '編輯全部',
|
||||
|
||||
|
||||
'File upload' => '檔案上傳',
|
||||
'From server' => '從伺服器',
|
||||
'Webserver file %s' => '網頁伺服器檔案 %s',
|
||||
@@ -79,7 +79,7 @@ $translations = array(
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 資料太大。減少資料或者增加 %s 的設定值。',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => '您可以通過FTP上傳大型SQL檔並從伺服器導入。',
|
||||
'You are offline.' => '您離線了。',
|
||||
|
||||
|
||||
'Export' => '匯出',
|
||||
'Output' => '輸出',
|
||||
'open' => '打開',
|
||||
@@ -87,9 +87,8 @@ $translations = array(
|
||||
'Saving' => '保存中',
|
||||
'Format' => '格式',
|
||||
'Data' => '資料',
|
||||
|
||||
|
||||
'Database' => '資料庫',
|
||||
'database' => '資料庫',
|
||||
'DB' => '資料庫',
|
||||
'Use' => '使用',
|
||||
'Select database' => '選擇資料庫',
|
||||
@@ -102,10 +101,10 @@ $translations = array(
|
||||
'Alter database' => '修改資料庫',
|
||||
'Create database' => '建立資料庫',
|
||||
'Database schema' => '資料庫結構',
|
||||
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => '永久連結',
|
||||
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
@@ -129,7 +128,7 @@ $translations = array(
|
||||
'Copy' => '複製',
|
||||
'Tables have been copied.' => '資料表已經複製',
|
||||
'overwrite' => '覆蓋',
|
||||
|
||||
|
||||
'Routines' => '程序',
|
||||
'Routine has been called, %d row(s) affected.' => '程序已被執行,%d 行被影響',
|
||||
'Call' => '呼叫',
|
||||
@@ -142,7 +141,7 @@ $translations = array(
|
||||
'Alter function' => '修改函式',
|
||||
'Alter procedure' => '修改預存程序',
|
||||
'Return type' => '回傳類型',
|
||||
|
||||
|
||||
'Events' => '事件',
|
||||
'Event has been dropped.' => '已刪除事件。',
|
||||
'Event has been altered.' => '已修改事件。',
|
||||
@@ -155,7 +154,7 @@ $translations = array(
|
||||
'Start' => '開始',
|
||||
'End' => '結束',
|
||||
'On completion preserve' => '在完成後儲存',
|
||||
|
||||
|
||||
'Tables' => '資料表',
|
||||
'Tables and views' => '資料表和檢視表',
|
||||
'Table' => '資料表',
|
||||
@@ -188,12 +187,12 @@ $translations = array(
|
||||
'Move down' => '下移',
|
||||
'Remove' => '移除',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '超過允許的字段數量的最大值。請增加 %s。',
|
||||
|
||||
|
||||
'Partition by' => '分區類型',
|
||||
'Partitions' => '分區',
|
||||
'Partition name' => '分區名稱',
|
||||
'Values' => '值',
|
||||
|
||||
|
||||
'View' => '檢視表',
|
||||
'Materialized view' => '物化視圖',
|
||||
'View has been dropped.' => '已刪除檢視表。',
|
||||
@@ -201,14 +200,14 @@ $translations = array(
|
||||
'View has been created.' => '已建立檢視表。',
|
||||
'Alter view' => '修改檢視表',
|
||||
'Create view' => '建立檢視表',
|
||||
|
||||
|
||||
'Indexes' => '索引',
|
||||
'Indexes have been altered.' => '已修改索引。',
|
||||
'Alter indexes' => '修改索引',
|
||||
'Add next' => '新增下一筆',
|
||||
'Index Type' => '索引類型',
|
||||
'Column (length)' => '欄位(長度)',
|
||||
|
||||
'length' => '長度',
|
||||
|
||||
'Foreign keys' => '外來鍵',
|
||||
'Foreign key' => '外來鍵',
|
||||
'Foreign key has been dropped.' => '已刪除外來鍵。',
|
||||
@@ -224,7 +223,7 @@ $translations = array(
|
||||
'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.' => '來源列和目標列必須具有相同的資料類型,在目標列上必須有一個索引並且引用的資料必須存在。',
|
||||
|
||||
|
||||
'Triggers' => '觸發器',
|
||||
'Add trigger' => '建立觸發器',
|
||||
'Trigger has been dropped.' => '已刪除觸發器。',
|
||||
@@ -235,7 +234,7 @@ $translations = array(
|
||||
'Time' => '時間',
|
||||
'Event' => '事件',
|
||||
'Name' => '名稱',
|
||||
|
||||
|
||||
'select' => '選擇',
|
||||
'Select' => '選擇',
|
||||
'Select data' => '選擇資料',
|
||||
@@ -261,16 +260,16 @@ $translations = array(
|
||||
'Loading' => '載入中',
|
||||
'Whole result' => '所有結果',
|
||||
'%d byte(s)' => '%d byte(s)',
|
||||
|
||||
|
||||
'Import' => '匯入',
|
||||
'%d row(s) have been imported.' => '已匯入 %d 行。',
|
||||
'File must be in UTF-8 encoding.' => '檔必須使用UTF-8編碼。',
|
||||
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => '修改',
|
||||
'Ctrl+click on a value to modify it.' => '按住Ctrl並按一下某個值進行修改。',
|
||||
'Use edit link to modify this value.' => '使用編輯連結來修改。',
|
||||
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => '已新增項目 %s。',
|
||||
'Item has been deleted.' => '該項目已被刪除',
|
||||
@@ -290,14 +289,14 @@ $translations = array(
|
||||
'Clone' => '複製',
|
||||
'Delete' => '刪除',
|
||||
'You have no privileges to update this table.' => '您沒有許可權更新這個資料表。',
|
||||
|
||||
|
||||
'E-mail' => '電子郵件',
|
||||
'From' => '來自',
|
||||
'Subject' => '主旨',
|
||||
'Attachments' => '附件',
|
||||
'Send' => '寄出',
|
||||
'%d e-mail(s) have been sent.' => '已寄出 %d 封郵件。',
|
||||
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => '數字',
|
||||
'Date and time' => '日期時間',
|
||||
@@ -307,7 +306,7 @@ $translations = array(
|
||||
'Network' => '網路',
|
||||
'Geometry' => '幾何',
|
||||
'Relations' => '關聯',
|
||||
|
||||
|
||||
'Editor' => '編輯器',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1.$3.$5',
|
||||
@@ -318,11 +317,11 @@ $translations = array(
|
||||
'now' => '現在',
|
||||
'yes' => '是',
|
||||
'no' => '否',
|
||||
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => '檔案已存在。',
|
||||
'Please use one of the extensions %s.' => '請使用下列其中一個擴充模組 %s。',
|
||||
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => '修改資料表結構',
|
||||
'Create schema' => '建立資料表結構',
|
||||
@@ -331,7 +330,7 @@ $translations = array(
|
||||
'Schema has been altered.' => '已修改資料表結構。',
|
||||
'Schema' => '資料表結構',
|
||||
'Invalid schema.' => '無效的資料表結構。',
|
||||
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => '序列',
|
||||
'Create sequence' => '建立序列',
|
||||
@@ -339,7 +338,7 @@ $translations = array(
|
||||
'Sequence has been created.' => '已建立序列。',
|
||||
'Sequence has been altered.' => '已修改序列。',
|
||||
'Alter sequence' => '修改序列',
|
||||
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => '使用者類型',
|
||||
'Create type' => '建立類型',
|
||||
|
@@ -29,7 +29,7 @@ $translations = array(
|
||||
'The action will be performed after successful login with the same credentials.' => '此操作将在成功使用相同的凭据登录后执行。',
|
||||
'%s version: %s through PHP extension %s' => '%s 版本:%s, 使用PHP扩展 %s',
|
||||
'Refresh' => '刷新',
|
||||
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
@@ -89,7 +89,6 @@ $translations = array(
|
||||
'Data' => '数据',
|
||||
|
||||
'Database' => '数据库',
|
||||
'database' => '数据库',
|
||||
'DB' => '数据库',
|
||||
'Use' => '使用',
|
||||
'Select database' => '选择数据库',
|
||||
|
@@ -2,12 +2,15 @@
|
||||
function adminer_object() {
|
||||
// required to run any plugin
|
||||
include_once "../plugins/plugin.php";
|
||||
|
||||
|
||||
// autoloader
|
||||
foreach (glob("../plugins/*.php") as $filename) {
|
||||
include_once $filename;
|
||||
}
|
||||
|
||||
|
||||
// enable extra drivers just by including them
|
||||
//~ include "../plugins/drivers/simpledb.php";
|
||||
|
||||
$plugins = array(
|
||||
// specify enabled plugins here
|
||||
new AdminerDatabaseHide(array('information_schema')),
|
||||
@@ -29,13 +32,13 @@ function adminer_object() {
|
||||
new AdminerTablesFilter,
|
||||
new AdminerEditForeign,
|
||||
);
|
||||
|
||||
|
||||
/* It is possible to combine customization and plugins:
|
||||
class AdminerCustomization extends AdminerPlugin {
|
||||
}
|
||||
return new AdminerCustomization($plugins);
|
||||
*/
|
||||
|
||||
|
||||
return new AdminerPlugin($plugins);
|
||||
}
|
||||
|
||||
|
@@ -14,15 +14,15 @@ echo "<form action=''><p>\n";
|
||||
hidden_fields_get();
|
||||
echo "<input type='hidden' name='db' value='" . h(DB) . "'>\n";
|
||||
echo ($grant ? "" : "<input type='hidden' name='grant' value=''>\n");
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<table class='odds'>\n";
|
||||
echo "<thead><tr><th>" . lang('Username') . "<th>" . lang('Server') . "<th></thead>\n";
|
||||
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
echo '<tr' . odd() . '><td>' . h($row["User"]) . "<td>" . h($row["Host"]) . '<td><a href="' . h(ME . 'user=' . urlencode($row["User"]) . '&host=' . urlencode($row["Host"])) . '">' . lang('Edit') . "</a>\n";
|
||||
echo '<tr><td>' . h($row["User"]) . "<td>" . h($row["Host"]) . '<td><a href="' . h(ME . 'user=' . urlencode($row["User"]) . '&host=' . urlencode($row["Host"])) . '">' . lang('Edit') . "</a>\n";
|
||||
}
|
||||
|
||||
if (!$grant || DB != "") {
|
||||
echo "<tr" . odd() . "><td><input name='user' autocapitalize='off'><td><input name='host' value='localhost' autocapitalize='off'><td><input type='submit' value='" . lang('Edit') . "'>\n";
|
||||
echo "<tr><td><input name='user' autocapitalize='off'><td><input name='host' value='localhost' autocapitalize='off'><td><input type='submit' value='" . lang('Edit') . "'>\n";
|
||||
}
|
||||
|
||||
echo "</table>\n";
|
||||
|
@@ -39,7 +39,7 @@ $routine_languages = routine_languages();
|
||||
<?php echo ($routine_languages ? lang('Language') . ": " . html_select("language", $routine_languages, $row["language"]) . "\n" : ""); ?>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<div class="scrollable">
|
||||
<table cellspacing="0" class="nowrap">
|
||||
<table class="nowrap">
|
||||
<?php
|
||||
edit_fields($row["fields"], $collations, $routine);
|
||||
if (isset($_GET["function"])) {
|
||||
|
@@ -1,12 +1,14 @@
|
||||
<?php
|
||||
if (support("kill") && $_POST && !$error) {
|
||||
$killed = 0;
|
||||
foreach ((array) $_POST["kill"] as $val) {
|
||||
if (kill_process($val)) {
|
||||
$killed++;
|
||||
if (support("kill")) {
|
||||
if ($_POST && !$error) {
|
||||
$killed = 0;
|
||||
foreach ((array) $_POST["kill"] as $val) {
|
||||
if (kill_process($val)) {
|
||||
$killed++;
|
||||
}
|
||||
}
|
||||
queries_redirect(ME . "processlist=", lang('%d process(es) have been killed.', $killed), $killed || !$_POST["kill"]);
|
||||
}
|
||||
queries_redirect(ME . "processlist=", lang('%d process(es) have been killed.', $killed), $killed || !$_POST["kill"]);
|
||||
}
|
||||
|
||||
page_header(lang('Process list'), $error);
|
||||
@@ -14,7 +16,7 @@ page_header(lang('Process list'), $error);
|
||||
|
||||
<form action="" method="post">
|
||||
<div class="scrollable">
|
||||
<table cellspacing="0" class="nowrap checkable">
|
||||
<table class="nowrap checkable odds">
|
||||
<?php
|
||||
echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
|
||||
// HTML valid because there is always at least one process
|
||||
@@ -32,7 +34,7 @@ foreach (process_list() as $i => $row) {
|
||||
}
|
||||
echo "</thead>\n";
|
||||
}
|
||||
echo "<tr" . odd() . ">" . (support("kill") ? "<td>" . checkbox("kill[]", $row[$jush == "sql" ? "Id" : "pid"], 0) : "");
|
||||
echo "<tr>" . (support("kill") ? "<td>" . checkbox("kill[]", $row[$jush == "sql" ? "Id" : "pid"], 0) : "");
|
||||
foreach ($row as $key => $val) {
|
||||
echo "<td>" . (
|
||||
($jush == "sql" && $key == "Info" && preg_match("~Query|Killed~", $row["Command"]) && $val != "") ||
|
||||
|
@@ -61,12 +61,12 @@ foreach ($schema as $name => $table) {
|
||||
echo "<div class='table' style='top: " . $table["pos"][0] . "em; left: " . $table["pos"][1] . "em;'>";
|
||||
echo '<a href="' . h(ME) . 'table=' . urlencode($name) . '"><b>' . h($name) . "</b></a>";
|
||||
echo script("qsl('div').onmousedown = schemaMousedown;");
|
||||
|
||||
|
||||
foreach ($table["fields"] as $field) {
|
||||
$val = '<span' . type_class($field["type"]) . ' title="' . h($field["full_type"] . ($field["null"] ? " NULL" : '')) . '">' . h($field["field"]) . '</span>';
|
||||
echo "<br>" . ($field["primary"] ? "<i>$val</i>" : $val);
|
||||
}
|
||||
|
||||
|
||||
foreach ((array) $table["references"] as $target_name => $refs) {
|
||||
foreach ($refs as $left => $ref) {
|
||||
$left1 = $left - $table_pos[$name][1];
|
||||
@@ -76,7 +76,7 @@ foreach ($schema as $name => $table) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
foreach ((array) $referenced[$name] as $target_name => $refs) {
|
||||
foreach ($refs as $left => $columns) {
|
||||
$left1 = $left - $table_pos[$name][1];
|
||||
@@ -86,7 +86,7 @@ foreach ($schema as $name => $table) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo "\n</div>\n";
|
||||
}
|
||||
|
||||
|
@@ -26,8 +26,7 @@ if (!$row) {
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<p><input name="name" id="name" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
||||
<?php echo script("focus(qs('#name'));"); ?>
|
||||
<p><input name="name" autofocus value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php
|
||||
if ($_GET["ns"] != "") {
|
||||
|
@@ -12,7 +12,7 @@ if ($_GET["script"] == "db") {
|
||||
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
||||
if ($table_status[$key] != "") {
|
||||
$val = format_number($table_status[$key]);
|
||||
json_row("$key-$name", ($key == "Rows" && $val && $table_status["Engine"] == ($sql == "pgsql" ? "table" : "InnoDB")
|
||||
json_row("$key-$name", ($key == "Rows" && $val && $table_status["Engine"] == ($jush == "pgsql" ? "table" : "InnoDB")
|
||||
? "~ $val"
|
||||
: $val
|
||||
));
|
||||
|
@@ -224,14 +224,16 @@ if (is_ajax()) {
|
||||
|
||||
$set = null;
|
||||
if (isset($rights["insert"]) || !support("table")) {
|
||||
$set = "";
|
||||
$params = array();
|
||||
foreach ((array) $_GET["where"] as $val) {
|
||||
if ($foreign_keys[$val["col"]] && count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "="
|
||||
|| (!$val["op"] && !preg_match('~[_%]~', $val["val"])) // LIKE in Editor
|
||||
if (isset($foreign_keys[$val["col"]]) && count($foreign_keys[$val["col"]]) == 1
|
||||
&& ($val["op"] == "=" || (!$val["op"] && (is_array($val["val"]) || !preg_match('~[_%]~', $val["val"]))) // LIKE in Editor
|
||||
)) {
|
||||
$set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]);
|
||||
$params["set" . "[" . bracket_escape($val["col"]) . "]"] = $val["val"];
|
||||
}
|
||||
}
|
||||
|
||||
$set = $params ? "&" . http_build_query($params) : "";
|
||||
}
|
||||
$adminer->selectLinks($table_status, $set);
|
||||
|
||||
@@ -310,7 +312,7 @@ if (!$columns && support("table")) {
|
||||
$backward_keys = $adminer->backwardKeys($TABLE, $table_name);
|
||||
|
||||
echo "<div class='scrollable'>";
|
||||
echo "<table id='table' cellspacing='0' class='nowrap checkable'>";
|
||||
echo "<table id='table' class='nowrap checkable odds'>";
|
||||
echo script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});");
|
||||
echo "<thead><tr>" . (!$group && $select
|
||||
? ""
|
||||
@@ -324,14 +326,14 @@ if (!$columns && support("table")) {
|
||||
if (!isset($unselected[$key])) {
|
||||
$val = $_GET["columns"][key($select)];
|
||||
$field = $fields[$select ? ($val ? $val["col"] : current($select)) : $key];
|
||||
$name = ($field ? $adminer->fieldName($field, $rank) : ($val["fun"] ? "*" : $key));
|
||||
$name = ($field ? $adminer->fieldName($field, $rank) : ($val["fun"] ? "*" : h($key)));
|
||||
if ($name != "") {
|
||||
$rank++;
|
||||
$names[$key] = $name;
|
||||
$column = idf_escape($key);
|
||||
$href = remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key);
|
||||
$desc = "&desc%5B0%5D=1";
|
||||
echo "<th>" . script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});", "");
|
||||
echo "<th id='th[" . h(bracket_escape($key)) . "]'>" . script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});", "");
|
||||
echo '<a href="' . h($href . ($order[0] == $column || $order[0] == $key || (!$order && $is_group && $group[0] == $column) ? $desc : '')) . '">'; // $order[0] == $key - COUNT(*)
|
||||
echo apply_sql_function($val["fun"], $name) . "</a>"; //! columns looking like functions
|
||||
echo "<span class='column hidden'>";
|
||||
@@ -359,9 +361,6 @@ if (!$columns && support("table")) {
|
||||
echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n";
|
||||
|
||||
if (is_ajax()) {
|
||||
if ($limit % 2 == 1 && $page % 2 == 1) {
|
||||
odd();
|
||||
}
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
@@ -382,9 +381,9 @@ if (!$columns && support("table")) {
|
||||
$key = "MD5(" . ($jush != 'sql' || preg_match("~^utf8~", $fields[$key]["collation"]) ? $key : "CONVERT($key USING " . charset($connection) . ")") . ")";
|
||||
$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 === false ? "f" : $val) : "null%5B%5D=" . urlencode($key));
|
||||
}
|
||||
echo "<tr" . odd() . ">" . (!$group && $select ? "" : "<td>"
|
||||
echo "<tr>" . (!$group && $select ? "" : "<td>"
|
||||
. checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]))
|
||||
. ($is_group || information_schema(DB) ? "" : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . $unique_idf) . "' class='edit'>" . lang('edit') . "</a>")
|
||||
);
|
||||
@@ -430,7 +429,7 @@ if (!$columns && support("table")) {
|
||||
$link .= where_link($i++, $k, $v);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$val = select_value($val, $link, $field, $text_length);
|
||||
$id = h("val[$unique_idf][" . bracket_escape($key) . "]");
|
||||
$value = $_POST["val"][$unique_idf][bracket_escape($key)];
|
||||
@@ -491,7 +490,7 @@ if (!$columns && support("table")) {
|
||||
echo "\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo "<div class='footer'><div>\n";
|
||||
if ($rows || $page) {
|
||||
if ($pagination) {
|
||||
@@ -523,11 +522,13 @@ if (!$columns && support("table")) {
|
||||
}
|
||||
echo "</fieldset>\n";
|
||||
}
|
||||
|
||||
|
||||
echo "<fieldset>";
|
||||
echo "<legend>" . lang('Whole result') . "</legend>";
|
||||
$display_rows = ($exact_count ? "" : "~ ") . $found_rows;
|
||||
echo checkbox("all", 1, 0, ($found_rows !== false ? ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) : ""), "var checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$display_rows' : checked); selectCount('selected2', this.checked || !checked ? '$display_rows' : checked);") . "\n";
|
||||
echo checkbox("all", 1, 0, ($found_rows !== false ? ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) : ""),
|
||||
"var checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$display_rows' : checked); selectCount('selected2', this.checked || !checked ? '$display_rows' : checked);"
|
||||
) . "\n";
|
||||
echo "</fieldset>\n";
|
||||
|
||||
if ($adminer->selectCommandPrint()) {
|
||||
|
@@ -32,8 +32,8 @@ if (!$error && $_POST) {
|
||||
}
|
||||
|
||||
if (is_string($query)) { // get_file() returns error as number, fread() as false
|
||||
if (function_exists('memory_get_usage')) {
|
||||
@ini_set("memory_limit", max(ini_bytes("memory_limit"), 2 * strlen($query) + memory_get_usage() + 8e6)); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
|
||||
if (function_exists('memory_get_usage') && ($memory_limit = ini_bytes("memory_limit")) != "-1") {
|
||||
@ini_set("memory_limit", max($memory_limit, 2 * strlen($query) + memory_get_usage() + 8e6)); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
|
||||
}
|
||||
|
||||
if ($query != "" && strlen($query) < 1e6) { // don't add big queries
|
||||
@@ -81,13 +81,21 @@ if (!$error && $_POST) {
|
||||
$offset = $pos + strlen($found);
|
||||
|
||||
if ($found && rtrim($found) != $delimiter) { // find matching quote or comment end
|
||||
while (preg_match('(' . ($found == '/*' ? '\*/' : ($found == '[' ? ']' : (preg_match('~^-- |^#~', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
|
||||
$c_style_escapes = is_c_style_escapes() || ($jush == "pgsql" && ($pos > 0 && strtolower($query[$pos - 1]) == "e"));
|
||||
|
||||
$pattern = ($found == '/*' ? '\*/'
|
||||
: ($found == '[' ? ']'
|
||||
: (preg_match('~^-- |^#~', $found) ? "\n"
|
||||
: preg_quote($found) . ($c_style_escapes ? "|\\\\." : "")
|
||||
)));
|
||||
|
||||
while (preg_match("($pattern|\$)s", $query, $match, PREG_OFFSET_CAPTURE, $offset)) {
|
||||
$s = $match[0][0];
|
||||
if (!$s && $fp && !feof($fp)) {
|
||||
$query .= fread($fp, 1e5);
|
||||
} else {
|
||||
$offset = $match[0][1] + strlen($s);
|
||||
if ($s[0] != "\\") {
|
||||
if (!$s || $s[0] != "\\") {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -133,7 +141,7 @@ if (!$error && $_POST) {
|
||||
$time = " <span class='time'>(" . format_time($start) . ")</span>"
|
||||
. (strlen($q) < 1000 ? " <a href='" . h(ME) . "sql=" . urlencode(trim($q)) . "'>" . lang('Edit') . "</a>" : "") // 1000 - maximum length of encoded URL in IE is 2083 characters
|
||||
;
|
||||
$affected = $connection->affected_rows; // getting warnigns overwrites this
|
||||
$affected = $connection->affected_rows; // getting warnings overwrites this
|
||||
$warnings = ($_POST["only_errors"] ? "" : $driver->warnings());
|
||||
$warnings_id = "warnings-$commands";
|
||||
if ($warnings) {
|
||||
@@ -174,7 +182,7 @@ if (!$error && $_POST) {
|
||||
}
|
||||
echo ($warnings ? "<div id='$warnings_id' class='hidden'>\n$warnings</div>\n" : "");
|
||||
if ($explain) {
|
||||
echo "<div id='$explain_id' class='hidden'>\n";
|
||||
echo "<div id='$explain_id' class='hidden explain'>\n";
|
||||
select($explain, $connection2, $orgtables);
|
||||
echo "</div>\n";
|
||||
}
|
||||
@@ -225,7 +233,7 @@ if (!isset($_GET["import"])) {
|
||||
echo script(($_POST ? "" : "qs('textarea').focus();\n") . "qs('#form').onsubmit = partial(sqlSubmit, qs('#form'), '" . js_escape(remove_from_uri("sql|limit|error_stops|only_errors|history")) . "');");
|
||||
echo "<p>$execute\n";
|
||||
echo lang('Limit rows') . ": <input type='number' name='limit' class='size' value='" . h($_POST ? $_POST["limit"] : $_GET["limit"]) . "'>\n";
|
||||
|
||||
|
||||
} else {
|
||||
echo "<fieldset><legend>" . lang('File upload') . "</legend><div>";
|
||||
$gz = (extension_loaded("zlib") ? "[.gz]" : "");
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/** @author Ondrej Valka, http://valka.info */
|
||||
body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; width: -moz-fit-content; width: fit-content; }
|
||||
body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; min-width: fit-content; }
|
||||
a { color: blue; text-decoration: none; }
|
||||
a:visited { color: navy; }
|
||||
a:link:hover, a:visited:hover { color: red; text-decoration: underline; }
|
||||
@@ -23,13 +23,15 @@ code { background: #eee; }
|
||||
tbody tr:hover td, tbody tr:hover th { background: #eee; }
|
||||
pre { margin: 1em 0 0; }
|
||||
pre, textarea { font: 100%/1.25 monospace; }
|
||||
input { vertical-align: middle; }
|
||||
pre.jush { background: #fff; }
|
||||
input, textarea { box-sizing: border-box; }
|
||||
input, select { vertical-align: middle; }
|
||||
input.default { box-shadow: 1px 1px 1px #777; }
|
||||
input.required { box-shadow: 1px 1px 1px red; }
|
||||
input.maxlength { box-shadow: 1px 1px 1px red; }
|
||||
input.wayoff { left: -1000px; position: absolute; }
|
||||
.block { display: block; }
|
||||
.version { color: #777; font-size: 67%; }
|
||||
.version { color: #777; font-size: 62%; }
|
||||
.js .hidden, .nojs .jsonly { display: none; }
|
||||
.js .column { position: absolute; background: #ddf; padding: .27em 1ex .3em 0; margin-top: -.27em; }
|
||||
.nowrap td, .nowrap th, td.nowrap, p.nowrap { white-space: pre; }
|
||||
@@ -43,7 +45,7 @@ input.wayoff { left: -1000px; position: absolute; }
|
||||
.date { color: #7F007F; }
|
||||
.enum { color: #007F7F; }
|
||||
.binary { color: red; }
|
||||
.odd td { background: #F5F5F5; }
|
||||
.odds tbody tr:nth-child(2n) td { background: #F5F5F5; }
|
||||
.js .checkable .checked td, .js .checkable .checked th { background: #ddf; }
|
||||
.time { color: silver; font-size: 70%; }
|
||||
.function { text-align: right; }
|
||||
@@ -54,9 +56,10 @@ input.wayoff { left: -1000px; position: absolute; }
|
||||
.view { font-style: italic; }
|
||||
.active { font-weight: bold; }
|
||||
.sqlarea { width: 98%; }
|
||||
.explain { white-space: pre; }
|
||||
.icon { width: 18px; height: 18px; background-color: navy; }
|
||||
.icon:hover { background-color: red; }
|
||||
.size { width: 6ex; }
|
||||
.size { width: 7ex; }
|
||||
.help { cursor: help; }
|
||||
.footer { position: sticky; bottom: 0; margin-right: -20px; border-top: 20px solid rgba(255, 255, 255, .7); border-image: linear-gradient(rgba(255, 255, 255, .2), #fff) 100% 0; }
|
||||
.footer > div { background: #fff; padding: 0 0 .5em; }
|
||||
@@ -65,18 +68,18 @@ input.wayoff { left: -1000px; position: absolute; }
|
||||
.logout { margin-top: .5em; position: absolute; top: 0; right: 0; }
|
||||
.loadmore { margin-left: 1ex; }
|
||||
/* .edit used in designs */
|
||||
#menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; }
|
||||
#menu { position: absolute; margin: 10px 0 0; top: 2em; left: 0; width: 19em; }
|
||||
#menu p, #logins, #tables { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
|
||||
#logins li, #tables li { list-style: none; }
|
||||
#dbs { overflow: hidden; }
|
||||
#logins, #tables { white-space: nowrap; overflow: auto; }
|
||||
#logins, #tables { white-space: nowrap; overflow: hidden; }
|
||||
#logins a, #tables a, #tables span { background: #fff; }
|
||||
#content { margin: 2em 0 0 21em; padding: 10px 20px 20px 0; }
|
||||
#lang { position: absolute; top: 0; left: 0; line-height: 1.8em; padding: .3em 1em; }
|
||||
#lang { position: absolute; top: -2.6em; left: 0; padding: .3em 1em; }
|
||||
#breadcrumb { white-space: nowrap; position: absolute; top: 0; left: 21em; background: #eee; height: 2em; line-height: 1.8em; padding: 0 1em; margin: 0 0 0 -18px; }
|
||||
#h1 { color: #777; text-decoration: none; font-style: italic; }
|
||||
#version { font-size: 67%; color: red; }
|
||||
#schema { margin-left: 60px; position: relative; -moz-user-select: none; -webkit-user-select: none; }
|
||||
#version { color: red; }
|
||||
#schema { margin-left: 60px; position: relative; user-select: none; -webkit-user-select: none; }
|
||||
#schema .table { border: 1px solid silver; padding: 0 2px; cursor: move; position: absolute; }
|
||||
#schema .references { position: absolute; }
|
||||
#help { position: absolute; border: 1px solid #999; background: #eee; padding: 5px; font-family: monospace; z-index: 1; }
|
||||
@@ -89,12 +92,14 @@ input.wayoff { left: -1000px; position: absolute; }
|
||||
.rtl .pages { left: auto; right: 21em; }
|
||||
.rtl input.wayoff { left: auto; right: -1000px; }
|
||||
.rtl #lang, .rtl #menu { left: auto; right: 0; }
|
||||
.rtl pre, .rtl code { direction: ltr; }
|
||||
|
||||
@media all and (max-device-width: 880px) {
|
||||
@media all and (max-width: 880px) {
|
||||
.pages { left: auto; }
|
||||
.logout { position: static; padding: 0 1em 1em; }
|
||||
#menu { position: static; width: auto; }
|
||||
#content { margin-left: 10px; }
|
||||
#lang { position: static; border-top: 1px solid #999; }
|
||||
#lang { position: static; }
|
||||
#breadcrumb { left: auto; }
|
||||
.rtl .pages { right: auto; }
|
||||
.rtl #content { margin-right: 10px; }
|
||||
|
@@ -16,17 +16,22 @@ function bodyLoad(version, maria) {
|
||||
if (maria) {
|
||||
for (var i = 1; i < obj.length; i++) {
|
||||
obj[i] = obj[i]
|
||||
.replace(/\.html/, '/')
|
||||
.replace(/-type-syntax/, '-data-types')
|
||||
.replace('.html', '/')
|
||||
.replace('-type-syntax', '-data-types')
|
||||
.replace(/numeric-(data-types)/, '$1-$&')
|
||||
.replace(/#statvar_.*/, '#$$1')
|
||||
.replace(/replication-options-(master|binary-log)\//, 'replication-and-binary-log-system-variables/')
|
||||
.replace('server-options/', 'server-system-variables/')
|
||||
.replace('innodb-parameters/', 'innodb-system-variables/')
|
||||
.replace(/#(statvar|sysvar|option_mysqld)_(.*)/, '#$2')
|
||||
.replace(/#sysvar_(.*)/, '#$1')
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
obj[key] = (maria ? obj[key].replace(/dev\.mysql\.com\/doc\/mysql\/en\//, 'mariadb.com/kb/en/library/') : obj[key]) // MariaDB
|
||||
.replace(/\/doc\/mysql/, '/doc/refman/' + version) // MySQL
|
||||
.replace(/\/docs\/current/, '/docs/' + version) // PostgreSQL
|
||||
|
||||
obj[key] = (maria ? obj[key].replace('dev.mysql.com/doc/mysql', 'mariadb.com/kb') : obj[key]) // MariaDB
|
||||
.replace('/doc/mysql', '/doc/refman/' + version) // MySQL
|
||||
.replace('/docs/current', '/docs/' + version) // PostgreSQL
|
||||
;
|
||||
}
|
||||
}
|
||||
@@ -83,14 +88,14 @@ function messagesPrint(el) {
|
||||
|
||||
|
||||
|
||||
/** Hide or show some login rows for selected driver
|
||||
* @param HTMLSelectElement
|
||||
*/
|
||||
function loginDriver(driver) {
|
||||
var trs = parentTag(driver, 'table').rows;
|
||||
var disabled = /sqlite/.test(selectValue(driver));
|
||||
/** Hide or show some login rows for selected driver
|
||||
* @param HTMLSelectElement
|
||||
*/
|
||||
function loginDriver(driver) {
|
||||
var trs = parentTag(driver, 'table').rows;
|
||||
var disabled = /sqlite/.test(selectValue(driver));
|
||||
alterClass(trs[1], 'hidden', disabled); // 1 - row with server
|
||||
trs[1].getElementsByTagName('input')[0].disabled = disabled;
|
||||
trs[1].getElementsByTagName('input')[0].disabled = disabled;
|
||||
}
|
||||
|
||||
|
||||
@@ -103,6 +108,13 @@ var dbPrevious = {};
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
function dbMouseDown(event) {
|
||||
// Firefox: mouse-down event does not contain pressed key information for OPTION.
|
||||
// Chrome: mouse-down event has inherited key information from SELECT.
|
||||
// So we ignore the event for OPTION to work Ctrl+click correctly everywhere.
|
||||
if (event.target.tagName == "OPTION") {
|
||||
return;
|
||||
}
|
||||
|
||||
dbCtrl = isCtrl(event);
|
||||
if (dbPrevious[this.name] == undefined) {
|
||||
dbPrevious[this.name] = this.value;
|
||||
@@ -145,7 +157,7 @@ function selectFieldChange() {
|
||||
for (var i=0; i < selects.length; i++) {
|
||||
var select = selects[i];
|
||||
var col = selectValue(select);
|
||||
var match = /^(where.+)col\]/.exec(select.name);
|
||||
var match = /^(where.+)col]/.exec(select.name);
|
||||
if (match) {
|
||||
var op = selectValue(form[match[1] + 'op]']);
|
||||
var val = form[match[1] + 'val]'].value;
|
||||
@@ -155,7 +167,7 @@ function selectFieldChange() {
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
if ((match = /^(columns.+)fun\]/.exec(select.name))) {
|
||||
if ((match = /^(columns.+)fun]/.exec(select.name))) {
|
||||
if (/^(avg|count|count distinct|group_concat|max|min|sum)$/.test(col)) {
|
||||
group = true;
|
||||
}
|
||||
@@ -273,7 +285,7 @@ function editingClick(event) {
|
||||
*/
|
||||
function editingInput(event) {
|
||||
var el = getTarget(event);
|
||||
if (/\[default\]$/.test(el.name)) {
|
||||
if (/\[default]$/.test(el.name)) {
|
||||
el.previousSibling.checked = true;
|
||||
}
|
||||
}
|
||||
@@ -488,6 +500,16 @@ function columnShow(checked, column) {
|
||||
}
|
||||
}
|
||||
|
||||
/** Show or hide index column options
|
||||
* @param boolean
|
||||
*/
|
||||
function indexOptionsShow(checked) {
|
||||
var options = qsa('.idxopts');
|
||||
for (var i=0; i < options.length; i++) {
|
||||
alterClass(options[i], 'hidden', !checked);
|
||||
}
|
||||
}
|
||||
|
||||
/** Display partition options
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
@@ -531,7 +553,7 @@ function dumpClick(event) {
|
||||
var el = parentTag(getTarget(event), 'label');
|
||||
if (el) {
|
||||
el = qs('input', el);
|
||||
var match = /(.+)\[\]$/.exec(el.name);
|
||||
var match = /(.+)\[]$/.exec(el.name);
|
||||
if (match) {
|
||||
checkboxClick.call(el, event);
|
||||
formUncheck('check-' + match[1]);
|
||||
@@ -549,7 +571,7 @@ function foreignAddRow() {
|
||||
this.onchange = function () { };
|
||||
var selects = qsa('select', row);
|
||||
for (var i=0; i < selects.length; i++) {
|
||||
selects[i].name = selects[i].name.replace(/\]/, '1$&');
|
||||
selects[i].name = selects[i].name.replace(/\d+]/, '1$&');
|
||||
selects[i].selectedIndex = 0;
|
||||
}
|
||||
parentTag(this, 'table').appendChild(row);
|
||||
@@ -585,7 +607,7 @@ function indexesChangeColumn(prefix) {
|
||||
for (var tag in { 'select': 1, 'input': 1 }) {
|
||||
var columns = qsa(tag, parentTag(this, 'td'));
|
||||
for (var i=0; i < columns.length; i++) {
|
||||
if (/\[columns\]/.test(columns[i].name)) {
|
||||
if (/\[columns]/.test(columns[i].name)) {
|
||||
var value = selectValue(columns[i]);
|
||||
if (value) {
|
||||
names.push(value);
|
||||
@@ -593,7 +615,7 @@ function indexesChangeColumn(prefix) {
|
||||
}
|
||||
}
|
||||
}
|
||||
this.form[this.name.replace(/\].*/, '][name]')].value = prefix + names.join('_');
|
||||
this.form[this.name.replace(/].*/, '][name]')].value = prefix + names.join('_');
|
||||
}
|
||||
|
||||
/** Add column for index
|
||||
@@ -602,7 +624,7 @@ function indexesChangeColumn(prefix) {
|
||||
*/
|
||||
function indexesAddColumn(prefix) {
|
||||
var field = this;
|
||||
var select = field.form[field.name.replace(/\].*/, '][type]')];
|
||||
var select = field.form[field.name.replace(/].*/, '][type]')];
|
||||
if (!select.selectedIndex) {
|
||||
while (selectValue(select) != "INDEX" && select.selectedIndex < select.options.length) {
|
||||
select.selectedIndex++;
|
||||
@@ -613,14 +635,14 @@ function indexesAddColumn(prefix) {
|
||||
var selects = qsa('select', column);
|
||||
for (var i = 0; i < selects.length; i++) {
|
||||
select = selects[i];
|
||||
select.name = select.name.replace(/\]\[\d+/, '$&1');
|
||||
select.name = select.name.replace(/]\[\d+/, '$&1');
|
||||
select.selectedIndex = 0;
|
||||
}
|
||||
field.onchange = partial(indexesChangeColumn, prefix);
|
||||
var inputs = qsa('input', column);
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
var input = inputs[i];
|
||||
input.name = input.name.replace(/\]\[\d+/, '$&1');
|
||||
input.name = input.name.replace(/]\[\d+/, '$&1');
|
||||
if (input.type != 'checkbox') {
|
||||
input.value = '';
|
||||
}
|
||||
@@ -658,7 +680,7 @@ function triggerChange(tableRe, table, form) {
|
||||
if (tableRe.test(form['Trigger'].value)) {
|
||||
form['Trigger'].value = table + '_' + (selectValue(form['Timing']).charAt(0) + formEvent.charAt(0)).toLowerCase();
|
||||
}
|
||||
alterClass(form['Of'], 'hidden', formEvent != 'UPDATE OF');
|
||||
alterClass(form['Of'], 'hidden', !/ OF/.test(formEvent));
|
||||
}
|
||||
|
||||
|
||||
|
@@ -139,7 +139,7 @@ function selectValue(select) {
|
||||
/** Verify if element has a specified tag name
|
||||
* @param HTMLElement
|
||||
* @param string regular expression
|
||||
* @return bool
|
||||
* @return boolean
|
||||
*/
|
||||
function isTag(el, tag) {
|
||||
var re = new RegExp('^(' + tag + ')$', 'i');
|
||||
@@ -333,7 +333,7 @@ function setHtml(id, html) {
|
||||
*/
|
||||
function nodePosition(el) {
|
||||
var pos = 0;
|
||||
while (el = el.previousSibling) {
|
||||
while ((el = el.previousSibling)) {
|
||||
pos++;
|
||||
}
|
||||
return pos;
|
||||
@@ -366,7 +366,7 @@ function menuOver(event) {
|
||||
* @this HTMLElement
|
||||
*/
|
||||
function menuOut() {
|
||||
this.style.overflow = 'auto';
|
||||
this.style.overflow = 'hidden';
|
||||
}
|
||||
|
||||
|
||||
@@ -662,7 +662,7 @@ function ajaxForm(form, message, button) {
|
||||
}
|
||||
}
|
||||
data = data.join('&');
|
||||
|
||||
|
||||
var url = form.action;
|
||||
if (!/post/i.test(form.method)) {
|
||||
url = url.replace(/\?.*/, '') + '?' + data;
|
||||
@@ -708,9 +708,13 @@ function selectClick(event, text, warning) {
|
||||
td.innerHTML = original;
|
||||
}
|
||||
};
|
||||
var pos = event.rangeOffset;
|
||||
var value = (td.firstChild && td.firstChild.alt) || td.textContent || td.innerText;
|
||||
input.style.width = Math.max(td.clientWidth - 14, 20) + 'px'; // 14 = 2 * (td.border + td.padding + input.border)
|
||||
|
||||
let pos = event.rangeOffset;
|
||||
let value = (td.firstChild && td.firstChild.alt) || td.textContent || td.innerText;
|
||||
const tdStyle = window.getComputedStyle(td, null);
|
||||
|
||||
input.style.width = Math.max(td.clientWidth - parseFloat(tdStyle.paddingLeft) - parseFloat(tdStyle.paddingRight), 20) + 'px';
|
||||
|
||||
if (text) {
|
||||
var rows = 1;
|
||||
value.replace(/\n/g, function () {
|
||||
|
@@ -9,7 +9,12 @@ $name = $adminer->tableName($table_status);
|
||||
|
||||
page_header(($fields && is_view($table_status) ? $table_status['Engine'] == 'materialized view' ? lang('Materialized view') : lang('View') : lang('Table')) . ": " . ($name != "" ? $name : h($TABLE)), $error);
|
||||
|
||||
$adminer->selectLinks($table_status);
|
||||
$rights = array();
|
||||
foreach ($fields as $key => $field) {
|
||||
$rights += $field["privileges"];
|
||||
}
|
||||
$adminer->selectLinks($table_status, (isset($rights["insert"]) || !support("table") ? "" : null));
|
||||
|
||||
$comment = $table_status["Comment"];
|
||||
if ($comment != "") {
|
||||
echo "<p class='nowrap'>" . lang('Comment') . ": " . h($comment) . "\n";
|
||||
@@ -28,12 +33,12 @@ if (!is_view($table_status)) {
|
||||
}
|
||||
echo '<p class="links"><a href="' . h(ME) . 'indexes=' . urlencode($TABLE) . '">' . lang('Alter indexes') . "</a>\n";
|
||||
}
|
||||
|
||||
|
||||
if (fk_support($table_status)) {
|
||||
echo "<h3 id='foreign-keys'>" . lang('Foreign keys') . "</h3>\n";
|
||||
$foreign_keys = foreign_keys($TABLE);
|
||||
if ($foreign_keys) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<table>\n";
|
||||
echo "<thead><tr><th>" . lang('Source') . "<td>" . lang('Target') . "<td>" . lang('ON DELETE') . "<td>" . lang('ON UPDATE') . "<td></thead>\n";
|
||||
foreach ($foreign_keys as $name => $foreign_key) {
|
||||
echo "<tr title='" . h($name) . "'>";
|
||||
@@ -43,21 +48,38 @@ if (!is_view($table_status)) {
|
||||
. "</a>"
|
||||
;
|
||||
echo "(<i>" . implode("</i>, <i>", array_map('h', $foreign_key["target"])) . "</i>)";
|
||||
echo "<td>" . h($foreign_key["on_delete"]) . "\n";
|
||||
echo "<td>" . h($foreign_key["on_update"]) . "\n";
|
||||
echo "<td>" . h($foreign_key["on_delete"]);
|
||||
echo "<td>" . h($foreign_key["on_update"]);
|
||||
echo '<td><a href="' . h(ME . 'foreign=' . urlencode($TABLE) . '&name=' . urlencode($name)) . '">' . lang('Alter') . '</a>';
|
||||
echo "\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
echo '<p class="links"><a href="' . h(ME) . 'foreign=' . urlencode($TABLE) . '">' . lang('Add foreign key') . "</a>\n";
|
||||
}
|
||||
|
||||
if (support("check")) {
|
||||
echo "<h3 id='checks'>" . lang('Checks') . "</h3>\n";
|
||||
$check_constraints = check_constraints($TABLE);
|
||||
if ($check_constraints) {
|
||||
echo "<table>\n";
|
||||
foreach ($check_constraints as $key => $val) {
|
||||
echo "<tr title='" . h($key) . "'>";
|
||||
echo "<td><code class='jush-$jush'>" . h($val);
|
||||
echo "<td><a href='" . h(ME . 'check=' . urlencode($TABLE) . '&name=' . urlencode($key)) . "'>" . lang('Alter') . "</a>";
|
||||
echo "\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
echo '<p class="links"><a href="' . h(ME) . 'check=' . urlencode($TABLE) . '">' . lang('Create check') . "</a>\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (support(is_view($table_status) ? "view_trigger" : "trigger")) {
|
||||
echo "<h3 id='triggers'>" . lang('Triggers') . "</h3>\n";
|
||||
$triggers = triggers($TABLE);
|
||||
if ($triggers) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<table>\n";
|
||||
foreach ($triggers as $key => $val) {
|
||||
echo "<tr valign='top'><td>" . h($val[0]) . "<td>" . h($val[1]) . "<th>" . h($key) . "<td><a href='" . h(ME . 'trigger=' . urlencode($TABLE) . '&name=' . urlencode($key)) . "'>" . lang('Alter') . "</a>\n";
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
$TABLE = $_GET["trigger"];
|
||||
$name = $_GET["name"];
|
||||
$trigger_options = trigger_options();
|
||||
$row = (array) trigger($name) + array("Trigger" => $TABLE . "_bi");
|
||||
$row = (array) trigger($name, $TABLE) + array("Trigger" => $TABLE . "_bi");
|
||||
|
||||
if ($_POST) {
|
||||
if (!$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_options["Event"]) && in_array($_POST["Type"], $trigger_options["Type"])) {
|
||||
@@ -33,7 +33,7 @@ page_header(($name != "" ? lang('Alter trigger') . ": " . h($name) : lang('Creat
|
||||
?>
|
||||
|
||||
<form action="" method="post" id="form">
|
||||
<table cellspacing="0" class="layout">
|
||||
<table class="layout">
|
||||
<tr><th><?php echo lang('Time'); ?><td><?php echo html_select("Timing", $trigger_options["Timing"], $row["Timing"], "triggerChange(/^" . preg_quote($TABLE, "/") . "_[ba][iud]$/, '" . js_escape($TABLE) . "', this.form);"); ?>
|
||||
<tr><th><?php echo lang('Event'); ?><td><?php echo html_select("Event", $trigger_options["Event"], $row["Event"], "this.form['Timing'].onchange();"); ?>
|
||||
<?php echo (in_array("UPDATE OF", $trigger_options["Event"]) ? " <input name='Of' value='" . h($row["Of"]) . "' class='hidden'>": ""); ?>
|
||||
|
@@ -131,7 +131,7 @@ if ($_POST) {
|
||||
|
||||
?>
|
||||
<form action="" method="post">
|
||||
<table cellspacing="0" class="layout">
|
||||
<table class="layout">
|
||||
<tr><th><?php echo lang('Server'); ?><td><input name="host" data-maxlength="60" value="<?php echo h($row["host"]); ?>" autocapitalize="off">
|
||||
<tr><th><?php echo lang('Username'); ?><td><input name="user" data-maxlength="80" value="<?php echo h($row["user"]); ?>" autocapitalize="off">
|
||||
<tr><th><?php echo lang('Password'); ?><td><input name="pass" id="pass" value="<?php echo h($row["pass"]); ?>" autocomplete="new-password">
|
||||
@@ -141,7 +141,7 @@ if ($_POST) {
|
||||
|
||||
<?php
|
||||
//! MAX_* limits, REQUIRE
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<table class='odds'>\n";
|
||||
echo "<thead><tr><th colspan='2'>" . lang('Privileges') . doc_link(array('sql' => "grant.html#priv_level"));
|
||||
$i = 0;
|
||||
foreach ($grants as $object => $grant) {
|
||||
@@ -159,7 +159,7 @@ foreach (array(
|
||||
"Procedures" => lang('Routine'),
|
||||
) as $context => $desc) {
|
||||
foreach ((array) $privileges[$context] as $privilege => $comment) {
|
||||
echo "<tr" . odd() . "><td" . ($desc ? ">$desc<td" : " colspan='2'") . ' lang="en" title="' . h($comment) . '">' . h($privilege);
|
||||
echo "<tr><td" . ($desc ? ">$desc<td" : " colspan='2'") . ' lang="en" title="' . h($comment) . '">' . h($privilege);
|
||||
$i = 0;
|
||||
foreach ($grants as $object => $grant) {
|
||||
$name = "'grants[$i][" . h(strtoupper($privilege)) . "]'";
|
||||
|
@@ -6,7 +6,7 @@ $variables = ($status ? show_status() : show_variables());
|
||||
if (!$variables) {
|
||||
echo "<p class='message'>" . lang('No rows.') . "\n";
|
||||
} else {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<table>\n";
|
||||
foreach ($variables as $key => $val) {
|
||||
echo "<tr>";
|
||||
echo "<th><code class='jush-" . $jush . ($status ? "status" : "set") . "'>" . h($key) . "</code>";
|
||||
|
131
changes.txt
131
changes.txt
@@ -1,3 +1,126 @@
|
||||
Adminer 4.17.0 (released 2025-02-24):
|
||||
Hide index column options by default
|
||||
Offer original values in multi-row editing (regression from 4.16.0)
|
||||
Print SQL errors as comments in export (regression from 3.2.0)
|
||||
MySQL, PostgreSQL, MS SQL: Support CHECK constraint
|
||||
MySQL: Show comments at routine call (bug #874)
|
||||
MySQL: Don't offer empty enum value in edit
|
||||
MySQL 9+: Support vector type
|
||||
PostgreSQL: Link user defined types
|
||||
PostgreSQL: Constraint enum values in editing (bug #270)
|
||||
PostgreSQL: Export functions
|
||||
PostgreSQL 8+: Fix exporting table constraints
|
||||
SQLite: Show all supported pragmas in Variables
|
||||
MS SQL: Allow altering table in non-default schema (bug #405)
|
||||
MS SQL: Fix default values (bug #732, bug #733)
|
||||
MS SQL: Fix length of nvarchar columns
|
||||
Editor: PDO: Select value of foreign key in edit (bug #847)
|
||||
Mobile devices: Use device width
|
||||
|
||||
Adminer 4.16.0 (released 2025-02-20):
|
||||
MySQL: Fix saving bit(64) values (bug #839)
|
||||
PostgreSQL: Preserve whitespace in EXPLAIN (bug #827)
|
||||
PostgreSQL: Support SSL
|
||||
PostgreSQL: Support altering auto_increment (bug #761)
|
||||
SQLite: Fix altering forign keys (bug #841)
|
||||
SQLite: Fix expressions in default values (bug #860)
|
||||
MS SQL: Foreign keys in non-default schema (bug #833)
|
||||
Oracle: Include tables granted by other user
|
||||
MongoDB: Execute commands against the selected DB
|
||||
|
||||
Adminer 4.15.0:
|
||||
Escape unknown field in select
|
||||
HTTP drivers: Don't allow path in server name
|
||||
HTTP drivers: Hide connection error message
|
||||
SimpleDB: Disable XML entity loader
|
||||
|
||||
Adminer 4.14.0:
|
||||
Use autofocus HTML attribute
|
||||
PostgreSQL: Fix initial value of exported autoincrement
|
||||
PostgreSQL: Fix renaming a database
|
||||
|
||||
Adminer 4.12.0:
|
||||
Fix SQL query code direction if RTL language is used
|
||||
MariaDB: Add support for UUID data type
|
||||
MS SQL, MongoDB: Connect to localhost with default port if server is not specified
|
||||
MongoDB: Fix parsing WHERE condition from SQL query
|
||||
|
||||
Adminer 4.11.0:
|
||||
MySQL: Fix highlighting current table in menu on macOS
|
||||
MariaDB: Fix several links to documentation pages
|
||||
MS SQL: Prefix Unicode strings with 'N' so they are treated correctly
|
||||
|
||||
Adminer 4.10.0:
|
||||
Print username next to the logout button
|
||||
Do not display empty action links in main menu
|
||||
|
||||
Adminer 4.9.4:
|
||||
Unify displaying of 'New item' action based on privileges
|
||||
Firefox: Fix opening a database to the new browser's tab with Ctrl+click
|
||||
Editor: Fix array conversion to string (issue adminerneo#3).
|
||||
Editor: Fix building links with array parameters
|
||||
|
||||
Adminer 4.9.3:
|
||||
MySQL, PostgreSQL: Fix queries splitting and string constants
|
||||
MySQL: Fix where clause for JSON column
|
||||
MySQL: Do not include unchanged PARTITION BY definition into ALTER TABLE query
|
||||
MariaDB: Support current_timestamp()
|
||||
PostgreSQL: Fix editing record that contains a field with GENERATED ALWAYS default value
|
||||
|
||||
Adminer 4.9.2:
|
||||
PostgreSQL: Fix search fields configuration (regression from 4.9.0)
|
||||
PostgreSQL: Fix exporting CREATE TABLE query with GENERATED default values
|
||||
PostgreSQL: Fix exporting CREATE TABLE with sequence default value
|
||||
PostgreSQL: Fix search condition for network address types, add macaddr8 type
|
||||
|
||||
Adminer 4.9.1:
|
||||
Support PHP 8.3
|
||||
PostgreSQL: Show only accessible databases
|
||||
|
||||
Adminer 4.9.0:
|
||||
Validate connection to server in HTTP based drivers
|
||||
Elasticsearch 5: Make unusable driver usable again, move it to plugins
|
||||
Add new Elasticsearch 7 driver
|
||||
MySQL: Skip dump of generated columns
|
||||
|
||||
Adminer 4.8.2:
|
||||
Support multi-line table comments
|
||||
MySQL: Use ST_SRID() instead of SRID() for MySQL 8 (PR #418)
|
||||
PostgreSQL: Don't reset table comments (regression from 4.2.0)
|
||||
PostgreSQL PDO: Allow editing rows identified by boolean column (PR #380)
|
||||
|
||||
Adminer 4.8.1 (released 2021-05-14):
|
||||
Internet Explorer or PDO in Adminer 4.7.8-4.8.0: Fix XSS in doc_link (bug #797)
|
||||
Fix more PHP 8 warnings (bug #781)
|
||||
Avoid PHP warnings with PDO drivers (bug #786, regression from 4.7.8)
|
||||
MySQL: Allow moving views to other DB and renaming DB with views (bug #783)
|
||||
MariaDB: Do not treat sequences as views (PR #416)
|
||||
PostgreSQL: Support UPDATE OF triggers (bug #789)
|
||||
PostgreSQL: Support triggers with more events (OR)
|
||||
PostgreSQL: Fix parsing of foreign keys with non-ASCII column names
|
||||
PostgreSQL < 10 PDO: Avoid displaying GENERATED ALWAYS BY IDENTITY everywhere (bug #785, regression from 4.7.9)
|
||||
SQLite: Fix displayed types (bug #784, regression from 4.8.0)
|
||||
|
||||
Adminer 4.8.0 (released 2021-02-10):
|
||||
Support function default values in insert (bug #713)
|
||||
Allow SQL pseudo-function in insert
|
||||
Skip date columns for non-date values in search anywhere
|
||||
Add DB version to comment in export
|
||||
Support PHP 8 in create table (regression from 4.7.9)
|
||||
MySQL 8: Fix EXPLAIN in SQL command
|
||||
PostgreSQL: Create PRIMARY KEY for auto increment columns
|
||||
PostgreSQL: Avoid exporting empty sequence last value (bug #768)
|
||||
PostgreSQL: Do not show triggers from other schemas (PR #412)
|
||||
PostgreSQL: Fix multi-parameter functions in default values (bug #736)
|
||||
PostgreSQL: Fix displaying NULL bytea fields
|
||||
PostgreSQL PDO: Do not select NULL function for false values in edit
|
||||
Oracle: Alter indexes
|
||||
Oracle: Count tables
|
||||
Oracle: Import from CSV
|
||||
Oracle: Fix column size with string type
|
||||
MongoDB: Handle errors
|
||||
SimpleDB, Firebird, ClickHouse: Move to plugin
|
||||
|
||||
Adminer 4.7.9 (released 2021-02-07):
|
||||
Fix XSS in browsers which don't encode URL parameters (bug #775, regression from 4.7.0)
|
||||
Elasticsearch, ClickHouse: Do not print response if HTTP code is not 200
|
||||
@@ -61,7 +184,7 @@ SQLite: Handle error in altering table (bug #697)
|
||||
SQLite: Allow setting auto increment for empty tables
|
||||
SQLite: Preserve auto increment when recreating table
|
||||
MS SQL: Support foreign keys to other DB
|
||||
MongoDB: Allow setting authSource from environment variable
|
||||
MongoDB: Allow setting authSource from environment variable
|
||||
|
||||
Adminer 4.7.2 (released 2019-07-18):
|
||||
Do not attempt logging in without password (bug #676)
|
||||
@@ -389,7 +512,7 @@ Allow exporting views dependent on each other (bug #214)
|
||||
Fix resetting search (bug #318)
|
||||
Don't use LIMIT 1 if updating unique row (bug #320)
|
||||
Restrict editing rows without unique identifier to search results
|
||||
Display navigation bellow main content on mobile browsers
|
||||
Display navigation below main content on mobile browsers
|
||||
Get number of rows on export page asynchronously
|
||||
Respect 'whole result' even if some rows are checked (bug #339 since Adminer 3.7.0)
|
||||
MySQL: Optimize create table page and Editor navigation
|
||||
@@ -778,7 +901,7 @@ Use \n in SQL commands
|
||||
|
||||
phpMinAdmin 1.10.1 (released 2009-05-07):
|
||||
Highlight odd and hover rows
|
||||
Partition editing comfort (bug #2783446)
|
||||
Partition editing comfort (bug #12)
|
||||
Allow full length in limited int
|
||||
|
||||
phpMinAdmin 1.10.0 (released 2009-04-28):
|
||||
@@ -865,7 +988,7 @@ phpMinAdmin 1.4.0 (released 2007-08-15):
|
||||
Privileges
|
||||
New design
|
||||
Dutch translation
|
||||
Use NULL for auto_increment (bug #1768966)
|
||||
Use NULL for auto_increment (bug #1)
|
||||
Fix dropping procedure parameters
|
||||
|
||||
phpMinAdmin 1.3.2 (released 2007-08-06):
|
||||
|
58
compile.php
58
compile.php
@@ -1,12 +1,7 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
function adminer_errors($errno, $errstr) {
|
||||
return !!preg_match('~^(Trying to access array offset on value of type null|Undefined array key)~', $errstr);
|
||||
}
|
||||
|
||||
error_reporting(6135); // errors and warnings
|
||||
set_error_handler('adminer_errors', 2); // 2 - E_WARNING
|
||||
include dirname(__FILE__) . "/adminer/include/version.inc.php";
|
||||
include dirname(__FILE__) . "/adminer/include/errors.inc.php";
|
||||
include dirname(__FILE__) . "/externals/JsShrink/jsShrink.php";
|
||||
|
||||
function add_apo_slashes($s) {
|
||||
@@ -41,7 +36,7 @@ function lang_ids($match) {
|
||||
}
|
||||
|
||||
function put_file($match) {
|
||||
global $project, $VERSION;
|
||||
global $project, $VERSION, $driver;
|
||||
if (basename($match[2]) == '$LANG.inc.php') {
|
||||
return $match[0]; // processed later
|
||||
}
|
||||
@@ -61,6 +56,25 @@ header("Cache-Control: immutable");
|
||||
echo "adminer/file.inc.php: Caching headers placeholder not found\n";
|
||||
}
|
||||
}
|
||||
if ($driver && dirname($match[2]) == "../adminer/drivers") {
|
||||
$return = preg_replace('~^if \(isset\(\$_GET\["' . $driver . '"]\)\) \{(.*)^}~ms', '\1', $return);
|
||||
// check function definition in drivers
|
||||
if ($driver != "mysql") {
|
||||
preg_match_all(
|
||||
'~\bfunction ([^(]+)~',
|
||||
preg_replace('~class Min_Driver.*\n\t}~sU', '', file_get_contents(dirname(__FILE__) . "/adminer/drivers/mysql.inc.php")),
|
||||
$matches
|
||||
); //! respect context (extension, class)
|
||||
$functions = array_combine($matches[1], $matches[0]);
|
||||
//! do not warn about functions without declared support()
|
||||
unset($functions["__construct"], $functions["__destruct"], $functions["set_charset"]);
|
||||
foreach ($functions as $val) {
|
||||
if (!strpos($return, "$val(")) {
|
||||
fprintf(STDERR, "Missing $val in $driver\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (basename($match[2]) != "lang.inc.php" || !$_SESSION["lang"]) {
|
||||
if (basename($match[2]) == "lang.inc.php") {
|
||||
$return = str_replace('function lang($idf, $number = null) {', 'function lang($idf, $number = null) {
|
||||
@@ -193,7 +207,7 @@ function php_shrink($input) {
|
||||
$short_variables = array();
|
||||
$shortening = true;
|
||||
$tokens = token_get_all($input);
|
||||
|
||||
|
||||
// remove unnecessary { }
|
||||
//! change also `while () { if () {;} }` to `while () if () ;` but be careful about `if () { if () { } } else { }
|
||||
$shorten = 0;
|
||||
@@ -220,13 +234,13 @@ function php_shrink($input) {
|
||||
}
|
||||
}
|
||||
$tokens = array_values($tokens);
|
||||
|
||||
|
||||
foreach ($tokens as $i => $token) {
|
||||
if ($token[0] === T_VARIABLE && !isset($special_variables[$token[1]])) {
|
||||
$short_variables[$token[1]]++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
arsort($short_variables);
|
||||
$chars = implode(range('a', 'z')) . '_' . implode(range('A', 'Z'));
|
||||
// preserve variable names between versions if possible
|
||||
@@ -237,7 +251,7 @@ function php_shrink($input) {
|
||||
foreach (array_keys($short_variables) as $number => $key) {
|
||||
$short_variables[$key] = short_identifier($number, $chars); // could use also numbers and \x7f-\xff
|
||||
}
|
||||
|
||||
|
||||
$set = array_flip(preg_split('//', '!"#$%&\'()*+,-./:;<=>?@[]^`{|}'));
|
||||
$space = '';
|
||||
$output = '';
|
||||
@@ -362,27 +376,9 @@ if ($_SERVER["argv"][1]) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// check function definition in drivers
|
||||
$file = file_get_contents(dirname(__FILE__) . "/adminer/drivers/mysql.inc.php");
|
||||
$file = preg_replace('~class Min_Driver.*\n\t}~sU', '', $file);
|
||||
preg_match_all('~\bfunction ([^(]+)~', $file, $matches); //! respect context (extension, class)
|
||||
$functions = array_combine($matches[1], $matches[0]);
|
||||
//! do not warn about functions without declared support()
|
||||
unset($functions["__construct"], $functions["__destruct"], $functions["set_charset"]);
|
||||
foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($driver ? $driver : "*") . ".inc.php") as $filename) {
|
||||
if ($filename != "mysql.inc.php") {
|
||||
$file = file_get_contents($filename);
|
||||
foreach ($functions as $val) {
|
||||
if (!strpos($file, "$val(")) {
|
||||
fprintf(STDERR, "Missing $val in $filename\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
include dirname(__FILE__) . "/adminer/include/pdo.inc.php";
|
||||
include dirname(__FILE__) . "/adminer/include/driver.inc.php";
|
||||
$features = array("call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "variables", "view");
|
||||
$features = array("check", "call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "variables", "view");
|
||||
$lang_ids = array(); // global variable simplifies usage in a callback function
|
||||
$file = file_get_contents(dirname(__FILE__) . "/$project/index.php");
|
||||
if ($driver) {
|
||||
@@ -433,7 +429,7 @@ $file = str_replace("\r", "", $file);
|
||||
if ($_SESSION["lang"]) {
|
||||
// single language version
|
||||
$file = preg_replace_callback("~(<\\?php\\s*echo )?lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])(;\\s*\\?>)?~s", 'remove_lang', $file);
|
||||
$file = str_replace("<?php switch_lang(); ?>\n", "", $file);
|
||||
$file = str_replace("switch_lang();", "", $file);
|
||||
$file = str_replace('<?php echo $LANG; ?>', $_SESSION["lang"], $file);
|
||||
}
|
||||
$file = str_replace('<?php echo script_src("static/editing.js"); ?>' . "\n", "", $file);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user