1
0
Fork 0

Merging upstream version 1.24.2.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-09 18:59:41 +01:00
parent 5df7a54f6d
commit 4523ea515c
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
14 changed files with 141 additions and 112 deletions

View file

@ -1,7 +1,11 @@
TBD:
====
1.24.2 (2022/01/11)
===================
*
Bug Fixes:
----------
* Fix autocompletion for more than one JOIN
* Fix the status command when connected to TiDB or other servers that don't implement 'Threads\_connected'
* Pin pygments version to avoid a breaking change
1.24.1:
=======
@ -10,6 +14,10 @@ Bug Fixes:
---------
* Restore dependency on cryptography for the interactive password prompt
Internal:
---------
* Deprecate Python mock
1.24.0
======
@ -41,7 +49,7 @@ Internal:
Bug Fixes:
----------
* Ensure `--port` is always an int.
1.23.1
======
@ -834,31 +842,31 @@ Bug Fixes:
----------
* Fixed the installation issues with PyMySQL dependency on case-sensitive file systems.
[Daniel West]: http://github.com/danieljwest
[Irina Truong]: https://github.com/j-bennet
[Amjith Ramanujam]: https://blog.amjith.com
[Kacper Kwapisz]: https://github.com/KKKas
[Martijn Engler]: https://github.com/martijnengler
[Matheus Rosa]: https://github.com/mdsrosa
[Shoma Suzuki]: https://github.com/shoma
[spacewander]: https://github.com/spacewander
[Thomas Roten]: https://github.com/tsroten
[Artem Bezsmertnyi]: https://github.com/mrdeathless
[Mikhail Borisov]: https://github.com/borman
[Casper Langemeijer]: Casper Langemeijer
[Lennart Weller]: https://github.com/lhw
[Phil Cohen]: https://github.com/phlipper
[Terseus]: https://github.com/Terseus
[William GARCIA]: https://github.com/willgarcia
[Jonathan Slenders]: https://github.com/jonathanslenders
[Carlos Afonso]: https://github.com/afonsocarlos
[Casper Langemeijer]: https://github.com/langemeijer
[Scrappy Soft]: https://github.com/scrappysoft
[Daniel West]: http://github.com/danieljwest
[Dick Marinus]: https://github.com/meeuw
[François Pietka]: https://github.com/fpietka
[Frederic Aoustin]: https://github.com/fraoustin
[Georgy Frolov]: https://github.com/pasenor
[Zach DeCook]: https://zachdecook.com
[Irina Truong]: https://github.com/j-bennet
[Jonathan Slenders]: https://github.com/jonathanslenders
[Kacper Kwapisz]: https://github.com/KKKas
[laixintao]: https://github.com/laixintao
[Lennart Weller]: https://github.com/lhw
[Martijn Engler]: https://github.com/martijnengler
[Matheus Rosa]: https://github.com/mdsrosa
[Mikhail Borisov]: https://github.com/borman
[mtorromeo]: https://github.com/mtorromeo
[mwcm]: https://github.com/mwcm
[Phil Cohen]: https://github.com/phlipper
[Scrappy Soft]: https://github.com/scrappysoft
[Shoma Suzuki]: https://github.com/shoma
[spacewander]: https://github.com/spacewander
[Terseus]: https://github.com/Terseus
[Thomas Roten]: https://github.com/tsroten
[William GARCIA]: https://github.com/willgarcia
[xeron]: https://github.com/xeron
[Zach DeCook]: https://zachdecook.com

View file

