A Terminal Client for MySQL with AutoCompletion and Syntax Highlighting.
1199 matches across 11 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | mycli/config.py | 223 | def read_and_decrypt_mylogin_cnf(f: BinaryIO) -> BytesIO | None: |
| LOW | mycli/clitoolbar.py | 11 | def create_toolbar_tokens_func( |
| LOW | mycli/client_commands.py | 30 | def register_special_commands(self) -> None: |
| LOW | mycli/sqlcompleter.py | 1211 | def _register_schema_completions( |
| LOW | mycli/sqlcompleter.py | 1250 | def quote_collection_if_needed( |
| LOW | mycli/client_query.py | 59 | def _on_completions_refreshed(self, new_completer: SQLCompleter) -> None: |
| LOW | mycli/app_state.py | 46 | def destructive_keywords_from_config(config: ConfigObj) -> list[str]: |
| LOW | mycli/packages/cli_utils.py | 13 | def is_valid_connection_scheme(text: str) -> tuple[bool, str | None]: |
| LOW | mycli/packages/interactive_utils.py | 28 | def confirm_destructive_query(keywords: list[str], queries: str) -> bool | None: |
| LOW | mycli/packages/batch_utils.py | 9 | def statements_from_filehandle(file_h: IO) -> Generator[tuple[str, int], None, None]: |
| LOW | mycli/packages/key_binding_utils.py | 114 | def handle_unprettify_binding( |
| LOW | mycli/packages/completion_engine.py | 73 | def _keyword_and_special_suggestions() -> list[Suggestion]: |
| LOW | mycli/packages/completion_engine.py | 78 | def _parse_suggestion_statement(text_before_cursor: str) -> sqlparse.sql.Statement: |
| LOW | mycli/packages/completion_engine.py | 126 | def _is_single_or_double_quoted(ctx: SuggestContext) -> bool: |
| LOW | mycli/packages/completion_engine.py | 383 | def _word_starts_with_digit_or_dot(ctx: SuggestContext) -> bool: |
| LOW | mycli/packages/completion_engine.py | 391 | def _word_inside_single_or_double_quotes(ctx: SuggestContext) -> bool: |
| LOW | mycli/packages/completion_engine.py | 411 | def _token_is_relation_keyword(ctx: SuggestContext) -> bool: |
| LOW | mycli/packages/completion_engine.py | 419 | def _token_is_binary_or_comma(ctx: SuggestContext) -> bool: |
| LOW | mycli/packages/completion_engine.py | 815 | def suggest_based_on_last_token( |
| LOW | mycli/packages/sql_utils.py | 173 | def extract_table_identifiers(token_stream: Generator[Any, None, None]) -> Generator[tuple[str | None, str, str], None, |
| LOW | mycli/packages/sql_utils.py | 221 | def extract_columns_from_select(sql: str) -> list[str]: |
| LOW | mycli/packages/sql_utils.py | 271 | def extract_tables_from_complete_statements(sql: str) -> list[tuple[str | None, str, str | None]]: |
| LOW | mycli/packages/sql_utils.py | 362 | def query_is_single_table_update(query: str) -> bool: |
| LOW | mycli/packages/sql_utils.py | 475 | def classify_sandbox_statement(text: str) -> tuple[str | None, str | None]: |
| LOW | mycli/packages/special/iocommands.py | 85 | def set_show_warnings_enabled(val: bool) -> None: |
| LOW | mycli/packages/special/iocommands.py | 190 | def set_forced_horizontal_output(val: bool) -> None: |
| LOW | mycli/packages/special/iocommands.py | 386 | def subst_favorite_query_args(query: str, args: list[str]) -> list[str | None]: |
| LOW | mycli/packages/special/iocommands.py | 654 | def flush_pipe_once_if_written(post_redirect_command: str) -> None: |
| LOW | mycli/packages/ptoolkit/history.py | 27 | def load_history_with_timestamp(self) -> list[tuple[str, str]]: |
| LOW | mycli/main_modes/repl.py | 97 | def complete_while_typing_filter() -> bool: |
| LOW | mycli/main_modes/repl.py | 164 | def set_external_terminal_tab_title(mycli: 'MyCli') -> None: |
| LOW | mycli/main_modes/repl.py | 182 | def set_external_terminal_window_title(mycli: 'MyCli') -> None: |
| LOW | mycli/main_modes/repl.py | 200 | def set_external_multiplex_window_title(mycli: 'MyCli') -> None: |
| LOW | mycli/main_modes/repl.py | 226 | def set_external_multiplex_pane_title(mycli: 'MyCli') -> None: |
| LOW | mycli/main_modes/batch.py | 71 | def dispatch_batch_statements( |
| LOW | mycli/main_modes/batch.py | 112 | def main_batch_with_progress_bar(mycli: 'MyCli', cli_args: 'CliArgs') -> int: |
| LOW | mycli/main_modes/batch.py | 166 | def main_batch_without_progress_bar(mycli: 'MyCli', cli_args: 'CliArgs') -> int: |
| LOW | test/utils.py | 246 | def call_click_entrypoint_direct(cli_args: main.CliArgs) -> None: |
| LOW | test/features/steps/crud_database.py | 40 | def step_db_connect_quoted_tmp(context): |
| LOW | test/features/steps/crud_database.py | 99 | def step_see_db_dropped_no_default(context): |
| LOW | test/features/steps/named_queries.py | 33 | def step_see_named_query_saved(context): |
| LOW | test/features/steps/named_queries.py | 39 | def step_see_named_query_executed(context): |
| LOW | test/features/steps/named_queries.py | 45 | def step_see_named_query_deleted(context): |
| LOW | test/features/steps/named_queries.py | 51 | def step_save_named_query_with_parameters(context): |
| LOW | test/features/steps/named_queries.py | 57 | def step_use_named_query_with_parameters(context): |
| LOW | test/features/steps/named_queries.py | 63 | def step_see_named_query_with_parameters_executed(context): |
| LOW | test/features/steps/named_queries.py | 69 | def step_use_named_query_with_too_few_parameters(context): |
| LOW | test/features/steps/named_queries.py | 75 | def step_see_named_query_with_parameters_fail_with_missing_parameters(context): |
| LOW | test/features/steps/named_queries.py | 81 | def step_use_named_query_with_too_many_parameters(context): |
| LOW | test/features/steps/named_queries.py | 87 | def step_see_named_query_with_parameters_fail_with_extra_parameters(context): |
| LOW | test/features/steps/connection.py | 19 | def step_run_cli_without_args(context, excluded_args, exact_args=""): |
| LOW | test/features/steps/connection.py | 42 | def step_create_mylogin_cnf_file(context): |
| LOW | test/features/steps/iocommands.py | 107 | def step_see_csv_result_in_redirected_ouput(context, result): |
| LOW | test/features/steps/iocommands.py | 115 | def step_see_text_result_in_redirected_ouput(context, result): |
| LOW | test/features/steps/basic_commands.py | 68 | def step_check_application_name(context): |
| LOW | test/features/steps/basic_commands.py | 123 | def step_confirm_destructive_command(context): # noqa |
| LOW | test/features/steps/basic_commands.py | 130 | def step_confirm_destructive_command(context, confirmation): # noqa |
| LOW | test/features/steps/basic_commands.py | 137 | def step_confirm_destructive_command(context, confirmation, text): # noqa |
| LOW | test/pytests/test_sqlresult.py | 6 | def test_sqlresult_str_includes_all_fields() -> None: |
| LOW | test/pytests/test_sqlresult.py | 24 | def test_sqlresult_status_plain_handles_none_and_formatted_text() -> None: |
| 888 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | mycli/cli_runner.py | 1 | |
| LOW | mycli/cli_args.py | 1 | |
| LOW | mycli/client.py | 1 | |
| LOW | mycli/schema_prefetcher.py | 10 | |
| LOW | mycli/schema_prefetcher.py | 20 | |
| LOW | mycli/schema_prefetcher.py | 21 | |
| LOW | mycli/client_commands.py | 1 | |
| LOW | mycli/client_connection.py | 1 | |
| LOW | mycli/sqlcompleter.py | 1 | |
| LOW | mycli/client_query.py | 1 | |
| LOW | mycli/app_state.py | 1 | |
| LOW | mycli/main.py | 1 | |
| LOW | mycli/main.py | 3 | |
| LOW | mycli/main.py | 6 | |
| LOW | mycli/main.py | 7 | |
| LOW | mycli/main.py | 10 | |
| LOW | mycli/main.py | 11 | |
| LOW | mycli/main.py | 12 | |
| LOW | mycli/main.py | 13 | |
| LOW | mycli/main.py | 13 | |
| LOW | mycli/main.py | 16 | |
| LOW | mycli/main.py | 19 | |
| LOW | mycli/main.py | 19 | |
| LOW | mycli/main.py | 20 | |
| LOW | mycli/main.py | 21 | |
| LOW | mycli/main.py | 21 | |
| LOW | mycli/main.py | 21 | |
| LOW | mycli/main.py | 21 | |
| LOW | mycli/main.py | 21 | |
| LOW | mycli/main.py | 22 | |
| LOW | mycli/main.py | 23 | |
| LOW | mycli/main.py | 23 | |
| LOW | mycli/main.py | 23 | |
| LOW | mycli/main.py | 24 | |
| LOW | mycli/main.py | 25 | |
| LOW | mycli/main.py | 26 | |
| LOW | mycli/main.py | 27 | |
| LOW | mycli/main.py | 28 | |
| LOW | mycli/main.py | 28 | |
| LOW | mycli/main.py | 29 | |
| LOW | mycli/main.py | 30 | |
| LOW | mycli/main.py | 31 | |
| LOW | mycli/main.py | 31 | |
| LOW | mycli/main.py | 32 | |
| LOW | mycli/main.py | 33 | |
| LOW | mycli/main.py | 34 | |
| LOW | mycli/main.py | 35 | |
| LOW | mycli/main.py | 36 | |
| LOW | mycli/main.py | 37 | |
| LOW | mycli/main.py | 38 | |
| LOW | mycli/output.py | 1 | |
| LOW | mycli/sqlexecute.py | 1 | |
| LOW | mycli/sqlexecute.py | 23 | |
| LOW | mycli/packages/cli_utils.py | 1 | |
| LOW | mycli/packages/key_binding_utils.py | 1 | |
| LOW | mycli/packages/key_binding_utils.py | 12 | |
| LOW | mycli/packages/sql_utils.py | 1 | |
| LOW | mycli/packages/tabular_output/sql_format.py | 3 | |
| LOW | mycli/packages/special/delimitercommand.py | 1 | |
| LOW | mycli/packages/special/__init__.py | 1 | |
| 76 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | test/features/steps/crud_table.py | 109 | context.cli.sendline("select null;") |
| HIGH | test/pytests/test_sqlexecute.py | 360 | run(executor, """create table ts_null(a timestamp null)""") |
| HIGH | test/pytests/test_sqlexecute.py | 361 | run(executor, """insert into ts_null values(null)""") |
| HIGH | test/pytests/test_sqlexecute.py | 368 | run(executor, """create table dt_null(a datetime null)""") |
| HIGH | test/pytests/test_sqlexecute.py | 369 | run(executor, """insert into dt_null values(null)""") |
| HIGH | test/pytests/test_sqlexecute.py | 376 | run(executor, """create table date_null(a date null)""") |
| HIGH | test/pytests/test_sqlexecute.py | 377 | run(executor, """insert into date_null values(null)""") |
| HIGH | test/pytests/test_sqlexecute.py | 384 | run(executor, """create table time_null(a time null)""") |
| HIGH | test/pytests/test_sqlexecute.py | 385 | run(executor, """insert into time_null values(null)""") |
| HIGH | test/pytests/test_completion_engine.py | 1130 | suggestion = suggest_type("SELECT MAX(col1 || FROM tbl", "SELECT MAX(col1 || ") |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | mycli/cli_args.py | 333 | except Exception as e: |
| MEDIUM | mycli/client.py | 206 | print("Error: Unable to read login path file.") |
| LOW | mycli/schema_prefetcher.py | 121 | except Exception as e: # pragma: no cover - defensive |
| LOW | mycli/schema_prefetcher.py | 129 | except Exception as e: |
| LOW | mycli/schema_prefetcher.py | 141 | except Exception as e: |
| LOW | mycli/schema_prefetcher.py | 146 | except Exception: # pragma: no cover - defensive |
| LOW | mycli/schema_prefetcher.py | 240 | except Exception: # pragma: no cover - defensive |
| LOW | mycli/client_connection.py | 214 | except Exception as e: |
| LOW | mycli/client_connection.py | 321 | except Exception as e: # Connecting to a database could fail. |
| LOW | mycli/sqlcompleter.py | 1114 | except Exception: |
| LOW | mycli/sqlexecute.py | 344 | except Exception as e: |
| LOW | mycli/sqlexecute.py | 477 | except Exception as e: |
| LOW | mycli/sqlexecute.py | 592 | except Exception as e: |
| LOW | mycli/packages/key_binding_utils.py | 100 | except Exception: |
| LOW | mycli/packages/key_binding_utils.py | 122 | except Exception: |
| LOW | mycli/packages/ssh_utils.py | 23 | except Exception as err: |
| LOW | mycli/packages/sql_utils.py | 436 | except Exception: |
| LOW | mycli/packages/sql_utils.py | 454 | except Exception: |
| LOW | mycli/packages/special/llm.py | 76 | except Exception as e: |
| LOW | mycli/packages/special/llm.py | 283 | except Exception as e: |
| LOW | mycli/packages/special/llm.py | 358 | except Exception: |
| LOW | mycli/packages/special/iocommands.py | 618 | except Exception as e: |
| LOW | mycli/main_modes/repl.py | 523 | except Exception as e: |
| LOW | mycli/main_modes/repl.py | 745 | except Exception as e2: |
| LOW | mycli/main_modes/repl.py | 770 | except Exception as e: |
| LOW | mycli/main_modes/repl.py | 784 | except Exception as e: |
| LOW | mycli/main_modes/execute.py | 39 | except Exception as e: |
| LOW | mycli/main_modes/list_dsn.py | 17 | except Exception as e: |
| LOW | test/utils.py | 260 | except Exception: |
| LOW | test/utils.py | 271 | except Exception: |
| LOW | test/features/environment.py | 89 | except Exception: |
| MEDIUM | test/pytests/test_special_iocommands.py | 224 | print(f"An error occurred while attempting to delete the file: {e}") |
| MEDIUM | test/pytests/test_special_iocommands.py | 287 | print(f"An error occurred while attempting to delete the file: {e}") |
| LOW | test/pytests/test_special_iocommands.py | 223 | except Exception as e: |
| LOW | test/pytests/test_special_iocommands.py | 286 | except Exception as e: |
| LOW | test/pytests/test_special_main.py | 55 | except Exception: |
| MEDIUM | test/pytests/test_main.py | 2056 | print(f"An error occurred while attempting to delete the file: {e}") |
| MEDIUM | test/pytests/test_main.py | 2075 | print(f"An error occurred while attempting to delete the file: {e}") |
| LOW | test/pytests/test_main.py | 296 | except Exception as e: |
| LOW | test/pytests/test_main.py | 301 | except Exception as e: |
| MEDIUM | test/pytests/test_main.py | 531 | print(f"An error occurred while attempting to delete the file: {e}") |
| MEDIUM | test/pytests/test_main.py | 622 | print(f"An error occurred while attempting to delete the file: {e}") |
| LOW | test/pytests/test_main.py | 2055 | except Exception as e: |
| LOW | test/pytests/test_main.py | 2074 | except Exception as e: |
| MEDIUM | test/pytests/test_main.py | 2239 | print(f'An error occurred while attempting to delete the file: {e}') |
| MEDIUM | test/pytests/test_main.py | 838 | print(f"An error occurred while attempting to delete the file: {e}") |
| MEDIUM | test/pytests/test_main.py | 867 | print(f"An error occurred while attempting to delete the file: {e}") |
| MEDIUM | test/pytests/test_main.py | 1998 | print(f"An error occurred while attempting to delete the file: {e}") |
| LOW | test/pytests/test_main.py | 530 | except Exception as e: |
| LOW | test/pytests/test_main.py | 621 | except Exception as e: |
| LOW | test/pytests/test_main.py | 2238 | except Exception as e: |
| LOW | test/pytests/test_main.py | 837 | except Exception as e: |
| LOW | test/pytests/test_main.py | 866 | except Exception as e: |
| LOW | test/pytests/test_main.py | 1997 | except Exception as e: |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | mycli/cli_runner.py | 19 | |
| LOW | mycli/config.py | 53 | |
| LOW | mycli/clistyle.py | 140 | |
| LOW | mycli/clistyle.py | 170 | |
| LOW | mycli/client_connection.py | 37 | |
| LOW | mycli/client_connection.py | 217 | |
| LOW | mycli/sqlcompleter.py | 1403 | |
| LOW | mycli/sqlcompleter.py | 1841 | |
| LOW | mycli/client_query.py | 74 | |
| LOW | mycli/output.py | 111 | |
| LOW | mycli/output.py | 195 | |
| LOW | mycli/sqlexecute.py | 126 | |
| LOW | mycli/sqlexecute.py | 370 | |
| LOW | mycli/sqlexecute.py | 622 | |
| LOW | mycli/packages/batch_utils.py | 9 | |
| LOW | mycli/packages/completion_engine.py | 632 | |
| LOW | mycli/packages/completion_engine.py | 688 | |
| LOW | mycli/packages/sql_utils.py | 128 | |
| LOW | mycli/packages/sql_utils.py | 173 | |
| LOW | mycli/packages/sql_utils.py | 221 | |
| LOW | mycli/packages/filepaths.py | 12 | |
| LOW | mycli/packages/filepaths.py | 113 | |
| LOW | mycli/packages/tabular_output/sql_format.py | 30 | |
| LOW | mycli/packages/special/delimitercommand.py | 38 | |
| LOW | mycli/packages/special/llm.py | 47 | |
| LOW | mycli/packages/special/llm.py | 220 | |
| LOW | mycli/packages/special/iocommands.py | 333 | |
| LOW | mycli/packages/special/iocommands.py | 691 | |
| LOW | mycli/packages/ptoolkit/history.py | 27 | |
| LOW | mycli/main_modes/checkup.py | 71 | |
| LOW | mycli/main_modes/repl.py | 407 | |
| LOW | mycli/main_modes/repl.py | 590 | |
| LOW | mycli/main_modes/repl.py | 838 | |
| LOW | mycli/main_modes/batch.py | 28 | |
| LOW | mycli/main_modes/batch.py | 71 | |
| LOW | mycli/main_modes/batch.py | 112 | |
| LOW | mycli/main_modes/execute.py | 13 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | test/features/steps/crud_database.py | 0 | steps for behavioral style tests are defined in this module. each step is defined by the string decorating it. this stri |
| HIGH | test/features/steps/named_queries.py | 0 | steps for behavioral style tests are defined in this module. each step is defined by the string decorating it. this stri |
| HIGH | test/features/steps/crud_table.py | 0 | steps for behavioral style tests are defined in this module. each step is defined by the string decorating it. this stri |
| HIGH | test/features/steps/basic_commands.py | 0 | steps for behavioral style tests are defined in this module. each step is defined by the string decorating it. this stri |
| HIGH | test/features/steps/specials.py | 0 | steps for behavioral style tests are defined in this module. each step is defined by the string decorating it. this stri |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | mycli/config.py | 264 | # Create a bytes buffer to hold the plaintext. |
| MEDIUM | mycli/completion_refresher.py | 61 | # Create a new sqlexecute method to populate the completions. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | test/pytests/test_sqlcompleter.py | 428 | |
| MEDIUM | test/pytests/test_main_modes_batch.py | 197 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | mycli/client_connection.py | 313 | # Check if SQLExecute detected sandbox mode during connection |
| LOW | test/pytests/test_completion_refresher.py | 141 | # Set refreshers to 0: we're not testing refresh logic here |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | mycli/packages/completion_engine.py | 21 | # missing because not binary |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | test/pytests/test_main.py | 787 | testdata = "Lorem ipsum dolor sit amet consectetur adipiscing elit sed do".split(" ") |
| LOW | test/pytests/test_main.py | 787 | testdata = "Lorem ipsum dolor sit amet consectetur adipiscing elit sed do".split(" ") |