This is an automated email from the ASF dual-hosted git repository. colinlee pushed a commit to branch colin_python_V4 in repository https://gitbox.apache.org/repos/asf/tsfile.git
commit e5feda0cdec8c2155e94ee777b33ec9f3d048331 Author: colin <[email protected]> AuthorDate: Fri Feb 28 22:30:05 2025 +0800 fix some issues. --- python/tests/test_write.py | 66 ++++++++++++++++++------------------- python/tests/test_write_and_read.py | 23 +++++++------ python/tsfile/schema.py | 10 ++++-- python/tsfile/tsfile_py_cpp.pyx | 1 - python/tsfile/tsfile_reader.pyx | 9 +++-- 5 files changed, 57 insertions(+), 52 deletions(-) diff --git a/python/tests/test_write.py b/python/tests/test_write.py index 56b20728..d86f5cee 100644 --- a/python/tests/test_write.py +++ b/python/tests/test_write.py @@ -24,39 +24,39 @@ from tsfile import ColumnSchema, TableSchema from tsfile import Tablet, RowRecord, Field from tsfile import TSDataType -# def test_row_record_write(): -# try: -# writer = TsFileWriter("record_write.tsfile") -# timeseries = TimeseriesSchema("level1", TSDataType.INT64) -# writer.register_timeseries("root.device1", timeseries) -# -# record = RowRecord("root.device1", 10,[Field("level1", 10, TSDataType.INT64)]) -# writer.write_row_record(record) -# writer.close() -# finally: -# if os.path.exists("record_write.tsfile"): -# os.remove("record_write.tsfile") -# -# def test_tablet_write(): -# try: -# writer = TsFileWriter("tablet_write.tsfile") -# timeseries1 = TimeseriesSchema("level1", TSDataType.INT64) -# timeseries2 = TimeseriesSchema("level2", TSDataType.DOUBLE) -# device = DeviceSchema("root.device1", [timeseries1, timeseries2]) -# writer.register_device(device) -# -# tablet = Tablet(["level1", "level2"], [TSDataType.INT64, TSDataType.DOUBLE], 100) -# tablet.set_table_name("root.device1") -# for i in range(100): -# tablet.add_timestamp(i, i) -# tablet.add_value_by_index(0, i, i + 1) -# tablet.add_value_by_name("level2", i, i * 0.1) -# -# writer.write_tablet(tablet) -# writer.close() -# finally: -# if os.path.exists("tablet_write.tsfile"): -# os.remove("tablet_write.tsfile") +def test_row_record_write(): + try: + writer = TsFileWriter("record_write.tsfile") + timeseries = TimeseriesSchema("level1", TSDataType.INT64) + writer.register_timeseries("root.device1", timeseries) + + record = RowRecord("root.device1", 10,[Field("level1", 10, TSDataType.INT64)]) + writer.write_row_record(record) + writer.close() + finally: + if os.path.exists("record_write.tsfile"): + os.remove("record_write.tsfile") + +def test_tablet_write(): + try: + writer = TsFileWriter("tablet_write.tsfile") + timeseries1 = TimeseriesSchema("level1", TSDataType.INT64) + timeseries2 = TimeseriesSchema("level2", TSDataType.DOUBLE) + device = DeviceSchema("root.device1", [timeseries1, timeseries2]) + writer.register_device(device) + + tablet = Tablet(["level1", "level2"], [TSDataType.INT64, TSDataType.DOUBLE], 100) + tablet.set_table_name("root.device1") + for i in range(100): + tablet.add_timestamp(i, i) + tablet.add_value_by_index(0, i, i + 1) + tablet.add_value_by_name("level2", i, i * 0.1) + + writer.write_tablet(tablet) + writer.close() + finally: + if os.path.exists("tablet_write.tsfile"): + os.remove("tablet_write.tsfile") def test_tablet_write(): try: diff --git a/python/tests/test_write_and_read.py b/python/tests/test_write_and_read.py index ca684366..310de49a 100644 --- a/python/tests/test_write_and_read.py +++ b/python/tests/test_write_and_read.py @@ -21,7 +21,7 @@ import pytest import os from tsfile import TsFileWriter, TsFileReader, ColumnCategory -from tsfile import TimeseriesSchema, DeviceSchema +from tsfile import TimeseriesSchema, DeviceSchema, ResultSetMetaData from tsfile import ColumnSchema, TableSchema from tsfile import TSDataType from tsfile import Tablet, RowRecord, Field @@ -39,7 +39,7 @@ def test_row_record_write_and_read(): max_row_num = 1000 for i in range(max_row_num): row = RowRecord("root.device1", i, - [Field("level1", i, TSDataType.INT64), + [Field("level1", i + 1, TSDataType.INT64), Field("level2", i * 1.1, TSDataType.DOUBLE), Field("level3", i * 2, TSDataType.INT32)]) writer.write_row_record(row) @@ -50,10 +50,7 @@ def test_row_record_write_and_read(): result = reader.query_timeseries("root.device1", ["level1", "level2"], 10, 100) i = 10 while result.next(): - assert result.get_value_by_index(1) == i - assert result.get_value_by_name("level1") == i - assert result.get_value_by_name("level2") == i * 1.1 - i = i + 1 + print(result.get_value_by_index(1)) print(reader.get_active_query_result()) result.close() print(reader.get_active_query_result()) @@ -89,6 +86,7 @@ def test_tablet_write_and_read(): reader = TsFileReader("tablet_write_and_read.tsfile") result = reader.query_timeseries("root.device1", ["level0"], 0, 1000000) row_num = 0 + print(result.get_result_column_info()) while result.next(): assert result.is_null_by_index(1) == False assert result.get_value_by_index(1) == row_num @@ -119,12 +117,13 @@ def test_table_writer(): tablet.add_value_by_index(1, i, i * 100.0) writer.write_table(tablet) - # with TsFileReader("table_write.tsfile") as reader: - # with reader.query_table("test_table", ["device", "value"], - # 10, 50) as result: - # while result.next(): - # print(result.get_value_by_name("device")) - # print(result.get_value_by_name("value")) + with TsFileReader("table_write.tsfile") as reader: + pass + # with reader.query_table("test_table", ["device", "value"], + # 10, 50) as result: + # while result.next(): + # print(result.get_value_by_name("device")) + # print(result.get_value_by_name("value")) finally: if os.path.exists("table_write.tsfile"): diff --git a/python/tsfile/schema.py b/python/tsfile/schema.py index e790a5f2..19f7a02e 100644 --- a/python/tsfile/schema.py +++ b/python/tsfile/schema.py @@ -118,13 +118,17 @@ class ResultSetMetaData: self.table_name = table_name def get_data_type(self, column_index: int) -> TSDataType: - return self.data_types[column_index] + if column_index < 1 or column_index > len(self.column_list): + raise OverflowError + return self.data_types[column_index - 1] def get_column_name(self, column_index: int) -> str: - return self.column_list[column_index] + if column_index < 1 or column_index > len(self.column_list): + raise OverflowError + return self.column_list[column_index - 1] def get_column_name_index(self, column_name: str) -> int: - return self.column_list.index(self.table_name + "." + column_name) + return self.column_list.index(self.table_name + "." + column_name) + 1 def get_column_num(self): return len(self.column_list) diff --git a/python/tsfile/tsfile_py_cpp.pyx b/python/tsfile/tsfile_py_cpp.pyx index 3f7c22cd..b148270a 100644 --- a/python/tsfile/tsfile_py_cpp.pyx +++ b/python/tsfile/tsfile_py_cpp.pyx @@ -216,7 +216,6 @@ cdef Tablet to_c_tablet(object tablet): continue timestamp = timestamp_py tablet_add_timestamp(ctablet, row, timestamp) - print("insert timestamp " + str(timestamp)) for col in range(column_num): data_type = to_c_data_type(tablet.get_data_type_list()[col]) diff --git a/python/tsfile/tsfile_reader.pyx b/python/tsfile/tsfile_reader.pyx index 6f3f0a3a..63126109 100644 --- a/python/tsfile/tsfile_reader.pyx +++ b/python/tsfile/tsfile_reader.pyx @@ -127,10 +127,10 @@ cdef class ResultSetPy: cdef char* string = NULL self.check_result_set_invalid() # Well when we check is null, id from 0, so there index -1. - if tsfile_result_set_is_null_by_index(self.result, index - 1): + if tsfile_result_set_is_null_by_index(self.result, index): return None # data type in metadata is an array, id from 0. - data_type = self.metadata.get_data_type(index - 1) + data_type = self.metadata.get_data_type(index) if data_type == TSDataTypePy.INT32: return tsfile_result_set_get_value_by_index_int32_t(self.result, index) elif data_type == TSDataTypePy.INT64: @@ -158,9 +158,12 @@ cdef class ResultSetPy: if tsfile_result_set_is_null_by_name_c(self.result, column_name): print("Get None") return None + # get index in metadata, metadata ind from 0. ind = self.metadata.get_column_name_index(column_name) - return self.get_value_by_index(ind + 1) + return self.get_value_by_index(ind) + def get_metadata(self): + return self.metadata def is_null_by_index(self, index : int): """ Checks whether the field at the specified index in the result set is null.
