From 67265ceff0c2c59911f76a34b8a564a77fbc4df9 Mon Sep 17 00:00:00 2001 From: Dan Ungureanu Date: Sun, 8 Nov 2015 15:33:08 +0200 Subject: [PATCH 1/3] Fixed multiple parser issues (#11646, #11635, #11631, #11626, #11608, #11602). Updated sql-parser library to udan11/sql-parser@2a3d3b80deba3364b7a1c4ddd52b22c7bb24995b (v3.0.5). Signed-off-by: Dan Ungureanu --- .../sql-parser/src/Components/Condition.php | 1 + .../sql-parser/src/Components/Expression.php | 5 ++-- .../src/Components/OptionsArray.php | 4 +-- .../src/Contexts/ContextMySql50000.php | 2 +- .../src/Contexts/ContextMySql50100.php | 2 +- .../src/Contexts/ContextMySql50500.php | 2 +- .../src/Contexts/ContextMySql50600.php | 2 +- .../src/Contexts/ContextMySql50700.php | 2 +- libraries/sql-parser/src/Parser.php | 17 +++++++++++- libraries/sql-parser/src/Statement.php | 26 ++++++++++++++++++- .../src/Statements/CreateStatement.php | 13 ++++++++++ .../src/Statements/InsertStatement.php | 13 +++++++++- .../src/Statements/SelectStatement.php | 21 +++++++++++++++ .../sql-parser/src/Utils/BufferedQuery.php | 5 ++++ libraries/sql-parser/src/Utils/Query.php | 19 +++++++------- 15 files changed, 112 insertions(+), 22 deletions(-) diff --git a/libraries/sql-parser/src/Components/Condition.php b/libraries/sql-parser/src/Components/Condition.php index d7262c5978..ab327a2166 100644 --- a/libraries/sql-parser/src/Components/Condition.php +++ b/libraries/sql-parser/src/Components/Condition.php @@ -46,6 +46,7 @@ class Condition extends Component 'LIKE' => 1, 'NOT IN' => 1, 'NOT NULL' => 1, + 'NOT' => 1, 'NULL' => 1, 'OR' => 1, 'XOR' => 1, diff --git a/libraries/sql-parser/src/Components/Expression.php b/libraries/sql-parser/src/Components/Expression.php index 22cd23fd10..4c2c04c917 100644 --- a/libraries/sql-parser/src/Components/Expression.php +++ b/libraries/sql-parser/src/Components/Expression.php @@ -230,8 +230,9 @@ class Expression extends Component break; } } elseif ($brackets < 0) { - $parser->error(__('Unexpected closing bracket.'), $token); - $brackets = 0; + // $parser->error(__('Unexpected closing bracket.'), $token); + // $brackets = 0; + break; } } elseif ($token->value === ',') { if ($brackets === 0) { diff --git a/libraries/sql-parser/src/Components/OptionsArray.php b/libraries/sql-parser/src/Components/OptionsArray.php index 42f0762ab7..229b350110 100644 --- a/libraries/sql-parser/src/Components/OptionsArray.php +++ b/libraries/sql-parser/src/Components/OptionsArray.php @@ -146,8 +146,8 @@ class OptionsArray extends Component sprintf( __('This option conflicts with "%1$s".'), is_array($ret->options[$lastOptionId]) - ? $ret->options[$lastOptionId]['name'] - : $ret->options[$lastOptionId] + ? $ret->options[$lastOptionId]['name'] + : $ret->options[$lastOptionId] ), $token ); diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50000.php b/libraries/sql-parser/src/Contexts/ContextMySql50000.php index 01090b3323..2df5326b49 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50000.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50000.php @@ -151,7 +151,7 @@ class ContextMySql50000 extends Context 'RIGHT JOIN' => 7, 'LINEAR HASH' => 7, 'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'PARTITION BY' => 7, - 'SQL SECURITY' => 7, + 'SET PASSWORD' => 7, 'SQL SECURITY' => 7, 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7, 'DATA DIRECTORY' => 7, 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50100.php b/libraries/sql-parser/src/Contexts/ContextMySql50100.php index b10ff1cd32..3779c0eeeb 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50100.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50100.php @@ -164,7 +164,7 @@ class ContextMySql50100 extends Context 'RIGHT JOIN' => 7, 'LINEAR HASH' => 7, 'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'PARTITION BY' => 7, - 'SQL SECURITY' => 7, + 'SET PASSWORD' => 7, 'SQL SECURITY' => 7, 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7, 'DATA DIRECTORY' => 7, 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50500.php b/libraries/sql-parser/src/Contexts/ContextMySql50500.php index c7faa84771..a8cd9e7639 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50500.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50500.php @@ -169,7 +169,7 @@ class ContextMySql50500 extends Context 'RIGHT JOIN' => 7, 'LINEAR HASH' => 7, 'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'PARTITION BY' => 7, - 'SQL SECURITY' => 7, + 'SET PASSWORD' => 7, 'SQL SECURITY' => 7, 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7, 'DATA DIRECTORY' => 7, 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50600.php b/libraries/sql-parser/src/Contexts/ContextMySql50600.php index 9854d37fb6..d7b0080a28 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50600.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50600.php @@ -174,7 +174,7 @@ class ContextMySql50600 extends Context 'RIGHT JOIN' => 7, 'LINEAR HASH' => 7, 'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'PARTITION BY' => 7, - 'SQL SECURITY' => 7, + 'SET PASSWORD' => 7, 'SQL SECURITY' => 7, 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7, 'DATA DIRECTORY' => 7, 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50700.php b/libraries/sql-parser/src/Contexts/ContextMySql50700.php index a308f5a5cd..1235524263 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50700.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50700.php @@ -182,7 +182,7 @@ class ContextMySql50700 extends Context 'RIGHT JOIN' => 7, 'LINEAR HASH' => 7, 'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'PARTITION BY' => 7, - 'SQL SECURITY' => 7, + 'SET PASSWORD' => 7, 'SQL SECURITY' => 7, 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7, 'DATA DIRECTORY' => 7, 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7, diff --git a/libraries/sql-parser/src/Parser.php b/libraries/sql-parser/src/Parser.php index 1280d7287b..8f4b2eda92 100644 --- a/libraries/sql-parser/src/Parser.php +++ b/libraries/sql-parser/src/Parser.php @@ -37,9 +37,11 @@ class Parser // MySQL Utility Statements 'EXPLAIN' => 'SqlParser\\Statements\\ExplainStatement', 'DESCRIBE' => 'SqlParser\\Statements\\ExplainStatement', + 'GRANT' => '', 'HELP' => '', - 'USE' => '', + 'SET PASSWORD' => '', 'STATUS' => '', + 'USE' => '', // Table Maintenance Statements // https://dev.mysql.com/doc/refman/5.7/en/table-maintenance-sql.html @@ -296,6 +298,13 @@ class Parser */ public $statements = array(); + /** + * The number of opened brackets. + * + * @var int + */ + public $brackets = 0; + /** * Constructor. * @@ -380,6 +389,12 @@ class Parser continue; } + // Counting the brackets around statements. + if ($token->value === '(') { + ++$this->brackets; + continue; + } + // Statements can start with keywords only. // Comments, whitespaces, etc. are ignored. if ($token->type !== Token::TYPE_KEYWORD) { diff --git a/libraries/sql-parser/src/Statement.php b/libraries/sql-parser/src/Statement.php index b15dc3dac9..a9d4dc8c94 100644 --- a/libraries/sql-parser/src/Statement.php +++ b/libraries/sql-parser/src/Statement.php @@ -122,7 +122,14 @@ abstract class Statement */ $built = array(); - foreach (static::$CLAUSES as $clause) { + /** + * Statement's clauses. + * + * @var array + */ + $clauses = $this->getClauses(); + + foreach ($clauses as $clause) { /** * The name of the clause. * @@ -224,6 +231,13 @@ abstract class Statement break; } + // Checking if this closing bracket is the pair for a bracket + // outside the statement. + if (($token->value === ')') && ($parser->brackets > 0)) { + --$parser->brackets; + continue; + } + // Only keywords are relevant here. Other parts of the query are // processed in the functions below. if ($token->type !== Token::TYPE_KEYWORD) { @@ -363,6 +377,16 @@ abstract class Statement } + /** + * Gets the clauses of this statement. + * + * @return array + */ + public function getClauses() + { + return static::$CLAUSES; + } + /** * Builds the string representation of this statement. * diff --git a/libraries/sql-parser/src/Statements/CreateStatement.php b/libraries/sql-parser/src/Statements/CreateStatement.php index 1a46b56f40..fe6693bf9d 100644 --- a/libraries/sql-parser/src/Statements/CreateStatement.php +++ b/libraries/sql-parser/src/Statements/CreateStatement.php @@ -314,6 +314,11 @@ class CreateStatement extends Statement . Expression::build($this->name) . ' ' . ParameterDefinition::build($this->parameters) . ' ' . $tmp . ' ' . TokensList::build($this->body); + } else { + return 'CREATE ' + . OptionsArray::build($this->options) . ' ' + . Expression::build($this->name) . ' ' + . TokensList::build($this->body); } return ''; } @@ -547,6 +552,14 @@ class CreateStatement extends Statement $token = $list->tokens[$list->idx]; $this->body[] = $token; } + } else { + for (; $list->idx < $list->count; ++$list->idx) { + $token = $list->tokens[$list->idx]; + if ($token->type === Token::TYPE_DELIMITER) { + break; + } + $this->body[] = $token; + } } } } diff --git a/libraries/sql-parser/src/Statements/InsertStatement.php b/libraries/sql-parser/src/Statements/InsertStatement.php index 303de259b6..c2a02b0ec0 100644 --- a/libraries/sql-parser/src/Statements/InsertStatement.php +++ b/libraries/sql-parser/src/Statements/InsertStatement.php @@ -11,6 +11,7 @@ namespace SqlParser\Statements; use SqlParser\Statement; use SqlParser\Components\IntoKeyword; use SqlParser\Components\Array2d; +use SqlParser\Components\ArrayObj; /** * `INSERT` statement. @@ -76,7 +77,17 @@ class InsertStatement extends Statement /** * Values to be inserted. * - * @var Array2d + * @var ArrayObj[] */ public $values; + + /** + * @return string + */ + public function build() + { + return 'INSERT ' . $this->options + . ' INTO ' . $this->into + . ' VALUES ' . ArrayObj::build($this->values); + } } diff --git a/libraries/sql-parser/src/Statements/SelectStatement.php b/libraries/sql-parser/src/Statements/SelectStatement.php index add3b8b65d..4bcbf2dd87 100644 --- a/libraries/sql-parser/src/Statements/SelectStatement.php +++ b/libraries/sql-parser/src/Statements/SelectStatement.php @@ -195,4 +195,25 @@ class SelectStatement extends Statement * @var SelectStatement[] */ public $union = array(); + + /** + * Gets the clauses of this statement. + * + * @return array + */ + public function getClauses() + { + // This is a cheap fix for `SELECT` statements that contain `UNION`. + // The `ORDER BY` and `LIMIT` clauses should be at the end of the + // statement. + if (!empty($this->union)) { + $clauses = static::$CLAUSES; + unset($clauses['ORDER BY']); + unset($clauses['LIMIT']); + $clauses['ORDER BY'] = array('ORDER BY', 3); + $clauses['LIMIT'] = array('LIMIT', 3); + return $clauses; + } + return static::$CLAUSES; + } } diff --git a/libraries/sql-parser/src/Utils/BufferedQuery.php b/libraries/sql-parser/src/Utils/BufferedQuery.php index 7a2e5f4374..f399220b22 100644 --- a/libraries/sql-parser/src/Utils/BufferedQuery.php +++ b/libraries/sql-parser/src/Utils/BufferedQuery.php @@ -283,6 +283,10 @@ class BufferedQuery * `strtoupper(substr($this->query, $i, 9)) === 'DELIMITER'` * * This optimization makes the code about 3 times faster. + * + * `DELIMITER` is not being considered a keyword. The only context + * it has a special meaning is when it is the beginning of a + * statement. This is the reason for the last condition. */ if (($i + 9 < $len) && (($this->query[$i ] === 'D') || ($this->query[$i ] === 'd')) @@ -295,6 +299,7 @@ class BufferedQuery && (($this->query[$i + 7] === 'E') || ($this->query[$i + 7] === 'e')) && (($this->query[$i + 8] === 'R') || ($this->query[$i + 8] === 'r')) && (Context::isWhitespace($this->query[$i + 9])) + && (trim($this->current) === '') ) { // Saving the current index to be able to revert any parsing // done in this block. diff --git a/libraries/sql-parser/src/Utils/Query.php b/libraries/sql-parser/src/Utils/Query.php index 4325b6563b..d76e6bb723 100644 --- a/libraries/sql-parser/src/Utils/Query.php +++ b/libraries/sql-parser/src/Utils/Query.php @@ -295,7 +295,14 @@ class Query $flags['is_export'] = true; } - foreach ($statement->expr as $expr) { + $expressions = $statement->expr; + if (!empty($statement->join)) { + foreach ($statement->join as $join) { + $expressions[] = $join->expr; + } + } + + foreach ($expressions as $expr) { if (!empty($expr->function)) { if ($expr->function === 'COUNT') { $flags['is_count'] = true; @@ -539,15 +546,7 @@ class Query * * @var array $clauses */ - $clauses = array_flip(array_keys($statement::$CLAUSES)); - - // This is a cheap fix for `SELECT` statements that contain `UNION`. - // Replacing the `ORDER BY` or `LIMIT` clauses should replace the last - // clause. - if (($statement instanceof SelectStatement) && (!empty($statement->union))) { - $clauses['ORDER BY'] = count($clauses) + 1; - $clauses['LIMIT'] = count($clauses) + 2; - } + $clauses = array_flip(array_keys($statement->getClauses())); /** * Lexer used for lexing the clause. From b7b6092db08823d41c7dd9d6d54291e5210bd39b Mon Sep 17 00:00:00 2001 From: Burak Yavuz Date: Thu, 5 Nov 2015 12:07:09 +0100 Subject: [PATCH 2/3] Translated using Weblate (Turkish) Currently translated at 100.0% (3211 of 3211 strings) [CI skip] --- po/tr.po | 58 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/po/tr.po b/po/tr.po index 86dfd6d570..d26d7d42ca 100644 --- a/po/tr.po +++ b/po/tr.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.2-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2015-10-26 19:59-0400\n" -"PO-Revision-Date: 2015-10-27 05:44+0200\n" +"PO-Revision-Date: 2015-11-05 12:07+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish " "\n" @@ -1634,7 +1634,7 @@ msgstr "" #: libraries/server_status_monitor.lib.php:318 prefs_manage.php:238 #: setup/frames/menu.inc.php:26 msgid "Import" -msgstr "İçe Aktar" +msgstr "İçe aktar" #: js/messages.php:272 msgid "Import monitor configuration" @@ -1824,7 +1824,7 @@ msgstr "Depolanan işlevin tanımı RETURN ifadesi içermek zorunda!" #: setup/frames/menu.inc.php:27 #: templates/database/structure/check_all_tables.phtml:11 msgid "Export" -msgstr "Dışa Aktar" +msgstr "Dışa aktar" #: js/messages.php:338 libraries/rte/rte_routines.lib.php:743 msgid "ENUM/SET editor" @@ -3010,7 +3010,7 @@ msgstr "" #: libraries/Config.class.php:1802 msgid "Font size" -msgstr "Yazı Tipi boyutu" +msgstr "Yazı tipi boyutu" #: libraries/Console.class.php:85 libraries/Console.class.php:210 #: libraries/Console.class.php:313 @@ -3254,8 +3254,8 @@ msgid "" "Execute queries on Enter and insert new line with Shift + Enter. To make " "this permanent, view settings." msgstr "" -"Enter tuşuna basarak sorguları çalıştırın ve Shift + Enter tuşları ile yeni " -"satır ekleyin. Bunu kalıcı yapmak için ayarlara bakın." +"Enter tuşuna basıldığında sorguları çalıştır ve Shift + Enter tuşları ile " +"yeni satır ekle. Bunu kalıcı yapmak için ayarlara bakın." #: libraries/Console.class.php:389 msgid "Switch to dark theme" @@ -3874,7 +3874,7 @@ msgstr "Linting bu sorgu için etkisizleştirildi çünkü en fazla uzunluğu a #: libraries/Linter.class.php:162 #, php-format msgid "%1$s (near %2$s)" -msgstr "%1$s (yaklaşık %2$s)" +msgstr "%1$s (%2$s yanına)" #: libraries/Menu.class.php:200 libraries/ServerStatusData.class.php:442 #: libraries/config/messages.inc.php:933 @@ -4025,7 +4025,7 @@ msgstr "İkili değer günlüğü" #: templates/database/structure/body_for_table_summary.phtml:10 #: templates/database/structure/table_header.phtml:27 msgid "Replication" -msgstr "Kopya Etme" +msgstr "Kopya etme" #: libraries/Menu.class.php:606 libraries/ServerStatusData.class.php:194 #: libraries/Util.class.php:4281 libraries/config.values.php:105 @@ -6109,7 +6109,7 @@ msgstr "Varsayılan genel içe aktarma seçeneklerini özelleştirir." #: libraries/config/messages.inc.php:263 msgid "Import / export" -msgstr "İçe Aktar / Dışa Aktar" +msgstr "İçe aktar / Dışa aktar" #: libraries/config/messages.inc.php:265 msgid "Set import and export directories and compression options." @@ -9162,7 +9162,7 @@ msgstr "Aşağıdaki sorguya çalıştırmak istiyor musunuz?" #: libraries/mysql_charsets.lib.php:45 msgid "Charset" -msgstr "Karakter Grubu" +msgstr "Karakter grubu" #: libraries/mysql_charsets.lib.php:169 msgid "Bulgarian" @@ -13908,28 +13908,28 @@ msgstr "Kategorilenmemiş değiştirme işlemi." #: libraries/sql-parser/src/Components/Array2d.php:92 #, php-format msgid "%1$d values were expected, but found %2$d." -msgstr "%1$d değer beklendi, ancak %2$d bulundu." +msgstr "%1$d değer beklenmekte, ancak %2$d bulundu." #: libraries/sql-parser/src/Components/Array2d.php:115 msgid "An opening bracket followed by a set of values was expected." -msgstr "Açık bir köşeli parantez ardından bir grup değer beklendi." +msgstr "Açık bir köşeli parantez ardından bir grup değer beklenmekte." #: libraries/sql-parser/src/Components/ArrayObj.php:102 #: libraries/sql-parser/src/Components/CreateDefinition.php:207 msgid "An opening bracket was expected." -msgstr "Açık bir köşeli parantez beklendi." +msgstr "Açık bir köşeli parantez beklenmekte." #: libraries/sql-parser/src/Components/ArrayObj.php:127 msgid "A comma or a closing bracket was expected" -msgstr "Bir virgül ya da kapalı bir köşeli parantez beklendi" +msgstr "Bir virgül ya da kapalı bir köşeli parantez beklenmekte" #: libraries/sql-parser/src/Components/CreateDefinition.php:251 msgid "A comma or a closing bracket was expected." -msgstr "Bir virgül ya da kapalı bir köşeli parantez beklendi." +msgstr "Bir virgül ya da kapalı bir köşeli parantez beklenmekte." #: libraries/sql-parser/src/Components/CreateDefinition.php:267 msgid "A closing bracket was expected." -msgstr "Kapalı bir köşeli parantez beklendi." +msgstr "Kapalı bir köşeli parantez beklenmekte." #: libraries/sql-parser/src/Components/DataType.php:128 msgid "Unrecognized data type." @@ -13951,16 +13951,16 @@ msgstr "Beklenmedik nokta." #: libraries/sql-parser/src/Components/Expression.php:334 msgid "An alias was expected." -msgstr "Bir kodadı beklendi." +msgstr "Bir kodadı beklenmekte." #: libraries/sql-parser/src/Components/ExpressionArray.php:97 msgid "An expression was expected." -msgstr "Bir ifade beklendi." +msgstr "Bir ifade beklenmekte." #: libraries/sql-parser/src/Components/Limit.php:91 #: libraries/sql-parser/src/Components/Limit.php:113 msgid "An offset was expected." -msgstr "Bir karşılık beklendi." +msgstr "Bir karşılık beklenmekte." #: libraries/sql-parser/src/Components/OptionsArray.php:147 #, php-format @@ -13969,19 +13969,19 @@ msgstr "Bu seçenek \"%1$s\" ile çakışıyor." #: libraries/sql-parser/src/Components/RenameOperation.php:103 msgid "The old name of the table was expected." -msgstr "Tablonun eski adı beklendi." +msgstr "Tablonun eski adı beklenmekte." #: libraries/sql-parser/src/Components/RenameOperation.php:113 msgid "Keyword \"TO\" was expected." -msgstr "\"TO\" anahtar kelimesi beklendi." +msgstr "\"TO\" anahtar kelimesi beklenmekte." #: libraries/sql-parser/src/Components/RenameOperation.php:130 msgid "The new name of the table was expected." -msgstr "Tablonun yeni adı beklendi." +msgstr "Tablonun yeni adı beklenmekte." #: libraries/sql-parser/src/Components/RenameOperation.php:148 msgid "A rename operation was expected." -msgstr "Yeniden adlandırma işlemi beklendi." +msgstr "Yeniden adlandırma işlemi beklenmekte." #: libraries/sql-parser/src/Lexer.php:267 msgid "Unexpected character." @@ -13999,11 +13999,11 @@ msgstr "Beklenen sınırlayıcı." #: libraries/sql-parser/src/Lexer.php:784 #, php-format msgid "Ending quote %1$s was expected." -msgstr "Sonlandırma tırnak işareti %1$s beklendi." +msgstr "Sonlandırma tırnak işareti %1$s beklenmekte." #: libraries/sql-parser/src/Lexer.php:824 msgid "Variable name was expected." -msgstr "Değişken adı beklendi." +msgstr "Değişken adı beklenmekte." #: libraries/sql-parser/src/Parser.php:392 msgid "Unexpected beginning of statement." @@ -14037,15 +14037,15 @@ msgstr "Tanınmayan anahtar kelime." #: libraries/sql-parser/src/Statements/CreateStatement.php:348 msgid "The name of the entity was expected." -msgstr "Varlığın adı beklendi." +msgstr "Varlığın adı beklenmekte." #: libraries/sql-parser/src/Statements/CreateStatement.php:365 msgid "At least one column definition was expected." -msgstr "En az bir sütun tanımı beklendi." +msgstr "En az bir sütun tanımı beklenmekte." #: libraries/sql-parser/src/Statements/CreateStatement.php:476 msgid "A \"RETURNS\" keyword was expected." -msgstr "\"RETURNS\" anahtar kelimesi beklendi." +msgstr "\"RETURNS\" anahtar kelimesi beklenmekte." #: libraries/sql.lib.php:224 msgid "Detailed profile" @@ -14299,7 +14299,7 @@ msgstr "Tarih" #: libraries/tracking.lib.php:791 msgid "Username" -msgstr "Kullanıcı Adı" +msgstr "Kullanıcı adı" #: libraries/tracking.lib.php:845 #, php-format From dd146633261314de62c26426a1f5c81fa7b04b8b Mon Sep 17 00:00:00 2001 From: Dan Ungureanu Date: Tue, 10 Nov 2015 20:19:50 +0200 Subject: [PATCH 3/3] Added ChangeLog entries. Signed-off-by: Dan Ungureanu --- ChangeLog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index e4ec259885..9846289e48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,6 +22,12 @@ phpMyAdmin - ChangeLog - issue Profiling checkbox is missing - issue #11642 Properly handle session expiry after POST requests - issue #11648 Notice in ./export.php#214 Undefined index: quick_or_custom +- issue #11646 Unrecognized keywords +- issue #11635 Sql not executed properly +- issue #11631 Linter warnings when creating new user +- issue #11626 wrong row count for query results +- issue #11608 Analyzer doesn't recognize GRANT statements +- issue #11602 Parser warnings (subqueries) 4.5.1.0 (2015-10-23) - issue Invalid argument supplied for foreach()