Drop-in Apache Spark replacement written in Rust, unifying batch processing, stream processing, and compute-intensive AI workloads.
This report summarizes scanner evidence for lakehq/sail, a Rust project with 3,481 GitHub stars. SynthScan examined 709,791 lines of code across 2371 source files, recording 2791 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 4.4 (Low 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.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 2501 finding(s).
Are imports declared and package/API names verified? 110 finding(s).
Are wrappers, guards, and repeated structures necessary? 2293 finding(s).
Which changes need focused human review? 2791 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 2791 distinct pattern matches across 18 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 | crates/sail-python-udf/src/python/spark.py | 73 | def _pandas_serializer_kwargs(config) -> dict[str, bool]: | CODE |
| LOW | crates/sail-python-udf/src/python/spark.py | 605 | def _python_values_to_arrow_array( | CODE |
| LOW | crates/sail-python-udf/src/python/spark.py | 630 | def _arrow_array_to_output_type(data, data_type: pa.DataType) -> pa.Array: | CODE |
| LOW | crates/sail-cli/src/python/spark_mcp_server.py | 48 | def override_default_logging_config(): | CODE |
| LOW | crates/sail-cli/src/python/spark_mcp_server.py | 58 | def configure_fastmcp_log_level(): | CODE |
| LOW | python/pysail/tests/conftest.py | 82 | def pytest_collection_modifyitems(config: pytest.Config, items: list[pytest.Item]) -> None: | CODE |
| LOW | python/pysail/tests/conftest.py | 123 | def configure_sail_environment(): | CODE |
| LOW | python/pysail/tests/test_package.py | 13 | def test_pytest_timeout_plugin_is_active(pytestconfig): | CODE |
| LOW | python/pysail/tests/flight/test_flight.py | 31 | def test_flight_server_connectivity(flight_connection): | CODE |
| LOW | python/pysail/tests/flight/test_flight.py | 37 | def test_flight_execute_simple_query(flight_connection): | CODE |
| LOW | python/pysail/tests/flight/test_flight.py | 50 | def test_flight_multiple_columns(flight_connection): | CODE |
| LOW | python/pysail/tests/flight/test_flight.py | 61 | def test_flight_error_handling(flight_connection): | CODE |
| LOW | python/pysail/tests/flight/test_flight.py | 118 | def test_flight_string_operations(flight_connection): | CODE |
| LOW | python/pysail/tests/flight/test_flight.py | 135 | def test_flight_numeric_operations(flight_connection): | CODE |
| LOW | python/pysail/tests/flight/test_flight.py | 153 | def test_flight_create_temp_view(flight_connection): | CODE |
| LOW | python/pysail/tests/flight/test_flight.py | 197 | def test_flight_multiple_cursors(flight_connection): | CODE |
| LOW | python/pysail/tests/catalog/unity/test_catalog.py | 170 | def test_get_nonexistent_schema(unity_catalog: UnityCatalogProvider) -> None: | CODE |
| LOW | python/pysail/tests/catalog/glue/test_catalog.py | 74 | def _database_names_with_prefix(catalog: GlueCatalogProvider, prefix: str) -> list[tuple[str, ...]]: | CODE |
| LOW | python/pysail/tests/catalog/glue/test_catalog.py | 316 | def test_unsupported_column_types(glue_catalog: GlueCatalogProvider, glue_database: list[str]) -> None: | CODE |
| LOW | python/pysail/tests/catalog/glue/test_catalog.py | 377 | def test_hive_rejects_transforms(glue_catalog: GlueCatalogProvider, glue_database: list[str]) -> None: | CODE |
| LOW | python/pysail/tests/catalog/glue/test_catalog.py | 388 | def test_iceberg_requires_location(glue_catalog: GlueCatalogProvider, glue_database: list[str]) -> None: | CODE |
| LOW | python/pysail/tests/catalog/glue/test_catalog.py | 464 | def test_get_view_not_found_for_table(glue_catalog: GlueCatalogProvider, glue_database: list[str]) -> None: | CODE |
| LOW | …thon/pysail/tests/catalog/iceberg_rest/test_catalog.py | 163 | def test_get_non_exist_namespace(iceberg_rest_catalog: IcebergRestCatalogProvider) -> None: | CODE |
| LOW | …thon/pysail/tests/catalog/iceberg_rest/test_catalog.py | 199 | def test_list_empty_namespaces(iceberg_rest_catalog: IcebergRestCatalogProvider) -> None: | CODE |
| LOW | …thon/pysail/tests/catalog/iceberg_rest/test_catalog.py | 209 | def test_list_root_namespaces(iceberg_rest_catalog: IcebergRestCatalogProvider) -> None: | CODE |
| LOW | …thon/pysail/tests/catalog/iceberg_rest/test_catalog.py | 224 | def test_list_empty_multi_level_namespaces(iceberg_rest_catalog: IcebergRestCatalogProvider) -> None: | CODE |
| LOW | …thon/pysail/tests/catalog/iceberg_rest/test_catalog.py | 507 | def _assert_partition_transform( | CODE |
| LOW⚡ | …thon/pysail/tests/catalog/iceberg_rest/test_catalog.py | 525 | def test_create_table_partition_identity(iceberg_rest_catalog: IcebergRestCatalogProvider) -> None: | CODE |
| LOW⚡ | …thon/pysail/tests/catalog/iceberg_rest/test_catalog.py | 529 | def test_create_table_partition_year(iceberg_rest_catalog: IcebergRestCatalogProvider) -> None: | CODE |
| LOW⚡ | …thon/pysail/tests/catalog/iceberg_rest/test_catalog.py | 533 | def test_create_table_partition_bucket(iceberg_rest_catalog: IcebergRestCatalogProvider) -> None: | CODE |
| LOW⚡ | …thon/pysail/tests/catalog/iceberg_rest/test_catalog.py | 537 | def test_create_table_partition_truncate(iceberg_rest_catalog: IcebergRestCatalogProvider) -> None: | CODE |
| LOW | python/pysail/tests/catalog/hms/test_catalog.py | 30 | def test_create_get_list_drop_database(hms_catalog: HmsCatalogProvider) -> None: | CODE |
| LOW | python/pysail/tests/catalog/hms/test_catalog.py | 47 | def test_create_get_list_drop_table( | CODE |
| LOW | python/pysail/tests/catalog/hms/test_catalog.py | 72 | def test_supported_formats_round_trip( | CODE |
| LOW | python/pysail/tests/catalog/hms/test_catalog.py | 97 | def test_get_table_returns_table_not_found_for_view( | CODE |
| LOW | python/pysail/tests/catalog/hms/test_catalog.py | 107 | def test_list_tables_excludes_views( | CODE |
| LOW | python/pysail/tests/catalog/hms/test_catalog.py | 122 | def test_create_get_list_drop_view( | CODE |
| LOW | python/pysail/tests/catalog/hms/test_catalog.py | 142 | def test_get_view_returns_view_not_found_for_table( | CODE |
| LOW | python/pysail/tests/catalog/hms/test_catalog.py | 157 | def test_list_views_excludes_tables( | CODE |
| LOW | python/pysail/tests/catalog/hms/test_catalog.py | 172 | def test_failover_from_dead_primary_endpoint(hms_service: HmsService) -> None: | CODE |
| LOW | python/pysail/tests/catalog/hms/test_kerberos.py | 57 | def test_kerberos_hms_database_and_table_round_trip( | CODE |
| LOW | python/pysail/tests/catalog/hms/test_kerberos.py | 75 | def test_kerberos_hms_rejects_missing_credentials( | CODE |
| LOW | python/pysail/tests/utils/test_proxy.py | 138 | def test_proxy_codec_handles_fragmented_and_combined_frames() -> None: | CODE |
| LOW | python/pysail/tests/utils/test_proxy.py | 149 | def test_event_store_does_not_match_missing_attributes() -> None: | CODE |
| LOW | python/pysail/tests/utils/test_proxy.py | 156 | def test_endpoint_proxy_records_frames_and_replaces_a_response() -> None: | CODE |
| LOW | python/pysail/tests/utils/test_proxy.py | 188 | def test_connection_rule_closes_the_next_accepted_socket() -> None: | CODE |
| LOW | python/pysail/tests/utils/test_proxy.py | 208 | def test_close_active_connections_closes_delayed_connections() -> None: | CODE |
| LOW | python/pysail/tests/celeborn/test_lifecycle.py | 69 | def test_lifecycle_manager_registers_shuffles_and_unregisters( | CODE |
| LOW | python/pysail/tests/celeborn/test_lifecycle.py | 81 | def test_lifecycle_manager_returns_registration_failure() -> None: | CODE |
| LOW | python/pysail/tests/celeborn/test_lifecycle.py | 89 | def test_lifecycle_manager_fails_over_master_endpoints( | CODE |
| LOW | python/pysail/tests/celeborn/test_lifecycle.py | 108 | def test_lifecycle_manager_sends_periodic_heartbeats( | CODE |
| LOW | python/pysail/tests/celeborn/test_shuffle.py | 42 | def _add_drop_next_connection(proxies: dict[str, EndpointProxy]) -> None: | CODE |
| LOW | python/pysail/tests/celeborn/test_shuffle.py | 111 | def _split_response_partition_ids( | CODE |
| LOW | python/pysail/tests/celeborn/test_shuffle.py | 163 | def test_shuffle_client_registers_and_unregisters( | CODE |
| LOW | python/pysail/tests/celeborn/test_shuffle.py | 176 | def test_shuffle_client_pushes_and_reads_partition( | CODE |
| LOW | python/pysail/tests/celeborn/test_shuffle.py | 187 | def test_shuffle_client_commits_after_all_mappers_end( | CODE |
| LOW | python/pysail/tests/celeborn/test_shuffle.py | 200 | def test_shuffle_client_replicates_data( | CODE |
| LOW | python/pysail/tests/celeborn/test_shuffle.py | 222 | def test_shuffle_client_returns_registration_failure() -> None: | CODE |
| LOW | python/pysail/tests/celeborn/test_shuffle.py | 231 | def test_shuffle_client_stop_does_not_stop_lifecycle_manager( | CODE |
| LOW | python/pysail/tests/celeborn/test_shuffle.py | 247 | def test_shuffle_client_handles_a_partition_split( | CODE |
| 2052 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/sail-delta-lake/src/snapshot/mod.rs | 752 | // ── Capability token verification ───────────────────────────────────────── | COMMENT |
| MEDIUM | crates/sail-delta-lake/src/deletion_vector/resolve.rs | 79 | // ── Z85 (base-85) encoding for UUIDs ───────────────────────────────────────── | COMMENT |
| MEDIUM | crates/sail-delta-lake/src/schema/arrow_conversions.rs | 20 | // ── Delta → Arrow ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/sail-delta-lake/src/schema/arrow_conversions.rs | 139 | // ── Arrow → Delta ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 221 | /// ┌─────────┐ ┌─────────┐ ┌──────────────┐ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 222 | /// │ ┌─────┐ │ │ ┌─────┐ │ │ ┌──────────┐ │ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 224 | /// │ ├─────┤ │ │ ├─────┤ │ │ ├──────────┤ │ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 225 | /// │ │NULL │ │ │ │ Y │ │──────────▶│ │[NULL, Y] │ │ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 226 | /// │ ├─────┤ │ │ ├─────┤ │ │ ├──────────┤ │ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 228 | /// │ └─────┘ │ │ └─────┘ │ │ └──────────┘ │ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 229 | /// └─────────┘ └─────────┘ └──────────────┘ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 240 | /// ┌──────────────┐ ┌──────────────┐ ┌─────────────────────────────┐ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 241 | /// │ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌────────────────────────┐ │ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 243 | /// │ ├──────────┤ │ │ ├──────────┤ │ │ ├────────────────────────┤ │ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 244 | /// │ │[NULL, Y] │ │ │ │[Q, R, S] │ │───────▶│ │ [[NULL, Y], [Q, R, S]] │ │ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 245 | /// │ ├──────────┤ │ │ ├──────────┤ │ │ ├────────────────────────│ │ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 247 | /// │ └──────────┘ │ │ └──────────┘ │ │ └────────────────────────┘ │ | COMMENT |
| MEDIUM⚡ | crates/sail-function/src/scalar/array/spark_array.rs | 248 | /// └──────────────┘ └──────────────┘ └─────────────────────────────┘ | COMMENT |
| MEDIUM | python/pysail/tests/spark/datasource/test_parquet.py | 448 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/pysail/tests/spark/datasource/test_parquet.py | 454 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 53 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 55 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 190 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 192 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 219 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 221 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 638 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 640 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 1019 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 1021 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 1586 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_python.py | 1588 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 92 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 94 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 103 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 105 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 121 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 123 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 132 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 134 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 170 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 172 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 189 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 191 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 201 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 203 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 216 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 218 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 228 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 242 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 244 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 253 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 255 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 264 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/pysail/tests/spark/datasource/test_jdbc.py | 266 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/pysail/tests/spark/datasource/test_jdbc.py | 78 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/pysail/tests/spark/datasource/test_jdbc.py | 80 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/pysail/tests/spark/datasource/test_jdbc.py | 152 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/pysail/tests/spark/datasource/test_jdbc.py | 154 | # --------------------------------------------------------------------------- | COMMENT |
| 88 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/sail-execution/src/driver/actor/handler.rs | 301 | .job_scheduler | COMMENT |
| LOW | crates/sail-execution/src/job_graph/planner.rs | 301 | })?; | COMMENT |
| LOW | crates/sail-execution/src/job_graph/mod.rs | 141 | /// are executed recursively with the same partition `p`, but this is not always the case. | COMMENT |
| LOW | crates/sail-execution/src/task/scheduling.rs | 1 | use crate::id::{TaskKey, WorkerId}; | COMMENT |
| LOW | crates/sail-physical-plan/src/barrier.rs | 21 | /// **Partition matching**: The `EnforceBarrierPartitioning` physical optimizer rule (which | COMMENT |
| LOW | crates/sail-plan/src/function/scalar/lambda.rs | 501 | /// | COMMENT |
| LOW | crates/sail-plan/src/function/scalar/json.rs | 21 | /// `JsonPath::Index` respectively). | COMMENT |
| LOW | crates/sail-plan/src/function/scalar/math.rs | 141 | } | COMMENT |
| LOW | crates/sail-plan/src/function/scalar/math.rs | 221 | (Ok(_), Ok(_)) | (Err(_), _) | (_, Err(_)) => left - right, | COMMENT |
| LOW | crates/sail-plan/src/function/scalar/math.rs | 741 | } | COMMENT |
| LOW | crates/sail-plan/src/resolver/data_type.rs | 21 | COMMENT | |
| LOW | crates/sail-plan/src/resolver/state.rs | 101 | /// The aggregate state for the current query. | COMMENT |
| LOW | crates/sail-plan/src/resolver/command/write.rs | 41 | use sail_function::scalar::misc::raise_error::RaiseError; | COMMENT |
| LOW | crates/sail-plan/src/resolver/command/write.rs | 61 | /// If the target exists, return an error. | COMMENT |
| LOW | crates/sail-plan/src/resolver/command/write.rs | 81 | /// | COMMENT |
| LOW | crates/sail-plan/src/resolver/command/write.rs | 1261 | } | COMMENT |
| LOW | …/sail-data-source/src/formats/python/table_provider.rs | 21 | /// | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/stream.rs | 21 | /// # Timeout Limitations | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/stream.rs | 101 | /// Stream that reads RecordBatches from a Python datasource. | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/exec.rs | 1 | //! Execution plan for Python data source batch reads. | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/exec.rs | 41 | use super::executor::InputPartition; | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/adapter.rs | 41 | /// Each registered Python datasource gets its own PythonDataSourceAdapter instance, | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/error.rs | 1 | //! Error types for Python data source operations. | COMMENT |
| LOW | …tes/sail-data-source/src/formats/python/arrow_utils.rs | 1 | //! Arrow conversion utilities for Python data sources. | COMMENT |
| LOW | …ates/sail-data-source/src/formats/python/write_exec.rs | 1 | //! Distributed write execution plan for Python data sources. | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/mod.rs | 1 | //! Python data source support for Sail. | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/executor.rs | 41 | self.data.len() | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/executor.rs | 61 | #[derive(Debug, Clone)] | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/executor.rs | 81 | /// Abstract executor for Python datasource operations. | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/executor.rs | 161 | ) -> Result<()>; | COMMENT |
| LOW | crates/sail-data-source/src/formats/python/filter.rs | 1 | //! Filter pushdown system for Python data sources. | COMMENT |
| LOW | …ates/sail-data-source/src/formats/python/datasource.rs | 21 | /// # Caching Strategy | COMMENT |
| LOW | …ates/sail-data-source/src/formats/python/datasource.rs | 121 | *cache = Some(ds.clone().unbind()); | COMMENT |
| LOW | crates/sail-data-source/src/formats/csv/projected.rs | 1 | //! Projected CSV decoding for all-`Utf8` file schemas. | COMMENT |
| LOW | crates/sail-data-source/src/formats/text/reader.rs | 121 | // [Credit]: https://github.com/apache/arrow-rs/blob/ebb6ede98b2b4d96a1a4f501a28ab42a3b937f73/arrow-csv/src/reader/mod.r | COMMENT |
| LOW | crates/sail-data-source/src/formats/parquet/read.rs | 441 | ) | COMMENT |
| LOW | crates/sail-data-source/src/listing/utils.rs | 21 | use crate::url::PathGlobFilter; | COMMENT |
| LOW | crates/sail-data-source/src/listing/utils.rs | 41 | /// | COMMENT |
| LOW | crates/sail-data-source/src/listing/utils.rs | 81 | // Spark has neither Utf8View nor BinaryView, so coerce view types to their plain | COMMENT |
| LOW | crates/sail-spark-connect/build.rs | 81 | version: String, | COMMENT |
| LOW | crates/sail-delta-lake/Cargo.toml | 1 | # Licensed under the Apache License, Version 2.0 (the "License"); | COMMENT |
| LOW | crates/sail-delta-lake/src/lib.rs | 1 | // Licensed under the Apache License, Version 2.0 (the "License"); | COMMENT |
| LOW | crates/sail-delta-lake/src/options.rs | 1 | // Licensed under the Apache License, Version 2.0 (the "License"); | COMMENT |
| LOW | crates/sail-delta-lake/src/datasource/actions.rs | 1 | // https://github.com/delta-io/delta-rs/blob/5575ad16bf641420404611d65f4ad7626e9acb16/LICENSE.txt | COMMENT |
| LOW | crates/sail-delta-lake/src/datasource/pruning.rs | 1 | // https://github.com/delta-io/delta-rs/blob/5575ad16bf641420404611d65f4ad7626e9acb16/LICENSE.txt | COMMENT |
| LOW | crates/sail-delta-lake/src/datasource/expressions.rs | 1 | // https://github.com/delta-io/delta-rs/blob/5575ad16bf641420404611d65f4ad7626e9acb16/LICENSE.txt | COMMENT |
| LOW | crates/sail-delta-lake/src/datasource/mod.rs | 1 | // https://github.com/delta-io/delta-rs/blob/5575ad16bf641420404611d65f4ad7626e9acb16/LICENSE.txt | COMMENT |
| LOW | crates/sail-delta-lake/src/datasource/schema.rs | 1 | // https://github.com/delta-io/delta-rs/blob/5575ad16bf641420404611d65f4ad7626e9acb16/LICENSE.txt | COMMENT |
| LOW | crates/sail-delta-lake/src/datasource/scan.rs | 1 | // https://github.com/delta-io/delta-rs/blob/5575ad16bf641420404611d65f4ad7626e9acb16/LICENSE.txt | COMMENT |
| LOW | crates/sail-delta-lake/src/transaction/protocol.rs | 1 | // https://github.com/delta-io/delta-rs/blob/5575ad16bf641420404611d65f4ad7626e9acb16/LICENSE.txt | COMMENT |
| LOW | crates/sail-delta-lake/src/transaction/mod.rs | 1 | // https://github.com/delta-io/delta-rs/blob/5575ad16bf641420404611d65f4ad7626e9acb16/LICENSE.txt | COMMENT |
| LOW | crates/sail-delta-lake/src/transaction/mod.rs | 1101 | // metadata: impl IntoIterator<Item = (String, serde_json::Value)>, | COMMENT |
| LOW | crates/sail-delta-lake/src/transaction/mod.rs | 1121 | // self.app_transaction.push(txn); | COMMENT |
| LOW | crates/sail-delta-lake/src/transaction/mod.rs | 1201 | // pub fn with_max_retries(mut self, max_retries: usize) -> Self { | COMMENT |
| LOW | …es/sail-delta-lake/src/transaction/conflict_checker.rs | 1 | // https://github.com/delta-io/delta-rs/blob/5575ad16bf641420404611d65f4ad7626e9acb16/LICENSE.txt | COMMENT |
| LOW | …es/sail-delta-lake/src/transaction/conflict_checker.rs | 81 | } | COMMENT |
| LOW | …es/sail-delta-lake/src/transaction/conflict_checker.rs | 421 | }; | COMMENT |
| LOW | …es/sail-delta-lake/src/transaction/conflict_checker.rs | 541 | Ok(()) | COMMENT |
| LOW | crates/sail-delta-lake/src/snapshot/config.rs | 1 | // https://github.com/delta-io/delta-rs/blob/5575ad16bf641420404611d65f4ad7626e9acb16/LICENSE.txt | COMMENT |
| LOW | crates/sail-delta-lake/src/snapshot/mod.rs | 1 | // https://github.com/delta-io/delta-rs/blob/5575ad16bf641420404611d65f4ad7626e9acb16/LICENSE.txt | COMMENT |
| 259 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | crates/sail-spark-connect/data/config/spark-3.5.json | 1081 | "doc": "When set to true, user is allowed to use org.apache.spark.sql.functions.udf(f: AnyRef, dataType: DataType) | CODE |
| CRITICAL | crates/sail-session/src/runtime.rs | 86 | let paths = self.config.runtime.temporary_files.paths.as_slice(); | CODE |
| CRITICAL | crates/sail-session/src/session_factory/server.rs | 120 | self.config.execution.checkpoint.path.clone(), | CODE |
| CRITICAL | …spark/catalog/hms/test_spark_to_sail_dsv2_roundtrip.py | 145 | hive_conf = jvm.org.apache.hadoop.hive.conf.HiveConf() | CODE |
| CRITICAL | …spark/catalog/hms/test_spark_to_sail_dsv2_roundtrip.py | 147 | client = jvm.org.apache.hadoop.hive.metastore.HiveMetaStoreClient(hive_conf) | CODE |
| CRITICAL | …tests/spark/catalog/hms/test_iceberg_catalog_commit.py | 39 | hive_conf = jvm.org.apache.hadoop.hive.conf.HiveConf() | CODE |
| CRITICAL | …tests/spark/catalog/hms/test_iceberg_catalog_commit.py | 41 | client = jvm.org.apache.hadoop.hive.metastore.HiveMetaStoreClient(hive_conf) | CODE |
| CRITICAL | scripts/spark-config/generate.py | 58 | clazz = spark._jvm.java.lang.Class.forName("org.apache.spark.sql.internal.SQLConf$") | CODE |
| CRITICAL | scripts/spark-config/generate.py | 64 | spark._jvm.org.apache.spark.util.Utils.classForName("org.apache.spark.sql.connect.config.Connect$", True, False) | CODE |
| CRITICAL | .github/actions/commit-workflow/action.yml | 35 | const workflows = await github.paginate(github.rest.actions.listWorkflowRunsForRepo.endpoint.merge({ | CODE |
| CRITICAL | .github/actions/commit-workflow/action.yml | 43 | const artifacts = await github.paginate(github.rest.actions.listWorkflowRunArtifacts.endpoint.merge({ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/sail-python-udf/src/python/spark.py | 1 | CODE | |
| LOW | python/pysail/flight/__init__.py | 1 | CODE | |
| LOW | python/pysail/tests/catalog/unity/conftest.py | 3 | CODE | |
| LOW | python/pysail/tests/catalog/unity/test_catalog.py | 3 | CODE | |
| LOW | python/pysail/tests/catalog/glue/conftest.py | 3 | CODE | |
| LOW | python/pysail/tests/catalog/glue/test_catalog.py | 3 | CODE | |
| LOW | python/pysail/tests/catalog/iceberg_rest/conftest.py | 3 | CODE | |
| LOW | …thon/pysail/tests/catalog/iceberg_rest/test_catalog.py | 3 | CODE | |
| LOW | python/pysail/tests/catalog/hms/conftest.py | 3 | CODE | |
| LOW | python/pysail/tests/catalog/hms/test_catalog.py | 3 | CODE | |
| LOW | python/pysail/tests/catalog/hms/test_kerberos.py | 3 | CODE | |
| LOW | python/pysail/tests/utils/test_proxy.py | 3 | CODE | |
| LOW | python/pysail/tests/celeborn/test_lifecycle.py | 3 | CODE | |
| LOW | python/pysail/tests/celeborn/test_shuffle.py | 3 | CODE | |
| LOW | python/pysail/tests/spark/conftest.py | 1 | CODE | |
| LOW | python/pysail/tests/spark/delta/conftest.py | 1 | CODE | |
| LOW | …k/delta/test_delta_multipart_checkpoint_delta_spark.py | 1 | CODE | |
| LOW | …n/pysail/tests/spark/delta/test_delta_metadata_only.py | 1 | CODE | |
| LOW | …s/spark/delta/test_delta_column_mapping_rename_drop.py | 1 | CODE | |
| LOW | python/pysail/tests/spark/delta/test_delta_is_empty.py | 1 | CODE | |
| LOW | …thon/pysail/tests/spark/delta/test_delta_inspection.py | 1 | CODE | |
| LOW | …hon/pysail/tests/spark/delta/test_delta_maintenance.py | 1 | CODE | |
| LOW | …s/spark/delta/test_delta_column_mapping_delta_spark.py | 3 | CODE | |
| LOW | …ail/tests/spark/delta/test_delta_metadata_aggregate.py | 1 | CODE | |
| LOW | …ts/spark/delta/test_delta_column_mapping_operations.py | 10 | CODE | |
| LOW | python/pysail/tests/spark/delta/test_delta_variant.py | 1 | CODE | |
| LOW | …n/pysail/tests/spark/delta/test_delta_user_metadata.py | 1 | CODE | |
| LOW | …/pysail/tests/spark/delta/test_delta_column_mapping.py | 1 | CODE | |
| LOW | …ta/test_delta_column_mapping_operations_delta_spark.py | 10 | CODE | |
| LOW | …thon/pysail/tests/spark/delta/test_delta_checkpoint.py | 1 | CODE | |
| LOW | python/pysail/tests/spark/datasource/test_jdbc_query.py | 1 | CODE | |
| LOW | python/pysail/tests/spark/datasource/test_jdbc.py | 7 | CODE | |
| LOW | python/pysail/tests/spark/datasource/test_vortex.py | 7 | CODE | |
| LOW | python/pysail/tests/spark/datasource/test_vortex.py | 13 | CODE | |
| LOW | python/pysail/tests/spark/optimizer/conftest.py | 1 | CODE | |
| LOW | python/pysail/tests/spark/optimizer/test_features.py | 1 | CODE | |
| LOW | …ail/tests/spark/optimizer/test_semi_join_build_side.py | 1 | CODE | |
| LOW | …ts/spark/catalog/unity/test_managed_delta_dataframe.py | 4 | CODE | |
| LOW | python/pysail/tests/spark/catalog/unity/conftest.py | 6 | CODE | |
| LOW | …/tests/spark/catalog/unity/test_column_mapped_delta.py | 8 | CODE | |
| LOW | python/pysail/tests/spark/catalog/glue/conftest.py | 3 | CODE | |
| LOW | …pysail/tests/spark/catalog/glue/test_iceberg_commit.py | 4 | CODE | |
| LOW | …n/pysail/tests/spark/catalog/glue/test_delta_commit.py | 4 | CODE | |
| LOW | …on/pysail/tests/spark/catalog/iceberg_rest/conftest.py | 7 | CODE | |
| LOW | …log/iceberg_rest/test_namespace_separator_incorrect.py | 1 | CODE | |
| LOW | …tests/spark/catalog/iceberg_rest/test_view_metadata.py | 1 | CODE | |
| LOW | …il/tests/spark/catalog/iceberg_rest/test_sort_order.py | 1 | CODE | |
| LOW | …pysail/tests/spark/catalog/iceberg_rest/test_nessie.py | 3 | CODE | |
| LOW | …atalog/iceberg_rest/test_namespace_separator_custom.py | 1 | CODE | |
| LOW | …il/tests/spark/catalog/iceberg_rest/test_lakekeeper.py | 1 | CODE | |
| LOW | …pysail/tests/spark/catalog/iceberg_rest/test_commit.py | 1 | CODE | |
| LOW | python/pysail/tests/spark/catalog/hms/conftest.py | 4 | CODE | |
| LOW | …ests/spark/catalog/hms/test_spark_to_sail_roundtrip.py | 8 | CODE | |
| LOW | …spark/catalog/hms/test_spark_to_sail_dsv2_roundtrip.py | 12 | CODE | |
| LOW | python/pysail/tests/spark/catalog/hms/test_hms_smoke.py | 4 | CODE | |
| LOW | …ysail/tests/spark/catalog/hms/test_hms_s3_roundtrip.py | 4 | CODE | |
| LOW | …ests/spark/catalog/hms/test_sail_to_spark_roundtrip.py | 8 | CODE | |
| LOW | …tests/spark/catalog/hms/test_iceberg_catalog_commit.py | 4 | CODE | |
| LOW | …/pysail/tests/spark/execution/test_shuffle_celeborn.py | 1 | CODE | |
| LOW | …n/pysail/tests/spark/execution/test_shuffle_storage.py | 1 | CODE | |
| 25 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/sail-python-udf/src/python/spark.py | 256 | """Converts data to string where the behavior is similar to the Java `Object.toString()` method.""" | STRING |
| HIGH | python/pysail/tests/spark/datasource/test_csv.py | 785 | # A BOM, records with and without quotes, CRLF and blank lines, empty fields (null), | COMMENT |
| HIGH⚡ | python/pysail/tests/spark/dataframe/test_to_arrow.py | 94 | "Spark emits struct<a: int32 not null, b: int32>, Sail emits struct<a: int32, b: int32>. " | CODE |
| HIGH⚡ | python/pysail/tests/spark/dataframe/test_to_arrow.py | 101 | assert str(table.schema.field(0).type) == "struct<a: int32 not null, b: int32>" | CODE |
| HIGH | python/pysail/tests/spark/dataframe/test_dataframe.py | 217 | spark.createDataFrame([(1, "x", None)], "a int not null, b string, c double") | CODE |
| HIGH | …n/pysail/tests/spark/catalog/iceberg_rest/test_ctas.py | 110 | assert actual.equals(pa.Table.from_pylist(expected_rows, schema=actual.schema)) | CODE |
| HIGH | python/pysail/tests/spark/catalog/hms/conftest.py | 554 | return value.toString() if hasattr(value, "toString") else str(value) | CODE |
| HIGH | python/pysail/tests/spark/function/test_jev.py | 537 | ("jev_score('text', 'rate', parse_json('[null]'))", "(?i)(criteria|level|null)"), | CODE |
| HIGH | …ail/tests/spark/iceberg/test_iceberg_read_evolution.py | 76 | (1, "[alpha, null, 中文]"), | CODE |
| HIGH | …ail/tests/spark/iceberg/test_iceberg_read_evolution.py | 79 | (4, "[null]"), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/sail-python-udf/src/python/spark.py | 817 | CODE | |
| LOW | crates/sail-python-udf/src/python/spark.py | 1003 | CODE | |
| LOW | crates/sail-python-udf/src/python/spark.py | 1335 | CODE | |
| LOW | python/pysail/tests/spark/conftest.py | 195 | CODE | |
| LOW | …k/delta/test_delta_multipart_checkpoint_delta_spark.py | 49 | CODE | |
| LOW | …s/spark/delta/test_delta_column_mapping_delta_spark.py | 25 | CODE | |
| LOW | …s/spark/delta/test_delta_column_mapping_delta_spark.py | 42 | CODE | |
| LOW | python/pysail/tests/spark/delta/test_delta_variant.py | 131 | CODE | |
| LOW | …n/pysail/tests/spark/delta/test_delta_user_metadata.py | 204 | CODE | |
| LOW | …sail/tests/spark/delta/test_delta_partition_pruning.py | 206 | CODE | |
| LOW | …sail/tests/spark/delta/test_delta_partition_pruning.py | 379 | CODE | |
| LOW | …sail/tests/spark/delta/test_delta_partition_pruning.py | 484 | CODE | |
| LOW | …/pysail/tests/spark/delta/test_delta_column_mapping.py | 20 | CODE | |
| LOW | …/pysail/tests/spark/delta/test_delta_column_mapping.py | 40 | CODE | |
| LOW | …/pysail/tests/spark/delta/test_delta_column_mapping.py | 53 | CODE | |
| LOW | …/pysail/tests/spark/delta/test_delta_column_mapping.py | 677 | CODE | |
| LOW | …pysail/tests/spark/delta/test_delta_schema_handling.py | 40 | CODE | |
| LOW | …thon/pysail/tests/spark/delta/test_delta_concurrent.py | 10 | CODE | |
| LOW | python/pysail/tests/spark/datasource/test_python.py | 643 | CODE | |
| LOW | python/pysail/tests/spark/datasource/test_python.py | 118 | CODE | |
| LOW | python/pysail/tests/spark/datasource/test_python.py | 687 | CODE | |
| LOW | python/pysail/tests/spark/datasource/test_socket.py | 51 | CODE | |
| LOW | python/pysail/tests/spark/dataframe/test_filter.py | 1785 | CODE | |
| LOW | …ests/spark/dataframe/test_scalar_subquery_cast_keys.py | 30 | CODE | |
| LOW | …tests/spark/catalog/iceberg_rest/test_reference_ddl.py | 55 | CODE | |
| LOW | …pysail/tests/spark/catalog/iceberg_rest/test_commit.py | 616 | CODE | |
| LOW | …pysail/tests/spark/catalog/iceberg_rest/test_commit.py | 877 | CODE | |
| LOW | …on/pysail/tests/spark/function/test_input_file_name.py | 245 | CODE | |
| LOW | …on/pysail/tests/spark/function/test_input_file_name.py | 474 | CODE | |
| LOW | …il/tests/spark/iceberg/test_iceberg_equality_delete.py | 360 | CODE | |
| LOW | …il/tests/spark/iceberg/test_iceberg_metadata_tables.py | 446 | CODE | |
| LOW | …/pysail/tests/spark/iceberg/test_iceberg_procedures.py | 478 | CODE | |
| LOW | python/pysail/tests/spark/iceberg/test_iceberg_reads.py | 115 | CODE | |
| LOW | …pysail/tests/spark/iceberg/test_iceberg_dml_metrics.py | 324 | CODE | |
| LOW | …hon/pysail/tests/spark/iceberg/test_iceberg_pruning.py | 164 | CODE | |
| LOW | …hon/pysail/tests/spark/iceberg/test_iceberg_pruning.py | 201 | CODE | |
| LOW | …/pysail/tests/spark/udf/test_pandas_scalar_batching.py | 129 | CODE | |
| LOW | python/pysail/testing/snapshot/yaml.py | 171 | CODE | |
| LOW | python/pysail/testing/utils/proxy.py | 469 | CODE | |
| LOW | python/pysail/testing/spark/utils/files.py | 33 | CODE | |
| LOW | python/pysail/testing/spark/utils/files.py | 37 | CODE | |
| LOW | python/pysail/testing/spark/steps/plan.py | 13 | CODE | |
| LOW | python/pysail/testing/spark/steps/plan.py | 164 | CODE | |
| LOW | python/pysail/testing/spark/steps/iceberg.py | 542 | CODE | |
| LOW | python/pysail/testing/spark/steps/iceberg.py | 923 | CODE | |
| LOW | python/pysail/testing/spark/steps/iceberg.py | 973 | CODE | |
| LOW | python/pysail/testing/spark/steps/delta.py | 234 | CODE | |
| LOW | python/pysail/testing/spark/steps/delta.py | 531 | CODE | |
| LOW | python/pysail/testing/spark/steps/delta.py | 571 | CODE | |
| LOW | python/pysail/testing/spark/steps/delta.py | 683 | CODE | |
| LOW | python/pysail/examples/spark/tpch.py | 106 | CODE | |
| LOW | python/pysail/examples/spark/tpch.py | 29 | CODE | |
| LOW | python/pysail/examples/spark/tpch.py | 64 | CODE | |
| LOW | python/pysail/examples/spark/tpch.py | 86 | CODE | |
| LOW | python/pysail/spark/datasource/jdbc.py | 497 | CODE | |
| LOW | python/pysail/spark/utils/_function_scanner.py | 72 | CODE | |
| LOW | scripts/common-gold-data/count_missing_functions.py | 8 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | python/pysail/tests/spark/iceberg/utils.py | 51 | except Exception: # noqa: S110, BLE001 | CODE |
| HIGH | python/pysail/testing/jev.py | 95 | except (BrokenPipeError, ConnectionResetError): | CODE |
| HIGH | python/pysail/testing/spark/utils/files.py | 54 | except (OSError, PermissionError): | CODE |
| HIGH | python/pysail/testing/spark/steps/delta.py | 269 | except json.JSONDecodeError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/sail-data-source/src/formats/python/discovery.py | 24 | except Exception: # noqa: BLE001 | CODE |
| LOW | …k/delta/test_delta_multipart_checkpoint_delta_spark.py | 44 | except Exception: # noqa: BLE001 | CODE |
| LOW | …thon/pysail/tests/spark/delta/test_delta_concurrent.py | 28 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …thon/pysail/tests/spark/delta/test_delta_concurrent.py | 80 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …thon/pysail/tests/spark/delta/test_delta_concurrent.py | 114 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | python/pysail/tests/spark/datasource/test_python.py | 539 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | …on/pysail/tests/spark/catalog/iceberg_rest/conftest.py | 102 | except Exception: | CODE |
| LOW | python/pysail/tests/spark/catalog/hms/conftest.py | 153 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW⚡ | python/pysail/tests/spark/catalog/hms/conftest.py | 468 | except Exception: # noqa: BLE001 | CODE |
| LOW | python/pysail/tests/spark/iceberg/utils.py | 51 | except Exception: # noqa: S110, BLE001 | CODE |
| LOW | python/pysail/testing/containers/hms_probe.py | 34 | except Exception as error: # noqa: BLE001 | CODE |
| LOW | python/pysail/testing/containers/hms_probe.py | 86 | except Exception as error: | CODE |
| LOW | python/pysail/testing/containers/unity.py | 76 | except Exception: | CODE |
| LOW | python/pysail/testing/spark/steps/delta.py | 219 | except Exception as e: | CODE |
| LOW | python/pysail/testing/spark/steps/sql.py | 109 | except Exception: # noqa: BLE001 | CODE |
| LOW⚡ | python/pysail/spark/datasource/vortex.py | 199 | except Exception as e: | CODE |
| LOW | python/pysail/spark/datasource/vortex.py | 256 | except Exception as e: | CODE |
| LOW⚡ | python/pysail/spark/datasource/jdbc.py | 245 | except Exception as e: | CODE |
| LOW | python/pysail/spark/datasource/jdbc.py | 447 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | python/pysail/tests/flight/test_flight.py | 157 | # Create a temp view | COMMENT |
| MEDIUM | …thon/pysail/tests/spark/delta/test_delta_concurrent.py | 97 | # Create the table first with a single write (version 0). | COMMENT |
| MEDIUM | scripts/spark-tests/run-tests.sh | 21 | # Define a few environment variables if they are not set. | COMMENT |
| MEDIUM | scripts/spark-tests/run-tests.sh | 40 | # Define the directory for test logs. The `tmp/` directory is in `.gitignore`. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/guide/integrations/langchain.md | 120 | export OPENAI_API_KEY="your-api-key" | CODE |
| HIGH | docs/guide/integrations/jev.md | 68 | export TYPESAFE_API_KEY='<your-api-key>' | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/sail-data-source/src/formats/python/discovery.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | crates/sail-cli/src/python/spark_mcp_server.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | python/pysail/__init__.py | 7 | __all__ = ["__version__"] | CODE |
| LOW | python/pysail/flight/__init__.py | 5 | __all__ = [ | CODE |
| LOW⚡ | python/pysail/tests/spark/datasource/test_python.py | 47 | def _update_test_state(path: str, **updates: Any) -> None: | CODE |
| LOW | …pysail/tests/spark/catalog/glue/test_iceberg_commit.py | 37 | def _update_glue_parameters(moto_endpoint: str, database: str, table: str, parameters: dict[str, str]) -> None: | CODE |
| LOW | python/pysail/examples/spark/compatibility_check.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | python/pysail/spark/__init__.py | 5 | __all__ = [ | CODE |
| LOW | python/pysail/spark/utils/_function_scanner.py | 20 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/guide/integrations/mcp-server.md | 58 | Please note that there is no guardrail right now to prevent Claude from generating SQL statements that will alter your d | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/sail-delta-lake/src/checkpoint/mod.rs | 700 | // Step 1: Write add/remove actions into a sidecar file using batched writes. | COMMENT |
| LOW | crates/sail-delta-lake/src/checkpoint/mod.rs | 744 | // Step 2: Build the main V2 checkpoint with header actions + sidecar refs. | COMMENT |
| LOW | crates/sail-delta-lake/src/checkpoint/mod.rs | 811 | // Step 3: Write _last_checkpoint hint pointing to the UUID-named checkpoint. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/sail-delta-lake/src/checkpoint/mod.rs | 700 | // Step 1: Write add/remove actions into a sidecar file using batched writes. | COMMENT |
| LOW | crates/sail-delta-lake/src/checkpoint/mod.rs | 744 | // Step 2: Build the main V2 checkpoint with header actions + sidecar refs. | COMMENT |
| LOW | crates/sail-delta-lake/src/checkpoint/mod.rs | 811 | // Step 3: Write _last_checkpoint hint pointing to the UUID-named checkpoint. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/sail-plan/data/functions/scalar/misc.yaml | 284 | > SELECT from_protobuf(s, 'Person', '/path/to/descriptor.desc', map()) IS NULL AS result FROM (SELECT NAMED_ST | CODE |
| LOW | …l-spark-connect/tests/gold_data/function/protobuf.json | 5 | "query": "SELECT from_protobuf(s, 'Person', '/path/to/descriptor.desc', map()) IS NULL AS result FROM (SELECT NA | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/sail-python/src/globals.rs | 22 | // TODO: implement a systematic way to manage static config | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …pysail/tests/spark/iceberg/test_iceberg_dml_metrics.py | 42 | CODE |