You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tsfile.apache.org by ColinLee <sh...@163.com> on 2026/08/05 08:20:54 UTC
[DISCUSS] Add TsFile properties support for C++ and Python
Hi community,
I have opened PR #897 to add file-level TsFile properties support for the C++ and Python APIs:
https://github.com/apache/tsfile/pull/897
Java already represents TsFile properties as Map<String, byte[]>. This PR provides equivalent capabilities for C++ and Python while keeping the existing TsFile metadata encoding unchanged.
The main changes include:
1. C++
- Introduce TsFilePropertyValue and TsFileProperties for binary property values.
- Add property setters to TsFileWriter and TsFileTableWriter.
- Add TsFileReader::get_tsfile_properties().
- Replace the previous raw-pointer property map with value-based ownership.
2. C wrapper
- Add length-aware APIs for binary property keys and values.
- Add an explicit is_null field to distinguish null from an empty byte array.
- Provide a release function for property results returned by the reader.
3. Python
- Add add_tsfile_property(key: str, value: bytes) to TsFileWriter and
TsFileTableWriter.
- Add get_tsfile_properties() to TsFileReader.
- Return properties as dict[str, bytes | None].
- Accept bytes values without implicit string conversion.
Property values are treated as raw bytes without an additional type tag.
Applications can use their own portable encoding for integers, floating-point
values, or structures. Adding the same key again replaces its previous value.
The implementation preserves compatibility with Java byte[] properties,
including arbitrary binary data, embedded NUL bytes, null values, and
non-null empty byte arrays.
The PR also adds C++, C wrapper, and Python tests covering binary values,
null and empty values, duplicate-key replacement, API validation, and
system property precedence.
Feedback and review are welcome.
Best regards,
Colin