1616
1717
1818class Separator (Enum ):
19- first_level = "\uffff "
20- second_level = "\ufffe "
19+ top_tuple = "\uffff "
20+ top_metadata = "\ufffe "
21+ top_attribute = "\ufffd "
2122
2223
2324heap_tuple_table = ReversibleTranslationTable ({
@@ -28,32 +29,35 @@ class Separator(Enum):
2829class HeapTupleEncoding :
2930 @staticmethod
3031 def encoded_tuple (tuple_ : Tuple ) -> str :
31- encoded_metadata = HeapTupleMetadataEncoding .encoded_metadata (tuple_ )
32+ encoded_metadata = _HeapTupleMetadataEncoding .encoded_metadata (
33+ int (tuple_ .relation_version_id .relation_version_number ),
34+ int (tuple_ .relation_version_id .relation_number ),
35+ tuple_ .tid ,
36+ )
3237 encoded_attributes = (
33- HeapTupleAttributeEncoding .encoded_attribute (
38+ _HeapTupleAttributeEncoding .encoded_attribute (
3439 int (tuple_ .relation_version_id .relation_number ),
3540 attribute_number ,
3641 tuple_ [attribute_number ],
3742 )
3843 for attribute_number in range (len (tuple_ ))
3944 )
4045
41- encoded_tuple_without_end = Separator .first_level .value .join (
46+ return Separator .top_tuple .value .join (
4247 (encoded_metadata , * encoded_attributes )
4348 )
44- return f"{ encoded_tuple_without_end } { Separator .first_level .value } "
4549
4650 @staticmethod
4751 def decoded_tuple (encoded_tuple : str ) -> Tuple :
4852 encoded_metadata , * encoded_attributes = (
49- encoded_tuple .split (Separator .first_level .value )
53+ encoded_tuple .split (Separator .top_tuple .value )
5054 )
5155
52- tid , relation_version_id = HeapTupleMetadataEncoding .decoded_metadata (
56+ tid , relation_version_id = _HeapTupleMetadataEncoding .decoded_metadata (
5357 encoded_metadata
5458 )
5559 scalars = tuple (map (
56- HeapTupleAttributeEncoding .decoded_scalar , encoded_attributes
60+ _HeapTupleAttributeEncoding .decoded_scalar , encoded_attributes
5761 ))
5862
5963 return Tuple (tid , relation_version_id , scalars )
@@ -64,35 +68,35 @@ def id_of_encoded_tuple_with_attribute(
6468 attribute_number : int ,
6569 attribute_scalar : Scalar ,
6670 ) -> str :
67- encoded_attribute = HeapTupleAttributeEncoding .encoded_attribute (
71+ return _HeapTupleAttributeEncoding .encoded_attribute (
6872 relation_number ,
6973 attribute_number ,
7074 attribute_scalar
7175 )
7276
73- return (
74- f"{ Separator .first_level .value } "
75- f"{ encoded_attribute } "
76- f"{ Separator .first_level .value } "
77- )
77+ @staticmethod
78+ def id_of_encoded_tuple_with_tid (tid : TID ) -> str :
79+ return _HeapTupleMetadataEncoding .id_of_encoded_tuple_with_tid (tid )
7880
7981
80- type HeapTupleMetadata = tuple [TID , RelationVersionID ]
82+ type _HeapTupleMetadata = tuple [TID , RelationVersionID ]
8183
8284
83- class HeapTupleMetadataEncoding :
85+ class _HeapTupleMetadataEncoding :
8486 @staticmethod
85- def encoded_metadata (tuple : Tuple ) -> str :
86- return Separator .second_level .value .join ((
87- encoded_int (int (tuple .relation_version_id .relation_version_number )),
88- encoded_int (int (tuple .relation_version_id .relation_number )),
89- encoded_uuid (tuple .tid ),
87+ def encoded_metadata (
88+ relation_number : int , relation_version_number : int , tid : TID
89+ ) -> str :
90+ return Separator .top_metadata .value .join ((
91+ encoded_int (relation_version_number ),
92+ encoded_int (relation_number ),
93+ encoded_uuid (tid ),
9094 ))
9195
9296 @staticmethod
93- def decoded_metadata (encoded_metadata : str ) -> HeapTupleMetadata :
97+ def decoded_metadata (encoded_metadata : str ) -> _HeapTupleMetadata :
9498 encoded_version_number , encoded_relation_number , encoded_tid = (
95- encoded_metadata .split (Separator .second_level .value )
99+ encoded_metadata .split (Separator .top_metadata .value )
96100 )
97101
98102 relation_version_number = (Number (decoded_int (encoded_version_number )))
@@ -103,15 +107,19 @@ def decoded_metadata(encoded_metadata: str) -> HeapTupleMetadata:
103107
104108 return tid , version_id
105109
110+ @staticmethod
111+ def id_of_encoded_tuple_with_tid (tid : TID ) -> str :
112+ return f"{ Separator .top_metadata .value } { encoded_uuid (tid )} "
113+
106114
107- class HeapTupleAttributeEncoding :
115+ class _HeapTupleAttributeEncoding :
108116 @staticmethod
109117 def encoded_attribute (
110118 relation_number : int ,
111119 attribute_number : int ,
112120 scalar : Scalar ,
113121 ) -> str :
114- return Separator .second_level .value .join ((
122+ return Separator .top_attribute .value .join ((
115123 encoded_int (relation_number ),
116124 encoded_int (attribute_number ),
117125 encoded_primitive_with_type (scalar , heap_tuple_table ),
@@ -120,7 +128,7 @@ def encoded_attribute(
120128 @staticmethod
121129 def decoded_scalar (encoded_attribute : str ) -> Scalar :
122130 _ , _ , encoded_scalar = encoded_attribute .split (
123- Separator .second_level .value
131+ Separator .top_attribute .value
124132 )
125133
126134 return decoded_primitive_with_type (encoded_scalar , heap_tuple_table )
0 commit comments