diff --git a/changelog.md b/changelog.md index 25c1ac91..5d199eb7 100644 --- a/changelog.md +++ b/changelog.md @@ -32,6 +32,7 @@ Internal * Better tests for `null_string` configuration option. * Better cleanup of resources in the test suite. * Simplify prettify/unprettify handlers. +* Make prettify/unprettify logic more robust. 1.57.0 (2026/02/25) diff --git a/mycli/main.py b/mycli/main.py index b641c7b2..92cc5bee 100755 --- a/mycli/main.py +++ b/mycli/main.py @@ -845,31 +845,39 @@ def handle_clip_command(self, text: str) -> bool: return False def handle_prettify_binding(self, text: str) -> str: + if not text: + return '' try: - statements = sqlglot.parse(text, read="mysql") + statements = sqlglot.parse(text, read='mysql') except Exception: statements = [] if len(statements) == 1 and statements[0]: - pretty_text = statements[0].sql(pretty=True, pad=4, dialect="mysql") + parse_succeeded = True + pretty_text = statements[0].sql(pretty=True, pad=4, dialect='mysql') else: - pretty_text = "" - self.toolbar_error_message = "Prettify failed to parse statement" - if len(pretty_text) > 0: - pretty_text = pretty_text + ";" + parse_succeeded = False + pretty_text = text.rstrip(';') + self.toolbar_error_message = 'Prettify failed to parse single statement' + if pretty_text and parse_succeeded: + pretty_text = pretty_text + ';' return pretty_text def handle_unprettify_binding(self, text: str) -> str: + if not text: + return '' try: - statements = sqlglot.parse(text, read="mysql") + statements = sqlglot.parse(text, read='mysql') except Exception: statements = [] if len(statements) == 1 and statements[0]: - unpretty_text = statements[0].sql(pretty=False, dialect="mysql") + parse_succeeded = True + unpretty_text = statements[0].sql(pretty=False, dialect='mysql') else: - unpretty_text = "" - self.toolbar_error_message = "Unprettify failed to parse statement" - if len(unpretty_text) > 0: - unpretty_text = unpretty_text + ";" + parse_succeeded = False + unpretty_text = text.rstrip(';') + self.toolbar_error_message = 'Unprettify failed to parse single statement' + if unpretty_text and parse_succeeded: + unpretty_text = unpretty_text + ';' return unpretty_text def run_cli(self) -> None: