)]}'
{
  "commit": "7a9a0f648d53d96dcbec434a6bf93c3138cc2060",
  "tree": "5fdbdfcd8efc475df0a02ecd6498701bc8a4c763",
  "parents": [
    "b789c4061f43aeacc2eb1b303ce46eeab12ef376"
  ],
  "author": {
    "name": "Lalit Maganti",
    "email": "lalitm@google.com",
    "time": "Wed Aug 26 17:10:36 2026"
  },
  "committer": {
    "name": "Lalit Maganti",
    "email": "lalitm@google.com",
    "time": "Wed Aug 26 17:38:15 2026"
  },
  "message": "tp: scan dataframes without SQLite\n\nA query which only reads a dataframe gives SQLite nothing to do. The values\nalready have storage types and are laid out the way a batch needs them.\n\nDataframeScan returns views over the dataframe\u0027s storage without copying.\nColumns without one slot per row are expanded one batch at a time into a\nreused buffer, so they still look dense to downstream operators.\n\nThe planner only takes this path for passthrough dataframes. Filtering,\njoining, grouping, and expressions still go through SQLite.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0a6f18ba6d143d462fcce2ccf2c43834382e6c7c",
      "old_mode": 33188,
      "old_path": "Android.bp",
      "new_id": "3dd43eb4ddab1749c1f67d11f694cba17d38ff48",
      "new_mode": 33188,
      "new_path": "Android.bp"
    },
    {
      "type": "modify",
      "old_id": "bfce9c726c7c1349d032a478f73b23de0a7aa616",
      "old_mode": 33188,
      "old_path": "src/trace_processor/core/dataframe/dataframe.h",
      "new_id": "29294c16408119aa713a0cc0b4dc99a42b33c249",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/dataframe/dataframe.h"
    },
    {
      "type": "modify",
      "old_id": "f57e7396b129e759bef219da424667ed83c39121",
      "old_mode": 33188,
      "old_path": "src/trace_processor/core/exec/BUILD.gn",
      "new_id": "718b15b6c42a1e3c6cda5cd238a5cfa8597c626a",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/exec/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "a59b513c2bb1c407477dfe0ea0b8bba07cf0f14d",
      "old_mode": 33188,
      "old_path": "src/trace_processor/core/exec/column_view.h",
      "new_id": "e58f43d5aaecd2c1d4654054c5d353258c5684e4",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/exec/column_view.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1af95a2ad9556d4a2684e1efd59f71ee225d3123",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/exec/dataframe_scan.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e4ac7187a13b056e94a8fa60a1ed70a5cb5ac0f5",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/exec/dataframe_scan.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a82a1e5cbced494128cb868f3961d8c4a572f5eb",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/exec/dataframe_scan_unittest.cc"
    }
  ]
}
