Rich MySQL Terminal Client with AutoCompletion, Syntax Highlighting, and Dataframes
This report summarizes scanner evidence for dbcli/mycli, a Python project with 11,980 GitHub stars. SynthScan examined 63,054 lines of code across 189 source files, recording 2396 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 36.5 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 2092 finding(s).
Are imports declared and package/API names verified? 139 finding(s).
Are wrappers, guards, and repeated structures necessary? 2187 finding(s).
Which changes need focused human review? 2396 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2396 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mycli/cli_runner.py | 100 | def expand_dsn_alias_env_vars( | CODE |
| LOW | mycli/config.py | 239 | def read_and_decrypt_mylogin_cnf(f: BinaryIO) -> BytesIO | None: | CODE |
| LOW⚡ | mycli/client.py | 252 | def _invalidate_prompt_session(self) -> None: | CODE |
| LOW | mycli/client_commands.py | 64 | def get_config_property_names(config: Mapping[str, Any]) -> list[str]: | CODE |
| LOW | mycli/client_commands.py | 111 | def register_special_commands(self) -> None: | CODE |
| LOW | mycli/client_query.py | 74 | def _on_completions_refreshed(self, new_completer: SQLCompleter) -> None: | CODE |
| LOW | mycli/app_state.py | 76 | def destructive_keywords_from_config(config: ConfigObj) -> list[str]: | CODE |
| LOW | mycli/packages/dataframes/completion.py | 35 | def complete_polars_transform(command: str) -> list[PolarsCompletion] | None: | CODE |
| LOW | mycli/packages/dataframes/transform.py | 156 | def _pipeline_operator_indexes( | CODE |
| LOW | mycli/packages/completion/completion_refresher.py | 179 | def _invalidate_after_visibility_deadline(self) -> None: | CODE |
| LOW | mycli/packages/completion/schema_prefetcher.py | 170 | def _invalidate_after_visibility_deadline(self) -> None: | CODE |
| LOW | mycli/packages/completion/sql_completer.py | 1273 | def _register_schema_completions( | CODE |
| LOW | mycli/packages/completion/sql_completer.py | 1313 | def quote_collection_if_needed( | CODE |
| LOW | mycli/packages/completion/sql_completer.py | 2047 | def populate_scoped_indexed_columns(self, scoped_tbls: list[tuple[str | None, str, str | None]]) -> set[str]: | CODE |
| LOW | mycli/packages/completion/completion_engine.py | 83 | def _keyword_and_special_suggestions() -> list[Suggestion]: | CODE |
| LOW | mycli/packages/completion/completion_engine.py | 88 | def _parse_suggestion_statement(text_before_cursor: str) -> sqlparse.sql.Statement: | CODE |
| LOW | mycli/packages/completion/completion_engine.py | 136 | def _is_single_or_double_quoted(ctx: SuggestContext) -> bool: | CODE |
| LOW | mycli/packages/completion/completion_engine.py | 396 | def _emit_quoted_enum_value_or_nothing(ctx: SuggestContext) -> list[Suggestion]: | CODE |
| LOW⚡ | mycli/packages/completion/completion_engine.py | 444 | def _word_starts_with_digit_or_dot(ctx: SuggestContext) -> bool: | CODE |
| LOW⚡ | mycli/packages/completion/completion_engine.py | 452 | def _word_inside_single_or_double_quotes(ctx: SuggestContext) -> bool: | CODE |
| LOW⚡ | mycli/packages/completion/completion_engine.py | 456 | def _word_inside_or_starts_with_quote(ctx: SuggestContext) -> bool: | CODE |
| LOW⚡ | mycli/packages/completion/completion_engine.py | 460 | def _word_could_be_enum_value(ctx: SuggestContext) -> bool: | CODE |
| LOW | mycli/packages/completion/completion_engine.py | 484 | def _token_is_relation_keyword(ctx: SuggestContext) -> bool: | CODE |
| LOW | mycli/packages/completion/completion_engine.py | 492 | def _token_is_binary_or_comma(ctx: SuggestContext) -> bool: | CODE |
| LOW | mycli/packages/completion/completion_engine.py | 1074 | def suggest_favorite_query_with_template(text: str, arg: str) -> list[dict[str, Any]]: | CODE |
| LOW | mycli/packages/completion/completion_engine.py | 1122 | def suggest_based_on_last_token( | CODE |
| LOW | mycli/packages/utils/cli_utils.py | 22 | def is_valid_connection_scheme(text: str) -> tuple[bool, str | None]: | CODE |
| LOW | mycli/packages/utils/interactive_utils.py | 28 | def confirm_destructive_query(keywords: list[str], queries: str) -> bool | None: | CODE |
| LOW | mycli/packages/utils/batch_utils.py | 9 | def statements_from_filehandle(file_h: IO) -> Generator[tuple[str, int], None, None]: | CODE |
| LOW | mycli/packages/utils/key_binding_utils.py | 123 | def handle_unprettify_binding( | STRING |
| LOW | mycli/packages/utils/keyring_utils.py | 7 | def _set_password_with_backend(backend: KeyringBackend, service: str, account: str, password: str) -> None: | CODE |
| LOW | mycli/packages/utils/sql_utils.py | 173 | def extract_table_identifiers(token_stream: Generator[Any, None, None]) -> Generator[tuple[str | None, str, str], None, | STRING |
| LOW | mycli/packages/utils/sql_utils.py | 221 | def extract_columns_from_select(sql: str) -> list[str]: | CODE |
| LOW | mycli/packages/utils/sql_utils.py | 271 | def extract_tables_from_complete_statements(sql: str) -> list[tuple[str | None, str, str | None]]: | CODE |
| LOW | mycli/packages/utils/sql_utils.py | 362 | def query_is_single_table_update(query: str) -> bool: | CODE |
| LOW | mycli/packages/utils/sql_utils.py | 488 | def classify_sandbox_statement(text: str) -> tuple[str | None, str | None]: | CODE |
| LOW | mycli/packages/integrations/boundary/boundary_tunnel.py | 52 | def _prompt_for_authentication(terminal_input: IO[str], terminal_output: IO[str], prompt: str) -> str: | CODE |
| LOW | mycli/packages/integrations/boundary/boundary_tunnel.py | 232 | def _parse_authentication_command(command: str, name: str) -> list[str]: | CODE |
| LOW | mycli/packages/integrations/openssh/ssh_tunnel.py | 39 | def _check_local_socket_path_limit(path: str) -> None: | CODE |
| LOW | mycli/packages/integrations/vault/vault_credentials.py | 16 | def _ensure_vault_user_logged_in( | CODE |
| LOW | mycli/packages/prompt_toolkit/style.py | 141 | def style_factory_prompt_toolkit(name: str, cli_style: dict[str, str]) -> _MergedStyle: | CODE |
| LOW | mycli/packages/prompt_toolkit/toolbar.py | 22 | def create_toolbar_tokens_func( | CODE |
| LOW | mycli/packages/prompt_toolkit/history.py | 35 | def _normalize_frecency_token(token: Token) -> str | None: | CODE |
| LOW | mycli/packages/prompt_toolkit/history.py | 105 | def _request_frecency_refresh(self) -> None: | CODE |
| LOW | mycli/packages/prompt_toolkit/history.py | 166 | def load_history_with_timestamp(self) -> list[tuple[str, str]]: | CODE |
| LOW⚡ | mycli/packages/special_commands/io_commands.py | 105 | def set_show_warnings_enabled(val: bool) -> None: | CODE |
| LOW⚡ | mycli/packages/special_commands/io_commands.py | 215 | def set_forced_horizontal_output(val: bool) -> None: | CODE |
| LOW | mycli/packages/special_commands/io_commands.py | 403 | def _reset_one_time_redirects() -> None: | CODE |
| LOW | mycli/packages/special_commands/io_commands.py | 520 | def parse_favorite_query_args(arg_str: str) -> tuple[list[str], dict[str, str]]: | CODE |
| LOW | mycli/packages/special_commands/io_commands.py | 591 | def _terminate_favorite_eval_query(query: str) -> str: | CODE |
| LOW | mycli/packages/special_commands/io_commands.py | 614 | def restore_favorite_query_args(query: str, positional_values: dict[str, str]) -> str: | CODE |
| LOW | mycli/packages/special_commands/io_commands.py | 620 | def prepare_favorite_query_args(query: str, args: list[str]) -> tuple[str | None, dict[str, str], str | None]: | CODE |
| LOW | mycli/packages/special_commands/io_commands.py | 645 | def subst_favorite_query_args(query: str, args: list[str]) -> list[str | None]: | CODE |
| LOW | mycli/packages/special_commands/io_commands.py | 1074 | def flush_pipe_once_if_written( | CODE |
| LOW | mycli/packages/special_commands/favorite_queries.py | 83 | def analyze_favorite_query_template(query: str) -> tuple[set[str], bool]: | CODE |
| LOW | mycli/packages/special_commands/favorite_queries.py | 128 | def find_favorite_query_template_keys(query: str) -> set[str]: | CODE |
| LOW⚡ | mycli/packages/special_commands/source.py | 93 | def _registered_special_command(query: str) -> tuple[str, str] | None: | CODE |
| LOW⚡ | mycli/packages/special_commands/source.py | 103 | def _favorite_source_command_is_safe(arg: str) -> bool: | CODE |
| LOW⚡ | mycli/packages/special_commands/source.py | 110 | def _create_source_argument_parser() -> _SourceArgumentParser: | CODE |
| LOW | mycli/packages/special_commands/source.py | 146 | def source_special_command_is_safe(query: str) -> bool: | CODE |
| 1955 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | mycli/client.py | 259 | except Exception: | CODE |
| HIGH | mycli/client.py | 263 | except Exception: | CODE |
| HIGH | mycli/client.py | 268 | except Exception: | CODE |
| HIGH | mycli/client.py | 273 | except Exception: | CODE |
| HIGH | mycli/client.py | 278 | except Exception: | CODE |
| HIGH | mycli/client.py | 283 | except Exception: | CODE |
| HIGH | mycli/client_connection.py | 35 | except ImportError: | CODE |
| HIGH | mycli/client_connection.py | 532 | except pymysql.err.Error: | CODE |
| HIGH | mycli/client_connection.py | 249 | except (TypeError, ValueError): | CODE |
| HIGH | mycli/client_connection.py | 136 | except Exception: | CODE |
| HIGH | mycli/client_connection.py | 158 | except Exception: | CODE |
| HIGH | mycli/client_connection.py | 199 | except Exception: | CODE |
| HIGH | mycli/packages/dataframes/completion.py | 100 | except (IndentationError, tokenize.TokenError): | CODE |
| HIGH | mycli/packages/dataframes/transform.py | 278 | except StopIteration: | CODE |
| HIGH | mycli/packages/completion/completion_refresher.py | 85 | except Exception: | CODE |
| HIGH | mycli/packages/completion/schema_prefetcher.py | 267 | except Exception: # pragma: no cover - defensive | CODE |
| HIGH | mycli/packages/completion/schema_prefetcher.py | 155 | except Exception: # pragma: no cover - defensive | CODE |
| HIGH | mycli/packages/completion/sql_completer.py | 2042 | except KeyError: | CODE |
| HIGH | mycli/packages/completion/sql_completer.py | 2037 | except KeyError: | CODE |
| HIGH | mycli/packages/utils/sql_utils.py | 290 | except sqlglot.errors.ParseError: | CODE |
| HIGH | mycli/packages/integrations/boundary/boundary_tunnel.py | 251 | except ProcessLookupError: | CODE |
| HIGH | mycli/packages/integrations/openssh/ssh_tunnel.py | 180 | except FileNotFoundError: | CODE |
| HIGH | mycli/packages/integrations/fzf/fzf.py | 68 | except BrokenPipeError: | CODE |
| HIGH | mycli/packages/prompt_toolkit/utils.py | 22 | except RuntimeError: | CODE |
| HIGH | …cli/packages/special_commands/special_command_utils.py | 73 | except pymysql.err.OperationalError: | CODE |
| HIGH | …cli/packages/special_commands/special_command_utils.py | 89 | except pymysql.err.OperationalError: | CODE |
| HIGH | …cli/packages/special_commands/special_command_utils.py | 113 | except pymysql.err.OperationalError: | CODE |
| HIGH | …cli/packages/special_commands/special_command_utils.py | 129 | except pymysql.err.OperationalError: | CODE |
| HIGH | mycli/packages/special_commands/io_commands.py | 1054 | except ProcessLookupError: | CODE |
| HIGH | mycli/packages/special_commands/io_commands.py | 1148 | except ValueError: | CODE |
| HIGH | mycli/packages/execution/background_runner.py | 400 | except OSError: | CODE |
| HIGH | mycli/packages/execution/sql_execute.py | 315 | except pymysql.err.Error: | CODE |
| HIGH | mycli/packages/execution/sql_execute.py | 713 | except pymysql.err.Error: | CODE |
| HIGH | mycli/main_modes/repl.py | 259 | except FileNotFoundError: | CODE |
| HIGH | mycli/main_modes/repl.py | 1173 | except FileNotFoundError: | CODE |
| HIGH | mycli/main_modes/repl.py | 1189 | except FileNotFoundError: | CODE |
| HIGH | mycli/main_modes/repl.py | 1209 | except FileNotFoundError: | CODE |
| HIGH | mycli/main_modes/repl.py | 546 | except KeyboardInterrupt: | CODE |
| HIGH | mycli_test/utils.py | 279 | except Exception: | CODE |
| HIGH | mycli_test/features/environment.py | 84 | except Exception: | CODE |
| HIGH | mycli_test/features/environment.py | 88 | except FileNotFoundError: | CODE |
| HIGH | mycli_test/pytests/test_main.py | 363 | except OperationalError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mycli/cli_runner.py | 1 | CODE | |
| LOW | mycli/cli_runner.py | 50 | CODE | |
| LOW | mycli/client.py | 1 | CODE | |
| LOW | mycli/client_commands.py | 1 | CODE | |
| LOW | mycli/client_connection.py | 1 | CODE | |
| LOW | mycli/client_query.py | 1 | CODE | |
| LOW | mycli/app_state.py | 1 | CODE | |
| LOW | mycli/main.py | 1 | CODE | |
| LOW | mycli/output.py | 1 | CODE | |
| LOW | mycli/packages/dataframes/transform.py | 1 | CODE | |
| LOW | mycli/packages/dataframes/transform.py | 254 | CODE | |
| LOW | mycli/packages/tabular_output/sql_format.py | 3 | CODE | |
| LOW | mycli/packages/completion/schema_prefetcher.py | 10 | CODE | |
| LOW | mycli/packages/completion/schema_prefetcher.py | 21 | CODE | |
| LOW | mycli/packages/completion/schema_prefetcher.py | 22 | CODE | |
| LOW | mycli/packages/completion/sql_completer.py | 1 | CODE | |
| LOW | mycli/packages/utils/cli_utils.py | 1 | CODE | |
| LOW | mycli/packages/utils/key_binding_utils.py | 1 | CODE | |
| LOW | mycli/packages/utils/key_binding_utils.py | 14 | CODE | |
| LOW | mycli/packages/utils/sql_utils.py | 1 | CODE | |
| LOW | mycli/packages/integrations/boundary/boundary_tunnel.py | 1 | CODE | |
| LOW | mycli/packages/integrations/openssh/ssh_tunnel.py | 1 | CODE | |
| LOW | …cli/packages/integrations/kubernetes/kubectl_tunnel.py | 1 | CODE | |
| LOW | mycli/packages/integrations/vault/vault_credentials.py | 1 | CODE | |
| LOW | mycli/packages/special_commands/io_commands.py | 1 | CODE | |
| LOW | mycli/packages/special_commands/delimiter_command.py | 1 | CODE | |
| LOW | mycli/packages/special_commands/favorite_queries.py | 1 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 3 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 3 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 3 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 3 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| LOW | mycli/packages/special_commands/__init__.py | 9 | CODE | |
| 61 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | mycli/client.py | 245 | print("Error: Unable to read login path file.") | CODE |
| LOW⚡ | mycli/client.py | 259 | except Exception: | CODE |
| LOW⚡ | mycli/client.py | 263 | except Exception: | CODE |
| LOW⚡ | mycli/client.py | 268 | except Exception: | CODE |
| LOW⚡ | mycli/client.py | 273 | except Exception: | CODE |
| LOW⚡ | mycli/client.py | 278 | except Exception: | CODE |
| LOW⚡ | mycli/client.py | 283 | except Exception: | CODE |
| MEDIUM | mycli/client.py | 256 | def close(self) -> None: | CODE |
| LOW | mycli/client_connection.py | 136 | except Exception: | CODE |
| LOW | mycli/client_connection.py | 158 | except Exception: | CODE |
| LOW | mycli/client_connection.py | 199 | except Exception: | CODE |
| LOW | mycli/client_connection.py | 391 | except Exception as e: | CODE |
| LOW | mycli/client_connection.py | 507 | except Exception as e: # Connecting to a database could fail. | CODE |
| LOW | mycli/main.py | 416 | except Exception as e: | CODE |
| LOW⚡ | mycli/packages/dataframes/transform.py | 297 | except Exception as exc: | CODE |
| LOW⚡ | mycli/packages/dataframes/transform.py | 303 | except Exception as exc: | CODE |
| LOW⚡ | mycli/packages/dataframes/transform.py | 308 | except Exception as exc: | CODE |
| LOW⚡ | mycli/packages/dataframes/transform.py | 313 | except Exception as exc: | CODE |
| LOW⚡ | mycli/packages/dataframes/transform.py | 322 | except Exception as exc: | CODE |
| LOW | mycli/packages/dataframes/transform.py | 334 | except Exception as exc: | CODE |
| LOW | mycli/packages/dataframes/transform.py | 350 | except Exception as exc: | CODE |
| LOW | mycli/packages/dataframes/transform.py | 363 | except Exception as exc: | CODE |
| LOW | mycli/packages/dataframes/transform.py | 377 | except Exception as exc: | CODE |
| MEDIUM | mycli/packages/dataframes/transform.py | 236 | def _load_polars() -> Any: | CODE |
| LOW | mycli/packages/completion/completion_refresher.py | 85 | except Exception: | CODE |
| LOW | mycli/packages/completion/completion_refresher.py | 153 | except Exception: | CODE |
| LOW | mycli/packages/completion/completion_refresher.py | 162 | except Exception: | CODE |
| LOW | mycli/packages/completion/schema_prefetcher.py | 130 | except Exception as e: # pragma: no cover - defensive | CODE |
| LOW | mycli/packages/completion/schema_prefetcher.py | 138 | except Exception as e: | CODE |
| LOW | mycli/packages/completion/schema_prefetcher.py | 150 | except Exception as e: | CODE |
| LOW | mycli/packages/completion/schema_prefetcher.py | 155 | except Exception: # pragma: no cover - defensive | CODE |
| LOW | mycli/packages/completion/schema_prefetcher.py | 267 | except Exception: # pragma: no cover - defensive | CODE |
| LOW | mycli/packages/completion/sql_completer.py | 1174 | except Exception: | CODE |
| LOW | mycli/packages/utils/key_binding_utils.py | 109 | except Exception: | STRING |
| LOW | mycli/packages/utils/key_binding_utils.py | 131 | except Exception: | STRING |
| LOW | mycli/packages/utils/sql_utils.py | 449 | except Exception: | CODE |
| LOW | mycli/packages/utils/sql_utils.py | 467 | except Exception: | CODE |
| LOW | mycli/packages/prompt_toolkit/history.py | 115 | except Exception: | CODE |
| LOW | mycli/packages/prompt_toolkit/history.py | 136 | except Exception: | CODE |
| LOW | mycli/packages/special_commands/io_commands.py | 585 | except Exception as exc: | CODE |
| LOW | mycli/packages/special_commands/io_commands.py | 1008 | except Exception as e: | CODE |
| LOW | mycli/packages/special_commands/favorite_queries.py | 324 | except Exception: | STRING |
| LOW | mycli/packages/special_commands/favorite_queries.py | 348 | except Exception: | STRING |
| LOW | mycli/packages/special_commands/llm.py | 80 | except Exception as e: | CODE |
| LOW | mycli/packages/special_commands/llm.py | 287 | except Exception as e: | STRING |
| LOW | mycli/packages/special_commands/llm.py | 362 | except Exception: | STRING |
| LOW | mycli/packages/special_commands/dsn_aliases.py | 225 | except Exception: | STRING |
| LOW | mycli/packages/special_commands/dsn_aliases.py | 252 | except Exception: | STRING |
| LOW | mycli/packages/execution/background_runner.py | 231 | except Exception: | CODE |
| LOW | mycli/packages/execution/background_runner.py | 264 | except Exception: | CODE |
| LOW | mycli/packages/execution/sql_execute.py | 390 | except Exception as e: | CODE |
| LOW | mycli/packages/execution/sql_execute.py | 503 | except Exception as e: | CODE |
| LOW | mycli/packages/execution/sql_execute.py | 527 | except Exception as e: | CODE |
| LOW | mycli/packages/execution/sql_execute.py | 642 | except Exception as e: | CODE |
| LOW | mycli/main_modes/repl.py | 807 | except Exception as e: | CODE |
| LOW | mycli/main_modes/repl.py | 1101 | except Exception as e2: | CODE |
| LOW | mycli/main_modes/repl.py | 1129 | except Exception as e: | CODE |
| LOW | mycli/main_modes/repl.py | 1143 | except Exception as e: | CODE |
| LOW | mycli/main_modes/execute.py | 53 | except Exception as e: | CODE |
| LOW | mycli/main_modes/list_dsn.py | 19 | except Exception as e: | CODE |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | mycli_test/features/steps/crud_table.py | 109 | context.cli.sendline("select null;") | CODE |
| HIGH | mycli_test/pytests/test_bash_completion.py | 27 | [candidate, '-c', '(( BASH_VERSINFO[0] > 4 || (BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 4) ))'], | CODE |
| HIGH | mycli_test/pytests/test_completion_engine.py | 1541 | suggestion = suggest_type("SELECT MAX(col1 || FROM tbl", "SELECT MAX(col1 || ") | CODE |
| HIGH⚡ | mycli_test/pytests/test_sql_execute.py | 359 | run(executor, """create table ts_null(a timestamp null)""") | CODE |
| HIGH⚡ | mycli_test/pytests/test_sql_execute.py | 360 | run(executor, """insert into ts_null values(null)""") | CODE |
| HIGH⚡ | mycli_test/pytests/test_sql_execute.py | 367 | run(executor, """create table dt_null(a datetime null)""") | CODE |
| HIGH⚡ | mycli_test/pytests/test_sql_execute.py | 368 | run(executor, """insert into dt_null values(null)""") | CODE |
| HIGH⚡ | mycli_test/pytests/test_sql_execute.py | 375 | run(executor, """create table date_null(a date null)""") | CODE |
| HIGH⚡ | mycli_test/pytests/test_sql_execute.py | 376 | run(executor, """insert into date_null values(null)""") | CODE |
| HIGH⚡ | mycli_test/pytests/test_sql_execute.py | 383 | run(executor, """create table time_null(a time null)""") | CODE |
| HIGH⚡ | mycli_test/pytests/test_sql_execute.py | 384 | run(executor, """insert into time_null values(null)""") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mycli/cli_runner.py | 127 | CODE | |
| LOW | mycli/config.py | 22 | CODE | |
| LOW | mycli/client_commands.py | 69 | CODE | |
| LOW | mycli/client_commands.py | 291 | CODE | |
| LOW | mycli/client_connection.py | 55 | CODE | |
| LOW | mycli/client_connection.py | 394 | CODE | |
| LOW | mycli/client_query.py | 89 | CODE | |
| LOW | mycli/output.py | 114 | CODE | |
| LOW | mycli/output.py | 251 | CODE | |
| LOW | mycli/packages/dataframes/completion.py | 88 | CODE | |
| LOW | mycli/packages/dataframes/completion.py | 273 | CODE | |
| LOW | mycli/packages/dataframes/transform.py | 259 | CODE | |
| LOW | mycli/packages/tabular_output/sql_format.py | 30 | CODE | |
| LOW | mycli/packages/completion/completion_refresher.py | 94 | CODE | |
| LOW | mycli/packages/completion/sql_completer.py | 1358 | CODE | |
| LOW | mycli/packages/completion/sql_completer.py | 1483 | CODE | |
| LOW | mycli/packages/completion/sql_completer.py | 2114 | CODE | |
| LOW | mycli/packages/completion/completion_engine.py | 396 | CODE | |
| LOW | mycli/packages/completion/completion_engine.py | 710 | CODE | |
| LOW | mycli/packages/completion/completion_engine.py | 766 | CODE | |
| LOW | mycli/packages/completion/completion_engine.py | 848 | CODE | |
| LOW | mycli/packages/completion/completion_engine.py | 1074 | CODE | |
| LOW | mycli/packages/utils/batch_utils.py | 9 | CODE | |
| LOW | mycli/packages/utils/sql_utils.py | 128 | CODE | |
| LOW | mycli/packages/utils/sql_utils.py | 173 | CODE | |
| LOW | mycli/packages/utils/sql_utils.py | 221 | CODE | |
| LOW | mycli/packages/utils/path_utils.py | 12 | CODE | |
| LOW | mycli/packages/utils/path_utils.py | 99 | CODE | |
| LOW | mycli/packages/utils/path_utils.py | 172 | CODE | |
| LOW | mycli/packages/integrations/openssh/ssh_tunnel.py | 218 | CODE | |
| LOW | mycli/packages/prompt_toolkit/style.py | 141 | CODE | |
| LOW | mycli/packages/prompt_toolkit/style.py | 171 | CODE | |
| LOW | mycli/packages/prompt_toolkit/history.py | 129 | CODE | |
| LOW | mycli/packages/prompt_toolkit/history.py | 166 | CODE | |
| LOW | mycli/packages/special_commands/io_commands.py | 520 | CODE | |
| LOW | mycli/packages/special_commands/io_commands.py | 738 | CODE | |
| LOW | mycli/packages/special_commands/io_commands.py | 1060 | CODE | |
| LOW | mycli/packages/special_commands/io_commands.py | 1074 | CODE | |
| LOW | mycli/packages/special_commands/io_commands.py | 1125 | CODE | |
| LOW | mycli/packages/special_commands/delimiter_command.py | 38 | CODE | |
| LOW | mycli/packages/special_commands/favorite_queries.py | 83 | CODE | |
| LOW | mycli/packages/special_commands/llm.py | 51 | CODE | |
| LOW | mycli/packages/special_commands/llm.py | 224 | CODE | |
| LOW | mycli/packages/execution/background_runner.py | 171 | CODE | |
| LOW | mycli/packages/execution/background_runner.py | 240 | CODE | |
| LOW | mycli/packages/execution/background_runner.py | 344 | CODE | |
| LOW | mycli/packages/execution/sql_execute.py | 131 | CODE | |
| LOW | mycli/packages/execution/sql_execute.py | 394 | CODE | |
| LOW | mycli/packages/execution/sql_execute.py | 675 | CODE | |
| LOW | mycli/main_modes/checkup.py | 84 | CODE | |
| LOW | mycli/main_modes/repl.py | 520 | CODE | |
| LOW | mycli/main_modes/repl.py | 670 | CODE | |
| LOW | mycli/main_modes/repl.py | 876 | CODE | |
| LOW | mycli/main_modes/repl.py | 1199 | CODE | |
| LOW | mycli/main_modes/repl.py | 1215 | CODE | |
| LOW | mycli/main_modes/batch.py | 28 | CODE | |
| LOW | mycli/main_modes/batch.py | 92 | CODE | |
| LOW | mycli/main_modes/batch.py | 132 | CODE | |
| LOW | mycli/main_modes/execute.py | 16 | CODE | |
| LOW | mycli_test/pytests/test_special_io_commands.py | 745 | CODE | |
| 1 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mycli/config.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | mycli/packages/redirection/hybrid_redirection.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | mycli/packages/completion/sql_completer.py | 1217 | def set_dbname(self, dbname: str | None) -> None: | CODE |
| LOW | mycli/packages/utils/keyring_utils.py | 7 | def _set_password_with_backend(backend: KeyringBackend, service: str, account: str, password: str) -> None: | CODE |
| LOW | mycli/packages/utils/keyring_utils.py | 18 | def set_keyring_password(service: str, account: str, password: str) -> None: | CODE |
| LOW | mycli/packages/integrations/macos/macos_keychain.py | 13 | def set_password(service: str, account: str, password: str) -> None: | CODE |
| LOW | mycli/packages/prompt_toolkit/style.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | mycli/packages/prompt_toolkit/history.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | …cli/packages/special_commands/special_command_utils.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | mycli/packages/special_commands/io_commands.py | 77 | def set_timing_enabled(val: bool) -> None: | CODE |
| LOW⚡ | mycli/packages/special_commands/io_commands.py | 82 | def set_pager_enabled(val: bool) -> None: | CODE |
| LOW⚡ | mycli/packages/special_commands/io_commands.py | 91 | def set_show_favorite_query(val: bool) -> None: | CODE |
| LOW⚡ | mycli/packages/special_commands/io_commands.py | 100 | def set_destructive_keywords(val: list[str]) -> None: | CODE |
| LOW⚡ | mycli/packages/special_commands/io_commands.py | 105 | def set_show_warnings_enabled(val: bool) -> None: | CODE |
| LOW⚡ | mycli/packages/special_commands/io_commands.py | 206 | def set_expanded_output(val: bool) -> None: | CODE |
| LOW⚡ | mycli/packages/special_commands/io_commands.py | 215 | def set_forced_horizontal_output(val: bool) -> None: | CODE |
| LOW⚡ | mycli/packages/special_commands/io_commands.py | 224 | def set_explorer_output(val: bool) -> None: | CODE |
| LOW | mycli/packages/special_commands/favorite_queries.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | mycli/packages/special_commands/favorite_queries.py | 304 | def _set_query(self, config: Any, name: str, query: str) -> None: | STRING |
| LOW | mycli/packages/special_commands/dsn_aliases.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | mycli/packages/special_commands/dsn_aliases.py | 151 | def _set_alias(self, config: Any, alias: str, dsn: str) -> None: | STRING |
| LOW | mycli/packages/special_commands/main.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | mycli/packages/special_commands/db_commands.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | mycli/packages/execution/background_runner.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | mycli/packages/execution/sql_execute.py | 360 | def set_background_runner(self, runner: BackgroundRunner | None) -> None: | CODE |
| LOW⚡ | mycli/main_modes/repl.py | 194 | def set_all_external_titles(mycli: 'MyCli') -> None: | CODE |
| LOW⚡ | mycli/main_modes/repl.py | 201 | def set_external_terminal_tab_title(mycli: 'MyCli') -> None: | CODE |
| LOW | mycli/main_modes/repl.py | 219 | def set_external_terminal_window_title(mycli: 'MyCli') -> None: | CODE |
| LOW | mycli/main_modes/repl.py | 237 | def set_external_multiplex_window_title(mycli: 'MyCli') -> None: | CODE |
| LOW | mycli/main_modes/repl.py | 263 | def set_external_multiplex_pane_title(mycli: 'MyCli') -> None: | CODE |
| LOW | mycli_test/pytests/test_sql_execute.py | 632 | def set_ciphers(self, cipher_string: str) -> None: | CODE |
| LOW | mycli_test/pytests/test_sql_execute.py | 1022 | def set_character_set(self, *args, **kwargs) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | mycli_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 | STRING |
| HIGH | mycli_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 | STRING |
| HIGH | mycli_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 | STRING |
| HIGH | mycli_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 | STRING |
| HIGH | mycli_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 | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mycli/client.py | 69 | CODE | |
| LOW | mycli/client_connection.py | 55 | CODE | |
| LOW | mycli/packages/completion/sql_completer.py | 950 | CODE | |
| LOW | mycli/packages/integrations/boundary/boundary_tunnel.py | 61 | CODE | |
| LOW | …cli/packages/special_commands/special_command_utils.py | 150 | CODE | |
| LOW | mycli/packages/execution/sql_execute.py | 199 | CODE | |
| LOW | mycli_test/pytests/test_sql_execute.py | 22 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | mycli/config.py | 280 | # Create a bytes buffer to hold the plaintext. | COMMENT |
| MEDIUM | mycli/packages/completion/completion_refresher.py | 102 | # Create a new sql_execute method to populate the completions. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | mycli_test/pytests/test_sqlcompleter.py | 906 | CODE | |
| MEDIUM | mycli_test/pytests/test_main_modes_batch.py | 279 | CODE | |
| MEDIUM | mycli_test/pytests/test_main_modes_batch.py | 300 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | mycli_test/pytests/test_boundary_tunnel.py | 332 | r'"C:\Program Files\Boundary\boundary.exe" authenticate -name "Jane Doe"', | CODE |
| LOW⚡ | mycli_test/pytests/test_boundary_tunnel.py | 333 | [r'C:\Program Files\Boundary\boundary.exe', 'authenticate', '-name', 'Jane Doe'], | CODE |
| LOW | mycli_test/pytests/test_boundary_tunnel.py | 206 | boundary_auth_command='boundary authenticate password -login-name "Jane Doe"', | CODE |
| LOW | mycli_test/pytests/test_boundary_tunnel.py | 224 | ['boundary', 'authenticate', 'password', '-login-name', 'Jane Doe'], | CODE |
| LOW | mycli_test/pytests/test_main.py | 865 | testdata = "Lorem ipsum dolor sit amet consectetur adipiscing elit sed do".split(" ") | CODE |
| LOW | mycli_test/pytests/test_main.py | 865 | testdata = "Lorem ipsum dolor sit amet consectetur adipiscing elit sed do".split(" ") | CODE |
| LOW | mycli_test/pytests/test_special_utils.py | 288 | user='user@example.com', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mycli/packages/completion/sql_completer.py | 2001 | # if scoped tables is empty, this is just after a SELECT so we | COMMENT |
| LOW | mycli/packages/completion/completion_engine.py | 21 | _ENUM_VALUE_RE = re.compile( | COMMENT |
| LOW | mycli/packages/completion/completion_engine.py | 161 | COMMENT | |
| LOW | mycli/packages/integrations/fzf/fzf.py | 1 | """Inspired by | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mycli/client_connection.py | 499 | # Check if SQLExecute detected sandbox mode during connection | COMMENT |
| LOW | mycli_test/pytests/test_completion_refresher.py | 137 | # Set refreshers to 0: we're not testing refresh logic here | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mycli/packages/integrations/fzf/fzf.py | 75 | # just return the first item | COMMENT |