@ -15,78 +15,80 @@ Core Developers:
Contributors:
-------------
* Steve Robbins
* Shoma Suzuki
* Daniel West
* Scrappy Soft
* Daniel Black
* Jonathan Bruno
* Casper Langemeijer
* Jonathan Slenders
* Artem Bezsmertnyi
* Mikhail Borisov
* Heath Naylor
* Phil Cohen
* spacewander
* Adam Chainz
* Johannes Hoff
* Kacper Kwapisz
* Lennart Weller
* Martijn Engler
* Terseus
* Tyler Kuipers
* William GARCIA
* Yasuhiro Matsumoto
* bjarnagin
* jbruno
* mrdeathless
* 0xflotus
* Abirami P
* John Sterling
* Jialong Liu
* Zhidong
* Daniël van Eeden
* zer09
* cxbig
* chainkite
* Michał Górny
* Terje Røsten
* Ryan Smith
* Klaus Wünschel
* François Pietka
* Colin Caine
* Frederic Aoustin
* caitinggui
* ushuz
* Zhaolong Zhu
* Zhongyang Guan
* Huachao Mao
* QiaoHou Peng
* Yang Zou
* Angelo Lupo
* Adam Chainz
* Aljosha Papsch
* Zane C. Bowers-Hadley
* Mike Palandra
* Andy Teijelo Pérez
* Angelo Lupo
* Artem Bezsmertnyi
* bitkeen
* bjarnagin
* caitinggui
* Carlos Afonso
* Casper Langemeijer
* chainkite
* Colin Caine
* cxbig
* Daniel Black
* Daniel West
* Daniël van Eeden
* François Pietka
* Frederic Aoustin
* Georgy Frolov
* Jonathan Lloyd
* Nathan Huang
* Heath Naylor
* Huachao Mao
* Jakub Boukal
* Takeshi D. Itoh
* laixintao
* Zach DeCook
* jbruno
* Jerome Provensal
* Jialong Liu
* Johannes Hoff
* John Sterling
* Jonathan Bruno
* Jonathan Lloyd
* Jonathan Slenders
* Kacper Kwapisz
* Karthikeyan Singaravelan
* kevinhwang91
* KITAGAWA Yasutaka
* Nicolas Palumbo
* Andy Teijelo Pérez
* bitkeen
* Morgan Mitchell
* Klaus Wünschel
* laixintao
* Lennart Weller
* Martijn Engler
* Massimiliano Torromeo
* Michał Górny
* Mike Palandra
* Mikhail Borisov
* Morgan Mitchell
* mrdeathless
* Nathan Huang
* Nicolas Palumbo
* Phil Cohen
* QiaoHou Peng
* Roland Walker
* xeron
* 0xflotus
* Ryan Smith
* Scrappy Soft
* Seamile
* Jerome Provensal
* Shoma Suzuki
* spacewander
* Steve Robbins
* Takeshi D. Itoh
* Terje Røsten
* Terseus
* Tyler Kuipers
* ushuz
* William GARCIA
* xeron
* Yang Zou
* Yasuhiro Matsumoto
* Zach DeCook
* Zane C. Bowers-Hadley
* zer09
* Zhaolong Zhu
* Zhidong
* Zhongyang Guan
Creator:
--------
Created by:
-----------
Amjith Ramanujam

View file

@ -1 +1 @@
__version__ = '1.24.1'
__version__ = '1.24.2'

View file

@ -36,7 +36,7 @@ class CompletionRefresher(object):
target=self._bg_refresh,
args=(executor, callbacks, completer_options),
name='completion_refresh')
self._completer_thread.setDaemon(True)
self._completer_thread.daemon = True
self._completer_thread.start()
return [(None, None, None,
'Auto-completion refresh started in the background.')]

View file

@ -60,8 +60,8 @@ wider_completion_menu = False
# \n - Newline
# \P - AM/PM
# \p - Port
# \R - The current time, in 24-hour military time (023)
# \r - The current time, standard 12-hour time (112)
# \R - The current time, in 24-hour military time (0-23)
# \r - The current time, standard 12-hour time (1-12)
# \s - Seconds of the current time
# \t - Product type (Percona, MySQL, MariaDB)
# \A - DSN alias name (from the [alias_dsn] section)

View file

@ -81,6 +81,13 @@ def extract_from_part(parsed, stop_at_punctuation=True):
yield x
elif stop_at_punctuation and item.ttype is Punctuation:
return
# Multiple JOINs in the same query won't work properly since
# "ON" is a keyword and will trigger the next elif condition.
# So instead of stooping the loop when finding an "ON" skip it
# eg: 'SELECT * FROM abc JOIN def ON abc.id = def.abc_id JOIN ghi'
elif item.ttype is Keyword and item.value.upper() == 'ON':
tbl_prefix_seen = False
continue
# An incomplete nested select won't be recognized correctly as a
# sub-select. eg: 'SELECT * FROM (SELECT id FROM user'. This causes
# the second FROM to trigger this elif condition resulting in a

View file

