)]}'
{
  "commit": "f3a0fe3bcca2770d9b0c830f988d18374bb5e10e",
  "tree": "3f8796d80c755df14d1812505b0f5dc32b30b39b",
  "parents": [
    "0541572d7c56a992fc93902291fd57b23f2ebad4"
  ],
  "author": {
    "name": "ZIHAN DAI",
    "email": "99155080+PDGGK@users.noreply.github.com",
    "time": "Fri Jul 24 19:21:44 2026 +1000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Jul 24 17:21:44 2026 +0800"
  },
  "message": "Add date_bin aggregation and telemetry key discovery to the Table Mode DAOs (#115)\n\n* Add date_bin aggregation and telemetry key discovery to the Table Mode DAOs\n\nImplements the aggregation and key-discovery parts of the ThingsBoard\nTable Mode integration on top of the merged BaseDao / TimeseriesDao /\nLatestDao:\n\n- IoTDBTableTimeseriesDao: date_bin bucketed aggregation for the\n  aggregated read path, covering fixed-width (millisecond) buckets and\n  calendar buckets (WEEK / MONTH / QUARTER) with time-zone-aware\n  boundaries computed on the Java side to avoid time-zone drift.\n- IoTDBTableLatestDao: telemetry key discovery\n  (findAllKeysByEntityIds / findAllKeysByTenant) now unions the telemetry\n  and telemetry_latest sources so latest-only keys are also discovered.\n\nAdds unit tests and container integration tests.\n\nSigned-off-by: Zihan Dai \u003c99155080+PDGGK@users.noreply.github.com\u003e\n\n* Re-sum long-only SUM buckets on a separate pooled session\n\nexactLongSum re-queried the bucket\u0027s raw long_v values on the same\nITableSession that was iterating the outer aggregate result set. IoTDB\nTable Mode does not guarantee two concurrently open result sets on one\nsession, so the re-sum fallback now checks out its own pooled session\nand SumReSumContext no longer carries the session.\n\nAddresses review feedback on #115.\n\nSigned-off-by: Zihan Dai \u003c99155080+PDGGK@users.noreply.github.com\u003e\n\n---------\n\nSigned-off-by: Zihan Dai \u003c99155080+PDGGK@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "47865e1d29136d62e1f82f8c94344fbf43387b12",
      "old_mode": 33188,
      "old_path": "iotdb-thingsboard-table/src/main/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableLatestDao.java",
      "new_id": "c9ef2540b8576acbb42275f7a0ed7fa764f6dc83",
      "new_mode": 33188,
      "new_path": "iotdb-thingsboard-table/src/main/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableLatestDao.java"
    },
    {
      "type": "modify",
      "old_id": "9dff89c39684c75c8a0bbf2558628f8f3ee953ef",
      "old_mode": 33188,
      "old_path": "iotdb-thingsboard-table/src/main/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableTimeseriesDao.java",
      "new_id": "216ffcdbced84b5f7743260257e8f02f1d8a2fb1",
      "new_mode": 33188,
      "new_path": "iotdb-thingsboard-table/src/main/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableTimeseriesDao.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c6a02cb2c5b061363b946345800276dfa655e61b",
      "new_mode": 33188,
      "new_path": "iotdb-thingsboard-table/src/provided/java/org/thingsboard/server/dao/util/TimeUtils.java"
    },
    {
      "type": "modify",
      "old_id": "7d56ee04e7c1fa07319eaad58a4a2c6b5dd9f0ab",
      "old_mode": 33188,
      "old_path": "iotdb-thingsboard-table/src/test/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableLatestDaoIT.java",
      "new_id": "a4c329ad72a478223d5efc27a38e43ebb7673f34",
      "new_mode": 33188,
      "new_path": "iotdb-thingsboard-table/src/test/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableLatestDaoIT.java"
    },
    {
      "type": "modify",
      "old_id": "8bc7b33c348e8463355b0dbc67ccb92415b5ef5c",
      "old_mode": 33188,
      "old_path": "iotdb-thingsboard-table/src/test/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableLatestDaoTest.java",
      "new_id": "39c59592d7f4c78bd7c226176e5652170d86899b",
      "new_mode": 33188,
      "new_path": "iotdb-thingsboard-table/src/test/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableLatestDaoTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3e65e5027188dbf0285dec474f436fe482e205cf",
      "new_mode": 33188,
      "new_path": "iotdb-thingsboard-table/src/test/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableTimeseriesAggregationIT.java"
    },
    {
      "type": "modify",
      "old_id": "1f5dcb2f2b10f0f155a73dce8a74d963e597019b",
      "old_mode": 33188,
      "old_path": "iotdb-thingsboard-table/src/test/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableTimeseriesDaoIT.java",
      "new_id": "46e0aad8240604d8a621bd745680004133e77d1a",
      "new_mode": 33188,
      "new_path": "iotdb-thingsboard-table/src/test/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableTimeseriesDaoIT.java"
    },
    {
      "type": "modify",
      "old_id": "4a921658ab69591784e47e0507bb7868b6aa25ad",
      "old_mode": 33188,
      "old_path": "iotdb-thingsboard-table/src/test/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableTimeseriesDaoTest.java",
      "new_id": "9672f5077563bfed00a00fde6f4a642398f900d5",
      "new_mode": 33188,
      "new_path": "iotdb-thingsboard-table/src/test/java/org/apache/iotdb/extras/thingsboard/table/IoTDBTableTimeseriesDaoTest.java"
    }
  ]
}
