)]}'
{
  "commit": "dc0d35a2cdb47f96a04c98d5cf1e7e79b0ba1467",
  "tree": "b10471018d2fac2e29cb4672dd57307ee68c5e9f",
  "parents": [
    "d6ef9bcb33857b4a350fbe749b93b27345bc817b"
  ],
  "author": {
    "name": "kosiew",
    "email": "kosiew@gmail.com",
    "time": "Mon Jun 16 19:53:40 2025 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Jun 16 07:53:40 2025 -0400"
  },
  "message": "Add Interruptible Query Execution in Jupyter via KeyboardInterrupt Support (#1141)\n\n* fix: enhance error handling in async wait_for_future function\n\n* feat: implement async execution for execution plans in PySessionContext\n\n* fix: improve error message for execution failures in PySessionContext\n\n* fix: enhance error handling and improve execution plan retrieval in PyDataFrame\n\n* fix: ensure \u0027static lifetime for futures in wait_for_future function\n\n* fix: handle potential errors when caching DataFrame and retrieving execution plan\n\n* fix: flatten batches in PyDataFrame to ensure proper schema conversion\n\n* fix: correct error handling in batch processing for schema conversion\n\n* fix: flatten nested structure in PyDataFrame to ensure proper RecordBatch iteration\n\n* fix: improve error handling in PyDataFrame stream execution\n\n* fix: add utility to get Tokio Runtime with time enabled and update wait_for_future to use it\n\n* fix: store result of converting RecordBatches to PyArrow for debugging\n\n* fix: handle error from wait_for_future in PyDataFrame collect method\n\n* fix: propagate error from wait_for_future in collect_partitioned method\n\n* fix: enable IO in Tokio runtime with time support\n\n* main  register_listing_table\n\n* Revert \"main  register_listing_table\"\n\nThis reverts commit 52a5efe2001455a3ad881968d468e5c7538e1ced.\n\n* fix: propagate error correctly from wait_for_future in PySessionContext methods\n\n* fix: simplify error handling in PySessionContext by unwrapping wait_for_future result\n\n* test: add interruption handling test for long-running queries in DataFusion\n\n* test: move test_collect_interrupted to test_dataframe.py\n\n* fix: add const for interval in wait_for_future utility\n\n* fix: use get_tokio_runtime instead of the custom  get_runtime\n\n* Revert \"fix: use get_tokio_runtime instead of the custom  get_runtime\"\n\nThis reverts commit ca2d89289d0a702bbb38f34e88fb78ad61d20647.\n\n* fix: use get_tokio_runtime instead of the custom  get_runtime\n\n* .\n\n* Revert \".\"\n\nThis reverts commit b8ce3e446b74aac7a76f1cc8ce6501b453d4f13c.\n\n* fix: improve query interruption handling in test_collect_interrupted\n\n* fix: ensure proper handling of query interruption in test_collect_interrupted\n\n* fix: improve error handling in database table retrieval\n\n* refactor: add helper for async move\n\n* Revert \"refactor: add helper for async move\"\n\nThis reverts commit faabf6dd90ac505934e7cb6dc3b69fddbe89e661.\n\n* move py_err_to_datafusion_err to errors.rs\n\n* add create_csv_read_options\n\n* fix\n\n* create_csv_read_options -\u003e PyDataFusionResult\n\n* revert to before create_csv_read_options\n\n* refactor: simplify file compression type parsing in PySessionContext\n\n* fix: parse_compression_type once only\n\n* add create_ndjson_read_options\n\n* refactor comment for clarity in wait_for_future function\n\n* refactor wait_for_future to avoid spawn\n\n* remove unused py_err_to_datafusion_err function\n\n* add comment to clarify error handling in next method of PyRecordBatchStream\n\n* handle error from wait_for_future in PySubstraitSerializer\n\n* clarify comment on future pinning in wait_for_future function\n\n* refactor wait_for_future to use Duration for signal check interval\n\n* handle error from wait_for_future in count method of PyDataFrame\n\n* fix ruff errors\n\n* fix clippy errors\n\n* remove unused get_and_enter_tokio_runtime function and simplify wait_for_future\n\n* Refactor async handling in PySessionContext and PyDataFrame\n\n- Simplified async handling by removing unnecessary cloning of strings and context in various methods.\n- Streamlined the use of `wait_for_future` to directly handle futures without intermediate variables.\n- Improved error handling by directly propagating results from futures.\n- Enhanced readability by reducing boilerplate code in methods related to reading and writing data.\n- Updated the `wait_for_future` function to improve signal checking and future handling.\n\n* Organize imports in utils.rs for improved readability\n\n* map_err instead of panic\n\n* Fix error handling in async stream execution for PySessionContext and PyDataFrame",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dd5f962b20e6fb54314a17a9d134a44fcb23f673",
      "old_mode": 33188,
      "old_path": "python/tests/test_dataframe.py",
      "new_id": "64220ce9c52b953a0ac4613fb245cb43e25b2b39",
      "new_mode": 33188,
      "new_path": "python/tests/test_dataframe.py"
    },
    {
      "type": "modify",
      "old_id": "1e189a5aab7cb1c639af48bf5ba64d250f730938",
      "old_mode": 33188,
      "old_path": "src/catalog.rs",
      "new_id": "83f8d08cbf6e3d1c099c6f31344a2899eee6b537",
      "new_mode": 33188,
      "new_path": "src/catalog.rs"
    },
    {
      "type": "modify",
      "old_id": "cc3d8e8e9d382df808de72ad426dc851af72ca74",
      "old_mode": 33188,
      "old_path": "src/context.rs",
      "new_id": "b0af566e45a83670d833124fe17193ae65558568",
      "new_mode": 33188,
      "new_path": "src/context.rs"
    },
    {
      "type": "modify",
      "old_id": "ece8c4e0f89ca5e703c636c6b44ce2a962c72277",
      "old_mode": 33188,
      "old_path": "src/dataframe.rs",
      "new_id": "7711a0782f1a4e97c82d55678eefe36d138c69b6",
      "new_mode": 33188,
      "new_path": "src/dataframe.rs"
    },
    {
      "type": "modify",
      "old_id": "ec61c263f763ca182487138e9a80fbdb1a4ad9ba",
      "old_mode": 33188,
      "old_path": "src/record_batch.rs",
      "new_id": "a85f0542380640520db4e03f734a77084fb75a65",
      "new_mode": 33188,
      "new_path": "src/record_batch.rs"
    },
    {
      "type": "modify",
      "old_id": "1fefc0bbda2690851b1e64718b25b69a4669d1d7",
      "old_mode": 33188,
      "old_path": "src/substrait.rs",
      "new_id": "4da3738fb3205f0b07d4b0cd1454a70afd6f9186",
      "new_mode": 33188,
      "new_path": "src/substrait.rs"
    },
    {
      "type": "modify",
      "old_id": "0a24ab25474477c9875e7bd4b4b9dbf9db47c281",
      "old_mode": 33188,
      "old_path": "src/utils.rs",
      "new_id": "90d654385d884108a898f83ca19da8182ba6b563",
      "new_mode": 33188,
      "new_path": "src/utils.rs"
    }
  ]
}