@ -135,23 +135,25 @@ def status(cur, **_):
else:
output.append(('UNIX socket:', variables['socket']))
output.append(('Uptime:', format_uptime(status['Uptime'])))
if 'Uptime' in status:
output.append(('Uptime:', format_uptime(status['Uptime'])))
# Print the current server statistics.
stats = []
stats.append('Connections: {0}'.format(status['Threads_connected']))
if 'Queries' in status:
stats.append('Queries: {0}'.format(status['Queries']))
stats.append('Slow queries: {0}'.format(status['Slow_queries']))
stats.append('Opens: {0}'.format(status['Opened_tables']))
stats.append('Flush tables: {0}'.format(status['Flush_commands']))
stats.append('Open tables: {0}'.format(status['Open_tables']))
if 'Queries' in status:
queries_per_second = int(status['Queries']) / int(status['Uptime'])
stats.append('Queries per second avg: {:.3f}'.format(
queries_per_second))
stats = ' '.join(stats)
footer.append('\n' + stats)
if 'Threads_connected' in status:
# Print the current server statistics.
stats = []
stats.append('Connections: {0}'.format(status['Threads_connected']))
if 'Queries' in status:
stats.append('Queries: {0}'.format(status['Queries']))
stats.append('Slow queries: {0}'.format(status['Slow_queries']))
stats.append('Opens: {0}'.format(status['Opened_tables']))
stats.append('Flush tables: {0}'.format(status['Flush_commands']))
stats.append('Open tables: {0}'.format(status['Open_tables']))
if 'Queries' in status:
queries_per_second = int(status['Queries']) / int(status['Uptime'])
stats.append('Queries per second avg: {:.3f}'.format(
queries_per_second))
stats = ' '.join(stats)
footer.append('\n' + stats)
footer.append('--------------')
return [('\n'.join(title), output, '', '\n'.join(footer))]

View file

@ -1,4 +1,3 @@
mock
pytest!=3.3.0
pytest-cov==2.4.0
tox

View file

@ -19,10 +19,10 @@ description = 'CLI for MySQL Database. With auto-completion and syntax highlight
install_requirements = [
'click >= 7.0',
'cryptography >= 1.0.0',
'Pygments >= 1.6',
'Pygments>=1.6,<=2.11.1',
'prompt_toolkit>=3.0.6,<4.0.0',
'PyMySQL >= 0.9.2',
'sqlparse>=0.3.0,<0.4.0',
'sqlparse>=0.3.0,<0.5.0',
'configobj >= 5.0.5',
'cli_helpers[styles] >= 2.0.1',
'pyperclip >= 1.8.1',

View file

@ -393,6 +393,17 @@ def test_join_using_suggests_common_columns(col_list):
'tables': [(None, 'abc', None), (None, 'def', None)],
'drop_unique': True}]
@pytest.mark.parametrize('sql', [
'SELECT * FROM abc a JOIN def d ON a.id = d.id JOIN ghi g ON g.',
'SELECT * FROM abc a JOIN def d ON a.id = d.id AND a.id2 = d.id2 JOIN ghi g ON d.id = g.id AND g.',
])
def test_two_join_alias_dot_suggests_cols1(sql):
suggestions = suggest_type(sql, sql)
assert sorted_dicts(suggestions) == sorted_dicts([
{'type': 'column', 'tables': [(None, 'ghi', 'g')]},
{'type': 'table', 'schema': 'g'},
{'type': 'view', 'schema': 'g'},
{'type': 'function', 'schema': 'g'}])
def test_2_statements_2nd_current():
suggestions = suggest_type('select * from a; select * from ',

View file

@ -1,6 +1,6 @@
import time
import pytest
from mock import Mock, patch
from unittest.mock import Mock, patch
@pytest.fixture

View file

@ -11,7 +11,7 @@ def completer():
@pytest.fixture
def complete_event():
from mock import Mock
from unittest.mock import Mock
return Mock()

View file

@ -1,5 +1,5 @@
import pytest
from mock import patch
from unittest.mock import patch
from prompt_toolkit.completion import Completion
from prompt_toolkit.document import Document
import mycli.packages.special.main as special
@ -35,7 +35,7 @@ def completer():
@pytest.fixture
def complete_event():
from mock import Mock
from unittest.mock import Mock
return Mock()

View file

@ -2,7 +2,7 @@ import os
import stat
import tempfile
from time import time
from mock import patch
from unittest.mock import patch
import pytest
from pymysql import ProgrammingError