Merge branch 'QA_4_5' into STABLE
This commit is contained in:
commit
70103ad777
@ -9,6 +9,7 @@ php:
|
||||
- "7.0"
|
||||
- "5.6"
|
||||
- "5.5"
|
||||
- "hhvm"
|
||||
|
||||
sudo: false
|
||||
|
||||
|
||||
626
ChangeLog
626
ChangeLog
@ -1,6 +1,43 @@
|
||||
phpMyAdmin - ChangeLog
|
||||
======================
|
||||
|
||||
4.5.5.0 (2016-02-22)
|
||||
- issue Undefined index: is_ajax_request
|
||||
- issue #11855 Fix password change on MariaDB 10.1 and newer
|
||||
- issue #11874 Validate version information before further processing it
|
||||
- issue #11881 Full processlist lost on refresh
|
||||
- issue #11834 Adjust privileges fails if database name contains underscores
|
||||
- issue #11906 'Loading...' banner shows on login screen
|
||||
- issue #11930 Fixed changing of table parameters, eg. AUTO_INCREMENT
|
||||
- issue #11885 Call to undefined function SqlParser\ctype_alnum()
|
||||
- issue #11879 4.5.3.1 - NOW() function not recognized by parser
|
||||
- issue #11867 Gracefully handle the DESC statement
|
||||
- issue #11843 Fractional timestamp causes corrupted SQL export
|
||||
- issue #11836 Static analysis error for valid WHERE condition with IF keyword
|
||||
- issue #11800 Syntax Verifier error using REGEXP in SQL statement
|
||||
- issue #11799 Backslashes in comments are being interpreted as escape characters
|
||||
- issue #11909 Can't insert row into table that contains generated column
|
||||
- issue #11677 sql-parser and php-gettext collide.
|
||||
- issue #11920 Can't disable backquotes in export
|
||||
- issue #11911 Inserts via tbl_change.php in VARBINARY columns does not allow using HEX() and MD5()
|
||||
- issue #11939 Correct content type for uploaded error reports
|
||||
- issue #11940 Silent errors from checking local documentation
|
||||
- issue #11944 Fixed error on servers with disabled php_uname
|
||||
- issue #11946 Correctly store and report file upload errors
|
||||
- issue #11948 Avoid javascript errors on invalid location hash
|
||||
- issue #11950 Fix PHP warning on configuration errors
|
||||
- issue #11951 Silent errors on checking for writable folders
|
||||
- issue #11952 Silent warning on invalid file upload
|
||||
- issue #11953 Do not fail getting filename with open_basedir limitations
|
||||
- issue #11956 unrecognized keyword interval
|
||||
- issue Field names and aliases are being correctly parsed now.
|
||||
- issue #11959 Fix javascript error in setup
|
||||
- issue #11964 Undefined index: TABLE_COMMENT in database structure page
|
||||
- issue #11967 Fix PHP error on loading invalid XML or ODS file
|
||||
- issue #11969 Missing confirmation while dropping a view in view_operations.php
|
||||
- issue #11968 Fix export of index comments in SQL
|
||||
- issue #11979 DECLARE not accepted as valid SQL
|
||||
|
||||
4.5.4.1 (2016-01-29)
|
||||
- issue #11892 Error with PMA 4.4.15.3
|
||||
- issue #11896 Remove hard dependency on phpseclib
|
||||
@ -43,595 +80,6 @@ phpMyAdmin - ChangeLog
|
||||
- issue [Security] Full path disclosure vulnerability in SQL parser, see PMASA-2016-8
|
||||
- issue [Security] XSS vulnerability in SQL editor, see PMASA-2016-9
|
||||
|
||||
4.5.3.1 (2015-12-25)
|
||||
- issue #11774 Undefined offset 2
|
||||
- issue [Security] Path disclosure, see PMASA-2015-6
|
||||
|
||||
4.5.3.0 (2015-12-23)
|
||||
- issue #11744 Incomplete results of UNION ALL
|
||||
- issue #11742 MATCH AGAINST keywords not recognized
|
||||
- issue #11723 syntax verifier is not knowing "STRAIGHT_JOIN"
|
||||
- issue #11699 REPLACE() function confused with REPLACE statement
|
||||
- issue #11690 FLUSH word not recognized by parser
|
||||
- issue #11664 Online syntax verifier bug - "IF" on SELECT statement
|
||||
- issue #11665 Format breaks query with COUNT()
|
||||
- issue Undefinex index: SendErrorReports
|
||||
- issue Incorrect script name in include
|
||||
- issue #11685 Warning: Invalid argument supplied for foreach()
|
||||
- issue #11687 Delimiter missing while exporting multiple db routines
|
||||
- issue #11684 mysql_native_password with MariaDB bug
|
||||
- issue #11693 Flush privileges overusage - related to #11597
|
||||
- issue #11691 Query was empty on creating User in 4.5.2
|
||||
- issue #11695 PMA_getDataForDeleteUsers() warning
|
||||
- issue #11698 Cannot create user on Percona Server
|
||||
- issue Properly report error on connecting
|
||||
- issue #11706 Database export template not saving compression option
|
||||
- issue #11721 Fix single quote export for servers in ANSI_QUOTES mode
|
||||
- issue #11714 Avoid duplicite fetching of table information
|
||||
- issue #11724 Temporary fix for live data edit of big sets is not working
|
||||
- issue IE 8 compatibility in console
|
||||
- issue #11732 Exporting feature does not work with union table
|
||||
- issue #11728 CSV import skip row count after
|
||||
- issue #11679 Cannot export results of some queries
|
||||
- issue #11720 Message "An account already exists..." incorrectly displayed
|
||||
- issue #11758 Missing quoting of table in ALTER CONVERT query
|
||||
- issue #11752 PMA 4.5.2 breaks MySQL Master-Master Cluster
|
||||
- issue #11757 Export and preview show different SQL for character set
|
||||
- issue #11749 Fix possible undefined variables in table operations
|
||||
|
||||
4.5.2.0 (2015-11-23)
|
||||
- issue #11589 Incorrect parameter in mysqli_fetch_fields()
|
||||
- issue #11592 Missing headers in zipped export
|
||||
- issue #11590 Parser: Array to string conversion
|
||||
- issue #11597 Huge binary log growth on 4.5.x
|
||||
- issue #11594 'only_db' config option bug when db names contain underscore and are grouped
|
||||
- issue #11607 Unable to change password from Login information tab
|
||||
- issue #11610 Undefined variable: res_rel
|
||||
- issue #11611 Warning while exporting schema to PDF
|
||||
- issue #11612 Undefined index: new_row_format
|
||||
- issue #11605 Changing hostname kills password
|
||||
- issue #11614 Undefined variable: db
|
||||
- issue #11627 CREATE TABLE/INSERT INTO executed twice (ctrl+enter)
|
||||
- issue #11630 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given
|
||||
- issue #11632 Exporting GIS visualization ignores start and row count
|
||||
- issue #11476 Errors instead of git info when PHP has no gzip support
|
||||
- issue #11633 CodeMirror tooltip shows below modal window
|
||||
- issue #11639 Bug with the MainBackground Color
|
||||
- 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)
|
||||
- issue #11658 Collation column is empty in table Structure
|
||||
- issue #11661 Error changing table's column encoding
|
||||
|
||||
4.5.1.0 (2015-10-23)
|
||||
- issue Invalid argument supplied for foreach()
|
||||
- issue array_key_exists() expects parameter 2 to be array
|
||||
- issue #11480 Notice Undefined index: drop_database
|
||||
- issue #11486 Server variable edition in ANSI_QUOTES sql_mode: losing current value
|
||||
- issue #11491 Propose table structure broken
|
||||
- issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system
|
||||
- issue #11495 'PMA_Microhistory' is undefined
|
||||
- issue #11496 Incorrect definition for getTablesWhenOpen()
|
||||
- issue #11500 Error when creating new user on MariaDB 10.0.21
|
||||
- issue #11505 Notice on htmlspecialchars()
|
||||
- issue Notice in Structure page of views
|
||||
- issue #11510 AUTO_INCREMENT always exported when IF NOT EXISTS is on
|
||||
- issue #11516 Some partitions are missing in copied table
|
||||
- issue #11521 Notice of undefined variable when performing SHOW CREATE
|
||||
- issue #11509 Error exporting sql query results with table alias
|
||||
- issue #11512 SQL editing window does not recognise 'OUTER' keyword in 'LEFT OUTER JOIN'
|
||||
- issue #11518 "NOT IN" clause not recognized (MySQL 5.6 and 5.7)
|
||||
- issue #11524 Yellow star does not change in database Structure after add/remove from favorites
|
||||
- issue #11531 Invalid SQL in table definition when exporting table
|
||||
- issue #11526 Foreign key to other database's tables fails
|
||||
- issue #11519 Bug while exporting results when a joined table field name is in SELECT query
|
||||
- issue #11522 Strange behavior on table rename
|
||||
- issue #11539 Rename table does not result in refresh in left panel
|
||||
- issue #11541 Missing arguments for PMA_Table::generateAlter()
|
||||
- issue #11544 Notices about undefined indexes on structure pages of information_schema tables
|
||||
- issue Change minimum PHP version for Composer
|
||||
- issue #11542 Import parser and backslash
|
||||
- issue #11546 "Visualize GIS data" seems to be broken
|
||||
- issue #11548 Confirm box on "Reset slave" option
|
||||
- issue Fix cookies clearing on version change
|
||||
- issue #11558 Cannot execute SQL with subquery
|
||||
- issue #11520 Incorrect syntax creating a user using mysql_native_password with MariaDB
|
||||
- issue #11561 Cannot use third party auth plugins
|
||||
|
||||
4.5.0.2 (2015-09-25)
|
||||
- issue #11497 Incorrect indexes when exporting
|
||||
|
||||
4.5.0.1 (2015-09-24)
|
||||
- issue #11492 AUTO_INCREMENT statements are partly missing from exports
|
||||
|
||||
4.5.0.0 (2015-09-23)
|
||||
+ rfe Pagination for GIS visualization
|
||||
+ issue #6207 Usability improvements for console
|
||||
+ issue #6310 Access to Add columns text-box and Go button when creating table
|
||||
+ issue #6007 Add lock tables, disable keys options
|
||||
+ issue #6306 Additional page locking
|
||||
+ issue #6314 Support MySQL 5.7 syntax for password change
|
||||
+ issue #6319 Display/edit index name
|
||||
+ issue #6318 Toggle autocomplete of table and column names
|
||||
+ issue #5633 Manage multiple variable in bookmarked query
|
||||
+ issue #5642 Show edit/delete also when there is calculated column
|
||||
+ issue #6313 Show databases as list instead of as dropdown when no database is selected
|
||||
+ rfe Optional dark theme for the console
|
||||
+ issue #5053 PDF schema sort options
|
||||
+ issue #5543 Structure in PDF export
|
||||
+ issue #6327 Have ZeroConf create phpmyadmin DB if possible
|
||||
+ issue #5462 Warning before silent data conversion/truncation
|
||||
+ issue #6338 Support a default page in designer
|
||||
+ issue #6339 Allow copying mutiple rows
|
||||
+ issue #6334 No SQL query for loading data
|
||||
+ issue #6341 New data validation feature and datetime type
|
||||
+ issue #6324 Importing and exporting pMA meta-data
|
||||
+ issue #6330 Add grouping to stored procedures in the navigation tree
|
||||
+ issue #6275 Support IPv6 browser transformation
|
||||
+ rfe Option groups for 'With selected' dropdown in database structure page
|
||||
+ issue #6347 Support CHECKSUM TABLE operation
|
||||
+ issue #6088 Support for Paramaters with raw SQL
|
||||
+ issue #5844 Show original size of truncated columns
|
||||
+ issue #6114 Explain analyzer
|
||||
+ issue #6186 Add "Drop partition" option to partition tools
|
||||
+ issue #6354 Procedures window shift-click should select multiple rows
|
||||
+ issue #6355 Designer: "Sticky" menu option
|
||||
+ issue #6357 Directly show table comments in structure view
|
||||
+ issue #6259 Page-related settings
|
||||
+ issue #5356 Alter privileges when renaming or copying a database
|
||||
- issue #11256 Slowness due to large number of routines
|
||||
- issue #11258 GROUP_CONCAT shown as GROUPBY_CONCAT in CodeMirror autocomplete
|
||||
+ issue #5946 Work with --skip-grant-tables
|
||||
- issue #11266 "Sort by key" drop-down value is lost
|
||||
+ issue #6287 Browse: improve display of right-aligned data
|
||||
- issue #11265 Textarea rows settings ignored Features > Text fields
|
||||
+ issue #6358 MIME types should be lower case
|
||||
- issue #11226 Drop table doesn't remove the table name from navigation bar
|
||||
+ issue #6360 MySQL and MariaDB functions INET6_ATON and INET6_NTOA
|
||||
- bug Link to get real row counts of all the views in a db, at once
|
||||
- issue #11275 Drizzle version numbers
|
||||
+ issue #5400 Rewrite print view using CSS; fixes print view failures on multi-query statements
|
||||
+ issue #6362 Support spatial indexes in table create form
|
||||
+ issue #6068 Use CTRL or ALT plus arrow keys for navigation in grid editor
|
||||
+ rfe Remove support for Shift + Click on function name to apply to all rows in insert/edit page
|
||||
+ issue #6326 Don't group tables in tree if the result has only one group
|
||||
- issue #11287 When hide table structure actions is false, action should be in a row
|
||||
+ issue #5425 Batch changing the collation of each column in a table
|
||||
- issue #10918 QBE generates wrong query
|
||||
+ issue #6292 Use plain English descriptors instead of script names for icon link destinations
|
||||
+ issue #6239 Disable foreign key checks for some operations
|
||||
- issue #11296 "With selected" links doesn't work in table browse
|
||||
- issue #11166 Query builder: missing joint for the intermediary table
|
||||
+ issue #6251 Integrate SQL debugging into console
|
||||
- issue #11061 Improve/restore non-unique index row editing
|
||||
- issue #11301 MySQL errors are not shown when DebugSQL is enabled
|
||||
+ issue #5037 One file per table and one file per database export option
|
||||
+ issue #5759 Designer settings should be part of saved state
|
||||
+ issue #6257 Option to remove functions, procedures, etc., from navigation tree
|
||||
+ issue #5388 Column privileges and update
|
||||
+ issue #6231 Cant use external config file
|
||||
+ issue #6252 CSV import: Allow "Columns escaped with" to be optional
|
||||
+ issue #6262 Being able to use multiple servers at the same time when using cookie auth
|
||||
+ issue #6301 select structure or data for each table when exporting
|
||||
- issue #11261 Autocomplete completes the original table name when joining multiple aliased tables
|
||||
+ rfe Remove configuration storage data related to a user upon deleting the user
|
||||
+ issue #6298 Improved processlist for mariadb
|
||||
+ issue #6300 Warn about "Any user" potential problem
|
||||
+ issue #6368 Hide/disable edit links for read-only variables
|
||||
+ issue #6365 Human readable/writable URLs (html5 api)
|
||||
+ rfe Support virtual columns in MySQL 5.7.5+
|
||||
+ issue #6215 Support for virtual/persistent columns in MariaDB
|
||||
- issue #11314 Undefined <feature>work upon upgrade to new version
|
||||
- issue #1817 Creating configuration storage tables fail in MySQL 5.7
|
||||
- issue #6118 Parser does not handle nested selects
|
||||
- issue #5437 Support SELECT ... FROM DUAL
|
||||
- issue #4962 Support UNION
|
||||
- issue #11322 Missing null checkbox when grid editing a null cell
|
||||
+ Upgrade TCPDF to version 6.2.9
|
||||
+ issue #6102 Add SHA256 security password support
|
||||
- issue #10250 Displayed git revision info is not set
|
||||
+ Improved schema SVG export
|
||||
- issue #10726 Do not try to set port 80 for https requests
|
||||
+ issue #11394 Export/import Designer view
|
||||
+ Partition support in table Structure
|
||||
+ issue #11414 Unclear export options / organization / hierarchy
|
||||
Set minimum required PHP version to 5.5 (older versions are EOL)
|
||||
- issue #11407 ALTER TABLE failing on import when table exists
|
||||
- issue Do not export `sys` database when exporting server
|
||||
- issue #11436 CREATE DATABASE should be enabled by default on server exports
|
||||
- issue #11442 MySQL 5.7 and SHOW VARIABLES
|
||||
- issue #11445 MySQL 5.7 and Status page for an unprivileged user
|
||||
- issue #11448 Clarify doc about the MemoryLimit directive
|
||||
- issue #11489 Cannot copy a database under certain conditions
|
||||
|
||||
4.4.15.1 (2015-10-23)
|
||||
- issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system
|
||||
- issue [security] Content spoofing on url.php
|
||||
|
||||
4.4.15.0 (2015-09-20)
|
||||
- issue #11411 Undefined "replace" function on numeric scalar
|
||||
- issue #11421 Stored-proc / routine - broken parameter parsing
|
||||
- issue Missing name for configuration read_as_multibytes
|
||||
- issue #11431 Incorrect "No row selected" message
|
||||
- issue #11447 MySQL 5.5 and the language system variable
|
||||
- issue #11452 Semantics of export and import icons are mixed up
|
||||
- issue #11451 Designer-Bug in move.js on multiple server configuration
|
||||
- issue #11458 Invalid UTF-8 sequence in argument
|
||||
- issue #11457 Request URI too large
|
||||
- issue Invalid argument supplied for foreach()
|
||||
- issue #11461 Foreign key constraints for InnoDB tables with upper-case letters disabled
|
||||
- issue #11487 Warning when entering Query page
|
||||
|
||||
4.4.14.1 (2015-09-08)
|
||||
- issue [security] reCaptcha bypass
|
||||
|
||||
4.4.14.0 (2015-08-20)
|
||||
- issue #11367 Export after search, missing WHERE clause
|
||||
- issue #11380 Incomplete message after import
|
||||
- issue Incorrect scalar type declaration (reported under PHP 7)
|
||||
- issue #11389 ReCaptcha produces deprecated messages under PHP 7
|
||||
- issue #11387 phpseclib < 2.0 produces deprecated messages on PHP 7
|
||||
- issue #11404 "Switch to copied table" doesn't work
|
||||
- issue #11406 Missing quotes after calling "distinct values"
|
||||
- issue #11386 Cannot import database with long data in one column
|
||||
- issue #11410 SPATIAL index option is not clickable
|
||||
|
||||
4.4.13.1 (2015-08-08)
|
||||
- issue #11368 SQL error when importing phpMyAdmin dump file
|
||||
|
||||
4.4.13.0 (2015-08-07)
|
||||
- issue #1808 "Improve table structure" generates invalid SQL
|
||||
- issue Once checked "Show only active" checkbox is always checked
|
||||
- issue #1813 Delete rows using "Check All" is broken
|
||||
- issue Fix PHP 7 possible binding ambiguity
|
||||
- issue #11326 Exported schema includes all the tables of the database
|
||||
- issue #11339 Results not displayed if query ends in delimiter and comment
|
||||
- issue #11320 Live edit of data fields is not working always
|
||||
- issue Table list in navigation collapses when entering into a table in another page
|
||||
- issue #11364 JS error while trying to auto navigate to db structure page when db creation has failed
|
||||
|
||||
4.4.12.0 (2015-07-20)
|
||||
- bug Saved chart image does not have a proper name or an extension
|
||||
- bug #4976 Timepicker CSS issues in Original theme
|
||||
- bug #4975 Move/Copy/Rename operations on Table/Db fail on Drizzle server
|
||||
- bug #4826 Two inline edit windows
|
||||
- bug #4979 Problem when import *.ods file
|
||||
- bug Add missing head tag
|
||||
- bug #4985 Column headers move when scrolling
|
||||
|
||||
4.4.11.0 (2015-07-06)
|
||||
- bug Missing selected/entered values when editing active options in visual query builder
|
||||
- bug #4969 Autoload from prefs_storage not behaving properly
|
||||
- bug #4972 Incorrect length computed for binary data
|
||||
- bug Remove character set from create_tables_drizzle.sql
|
||||
- bug #4973 Users overview needs clarification
|
||||
- bug #4974 Creating a database from console doesn't update navigation panel
|
||||
- bug #4844 FAQ 1.17 needs an update
|
||||
|
||||
4.4.10.0 (2015-06-17)
|
||||
- bug #4950 Issues in database selection for replication
|
||||
- bug #4951 Trying to save chart as image crashes the browser
|
||||
- bug #4953 cant drag sql.gz file onto import input
|
||||
- bug #4960 Table creation results in GET request with missing server parameter that invalidates the session
|
||||
- bug #4961 Javascript error when Designer is opened
|
||||
- bug #4962 Insert by foreign key scrolls page to top
|
||||
- bug #4955 Clicking on the navi logo does not always work
|
||||
- bug External URL for $cfg['NavigationLogoLink'] causes JavaScript error when clicked
|
||||
|
||||
4.4.9.0 (2015-06-04)
|
||||
- bug #4920 relation view doesn't list fields of table in other database
|
||||
- bug #4905 Sorting by an alias
|
||||
- bug #4931 False error before entering reCAPTCHA
|
||||
- bug #4909 central column with multiple server
|
||||
- bug #4937 Custom export with backquotes off is not working
|
||||
- bug #4908 Reverse proxy: infinite internal redirect (added warning in doc)
|
||||
- bug #4942 Export to gzip saves plain text under Chrome
|
||||
|
||||
4.4.8.0 (2015-05-28)
|
||||
- bug Allow accessing visual query builder when pmadb is not configured
|
||||
- bug #4893 Nav tree line alignment issue
|
||||
- bug #4911 Lock page icon is not shown after fresh reload
|
||||
- bug #4912 "Highlight pointer" and "Row marker" doesn't work properly
|
||||
- bug Browse foreigners window goes out of the window
|
||||
- bug #4918 Date field popup dialog position bug
|
||||
- bug In /setup, PMA_messages is not defined
|
||||
- bug #4924 Recaptcha failure
|
||||
- bug #4930 Database copy doesn't work for tables with more than one FULLTEXT index
|
||||
- bug #4929 Edit view structure doesn't load the algorithm
|
||||
- bug #4923 Do not limit table comments to 60 characters
|
||||
|
||||
4.4.7.0 (2015-05-16)
|
||||
- bug #4876 Settings issues (Favorite tables shown twice in Settings)
|
||||
- bug #4896 Non-styled error page when following results link
|
||||
- bug #4894 Deleting without confirmation
|
||||
- bug #4858 Issues with SQL autocomplete
|
||||
- bug #4897 Column hint in SQL autocomplete is sometimes not shown
|
||||
- bug #4898 JS error after selecting a field and press Enter
|
||||
- bug Honor proxy settings when getting Git commit information
|
||||
- bug Missing title on link
|
||||
- bug #4512 ForceSSL Redirect Check
|
||||
- bug Undefined index collation_connection
|
||||
- bug Error when the reporting server is down
|
||||
- bug Escape database and table names for partition maintenance
|
||||
- bug Invalid value for CURLOPT_SSL_VERIFYPEER
|
||||
- bug #4367 Import status infinite loop
|
||||
- bug #4902 Designer: Loading does not work
|
||||
- bug #4904 Setup: Overview > Display does not work
|
||||
- bug #4906 Designer: pages from all databases
|
||||
|
||||
4.4.6.1 (2015-05-13)
|
||||
- bug #4899 [security] CSRF vulnerability in setup
|
||||
- bug #4900 [security] Vulnerability allowing man-in-the-middle attack
|
||||
|
||||
4.4.6.0 (2015-05-07)
|
||||
- bug #4890 webkitStorageInfo and webkitIndexedDB is deprecated
|
||||
- bug #4892 Undefined variable: unique_conditions
|
||||
- bug #4891 CSV Import ignores "Replace table data with file" checkbox
|
||||
|
||||
4.4.5.0 (2015-05-05)
|
||||
- bug Table overhead stats: missing space before the unit
|
||||
- bug Fix resize icon in Designer
|
||||
- bug #4879 Exit fullscreen in Designer does not change the button text
|
||||
- bug #4880 Designer icons missing when using original theme
|
||||
- bug #4878 Column list of central columns is not cleared
|
||||
- bug #4881 jQuery dialogs of the Designer are not displayed in fullscreen
|
||||
- bug #4883 Search function breaks when searching for certain combinations of backslashes and slashes
|
||||
- bug #4830 Maximum execution time exceeded in Util.class.php (better fix)
|
||||
- bug #4885 Some icons are above the overlay of jQuery dialogs
|
||||
- bug #4886 Clicking on external links in advisor rules give JS error
|
||||
- bug #4888 Filter in central columns does not work in other languages
|
||||
|
||||
4.4.4.0 (2015-04-26)
|
||||
- bug #4863 Edit vs Change
|
||||
- bug #4859 Don't scroll (to bottom) when editing multiple rows
|
||||
- bug #4862 Misaligned Inline edit field
|
||||
- bug #4861 Use of undefined constant PMA_DRIZZLE
|
||||
- bug #4865 sprintf(): Too few arguments
|
||||
- bug #4866 Limit column ordering in index edit dialog
|
||||
- bug #4867 Incorrect ALTER TABLE statement generated
|
||||
- bug #4870 Inconsistency in 'Ignore' checkbox in insert page
|
||||
- bug #4869 Drop column action not asking to confirm
|
||||
- bug #4871 Error on creating table
|
||||
- bug Undefined index: Rows
|
||||
|
||||
4.4.3.0 (2015-04-20)
|
||||
- bug #4851 PHP errors in login dialogue
|
||||
- bug #4207 json_encode error due to strftime returning non utf8 chars in Windows 8.1 Chinese version
|
||||
- bug #4845 White screen (Cloudflare)
|
||||
- bug #4794 Server error viewing table content
|
||||
- bug Fix issues related to number of decimal places in time
|
||||
- bug #4853 Relation view between 1600 and 1780 px
|
||||
- bug PHP 7 compatibility in php-gettext
|
||||
- bug PHP 7 compatibility in bfShapeFiles
|
||||
- bug PHP 7 session_regenerate_id() warning
|
||||
- bug #4857 Alter table after changing column name error
|
||||
- bug #4830 Maximum execution time exceeded in Util.class.php
|
||||
|
||||
4.4.2.0 (2015-04-13)
|
||||
- bug #4835 PMA_hideShowConnection not called after submit_num_fields
|
||||
- bug #4836 Server warning after moving from console to direct clicks
|
||||
- bug #4837 Duplicate new version notification when using the "Back" button
|
||||
- bug #4839 DOC link in setting is broken
|
||||
- bug #4841 Status page: Mislukte pogingen per uur value is incorrect
|
||||
- bug MIME Transformation link fixed
|
||||
- bug #4838 Prevents console window from moving out of the screen height
|
||||
- bug #4829 Create procedure via SQL Editor not more possible
|
||||
- bug #4833 CSS and Javascript are not compressed
|
||||
- bug #4849 Functions accessed from navigation do not load on ajax dialog
|
||||
- bug #4850 Relation view on 1920
|
||||
|
||||
4.4.1.1 (2015-04-08)
|
||||
- bug #4846 Web server's error log is flooded
|
||||
|
||||
4.4.1.0 (2015-04-07)
|
||||
- bug #4813 MySQL 5.7.6 and the Users menu tab
|
||||
- bug #4818 MySQL 5.7.6 and changing the password for another user
|
||||
- bug #4819 Request URI too large
|
||||
- bug #4814 MySQL 5.7.6 and Databases
|
||||
- bug Use 'server' parameter in console to work in multi server environments
|
||||
- bug Missing tooltip in monitor
|
||||
- bug Missing sort icons in monitor
|
||||
- bug #4805 Inline edit broken when using functions in query
|
||||
- bug #4821 Timed-out import fails to restart when file represented
|
||||
- bug #4754 pMA DB not detected properly
|
||||
- bug #4825 Datepicker missing when changing number of rows on Insert page
|
||||
- bug #4824 INNODB STATUS page is empty
|
||||
- bug #4828 JavaScript is loaded in wrong order
|
||||
- bug #4827 TEXT formatting doesn't work after inline editing
|
||||
- bug #4822 Compress when php.ini output_buffering is active
|
||||
- bug #4832 Sorting distinct values result loses links
|
||||
- bug #4834 Do not attach token to css requests to improve caching
|
||||
|
||||
4.4.0.0 (2015-04-01)
|
||||
+ rfe #1553 InnoDB presently supports one FULLTEXT index creation at a time
|
||||
+ rfe #1562 Allow tracking multiple table at once from database level tracking page
|
||||
+ rfe #1564 Improve action message on Tracking page
|
||||
+ rfe #1566 Change value of "Number of rows:" when "Show all" is checked
|
||||
+ rfe Focus console by clicking on white space
|
||||
+ rfe #1507 Part 1: Cycle through console history with keyboard up/down arrows
|
||||
+ rfe #1579 Default to primary key when adding relation
|
||||
+ rfe #1572 User prefs: Diff-friendly JSON for config
|
||||
+ rfe #1567 Sever Variables Table UI Improvements
|
||||
- bug #4675 phpMyAdmin should be able to work without 'examples' DIR - move SQL scripts to sql directory
|
||||
+ rfe #1578 Warn about reserved word only when a column is created
|
||||
+ rfe #1590 Recaptcha API v2
|
||||
+ rfe #1580 Individual Zeroconf PMA tables support
|
||||
+ rfe #1525 Generate keys one per line
|
||||
+ rfe #347 allow table with transformed column anywhere in FROM clause
|
||||
+ rfe #1591 Shortcut link to search page
|
||||
+ rfe #1568 Fold Add Column After / Before into dropdown
|
||||
- bug #4705 Table structure: adding primary key doesn't refresh page
|
||||
+ rfe #1582 SQL formatter
|
||||
+ rfe #1597 Fast filter improvement: remove "x other results found"
|
||||
- bug #4720 No error message on Missing extension mbstring
|
||||
+ rfe #801 Builtin transformations and relations
|
||||
+ rfe #767 USING BTREE support for HEAP/MEMORY tables
|
||||
+ rfe #1596 Make "Options > Relational" configurable
|
||||
+ rfe #719 More details in PDF relation view
|
||||
+ rfe #1096 Cannot enter connection for federated engine table
|
||||
+ rfe #954 Allow SALT in ENCRYPT function
|
||||
+ rfe #1260 Setting LoginCookieValidity > session.gc_maxlifetime
|
||||
+ rfe Transformation for JSON
|
||||
- bug Fix isCanvasSupported for new window
|
||||
+ rfe #1600 Clarify the "Inline" link
|
||||
+ rfe #1179 Speed up slow triggers by using EVENT_OBJECT_SCHEMA
|
||||
+ rfe #1192 ON DUPLICATE KEY UPDATE for loading CSV
|
||||
- bug Cannot execute command from console (multi-server installation)
|
||||
+ rfe #1208 linking from information_schema
|
||||
+ rfe #1235 Relation view: move to main "Structure" page
|
||||
+ rfe #1558 Designer menu with explicit text
|
||||
+ rfe #937 Relations with views like with tables
|
||||
+ rfe #1241 Browse Field -> Search
|
||||
+ rfe #723 Provide sanity check for table/column names (table names)
|
||||
+ rfe #1312 SessionTimeZone configuration directive
|
||||
- bug Add missing confirmation when deleting tracking report entries
|
||||
+ rfe Ability to disable foreign key check when emptying tables
|
||||
+ rfe #1549 Reset auto-increment when exporting structure
|
||||
+ rfe #1602 Recover query in redaction after session end
|
||||
+ rfe #1605 After database creation, go to database structure page
|
||||
+ rfe #1604 Show PHP version
|
||||
- bug #4770 Multiple delete on table browse ignoring foreign key checkbox
|
||||
+ rfe CodeMirror based SQL editor as an input transformation
|
||||
+ rfe #1275 CodeMirror based JSON editor as an input transformation
|
||||
+ rfe #685 Editor for HTML content
|
||||
+ rfe #1595 make professional code editor suggestion
|
||||
+ rfe #1606 processlist filter
|
||||
+ rfe Change tracking activation status from db level tracking page
|
||||
+ rfe #1207 Export users associated with a specific schema/database
|
||||
+ rfe #1575 "Disable database expansion" : unclear directive name and
|
||||
explanation
|
||||
+ rfe #1607 Tool tip for lock icon when making changes to a page
|
||||
+ rfe #1327 Hide 'Add user' link if user does not have privileges
|
||||
+ rfe #501 Support for SSL GRANT option
|
||||
+ rfe #1608 Central columns allowing setting SIGNED / UNSIGNED attribute for integer
|
||||
+ rfe #1441 Add regexp match when using AllowArbitraryServer
|
||||
- bug #4806 Unable to work with two different servers in two tabs
|
||||
|
||||
4.3.14.0 (not yet released)
|
||||
|
||||
|
||||
4.3.13.0 (2015-03-29)
|
||||
- bug #4803 "Show hidden items" is sometimes hidden
|
||||
- bug #4807 Breaks when sorting by multiple columns while using UNION
|
||||
- bug #4798 Missing column when exporting in sql
|
||||
- bug #4810 Broken find and replace
|
||||
- bug #4804 Undefined Index after export schema
|
||||
- bug #4802 Changelog page is not working
|
||||
- bug #4815 Infinite calls to index.php
|
||||
- bug #4820 Invalid links to dev.mysql.com
|
||||
- bug #4718 simulate query fails, but actual query does not
|
||||
|
||||
4.3.12.0 (2015-03-14)
|
||||
- bug #4746 Right-aligned columns have left-aligned header
|
||||
- bug #4779 PMA_Util::parseEnumSetValues fails on enums with UTF-8 values
|
||||
- bug Undefined index savedsearcheswork
|
||||
- bug #4788 Inline edit of DATE fields with NULL, NULL checkbox is under datepicker
|
||||
- bug #4790 DROP TABLE/VIEW IF EXISTS are not tracked
|
||||
- bug Compatibility with central columns of version 4.4
|
||||
- bug #4758 Firefox with auth_type to http with multiple server doesn't work anymore
|
||||
- bug #4789 Views aren't dropped when copying a database
|
||||
- bug #4784 Incomplete bookmark saving
|
||||
- bug #4786 SELECT width on relations page
|
||||
|
||||
4.3.11.1 (2015-03-04)
|
||||
- bug [security] Risk of BREACH attack, see PMASA-2015-1
|
||||
|
||||
4.3.11.0 (2015-03-02)
|
||||
- bug #4774 SQL links are completely wrong
|
||||
- bug #4768 MariaDB: version mismatch
|
||||
- bug #4777 Some images are missing in Designer for original theme
|
||||
- bug #4767 Drizzle: undefined index in mysql_charsets.inc.php
|
||||
- bug #4753 Normal field and multi-line field have different margins
|
||||
- bug #4760 Cannot re-import settings from local storage
|
||||
- bug #4778 SQL error when database list is sorted by additional columns
|
||||
- bug #4780 Notice when timestamp column does not have default value
|
||||
|
||||
4.3.10.0 (2015-02-20)
|
||||
- bug Undefined index navwork
|
||||
- bug #4744 Opening console scroll down the page
|
||||
- bug Remove extra column heading in view structure page
|
||||
- bug Add missing confirmation when deleting central columns
|
||||
- bug Undefined index DisableIS
|
||||
- bug #4763 Database export with more than 512 tables fails
|
||||
- bug #4769 Previously set column aliases are destroyed if returned to the same table
|
||||
- bug #4752 Incorrect page after creating table
|
||||
- bug #4771 Central Columns not working, showing error
|
||||
|
||||
4.3.9.0 (2015-02-05)
|
||||
- bug #4728 Incorrect headings in routine editor
|
||||
- bug #4730 Notice while browsing tables when phpmyadmin pma database exists, but not all the tables
|
||||
- bug #4729 Display original field when using "Relational display column" option and display column is empty
|
||||
- bug #4734 Default values for binary fields do not support binary values
|
||||
- bug #4736 Changing display options breaks query highlighting
|
||||
- bug Undefined index submit_type
|
||||
- bug #4738 Header lose align when scrolling in Firefox
|
||||
- bug #4741 in ./libraries/Advisor.class.php#184 vsprintf(): Too few arguments
|
||||
- bug #4743 Unable to move cursor with keyboard in filter rows box
|
||||
- bug Incorrect link in doc
|
||||
- bug #4745 Tracking does not handle views properly
|
||||
- bug #4706 Schema export doesn't handle dots in db/table name
|
||||
- bug #3935 Table Header not displayed correct (Safari 5.0.5 Mac)
|
||||
- bug #4750 Disable renaming referenced columns
|
||||
- bug #4748 Column name center-aligned instead of left-aligned in Relations
|
||||
|
||||
4.3.8.0 (2015-01-24)
|
||||
- bug Undefined constant PMA_DRIZZLE
|
||||
- bug #4712 Wrongly positioned date-picker while Grid-Editing
|
||||
- bug #4714 Forced ORDER BY for own sql statements
|
||||
- bug #4721 Undefined property: stdClass::$version
|
||||
- bug #4719 'only_db' not working
|
||||
- bug #4700 Error text: Internal Server Error
|
||||
- bug #4722 Incorrect width table summary when favorite tables is disabled
|
||||
- bug #4716 Collapse all in navigation panel is sometimes broken
|
||||
- bug #4724 Cannot navigate in filtered table list
|
||||
- bug #4717 Database navigation menu broken when resolution/screen is changing
|
||||
- bug #4727 Collation column missing in database list when DisableIS is true
|
||||
- bug Undefined index central_columnswork
|
||||
- bug Undefined index favorite_tables
|
||||
|
||||
4.3.7.0 (2015-01-15)
|
||||
- bug #4694 js error on marking table as favorite in Safari (in private mode)
|
||||
- bug #4695 Changing $cfg['DefaultTabTable'] doesn't update link and title
|
||||
- bug Undefined index menuswork
|
||||
- bug Undefined index navwork
|
||||
- bug Undefined index central_columnswork
|
||||
- bug #4697 Server Status refresh not behaving as expected
|
||||
- bug Null argument in array_multisort()
|
||||
- bug #4699 Navigation panel should not hide icons based on 'TableNavigationLinksMode'
|
||||
- bug #4703 Unsaved schema page exported as pdf.pdf
|
||||
- bug #4707 Call to undefined method PMA_Schema_PDF::dieSchema()
|
||||
- bug #4702 URL is non RFC-2396 compatible in get_scripts.js.php
|
||||
|
||||
4.3.6.0 (2015-01-07)
|
||||
- bug Undefined index notices while configuring recent and favorite tables
|
||||
- bug #4687 Designer breaks without configuration storage
|
||||
- bug #4686 Select elements flicker and selects something else
|
||||
- bug #4689 Setup tool creates "pma__favorites" incorrectly
|
||||
- bug #4685 Call to a member function isUserType() on a non-object
|
||||
- bug #4691 Do not include console when no server is selected
|
||||
- bug #4688 File permissions in archive
|
||||
- bug #4692 Dynamic javascripts gives 500 when db selected
|
||||
|
||||
4.3.5.0 (2015-01-05)
|
||||
- bug Auto-configuration: tables were not created automatically
|
||||
- bug #4677 Advanced feature checker does not check for favorite tables feature
|
||||
- bug #4678 Some of the data stored in configuration storage are not deleted upon db or table delete
|
||||
- bug #4679 Setup does not allow providing a name for favorites table
|
||||
- bug #4680 Number of favorite table are not configurable in setup
|
||||
- bug #4681 'Central columns table' field in setup does not have a description
|
||||
- bug #4318 Default connection collation and sorting
|
||||
- bug #4683 Relational data is not properly updated on table rename
|
||||
- bug #4655 Undefined index: collation_connection (second patch)
|
||||
- bug #4682 4.3.3 & 4.3.4 Import sql created by mysqldump fails on foreign keys
|
||||
- bug #4676 Auto-configuration issues
|
||||
- bug #4416 New lines are removed when grid editing (part two: TEXT)
|
||||
|
||||
--- Older ChangeLogs can be found on our project website ---
|
||||
http://www.phpmyadmin.net/old-stuff/ChangeLogs/
|
||||
|
||||
|
||||
2
README
2
README
@ -1,7 +1,7 @@
|
||||
phpMyAdmin - Readme
|
||||
===================
|
||||
|
||||
Version 4.5.4.1
|
||||
Version 4.5.5
|
||||
|
||||
A set of PHP-scripts to manage MySQL over the web.
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@ $filename = CHANGELOG_FILE;
|
||||
* Read changelog.
|
||||
*/
|
||||
// Check if the file is available, some distributions remove these.
|
||||
if (is_readable($filename)) {
|
||||
if (@is_readable($filename)) {
|
||||
|
||||
// Test if the if is in a compressed format
|
||||
if (substr($filename, -3) == '.gz') {
|
||||
|
||||
@ -51,7 +51,7 @@ copyright = u'2012 - 2014, The phpMyAdmin devel team'
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '4.5.4.1'
|
||||
version = '4.5.5'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = version
|
||||
|
||||
|
||||
@ -253,14 +253,25 @@ Verifying phpMyAdmin releases
|
||||
+++++++++++++++++++++++++++++
|
||||
|
||||
Since July 2015 all phpMyAdmin releases are cryptographically signed by the
|
||||
releasing developer, who is currently Marc Delisle. His key id is
|
||||
releasing developer, who through January 2016 was Marc Delisle. His key id is
|
||||
0x81AF644A, his PGP fingerprint is:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A
|
||||
|
||||
and you can get more identification information from `https://keybase.io/lem9 <https://keybase.io/lem9>`_. You should verify that the signature matches
|
||||
and you can get more identification information from `https://keybase.io/lem9 <https://keybase.io/lem9>`_.
|
||||
|
||||
Beginning in January 2016, the release manager is Isaac Bennetch. His key id is
|
||||
0x8259BD92, and his PGP fingerprint is:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92
|
||||
|
||||
and you can get more identification information from `https://keybase.io/ibennetch <https://keybase.io/ibennetch>`_.
|
||||
|
||||
You should verify that the signature matches
|
||||
the archive you have downloaded. This way you can be sure that you are using
|
||||
the same code that was released.
|
||||
|
||||
@ -269,9 +280,9 @@ for it. Once you have both of them in the same folder, you can verify the signat
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc
|
||||
gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A
|
||||
gpg: Can't check signature: No public key
|
||||
$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
|
||||
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
|
||||
gpg: Can't check signature: public key not found
|
||||
|
||||
As you can see gpg complains that it does not know the public key. At this
|
||||
point you should do one of the following steps:
|
||||
@ -286,9 +297,9 @@ point you should do one of the following steps:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ gpg --keyserver hkp://pgp.mit.edu --recv-keys 81AF644A
|
||||
gpg: requesting key 81AF644A from hkp server pgp.mit.edu
|
||||
gpg: key 81AF644A: public key "Marc Delisle <marc@infomarc.info>" imported
|
||||
$ gpg --keyserver hkp://pgp.mit.edu --recv-keys 8259BD92
|
||||
gpg: requesting key 8259BD92 from hkp server pgp.mit.edu
|
||||
gpg: key 8259BD92: public key "Isaac Bennetch <bennetch@gmail.com>" imported
|
||||
gpg: no ultimately trusted keys found
|
||||
gpg: Total number processed: 1
|
||||
gpg: imported: 1 (RSA: 1)
|
||||
@ -299,12 +310,13 @@ in the key:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc
|
||||
gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A
|
||||
gpg: Good signature from "Marc Delisle <marc@infomarc.info>" [unknown]
|
||||
$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
|
||||
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
|
||||
gpg: Good signature from "Isaac Bennetch <bennetch@gmail.com>"
|
||||
gpg: aka "Isaac Bennetch <isaac@bennetch.org>"
|
||||
gpg: WARNING: This key is not certified with a trusted signature!
|
||||
gpg: There is no indication that the signature belongs to the owner.
|
||||
Primary key fingerprint: 436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A
|
||||
Primary key fingerprint: 3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92
|
||||
|
||||
The problem here is that anybody could issue the key with this name. You need to
|
||||
ensure that the key is actually owned by the mentioned person. The GNU Privacy
|
||||
@ -312,29 +324,29 @@ Handbook covers this topic in the chapter `Validating other keys on your public
|
||||
keyring`_. The most reliable method is to meet the developer in person and
|
||||
exchange key fingerprints, however you can also rely on the web of trust. This way
|
||||
you can trust the key transitively though signatures of others, who have met
|
||||
the developer in person. For example you can see how `Marc's key links to
|
||||
the developer in person. For example you can see how `Isaac's key links to
|
||||
Linus's key`_.
|
||||
|
||||
Once the key is trusted, the warning will not occur:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc
|
||||
gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A
|
||||
gpg: Good signature from "Marc Delisle <marc@infomarc.info>" [full]
|
||||
$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
|
||||
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
|
||||
gpg: Good signature from "Isaac Bennetch <bennetch@gmail.com>" [full]
|
||||
|
||||
Should the signature be invalid (the archive has been changed), you would get a
|
||||
clear error regardless of the fact that the key is trusted or not:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc
|
||||
gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A
|
||||
gpg: BAD signature from "Marc Delisle <marc@infomarc.info>" [unknown]
|
||||
$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
|
||||
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
|
||||
gpg: BAD signature from "Isaac Bennetch <bennetch@gmail.com>" [unknown]
|
||||
|
||||
.. _Validating other keys on your public keyring: https://www.gnupg.org/gph/en/manual.html#AEN335
|
||||
|
||||
.. _Marc's key links to Linus's key: http://pgp.cs.uu.nl/mk_path.cgi?FROM=00411886&TO=81AF644A
|
||||
.. _Isaac's key links to Linus's key: http://pgp.cs.uu.nl/mk_path.cgi?FROM=00411886&TO=8259BD92
|
||||
|
||||
|
||||
.. index::
|
||||
@ -652,3 +664,21 @@ are always ways to make your installation more secure:
|
||||
* If you are afraid of automated attacks, enabling Captcha by
|
||||
:config:option:`$cfg['CaptchaLoginPublicKey']` and
|
||||
:config:option:`$cfg['CaptchaLoginPrivateKey']` might be an option.
|
||||
|
||||
Known issues
|
||||
++++++++++++
|
||||
|
||||
Users with column-specific privileges are unable to "Browse"
|
||||
------------------------------------------------------------
|
||||
|
||||
If a user has only column-specific privileges on some (but not all) columns in a table, "Browse"
|
||||
will fail with an error message.
|
||||
|
||||
As a workaround, a bookmarked query with the same name as the table can be created, this will
|
||||
run when using the "Browse" link instead. `Issue 11922 <https://github.com/phpmyadmin/phpmyadmin/issues/11922>`_.
|
||||
|
||||
Trouble logging back in after logging out using 'http' authentication
|
||||
----------------------------------------------------------------------
|
||||
|
||||
When using the 'http' ``auth_type``, it can be impossible to log back in (when the logout comes
|
||||
manually or after a period of inactivity). `Issue 11898 <https://github.com/phpmyadmin/phpmyadmin/issues/11898>`_.
|
||||
|
||||
@ -64,6 +64,8 @@ if (isset($_REQUEST['console_bookmark_add'])) {
|
||||
}
|
||||
}
|
||||
|
||||
$format = '';
|
||||
|
||||
/**
|
||||
* Sets globals from $_POST
|
||||
*/
|
||||
@ -450,7 +452,7 @@ if ($import_file != 'none' && ! $error) {
|
||||
$tmp_subdir = sys_get_temp_dir();
|
||||
}
|
||||
$tmp_subdir = rtrim($tmp_subdir, DIRECTORY_SEPARATOR);
|
||||
if (is_writable($tmp_subdir)) {
|
||||
if (@is_writable($tmp_subdir)) {
|
||||
$import_file_new = $tmp_subdir . DIRECTORY_SEPARATOR
|
||||
. basename($import_file) . uniqid();
|
||||
if (move_uploaded_file($import_file, $import_file_new)) {
|
||||
|
||||
@ -543,7 +543,7 @@ if (! empty($_SESSION['encryption_key'])
|
||||
* Check for existence of config directory which should not exist in
|
||||
* production environment.
|
||||
*/
|
||||
if (file_exists('config')) {
|
||||
if (@file_exists('config')) {
|
||||
trigger_error(
|
||||
__(
|
||||
'Directory [code]config[/code], which is used by the setup script, ' .
|
||||
@ -661,7 +661,7 @@ if ($cfg['SuhosinDisableWarning'] == false
|
||||
*
|
||||
* The data file is created while creating release by ./scripts/remove-incomplete-mo
|
||||
*/
|
||||
if (file_exists('libraries/language_stats.inc.php')) {
|
||||
if (@file_exists('libraries/language_stats.inc.php')) {
|
||||
include 'libraries/language_stats.inc.php';
|
||||
/*
|
||||
* This message is intentionally not translated, because we're
|
||||
|
||||
3
js/codemirror/addon/lint/sql-lint.js
vendored
3
js/codemirror/addon/lint/sql-lint.js
vendored
@ -31,7 +31,8 @@ CodeMirror.sqlLint = function(text, updateLinting, options, cm) {
|
||||
data: {
|
||||
sql_query: text,
|
||||
token: PMA_commonParams.get('token'),
|
||||
server: PMA_commonParams.get('server')
|
||||
server: PMA_commonParams.get('server'),
|
||||
options: options.lintOptions,
|
||||
},
|
||||
success: handleResponse
|
||||
});
|
||||
|
||||
26
js/config.js
26
js/config.js
@ -3,6 +3,30 @@
|
||||
* Functions used in configuration forms and on user preferences pages
|
||||
*/
|
||||
|
||||
/**
|
||||
* checks whether browser supports web storage
|
||||
*
|
||||
* @param type the type of storage i.e. localStorage or sessionStorage
|
||||
*
|
||||
* @returns bool
|
||||
*/
|
||||
function isStorageSupported(type)
|
||||
{
|
||||
try {
|
||||
window[type].setItem('PMATest', 'test');
|
||||
// Check whether key-value pair was set successfully
|
||||
if (window[type].getItem('PMATest') === 'test') {
|
||||
// Supported, remove test variable from storage
|
||||
window[type].removeItem('PMATest');
|
||||
return true;
|
||||
}
|
||||
} catch(error) {
|
||||
// Not supported
|
||||
PMA_ajaxShowMessage(PMA_messages.strNoLocalStorage, false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unbind all event handlers before tearing down a page
|
||||
*/
|
||||
@ -600,7 +624,7 @@ AJAX.registerOnload('config.js', function () {
|
||||
var tab_check_fnc = function () {
|
||||
if (location.hash != prev_hash) {
|
||||
prev_hash = location.hash;
|
||||
if (location.hash.match(/^#tab_.+/) && $('#' + location.hash.substr(5)).length) {
|
||||
if (location.hash.match(/^#tab_[a-zA-Z0-9_]+/) && $('#' + location.hash.substr(5)).length) {
|
||||
setTab(location.hash.substr(5));
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,11 +116,12 @@ function PMA_handleRedirectAndReload(data) {
|
||||
/**
|
||||
* Creates an SQL editor which supports auto completing etc.
|
||||
*
|
||||
* @param $textarea jQuery object wrapping the textarea to be made the editor
|
||||
* @param options optional options for CodeMirror
|
||||
* @param resize optional resizing ('vertical', 'horizontal', 'both')
|
||||
* @param $textarea jQuery object wrapping the textarea to be made the editor
|
||||
* @param options optional options for CodeMirror
|
||||
* @param resize optional resizing ('vertical', 'horizontal', 'both')
|
||||
* @param lintOptions additional options for lint
|
||||
*/
|
||||
function PMA_getSQLEditor($textarea, options, resize) {
|
||||
function PMA_getSQLEditor($textarea, options, resize, lintOptions) {
|
||||
if ($textarea.length > 0 && typeof CodeMirror !== 'undefined') {
|
||||
|
||||
// merge options for CodeMirror
|
||||
@ -140,6 +141,7 @@ function PMA_getSQLEditor($textarea, options, resize) {
|
||||
lint: {
|
||||
"getAnnotations": CodeMirror.sqlLint,
|
||||
"async": true,
|
||||
"lintOptions": lintOptions
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -872,6 +874,9 @@ AJAX.registerOnload('functions.js', function () {
|
||||
updateTimeout = window.setTimeout(UpdateIdleTime, 2000);
|
||||
}
|
||||
} else { //timeout occurred
|
||||
if(isStorageSupported('sessionStorage')){
|
||||
window.sessionStorage.clear();
|
||||
}
|
||||
window.location.reload(true);
|
||||
clearInterval(IncInterval);
|
||||
}
|
||||
@ -4743,30 +4748,6 @@ function PMA_ignorePhpErrors(clearPrevErrors){
|
||||
$pmaErrors.remove();
|
||||
}
|
||||
|
||||
/**
|
||||
* checks whether browser supports web storage
|
||||
*
|
||||
* @param type the type of storage i.e. localStorage or sessionStorage
|
||||
*
|
||||
* @returns bool
|
||||
*/
|
||||
function isStorageSupported(type)
|
||||
{
|
||||
try {
|
||||
window[type].setItem('PMATest', 'test');
|
||||
// Check whether key-value pair was set successfully
|
||||
if (window[type].getItem('PMATest') === 'test') {
|
||||
// Supported, remove test variable from storage
|
||||
window[type].removeItem('PMATest');
|
||||
return true;
|
||||
}
|
||||
} catch(error) {
|
||||
// Not supported
|
||||
PMA_ajaxShowMessage(PMA_messages.strNoLocalStorage, false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unbind all event handlers before tearing down a page
|
||||
*/
|
||||
|
||||
@ -515,9 +515,6 @@ $(function () {
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
AJAX.registerOnload('navigation.js', function () {
|
||||
// Check if session storage is supported
|
||||
if (isStorageSupported('sessionStorage')) {
|
||||
var storage = window.sessionStorage;
|
||||
|
||||
10
js/rte.js
10
js/rte.js
@ -15,6 +15,8 @@ var RTE = {
|
||||
*/
|
||||
object: function (type) {
|
||||
$.extend(this, RTE.COMMON);
|
||||
this.editorType = type;
|
||||
|
||||
switch (type) {
|
||||
case 'routine':
|
||||
$.extend(this, RTE.ROUTINE);
|
||||
@ -58,6 +60,10 @@ RTE.COMMON = {
|
||||
* the jQueryUI dialog buttons
|
||||
*/
|
||||
buttonOptions: {},
|
||||
/**
|
||||
* @var editorType Type of the editor
|
||||
*/
|
||||
editorType: null,
|
||||
/**
|
||||
* Validate editor form fields.
|
||||
*/
|
||||
@ -360,7 +366,9 @@ RTE.COMMON = {
|
||||
* the Definition textarea.
|
||||
*/
|
||||
var $elm = $('textarea[name=item_definition]').last();
|
||||
that.syntaxHiglighter = PMA_getSQLEditor($elm);
|
||||
var linterOptions = {};
|
||||
linterOptions[that.editorType + '_editor'] = true;
|
||||
that.syntaxHiglighter = PMA_getSQLEditor($elm, {}, null, linterOptions);
|
||||
|
||||
// Execute item-specific code
|
||||
that.postDialogShow(data);
|
||||
|
||||
@ -114,7 +114,7 @@ class PMA_Config
|
||||
*/
|
||||
public function checkSystem()
|
||||
{
|
||||
$this->set('PMA_VERSION', '4.5.4.1');
|
||||
$this->set('PMA_VERSION', '4.5.5');
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
@ -813,7 +813,7 @@ class PMA_Config
|
||||
public function loadDefaults()
|
||||
{
|
||||
$cfg = array();
|
||||
if (! file_exists($this->default_source)) {
|
||||
if (! @file_exists($this->default_source)) {
|
||||
$this->error_config_default_file = true;
|
||||
return false;
|
||||
}
|
||||
@ -1166,12 +1166,12 @@ class PMA_Config
|
||||
return false;
|
||||
}
|
||||
|
||||
if (! file_exists($this->getSource())) {
|
||||
if (! @file_exists($this->getSource())) {
|
||||
$this->source_mtime = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (! is_readable($this->getSource())) {
|
||||
if (! @is_readable($this->getSource())) {
|
||||
// manually check if file is readable
|
||||
// might be bug #3059806 Supporting running from CIFS/Samba shares
|
||||
|
||||
|
||||
@ -425,40 +425,39 @@ class PMA_Error extends PMA_Message
|
||||
* prevent path disclosure in error message,
|
||||
* and make users feel safe to submit error reports
|
||||
*
|
||||
* @param string $dest path to be shorten
|
||||
* @param string $path path to be shorten
|
||||
*
|
||||
* @return string shortened path
|
||||
*/
|
||||
public static function relPath($dest)
|
||||
public static function relPath($path)
|
||||
{
|
||||
$dest = realpath($dest);
|
||||
$dest = @realpath($path);
|
||||
|
||||
if (substr(PHP_OS, 0, 3) == 'WIN') {
|
||||
$separator = '\\';
|
||||
} else {
|
||||
$separator = '/';
|
||||
/* Probably affected by open_basedir */
|
||||
if ($dest === FALSE) {
|
||||
return $path;
|
||||
}
|
||||
|
||||
$Ahere = explode(
|
||||
$separator,
|
||||
realpath(__DIR__ . $separator . '..')
|
||||
DIRECTORY_SEPARATOR,
|
||||
realpath(__DIR__ . DIRECTORY_SEPARATOR . '..')
|
||||
);
|
||||
$Adest = explode($separator, $dest);
|
||||
$Adest = explode(DIRECTORY_SEPARATOR, $dest);
|
||||
|
||||
$result = '.';
|
||||
// && count ($Adest)>0 && count($Ahere)>0 )
|
||||
while (implode($separator, $Adest) != implode($separator, $Ahere)) {
|
||||
while (implode(DIRECTORY_SEPARATOR, $Adest) != implode(DIRECTORY_SEPARATOR, $Ahere)) {
|
||||
if (count($Ahere) > count($Adest)) {
|
||||
array_pop($Ahere);
|
||||
$result .= $separator . '..';
|
||||
$result .= DIRECTORY_SEPARATOR . '..';
|
||||
} else {
|
||||
array_pop($Adest);
|
||||
}
|
||||
}
|
||||
$path = $result . str_replace(implode($separator, $Adest), '', $dest);
|
||||
$path = $result . str_replace(implode(DIRECTORY_SEPARATOR, $Adest), '', $dest);
|
||||
return str_replace(
|
||||
$separator . $separator,
|
||||
$separator,
|
||||
DIRECTORY_SEPARATOR . PATH_SEPARATOR,
|
||||
DIRECTORY_SEPARATOR,
|
||||
$path
|
||||
);
|
||||
}
|
||||
|
||||
@ -441,10 +441,7 @@ class PMA_File
|
||||
{
|
||||
// suppress warnings from being displayed, but not from being logged
|
||||
// any file access outside of open_basedir will issue a warning
|
||||
ob_start();
|
||||
$is_readable = is_readable($this->getName());
|
||||
ob_end_clean();
|
||||
return $is_readable;
|
||||
return @is_readable($this->getName());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -463,7 +460,7 @@ class PMA_File
|
||||
}
|
||||
|
||||
if (empty($GLOBALS['cfg']['TempDir'])
|
||||
|| ! is_writable($GLOBALS['cfg']['TempDir'])
|
||||
|| ! @is_writable($GLOBALS['cfg']['TempDir'])
|
||||
) {
|
||||
// cannot create directory or access, point user to FAQ 1.11
|
||||
$this->_error_message = __(
|
||||
|
||||
@ -200,12 +200,12 @@ class PMA_Header
|
||||
$this->_scripts->addFile(
|
||||
'get_image.js.php?theme=' . $theme_id
|
||||
);
|
||||
$this->_scripts->addFile('config.js');
|
||||
$this->_scripts->addFile('doclinks.js');
|
||||
$this->_scripts->addFile('functions.js');
|
||||
$this->_scripts->addFile('navigation.js');
|
||||
$this->_scripts->addFile('indexes.js');
|
||||
$this->_scripts->addFile('common.js');
|
||||
$this->_scripts->addFile('config.js');
|
||||
$this->_scripts->addFile('page_settings.js');
|
||||
$this->_scripts->addCode($this->getJsParamsCode());
|
||||
}
|
||||
|
||||
@ -518,7 +518,7 @@ class PMA_Util
|
||||
if (defined('TESTSUITE')) {
|
||||
/* Provide consistent URL for testsuite */
|
||||
return PMA_linkURL('http://docs.phpmyadmin.net/en/latest/' . $url);
|
||||
} else if (file_exists('doc/html/index.html')) {
|
||||
} else if (@file_exists('doc/html/index.html')) {
|
||||
if (defined('PMA_SETUP')) {
|
||||
return '../doc/html/' . $url;
|
||||
} else {
|
||||
@ -4897,6 +4897,7 @@ class PMA_Util
|
||||
'ENGINE' => '',
|
||||
'TABLE_TYPE' => '',
|
||||
'TABLE_ROWS' => 0,
|
||||
'TABLE_COMMENT' => '',
|
||||
);
|
||||
}
|
||||
} // end while
|
||||
|
||||
@ -87,12 +87,19 @@ class VersionInformation
|
||||
}
|
||||
}
|
||||
|
||||
/* Parse response */
|
||||
$data = json_decode($response);
|
||||
if (is_object($data)
|
||||
&& ! empty($data->version)
|
||||
&& ! empty($data->date)
|
||||
&& $save
|
||||
|
||||
/* Basic sanity checking */
|
||||
if (! is_object($data)
|
||||
|| empty($data->version)
|
||||
|| empty($data->releases)
|
||||
|| empty($data->date)
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($save) {
|
||||
if (! isset($_SESSION) && ! defined('TESTSUITE')) {
|
||||
ini_set('session.use_only_cookies', 'false');
|
||||
ini_set('session.use_cookies', 'false');
|
||||
@ -267,4 +274,4 @@ class VersionInformation
|
||||
return PMA_Util::cacheGet('PMA_MYSQL_STR_VERSION');
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
@ -207,6 +207,20 @@ foreach (get_defined_vars() as $key => $value) {
|
||||
}
|
||||
unset($key, $value, $variables_whitelist);
|
||||
|
||||
/**
|
||||
* @global boolean $GLOBALS['is_ajax_request']
|
||||
* @todo should this be moved to the variables init section above?
|
||||
*
|
||||
* Check if the current request is an AJAX request, and set is_ajax_request
|
||||
* accordingly. Suppress headers, footers and unnecessary output if set to
|
||||
* true
|
||||
*/
|
||||
if (isset($_REQUEST['ajax_request']) && $_REQUEST['ajax_request'] == true) {
|
||||
$GLOBALS['is_ajax_request'] = true;
|
||||
} else {
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Subforms - some functions need to be called by form, cause of the limited URL
|
||||
@ -1175,20 +1189,6 @@ $GLOBALS['PMA_Config']->set('default_server', '');
|
||||
/* Tell tracker that it can actually work */
|
||||
PMA_Tracker::enable();
|
||||
|
||||
/**
|
||||
* @global boolean $GLOBALS['is_ajax_request']
|
||||
* @todo should this be moved to the variables init section above?
|
||||
*
|
||||
* Check if the current request is an AJAX request, and set is_ajax_request
|
||||
* accordingly. Suppress headers, footers and unnecessary output if set to
|
||||
* true
|
||||
*/
|
||||
if (isset($_REQUEST['ajax_request']) && $_REQUEST['ajax_request'] == true) {
|
||||
$GLOBALS['is_ajax_request'] = true;
|
||||
} else {
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
}
|
||||
|
||||
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
|
||||
PMA_fatalError(__("GLOBALS overwrite attempt"));
|
||||
}
|
||||
|
||||
@ -220,7 +220,7 @@ function PMA_fatalError(
|
||||
$error_message = vsprintf($error_message, $message_args);
|
||||
}
|
||||
|
||||
if ($GLOBALS['is_ajax_request']) {
|
||||
if (! empty($GLOBALS['is_ajax_request']) && $GLOBALS['is_ajax_request']) {
|
||||
$response = PMA_Response::getInstance();
|
||||
$response->isSuccess(false);
|
||||
$response->addJSON('message', PMA_Message::error($error_message));
|
||||
|
||||
@ -194,7 +194,7 @@ function PMA_sendErrorReport($report)
|
||||
array(
|
||||
'method' => 'POST',
|
||||
'content' => $data_string,
|
||||
'header' => "Content-Type: multipart/form-data\r\n",
|
||||
'header' => "Content-Type: application/json\r\n",
|
||||
)
|
||||
);
|
||||
$context = PMA_Util::handleContext($context);
|
||||
@ -216,7 +216,10 @@ function PMA_sendErrorReport($report)
|
||||
}
|
||||
$curl_handle = PMA_Util::configureCurl($curl_handle);
|
||||
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, "POST");
|
||||
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array('Expect:'));
|
||||
curl_setopt(
|
||||
$curl_handle, CURLOPT_HTTPHEADER,
|
||||
array('Expect:', 'Content-Type: application/json')
|
||||
);
|
||||
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $data_string);
|
||||
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
|
||||
$response = curl_exec($curl_handle);
|
||||
|
||||
@ -339,7 +339,7 @@ function PMA_openExportFile($filename, $quick_export)
|
||||
)
|
||||
);
|
||||
$message->addParam($save_filename);
|
||||
} elseif (is_file($save_filename) && ! is_writable($save_filename)) {
|
||||
} elseif (is_file($save_filename) && ! @is_writable($save_filename)) {
|
||||
$message = PMA_Message::error(
|
||||
__(
|
||||
'The web server does not have permission '
|
||||
|
||||
@ -19,7 +19,7 @@ if (! defined('PHPMYADMIN')) {
|
||||
*/
|
||||
function PMA_getDirContent($dir, $expression = '')
|
||||
{
|
||||
if (!file_exists($dir) || !($handle = @opendir($dir))) {
|
||||
if (!@file_exists($dir) || !($handle = @opendir($dir))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ function PMA_getDirContent($dir, $expression = '')
|
||||
$dir .= '/';
|
||||
}
|
||||
while ($file = @readdir($handle)) {
|
||||
if (is_file($dir . $file)
|
||||
if (@is_file($dir . $file)
|
||||
&& ($expression == '' || preg_match($expression, $file))
|
||||
) {
|
||||
$result[] = $file;
|
||||
|
||||
@ -1273,6 +1273,13 @@ function PMA_getValueColumnForOtherDatatypes($column, $default_char_editing,
|
||||
$onChangeClause, $tabindex, $tabindex_for_value, $idindex, $data_type
|
||||
);
|
||||
|
||||
$virtual = array(
|
||||
'VIRTUAL', 'PERSISTENT', 'VIRTUAL GENERATED', 'STORED GENERATED'
|
||||
);
|
||||
if (in_array($column['Extra'], $virtual)) {
|
||||
$html_output .= '<input type="hidden" name="virtual'
|
||||
. $column_name_appendix . '" value="1" />';
|
||||
}
|
||||
if ($column['Extra'] == 'auto_increment') {
|
||||
$html_output .= '<input type="hidden" name="auto_increment'
|
||||
. $column_name_appendix . '" value="1" />';
|
||||
@ -2274,13 +2281,15 @@ function PMA_getQueryValuesForInsertAndUpdateInMultipleEdit($multi_edit_columns_
|
||||
* @param boolean $using_key whether editing or new row
|
||||
* @param string $where_clause where clause
|
||||
* @param string $table table name
|
||||
* @param array $multi_edit_funcs multiple edit functions array
|
||||
*
|
||||
* @return string $current_value current column value in the form
|
||||
*/
|
||||
function PMA_getCurrentValueForDifferentTypes($possibly_uploaded_val, $key,
|
||||
$multi_edit_columns_type, $current_value, $multi_edit_auto_increment,
|
||||
$rownumber, $multi_edit_columns_name, $multi_edit_columns_null,
|
||||
$multi_edit_columns_null_prev, $is_insert, $using_key, $where_clause, $table
|
||||
$multi_edit_columns_null_prev, $is_insert, $using_key, $where_clause, $table,
|
||||
$multi_edit_funcs
|
||||
) {
|
||||
// Fetch the current values of a row to use in case we have a protected field
|
||||
if ($is_insert
|
||||
@ -2295,6 +2304,8 @@ function PMA_getCurrentValueForDifferentTypes($possibly_uploaded_val, $key,
|
||||
|
||||
if (false !== $possibly_uploaded_val) {
|
||||
$current_value = $possibly_uploaded_val;
|
||||
} else if (! empty($multi_edit_funcs[$key])) {
|
||||
$current_value = "'" . PMA_Util::sqlAddSlashes($current_value) . "'";
|
||||
} else {
|
||||
// c o l u m n v a l u e i n t h e f o r m
|
||||
if (isset($multi_edit_columns_type[$key])) {
|
||||
|
||||
@ -588,6 +588,8 @@ function PMA_AdjustPrivileges_moveDB($oldDb, $newname)
|
||||
&& $GLOBALS['is_reload_priv']
|
||||
) {
|
||||
$GLOBALS['dbi']->selectDb('mysql');
|
||||
$newname = str_replace("_", "\_", $newname);
|
||||
$oldDb = str_replace("_", "\_", $oldDb);
|
||||
|
||||
// For Db specific privileges
|
||||
$query_db_specific = 'UPDATE ' . PMA_Util::backquote('db')
|
||||
@ -636,6 +638,8 @@ function PMA_AdjustPrivileges_copyDB($oldDb, $newname)
|
||||
&& $GLOBALS['is_reload_priv']
|
||||
) {
|
||||
$GLOBALS['dbi']->selectDb('mysql');
|
||||
$newname = str_replace("_", "\_", $newname);
|
||||
$oldDb = str_replace("_", "\_", $oldDb);
|
||||
|
||||
$query_db_specific_old = 'SELECT * FROM '
|
||||
. PMA_Util::backquote('db') . ' WHERE '
|
||||
|
||||
@ -244,7 +244,7 @@ function _setlocale($category, $locale) {
|
||||
function _bindtextdomain($domain, $path) {
|
||||
global $text_domains;
|
||||
// ensure $path ends with a slash ('/' should work for both, but lets still play nice)
|
||||
if (substr(php_uname(), 0, 7) == "Windows") {
|
||||
if (DIRECTORY_SEPARATOR == '\\') {
|
||||
if ($path[strlen($path)-1] != '\\' and $path[strlen($path)-1] != '/')
|
||||
$path .= '\\';
|
||||
} else {
|
||||
|
||||
@ -115,7 +115,7 @@ class AuthenticationCookie extends AuthenticationPlugin
|
||||
$header->disableMenuAndConsole();
|
||||
$header->disableWarnings();
|
||||
|
||||
if (file_exists(CUSTOM_HEADER_FILE)) {
|
||||
if (@file_exists(CUSTOM_HEADER_FILE)) {
|
||||
include CUSTOM_HEADER_FILE;
|
||||
}
|
||||
echo '
|
||||
@ -263,7 +263,7 @@ class AuthenticationCookie extends AuthenticationPlugin
|
||||
echo '</div>';
|
||||
}
|
||||
echo '</div>';
|
||||
if (file_exists(CUSTOM_FOOTER_FILE)) {
|
||||
if (@file_exists(CUSTOM_FOOTER_FILE)) {
|
||||
include CUSTOM_FOOTER_FILE;
|
||||
}
|
||||
if (! defined('TESTSUITE')) {
|
||||
|
||||
@ -103,7 +103,7 @@ class AuthenticationHttp extends AuthenticationPlugin
|
||||
);
|
||||
$response->addHTML('</h3>');
|
||||
|
||||
if (file_exists(CUSTOM_FOOTER_FILE)) {
|
||||
if (@file_exists(CUSTOM_FOOTER_FILE)) {
|
||||
include CUSTOM_FOOTER_FILE;
|
||||
}
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ function Swekey_Auth_check()
|
||||
$_SESSION['SWEKEY'] = array();
|
||||
}
|
||||
|
||||
$_SESSION['SWEKEY']['ENABLED'] = (! empty($confFile) && file_exists($confFile));
|
||||
$_SESSION['SWEKEY']['ENABLED'] = (! empty($confFile) && @file_exists($confFile));
|
||||
|
||||
// Load the swekey.conf file the first time
|
||||
if ($_SESSION['SWEKEY']['ENABLED']
|
||||
@ -169,7 +169,7 @@ function Swekey_Auth_error()
|
||||
// echo "<!-- exists -->\n";
|
||||
}
|
||||
|
||||
if (file_exists($caFile)) {
|
||||
if (@file_exists($caFile)) {
|
||||
Swekey_SetCAFile($caFile);
|
||||
} elseif (! empty($caFile)
|
||||
&& (substr($_SESSION['SWEKEY']['CONF_SERVER_CHECK'], 0, 8) == "https://")
|
||||
|
||||
@ -13,7 +13,7 @@ if (! defined('PHPMYADMIN')) {
|
||||
/**
|
||||
* Skip the plugin if TCPDF is not available.
|
||||
*/
|
||||
if (! file_exists(TCPDF_INC)) {
|
||||
if (! @file_exists(TCPDF_INC)) {
|
||||
$GLOBALS['skip_import'] = true;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1551,6 +1551,12 @@ class ExportSql extends ExportPlugin
|
||||
// analysis.
|
||||
if (!$view) {
|
||||
|
||||
if (empty($sql_backquotes)) {
|
||||
// Option "Enclose table and column names with backquotes"
|
||||
// was checked.
|
||||
Context::$MODE |= Context::NO_ENCLOSING_QUOTES;
|
||||
}
|
||||
|
||||
// Using appropriate quotes.
|
||||
if (($compat === 'MSSQL') || ($sql_backquotes === '"')) {
|
||||
SqlParser\Context::$MODE |= SqlParser\Context::ANSI_QUOTES;
|
||||
@ -1621,7 +1627,9 @@ class ExportSql extends ExportPlugin
|
||||
$indexes_fulltext[] = $field->build($field);
|
||||
unset($statement->fields[$key]);
|
||||
} else if (empty($GLOBALS['sql_if_not_exists'])) {
|
||||
$indexes[] = $field->build($field);
|
||||
$indexes[] = str_replace(
|
||||
'COMMENT=\'', 'COMMENT \'', $field::build($field)
|
||||
);
|
||||
unset($statement->fields[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -149,7 +149,7 @@ class ImportOds extends ImportPlugin
|
||||
* result in increased performance without the need to
|
||||
* alter the code in any way. It's basically a freebee.
|
||||
*/
|
||||
$xml = simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT);
|
||||
$xml = @simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT);
|
||||
|
||||
unset($buffer);
|
||||
|
||||
|
||||
@ -88,7 +88,7 @@ class ImportShp extends ImportPlugin
|
||||
// and use the files in it for import
|
||||
if ($compression == 'application/zip'
|
||||
&& ! empty($GLOBALS['cfg']['TempDir'])
|
||||
&& is_writable($GLOBALS['cfg']['TempDir'])
|
||||
&& @is_writable($GLOBALS['cfg']['TempDir'])
|
||||
) {
|
||||
$dbf_file_name = PMA_findFileFromZipArchive(
|
||||
'/^.*\.dbf$/i', $import_file
|
||||
|
||||
@ -106,7 +106,7 @@ class ImportXml extends ImportPlugin
|
||||
* result in increased performance without the need to
|
||||
* alter the code in any way. It's basically a freebee.
|
||||
*/
|
||||
$xml = simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT);
|
||||
$xml = @simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT);
|
||||
|
||||
unset($buffer);
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ if (! defined('PHPMYADMIN')) {
|
||||
/**
|
||||
* Skip the plugin if TCPDF is not available.
|
||||
*/
|
||||
if (! file_exists(TCPDF_INC)) {
|
||||
if (! @file_exists(TCPDF_INC)) {
|
||||
$GLOBALS['skip_import'] = true;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -97,7 +97,8 @@ function PMA_getRelationsParamDiagnostic($cfgRelation)
|
||||
$messages['disabled'] = '<font color="red">' . __('Disabled') . '</font>';
|
||||
|
||||
if (empty($cfgRelation['db'])) {
|
||||
$retval .= __('Configuration of pmadb… ')
|
||||
$retval .= __('Configuration of pmadb…')
|
||||
. ' '
|
||||
. $messages['error']
|
||||
. PMA_Util::showDocu('setup', 'linked-tables')
|
||||
. '<br />' . "\n"
|
||||
|
||||
@ -454,7 +454,7 @@ function PMA_langList()
|
||||
$path = $GLOBALS['lang_path'] . '/' . $file . '/LC_MESSAGES/phpmyadmin.mo';
|
||||
if ($file != "."
|
||||
&& $file != ".."
|
||||
&& file_exists($path)
|
||||
&& @file_exists($path)
|
||||
) {
|
||||
$result[$file] = PMA_langDetails($file);
|
||||
}
|
||||
|
||||
@ -165,6 +165,9 @@ function PMA_getHtmlForServerProcesslist()
|
||||
if ($is_sorted && $_REQUEST['sort_order'] === 'ASC') {
|
||||
$column['sort_order'] = 'DESC';
|
||||
}
|
||||
if (isset($_REQUEST['showExecuting'])) {
|
||||
$column['showExecuting'] = 'on';
|
||||
}
|
||||
|
||||
$retval .= '<th>';
|
||||
$columnUrl = PMA_URL_getCommon($column);
|
||||
@ -244,7 +247,12 @@ function PMA_getHtmlForProcessListFilter()
|
||||
}
|
||||
|
||||
$url_params = array(
|
||||
'ajax_request' => true
|
||||
'ajax_request' => true,
|
||||
'full' => (isset($_REQUEST['full']) ? $_REQUEST['full'] : ''),
|
||||
'column_name' => (isset($_REQUEST['column_name']) ? $_REQUEST['column_name'] : ''),
|
||||
'order_by_field'
|
||||
=> (isset($_REQUEST['order_by_field']) ? $_REQUEST['order_by_field'] : ''),
|
||||
'sort_order' => (isset($_REQUEST['sort_order']) ? $_REQUEST['sort_order'] : ''),
|
||||
);
|
||||
|
||||
$retval = '';
|
||||
|
||||
@ -63,6 +63,12 @@ class AutoloaderInit
|
||||
}
|
||||
}
|
||||
|
||||
// php-gettext is used to translate error messages.
|
||||
// This must be included before any class of the parser is loaded because
|
||||
// if there is no `__` function defined, the library defines a dummy one
|
||||
// in `common.php`.
|
||||
require_once './libraries/php-gettext/gettext.inc';
|
||||
|
||||
// Initializing the autoloader.
|
||||
return AutoloaderInit::getLoader(
|
||||
array(
|
||||
|
||||
@ -172,8 +172,8 @@ class AlterOperation extends Component
|
||||
$parser,
|
||||
$list,
|
||||
array(
|
||||
'noAlias' => true,
|
||||
'noBrackets' => true,
|
||||
'breakOnAlias' => true,
|
||||
'parseField' => 'column',
|
||||
)
|
||||
);
|
||||
if ($ret->field === null) {
|
||||
|
||||
@ -63,20 +63,32 @@ class ArrayObj extends Component
|
||||
$ret = empty($options['type']) ? new ArrayObj() : array();
|
||||
|
||||
/**
|
||||
* The state of the parser.
|
||||
* The last raw expression.
|
||||
*
|
||||
* Below are the states of the parser.
|
||||
*
|
||||
* 0 -----------------------[ ( ]------------------------> 1
|
||||
*
|
||||
* 1 ------------------[ array element ]-----------------> 2
|
||||
*
|
||||
* 2 ------------------------[ , ]-----------------------> 1
|
||||
* 2 ------------------------[ ) ]-----------------------> (END)
|
||||
*
|
||||
* @var int $state
|
||||
* @var string $lastRaw
|
||||
*/
|
||||
$state = 0;
|
||||
$lastRaw = '';
|
||||
|
||||
/**
|
||||
* The last value.
|
||||
*
|
||||
* @var string $lastValue
|
||||
*/
|
||||
$lastValue = '';
|
||||
|
||||
/**
|
||||
* Counts brackets.
|
||||
*
|
||||
* @var int $brackets
|
||||
*/
|
||||
$brackets = 0;
|
||||
|
||||
/**
|
||||
* Last separator (bracket or comma).
|
||||
*
|
||||
* @var boolean $isCommaLast
|
||||
*/
|
||||
$isCommaLast = false;
|
||||
|
||||
for (; $list->idx < $list->count; ++$list->idx) {
|
||||
/**
|
||||
@ -92,49 +104,72 @@ class ArrayObj extends Component
|
||||
}
|
||||
|
||||
// Skipping whitespaces and comments.
|
||||
if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) {
|
||||
if (($token->type === Token::TYPE_WHITESPACE)
|
||||
|| ($token->type === Token::TYPE_COMMENT)
|
||||
) {
|
||||
$lastRaw .= $token->token;
|
||||
$lastValue = trim($lastValue) .' ';
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($state === 0) {
|
||||
if (($token->type !== Token::TYPE_OPERATOR) || ($token->value !== '(')) {
|
||||
$parser->error(
|
||||
__('An opening bracket was expected.'),
|
||||
$token
|
||||
);
|
||||
break;
|
||||
}
|
||||
$state = 1;
|
||||
} elseif ($state === 1) {
|
||||
if (($token->type === Token::TYPE_OPERATOR) && ($token->value === ')')) {
|
||||
// Empty array.
|
||||
break;
|
||||
}
|
||||
if (empty($options['type'])) {
|
||||
$ret->values[] = $token->value;
|
||||
$ret->raw[] = $token->token;
|
||||
} else {
|
||||
$ret[] = $options['type']::parse(
|
||||
$parser,
|
||||
$list,
|
||||
empty($options['typeOptions']) ? array() : $options['typeOptions']
|
||||
);
|
||||
}
|
||||
$state = 2;
|
||||
} elseif ($state === 2) {
|
||||
if (($token->type !== Token::TYPE_OPERATOR) || (($token->value !== ',') && ($token->value !== ')'))) {
|
||||
$parser->error(
|
||||
__('A comma or a closing bracket was expected'),
|
||||
$token
|
||||
);
|
||||
break;
|
||||
}
|
||||
if ($token->value === ',') {
|
||||
$state = 1;
|
||||
} else { // )
|
||||
break;
|
||||
if (($brackets === 0)
|
||||
&& (($token->type !== Token::TYPE_OPERATOR)
|
||||
|| ($token->value !== '('))
|
||||
) {
|
||||
$parser->error(__('An opening bracket was expected.'), $token);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($token->type === Token::TYPE_OPERATOR) {
|
||||
if ($token->value === '(') {
|
||||
if (++$brackets === 1) { // 1 is the base level.
|
||||
continue;
|
||||
}
|
||||
} elseif ($token->value === ')') {
|
||||
if (--$brackets === 0) { // Array ended.
|
||||
break;
|
||||
}
|
||||
} elseif ($token->value === ',') {
|
||||
if ($brackets === 1) {
|
||||
$isCommaLast = true;
|
||||
if (empty($options['type'])) {
|
||||
$ret->raw[] = trim($lastRaw);
|
||||
$ret->values[] = trim($lastValue);
|
||||
$lastRaw = $lastValue = '';
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($options['type'])) {
|
||||
$lastRaw .= $token->token;
|
||||
$lastValue .= $token->value;
|
||||
} else {
|
||||
$ret[] = $options['type']::parse(
|
||||
$parser,
|
||||
$list,
|
||||
empty($options['typeOptions']) ? array() : $options['typeOptions']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Handling last element.
|
||||
//
|
||||
// This is treated differently to treat the following cases:
|
||||
//
|
||||
// => array()
|
||||
// (,) => array('', '')
|
||||
// () => array()
|
||||
// (a,) => array('a', '')
|
||||
// (a) => array('a')
|
||||
//
|
||||
$lastRaw = trim($lastRaw);
|
||||
if ((empty($options['type']))
|
||||
&& ((strlen($lastRaw) > 0) || ($isCommaLast))
|
||||
) {
|
||||
$ret->raw[] = $lastRaw;
|
||||
$ret->values[] = trim($lastValue);
|
||||
}
|
||||
|
||||
return $ret;
|
||||
|
||||
@ -30,18 +30,20 @@ class Condition extends Component
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $DELIMITERS = array('&&', 'AND', 'OR', 'XOR', '||');
|
||||
public static $DELIMITERS = array('&&', '||', 'AND', 'OR', 'XOR');
|
||||
|
||||
/**
|
||||
* Hash map containing reserved keywords that are also operators.
|
||||
* List of allowed reserved keywords in conditions.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $OPERATORS = array(
|
||||
public static $ALLOWED_KEYWORDS = array(
|
||||
'AND' => 1,
|
||||
'BETWEEN' => 1,
|
||||
'EXISTS' => 1,
|
||||
'IF' => 1,
|
||||
'IN' => 1,
|
||||
'INTERVAL' => 1,
|
||||
'IS' => 1,
|
||||
'LIKE' => 1,
|
||||
'MATCH' => 1,
|
||||
@ -106,6 +108,7 @@ class Condition extends Component
|
||||
|
||||
/**
|
||||
* Whether there was a `BETWEEN` keyword before or not.
|
||||
*
|
||||
* It is required to keep track of them because their structure contains
|
||||
* the keyword `AND`, which is also an operator that delimits
|
||||
* expressions.
|
||||
@ -115,6 +118,7 @@ class Condition extends Component
|
||||
$betweenBefore = false;
|
||||
|
||||
for (; $list->idx < $list->count; ++$list->idx) {
|
||||
|
||||
/**
|
||||
* Token parsed at this moment.
|
||||
*
|
||||
@ -142,11 +146,12 @@ class Condition extends Component
|
||||
// Conditions are delimited by logical operators.
|
||||
if (in_array($token->value, static::$DELIMITERS, true)) {
|
||||
if (($betweenBefore) && ($token->value === 'AND')) {
|
||||
// The syntax of keyword `BETWEEN` is hard-coded.
|
||||
$betweenBefore = false;
|
||||
} else {
|
||||
// The expression ended.
|
||||
$expr->expr = trim($expr->expr);
|
||||
if (!empty($expr->expr)) {
|
||||
// Adding the condition that is delimited by this operator.
|
||||
$ret[] = $expr;
|
||||
}
|
||||
|
||||
@ -155,11 +160,21 @@ class Condition extends Component
|
||||
$expr->isOperator = true;
|
||||
$ret[] = $expr;
|
||||
|
||||
// Preparing to parse another condition.
|
||||
$expr = new Condition();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
|
||||
if ($token->value === 'BETWEEN') {
|
||||
$betweenBefore = true;
|
||||
}
|
||||
if (($brackets === 0) && (empty(static::$ALLOWED_KEYWORDS[$token->value]))) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($token->type === Token::TYPE_OPERATOR) {
|
||||
if ($token->value === '(') {
|
||||
++$brackets;
|
||||
@ -168,23 +183,16 @@ class Condition extends Component
|
||||
}
|
||||
}
|
||||
|
||||
// No keyword is expected.
|
||||
if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
|
||||
if ($token->value === 'BETWEEN') {
|
||||
$betweenBefore = true;
|
||||
}
|
||||
if (($brackets === 0) && (empty(static::$OPERATORS[$token->value]))) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$expr->expr .= $token->token;
|
||||
if (($token->type === Token::TYPE_NONE)
|
||||
|| (($token->type === Token::TYPE_KEYWORD) && (!($token->flags & Token::FLAG_KEYWORD_RESERVED)))
|
||||
|| (($token->type === Token::TYPE_KEYWORD)
|
||||
&& (!($token->flags & Token::FLAG_KEYWORD_RESERVED)))
|
||||
|| ($token->type === Token::TYPE_STRING)
|
||||
|| ($token->type === Token::TYPE_SYMBOL)
|
||||
) {
|
||||
$expr->identifiers[] = $token->value;
|
||||
if (!in_array($token->value, $expr->identifiers)) {
|
||||
$expr->identifiers[] = $token->value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ class CreateDefinition extends Component
|
||||
|
||||
'NOT NULL' => 1,
|
||||
'NULL' => 1,
|
||||
'DEFAULT' => array(2, 'var'),
|
||||
'DEFAULT' => array(2, 'expr'),
|
||||
'AUTO_INCREMENT' => 3,
|
||||
'PRIMARY' => 4,
|
||||
'PRIMARY KEY' => 4,
|
||||
@ -55,7 +55,7 @@ class CreateDefinition extends Component
|
||||
|
||||
// Generated columns options.
|
||||
'GENERATED ALWAYS' => 8,
|
||||
'AS' => array(9, 'expr', array('bracketsDelimited' => true)),
|
||||
'AS' => array(9, 'expr', array('parenthesesDelimited' => true)),
|
||||
'VIRTUAL' => 10,
|
||||
'PERSISTENT' => 11,
|
||||
'STORED' => 11,
|
||||
|
||||
@ -28,6 +28,15 @@ use SqlParser\TokensList;
|
||||
class Expression extends Component
|
||||
{
|
||||
|
||||
/**
|
||||
* List of allowed reserved keywords in expressions.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private static $ALLOWED_KEYWORDS = array(
|
||||
'AS' => 1, 'DUAL' => 1, 'NULL' => 1, 'REGEXP' => 1
|
||||
);
|
||||
|
||||
/**
|
||||
* The name of this database.
|
||||
*
|
||||
@ -110,6 +119,31 @@ class Expression extends Component
|
||||
}
|
||||
|
||||
/**
|
||||
* Possible options:
|
||||
*
|
||||
* `field`
|
||||
*
|
||||
* First field to be filled.
|
||||
* If this is not specified, it takes the value of `parseField`.
|
||||
*
|
||||
* `parseField`
|
||||
*
|
||||
* Specifies the type of the field parsed. It may be `database`,
|
||||
* `table` or `column`. These expressions may not include
|
||||
* parentheses.
|
||||
*
|
||||
* `breakOnAlias`
|
||||
*
|
||||
* If not empty, breaks when the alias occurs (it is not included).
|
||||
*
|
||||
* `breakOnParentheses`
|
||||
*
|
||||
* If not empty, breaks when the first parentheses occurs.
|
||||
*
|
||||
* `parenthesesDelimited`
|
||||
*
|
||||
* If not empty, breaks after last parentheses occurred.
|
||||
*
|
||||
* @param Parser $parser The parser that serves as context.
|
||||
* @param TokensList $list The list of tokens that are being parsed.
|
||||
* @param array $options Parameters for parsing.
|
||||
@ -137,9 +171,9 @@ class Expression extends Component
|
||||
/**
|
||||
* Whether an alias is expected. Is 2 if `AS` keyword was found.
|
||||
*
|
||||
* @var int $alias
|
||||
* @var bool $alias
|
||||
*/
|
||||
$alias = 0;
|
||||
$alias = false;
|
||||
|
||||
/**
|
||||
* Counts brackets.
|
||||
@ -149,17 +183,20 @@ class Expression extends Component
|
||||
$brackets = 0;
|
||||
|
||||
/**
|
||||
* Keeps track of the previous token.
|
||||
* Possible values:
|
||||
* string, if function was previously found;
|
||||
* true, if opening bracket was previously found;
|
||||
* null, in any other case.
|
||||
* Keeps track of the last two previous tokens.
|
||||
*
|
||||
* @var string|bool $prev
|
||||
* @var Token[] $prev
|
||||
*/
|
||||
$prev = null;
|
||||
$prev = array(null, null);
|
||||
|
||||
// When a field is parsed, no parentheses are expected.
|
||||
if (!empty($options['parseField'])) {
|
||||
$options['breakOnParentheses'] = true;
|
||||
$options['field'] = $options['parseField'];
|
||||
}
|
||||
|
||||
for (; $list->idx < $list->count; ++$list->idx) {
|
||||
|
||||
/**
|
||||
* Token parsed at this moment.
|
||||
*
|
||||
@ -173,59 +210,92 @@ class Expression extends Component
|
||||
}
|
||||
|
||||
// Skipping whitespaces and comments.
|
||||
if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) {
|
||||
if (($isExpr) && (!$alias)) {
|
||||
if (($token->type === Token::TYPE_WHITESPACE)
|
||||
|| ($token->type === Token::TYPE_COMMENT)
|
||||
) {
|
||||
if ($isExpr) {
|
||||
$ret->expr .= $token->token;
|
||||
}
|
||||
if (($alias === 0) && (empty($options['noAlias'])) && (!$isExpr) && (!$dot) && (!empty($ret->expr))) {
|
||||
$alias = 1;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (($token->type === Token::TYPE_KEYWORD)
|
||||
&& ($token->flags & Token::FLAG_KEYWORD_RESERVED)
|
||||
&& ($token->value !== 'DUAL')
|
||||
&& ($token->value !== 'NULL')
|
||||
) {
|
||||
// Keywords may be found only between brackets.
|
||||
if ($brackets === 0) {
|
||||
if ((empty($options['noAlias'])) && ($token->value === 'AS')) {
|
||||
$alias = 2;
|
||||
continue;
|
||||
}
|
||||
if (!($token->flags & Token::FLAG_KEYWORD_FUNCTION)) {
|
||||
if ($token->type === Token::TYPE_KEYWORD) {
|
||||
if (($brackets > 0) && (empty($ret->subquery))
|
||||
&& (!empty(Parser::$STATEMENT_PARSERS[$token->value]))
|
||||
) {
|
||||
// A `(` was previously found and this keyword is the
|
||||
// beginning of a statement, so this is a subquery.
|
||||
$ret->subquery = $token->value;
|
||||
} elseif (($token->flags & Token::FLAG_KEYWORD_FUNCTION)
|
||||
&& (empty($options['parseField']))
|
||||
) {
|
||||
$isExpr = true;
|
||||
} elseif (($token->flags & Token::FLAG_KEYWORD_RESERVED)
|
||||
&& ($brackets === 0)
|
||||
) {
|
||||
if (empty(self::$ALLOWED_KEYWORDS[$token->value])) {
|
||||
// A reserved keyword that is not allowed in the
|
||||
// expression was found so the expression must have
|
||||
// ended and a new clause is starting.
|
||||
break;
|
||||
}
|
||||
} elseif ($prev === true) {
|
||||
if ((empty($ret->subquery) && (!empty(Parser::$STATEMENT_PARSERS[$token->value])))) {
|
||||
// A `(` was previously found and this keyword is the
|
||||
// beginning of a statement, so this is a subquery.
|
||||
$ret->subquery = $token->value;
|
||||
if ($token->value === 'AS') {
|
||||
if (!empty($options['breakOnAlias'])) {
|
||||
break;
|
||||
}
|
||||
if (!empty($ret->alias)) {
|
||||
$parser->error(
|
||||
__('An alias was previously found.'),
|
||||
$token
|
||||
);
|
||||
break;
|
||||
}
|
||||
$alias = true;
|
||||
continue;
|
||||
}
|
||||
$isExpr = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (($token->type === Token::TYPE_NUMBER)
|
||||
|| ($token->type === Token::TYPE_BOOL)
|
||||
|| (($token->type === Token::TYPE_SYMBOL)
|
||||
&& ($token->flags & Token::FLAG_SYMBOL_VARIABLE))
|
||||
|| (($token->type === Token::TYPE_OPERATOR)
|
||||
&& ($token->value !== '.'))
|
||||
) {
|
||||
if (!empty($options['parseField'])) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Numbers, booleans and operators (except dot) are usually part
|
||||
// of expressions.
|
||||
$isExpr = true;
|
||||
}
|
||||
|
||||
if ($token->type === Token::TYPE_OPERATOR) {
|
||||
if ((!empty($options['noBrackets']))
|
||||
if ((!empty($options['breakOnParentheses']))
|
||||
&& (($token->value === '(') || ($token->value === ')'))
|
||||
) {
|
||||
// No brackets were expected.
|
||||
break;
|
||||
}
|
||||
if ($token->value === '(') {
|
||||
++$brackets;
|
||||
if ((empty($ret->function)) && ($prev !== null) && ($prev !== true)) {
|
||||
// A function name was previously found and now an open
|
||||
// bracket, so this is a function call.
|
||||
$ret->function = $prev;
|
||||
if ((empty($ret->function)) && ($prev[1] !== null)
|
||||
&& (($prev[1]->type === Token::TYPE_NONE)
|
||||
|| ($prev[1]->type === Token::TYPE_SYMBOL)
|
||||
|| (($prev[1]->type === Token::TYPE_KEYWORD)
|
||||
&& ($prev[1]->flags & Token::FLAG_KEYWORD_FUNCTION)))
|
||||
) {
|
||||
$ret->function = $prev[1]->value;
|
||||
}
|
||||
$isExpr = true;
|
||||
} elseif ($token->value === ')') {
|
||||
--$brackets;
|
||||
if ($brackets === 0) {
|
||||
if (!empty($options['bracketsDelimited'])) {
|
||||
// The current token is the last brackets, the next
|
||||
// one will be outside.
|
||||
if (!empty($options['parenthesesDelimited'])) {
|
||||
// The current token is the last bracket, the next
|
||||
// one will be outside the expression.
|
||||
$ret->expr .= $token->token;
|
||||
++$list->idx;
|
||||
break;
|
||||
@ -236,109 +306,88 @@ class Expression extends Component
|
||||
break;
|
||||
}
|
||||
} elseif ($token->value === ',') {
|
||||
// Expressions are comma-delimited.
|
||||
if ($brackets === 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (($token->type === Token::TYPE_NUMBER) || ($token->type === Token::TYPE_BOOL)
|
||||
|| (($token->type === Token::TYPE_SYMBOL) && ($token->flags & Token::FLAG_SYMBOL_VARIABLE))
|
||||
|| (($token->type === Token::TYPE_OPERATOR)) && ($token->value !== '.')
|
||||
) {
|
||||
// Numbers, booleans and operators are usually part of expressions.
|
||||
$isExpr = true;
|
||||
}
|
||||
// Saving the previous tokens.
|
||||
$prev[0] = $prev[1];
|
||||
$prev[1] = $token;
|
||||
|
||||
if ($alias) {
|
||||
// An alias is expected (the keyword `AS` was previously found).
|
||||
if (!empty($ret->alias)) {
|
||||
$parser->error(__('An alias was previously found.'), $token);
|
||||
break;
|
||||
}
|
||||
$ret->alias = $token->value;
|
||||
$alias = 0;
|
||||
} else {
|
||||
if (!$isExpr) {
|
||||
if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '.')) {
|
||||
// Found a `.` which means we expect a column name and
|
||||
// the column name we parsed is actually the table name
|
||||
// and the table name is actually a database name.
|
||||
if ((!empty($ret->database)) || ($dot)) {
|
||||
$parser->error(__('Unexpected dot.'), $token);
|
||||
}
|
||||
$ret->database = $ret->table;
|
||||
$ret->table = $ret->column;
|
||||
$ret->column = null;
|
||||
$dot = true;
|
||||
} else {
|
||||
// We found the name of a column (or table if column
|
||||
// field should be skipped; used to parse table names).
|
||||
$field = (!empty($options['skipColumn'])) ? 'table' : 'column';
|
||||
if (!empty($ret->$field)) {
|
||||
// No alias is expected.
|
||||
if (!empty($options['noAlias'])) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Parsing aliases without `AS` keyword and any
|
||||
// whitespace.
|
||||
// Example: SELECT 1`foo`
|
||||
if (($token->type === Token::TYPE_STRING)
|
||||
|| (($token->type === Token::TYPE_SYMBOL)
|
||||
&& ($token->flags & Token::FLAG_SYMBOL_BACKTICK))
|
||||
) {
|
||||
if (!empty($ret->alias)) {
|
||||
$parser->error(
|
||||
__('An alias was previously found.'),
|
||||
$token
|
||||
);
|
||||
}
|
||||
$ret->alias = $token->value;
|
||||
}
|
||||
} else {
|
||||
$ret->$field = $token->value;
|
||||
}
|
||||
$dot = false;
|
||||
$alias = false;
|
||||
} elseif ($isExpr) {
|
||||
// Handling aliases.
|
||||
if (/* (empty($ret->alias)) && */ ($brackets === 0)
|
||||
&& (($prev[0] === null)
|
||||
|| ((($prev[0]->type !== Token::TYPE_OPERATOR)
|
||||
|| ($prev[0]->token === ')'))
|
||||
&& (($prev[0]->type !== Token::TYPE_KEYWORD)
|
||||
|| (!($prev[0]->flags & Token::FLAG_KEYWORD_RESERVED)))))
|
||||
&& (($prev[1]->type === Token::TYPE_STRING)
|
||||
|| (($prev[1]->type === Token::TYPE_SYMBOL)
|
||||
&& (!($prev[1]->flags & Token::FLAG_SYMBOL_VARIABLE)))
|
||||
|| ($prev[1]->type === Token::TYPE_NONE))
|
||||
) {
|
||||
if (!empty($ret->alias)) {
|
||||
$parser->error(__('An alias was previously found.'), $token);
|
||||
break;
|
||||
}
|
||||
$ret->alias = $prev[1]->value;
|
||||
} else {
|
||||
// Parsing aliases without `AS` keyword.
|
||||
// Example: SELECT 'foo' `bar`
|
||||
if (($brackets === 0) && (empty($options['noAlias']))) {
|
||||
if (($token->type === Token::TYPE_NONE) || ($token->type === Token::TYPE_STRING)
|
||||
|| (($token->type === Token::TYPE_SYMBOL) && ($token->flags & Token::FLAG_SYMBOL_BACKTICK))
|
||||
) {
|
||||
if (!empty($ret->alias)) {
|
||||
$parser->error(
|
||||
__('An alias was previously found.'),
|
||||
$token
|
||||
);
|
||||
}
|
||||
$ret->alias = $token->value;
|
||||
continue;
|
||||
$ret->expr .= $token->token;
|
||||
}
|
||||
} elseif (!$isExpr) {
|
||||
if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '.')) {
|
||||
// Found a `.` which means we expect a column name and
|
||||
// the column name we parsed is actually the table name
|
||||
// and the table name is actually a database name.
|
||||
if ((!empty($ret->database)) || ($dot)) {
|
||||
$parser->error(__('Unexpected dot.'), $token);
|
||||
}
|
||||
$ret->database = $ret->table;
|
||||
$ret->table = $ret->column;
|
||||
$ret->column = null;
|
||||
$dot = true;
|
||||
$ret->expr .= $token->token;
|
||||
} else {
|
||||
$field = empty($options['field']) ? 'column' : $options['field'];
|
||||
if (empty($ret->$field)) {
|
||||
$ret->$field = $token->value;
|
||||
$ret->expr .= $token->token;
|
||||
$dot = false;
|
||||
} else {
|
||||
// No alias is expected.
|
||||
if (!empty($options['breakOnAlias'])) {
|
||||
break;
|
||||
}
|
||||
if (!empty($ret->alias)) {
|
||||
$parser->error(__('An alias was previously found.'), $token);
|
||||
break;
|
||||
}
|
||||
$ret->alias = $token->value;
|
||||
}
|
||||
}
|
||||
|
||||
$ret->expr .= $token->token;
|
||||
}
|
||||
|
||||
if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_FUNCTION)) {
|
||||
$prev = strtoupper($token->value);
|
||||
} elseif (($token->type === Token::TYPE_OPERATOR) || ($token->value === '(')) {
|
||||
$prev = true;
|
||||
} else {
|
||||
$prev = null;
|
||||
}
|
||||
}
|
||||
|
||||
if ($alias === 2) {
|
||||
if ($alias) {
|
||||
$parser->error(
|
||||
__('An alias was expected.'),
|
||||
$list->tokens[$list->idx - 1]
|
||||
);
|
||||
}
|
||||
|
||||
// Whitespaces might be added at the end.
|
||||
// White-spaces might be added at the end.
|
||||
$ret->expr = trim($ret->expr);
|
||||
|
||||
if (empty($ret->expr)) {
|
||||
|
||||
@ -107,9 +107,8 @@ class IntoKeyword extends Component
|
||||
$parser,
|
||||
$list,
|
||||
array(
|
||||
'noAlias' => true,
|
||||
'noBrackets' => true,
|
||||
'skipColumn' => true,
|
||||
'parseField' => 'table',
|
||||
'breakOnAlias' => true,
|
||||
)
|
||||
);
|
||||
$state = 1;
|
||||
|
||||
@ -128,7 +128,7 @@ class JoinKeyword extends Component
|
||||
break;
|
||||
}
|
||||
} elseif ($state === 1) {
|
||||
$expr->expr = Expression::parse($parser, $list, array('skipColumn' => true));
|
||||
$expr->expr = Expression::parse($parser, $list, array('field' => 'table'));
|
||||
$state = 2;
|
||||
} elseif ($state === 2) {
|
||||
if (($token->type === Token::TYPE_KEYWORD) && ($token->value === 'ON')) {
|
||||
|
||||
@ -169,8 +169,8 @@ class PartitionDefinition extends Component
|
||||
$parser,
|
||||
$list,
|
||||
array(
|
||||
'bracketsDelimited' => true,
|
||||
'noAlias' => true,
|
||||
'parenthesesDelimited' => true,
|
||||
'breakOnAlias' => true,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@ -121,9 +121,8 @@ class Reference extends Component
|
||||
$parser,
|
||||
$list,
|
||||
array(
|
||||
'noAlias' => true,
|
||||
'skipColumn' => true,
|
||||
'noBrackets' => true,
|
||||
'parseField' => 'table',
|
||||
'breakOnAlias' => true,
|
||||
)
|
||||
);
|
||||
$state = 1;
|
||||
|
||||
@ -93,9 +93,8 @@ class RenameOperation extends Component
|
||||
$parser,
|
||||
$list,
|
||||
array(
|
||||
'noAlias' => true,
|
||||
'noBrackets' => true,
|
||||
'skipColumn' => true,
|
||||
'breakOnAlias' => true,
|
||||
'parseField' => 'table',
|
||||
)
|
||||
);
|
||||
if (empty($expr->old)) {
|
||||
@ -120,9 +119,8 @@ class RenameOperation extends Component
|
||||
$parser,
|
||||
$list,
|
||||
array(
|
||||
'noBrackets' => true,
|
||||
'skipColumn' => true,
|
||||
'noAlias' => true,
|
||||
'breakOnAlias' => true,
|
||||
'parseField' => 'table',
|
||||
)
|
||||
);
|
||||
if (empty($expr->new)) {
|
||||
|
||||
@ -92,7 +92,7 @@ class SetOperation extends Component
|
||||
if ($state === 0) {
|
||||
if ($token->token === '=') {
|
||||
$state = 1;
|
||||
} else if ($token->value !== ',') {
|
||||
} elseif ($token->value !== ',') {
|
||||
$expr->column .= $token->token;
|
||||
}
|
||||
} elseif ($state === 1) {
|
||||
@ -100,7 +100,7 @@ class SetOperation extends Component
|
||||
$parser,
|
||||
$list,
|
||||
array(
|
||||
'noAlias' => true,
|
||||
'breakOnAlias' => true,
|
||||
)
|
||||
);
|
||||
if ($tmp == null) {
|
||||
|
||||
@ -107,7 +107,7 @@ abstract class Context
|
||||
':=' => 8,
|
||||
|
||||
// @see Token::FLAG_OPERATOR_SQL
|
||||
'(' => 16, ')' => 16, '.' => 16, ',' => 16,
|
||||
'(' => 16, ')' => 16, '.' => 16, ',' => 16, ';' => 16,
|
||||
);
|
||||
|
||||
/**
|
||||
@ -190,6 +190,13 @@ abstract class Context
|
||||
// https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sqlmode_strict_trans_tables
|
||||
const STRICT_TRANS_TABLES = 1048576;
|
||||
|
||||
// Custom modes.
|
||||
|
||||
// The table and column names and any other field that must be escaped will
|
||||
// not be.
|
||||
// Reserved keywords are being escaped regardless this mode is used or not.
|
||||
const NO_ENCLOSING_QUOTES = 1073741824;
|
||||
|
||||
/*
|
||||
* Combination SQL Modes
|
||||
* https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sql-mode-combo
|
||||
@ -397,9 +404,12 @@ abstract class Context
|
||||
*/
|
||||
public static function isSeparator($str)
|
||||
{
|
||||
// NOTES: Only ASCII characters may be separators.
|
||||
// NOTES: Only non alphanumeric ASCII characters may be separators.
|
||||
// `~` is the last printable ASCII character.
|
||||
return ($str <= '~') && (!ctype_alnum($str)) && ($str !== '_');
|
||||
return ($str <= '~') && ($str !== '_')
|
||||
&& (($str < '0') || ($str > '9'))
|
||||
&& (($str < 'a') || ($str > 'z'))
|
||||
&& (($str < 'A') || ($str > 'Z'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -517,9 +527,16 @@ abstract class Context
|
||||
return $str;
|
||||
}
|
||||
|
||||
if ((static::$MODE & Context::NO_ENCLOSING_QUOTES)
|
||||
&& (!static::isKeyword($str, true))
|
||||
) {
|
||||
return $str;
|
||||
}
|
||||
|
||||
if (static::$MODE & Context::ANSI_QUOTES) {
|
||||
$quote = '"';
|
||||
}
|
||||
|
||||
return $quote . str_replace($quote, $quote . $quote, $str) . $quote;
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,8 +37,8 @@ class ContextMySql50000 extends Context
|
||||
public static $KEYWORDS = array(
|
||||
|
||||
'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1,
|
||||
'ANY' => 1, 'BDB' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1,
|
||||
'NDB' => 1, 'NEW' => 1, 'ONE' => 1, 'ROW' => 1,
|
||||
'ANY' => 1, 'BDB' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1,
|
||||
'NEW' => 1, 'ONE' => 1, 'ROW' => 1,
|
||||
'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'FAST' => 1,
|
||||
'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, 'LAST' => 1, 'LOGS' => 1,
|
||||
'MODE' => 1, 'NAME' => 1, 'NEXT' => 1, 'NONE' => 1, 'OPEN' => 1, 'PAGE' => 1,
|
||||
@ -162,7 +162,7 @@ class ContextMySql50000 extends Context
|
||||
'DEFAULT CHARACTER SET' => 7,
|
||||
'WITH CONSISTENT SNAPSHOT' => 7,
|
||||
|
||||
'XML' => 9,
|
||||
'BIT' => 9, 'XML' => 9,
|
||||
'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9,
|
||||
'ARRAY' => 9,
|
||||
'SERIAL' => 9,
|
||||
|
||||
@ -37,8 +37,8 @@ class ContextMySql50100 extends Context
|
||||
public static $KEYWORDS = array(
|
||||
|
||||
'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1,
|
||||
'ANY' => 1, 'BDB' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1,
|
||||
'NDB' => 1, 'NEW' => 1, 'ONE' => 1, 'ROW' => 1,
|
||||
'ANY' => 1, 'BDB' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1,
|
||||
'NEW' => 1, 'ONE' => 1, 'ROW' => 1,
|
||||
'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1,
|
||||
'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'GOTO' => 1, 'HASH' => 1,
|
||||
'HELP' => 1, 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1,
|
||||
@ -175,7 +175,7 @@ class ContextMySql50100 extends Context
|
||||
'DEFAULT CHARACTER SET' => 7,
|
||||
'WITH CONSISTENT SNAPSHOT' => 7,
|
||||
|
||||
'XML' => 9,
|
||||
'BIT' => 9, 'XML' => 9,
|
||||
'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9,
|
||||
'ARRAY' => 9,
|
||||
'SERIAL' => 9,
|
||||
|
||||
@ -37,8 +37,8 @@ class ContextMySql50500 extends Context
|
||||
public static $KEYWORDS = array(
|
||||
|
||||
'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1,
|
||||
'ANY' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1,
|
||||
'NEW' => 1, 'ONE' => 1, 'ROW' => 1,
|
||||
'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1,
|
||||
'ONE' => 1, 'ROW' => 1,
|
||||
'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1,
|
||||
'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1,
|
||||
'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1,
|
||||
@ -180,7 +180,7 @@ class ContextMySql50500 extends Context
|
||||
'DEFAULT CHARACTER SET' => 7,
|
||||
'WITH CONSISTENT SNAPSHOT' => 7,
|
||||
|
||||
'XML' => 9,
|
||||
'BIT' => 9, 'XML' => 9,
|
||||
'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9,
|
||||
'ARRAY' => 9,
|
||||
'SERIAL' => 9,
|
||||
|
||||
@ -37,8 +37,8 @@ class ContextMySql50600 extends Context
|
||||
public static $KEYWORDS = array(
|
||||
|
||||
'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1,
|
||||
'ANY' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1,
|
||||
'NEW' => 1, 'ONE' => 1, 'ROW' => 1,
|
||||
'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1,
|
||||
'ONE' => 1, 'ROW' => 1,
|
||||
'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1,
|
||||
'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1,
|
||||
'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1,
|
||||
@ -186,7 +186,7 @@ class ContextMySql50600 extends Context
|
||||
'DEFAULT CHARACTER SET' => 7,
|
||||
'WITH CONSISTENT SNAPSHOT' => 7,
|
||||
|
||||
'XML' => 9,
|
||||
'BIT' => 9, 'XML' => 9,
|
||||
'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9,
|
||||
'ARRAY' => 9,
|
||||
'SERIAL' => 9,
|
||||
|
||||
@ -37,8 +37,8 @@ class ContextMySql50700 extends Context
|
||||
public static $KEYWORDS = array(
|
||||
|
||||
'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1,
|
||||
'ANY' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1,
|
||||
'NEW' => 1, 'ONE' => 1, 'ROW' => 1, 'XID' => 1,
|
||||
'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1,
|
||||
'ONE' => 1, 'ROW' => 1, 'XID' => 1,
|
||||
'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1,
|
||||
'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1,
|
||||
'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1,
|
||||
@ -193,7 +193,7 @@ class ContextMySql50700 extends Context
|
||||
'DEFAULT CHARACTER SET' => 7,
|
||||
'WITH CONSISTENT SNAPSHOT' => 7,
|
||||
|
||||
'XML' => 9,
|
||||
'BIT' => 9, 'XML' => 9,
|
||||
'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9,
|
||||
'ARRAY' => 9,
|
||||
'SERIAL' => 9,
|
||||
|
||||
@ -36,6 +36,7 @@ class Parser
|
||||
|
||||
// MySQL Utility Statements
|
||||
'DESCRIBE' => 'SqlParser\\Statements\\ExplainStatement',
|
||||
'DESC' => 'SqlParser\\Statements\\ExplainStatement',
|
||||
'EXPLAIN' => 'SqlParser\\Statements\\ExplainStatement',
|
||||
'FLUSH' => '',
|
||||
'GRANT' => '',
|
||||
@ -124,17 +125,17 @@ class Parser
|
||||
'ALTER' => array(
|
||||
'class' => 'SqlParser\\Components\\Expression',
|
||||
'field' => 'table',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'ANALYZE' => array(
|
||||
'class' => 'SqlParser\\Components\\ExpressionArray',
|
||||
'field' => 'tables',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'BACKUP' => array(
|
||||
'class' => 'SqlParser\\Components\\ExpressionArray',
|
||||
'field' => 'tables',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'CALL' => array(
|
||||
'class' => 'SqlParser\\Components\\FunctionCall',
|
||||
@ -143,22 +144,22 @@ class Parser
|
||||
'CHECK' => array(
|
||||
'class' => 'SqlParser\\Components\\ExpressionArray',
|
||||
'field' => 'tables',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'CHECKSUM' => array(
|
||||
'class' => 'SqlParser\\Components\\ExpressionArray',
|
||||
'field' => 'tables',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'DROP' => array(
|
||||
'class' => 'SqlParser\\Components\\ExpressionArray',
|
||||
'field' => 'fields',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'FROM' => array(
|
||||
'class' => 'SqlParser\\Components\\ExpressionArray',
|
||||
'field' => 'from',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'GROUP BY' => array(
|
||||
'class' => 'SqlParser\\Components\\OrderKeyword',
|
||||
@ -211,7 +212,7 @@ class Parser
|
||||
'OPTIMIZE' => array(
|
||||
'class' => 'SqlParser\\Components\\ExpressionArray',
|
||||
'field' => 'tables',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'ORDER BY' => array(
|
||||
'class' => 'SqlParser\\Components\\OrderKeyword',
|
||||
@ -232,12 +233,12 @@ class Parser
|
||||
'REPAIR' => array(
|
||||
'class' => 'SqlParser\\Components\\ExpressionArray',
|
||||
'field' => 'tables',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'RESTORE' => array(
|
||||
'class' => 'SqlParser\\Components\\ExpressionArray',
|
||||
'field' => 'tables',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'SET' => array(
|
||||
'class' => 'SqlParser\\Components\\SetOperation',
|
||||
@ -250,12 +251,12 @@ class Parser
|
||||
'TRUNCATE' => array(
|
||||
'class' => 'SqlParser\\Components\\Expression',
|
||||
'field' => 'table',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'UPDATE' => array(
|
||||
'class' => 'SqlParser\\Components\\ExpressionArray',
|
||||
'field' => 'tables',
|
||||
'options' => array('skipColumn' => true),
|
||||
'options' => array('parseField' => 'table'),
|
||||
),
|
||||
'VALUE' => array(
|
||||
'class' => 'SqlParser\\Components\\Array2d',
|
||||
|
||||
@ -76,8 +76,8 @@ class AlterStatement extends Statement
|
||||
$parser,
|
||||
$list,
|
||||
array(
|
||||
'noAlias' => true,
|
||||
'noBrackets' => true,
|
||||
'parseField' => 'column',
|
||||
'breakOnAlias' => true,
|
||||
)
|
||||
);
|
||||
++$list->idx; // Skipping field.
|
||||
|
||||
@ -342,9 +342,8 @@ class CreateStatement extends Statement
|
||||
$parser,
|
||||
$list,
|
||||
array(
|
||||
'noAlias' => true,
|
||||
'noBrackets' => true,
|
||||
'skipColumn' => true,
|
||||
'parseField' => 'table',
|
||||
'breakOnAlias' => true,
|
||||
)
|
||||
);
|
||||
|
||||
@ -538,9 +537,8 @@ class CreateStatement extends Statement
|
||||
$parser,
|
||||
$list,
|
||||
array(
|
||||
'noAlias' => true,
|
||||
'noBrackets' => true,
|
||||
'skipColumn' => true,
|
||||
'parseField' => 'table',
|
||||
'breakOnAlias' => true,
|
||||
)
|
||||
);
|
||||
++$list->idx;
|
||||
|
||||
@ -29,12 +29,18 @@ class BufferedQuery
|
||||
{
|
||||
|
||||
// Constants that describe the current status of the parser.
|
||||
const STATUS_STRING_SINGLE_QUOTES = 1;
|
||||
const STATUS_STRING_DOUBLE_QUOTES = 2;
|
||||
const STATUS_STRING_BACKTICK = 3;
|
||||
const STATUS_COMMENT_BASH = 4;
|
||||
const STATUS_COMMENT_C = 5;
|
||||
const STATUS_COMMENT_SQL = 6;
|
||||
|
||||
// A string is being parsed.
|
||||
const STATUS_STRING = 16; // 0001 0000
|
||||
const STATUS_STRING_SINGLE_QUOTES = 17; // 0001 0001
|
||||
const STATUS_STRING_DOUBLE_QUOTES = 18; // 0001 0010
|
||||
const STATUS_STRING_BACKTICK = 20; // 0001 0100
|
||||
|
||||
// A comment is being parsed.
|
||||
const STATUS_COMMENT = 32; // 0010 0000
|
||||
const STATUS_COMMENT_BASH = 33; // 0010 0001
|
||||
const STATUS_COMMENT_C = 34; // 0010 0010
|
||||
const STATUS_COMMENT_SQL = 36; // 0010 0100
|
||||
|
||||
/**
|
||||
* The query that is being processed.
|
||||
@ -193,7 +199,7 @@ class BufferedQuery
|
||||
* treated differently, because of the preceding backslash, it will
|
||||
* be ignored.
|
||||
*/
|
||||
if ($this->query[$i] === '\\') {
|
||||
if (($this->status & static::STATUS_COMMENT == 0) && ($this->query[$i] === '\\')) {
|
||||
$this->current .= $this->query[$i] . $this->query[++$i];
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -305,8 +305,8 @@ class Formatter
|
||||
&& (!$formattedOptions)
|
||||
&& (empty(self::$INLINE_CLAUSES[$lastClause]))
|
||||
&& (($curr->type !== Token::TYPE_KEYWORD)
|
||||
|| (($curr->type === Token::TYPE_KEYWORD)
|
||||
&& ($curr->flags & Token::FLAG_KEYWORD_FUNCTION)))
|
||||
|| (($curr->type === Token::TYPE_KEYWORD)
|
||||
&& ($curr->flags & Token::FLAG_KEYWORD_FUNCTION)))
|
||||
) {
|
||||
$formattedOptions = true;
|
||||
$lineEnded = true;
|
||||
|
||||
@ -22,7 +22,7 @@ header('Content-type: text/plain; charset=utf-8');
|
||||
$filename = LICENSE_FILE;
|
||||
|
||||
// Check if the file is available, some distributions remove these.
|
||||
if (is_readable($filename)) {
|
||||
if (@is_readable($filename)) {
|
||||
readfile($filename);
|
||||
} else {
|
||||
printf(
|
||||
|
||||
12
lint.php
12
lint.php
@ -35,4 +35,16 @@ PMA_Response::getInstance()->disable();
|
||||
|
||||
PMA_headerJSON();
|
||||
|
||||
if (! empty($_POST['options'])) {
|
||||
$options = $_POST['options'];
|
||||
|
||||
if (! empty($options['routine_editor'])) {
|
||||
$sql_query = 'CREATE PROCEDURE `a`() ' . $sql_query;
|
||||
} elseif (! empty($options['trigger_editor'])) {
|
||||
$sql_query = 'CREATE TRIGGER `a` AFTER INSERT ON `b` FOR EACH ROW ' . $sql_query;
|
||||
} elseif (! empty($options['event_editor'])) {
|
||||
$sql_query = 'CREATE EVENT `a` ON SCHEDULE EVERY MINUTE DO ' . $sql_query;
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode(PMA_Linter::lint($sql_query));
|
||||
|
||||
2
po/af.po
2
po/af.po
@ -11360,7 +11360,7 @@ msgstr "Beskikbaar"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Modifications have been saved"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Veranderinge is gestoor"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/ar.po
2
po/ar.po
@ -11605,7 +11605,7 @@ msgstr "مفعل"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Modifications have been saved"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "تمت التعديلات"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/az.po
2
po/az.po
@ -10945,7 +10945,7 @@ msgstr ""
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Configuration saved."
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Konfiqurasiya yaddaşa verildi."
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/be.po
2
po/be.po
@ -11917,7 +11917,7 @@ msgstr "Уключана"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Modifications have been saved"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Мадыфікацыі былі захаваныя"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
@ -11986,7 +11986,7 @@ msgstr "Uklučana"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Modifications have been saved"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Madyfikacyi byli zachavanyja"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/bg.po
2
po/bg.po
@ -11570,7 +11570,7 @@ msgstr "Позволено"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Configuration saved."
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Конфигурацията запазена."
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/bn.po
2
po/bn.po
@ -11598,7 +11598,7 @@ msgstr "কার্যকর"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Configuration saved."
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "কনফিগারেশন সংরক্ষন করা হয়েছে।"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/br.po
2
po/br.po
@ -11574,7 +11574,7 @@ msgstr ""
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Configuration file"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Restr gefluniañ"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/bs.po
2
po/bs.po
@ -11560,7 +11560,7 @@ msgstr "Omogućeno"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Modifications have been saved"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Izmjene su sačuvane"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/ca.po
2
po/ca.po
@ -11194,7 +11194,7 @@ msgid "Enabled"
|
||||
msgstr "Activat"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Configuració de pmadb... "
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
@ -11012,7 +11012,7 @@ msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr ""
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
26
po/cs.po
26
po/cs.po
@ -6,10 +6,10 @@ msgstr ""
|
||||
"Project-Id-Version: phpMyAdmin 4.5.4-dev\n"
|
||||
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
|
||||
"POT-Creation-Date: 2016-01-14 09:16+0100\n"
|
||||
"PO-Revision-Date: 2015-11-12 10:29+0000\n"
|
||||
"PO-Revision-Date: 2016-01-31 11:31+0000\n"
|
||||
"Last-Translator: Michal Čihař <michal@cihar.com>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/phpmyadmin/4-5/cs/"
|
||||
">\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/phpmyadmin/4-5/cs/>"
|
||||
"\n"
|
||||
"Language: cs\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -4708,9 +4708,9 @@ msgid "Skip Explain SQL"
|
||||
msgstr "Bez vysvětlení SQL"
|
||||
|
||||
#: libraries/Util.class.php:1189
|
||||
#, fuzzy, php-format
|
||||
#, php-format
|
||||
msgid "Analyze Explain at %s"
|
||||
msgstr "Analyzovat výstup příkazu Explain na %s"
|
||||
msgstr "Analyzovat výstup příkazu EXPLAIN na %s"
|
||||
|
||||
#: libraries/Util.class.php:1220
|
||||
msgid "Without PHP Code"
|
||||
@ -7859,10 +7859,11 @@ msgid "Enable Zero Configuration mode"
|
||||
msgstr "Umožnit mód Automatické konfigurace"
|
||||
|
||||
#: libraries/config/page_settings.class.php:140
|
||||
#, fuzzy
|
||||
#| msgid "Cannot save settings, submitted form contains errors!"
|
||||
msgid "Cannot save settings, submitted configuration form contains errors!"
|
||||
msgstr "Nepodařilo se uložit nastavení, odeslaný formulář obsahuje chyby!"
|
||||
msgstr ""
|
||||
"Nepodařilo se uložit nastavení, odeslaný konfigurační formulář obsahuje "
|
||||
"chyby!"
|
||||
|
||||
#: libraries/config/setup.forms.php:40
|
||||
msgid "Config authentication"
|
||||
@ -8441,14 +8442,11 @@ msgstr ""
|
||||
"ale může to způsobit problémy s transakcemi.)</i>"
|
||||
|
||||
#: libraries/display_import.lib.php:309
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Skip this number of queries (for SQL) or lines (for other formats), "
|
||||
#| "starting from the first one:"
|
||||
msgid "Skip this number of queries (for SQL) starting from the first one:"
|
||||
msgstr ""
|
||||
"Přeskočit daný počet dotazů (pro SQL) nebo řádek (pro ostatní formáty), "
|
||||
"počínaje od:"
|
||||
msgstr "Přeskočit daný počet dotazů (pro SQL) počínaje od:"
|
||||
|
||||
#: libraries/display_import.lib.php:339
|
||||
msgid "Other options:"
|
||||
@ -11062,8 +11060,8 @@ msgid "Enabled"
|
||||
msgstr "Zapnuto"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgstr "Konfigurace pmadb... "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Konfigurace pmadb…"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
msgid "General relation features"
|
||||
@ -16240,7 +16238,7 @@ msgstr ""
|
||||
#: libraries/advisory_rules.txt:267
|
||||
#, php-format
|
||||
msgid "Current values are tmp_table_size: %s, max_heap_table_size: %s"
|
||||
msgstr "Současné hodnoty jous tmp_table_size: %s, max_heap_table_size: %s"
|
||||
msgstr "Současné hodnoty jsou tmp_table_size: %s, max_heap_table_size: %s"
|
||||
|
||||
#: libraries/advisory_rules.txt:269
|
||||
msgid "Percentage of temp tables on disk"
|
||||
|
||||
2
po/cy.po
2
po/cy.po
@ -11669,7 +11669,7 @@ msgstr ""
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Modifications have been saved"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Cafodd yr addasiadau eu cadw"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/da.po
2
po/da.po
@ -11262,7 +11262,7 @@ msgid "Enabled"
|
||||
msgstr "Slået til"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Konfiguration af pmadb … "
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
17
po/de.po
17
po/de.po
@ -4,10 +4,10 @@ msgstr ""
|
||||
"Project-Id-Version: phpMyAdmin-docs 4.0.0-dev\n"
|
||||
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
|
||||
"POT-Creation-Date: 2016-01-14 09:16+0100\n"
|
||||
"PO-Revision-Date: 2015-12-17 13:57+0000\n"
|
||||
"Last-Translator: Anna Henningsen <sqrt@entless.org>\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/phpmyadmin/4-5/de/"
|
||||
">\n"
|
||||
"PO-Revision-Date: 2016-01-18 18:42+0000\n"
|
||||
"Last-Translator: BlackyPanther <webmaster@am-wd.de>\n"
|
||||
"Language-Team: German "
|
||||
"<https://hosted.weblate.org/projects/phpmyadmin/4-5/de/>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -2629,6 +2629,13 @@ msgid ""
|
||||
"cause such a problem, clearing your \"Offline Website Data\" might help. In "
|
||||
"Safari, such problem is commonly caused by \"Private Mode Browsing\"."
|
||||
msgstr ""
|
||||
"Es gab ein Problem beim Zugriff auf den lokalen Browserspeicher, weshalb "
|
||||
"manche Eigenschaften möglicherweise nicht funktionieren. Dies tritt meistens "
|
||||
"auf, wenn der Browser lokale Datenbanken nicht unterstützt oder das Quota-"
|
||||
"Limit erreicht wurde. Im Firefox kann auch ein beschädigter Speicher solche "
|
||||
"Probleme verursachen. Eventuell hilft es die \"Offline Webseiten Daten\" zu "
|
||||
"löschen. In Safari entstehen solche Probleme meistens, wenn das \"Private "
|
||||
"Surfen\" aktiviert ist."
|
||||
|
||||
#: js/messages.php:635
|
||||
msgctxt "Previous month"
|
||||
@ -11296,7 +11303,7 @@ msgid "Enabled"
|
||||
msgstr "Aktiviert"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Konfiguration des pmadb... "
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
6
po/el.po
6
po/el.po
@ -4,7 +4,7 @@ msgstr ""
|
||||
"Project-Id-Version: phpMyAdmin 4.5.4-dev\n"
|
||||
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
|
||||
"POT-Creation-Date: 2016-01-14 09:16+0100\n"
|
||||
"PO-Revision-Date: 2016-01-14 16:02+0000\n"
|
||||
"PO-Revision-Date: 2016-02-02 10:26+0000\n"
|
||||
"Last-Translator: Παναγιώτης Παπάζογλου <papaz_p@yahoo.com>\n"
|
||||
"Language-Team: Greek <https://hosted.weblate.org/projects/phpmyadmin/4-5/el/>"
|
||||
"\n"
|
||||
@ -11262,8 +11262,8 @@ msgid "Enabled"
|
||||
msgstr "Ενεργοποιημένη"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgstr "Ρύθμιση της pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Ρύθμιση της pmadb…"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
msgid "General relation features"
|
||||
|
||||
@ -11596,7 +11596,7 @@ msgstr "Enabled"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Configuration saved."
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Configuration saved."
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/eo.po
2
po/eo.po
@ -10383,7 +10383,7 @@ msgid "Enabled"
|
||||
msgstr "Ŝaltita"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr ""
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/es.po
2
po/es.po
@ -11300,7 +11300,7 @@ msgid "Enabled"
|
||||
msgstr "Habilitado"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Configuración de pmadb… "
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/et.po
2
po/et.po
@ -11060,7 +11060,7 @@ msgid "Enabled"
|
||||
msgstr "Lubatud"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "pmadb seadistus... "
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/eu.po
2
po/eu.po
@ -11584,7 +11584,7 @@ msgstr "Gaituta"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Modifications have been saved"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Aldaketak gorde dira"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/fa.po
2
po/fa.po
@ -11480,7 +11480,7 @@ msgstr "فعال"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Modifications have been saved"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "اصلاحات ذخيره گرديد"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
16
po/fi.po
16
po/fi.po
@ -4,10 +4,10 @@ msgstr ""
|
||||
"Project-Id-Version: phpMyAdmin 4.5.4-dev\n"
|
||||
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
|
||||
"POT-Creation-Date: 2016-01-14 09:16+0100\n"
|
||||
"PO-Revision-Date: 2015-11-12 10:40+0000\n"
|
||||
"Last-Translator: Michal Čihař <michal@cihar.com>\n"
|
||||
"Language-Team: Finnish <https://hosted.weblate.org/projects/phpmyadmin/4-5/"
|
||||
"fi/>\n"
|
||||
"PO-Revision-Date: 2016-01-25 09:44+0000\n"
|
||||
"Last-Translator: Daniel Iltanen <daniel.iltanen@gmail.com>\n"
|
||||
"Language-Team: Finnish "
|
||||
"<https://hosted.weblate.org/projects/phpmyadmin/4-5/fi/>\n"
|
||||
"Language: fi\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -5279,7 +5279,7 @@ msgstr ""
|
||||
"Avaimen pitäisi sisältää kirjaimia, numeroita [em]ja[/em] erikoismerkkejä."
|
||||
|
||||
#: libraries/config/ServerConfigChecks.class.php:382
|
||||
#, fuzzy, php-format
|
||||
#, php-format
|
||||
#| msgid ""
|
||||
#| "a@?page=form&formset=features#tab_Security]option[/a] should be abled "
|
||||
#| "it allows attackers to bruteforce login to any MySQL server. you feel s "
|
||||
@ -5296,7 +5296,7 @@ msgstr ""
|
||||
"Tämä %svalinta%s pitäisi poistaa käytöstä, sillä se sallii hyökkääjien "
|
||||
"kirjautua mihin tahansa MySQL-palvelimeen käyttämällä bruteforce-hyökkäystä. "
|
||||
"Jos tätä valintaa on pakko käyttää, käytä %srestrict login to MySQL server%s "
|
||||
"or %sluotettujen välipalvelimien luetteloa%s. IP-osoitteeseen perustuva "
|
||||
"tai %sluotettujen välipalvelimien luetteloa%s. IP-osoitteeseen perustuva "
|
||||
"suojaus ei kuitenkaan ole täysin luotettava mikäli IP-osoite kuuluu Internet-"
|
||||
"palveluntarjoajalle, johon sinun lisäksesi tuhannet käyttäjät ovat "
|
||||
"yhteydessä."
|
||||
@ -7542,7 +7542,7 @@ msgstr "Näytä tietokannanluontilomake"
|
||||
|
||||
#: libraries/config/messages.inc.php:847
|
||||
msgid "Show or hide a column displaying the comments for all tables."
|
||||
msgstr ""
|
||||
msgstr "Näytä tai piilota kommentti -sarake kaikista tauluista."
|
||||
|
||||
#: libraries/config/messages.inc.php:849
|
||||
#, fuzzy
|
||||
@ -11362,7 +11362,7 @@ msgstr "Päällä"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Configuration saved."
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Asetukset tallennettu."
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
32
po/fr.po
32
po/fr.po
@ -4,8 +4,8 @@ msgstr ""
|
||||
"Project-Id-Version: phpMyAdmin-docs 4.0.0-dev\n"
|
||||
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
|
||||
"POT-Creation-Date: 2016-01-14 09:16+0100\n"
|
||||
"PO-Revision-Date: 2016-01-14 12:59+0000\n"
|
||||
"Last-Translator: Marc Delisle <marc@infomarc.info>\n"
|
||||
"PO-Revision-Date: 2016-01-22 22:49+0000\n"
|
||||
"Last-Translator: Adam Magnier <adam@magnier.io>\n"
|
||||
"Language-Team: French "
|
||||
"<https://hosted.weblate.org/projects/phpmyadmin/4-5/fr/>\n"
|
||||
"Language: fr\n"
|
||||
@ -5587,7 +5587,7 @@ msgstr "Secret Blowfish"
|
||||
|
||||
#: libraries/config/messages.inc.php:40
|
||||
msgid "Highlight selected rows."
|
||||
msgstr "Utilisé quand on clique sur une ligne."
|
||||
msgstr "Mettre en surbrillance les lignes sélectionnées."
|
||||
|
||||
#: libraries/config/messages.inc.php:41
|
||||
msgid "Row marker"
|
||||
@ -5619,7 +5619,7 @@ msgid ""
|
||||
"columns; [kbd]input[/kbd] - allows limiting of input length, [kbd]textarea[/"
|
||||
"kbd] - allows newlines in columns."
|
||||
msgstr ""
|
||||
"Déterminer la méthode d'édition pour les colonnes CHAR et VARCHAR; "
|
||||
"Détermine la méthode d'édition pour les colonnes CHAR et VARCHAR; "
|
||||
"[kbd]input[/kbd] - permet de limiter la taille, [kbd]textarea[/kbd] - permet "
|
||||
"la saisie de sauts de lignes."
|
||||
|
||||
@ -11263,8 +11263,8 @@ msgid "Enabled"
|
||||
msgstr "Activé"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgstr "Configuration de pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Configuration de pmadb…"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
msgid "General relation features"
|
||||
@ -16840,7 +16840,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"Max_used_connections is at %s%% of max_connections, it should be below 80%%"
|
||||
msgstr ""
|
||||
"Max_used_connections est à %s%% de max_connections, devrait être sous les "
|
||||
"Max_used_connections est à %s%% de max_connections, il devrait être sous les "
|
||||
"80%%"
|
||||
|
||||
#: libraries/advisory_rules.txt:399
|
||||
@ -16940,8 +16940,8 @@ msgid ""
|
||||
"The InnoDB log file size is not an appropriate size, in relation to the "
|
||||
"InnoDB buffer pool."
|
||||
msgstr ""
|
||||
"La taille du journal InnoDB n'est pas appropriée, en tenant compte du pool "
|
||||
"de mémoire tampon InnoDB."
|
||||
"La taille du journal InnoDB n'est pas appropriée, par rapport au pool de "
|
||||
"mémoire tampon InnoDB."
|
||||
|
||||
#: libraries/advisory_rules.txt:440
|
||||
#, php-format
|
||||
@ -16956,16 +16956,16 @@ msgid ""
|
||||
"fine. See also <a href=\"http://mysqldatabaseadministration.blogspot."
|
||||
"com/2007/01/increase-innodblogfilesize-proper-way.html\">this blog entry</a>"
|
||||
msgstr ""
|
||||
"Surtout si votre système effectue de nombreuses écritures dans des tables "
|
||||
"InnoDB, vous devriez régler innodb_log_file à 25%% de "
|
||||
"En particulier si votre système effectue de nombreuses écritures dans des "
|
||||
"tables InnoDB, vous devriez régler innodb_log_file à 25%% de "
|
||||
"{innodb_buffer_pool_size}. Cependant, plus cette valeur est élevée, plus "
|
||||
"long sera le temps de recouvrement en cas de panne de la base de données, "
|
||||
"alors cette valeur ne devrait pas dépasser 256 Mio. Veuillez noter que vous "
|
||||
"ne pouvez pas simplement changer la valeur de cette variable. Il vous faut "
|
||||
"fermer le serveur, enlever les journaux InnoDB, placer la nouvelle valeur "
|
||||
"dans my.cnf, démarrer le serveur, puis vérifier les journaux d'erreurs. Voir "
|
||||
"aussi <a href=\"http://mysqldatabaseadministration.blogspot.com/2007/01/"
|
||||
"increase-innodblogfilesize-proper-way.html\">cet article de blogue.</a>"
|
||||
"aussi <a href=\"http://mysqldatabaseadministration.blogspot.com/2007/01"
|
||||
"/increase-innodblogfilesize-proper-way.html\">cet article de blogue.</a>"
|
||||
|
||||
#: libraries/advisory_rules.txt:441
|
||||
#, php-format
|
||||
@ -16973,8 +16973,8 @@ msgid ""
|
||||
"Your InnoDB log size is at %s%% in relation to the InnoDB buffer pool size, "
|
||||
"it should not be below 20%%"
|
||||
msgstr ""
|
||||
"La taille de votre journal InnoDB est de %s%% en comparant au pool de "
|
||||
"mémoire tampon InnoDB, elle ne devrait pas être sous les 20%%"
|
||||
"La taille de votre journal InnoDB est de %s%% par rapport au pool de mémoire "
|
||||
"tampon InnoDB, elle ne devrait pas être sous les 20%%"
|
||||
|
||||
#: libraries/advisory_rules.txt:443
|
||||
msgid "Max InnoDB log size"
|
||||
@ -17018,7 +17018,7 @@ msgstr "Taille de la mémoire-tampon InnoDB"
|
||||
|
||||
#: libraries/advisory_rules.txt:453
|
||||
msgid "Your InnoDB buffer pool is fairly small."
|
||||
msgstr "Votre mémoire-tampon InnoDB est petite."
|
||||
msgstr "Votre mémoire-tampon InnoDB est trop petite."
|
||||
|
||||
#: libraries/advisory_rules.txt:454
|
||||
#, php-format
|
||||
|
||||
2
po/fy.po
2
po/fy.po
@ -10544,7 +10544,7 @@ msgid "Enabled"
|
||||
msgstr "Ynskeakele"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr ""
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
119
po/gl.po
119
po/gl.po
@ -4,10 +4,10 @@ msgstr ""
|
||||
"Project-Id-Version: phpMyAdmin 4.5.4-dev\n"
|
||||
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
|
||||
"POT-Creation-Date: 2016-01-14 09:16+0100\n"
|
||||
"PO-Revision-Date: 2016-01-11 22:37+0000\n"
|
||||
"PO-Revision-Date: 2016-01-17 22:02+0000\n"
|
||||
"Last-Translator: Xosé Calvo <xosecalvo@gmail.com>\n"
|
||||
"Language-Team: Galician <https://hosted.weblate.org/projects/phpmyadmin/4-5/"
|
||||
"gl/>\n"
|
||||
"Language-Team: Galician "
|
||||
"<https://hosted.weblate.org/projects/phpmyadmin/4-5/gl/>\n"
|
||||
"Language: gl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -2595,6 +2595,12 @@ msgid ""
|
||||
"cause such a problem, clearing your \"Offline Website Data\" might help. In "
|
||||
"Safari, such problem is commonly caused by \"Private Mode Browsing\"."
|
||||
msgstr ""
|
||||
"Produciuse un problema ao acceder ao almacenamento do seu navegador; "
|
||||
"algunhas funcionalidades poderían non funcionar axeitadamente. É probábel "
|
||||
"que o navegador non admita o almacenamento ou que se atinxise o límite de "
|
||||
"cota. No Firefox o almacenamento estragado pode provocar problemas deste "
|
||||
"tipo; limpar os «Datos de sitios web sen conexión» podería axudar. No Safari "
|
||||
"este é un problema que causa frecuentemente a «Navegación en modo privado»."
|
||||
|
||||
#: js/messages.php:635
|
||||
msgctxt "Previous month"
|
||||
@ -6438,7 +6444,7 @@ msgstr ""
|
||||
|
||||
#: libraries/config/messages.inc.php:375 libraries/config/messages.inc.php:389
|
||||
msgid "Update data when duplicate keys found on import"
|
||||
msgstr ""
|
||||
msgstr "Actualizar os datos ao atopar chaves duplicadas ao importar"
|
||||
|
||||
#: libraries/config/messages.inc.php:379
|
||||
msgid ""
|
||||
@ -6812,7 +6818,7 @@ msgstr "Mostrar os procedementos nunha árbore"
|
||||
|
||||
#: libraries/config/messages.inc.php:535
|
||||
msgid "Whether to show procedures under database in the navigation tree"
|
||||
msgstr ""
|
||||
msgstr "Mostrar os procedementos baixo a base de datos na árbore de navegación"
|
||||
|
||||
#: libraries/config/messages.inc.php:536
|
||||
msgid "Show events in tree"
|
||||
@ -6850,11 +6856,11 @@ msgstr "Onde mostrar as ligazóns das fileiras das táboas"
|
||||
|
||||
#: libraries/config/messages.inc.php:548
|
||||
msgid "Whether to show row links even in the absence of a unique key."
|
||||
msgstr ""
|
||||
msgstr "Mostrar as ligazóns das filas mesmo na ausencia de chaves únicas."
|
||||
|
||||
#: libraries/config/messages.inc.php:550
|
||||
msgid "Show row links anyway"
|
||||
msgstr ""
|
||||
msgstr "Mostrar as ligazóns das filas de calquera maneira"
|
||||
|
||||
#: libraries/config/messages.inc.php:552
|
||||
msgid "Use natural order for sorting table and database names."
|
||||
@ -7002,7 +7008,7 @@ msgstr "Recordar a ordenación da táboa"
|
||||
|
||||
#: libraries/config/messages.inc.php:607
|
||||
msgid "Default sort order for tables with a primary key."
|
||||
msgstr ""
|
||||
msgstr "Orde predeterminada de ordenación das táboas con chave primaria."
|
||||
|
||||
#: libraries/config/messages.inc.php:609
|
||||
#, fuzzy
|
||||
@ -7472,7 +7478,6 @@ msgid "Display columns table"
|
||||
msgstr "Mostrar a táboa de columnas"
|
||||
|
||||
#: libraries/config/messages.inc.php:773
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Leave blank for no \"persistent\" tables' UI preferences across sessions, "
|
||||
#| "suggested: [kbd]pma__table_uiprefs[/kbd]"
|
||||
@ -7481,7 +7486,7 @@ msgid ""
|
||||
"suggested: [kbd]pma__table_uiprefs[/kbd]."
|
||||
msgstr ""
|
||||
"Déixeo en branco se non desexa preferencias «persistentes» da interface das "
|
||||
"táboas entre sesións; suxírese: [kbd]pma__table_uiprefs[/kbd]"
|
||||
"táboas entre sesións; suxírese: [kbd]pma__table_uiprefs[/kbd]."
|
||||
|
||||
#: libraries/config/messages.inc.php:776
|
||||
msgid "UI preferences table"
|
||||
@ -7601,7 +7606,7 @@ msgstr ""
|
||||
|
||||
#: libraries/config/messages.inc.php:827
|
||||
msgid "Hidden navigation items table"
|
||||
msgstr ""
|
||||
msgstr "Táboa de elementos de navegación agochados"
|
||||
|
||||
#: libraries/config/messages.inc.php:829
|
||||
msgid "User for config auth"
|
||||
@ -7945,7 +7950,7 @@ msgstr ""
|
||||
|
||||
#: libraries/config/messages.inc.php:965
|
||||
msgid "Proxy url"
|
||||
msgstr ""
|
||||
msgstr "URL do proxy"
|
||||
|
||||
#: libraries/config/messages.inc.php:967
|
||||
msgid ""
|
||||
@ -8002,7 +8007,7 @@ msgstr "Chave privada do reCaptcha"
|
||||
|
||||
#: libraries/config/messages.inc.php:991
|
||||
msgid "Choose the default action when sending error reports."
|
||||
msgstr ""
|
||||
msgstr "Escolla a acción predeterminada para enviar informes de fallo."
|
||||
|
||||
#: libraries/config/messages.inc.php:993
|
||||
msgid "Send error reports"
|
||||
@ -8013,12 +8018,13 @@ msgid ""
|
||||
"Queries are executed by pressing Enter (instead of Ctrl+Enter). New lines "
|
||||
"will be inserted with Shift+Enter."
|
||||
msgstr ""
|
||||
"As consultas execútanse ao premer Intro (no canto de Ctrl+Intro). As liñas "
|
||||
"novas insírense con Maiús+Intro."
|
||||
|
||||
#: libraries/config/messages.inc.php:999
|
||||
#, fuzzy
|
||||
#| msgid "Executed queries"
|
||||
msgid "Enter executes queries in console"
|
||||
msgstr "Consultas executadas"
|
||||
msgstr "Intro executa consultas na consola"
|
||||
|
||||
#: libraries/config/messages.inc.php:1002
|
||||
msgid ""
|
||||
@ -8105,14 +8111,14 @@ msgstr "Deixouse a vista %s"
|
||||
|
||||
#: libraries/controllers/DatabaseStructureController.class.php:429
|
||||
#: tbl_operations.php:398
|
||||
#, fuzzy, php-format
|
||||
#, php-format
|
||||
#| msgid "Table %s has been dropped."
|
||||
msgid "Table %s has been dropped."
|
||||
msgstr "Eliminouse a táboa %s"
|
||||
msgstr "Eliminouse a táboa %s."
|
||||
|
||||
#: libraries/controllers/DatabaseStructureController.class.php:738
|
||||
msgid "Favorite List is full!"
|
||||
msgstr ""
|
||||
msgstr "A lista de favoritos está chea!"
|
||||
|
||||
#: libraries/controllers/DatabaseStructureController.class.php:953
|
||||
#: libraries/mysql_charsets.lib.php:369 libraries/mysql_charsets.lib.php:376
|
||||
@ -8165,18 +8171,17 @@ msgstr "Busca gráfica"
|
||||
|
||||
#: libraries/controllers/TableSearchController.class.php:850
|
||||
#: templates/table/search/selection_form.phtml:59
|
||||
#, fuzzy
|
||||
#| msgid "Find and Replace"
|
||||
msgid "Find and replace"
|
||||
msgstr "Buscar e substituír"
|
||||
msgstr "Atopar e substituír"
|
||||
|
||||
#: libraries/controllers/TableStructureController.class.php:163
|
||||
#, fuzzy, php-format
|
||||
#, php-format
|
||||
#| msgid "The column name '%s' is a MySQL reserved keyword."
|
||||
msgid "The name '%s' is a MySQL reserved keyword."
|
||||
msgid_plural "The names '%s' are MySQL reserved keywords."
|
||||
msgstr[0] "O nome de columna «%s» é unha palabra chave reservada do MySQL."
|
||||
msgstr[1] "O nome de columna «%s» é unha palabra chave reservada do MySQL."
|
||||
msgstr[0] "O nome «%s» é unha palabra chave reservada do MySQL."
|
||||
msgstr[1] "Os nomes «%s» son palabras chaves reservadas do MySQL."
|
||||
|
||||
#: libraries/controllers/TableStructureController.class.php:241
|
||||
msgid "No column selected."
|
||||
@ -8187,11 +8192,11 @@ msgid "The columns have been moved successfully."
|
||||
msgstr "Movéronse as columnas satisfactoriamente."
|
||||
|
||||
#: libraries/controllers/TableStructureController.class.php:741
|
||||
#, fuzzy, php-format
|
||||
#, php-format
|
||||
#| msgid "Table %1$s has been altered successfully."
|
||||
msgid ""
|
||||
"Table %1$s has been altered successfully. Privileges have been adjusted."
|
||||
msgstr "Alterouse a táboa %1$s sen problemas."
|
||||
msgstr "Alterouse a táboa %1$s sen problemas. Axustáronse os privilexios."
|
||||
|
||||
#: libraries/controllers/TableStructureController.class.php:796
|
||||
#: libraries/tracking.lib.php:1094
|
||||
@ -8349,28 +8354,24 @@ msgid "Export templates:"
|
||||
msgstr "Tipo de exportación"
|
||||
|
||||
#: libraries/display_export.lib.php:205
|
||||
#, fuzzy
|
||||
#| msgid "File name template:"
|
||||
msgid "New template:"
|
||||
msgstr "Modelo do nome de ficheiro:"
|
||||
msgstr "Modelo novo:"
|
||||
|
||||
#: libraries/display_export.lib.php:208
|
||||
#, fuzzy
|
||||
#| msgid "Table name"
|
||||
msgid "Template name"
|
||||
msgstr "Nome da táboa"
|
||||
msgstr "Nome do modelo"
|
||||
|
||||
#: libraries/display_export.lib.php:217
|
||||
#, fuzzy
|
||||
#| msgid "File name template:"
|
||||
msgid "Existing templates:"
|
||||
msgstr "Modelo do nome de ficheiro:"
|
||||
msgstr "Modelos existentes:"
|
||||
|
||||
#: libraries/display_export.lib.php:218
|
||||
#, fuzzy
|
||||
#| msgid "Temp disk rate"
|
||||
msgid "Template:"
|
||||
msgstr "Taxa de temporais no disco"
|
||||
msgstr "Modelo:"
|
||||
|
||||
#: libraries/display_export.lib.php:223
|
||||
#, fuzzy
|
||||
@ -8379,16 +8380,14 @@ msgid "Update"
|
||||
msgstr "Actualizada"
|
||||
|
||||
#: libraries/display_export.lib.php:245
|
||||
#, fuzzy
|
||||
#| msgid "Select Tables"
|
||||
msgid "Select a template"
|
||||
msgstr "Escoller táboas"
|
||||
msgstr "Seleccionar un modelo"
|
||||
|
||||
#: libraries/display_export.lib.php:291
|
||||
#, fuzzy
|
||||
#| msgid "Export method"
|
||||
msgid "Export method:"
|
||||
msgstr "Método de exportación"
|
||||
msgstr "Método de exportación:"
|
||||
|
||||
#: libraries/display_export.lib.php:301
|
||||
msgid "Quick - display only the minimal options"
|
||||
@ -8399,17 +8398,15 @@ msgid "Custom - display all possible options"
|
||||
msgstr "Personalizada - mostrar todas as opcións posíbeis"
|
||||
|
||||
#: libraries/display_export.lib.php:335
|
||||
#, fuzzy
|
||||
#| msgid "Databases"
|
||||
msgid "Databases:"
|
||||
msgstr "Bases de datos"
|
||||
msgstr "Bases de datos:"
|
||||
|
||||
#: libraries/display_export.lib.php:337
|
||||
#: libraries/navigation/Navigation.class.php:196
|
||||
#, fuzzy
|
||||
#| msgid "Tables"
|
||||
msgid "Tables:"
|
||||
msgstr "Táboas"
|
||||
msgstr "Táboas:"
|
||||
|
||||
#: libraries/display_export.lib.php:357 libraries/display_import.lib.php:358
|
||||
#: libraries/plugins/export/ExportCodegen.class.php:107
|
||||
@ -8511,20 +8508,18 @@ msgid "View output as text"
|
||||
msgstr "Ver a saída como texto"
|
||||
|
||||
#: libraries/display_export.lib.php:751
|
||||
#, fuzzy
|
||||
#| msgid "Export views"
|
||||
msgid "Export databases as separate files"
|
||||
msgstr "Exportar as vistas"
|
||||
msgstr "Exportar as bases de datos como ficheiros separados"
|
||||
|
||||
#: libraries/display_export.lib.php:753
|
||||
#, fuzzy
|
||||
#| msgid "Export table headers"
|
||||
msgid "Export tables as separate files"
|
||||
msgstr "Exportar os cabezallos das táboas"
|
||||
msgstr "Exportar as táboas como ficheiros separados"
|
||||
|
||||
#: libraries/display_export.lib.php:783 libraries/display_export.lib.php:909
|
||||
msgid "Rename exported databases/tables/columns"
|
||||
msgstr ""
|
||||
msgstr "Mudar o nome das bases de datos/táboas/columnas seleccionadas"
|
||||
|
||||
#: libraries/display_export.lib.php:808
|
||||
msgid "Save output to a file"
|
||||
@ -8532,19 +8527,17 @@ msgstr "Gardar a saída nun ficheiro"
|
||||
|
||||
#: libraries/display_export.lib.php:841
|
||||
msgid "Skip tables larger than"
|
||||
msgstr ""
|
||||
msgstr "Omitir as táboas maiores de"
|
||||
|
||||
#: libraries/display_export.lib.php:936
|
||||
#, fuzzy
|
||||
#| msgid "Select Tables"
|
||||
msgid "Select database"
|
||||
msgstr "Escoller táboas"
|
||||
msgstr "Seleccionar base de datos"
|
||||
|
||||
#: libraries/display_export.lib.php:938
|
||||
#, fuzzy
|
||||
#| msgid "Select Tables"
|
||||
msgid "Select table"
|
||||
msgstr "Escoller táboas"
|
||||
msgstr "Seleccionar táboa"
|
||||
|
||||
#: libraries/display_export.lib.php:954
|
||||
#, fuzzy
|
||||
@ -8553,16 +8546,14 @@ msgid "New database name"
|
||||
msgstr "nome da base de datos"
|
||||
|
||||
#: libraries/display_export.lib.php:978
|
||||
#, fuzzy
|
||||
#| msgid "New table"
|
||||
msgid "New table name"
|
||||
msgstr "Sen táboas"
|
||||
msgstr "Nome novo da táboa"
|
||||
|
||||
#: libraries/display_export.lib.php:988
|
||||
#, fuzzy
|
||||
#| msgid "Copy column name"
|
||||
msgid "Old column name"
|
||||
msgstr "Copiar nome da columna"
|
||||
msgstr "Nome anterior da táboa"
|
||||
|
||||
#: libraries/display_export.lib.php:989
|
||||
#, fuzzy
|
||||
@ -8629,21 +8620,19 @@ msgstr ""
|
||||
"b>. Exemplo: <b>.sql.zip</b>"
|
||||
|
||||
#: libraries/display_import.lib.php:224
|
||||
#, fuzzy
|
||||
#| msgid "File to Import:"
|
||||
msgid "File to import:"
|
||||
msgstr "Ficheiro que importar:"
|
||||
|
||||
#: libraries/display_import.lib.php:234 libraries/display_import.lib.php:251
|
||||
msgid "You may also drag and drop a file on any page."
|
||||
msgstr ""
|
||||
msgstr "Tamén pode arrastrar e soltar un ficheiro sobre calquera páxina."
|
||||
|
||||
#: libraries/display_import.lib.php:254
|
||||
msgid "File uploads are not allowed on this server."
|
||||
msgstr "Este servidor non admite a recepción de ficheiros."
|
||||
|
||||
#: libraries/display_import.lib.php:278
|
||||
#, fuzzy
|
||||
#| msgid "Partial Import:"
|
||||
msgid "Partial import:"
|
||||
msgstr "Importación parcial:"
|
||||
@ -8667,16 +8656,14 @@ msgstr ""
|
||||
"importar ficheiros longos, aínda que pode rachar transaccións.)</i>"
|
||||
|
||||
#: libraries/display_import.lib.php:309
|
||||
#, fuzzy
|
||||
#| msgid "Number of rows to skip, starting from the first row:"
|
||||
msgid "Skip this number of queries (for SQL) starting from the first one:"
|
||||
msgstr "Número de filas que saltar, comezando na primeira:"
|
||||
msgstr "Omitir este número de consultas (para SQL), comezando na primeira:"
|
||||
|
||||
#: libraries/display_import.lib.php:339
|
||||
#, fuzzy
|
||||
#| msgid "Options"
|
||||
msgid "Other options:"
|
||||
msgstr "Opcións"
|
||||
msgstr "Outras opcións:"
|
||||
|
||||
#: libraries/display_import.lib.php:477
|
||||
msgid ""
|
||||
@ -9113,10 +9100,9 @@ msgid ""
|
||||
msgstr "As estruturas seguintes foron creadas ou alteradas. Aquí pode:"
|
||||
|
||||
#: libraries/import.lib.php:1258
|
||||
#, fuzzy
|
||||
#| msgid "View a structure's contents by clicking on its name"
|
||||
msgid "View a structure's contents by clicking on its name."
|
||||
msgstr "Ver o contido dunha estrutura premendo o seu nome"
|
||||
msgstr "Ver o contido dunha estrutura premendo no seu nome."
|
||||
|
||||
#: libraries/import.lib.php:1261
|
||||
#, fuzzy
|
||||
@ -11445,7 +11431,7 @@ msgstr "Activado"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Configuration saved."
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Configuración gardada."
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
@ -12392,7 +12378,7 @@ msgstr "Non hai acontecementos que mostrar."
|
||||
|
||||
#: libraries/select_lang.lib.php:614
|
||||
msgid "Ignoring unsupported language code."
|
||||
msgstr ""
|
||||
msgstr "Ignórase o código de idioma descoñecido."
|
||||
|
||||
#: libraries/select_server.lib.php:43 libraries/select_server.lib.php:48
|
||||
#, fuzzy
|
||||
@ -12457,7 +12443,6 @@ msgstr ""
|
||||
|
||||
#: libraries/server_databases.lib.php:366
|
||||
#: libraries/server_databases.lib.php:371
|
||||
#, fuzzy
|
||||
#| msgid "Enable Statistics"
|
||||
msgid "Enable statistics"
|
||||
msgstr "Activar as estatísticas"
|
||||
|
||||
2
po/he.po
2
po/he.po
@ -11539,7 +11539,7 @@ msgstr "מופעל"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Modifications have been saved"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "שינויים נשמרו"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/hi.po
2
po/hi.po
@ -11836,7 +11836,7 @@ msgstr "सक्षम"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Configuration storage"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "विन्यास भंडारण"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/hr.po
2
po/hr.po
@ -11944,7 +11944,7 @@ msgstr "Omogućeno"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Modifications have been saved"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Izmjene su spremljene"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/hu.po
2
po/hu.po
@ -11294,7 +11294,7 @@ msgid "Enabled"
|
||||
msgstr "Engedélyezett"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "A pmadb beállítása… "
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
5
po/hy.po
5
po/hy.po
@ -10668,7 +10668,7 @@ msgid "Enabled"
|
||||
msgstr "Առկա"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr ""
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
@ -14443,9 +14443,6 @@ msgid ""
|
||||
"as well as information about relevant configuration settings to send to the "
|
||||
"phpMyAdmin team to help us in debugging the problem."
|
||||
msgstr ""
|
||||
"Ձեր կայանքները պահպանվելու են միայն ընթացիկ ժամանակաշրջանի համար։ Դրանց "
|
||||
"մշտական պահպանման համար անհրաժեշտ է %sphpMyAdmin-ի կազմաձևի պահպանման "
|
||||
"ընդլայնումը%s։"
|
||||
|
||||
#: templates/error/report_form.phtml:15
|
||||
msgid "You may examine the data in the error report:"
|
||||
|
||||
2
po/ia.po
2
po/ia.po
@ -11178,7 +11178,7 @@ msgid "Enabled"
|
||||
msgstr "Habilitate"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Configuration de pmadb... "
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/id.po
2
po/id.po
@ -11845,7 +11845,7 @@ msgid "Enabled"
|
||||
msgstr "Aktif"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Konfigurasi pmadb … "
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
8
po/it.po
8
po/it.po
@ -4,7 +4,7 @@ msgstr ""
|
||||
"Project-Id-Version: phpMyAdmin 4.5.4-dev\n"
|
||||
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
|
||||
"POT-Creation-Date: 2016-01-14 09:16+0100\n"
|
||||
"PO-Revision-Date: 2016-01-14 14:28+0000\n"
|
||||
"PO-Revision-Date: 2016-02-04 11:09+0000\n"
|
||||
"Last-Translator: Stefano Martinelli <stefano.ste.martinelli@gmail.com>\n"
|
||||
"Language-Team: Italian "
|
||||
"<https://hosted.weblate.org/projects/phpmyadmin/4-5/it/>\n"
|
||||
@ -11286,8 +11286,8 @@ msgid "Enabled"
|
||||
msgstr "Abilitata"
|
||||
|
||||
#: libraries/relation.lib.php:100
|
||||
msgid "Configuration of pmadb… "
|
||||
msgstr "Configurazione di pmadb... "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "Configurazione di pmadb…"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
msgid "General relation features"
|
||||
@ -12779,7 +12779,7 @@ msgstr "Revoca tutti i privilegi attivi agli utenti e dopo li cancella."
|
||||
#: libraries/server_privileges.lib.php:3679
|
||||
#: libraries/server_privileges.lib.php:3682
|
||||
msgid "Drop the databases that have the same names as the users."
|
||||
msgstr "Elimina i databases gli stessi nomi degli utenti."
|
||||
msgstr "Elimina i database che hanno gli stessi nomi degli utenti."
|
||||
|
||||
#: libraries/server_privileges.lib.php:3825
|
||||
msgid "No users selected for deleting!"
|
||||
|
||||
16
po/ja.po
16
po/ja.po
@ -4,10 +4,10 @@ msgstr ""
|
||||
"Project-Id-Version: phpMyAdmin 4.5.4-dev\n"
|
||||
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
|
||||
"POT-Creation-Date: 2016-01-14 09:16+0100\n"
|
||||
"PO-Revision-Date: 2016-01-07 09:01+0000\n"
|
||||
"Last-Translator: 初音ミク(Siketyan) <siketyan0130@gmail.com>\n"
|
||||
"Language-Team: Japanese <https://hosted.weblate.org/projects/phpmyadmin/4-5/"
|
||||
"ja/>\n"
|
||||
"PO-Revision-Date: 2016-01-22 11:08+0000\n"
|
||||
"Last-Translator: Masahiro Nishi <grooversmail@gmail.com>\n"
|
||||
"Language-Team: Japanese "
|
||||
"<https://hosted.weblate.org/projects/phpmyadmin/4-5/ja/>\n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -949,10 +949,9 @@ msgstr ""
|
||||
"のデータも削除されます!"
|
||||
|
||||
#: js/messages.php:65
|
||||
#, fuzzy
|
||||
#| msgid "Do you really want to delete the search \"%s\"?"
|
||||
msgid "Do you really want to TRUNCATE the selected partition(s)?"
|
||||
msgstr "本当に検索「%s」の削除を実行しますか?"
|
||||
msgstr "選択したパーティションを本当に削除しますか?"
|
||||
|
||||
#: js/messages.php:66
|
||||
#, fuzzy
|
||||
@ -1071,10 +1070,9 @@ msgid "Preview SQL"
|
||||
msgstr "SQLのプレビュー"
|
||||
|
||||
#: js/messages.php:113
|
||||
#, fuzzy
|
||||
#| msgid "in query"
|
||||
msgid "Simulate query"
|
||||
msgstr "行/クエリ"
|
||||
msgstr "クエリを検証"
|
||||
|
||||
#: js/messages.php:114
|
||||
#, fuzzy
|
||||
@ -12150,7 +12148,7 @@ msgstr "有効"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Configuration saved."
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "設定を保存しました。"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
2
po/ka.po
2
po/ka.po
@ -12019,7 +12019,7 @@ msgstr "ჩართულია"
|
||||
#: libraries/relation.lib.php:100
|
||||
#, fuzzy
|
||||
#| msgid "Configuration file"
|
||||
msgid "Configuration of pmadb… "
|
||||
msgid "Configuration of pmadb…"
|
||||
msgstr "კონფიგურაციის ფაილი"
|
||||
|
||||
#: libraries/relation.lib.php:104 libraries/relation.lib.php:140
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user