)]}'
{
  "log": [
    {
      "commit": "b164888ad94d3b70d65c5ab733b7c1f7a68c51ca",
      "tree": "8417987a36f061416d9902b34c39c59fc5aa22c3",
      "parents": [
        "cb13310e16132bc63ca1083aaec2f7ef0a101714"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed May 06 12:11:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 12:11:38 2026 +0800"
      },
      "message": "rename: change package name to @iotdb/client (#6)\n\nThe old name `iotdb-client-nodejs` was already taken on npm.\nUse scoped package `@iotdb/client` under the @iotdb org instead."
    },
    {
      "commit": "cb13310e16132bc63ca1083aaec2f7ef0a101714",
      "tree": "83947d5df446f924dba7c5543e2657a85f583e65",
      "parents": [
        "dddd18a627036f4f7d618b6d03647a90e4d3bccc"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Apr 30 18:57:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 18:57:39 2026 +0800"
      },
      "message": "Update .asf.yaml"
    },
    {
      "commit": "dddd18a627036f4f7d618b6d03647a90e4d3bccc",
      "tree": "3a1e52715c86dc0361f96ae2167773d30d97452d",
      "parents": [
        "991c9b7351d416a39cbc454a89286a46583b1dab",
        "f0fbb77be1fdac7d25852b397227d3e8305b710a"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Apr 30 18:56:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 18:56:24 2026 +0800"
      },
      "message": "Merge pull request #5 from apache/dependabot/npm_and_yarn/esbuild-0.25.0\n\nBump esbuild from 0.19.12 to 0.25.0"
    },
    {
      "commit": "991c9b7351d416a39cbc454a89286a46583b1dab",
      "tree": "4754c34a7027a4f5a08bdfa53c98d6c4ff490828",
      "parents": [
        "df86da853ef5d86bfc8f1615247b0cad4fd89c22",
        "f802354d0bc2e11825d82c74195396a8d954c469"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Apr 30 18:31:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 18:31:07 2026 +0800"
      },
      "message": "Merge pull request #4 from apache/dependabot/npm_and_yarn/minimatch-3.1.5\n\nBump minimatch from 3.1.2 to 3.1.5"
    },
    {
      "commit": "df86da853ef5d86bfc8f1615247b0cad4fd89c22",
      "tree": "93fc985db37970189865634b5eabd52f3963964b",
      "parents": [
        "c1de6a320299a015dbab5548a2c93a6f81b9d869",
        "a644a059c75b7123502d01630e37b484459a5bbd"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Apr 30 18:30:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 18:30:48 2026 +0800"
      },
      "message": "Merge pull request #3 from apache/dependabot/npm_and_yarn/handlebars-4.7.9\n\nBump handlebars from 4.7.8 to 4.7.9"
    },
    {
      "commit": "f0fbb77be1fdac7d25852b397227d3e8305b710a",
      "tree": "1b8b8ac23fdfe164212fdd8b62cacf5bfbffeee0",
      "parents": [
        "7fb43e4b69a1c38a2819dced95330452182b255b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Apr 30 10:30:00 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 10:30:00 2026 +0000"
      },
      "message": "Bump esbuild from 0.19.12 to 0.25.0\n\nBumps [esbuild](https://github.com/evanw/esbuild) from 0.19.12 to 0.25.0.\n- [Release notes](https://github.com/evanw/esbuild/releases)\n- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG-2024.md)\n- [Commits](https://github.com/evanw/esbuild/compare/v0.19.12...v0.25.0)\n\n---\nupdated-dependencies:\n- dependency-name: esbuild\n  dependency-version: 0.25.0\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "c1de6a320299a015dbab5548a2c93a6f81b9d869",
      "tree": "18d7c6dd5844cdc784b8f4e73075eb9a8b1e1144",
      "parents": [
        "7fb43e4b69a1c38a2819dced95330452182b255b"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Apr 30 18:29:14 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Apr 30 18:29:54 2026 +0800"
      },
      "message": "fix: remove unsupported default_branch from .asf.yaml\n"
    },
    {
      "commit": "f802354d0bc2e11825d82c74195396a8d954c469",
      "tree": "8206a27f9c7807b90bd63edbbcf4fc48ac3e94b5",
      "parents": [
        "7fb43e4b69a1c38a2819dced95330452182b255b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Apr 30 10:29:39 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 10:29:39 2026 +0000"
      },
      "message": "Bump minimatch from 3.1.2 to 3.1.5\n\nBumps [minimatch](https://github.com/isaacs/minimatch) from 3.1.2 to 3.1.5.\n- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)\n- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5)\n\n---\nupdated-dependencies:\n- dependency-name: minimatch\n  dependency-version: 3.1.5\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "7fb43e4b69a1c38a2819dced95330452182b255b",
      "tree": "8de8a9e381c047d271040230dd7f5b67913155de",
      "parents": [
        "5a19b91606f3abdb0d34092661d9c2d969d056c5",
        "148b2e218461ffd9c5c01e6fbbd13625ab3fb7cf"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Apr 30 18:28:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 18:28:47 2026 +0800"
      },
      "message": "Merge pull request #2 from apache/dependabot/npm_and_yarn/flatted-3.4.2\n\nBump flatted from 3.3.3 to 3.4.2"
    },
    {
      "commit": "5a19b91606f3abdb0d34092661d9c2d969d056c5",
      "tree": "fce8ef579e936cb4298e27cf3039d1bf86553605",
      "parents": [
        "a87f338066a5296dca35ff444491fabaacdb63d4",
        "290e39f546e3ea4d1d0b43078359ff7768ccc329"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Apr 30 18:28:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 18:28:22 2026 +0800"
      },
      "message": "Merge pull request #1 from apache/dependabot/npm_and_yarn/multi-bf05dc1ecf\n\nBump picomatch"
    },
    {
      "commit": "a644a059c75b7123502d01630e37b484459a5bbd",
      "tree": "4f2a23f0086b3ff0e89f78fcd731c79d172f248e",
      "parents": [
        "a87f338066a5296dca35ff444491fabaacdb63d4"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Apr 30 10:25:42 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 10:25:42 2026 +0000"
      },
      "message": "Bump handlebars from 4.7.8 to 4.7.9\n\nBumps [handlebars](https://github.com/handlebars-lang/handlebars.js) from 4.7.8 to 4.7.9.\n- [Release notes](https://github.com/handlebars-lang/handlebars.js/releases)\n- [Changelog](https://github.com/handlebars-lang/handlebars.js/blob/v4.7.9/release-notes.md)\n- [Commits](https://github.com/handlebars-lang/handlebars.js/compare/v4.7.8...v4.7.9)\n\n---\nupdated-dependencies:\n- dependency-name: handlebars\n  dependency-version: 4.7.9\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "148b2e218461ffd9c5c01e6fbbd13625ab3fb7cf",
      "tree": "cfe0ae614663c32f24a1e8c001ca4e2dd2bb8eaf",
      "parents": [
        "a87f338066a5296dca35ff444491fabaacdb63d4"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Apr 30 10:25:29 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 10:25:29 2026 +0000"
      },
      "message": "Bump flatted from 3.3.3 to 3.4.2\n\nBumps [flatted](https://github.com/WebReflection/flatted) from 3.3.3 to 3.4.2.\n- [Commits](https://github.com/WebReflection/flatted/compare/v3.3.3...v3.4.2)\n\n---\nupdated-dependencies:\n- dependency-name: flatted\n  dependency-version: 3.4.2\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "290e39f546e3ea4d1d0b43078359ff7768ccc329",
      "tree": "fce8ef579e936cb4298e27cf3039d1bf86553605",
      "parents": [
        "a87f338066a5296dca35ff444491fabaacdb63d4"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Apr 30 10:25:25 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 10:25:25 2026 +0000"
      },
      "message": "Bump picomatch\n\nBumps  and [picomatch](https://github.com/micromatch/picomatch). These dependencies needed to be updated together.\n\nUpdates `picomatch` from 2.3.1 to 2.3.2\n- [Release notes](https://github.com/micromatch/picomatch/releases)\n- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)\n\nUpdates `picomatch` from 4.0.3 to 4.0.4\n- [Release notes](https://github.com/micromatch/picomatch/releases)\n- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)\n\n---\nupdated-dependencies:\n- dependency-name: picomatch\n  dependency-version: 2.3.2\n  dependency-type: indirect\n- dependency-name: picomatch\n  dependency-version: 4.0.4\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "a87f338066a5296dca35ff444491fabaacdb63d4",
      "tree": "d84dd522d8acbd240512368df60de05d5fe56028",
      "parents": [
        "78ab71a60003665a38ef255728a9c8a723d008aa"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Apr 30 18:21:41 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Apr 30 18:21:41 2026 +0800"
      },
      "message": "chore: prepare for Apache repository initialization\n\n- Add .asf.yaml with default_branch\u003ddevelop and GitHub config\n- Remove outdated docs: AI-generated reports, analysis, and plans\n- Remove redundant benchmark comparison scripts and test harness\n- Remove E2E_TEST_STATUS.md (stale work log)\n- Update docs/README.md index to reflect current file structure\n- Update CLAUDE.md: fix build description, add docker-compose-1c3d,\n  add TableSession.ts to key files, remove env-specific rules\n"
    },
    {
      "commit": "78ab71a60003665a38ef255728a9c8a723d008aa",
      "tree": "99a113612bbff0e9743706c9f996aa8514384144",
      "parents": [
        "77b331a23be1dd40fd66ee6a37ee421ed1f5cf5e"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Feb 05 18:58:38 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Feb 05 18:58:38 2026 +0800"
      },
      "message": "fix: improve error handling and prevent race conditions\n\n- Fix race condition in getSession() by using atomic shift() with null check\n- Add OOM error handling in BufferPool.acquire() with clear error messages\n- Improve insertTabletsParallel() error reporting with failed indices and details\n- Add maxRows limit to toColumnar() to prevent memory exhaustion (default 100K)\n"
    },
    {
      "commit": "77b331a23be1dd40fd66ee6a37ee421ed1f5cf5e",
      "tree": "7cfc6d1afea56dc0d1d614fe92c781c3c6af65df",
      "parents": [
        "15ac4e4ea36a42d1573595202b656a8365a45eeb"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Feb 05 17:03:50 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Feb 05 17:03:50 2026 +0800"
      },
      "message": "Optimize benchmark with multi-process cluster mode for 5.42M pts/s throughput\n\n- Add benchmark-table-cluster.js: Multi-process mode using Node.js cluster\n  module to overcome single-thread limitation (8 workers × 10 clients)\n- Refactor benchmark-table.js and benchmark-tree.js: Streaming batch\n  processing to avoid OOM for large-scale tests (billions of points)\n- Add executeBatchInsert and runBatchBenchmark to benchmark-core.js\n- Update docs/performance-guide.md with benchmark results and best practices\n- Update benchmark/README.md with cluster mode documentation\n- Add CLAUDE.md for Claude Code guidance\n\nPerformance results:\n- Single process: 4.28M pts/s (optimized tablet size)\n- Multi-process (8 workers): 5.42M pts/s (best configuration)\n- Node.js vs Java gap: ~11x (architectural limitation)\n\nKey optimizations:\n- Deterministic sensor type distribution (no random shuffle)\n- Optimal tablet size: 25K points (500 rows × 50 sensors)\n- Pre-acquired sessions to reduce connection overhead\n- Streaming batch processing per-loop to prevent memory exhaustion\n"
    },
    {
      "commit": "15ac4e4ea36a42d1573595202b656a8365a45eeb",
      "tree": "87fb1cc39b9df917bca1b7f3a9eb3e5318ce1259",
      "parents": [
        "864dd2be80efed67c576d3dc2698b2b5766720c0"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Feb 05 14:46:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 05 14:46:13 2026 +0800"
      },
      "message": "Add batch insert APIs and concurrent execution utilities for Node.js optimization (#13)\n\n* Initial plan\n\n* Add insertTablets API and concurrent execution utilities for Node.js optimization\n\n\n* Fix insertTabletsParallel to use proper worker-based concurrency control\n\n\n* Add benchmark comparison, E2E tests, and examples for new concurrent APIs\n\n\n* Add TableSessionPool examples and benchmark comparison for table model\n\n\n* Fix code review issues: use TSDataType constants, use STRING for TAG columns\n\n\n* Fix insertTablets to handle redirect response code 400\n\n\n* Co-authored-by: CritasWang \u003c19721744+CritasWang@users.noreply.github.com\u003e\n\n* Fix code review issues: semaphore race condition, undefined handling, unused variables\n\n\n---------\n"
    },
    {
      "commit": "864dd2be80efed67c576d3dc2698b2b5766720c0",
      "tree": "39b856bd3b986364de5d7d51b40020d98bf0c38f",
      "parents": [
        "3d67501d49e8e6450122a680d7161a8a193b19df"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Feb 04 17:15:41 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Feb 04 17:15:41 2026 +0800"
      },
      "message": "update sessionpool use denque\n"
    },
    {
      "commit": "3d67501d49e8e6450122a680d7161a8a193b19df",
      "tree": "3ba2d12dd1c9155078be2b00dc45623c0745e3ed",
      "parents": [
        "76352e0635ba12ad6099ed37e6a77f8c7290c88f"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Feb 03 15:25:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 03 15:25:21 2026 +0800"
      },
      "message": "Documentation: comprehensive review and organization of all 34 markdown files (#11)\n\n* Initial plan\n\n* Add fast serialization with buffer pooling (Phase 1)\n\n\n* Add columnar result format and complete Phase 1+2 optimizations\n\n\n* Add comprehensive documentation for pg-inspired optimizations\n\n\n* Fix code review issue: remove redundant ternary operator\n\n\n* Add comprehensive pool optimization plan (Phase 3) based on pg design\n\n\n* Revert pool \"optimizations\" causing 7.4x performance degradation (#12)\n\n* Initial plan\n\n* Implement Phase 3A-3D: FIFO queue, lifecycle management, and enhanced metrics\n\n\n* Add unit tests for new pool features (metrics, lifecycle config)\n\n\n* Add documentation and example for pool optimization features\n\n\n* Address code review feedback - improve defensive programming\n\n\n* Update e2e tests, examples, and docs for pool optimization features\n\n\n* Add comprehensive summary of pool optimization updates\n\n\n* Revert FIFO queue and lifecycle management optimizations based on new_test performance findings\n\n\n* Clean up examples: remove references to removed optimization features\n\n\n* Add comprehensive performance analysis summary based on new_test findings\n\n\n---------\n\n\n* Organize and update all documentation with comprehensive index\n\n\n* Add Chinese documentation summary and final organization\n\n\n* Complete documentation review with comprehensive report\n\n\n---------\n"
    },
    {
      "commit": "76352e0635ba12ad6099ed37e6a77f8c7290c88f",
      "tree": "bb550da0feadbcb0b44ffaf95e548bba35948cb5",
      "parents": [
        "6c8f2492d438cdfe28b3536ce5dfed225ea802e9"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Feb 03 00:55:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 03 00:55:20 2026 +0800"
      },
      "message": "Fix concurrency issues causing 10x performance degradation in session pools (#10)\n\n* Initial plan\n\n* Fix concurrency performance issues in benchmark and session pools\n\n\n* Improve documentation for database context sync and executor interface\n\n\n* Add comprehensive debug logging for performance analysis\n\n\n* Fix TableSessionPool to use inherited insertTablet with debug logging\n\n\n* Improve comment explaining why insertTablet override was removed\n\n\n---------\n"
    },
    {
      "commit": "6c8f2492d438cdfe28b3536ce5dfed225ea802e9",
      "tree": "e8fc1b74fca355a3427cb42cde662cde952111f4",
      "parents": [
        "83c521c4d7dced3cbaf862dc62093fd4052f6e70"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jan 30 20:26:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 30 20:26:11 2026 +0800"
      },
      "message": "Implement automatic write redirection for multi-node clusters (#9)\n\n* Initial plan\n\n* Add redirection configuration and implement redirect handling in Session and SessionPool\n\n\n* Add E2E tests for redirection and update documentation\n\n\n* Remove unused variable to fix linting warning\n\n\n* Fix redirection implementation: write succeeds on first attempt, no retry needed\n\nThe previous implementation incorrectly threw an exception and retried the write when receiving code 400.\nAccording to IoTDB design, code 400 means the write ALREADY SUCCEEDED and the redirect recommendation\nis only for FUTURE writes. This commit fixes the behavior:\n\n- Session.ts: Store redirect endpoint internally, resolve successfully (no exception)\n- BaseSessionPool.ts: Check for redirect after successful write, cache for next write (no retry)\n- Remove maxRedirectRetries config (not needed since we don\u0027t retry)\n- Update all documentation to reflect correct behavior\n\n\n* Fix code 400 handling: accept response even without redirectNode\n\nThe table tablet test was failing because code 400 was only treated as success when\nredirectNode was present. According to IoTDB design, code 400 always means write succeeded,\nregardless of whether redirectNode is provided. This commit fixes both insertTreeTabletInternal\nand insertTableTabletInternal to:\n\n- Accept code 400 as success even when redirectNode is missing/null\n- Store redirect endpoint only when provided\n- Log debug message when code 400 received without redirect node\n\n\n---------\n"
    },
    {
      "commit": "83c521c4d7dced3cbaf862dc62093fd4052f6e70",
      "tree": "b351990d16d926949e209ad90fc3fb7f07a6df5c",
      "parents": [
        "1f8936c2b08959f0bc8e3252afb4e489a0cc8887"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jan 30 19:28:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 30 19:28:46 2026 +0800"
      },
      "message": "Handle redirect responses (code 400) correctly: resolve successfully with warnings (#8)\n\n* Initial plan\n\n* Add error handling and configuration foundation for redirection support\n\n\n* Optimize tablet serialization and enhance BitMap documentation\n\n\n* Fix README errors and add redirection documentation\n\n\n* Add comprehensive unit tests for tablet serialization\n\n\n* Add tests for redirection configuration options\n\n\n* Add comprehensive unit tests for RedirectCache\n\n\n* Fix serialization consistency and LRU cache implementation\n\n\n* Fix redirection status code and clarify implementation status\n\n\n* Optimize benchmark memory usage with shared batch templates\n\n\n* Remove unimplemented redirection configuration options\n\n\n* 修复 benchmark 的错误\n\n* 使用设备模板\n\n* 修复 e2e\n\n* 修复 e2e\n\n* Handle redirect responses (code 400) with informative error messages\n\n\n* Fix code 400 handling: resolve successfully with warnings instead of throwing error\n\n\n* Fix USE statement regex to support database names with dots and hyphens\n\n\n---------\n"
    },
    {
      "commit": "1f8936c2b08959f0bc8e3252afb4e489a0cc8887",
      "tree": "8bea348fb1b105ef08570a467cce852c2933ce0a",
      "parents": [
        "1717b709502529e8b5a4192d6c33f8a26d8f75b1"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jan 30 16:11:13 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jan 30 16:11:13 2026 +0800"
      },
      "message": "add plan\n"
    },
    {
      "commit": "1717b709502529e8b5a4192d6c33f8a26d8f75b1",
      "tree": "c9cca7747b2917f8bd4f56477c4227223b3ff3dc",
      "parents": [
        "366f382730192df84a05a42a53afb01628bb57f4"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Fri Jan 30 14:25:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 30 14:25:18 2026 +0800"
      },
      "message": "Add benchmark suite and tablet API improvements for IoTDB client (#6)\n\n* Initial plan\n\n* Add benchmark testing tools for IoTDB client\n\nImplemented comprehensive benchmark suite inspired by thulab/iot-benchmark:\n- Configuration module with validation\n- Data generator for pre-generating test data\n- Schema manager for metadata registration\n- Core benchmark engine with metrics collection\n- Tree model benchmark entry point\n- Table model benchmark entry point\n- Comprehensive README with usage examples\n\n\n* Add benchmark infrastructure test and documentation updates\n\n- Added test-benchmark.js to verify benchmark infrastructure without IoTDB\n- Updated benchmark README with testing instructions and prerequisites\n- Updated main README with benchmark tools section\n- All benchmark components tested and working\n- Added debug output to tree benchmark\n\n\n* Add LOOP-based execution and device-session binding\n\nImplemented features requested by @CritasWang:\n- Added LOOP parameter as alternative to TOTAL_DATA_POINTS\n- Total points \u003d DEVICE_NUMBER × BATCH_SIZE × SENSOR_NUMBER × LOOP\n- Each loop writes one complete batch for all devices (one tablet per device)\n- Added ENABLE_DEVICE_SESSION_BINDING to bind devices to sessions\n- Device-session binding requires DEVICE_NUMBER % POOL_MAX_SIZE \u003d\u003d 0\n- Updated configuration validation and documentation\n- Modified data generator to support loop-based mode\n- Updated benchmark-core with executeConcurrentWithBinding function\n- Updated both tree and table benchmarks to support new execution model\n\n\n* Add comprehensive documentation: enhanced README, bilingual user guides (tree/table models) (#7)\n\n* Initial plan\n\n* Enhanced README with comprehensive sections\n\n\n* Add Chinese README translation\n\n\n* Add Tree Model User Guide (English)\n\n\n* Add Table Model User Guide (English)\n\n\n* Add Chinese translations for user guides (tree and table model)\n\n\n---------\n\n\n* Convert benchmark-table.js to use insertTablet API\n\nChanges:\n- Modified data-generator.js to generate device-oriented structure for table model (matching tree model format)\n- Updated benchmark-table.js to use insertTablet instead of SQL INSERT statements\n- Modified generateWorkload to work with device-oriented data structure\n- Updated executeWrite to use pool.insertTablet() with tablet format\n- Removed formatValue function (no longer needed)\n- Updated schema-manager.js to build table schema from device structure\n- Updated test-benchmark.js to work with new table model data structure\n- Updated README.md and benchmark/README.md to reflect that both models use insertTablet\n\nBoth tree and table benchmarks now use the same insertTablet API, with table model automatically using table mode through TableSessionPool.\n\n\n* Add TreeTablet and TableTablet interfaces with separate methods\n\n- Added ColumnCategory enum for table model columns (ID, TIME, MEASUREMENT, ATTRIBUTE)\n- Created TreeTablet interface for tree/timeseries model (uses deviceId)\n- Created TableTablet interface for table/relational model (uses tableName, includes columnCategories)\n- Deprecated old Tablet interface for backward compatibility\n- Added insertTreeTablet() method to Session class\n- Added insertTableTablet() method to Session class\n- Updated insertTablet() to use insertTreeTablet internally (backward compatible)\n- Added insertTreeTablet() to BaseSessionPool\n- Added insertTableTablet() to TableSessionPool\n- Updated all exports to include new types and enum\n- Refactored serializeTabletValues to accept parameters instead of tablet object\n\n\n* Update examples to use new TreeTablet and TableTablet interfaces\n\n- Updated basic-session.ts to use insertTreeTablet()\n- Updated session-pool.ts to use insertTreeTablet()\n- Updated table-session-pool.ts to use insertTableTablet() with ColumnCategory\n- Added ColumnCategory import where needed\n- Demonstrated proper table tablet structure with device_id, timestamp, and measurement columns\n\n\n* Update benchmark code to use new TreeTablet and TableTablet interfaces\n\n- Updated benchmark-tree.js to use insertTreeTablet()\n- Updated benchmark-table.js to use insertTableTablet() with ColumnCategory\n- Modified table benchmark to construct proper TableTablet with:\n  - device_id as ID column\n  - timestamp as TIME column\n  - measurements as MEASUREMENT columns\n- Added tableName to workload generation\n- Updated documentation strings\n\n\n* Fix ColumnCategory enum to match C# and Java clients\n\nBREAKING FIX: Corrected ColumnCategory enum values to match official IoTDB clients:\n- Changed ID to TAG (for device identification columns)\n- Changed MEASUREMENT to FIELD (for measurement value columns)\n- Kept ATTRIBUTE unchanged\n- Reordered TIME to position 3 (was 1)\n\nUpdated enum definition:\n- TAG \u003d 0 (was ID \u003d 0)\n- FIELD \u003d 1 (was MEASUREMENT \u003d 2)\n- ATTRIBUTE \u003d 2 (was ATTRIBUTE \u003d 3)\n- TIME \u003d 3 (was TIME \u003d 1)\n\nUpdated all usage across:\n- Examples (table-session-pool.ts)\n- Benchmarks (benchmark-table.js)\n- E2E tests (TableSessionPool.test.ts)\n- Session implementation (insertTableTablet logic)\n\nThis ensures compatibility with C# and Java IoTDB client definitions.\n\n\n* Add comprehensive tablet interfaces documentation\n\n- Created docs/tablet-interfaces.md with complete guide for TreeTablet and TableTablet\n- Documented ColumnCategory enum (TAG, FIELD, ATTRIBUTE, TIME) matching C#/Java\n- Added examples for both tree and table models\n- Included migration guide from old Tablet interface\n- Updated README.md to use insertTreeTablet\n- Explained column categories: TAG for identification, FIELD for measurements, ATTRIBUTE for metadata, TIME for timestamps\n\nDocumentation covers:\n- Interface definitions and structure\n- Usage examples for both models\n- ColumnCategory enum explanation\n- Migration from deprecated Tablet interface\n- Best practices for each model\n\n\n* Refactor: Create TableSession as composition over inheritance\n\nDue to TypeScript type system limitations with method overriding,\nchanging approach to use composition instead of inheritance.\nTableSession will wrap Session functionality for table-specific operations.\n\n\n* Implement polymorphic insertTablet with runtime type checking\n\n- Session.insertTablet now accepts TreeTablet | TableTablet union type\n- Runtime checking: \u0027tableName\u0027 property → TableTablet, \u0027deviceId\u0027 → TreeTablet\n- TableSession extends Session without overriding (clean inheritance)\n- BaseSessionPool and TableSessionPool use same insertTablet signature\n- Updated all examples, tests, and benchmarks to use unified insertTablet method\n- Simplified API: one method name for both models, no interface expansion\n\n\n* Update README with comprehensive tablet documentation\n\n- Added TreeTablet and TableTablet interface documentation\n- Updated quick start examples to use unified insertTablet method\n- Added Tablet Type System section explaining polymorphism\n- Documented ColumnCategory enum for table model\n- Added runtime type checking explanation\n- Updated all code examples to reflect new API\n- Clarified tree vs table model tablet structures\n\n\n* Add comprehensive refactoring summary documentation\n\nAdded TABLET_REFACTORING_SUMMARY.md documenting:\n- Complete architecture overview with class hierarchy\n- TreeTablet and TableTablet interface details\n- ColumnCategory enum explanation\n- Polymorphic insertTablet implementation details\n- All code changes and design decisions\n- Migration guide for users\n- Testing and validation status\n\nThis completes the tablet refactoring project.\n\n\n* Update user manuals and add ColumnCategory documentation\n\n- Updated all 4 user manuals (tree/table, English/Chinese) with:\n  - TreeTablet interface documentation with TSDataType examples\n  - TableTablet interface documentation with ColumnCategory enum\n  - Detailed ColumnCategory enum explanation (TAG, FIELD, ATTRIBUTE, TIME)\n  - Code examples showing both enum and numeric usage\n\n- Updated TableSessionPool.test.ts:\n  - Changed insertTableTablet to insertTablet (unified API)\n  - Added detailed comments explaining column categories\n  - Explicit ColumnCategory enum usage with explanations\n\n- Updated examples/table-session-pool.ts:\n  - Fixed ColumnCategory.ID to ColumnCategory.TAG (correct enum)\n  - Added explanatory comments for each column category\n  - Both pool and explicit session examples updated\n\n\n* Fix ColumnCategory documentation - clarify TIME is internal only\n\nBased on review feedback, corrected ColumnCategory enum usage:\n\nChanges made:\n1. Updated Session.ts enum comment to clarify TIME is reserved for internal use\n2. Removed ColumnCategory.TIME from all user-facing examples and tests\n3. Updated all documentation (4 user guides + README + other docs):\n   - English: user-guide-table.md, tablet-interfaces.md, README.md\n   - Chinese: user-guide-table-zh.md\n   - Summary: TABLET_REFACTORING_SUMMARY.md\n4. Fixed examples/table-session-pool.ts - removed timestamp column from columnNames/columnCategories\n5. Fixed tests/e2e/TableSessionPool.test.ts - removed TIME usage in tests\n6. Fixed benchmark/benchmark-table.js - removed TIME from benchmark\n\nKey points clarified in documentation:\n- TIME enum value exists (matches Java/C# clients) but is for internal use only\n- Users should only use TAG, FIELD, and ATTRIBUTE in columnCategories arrays\n- Timestamps are handled separately via the timestamps array parameter\n- Do not include timestamp column in columnNames or columnCategories\n\nAll code now properly demonstrates that timestamps are separate from columnCategories.\n\n\n* Add comprehensive ColumnCategory usage guide\n\nCreated detailed documentation explaining:\n- Why TIME exists but shouldn\u0027t be used by users\n- Correct vs incorrect usage with examples\n- Purpose of each column category (TAG, FIELD, ATTRIBUTE)\n- Common mistakes and how to fix them\n- Migration guide from incorrect usage\n- Array alignment requirements\n\nThis addresses the documentation issue identified in the review.\n\n\n* Add TreeTablet and TableTablet classes with addRow method\n\nImplemented tablet classes with convenient addRow() method for building tablets row-by-row:\n\nClasses added:\n- TreeTablet class for tree/timeseries model\n  - Constructor: new TreeTablet(deviceId, measurements, dataTypes)\n  - Method: addRow(timestamp, values[])\n  - Validates values array length matches measurements\n\n- TableTablet class for table/relational model\n  - Constructor: new TableTablet(tableName, columnNames, columnTypes, columnCategories)\n  - Method: addRow(timestamp, values[])\n  - Validates values array length matches columnNames\n  - Validates constructor parameter alignment\n\nBackward compatibility:\n- Kept ITreeTablet and ITableTablet interfaces for plain objects\n- Session.insertTablet() accepts both classes and plain objects\n- BaseSessionPool.insertTablet() accepts both classes and plain objects\n\nExports:\n- TreeTablet and TableTablet exported as classes\n- ITreeTablet and ITableTablet exported as type interfaces\n- Updated all imports in BaseSessionPool\n\nBuild tested and working correctly.\n\n\n* Update examples to demonstrate addRow method\n\nUpdated all three examples to show the new TreeTablet and TableTablet classes with addRow method:\n\n1. basic-session.ts:\n   - Added TreeTablet import\n   - Demonstrated addRow() usage for building tablets row-by-row\n   - Showed both new class approach and old plain object approach\n\n2. session-pool.ts:\n   - Added TreeTablet import\n   - Updated explicit session example to use addRow()\n   - Shows convenient streaming data pattern\n\n3. table-session-pool.ts:\n   - Added TableTablet import\n   - Updated pool and explicit session examples\n   - Demonstrates addRow() with table model column categories\n   - Shows multiple rows being added incrementally\n\nAll examples build successfully and demonstrate best practices for using the new tablet classes.\n\n\n* Update README and tree model user guides with addRow documentation\n\nUpdated documentation to include TreeTablet class with addRow method:\n\n1. README.md:\n   - Changed TreeTablet from interface to showing both interface and class\n   - Added comprehensive examples of TreeTablet.addRow() usage\n   - Added TableTablet.addRow() examples\n   - Showed both class-based and plain object approaches\n   - Clarified backward compatibility\n\n2. docs/user-guide-tree.md:\n   - Updated imports to include TreeTablet and TSDataType\n   - Modified Quick Start section to use TreeTablet class\n   - Enhanced Data Insertion section with detailed addRow examples\n   - Added benefits list for TreeTablet class usage\n   - Kept plain object examples for backward compatibility\n\n3. Built successfully with no errors\n\nNext: Update Chinese tree guide and both table model guides (English and Chinese)\n\n\n* docs: Update user guides with TreeTablet/TableTablet class and addRow() method\n\n- Updated docs/user-guide-tree-zh.md with TreeTablet class examples\n- Updated docs/user-guide-table.md with TableTablet class examples\n- Updated docs/user-guide-table-zh.md with TableTablet class examples\n- Added import statements for TreeTablet/TableTablet, TSDataType, ColumnCategory\n- Changed Quick Start sections to use class-based approach with addRow()\n- Added Data Insertion sections with both class-based (recommended) and plain object (legacy) approaches\n- Included benefits sections highlighting convenience, type-safety, validation, and streaming-friendly features\n- Maintained backward compatibility examples\n\n\n* docs: Remove standalone Session usage from tree model user guides\n\n- Removed Section 4 \"Session API\" entirely from both English and Chinese guides\n- Updated Section 3 \"Quick Start\" to show only SessionPool example\n- Renumbered all sections (old 5-10 → new 4-9)\n- Updated Table of Contents with new section numbers\n- Replaced all Session usage with SessionPool throughout:\n  - Changed imports to use only SessionPool\n  - Updated all code examples to use pool.init() instead of session.open()\n  - Updated query examples to use pool.executeQueryStatement()\n- Removed \"Session vs SessionPool\" comparison from Best Practices\n- Updated Configuration Builders section to focus on PoolConfigBuilder\n- Removed \"Session Already Exists\" error from Troubleshooting\n- Updated Appendix B API Quick Reference to show only SessionPool methods\n- Maintained consistency between English and Chinese versions\n\n\n---------\n"
    },
    {
      "commit": "366f382730192df84a05a42a53afb01628bb57f4",
      "tree": "584e2d7284ea0017faaec5a86ab8b476bfd70a22",
      "parents": [
        "2caf902d6b3fffd0c023beb68ecbac776ab60ee6"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Thu Jan 29 23:04:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 23:04:57 2026 +0800"
      },
      "message": "Fix insertTablet serialization, add SessionDataSet iterator, and align query handling with Java/C# clients (#4)\n\n* Initial plan\n\n* Fix insertTablet serialization and add sql_dialect support\n\n- Fix insertTablet to serialize data column-by-column instead of row-by-row\n- Add bitmap support for null values after column data\n- Add sqlDialect field to Config interface\n- Pass sqlDialect in TSOpenSessionReq configuration\n- Default TableSessionPool to use sql_dialect \u003d \"table\"\n\n\n* Update sql_dialect to be internal-only, retain USE DATABASE logic\n\n- Remove sqlDialect from public Config interface\n- Add InternalConfig with sqlDialect field for internal use only\n- SessionPool automatically sets sql_dialect\u003d\"tree\"\n- TableSessionPool automatically sets sql_dialect\u003d\"table\"\n- Retain USE DATABASE logic in TableSessionPool for database context\n- Users don\u0027t need to specify sql_dialect - it\u0027s determined by pool type\n\n\n* Fix string byte length serialization\n\n- Change string serialization to write byte length instead of character length\n- This ensures UTF-8 multi-byte characters are handled correctly\n\n\n* Fix endianness issue in TEXT/STRING/BLOB serialization\n\n- Change from little-endian (writeInt32LE) to big-endian (writeInt32BE)\n- Java\u0027s ReadWriteIOUtils expects big-endian byte order\n- This fixes BufferUnderflowException when inserting TEXT/STRING/BLOB data\n\n\n* Address code review feedback\n\n- Fix bitmap byte count calculation to use Math.ceil instead of floor+1\n- Add database name validation to prevent SQL injection\n- Database names must only contain alphanumeric, underscores, hyphens, and dots\n\n\n* Migrate Thrift generation to TypeScript\n\n- Generate TypeScript declaration files (.d.ts) alongside JavaScript\n- Use official Apache Thrift compiler with ts option instead of @creditkarma/thrift-typescript\n- Update generate:thrift script to use: thrift --gen js:node,ts\n- Update GitHub workflow to generate TypeScript definitions\n- Add comprehensive thrift/README.md documentation\n- Remove @creditkarma/thrift-typescript dependency\n- Remove unused fix-thrift-int64.js script (not needed with official compiler)\n- Update build to copy both .js and .d.ts files to dist/\n\n\n* Add TypeScript examples documentation and cleanup\n\n- Add docs/TYPESCRIPT_EXAMPLES.md with usage examples\n- Remove unused scripts/fix-thrift-int64.js (not needed with official compiler)\n- Document benefits of TypeScript support\n\n\n* Reorganize documentation structure\n\n- Move API docs to docs/: implementation.md, data-types.md, thrift.md, typescript-examples.md\n- Move development docs to docs/development/: build-infrastructure.md, debugging-e2e.md, test-database.md\n- Move project-status.md to docs/\n- Delete obsolete summary files: CI_CD_SUMMARY.md, COMMENT_RESPONSE_SUMMARY.md, DATABASE_CONSOLIDATION_SUMMARY.md, DATA_TYPES_IMPLEMENTATION_SUMMARY.md, E2E_FIX_ANALYSIS.md, ESLINT_9_UPGRADE.md, GLOB_FIX_DETAILS.md, IMPROVEMENTS_SUMMARY.md, NPM_DEPRECATIONS_FIXED.md\n- Keep in root: README.md, CONTRIBUTING.md, CHANGELOG.md, LICENSE\n- Add docs/README.md with comprehensive index\n- Update main README.md with documentation links section\n\n\n* Implement SessionDataSet with iterator pattern\n\n- Add RowRecord class for representing individual query result rows\n- Add SessionDataSet class with hasNext()/next() iterator pattern\n- Add executeQuery() method that returns SessionDataSet\n- Support lazy loading - fetches more data on-demand\n- Proper resource management with close() method\n- Column access by name or index with type safety\n- Keep executeQueryStatement() for backward compatibility (deprecated)\n- Add comprehensive E2E tests for SessionDataSet\n- Export new classes in index.ts\n\n\n* Add comprehensive SessionDataSet documentation\n\n- Add sessiondataset-guide.md with complete usage guide\n- Update README.md with SessionDataSet quick start example\n- Add SessionDataSet section highlighting benefits\n- Update docs/README.md to include new guide\n- Document migration from old QueryResult pattern\n- Add performance tips and best practices\n- Include troubleshooting section\n\n\n* Replace executeQueryStatement to return SessionDataSet\n\n- Remove executeQuery() method, keep only executeQueryStatement()\n- executeQueryStatement() now returns SessionDataSet instead of QueryResult\n- Remove old parseQueryResult() and recursive fetchResults() methods\n- Update BaseSessionPool.executeQueryStatement() to return SessionDataSet\n- Update Session.test.ts to use SessionDataSet iterator pattern\n- Update SessionDataSet.test.ts to use executeQueryStatement()\n- Mark QueryResult as deprecated\n\n\n* Update AllDataTypes.test.ts to use SessionDataSet API pattern\n\n\n* Update LargeQuery.test.ts to use SessionDataSet pattern\n\n* Update MultiNode.test.ts to use SessionDataSet pattern\n\n\n* Update TableModelDataTypes.test.ts to use SessionDataSet pattern\n\n\n* Update TableSessionPool.test.ts to use SessionDataSet pattern\n\n\n* Update documentation for SessionDataSet API changes\n\n- Remove all references to executeQuery() (no longer exists)\n- Update README to show executeQueryStatement returns SessionDataSet\n- Update sessiondataset-guide.md with new API\n- Add migration section explaining breaking change\n- Add toArray() helper for small datasets\n- Remove deprecated QueryResult examples\n\n\n* Add queryResult support and fix session release timing\n\n- Add support for both queryDataSet and queryResult formats in query responses\n- Add parseQueryResult() method to handle TsBlock format (Buffer[])\n- Update Session.executeQueryStatement() to handle both formats\n- Update SessionDataSet.fetchNextBatch() to handle both formats\n- Add cleanup callback mechanism to SessionDataSet\n- Fix BaseSessionPool to release session only when dataset.close() is called\n- Session is now held until dataset is closed, not released immediately after query\n\n\n* Fix parseQueryResult to handle queries without time column\n\n- Add ignoreTimeStamp parameter to parseQueryResult() method\n- Extract ignoreTimeStamp from TSExecuteStatementResp\n- Pass ignoreTimeStamp to SessionDataSet constructor\n- Handle cases where time column is not present (ignoreTimeStamp\u003dtrue)\n- When ignoreTimeStamp is true, all queryResult buffers are value columns\n- When ignoreTimeStamp is false, queryResult[0] is time column\n- Add helper methods getDataTypeCode() and getRowCountFromBuffer()\n- Update fetchNextBatch() to pass ignoreTimeStamp when parsing results\n- Matches Java and C# client implementations\n\n\n* 修复数据读取逻辑\n\n* 修复查询\n\n* Fix column name handling and add Docker log collection on CI failure\n\n- Add support for both full and short column names in SessionDataSet\n- Extract short name (last segment) and register both mappings\n- Add getShortColumnNames() method for convenience\n- Update SessionDataSet test to use getShortColumnNames()\n- Add Docker log collection step in e2e-1c1d.yml workflow (on failure)\n- Add Docker log collection step in e2e-3c3d.yml workflow (on failure)\n- Docker logs saved to test-results/docker-logs/ and uploaded as artifacts\n\n\n* Remove getShortColumnNames() and update tests to use fully qualified column names\n\n- Remove getShortColumnNames() method from SessionDataSet\n- Remove extractShortColumnName() private method\n- Remove short name registration from column index map\n- Update SessionDataSet.test.ts to use fully qualified column names\n- Tests now use \"root.test.d1.s1\" instead of \"s1\"\n- Tests now use \"root.test.large.d1.value\" instead of \"value\"\n- Tests now use \"root.test.column.d1.temperature\" instead of \"temperature\"\n- All column name assertions updated to expect full paths\n\n\n* Fix tree model aggregation function names to use lowercase\n\n- Change MAX_VALUE to max_value in tree model queries\n- Change MIN_VALUE to min_value in tree model queries\n- Tree model uses lowercase function names (max_value, min_value)\n- Table model continues to use standard SQL (MAX, MIN)\n- Fixes \"UDF MAX has not been registered\" error in AllDataTypes.test.ts\n\n\n* Fix timestamp endianness in insertTablet - use big-endian\n\n- Change timestamp serialization from little-endian to big-endian\n- Use writeBigInt64BE instead of BigInt64Array for timestamps\n- IoTDB protocol expects big-endian byte order (Java standard)\n- Matches C# client which converts to big-endian: Array.Reverse(longBuff)\n- Fixes issue where timestamps appeared negative in database\n\n\n* Fix TSQueryDataSet deserialization to use big-endian byte order\n\n- Change all numeric type deserialization from little-endian to big-endian\n- INT32: Use readInt32BE instead of Int32Array (little-endian)\n- INT64: Use readBigInt64BE instead of BigInt64Array (little-endian)\n- FLOAT: Use readFloatBE instead of Float32Array (little-endian)\n- DOUBLE: Use readDoubleBE instead of Float64Array (little-endian)\n- TIMESTAMP: Use readBigInt64BE instead of BigInt64Array\n- DATE: Use readInt32BE instead of Int32Array\n- TEXT/STRING/BLOB: Use readInt32BE for length prefix\n- TSQueryDataSet format uses Java\u0027s big-endian byte order\n- TsBlock format (ColumnDecoder) already correctly uses little-endian\n- Fixes test failures where values were byte-swapped (e.g., 9 → 150994944)\n\n\n* Fix TsBlock deserialization to use big-endian byte order\n\n- Change ColumnDecoder to use big-endian for all numeric types\n- INT32/DATE: readInt32BE instead of readInt32LE\n- INT64/TIMESTAMP: readBigInt64BE instead of readBigInt64LE\n- FLOAT: readFloatBE instead of readFloatLE\n- DOUBLE: readDoubleBE instead of readDoubleBE\n- TEXT/STRING/BLOB: Already uses readInt32BE for length prefix\n- TsBlock format (queryResult) uses big-endian byte order\n- Matches C# client which reverses bytes from big-endian to little-endian\n- Fixes byte-swap errors where 100 was read as 1677721600\n\n\n* Fix insertTablet serialization and migrate to 1C3D cluster setup\n\nPart 1: Fix insertTablet column data serialization\n- Change INT32 from Int32Array (LE) to writeInt32BE (BE)\n- Change INT64 from BigInt64Array (LE) to writeBigInt64BE (BE)\n- Change FLOAT from Float32Array (LE) to writeFloatBE (BE)\n- Change DOUBLE from Float64Array (LE) to writeDoubleBE (BE)\n- Change DATE from Int32Array (LE) to writeInt32BE (BE)\n- All insertTablet data now uses big-endian to match IoTDB protocol\n- Fixes last 1c1d test failure: Expected 300, received 738263040\n\nPart 2: Migrate from 3C3D to 1C3D cluster configuration\n- Create docker-compose-1c3d.yml: 1 ConfigNode + 3 DataNodes\n- Set schema_replication_factor\u003d3 (metadata replicas)\n- Set data_replication_factor\u003d2 (data replicas)\n- Rename e2e-3c3d.yml workflow to e2e-1c3d.yml\n- Update workflow to use 1c3d docker-compose file\n- Update container names: iotdb-datanode-1/2/3 (not iotdb-datanode1/2/3)\n- CN count doesn\u0027t affect testing, reduces resource usage\n\n\n* Update all examples to use SessionDataSet iterator pattern\n\n- Update basic-session.ts to use hasNext()/next()/close()\n- Update session-pool.ts to use SessionDataSet API\n- Update table-session-pool.ts to use SessionDataSet API\n- Update multi-node.ts to use SessionDataSet API\n- Update ssl-connection.ts to use SessionDataSet API\n- Replace old QueryResult API (.rows, .columns) with modern iterator pattern\n- All examples now demonstrate proper resource cleanup with close()\n- Examples match new SessionDataSet documentation\n\n\n* Fix MultiNode E2E test failures\n\n- Add beforeEach() to clean up root.test database before each test\n- Ensure clean state prevents \"already exists\" errors\n- Fix \"Should create database and timeseries\" test to handle clean state\n- Reduce stress test operations from 30 to 10 per pool to avoid timeout\n- Add 30s timeout to stress test (was using default 5s)\n- Fix \"Should handle queries across all DataNodes simultaneously\" test:\n  - Insert data before querying to ensure results exist\n  - Add 500ms delay for data availability\n  - Add 20s timeout (was using default 5s)\n- Tests now properly handle multi-node cluster operations without timeouts\n\n\n* Initial plan\n\n* Fix beforeEach timeout in MultiNode E2E tests\n\nAdd 60000ms timeout to beforeEach hook to prevent timeout failures in multi-node cluster operations. The hook performs async operations (DROP DATABASE + setTimeout) that can take longer than Jest\u0027s default timeout, especially in multi-node environments.\n\nThis fixes the failing tests:\n- \"Should support nodeUrls configuration for multi-node setup\"\n- \"Should support nodeUrls configuration in object format\"\n\nFollows the same pattern as beforeAll (60000ms) and afterAll (90000ms) in the same file.\n\n\n* Optimize MultiNode tests - remove unnecessary cleanup and reduce delays\n\n- Remove beforeEach() cleanup - handle \"already exists\" errors like other tests\n- Create database with try-catch to ignore \"already exist\" errors (matches AllDataTypes.test.ts pattern)\n- Reduce replication wait from 2000ms to 200ms (10x faster)\n- Reduce data availability wait from 500ms to 100ms (5x faster)\n- Total time savings: ~2.5 seconds per test run\n- Matches pattern used in AllDataTypes.test.ts and SessionPool.test.ts\n- Tests now run much faster while maintaining correctness\n\n\n* Fix MultiNode test timeouts with parallel operations\n\n- Reduce stress test operations from 10 to 5 per pool (15 total)\n- Close datasets in parallel using Promise.all() instead of sequential loops\n- Process query results in parallel for 3 DataNodes simultaneously\n- Add explicit 10s timeouts to nodeUrls configuration tests\n- Parallel dataset closing is ~3x faster than sequential\n- Tests now complete well within timeout limits\n\n\n* Reduce IoTDB startup wait time in CI workflows\n\n- Reduce 1c1d startup wait from 45s to 5s\n- Reduce 1c3d startup wait from 75s to 5s\n- Total CI time savings: ~65 seconds per workflow run\n- Port verification step ensures containers are ready before tests run\n\n\n---------\n"
    },
    {
      "commit": "2caf902d6b3fffd0c023beb68ecbac776ab60ee6",
      "tree": "27a3ca9a3048cafb8ef57a9eee8bd671df1f8c41",
      "parents": [
        "20f629854f34552668250472aed5f360c6369a7c",
        "d315d623a181ef2dd7c62b6bc9f70f5ce203ea73"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 14:43:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 28 14:43:23 2026 +0800"
      },
      "message": "Fix cleanup interval preventing process exit in BaseSessionPool\n"
    },
    {
      "commit": "d315d623a181ef2dd7c62b6bc9f70f5ce203ea73",
      "tree": "27a3ca9a3048cafb8ef57a9eee8bd671df1f8c41",
      "parents": [
        "a308b4947bb8eb6fe6b92c546616fb6aa9b75c8d"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 14:43:02 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 14:43:02 2026 +0800"
      },
      "message": "fix code style\n"
    },
    {
      "commit": "a308b4947bb8eb6fe6b92c546616fb6aa9b75c8d",
      "tree": "942fab1c43fc2aa50e39be591b969022885348e4",
      "parents": [
        "34448c6347dfede25392b6a5a9a23a8c7a7ef3b5"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 14:40:04 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 14:40:04 2026 +0800"
      },
      "message": "修复测试阻塞问题\n"
    },
    {
      "commit": "34448c6347dfede25392b6a5a9a23a8c7a7ef3b5",
      "tree": "0e0edf2046a9c7ed8db3f2fa6ea308c30ca66c73",
      "parents": [
        "9e1c7147471c0e374285cd5901b1e6379af88629"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 14:23:13 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 14:23:13 2026 +0800"
      },
      "message": "add debug config\n"
    },
    {
      "commit": "9e1c7147471c0e374285cd5901b1e6379af88629",
      "tree": "47abd971c0ff04b48d11dfa356dab28c711889f5",
      "parents": [
        "a42c5aeb4f4ef651de7004bd186a9bd7d5544a29"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 04:33:21 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 04:33:21 2026 +0000"
      },
      "message": "Fix: Restore .unref() on setInterval in BaseSessionPool to prevent hanging process\n"
    },
    {
      "commit": "a42c5aeb4f4ef651de7004bd186a9bd7d5544a29",
      "tree": "cb7435b7a9dd0c540a033b8df3c293613db33bd2",
      "parents": [
        "64895a87bd9dfecda1afe7698123a1c4a7c14ba8"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 12:28:31 2026 +0800"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 12:28:31 2026 +0800"
      },
      "message": "Add comprehensive documentation and refactor tests for database consolidation\n\n- Introduced `copilot-instructions.md` for AI coding agent guidance on project structure and development workflows.\n- Created `DATABASE_CONSOLIDATION_SUMMARY.md` detailing the purpose and implementation of database unification across tests.\n- Added `TEST_DATABASE_REFERENCE.md` for quick reference on database usage in tests.\n- Implemented `DataTypes.ts` to define TSDataType enum and utility function for data type retrieval.\n- Refactored `TableModelDataTypes.test.ts` to consolidate table model tests under a single database, ensuring resource efficiency and clarity.\n- Updated all relevant test files to use unified database names and added cleanup logic to maintain test integrity.\n"
    },
    {
      "commit": "64895a87bd9dfecda1afe7698123a1c4a7c14ba8",
      "tree": "2215eb4cfa1faece33ee0aaf8fa71181dd6466c9",
      "parents": [
        "0ba8b6382852e08caa0874cd2d1db2ad91234100"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 03:18:00 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 03:18:00 2026 +0000"
      },
      "message": "Support nodeUrls in string array format (host:port) for simpler multi-node configuration\n"
    },
    {
      "commit": "0ba8b6382852e08caa0874cd2d1db2ad91234100",
      "tree": "63962bc3f844ebea6320ec6bb526662bacfbd568",
      "parents": [
        "32b7853bbaaf09520a164c3a0d408802046d9ab5"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 03:00:22 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 03:00:22 2026 +0000"
      },
      "message": "Address code review feedback: improve validation and fix interface inheritance\n"
    },
    {
      "commit": "32b7853bbaaf09520a164c3a0d408802046d9ab5",
      "tree": "5db7ada034d92e77919e69c550501e5a6e8f918b",
      "parents": [
        "bff12589e0b241c14ce4f063fa891a87903386eb"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:55:46 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:55:46 2026 +0000"
      },
      "message": "Update README.md with comprehensive documentation for new features\n"
    },
    {
      "commit": "bff12589e0b241c14ce4f063fa891a87903386eb",
      "tree": "ddd378a3ca72a800fcf7c037969803e4fdadc2a1",
      "parents": [
        "6bf80fee2489f5d6bc132cd255787e0d6aeff9cc"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:54:08 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:54:08 2026 +0000"
      },
      "message": "Add comprehensive tests for nodeUrls, Builder pattern, and explicit session management\n"
    },
    {
      "commit": "6bf80fee2489f5d6bc132cd255787e0d6aeff9cc",
      "tree": "1f03bb0082e5480573a663094030b42b9f741cc8",
      "parents": [
        "97ce3426bd50033a61736f5c33c54666a07225ac"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:52:34 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:52:34 2026 +0000"
      },
      "message": "Update examples to showcase nodeUrls, Builder pattern, and explicit session management\n"
    },
    {
      "commit": "97ce3426bd50033a61736f5c33c54666a07225ac",
      "tree": "9133b1d50bb1e8fc2c04952a987281effb5781cb",
      "parents": [
        "8323a29287720ce6f9746ecf4be87e2bceff626f"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:51:02 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:51:02 2026 +0000"
      },
      "message": "Add support for nodeUrls, Builder pattern, and public getSession/releaseSession methods\n"
    },
    {
      "commit": "8323a29287720ce6f9746ecf4be87e2bceff626f",
      "tree": "d79ac8f176eb5bb6fa0efb26558a71793b08bd9d",
      "parents": [
        "20f629854f34552668250472aed5f360c6369a7c"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:47:32 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:47:32 2026 +0000"
      },
      "message": "Initial plan\n"
    },
    {
      "commit": "20f629854f34552668250472aed5f360c6369a7c",
      "tree": "d79ac8f176eb5bb6fa0efb26558a71793b08bd9d",
      "parents": [
        "5b4315de7bfc7043ba249136f7d8dbc9d26aa1d9",
        "1762b683ec30a27c1a9ee4840809f5e276670ea0"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 10:43:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 28 10:43:05 2026 +0800"
      },
      "message": "Eliminate npm deprecation warnings, add complete data type support, optimize build pipeline\n"
    },
    {
      "commit": "1762b683ec30a27c1a9ee4840809f5e276670ea0",
      "tree": "d79ac8f176eb5bb6fa0efb26558a71793b08bd9d",
      "parents": [
        "c431284c091acc92984de3097f1d908362446086"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:35:31 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:35:31 2026 +0000"
      },
      "message": "Add comprehensive documentation for glob@7.2.3 fix using npm overrides\n"
    },
    {
      "commit": "c431284c091acc92984de3097f1d908362446086",
      "tree": "c7a1ae8b71691ea662a5f6eca7b5e468c0904512",
      "parents": [
        "413a755d80daf8841bac021ce184104346cb96b4"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:34:48 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:34:48 2026 +0000"
      },
      "message": "Eliminate glob@7.2.3 warning using npm overrides for test-exclude@7.0.1\n"
    },
    {
      "commit": "413a755d80daf8841bac021ce184104346cb96b4",
      "tree": "5ceb6db03af1b718c941e7c5d0c8fd0262770c8d",
      "parents": [
        "b1978741bac8de649fa959595c46fbbc2423c438"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:28:17 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:28:17 2026 +0000"
      },
      "message": "Fix TypeScript isolatedModules errors by using export type for type re-exports\n"
    },
    {
      "commit": "b1978741bac8de649fa959595c46fbbc2423c438",
      "tree": "61330a686792e4c942a372ba3e8e2e17e9a0f93d",
      "parents": [
        "d2ffef35dcc821f4aa1cf7afb1453c397ab62db4"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:26:57 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 02:26:57 2026 +0000"
      },
      "message": "Upgrade to ESLint 9.x, Jest 30, and eliminate most npm deprecation warnings\n"
    },
    {
      "commit": "d2ffef35dcc821f4aa1cf7afb1453c397ab62db4",
      "tree": "7cef3da84688c4113ea99d2c3d770bc611df0523",
      "parents": [
        "66c34d80651f9cee5fdc6b0534d14400721f5c6e"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 01:49:51 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 01:49:51 2026 +0000"
      },
      "message": "Correct data type codes to match official Apache TSFile definitions\n"
    },
    {
      "commit": "66c34d80651f9cee5fdc6b0534d14400721f5c6e",
      "tree": "7c7acc7253d07a22ab2bd4898d96e8e2d362fa7a",
      "parents": [
        "6a476a35bdcdd11cba495588292d47cfd1fad8aa"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 01:24:09 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 01:24:09 2026 +0000"
      },
      "message": "Add implementation summary documentation for data types enhancement\n"
    },
    {
      "commit": "6a476a35bdcdd11cba495588292d47cfd1fad8aa",
      "tree": "a46cb654685c540f01f244a3cc31a31e5505ff11",
      "parents": [
        "3088529f38da6e31f33d388cb664d3e6ca077ba1"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 01:22:59 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Wed Jan 28 01:22:59 2026 +0000"
      },
      "message": "Add support for BLOB, STRING, DATE, TIMESTAMP data types and comprehensive test\n"
    },
    {
      "commit": "3088529f38da6e31f33d388cb664d3e6ca077ba1",
      "tree": "ea95b1e2274a1972a1a1d562fca0e208b4718dd7",
      "parents": [
        "e72caf8dbdab5e68213fffca1a27a0dfddfb1f83"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 16:16:11 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 16:16:11 2026 +0000"
      },
      "message": "Add comprehensive E2E test failure analysis and fix documentation\n"
    },
    {
      "commit": "e72caf8dbdab5e68213fffca1a27a0dfddfb1f83",
      "tree": "38570d40215d80b62b1af2a71776e58decaca076",
      "parents": [
        "82e48e30828353d7995d73543ef316fcba8b0cea"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 16:14:18 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 16:14:18 2026 +0000"
      },
      "message": "Implement proper data deserialization in parseDataSet and fix session pool timer leaks\n"
    },
    {
      "commit": "82e48e30828353d7995d73543ef316fcba8b0cea",
      "tree": "bc110d66c4eb88ccedde534c0d867ab329a3631c",
      "parents": [
        "7a13623f8bda680c0d2ea5802335a3f9f0714d41"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:58:12 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:58:12 2026 +0000"
      },
      "message": "Add comprehensive comment response documentation\n"
    },
    {
      "commit": "7a13623f8bda680c0d2ea5802335a3f9f0714d41",
      "tree": "6b3b09b9c1f957bc5ec93e27893dd620dd5be22d",
      "parents": [
        "3ca8fbbd465a3797c4a78889ba4f6b7c1d953d65"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:57:13 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:57:13 2026 +0000"
      },
      "message": "Fix deprecated Jest globals configuration\n"
    },
    {
      "commit": "3ca8fbbd465a3797c4a78889ba4f6b7c1d953d65",
      "tree": "acb9bca86da112b228aca80c51b292a60ef6a922",
      "parents": [
        "1c62a7a1f6f2ab37a9f9735b9118c8c15e5a32d5"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:55:45 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:55:45 2026 +0000"
      },
      "message": "Add esbuild for faster compilation, optimize Jest config, and fix E2E test issues\n"
    },
    {
      "commit": "1c62a7a1f6f2ab37a9f9735b9118c8c15e5a32d5",
      "tree": "182d23def4d57b82f0d33beed5ff710e8e9902b4",
      "parents": [
        "1c2b06bca7bf687ab2cb7a080b4bee34417bbf8f"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:24:08 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:24:08 2026 +0000"
      },
      "message": "Fix memory leak and add comprehensive improvements summary\n"
    },
    {
      "commit": "1c2b06bca7bf687ab2cb7a080b4bee34417bbf8f",
      "tree": "87c0c368d69d6cc23453609e460b17f3725153f4",
      "parents": [
        "2244421a4d307e734e4631e8cd51e2f85fc63730"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:21:39 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:21:39 2026 +0000"
      },
      "message": "Refactor SessionPool and TableSessionPool to eliminate code duplication\n"
    },
    {
      "commit": "2244421a4d307e734e4631e8cd51e2f85fc63730",
      "tree": "851a4b92b4681ae5266ae179c2daa0374aa77302",
      "parents": [
        "809063b5b29af2be658883b33b86e8e17e83e32b"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:19:59 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:19:59 2026 +0000"
      },
      "message": "Fix E2E test failures and improve test reliability\n"
    },
    {
      "commit": "809063b5b29af2be658883b33b86e8e17e83e32b",
      "tree": "44527c77f49420b5d936252b5cc9cc43f68d200d",
      "parents": [
        "e00b5533f99fb167eb3ecbd2ab395ccd001dd25f"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:17:08 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:17:08 2026 +0000"
      },
      "message": "Add timeout parameter to query methods and fix code quality issues\n"
    },
    {
      "commit": "e00b5533f99fb167eb3ecbd2ab395ccd001dd25f",
      "tree": "1c539061004240157a322afea40fffa7a67ae6e8",
      "parents": [
        "5b4315de7bfc7043ba249136f7d8dbc9d26aa1d9"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:12:29 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 15:12:29 2026 +0000"
      },
      "message": "Initial plan\n"
    },
    {
      "commit": "5b4315de7bfc7043ba249136f7d8dbc9d26aa1d9",
      "tree": "1c539061004240157a322afea40fffa7a67ae6e8",
      "parents": [
        "1b9023ee65560463f1b500ed816befacd47b3805",
        "164df9b0536e0719fcf3dd9d27c5e7540ed2ce4c"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 23:08:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 27 23:08:59 2026 +0800"
      },
      "message": "Implement Node.js IoTDB client with SessionPool, TableSessionPool, and CI/CD automation\n"
    },
    {
      "commit": "164df9b0536e0719fcf3dd9d27c5e7540ed2ce4c",
      "tree": "1c539061004240157a322afea40fffa7a67ae6e8",
      "parents": [
        "805ce06f2cb373e59af7a957d49c41f3e8f86274"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 14:49:11 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 14:49:11 2026 +0000"
      },
      "message": "Fix E2E test issues: Session constructor args, null queryDataSet handling, multi-node skipping\n\n- Fix Session.test.ts: Remove extra timeout argument from Session constructor\n- Fix Session.ts: Handle null queryDataSet.valueList with optional chaining\n- Fix SessionPool.test.ts: Skip multi-node test in 1C1D configuration\n- Fix LargeQuery.test.ts: Increase test timeouts from 5s to 30s for large data operations\n- Addresses TypeError and timeout issues preventing tests from passing\n- Ensures tests only run appropriate scenarios for 1C1D vs 3C3D configurations\n"
    },
    {
      "commit": "805ce06f2cb373e59af7a957d49c41f3e8f86274",
      "tree": "0dd9d66c77903c108d57a241fac227fa06103760",
      "parents": [
        "4e72327b075d89f96113c6977d7385ae03671051"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 14:19:11 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 14:19:11 2026 +0000"
      },
      "message": "Fix workflows to properly fail when E2E tests fail\n\n- Add `set -o pipefail` to Run E2E Tests steps in both workflows\n- Without pipefail, tee command always returns 0 even if npm test fails\n- Workflows now correctly report failure when tests don\u0027t pass\n- Addresses feedback: E2E workflows should fail when tests fail, not show success\n"
    },
    {
      "commit": "4e72327b075d89f96113c6977d7385ae03671051",
      "tree": "55e02a3e2b56127d5de967fe90bdfa3ec80aacd2",
      "parents": [
        "0312e6e9470dcf2df782e9aba18f54ab0907d8bb"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 13:57:10 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 13:57:10 2026 +0000"
      },
      "message": "Fix 3C3D E2E environment variables for multi-node connections\n\n- Add IOTDB_PORT_2 and IOTDB_PORT_3 environment variables in e2e-3c3d.yml\n- Add MULTI_NODE flag to distinguish 3C3D tests from 1C1D tests\n- Update MultiNode.test.ts to read ports from environment variables\n- Use IOTDB_PORT, IOTDB_PORT_2, IOTDB_PORT_3 for three DataNode connections\n- Add logging to show which ports are being connected to\n- Fixes issue where 3C3D tests weren\u0027t connecting to all three nodes\n- Ensures proper multi-node cluster testing with correct port configuration\n"
    },
    {
      "commit": "0312e6e9470dcf2df782e9aba18f54ab0907d8bb",
      "tree": "5a6b8af5bc49292986ce2d8ab73b9fcd1f6617f0",
      "parents": [
        "5e658ee69204f6cb4e1bba824357257632852411"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 13:47:42 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 13:47:42 2026 +0000"
      },
      "message": "Add port verification and remove error masking from E2E workflows\n\n- Remove || true from test commands to properly report test failures\n- Add port verification step using ss command before running tests\n  - 1C1D: Verify port 6667 is listening\n  - 3C3D: Verify ports 6667, 6668, 6669 are all listening\n- Add Docker container status and log output for debugging\n- Use continue-on-error: true for debug log commands instead of || true\n- Workflow now fails fast if required ports are not open\n- Ensures tests connect to correct IoTDB configuration (1C1D vs 3C3D)\n- Addresses feedback: proper error reporting and port validation\n"
    },
    {
      "commit": "5e658ee69204f6cb4e1bba824357257632852411",
      "tree": "7b00c39dfe59af4883c08fcc8396f116a254ec42",
      "parents": [
        "553f350b1c617c2babe446110569f32e88f27d89"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 13:37:25 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 13:37:25 2026 +0000"
      },
      "message": "Update MultiNode tests to connect to all three DataNode ports (6667, 6668, 6669)\n\n- Create three separate SessionPools connected to ports 6667, 6668, and 6669\n- Tests now truly utilize the 3C3D cluster configuration\n- Add tests for data replication verification across all DataNodes\n- Add tests for concurrent operations distributed across all three nodes\n- Add tests for simultaneous queries on all DataNodes\n- Makes multi-node testing meaningful by actually connecting to multiple nodes\n- Demonstrates load distribution and data replication in cluster\n"
    },
    {
      "commit": "553f350b1c617c2babe446110569f32e88f27d89",
      "tree": "5d90eb2850d138cee3669581140c3be7b0eff234",
      "parents": [
        "a4caff7be54e128a438924dad98f1415a4df48b9"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 13:29:26 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 13:29:26 2026 +0000"
      },
      "message": "Change E2E test approach: run tests locally connecting to Docker IoTDB\n\n- Remove iotdb-test container from docker-compose files\n- Update workflows to start IoTDB in Docker, then run tests locally\n- Tests now run on GitHub Actions runner connecting to localhost:6667\n- Simpler setup with direct access to test output\n- No need for Docker build of test container\n- Easier debugging with local test execution\n- Test output captured with tee to test-results/test-output.log\n- Addresses feedback to separate test execution from Docker\n"
    },
    {
      "commit": "a4caff7be54e128a438924dad98f1415a4df48b9",
      "tree": "3fc914bcb5c8aa6419791f7863f0920042342537",
      "parents": [
        "ca10676c6bb32b390e365dc8f7a744f88e9b876f"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 13:13:01 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 13:13:01 2026 +0000"
      },
      "message": "Redirect test output to file and upload as artifact for analysis\n\n- Add volume mount to iotdb-test service to capture test output\n- Redirect npm test output to test-results/test-output.log file\n- Add step in workflows to display test output in GitHub Actions logs\n- Upload test-results/ directory as artifact for download and analysis\n- Add || true to docker compose command to continue even on test failures\n- Add test-results/ to .gitignore\n- Separates test logs from Docker container logs for easier debugging\n"
    },
    {
      "commit": "ca10676c6bb32b390e365dc8f7a744f88e9b876f",
      "tree": "b8a109cd15c98b4c56533a22cc46fee6e95f84a3",
      "parents": [
        "0d7f7a8c4ccc326c2c5673efd8f8f0085b237e81"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 12:51:40 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 12:51:40 2026 +0000"
      },
      "message": "Suppress verbose Docker Compose output in GitHub Actions\n\n- Add --quiet-pull flag to docker compose commands in both workflows\n- Reduces Docker image pull progress output\n- Combined with logging.driver: \"none\" on IoTDB containers for cleaner test output\n- Focus CI logs on actual test results and errors\n"
    },
    {
      "commit": "0d7f7a8c4ccc326c2c5673efd8f8f0085b237e81",
      "tree": "20b65358f42a60403cdced32f9febe7e74765347",
      "parents": [
        "032455af6770e28cc5c675580368e671ef9a7eeb"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 11:58:08 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 11:58:08 2026 +0000"
      },
      "message": "Update tests to match iotdb-client-csharp examples and suppress Docker logs\n\n- Rewrite TableSessionPool tests based on C# TableSessionPoolTest.cs examples\n- Use proper table model syntax: CREATE TABLE with TAG/ATTRIBUTE/FIELD columns\n- Add database creation, table operations, and insert with null tests\n- Rewrite Session tests to follow C# tree model examples (root.ln.wf01.wt01)\n- Add proper cleanup in beforeAll/afterAll hooks\n- Suppress Docker container logs with logging.driver: \"none\" in both compose files\n- Reduces noise in test output to focus on actual test results\n"
    },
    {
      "commit": "032455af6770e28cc5c675580368e671ef9a7eeb",
      "tree": "29a571dbeb3d983cdd868a5c2de930a93611f650",
      "parents": [
        "019d60d0f494dca1787e65a61d77095d607b8f69"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 11:46:01 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 11:46:01 2026 +0000"
      },
      "message": "Fix E2E test issues: IoTDB 2.x aggregation queries, reduce data size, lower memory limits\n\n- Split aggregation query into separate COUNT and AVG queries (IoTDB 2.x doesn\u0027t support mixing)\n- Reduce test data from 10K to 5K records (250-record batches)\n- Change time range test to use LIMIT to avoid timing issues\n- Reduce concurrent operations in MultiNode test (30→20, 15→10)\n- Lower Docker memory limits: 1C1D DataNode 1GB→768MB, ConfigNode 512MB→384MB\n- Lower 3C3D memory: DataNodes 768MB→512MB each, ConfigNodes 384MB→256MB each\n- Addresses memory exhaustion, connection resets, and query syntax errors\n"
    },
    {
      "commit": "019d60d0f494dca1787e65a61d77095d607b8f69",
      "tree": "5599570ab0600abb171e47c6d52b178b0f94d372",
      "parents": [
        "d8bf14790549d55485a6d9a00f9e80fcbf5d88dd"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 11:19:44 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 11:19:44 2026 +0000"
      },
      "message": "Reduce test data and add memory limits to prevent resource exhaustion\n\n- Reduce LargeQuery test from 100K to 10K records (500-record batches)\n- Reduce MultiNode concurrent operations from 50 to 30\n- Add memory limits to all Docker containers in 1C1D config\n- Add memory limits to all Docker containers in 3C3D config\n- Addresses server resource constraints for GitHub Actions runners\n- Maintains test coverage for pagination (100 fetches with fetchSize\u003d100)\n"
    },
    {
      "commit": "d8bf14790549d55485a6d9a00f9e80fcbf5d88dd",
      "tree": "a1f4a2b79d6130c2068251de6fe5cf6ea3b48652",
      "parents": [
        "bd03eb4a41dbca3aac1969898c370f6e78a1a5bc"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 10:27:56 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 10:27:56 2026 +0000"
      },
      "message": "Fix StatementId handling and update large query test to 100K records\n\n- Request and store statementId from server on session open\n- Use proper statementId in all query and non-query statements\n- Fixes \"StatementId: 0 doesn\u0027t exist in this session\" error\n- Update large query test to 100,000 records with 1ms intervals\n- Insert data in 1000-record batches for better performance\n"
    },
    {
      "commit": "bd03eb4a41dbca3aac1969898c370f6e78a1a5bc",
      "tree": "7aec47cc90e566a8cd790e213d24c57f4c66cc17",
      "parents": [
        "a386191d80aae28f93b941ae8f54f2b4a456d4af"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 10:07:01 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 10:07:01 2026 +0000"
      },
      "message": "Fix Thrift transport protocol: use TFramedTransport instead of TBufferedTransport\n\n- Change from TBufferedTransport to TFramedTransport in Connection.ts\n- IoTDB requires TFramedTransport for proper frame-based protocol communication\n- Fixes \"Read a negative frame size\" error that was causing all E2E tests to fail\n- Matches iotdb-client-csharp implementation which uses TFramedTransport\n"
    },
    {
      "commit": "a386191d80aae28f93b941ae8f54f2b4a456d4af",
      "tree": "842d3f6d905f76d908db3bf72f505c1da1f14d71",
      "parents": [
        "1fb298201bfae995fd58870247f5fb18e8181b32"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 09:39:20 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 09:39:20 2026 +0000"
      },
      "message": "Increase test timeouts and add startup delay for IoTDB\n\n- Increase beforeAll/afterAll timeouts from 30s to 60s for better reliability\n- Add 30s startup delay in 1C1D docker-compose before running tests\n- Add 60s startup delay in 3C3D docker-compose for cluster initialization\n- Fixes E2E test connection timeouts caused by slow IoTDB startup\n"
    },
    {
      "commit": "1fb298201bfae995fd58870247f5fb18e8181b32",
      "tree": "b852de594e3622a118e9027a4576965f02617ebb",
      "parents": [
        "68bfd3fad381fb8b21c92b0d327a8bb953af77aa"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 09:07:13 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 09:07:13 2026 +0000"
      },
      "message": "Fix E2E tests: copy thrift files and increase timeouts\n\n- Add copy:thrift script to copy generated JS files to dist folder\n- Update build script to include thrift file copying\n- Increase beforeAll/afterAll timeouts to 30 seconds for IoTDB connection\n- Simplify E2E Dockerfile to copy all files and build project\n- Fixes test timeouts and missing thrift files in dist folder\n"
    },
    {
      "commit": "68bfd3fad381fb8b21c92b0d327a8bb953af77aa",
      "tree": "3ce409cd36b102a7c90ea121fbf6e64df7a4b278",
      "parents": [
        "ea4ce0672279d8401539b7df0fcf3f5adf6c8e13"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 08:19:59 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 08:19:59 2026 +0000"
      },
      "message": "Fix missing common_types.js in Thrift generated files\n\n- Generate common_types.js from common.thrift IDL file\n- Update Dockerfile to install thrift compiler and generate all required files\n- Ensures both client_types.js and common_types.js are available\n- Fixes \"Cannot find module \u0027./common_types\u0027\" error in E2E tests\n"
    },
    {
      "commit": "ea4ce0672279d8401539b7df0fcf3f5adf6c8e13",
      "tree": "483cf9d360b1ce324810b76cb0f30b43aad14bc0",
      "parents": [
        "33b487e24158fb4d92e348f07cb1303453e6f78e"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 07:35:41 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 07:35:41 2026 +0000"
      },
      "message": "Fix docker-compose command error in GitHub Actions\n\n- Remove fallback to docker-compose (with hyphen) command\n- Use only \u0027docker compose\u0027 (with space) which is the modern Docker CLI plugin\n- GitHub Actions runners have Docker Compose v2 installed by default\n- Fixes: \"docker-compose: command not found\" error in workflows\n"
    },
    {
      "commit": "33b487e24158fb4d92e348f07cb1303453e6f78e",
      "tree": "13de28a016c00658223b89b33a4984c6bf75071d",
      "parents": [
        "ea311b4f5f1a9425dcd6f1a29feac2c2a26fa61d"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 06:59:11 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 06:59:11 2026 +0000"
      },
      "message": "Add package-lock.json for GitHub Actions caching\n\n- Remove package-lock.json and yarn.lock from .gitignore\n- Add package-lock.json to enable npm caching in GitHub Actions workflows\n- Ensures reproducible builds and faster CI/CD pipeline execution\n- Fixes: \"Dependencies lock file is not found\" error in workflows\n"
    },
    {
      "commit": "ea311b4f5f1a9425dcd6f1a29feac2c2a26fa61d",
      "tree": "51bc8f11e60a9a6bb2316e5be0dde910abc671ff",
      "parents": [
        "2d30b79a7b356a7bd70f30f32d3b60fe779e057a"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 06:39:06 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 06:39:06 2026 +0000"
      },
      "message": "Update IoTDB version to 2.0.6 for E2E testing\n\n- Update docker-compose-1c1d.yml to use apache/iotdb:2.0.6-confignode and 2.0.6-datanode\n- Update docker-compose-3c3d.yml to use apache/iotdb:2.0.6-confignode and 2.0.6-datanode\n- Update CI_CD_SUMMARY.md documentation to reflect version 2.0.6\n- All services now use IoTDB 2.0.6 for better compatibility and latest features\n"
    },
    {
      "commit": "2d30b79a7b356a7bd70f30f32d3b60fe779e057a",
      "tree": "bfdcf73cb6935d08c2b6e6053d2fdc257f96982d",
      "parents": [
        "ce9a43bac8dc8959d0f56b6d8569bf7be867c442"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 06:13:25 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 06:13:25 2026 +0000"
      },
      "message": "Fix GitHub Actions: use specific IoTDB versions and improve compatibility\n\n- Use apache/iotdb:1.3.6-confignode and apache/iotdb:1.3.6-datanode instead of latest\n- Remove obsolete version directive from docker-compose files\n- Add fallback to docker-compose command for better compatibility\n- Remove unnecessary entrypoint command overrides for confignode\n- Update documentation to reflect image version changes\n"
    },
    {
      "commit": "ce9a43bac8dc8959d0f56b6d8569bf7be867c442",
      "tree": "634a6c5e875e4754e11bea519b10e359acd3decb",
      "parents": [
        "375ab8b9564fe3da398f4b37c695c3aee8184e79"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 06:00:46 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 06:00:46 2026 +0000"
      },
      "message": "Add CI/CD implementation summary documentation\n"
    },
    {
      "commit": "375ab8b9564fe3da398f4b37c695c3aee8184e79",
      "tree": "eda2080890faea67290c22ac3a3a5fa8484dcdd4",
      "parents": [
        "9e6a4ff9cf641bb19538cdaa85eb5086919352e9"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:59:57 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:59:57 2026 +0000"
      },
      "message": "Add GitHub Actions for E2E testing and Thrift update automation\n\n- Add E2E workflows for 1C1D and 3C3D IoTDB configurations\n- Add scheduled workflow to check for Thrift definition updates from IoTDB master\n- Create Docker Compose files for testing with 1C1D and 3C3D setups\n- Add comprehensive large query E2E tests with multiple fetchResult calls\n- Add multi-node E2E tests for cluster scenarios\n- Update .gitignore to exclude IoTDB data directories\n"
    },
    {
      "commit": "9e6a4ff9cf641bb19538cdaa85eb5086919352e9",
      "tree": "ce824c3c332c172ca64bdf86c4dff053fefa7712",
      "parents": [
        "ff0e0572697ad076307a965f0fe5bd845ff9f4ae"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:47:27 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:47:27 2026 +0000"
      },
      "message": "Add project status summary - Implementation complete\n"
    },
    {
      "commit": "ff0e0572697ad076307a965f0fe5bd845ff9f4ae",
      "tree": "7ef76197d0ec6ea1ac2d199ba2e85989473a3064",
      "parents": [
        "8e5781a7a2bb3bb69e4ef21b1825992b243fc12b"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:46:24 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:46:24 2026 +0000"
      },
      "message": "Add contributing guide for future development\n"
    },
    {
      "commit": "8e5781a7a2bb3bb69e4ef21b1825992b243fc12b",
      "tree": "62940f6f1270cbd4471fda4bca84d309625c8cd9",
      "parents": [
        "11f4ee709409e7c45885950661bda7186f2673e3"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:45:37 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:45:37 2026 +0000"
      },
      "message": "Add comprehensive implementation documentation and changelog\n"
    },
    {
      "commit": "11f4ee709409e7c45885950661bda7186f2673e3",
      "tree": "3225ae4ed036605ebebef0a7fb85cb05a58c0f32",
      "parents": [
        "5bed73491fac6f8858673bd66abc3954f67463f5"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:43:24 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:43:24 2026 +0000"
      },
      "message": "Address code review feedback: improve error handling, async operations, and validation\n"
    },
    {
      "commit": "5bed73491fac6f8858673bd66abc3954f67463f5",
      "tree": "de1b18334fb7977edf245bff5b9f5be7d1d12147",
      "parents": [
        "574add8fcc62f90d8b04fc53ea75a97662c50cb7"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:41:42 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:41:42 2026 +0000"
      },
      "message": "Add comprehensive tests, examples, and documentation\n"
    },
    {
      "commit": "574add8fcc62f90d8b04fc53ea75a97662c50cb7",
      "tree": "4d9e11df7929bf0fea9e363b01f361f5228efb8e",
      "parents": [
        "d6a978de27053d1f9c98629a4a0d3f56b6947da8"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:37:40 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:37:40 2026 +0000"
      },
      "message": "Add core IoTDB client implementation with Session, SessionPool, and TableSessionPool\n"
    },
    {
      "commit": "d6a978de27053d1f9c98629a4a0d3f56b6947da8",
      "tree": "ea1e129a21a723a275a98a82c155f481d6406a34",
      "parents": [
        "1b9023ee65560463f1b500ed816befacd47b3805"
      ],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:32:53 2026 +0000"
      },
      "committer": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 05:32:53 2026 +0000"
      },
      "message": "Initial plan\n"
    },
    {
      "commit": "1b9023ee65560463f1b500ed816befacd47b3805",
      "tree": "ea1e129a21a723a275a98a82c155f481d6406a34",
      "parents": [],
      "author": {
        "name": "CritasWang",
        "email": "critas@outlook.com",
        "time": "Tue Jan 27 13:32:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 27 13:32:49 2026 +0800"
      },
      "message": "Initial commit\n"
    }
  ]
}
