@@ -22,7 +22,7 @@ impl SortableTermBuilder {
22
22
}
23
23
24
24
pub fn append_null ( & mut self ) {
25
- self . append ( SortableTermType :: Null , EncTermField :: Null , None , & [ ] )
25
+ self . append ( SortableTermType :: Null , EncTermField :: Null , None , & [ ] , None )
26
26
}
27
27
28
28
pub fn append_boolean ( & mut self , value : Boolean ) {
@@ -31,6 +31,7 @@ impl SortableTermBuilder {
31
31
EncTermField :: Boolean ,
32
32
Some ( value. into ( ) ) ,
33
33
& value. to_be_bytes ( ) ,
34
+ None ,
34
35
)
35
36
}
36
37
@@ -48,6 +49,7 @@ impl SortableTermBuilder {
48
49
field,
49
50
Some ( value) ,
50
51
original_be_bytes,
52
+ None ,
51
53
)
52
54
}
53
55
@@ -57,6 +59,7 @@ impl SortableTermBuilder {
57
59
EncTermField :: BlankNode ,
58
60
None ,
59
61
value. as_str ( ) . as_bytes ( ) ,
62
+ None ,
60
63
)
61
64
}
62
65
@@ -66,15 +69,17 @@ impl SortableTermBuilder {
66
69
EncTermField :: NamedNode ,
67
70
None ,
68
71
value. as_str ( ) . as_bytes ( ) ,
72
+ None ,
69
73
)
70
74
}
71
75
72
- pub fn append_string ( & mut self , value : & str ) {
76
+ pub fn append_string ( & mut self , value : & str , language : Option < & str > ) {
73
77
self . append (
74
78
SortableTermType :: String ,
75
79
EncTermField :: String ,
76
80
None ,
77
81
value. as_bytes ( ) ,
82
+ language. map ( |l| l. as_bytes ( ) ) ,
78
83
)
79
84
}
80
85
@@ -84,6 +89,7 @@ impl SortableTermBuilder {
84
89
EncTermField :: DateTime ,
85
90
Some ( value. timestamp ( ) . value ( ) . into ( ) ) ,
86
91
& value. to_be_bytes ( ) ,
92
+ None ,
87
93
)
88
94
}
89
95
@@ -93,6 +99,7 @@ impl SortableTermBuilder {
93
99
EncTermField :: Time ,
94
100
Some ( value. timestamp ( ) . value ( ) . into ( ) ) ,
95
101
& value. to_be_bytes ( ) ,
102
+ None ,
96
103
)
97
104
}
98
105
@@ -102,15 +109,17 @@ impl SortableTermBuilder {
102
109
EncTermField :: Date ,
103
110
Some ( value. timestamp ( ) . value ( ) . into ( ) ) ,
104
111
& value. to_be_bytes ( ) ,
112
+ None ,
105
113
)
106
114
}
107
115
108
116
pub ( crate ) fn append_duration ( & mut self , value : Duration ) {
109
117
self . append (
110
118
SortableTermType :: Duration ,
111
119
EncTermField :: Duration ,
112
- Some ( Integer :: from ( value. all_months ( ) ) . into ( ) ) ,
113
- & value. seconds ( ) . to_string ( ) . as_bytes ( ) ,
120
+ None , // Sort by bytes
121
+ & value. to_be_bytes ( ) ,
122
+ None ,
114
123
)
115
124
}
116
125
@@ -119,7 +128,8 @@ impl SortableTermBuilder {
119
128
SortableTermType :: YearMonthDuration ,
120
129
EncTermField :: Duration ,
121
130
Some ( Integer :: from ( value. as_i64 ( ) ) . into ( ) ) ,
122
- & value. to_be_bytes ( ) ,
131
+ Duration :: from ( value) . to_be_bytes ( ) . as_slice ( ) ,
132
+ None ,
123
133
)
124
134
}
125
135
@@ -128,16 +138,18 @@ impl SortableTermBuilder {
128
138
SortableTermType :: DayTimeDuration ,
129
139
EncTermField :: Duration ,
130
140
Some ( value. as_seconds ( ) . into ( ) ) ,
131
- & value. to_be_bytes ( ) ,
141
+ Duration :: from ( value) . to_be_bytes ( ) . as_slice ( ) ,
142
+ None ,
132
143
)
133
144
}
134
145
135
- pub fn append_literal ( & mut self , value : & str ) {
146
+ pub fn append_literal ( & mut self , value : & str , literal_type : & str ) {
136
147
self . append (
137
148
SortableTermType :: UnsupportedLiteral ,
138
149
EncTermField :: TypedLiteral ,
139
150
None ,
140
151
value. as_bytes ( ) ,
152
+ Some ( literal_type. as_bytes ( ) ) ,
141
153
)
142
154
}
143
155
@@ -147,6 +159,7 @@ impl SortableTermBuilder {
147
159
enc_type : EncTermField ,
148
160
numeric : Option < Double > ,
149
161
bytes : & [ u8 ] ,
162
+ additional_bytes : Option < & [ u8 ] > ,
150
163
) {
151
164
self . builder
152
165
. field_builder :: < UInt8Builder > ( SortableTermField :: Type . index ( ) )
@@ -172,6 +185,16 @@ impl SortableTermBuilder {
172
185
. unwrap ( ) ;
173
186
bytes_builder. append_value ( bytes) ;
174
187
188
+ let additional_bytes_builder = self
189
+ . builder
190
+ . field_builder :: < BinaryBuilder > ( SortableTermField :: AdditionalBytes . index ( ) )
191
+ . unwrap ( ) ;
192
+ if let Some ( additional_bytes) = additional_bytes {
193
+ additional_bytes_builder. append_value ( additional_bytes) ;
194
+ } else {
195
+ additional_bytes_builder. append_null ( ) ;
196
+ }
197
+
175
198
self . builder . append ( true )
176
199
}
177
200
0 commit comments