Skip to main content

diesel/pg/expression/
helper_types.rs

1use crate::dsl::{AsExpr, AsExprOf, SqlTypeOf};
2use crate::expression::Expression;
3use crate::expression::grouped::Grouped;
4use crate::expression_methods::JsonIndex;
5use crate::pg::expression::expression_methods::private::JsonRemoveIndex;
6use crate::pg::types::sql_types::Array;
7use crate::sql_types::Nullable;
8use crate::sql_types::{Inet, Integer, VarChar};
9
10/// The return type of [`lhs.ilike(rhs)`](super::expression_methods::PgTextExpressionMethods::ilike)
11#[cfg(feature = "postgres_backend")]
12pub type ILike<Lhs, Rhs> = Grouped<super::operators::ILike<Lhs, AsExprOf<Rhs, VarChar>>>;
13#[doc(hidden)] // required for #[auto_type]
14pub type Ilike<Lhs, Rhs> = ILike<Lhs, Rhs>;
15
16/// The return type of [`lhs.not_ilike(rhs)`](super::expression_methods::PgTextExpressionMethods::not_ilike)
17#[cfg(feature = "postgres_backend")]
18pub type NotILike<Lhs, Rhs> = Grouped<super::operators::NotILike<Lhs, AsExprOf<Rhs, VarChar>>>;
19#[doc(hidden)] // required for #[auto_type]
20pub type NotIlike<Lhs, Rhs> = NotILike<Lhs, Rhs>;
21
22/// The return type of [`lhs.similar_to(rhs)`](super::expression_methods::PgTextExpressionMethods::similar_to)
23#[cfg(feature = "postgres_backend")]
24pub type SimilarTo<Lhs, Rhs> = Grouped<super::operators::SimilarTo<Lhs, AsExprOf<Rhs, VarChar>>>;
25
26/// The return type of [`lhs.not_similar_to(rhs)`](super::expression_methods::PgTextExpressionMethods::not_similar_to)
27#[cfg(feature = "postgres_backend")]
28pub type NotSimilarTo<Lhs, Rhs> =
29    Grouped<super::operators::NotSimilarTo<Lhs, AsExprOf<Rhs, VarChar>>>;
30
31/// The return type of [`lhs.is_not_distinct_from(rhs)`](super::expression_methods::PgExpressionMethods::is_not_distinct_from)
32#[cfg(feature = "postgres_backend")]
33pub type IsNotDistinctFrom<Lhs, Rhs> =
34    Grouped<super::operators::IsNotDistinctFrom<Lhs, AsExpr<Rhs, Lhs>>>;
35
36/// The return type of [`lhs.is_distinct_from(rhs)`](super::expression_methods::PgExpressionMethods::is_distinct_from)
37#[cfg(feature = "postgres_backend")]
38pub type IsDistinctFrom<Lhs, Rhs> =
39    Grouped<super::operators::IsDistinctFrom<Lhs, AsExpr<Rhs, Lhs>>>;
40
41/// The return type of [`lhs.overlaps_with(rhs)`](super::expression_methods::PgArrayExpressionMethods::overlaps_with)
42/// and [`lhs.overlaps_with(rhs)`](super::expression_methods::PgRangeExpressionMethods::overlaps_with)
43#[cfg(feature = "postgres_backend")]
44pub type OverlapsWith<Lhs, Rhs> = Grouped<super::operators::OverlapsWith<Lhs, AsExpr<Rhs, Lhs>>>;
45
46/// The return type of [`lhs.contains(rhs)`](super::expression_methods::PgArrayExpressionMethods::contains)
47/// for array expressions
48#[cfg(feature = "postgres_backend")]
49pub type Contains<Lhs, Rhs> = Grouped<super::operators::Contains<Lhs, AsExpr<Rhs, Lhs>>>;
50
51#[doc(hidden)]
52#[deprecated(note = "Use `Contains` instead")]
53pub type ArrayContains<Lhs, Rhs> = Contains<Lhs, Rhs>;
54
55/// The return type of [`lhs.contains(rhs)`](super::expression_methods::PgRangeExpressionMethods::contains)
56/// for range expressions
57#[cfg(feature = "postgres_backend")]
58pub type RangeContains<Lhs, Rhs> = Grouped<
59    super::operators::Contains<
60        Lhs,
61        AsExprOf<Rhs, <SqlTypeOf<Lhs> as super::expression_methods::RangeOrMultirange>::Inner>,
62    >,
63>;
64
65/// The return type of [`lhs.range_extends_right_to(rhs)`](super::expression_methods::PgRangeExpressionMethods::range_extends_right_to)
66/// for range expressions
67#[cfg(feature = "postgres_backend")]
68pub type RangeExtendsRightTo<Lhs, Rhs> =
69    Grouped<super::operators::ExtendsRightTo<Lhs, AsExpr<Rhs, Lhs>>>;
70
71/// The return type of [`lhs.range_extends_left_to(rhs)`](super::expression_methods::PgRangeExpressionMethods::range_extends_left_to)
72/// for range expressions
73#[cfg(feature = "postgres_backend")]
74pub type RangeExtendsLeftTo<Lhs, Rhs> =
75    Grouped<super::operators::ExtendsLeftTo<Lhs, AsExpr<Rhs, Lhs>>>;
76
77/// The return type of [`lhs.contains_range(rhs)`](super::expression_methods::PgRangeExpressionMethods::contains_range)
78/// for range expressions
79#[cfg(feature = "postgres_backend")]
80pub type ContainsRange<Lhs, Rhs> = Contains<Lhs, Rhs>;
81
82/// The return type of [`lhs.range_is_contained_by(rhs)`](super::expression_methods::PgRangeExpressionMethods::is_contained_by)
83/// and [`lhs.is_contained_by(rhs)`](super::expression_methods::PgArrayExpressionMethods::is_contained_by)
84#[cfg(feature = "postgres_backend")]
85pub type IsContainedBy<Lhs, Rhs> = Grouped<super::operators::IsContainedBy<Lhs, AsExpr<Rhs, Lhs>>>;
86
87/// The return type of [`lhs.is_contained_by_range(rhs)`](super::expression_methods::PgExpressionMethods::is_contained_by_range)
88#[cfg(feature = "postgres_backend")]
89pub type IsContainedByRange<Lhs, Rhs> = Grouped<
90    super::operators::IsContainedBy<Lhs, AsExprOf<Rhs, diesel::sql_types::Range<SqlTypeOf<Lhs>>>>,
91>;
92
93/// The return type of [`lhs.range_is_contained_by(rhs)`](super::expression_methods::PgRangeExpressionMethods::lesser_than)
94#[cfg(feature = "postgres_backend")]
95pub type LesserThanRange<Lhs, Rhs> =
96    Grouped<super::operators::IsContainedByNet<Lhs, AsExpr<Rhs, Lhs>>>;
97
98#[doc(hidden)] // used by `#[auto_type]`
99pub type LesserThan<Lhs, Rhs> = LesserThanRange<Lhs, Rhs>;
100
101/// The return type of [`lhs.range_is_contained_by(rhs)`](super::expression_methods::PgRangeExpressionMethods::greater_than)
102#[cfg(feature = "postgres_backend")]
103pub type GreaterThanRange<Lhs, Rhs> = Grouped<super::operators::ContainsNet<Lhs, AsExpr<Rhs, Lhs>>>;
104
105#[doc(hidden)] // used by `#[auto_type]`
106pub type GreaterThan<Lhs, Rhs> = GreaterThanRange<Lhs, Rhs>;
107
108/// The return type of [`lhs.union_range(rhs)`](super::expression_methods::PgRangeExpressionMethods::union_range)
109#[cfg(feature = "postgres_backend")]
110pub type UnionRange<Lhs, Rhs> = Grouped<super::operators::UnionsRange<Lhs, AsExpr<Rhs, Lhs>>>;
111
112/// The return type of [`lhs.difference_range(rhs)`](super::expression_methods::PgRangeExpressionMethods::difference_range)
113#[cfg(feature = "postgres_backend")]
114pub type Difference<Lhs, Rhs> = Grouped<super::operators::DifferenceRange<Lhs, AsExpr<Rhs, Lhs>>>;
115
116#[doc(hidden)] // used by `#[auto_type]`
117pub type DifferenceRange<Lhs, Rhs> = Difference<Lhs, Rhs>;
118
119/// The return type of [`lhs.range_adjacent(rhs)`](super::expression_methods::PgRangeExpressionMethods::range_adjacent)
120#[cfg(feature = "postgres_backend")]
121pub type RangeAdjacent<Lhs, Rhs> = Grouped<super::operators::RangeAdjacent<Lhs, AsExpr<Rhs, Lhs>>>;
122
123/// The return type of [`lhs.intersection_range(rhs)`](super::expression_methods::PgRangeExpressionMethods::intersection_range)
124#[cfg(feature = "postgres_backend")]
125pub type Intersection<Lhs, Rhs> =
126    Grouped<super::operators::IntersectionRange<Lhs, AsExpr<Rhs, Lhs>>>;
127
128#[doc(hidden)] // used by `#[auto_type]`
129pub type IntersectionRange<Lhs, Rhs> = Intersection<Lhs, Rhs>;
130
131/// The return type of [`expr.nulls_first()`](super::expression_methods::PgSortExpressionMethods::nulls_first)
132#[cfg(feature = "postgres_backend")]
133pub type NullsFirst<T> = super::operators::NullsFirst<T>;
134
135/// The return type of [`expr.is_json()`](super::expression_methods::PgTextExpressionMethods::is_json())
136#[cfg(feature = "postgres_backend")]
137pub type IsJson<T> = super::operators::IsJson<T>;
138
139/// The return type of [`expr.is_not_json()`](super::expression_methods::PgTextExpressionMethods::is_not_json())
140#[cfg(feature = "postgres_backend")]
141pub type IsNotJson<T> = super::operators::IsNotJson<T>;
142
143/// The return type of [`expr.is_json_object()`](super::expression_methods::PgTextExpressionMethods::is_json_object())
144#[cfg(feature = "postgres_backend")]
145pub type IsJsonObject<T> = super::operators::IsJsonObject<T>;
146
147/// The return type of [`expr.is_not_json_object()`](super::expression_methods::PgTextExpressionMethods::is_not_json_object())
148#[cfg(feature = "postgres_backend")]
149pub type IsNotJsonObject<T> = super::operators::IsNotJsonObject<T>;
150
151/// The return type of [`expr.is_json_array()`](super::expression_methods::PgTextExpressionMethods::is_json_array())
152#[cfg(feature = "postgres_backend")]
153pub type IsJsonArray<T> = super::operators::IsJsonArray<T>;
154
155/// The return type of [`expr.is_not_json_array()`](super::expression_methods::PgTextExpressionMethods::is_not_json_array())
156#[cfg(feature = "postgres_backend")]
157pub type IsNotJsonArray<T> = super::operators::IsNotJsonArray<T>;
158
159/// The return type of [`expr.is_json_scalar()`](super::expression_methods::PgTextExpressionMethods::is_json_scalar())
160#[cfg(feature = "postgres_backend")]
161pub type IsJsonScalar<T> = super::operators::IsJsonScalar<T>;
162
163/// The return type of [`expr.is_not_json_scalar()`](super::expression_methods::PgTextExpressionMethods::is_not_json_scalar())
164#[cfg(feature = "postgres_backend")]
165pub type IsNotJsonScalar<T> = super::operators::IsNotJsonScalar<T>;
166
167/// The return type of [`expr.nulls_last()`](super::expression_methods::PgSortExpressionMethods::nulls_last())
168#[cfg(feature = "postgres_backend")]
169pub type NullsLast<T> = super::operators::NullsLast<T>;
170
171/// The return type of [`expr.at_time_zone(tz)`](super::expression_methods::PgTimestampExpressionMethods::at_time_zone())
172#[cfg(feature = "postgres_backend")]
173pub type AtTimeZone<Lhs, Rhs> =
174    Grouped<super::date_and_time::AtTimeZone<Lhs, AsExprOf<Rhs, VarChar>>>;
175
176/// The return type of [`lhs.contains(rhs)`](super::expression_methods::PgNetExpressionMethods::contains())
177/// for network types
178#[cfg(feature = "postgres_backend")]
179pub type ContainsNet<Lhs, Rhs> = Grouped<super::operators::ContainsNet<Lhs, AsExprOf<Rhs, Inet>>>;
180
181/// The return type of [`lhs.contains_or_eq(rhs)`](super::expression_methods::PgNetExpressionMethods::contains_or_eq)
182#[cfg(feature = "postgres_backend")]
183pub type ContainsNetLoose<Lhs, Rhs> =
184    Grouped<super::operators::ContainsNetLoose<Lhs, AsExprOf<Rhs, Inet>>>;
185
186#[doc(hidden)] // used by `#[auto_type]`
187pub type ContainsOrEq<Lhs, Rhs> = ContainsNetLoose<Lhs, Rhs>;
188
189/// The return type of [`lhs.is_contained_by(rhs)`](super::expression_methods::PgNetExpressionMethods::is_contained_by)
190/// for network types
191#[cfg(feature = "postgres_backend")]
192pub type IsContainedByNet<Lhs, Rhs> =
193    Grouped<super::operators::IsContainedByNet<Lhs, AsExprOf<Rhs, Inet>>>;
194
195/// The return type of [`lhs.is_contained_by_or_eq(rhs)`](super::expression_methods::PgNetExpressionMethods::is_contained_by_or_eq)
196#[cfg(feature = "postgres_backend")]
197pub type IsContainedByNetLoose<Lhs, Rhs> =
198    Grouped<super::operators::IsContainedByNetLoose<Lhs, AsExprOf<Rhs, Inet>>>;
199
200#[doc(hidden)] // is used by `#[auto_type]`
201pub type IsContainedByOrEq<Lhs, Rhs> = IsContainedByNetLoose<Lhs, Rhs>;
202
203/// The return type of [`lhs.overlaps_with(rhs)`](super::expression_methods::PgNetExpressionMethods::overlaps_with)
204/// for network types
205#[cfg(feature = "postgres_backend")]
206pub type OverlapsWithNet<Lhs, Rhs> =
207    Grouped<super::operators::OverlapsWith<Lhs, AsExprOf<Rhs, Inet>>>;
208
209/// The return type of [`lsh.and(rhs)`](super::expression_methods::PgNetExpressionMethods::and) for network types
210#[cfg(feature = "postgres_backend")]
211pub type AndNet<Lhs, Rhs> = Grouped<super::operators::AndNet<Lhs, AsExprOf<Rhs, Inet>>>;
212
213/// The return type of [`lsh.or(rhs)`](super::expression_methods::PgNetExpressionMethods::or) for network types
214#[cfg(feature = "postgres_backend")]
215pub type OrNet<Lhs, Rhs> = Grouped<super::operators::OrNet<Lhs, AsExprOf<Rhs, Inet>>>;
216
217/// The return type of [`lsh.diff(rhs)`](super::expression_methods::PgNetExpressionMethods::diff)
218#[cfg(feature = "postgres_backend")]
219pub type DifferenceNet<Lhs, Rhs> =
220    Grouped<super::operators::DifferenceNet<Lhs, AsExprOf<Rhs, Inet>>>;
221
222#[doc(hidden)] // used by `#[auto_type]`
223pub type Diff<Lhs, Rhs> = DifferenceNet<Lhs, Rhs>;
224
225#[doc(hidden)]
226#[deprecated(note = "Use `dsl::Concat` instead")]
227pub type ConcatJsonb<Lhs, Rhs> = crate::dsl::Concat<Lhs, Rhs>;
228
229/// The return type of [`lsh.has_key(rhs)`](super::expression_methods::PgJsonbExpressionMethods::has_key)
230#[cfg(feature = "postgres_backend")]
231pub type HasKeyJsonb<Lhs, Rhs> =
232    Grouped<super::operators::HasKeyJsonb<Lhs, AsExprOf<Rhs, VarChar>>>;
233
234#[doc(hidden)] // needed for `#[auto_type]`
235pub type HasKey<Lhs, Rhs> = HasKeyJsonb<Lhs, Rhs>;
236
237/// The return type of [`lsh.has_any_key(rhs)`](super::expression_methods::PgJsonbExpressionMethods::has_any_key)
238#[cfg(feature = "postgres_backend")]
239pub type HasAnyKeyJsonb<Lhs, Rhs> =
240    Grouped<super::operators::HasAnyKeyJsonb<Lhs, AsExprOf<Rhs, Array<VarChar>>>>;
241
242#[doc(hidden)] // needed for `#[auto_type]`
243pub type HasAnyKey<Lhs, Rhs> = HasAnyKeyJsonb<Lhs, Rhs>;
244
245/// The return type of [`lsh.has_all_keys(rhs)`](super::expression_methods::PgJsonbExpressionMethods::has_all_keys)
246#[cfg(feature = "postgres_backend")]
247pub type HasAllKeysJsonb<Lhs, Rhs> =
248    Grouped<super::operators::HasAllKeysJsonb<Lhs, AsExprOf<Rhs, Array<VarChar>>>>;
249
250#[doc(hidden)] // needed for `#[auto_type]`
251pub type HasAllKeys<Lhs, Rhs> = HasAllKeysJsonb<Lhs, Rhs>;
252
253#[doc(hidden)]
254#[deprecated(note = "Use `dsl::Contains` instead")]
255pub type ContainsJsonb<Lhs, Rhs> = Contains<Lhs, Rhs>;
256
257#[doc(hidden)]
258#[deprecated(note = "Use `dsl::IsContainedBy` instead")]
259pub type IsContainedByJsonb<Lhs, Rhs> = IsContainedBy<Lhs, Rhs>;
260
261/// The return type of [`lhs.index(rhs)`](super::expression_methods::PgArrayExpressionMethods::index)
262#[cfg(feature = "postgres_backend")]
263pub type Index<Lhs, Rhs> = super::operators::ArrayIndex<Lhs, AsExprOf<Rhs, Integer>>;
264
265/// The return type of [`lhs.index_nullable(rhs)`](super::expression_methods::PgArrayExpressionMethods::index_nullable)
266#[cfg(feature = "postgres_backend")]
267pub type IndexNullable<Lhs, Rhs> =
268    super::operators::ArrayIndex<Lhs, AsExprOf<Rhs, Nullable<Integer>>>;
269
270/// The return type of [`lhs.slice(rhs1, rhs2)`](super::expression_methods::PgArrayExpressionMethods::slice)
271#[cfg(feature = "postgres_backend")]
272pub type Slice<Lhs, Rhs1, Rhs2> =
273    super::operators::ArraySlice<Lhs, AsExprOf<Rhs1, Integer>, AsExprOf<Rhs2, Integer>>;
274
275/// The return type of [`lhs.slice_nullable(rhs1, rhs2)`](super::expression_methods::PgArrayExpressionMethods::slice_nullable)
276#[cfg(feature = "postgres_backend")]
277pub type SliceNullable<Lhs, Rhs1, Rhs2> = super::operators::ArraySlice<
278    Lhs,
279    AsExprOf<Rhs1, Nullable<Integer>>,
280    AsExprOf<Rhs2, Nullable<Integer>>,
281>;
282
283/// The return type of [`lhs.slice_from(rhs)`](super::expression_methods::PgArrayExpressionMethods::slice_from)
284#[cfg(feature = "postgres_backend")]
285pub type SliceFrom<Lhs, Rhs> = super::operators::ArraySliceFrom<Lhs, AsExprOf<Rhs, Integer>>;
286
287/// The return type of [`lhs.slice_from_nullable(rhs)`](super::expression_methods::PgArrayExpressionMethods::slice_from_nullable)
288#[cfg(feature = "postgres_backend")]
289pub type SliceFromNullable<Lhs, Rhs> =
290    super::operators::ArraySliceFrom<Lhs, AsExprOf<Rhs, Nullable<Integer>>>;
291
292/// The return type of [`lhs.slice_to(rhs)`](super::expression_methods::PgArrayExpressionMethods::slice_to)
293#[cfg(feature = "postgres_backend")]
294pub type SliceTo<Lhs, Rhs> = super::operators::ArraySliceTo<Lhs, AsExprOf<Rhs, Integer>>;
295
296/// The return type of [`lhs.slice_to_nullable(rhs)`](super::expression_methods::PgArrayExpressionMethods::slice_to_nullable)
297#[cfg(feature = "postgres_backend")]
298pub type SliceToNullable<Lhs, Rhs> =
299    super::operators::ArraySliceTo<Lhs, AsExprOf<Rhs, Nullable<Integer>>>;
300
301#[doc(hidden)]
302#[deprecated(note = "Use `Index` instead")]
303pub type ArrayIndex<Lhs, Rhs> = Index<Lhs, Rhs>;
304
305/// The return type of [`lhs.remove(rhs)`](super::expression_methods::PgJsonbExpressionMethods::remove)
306#[cfg(feature = "postgres_backend")]
307pub type RemoveFromJsonb<Lhs, Rhs, ST> =
308    Grouped<super::operators::RemoveFromJsonb<Lhs, AsExprOf<Rhs, ST>>>;
309
310#[doc(hidden)] // needed for `#[auto_type]`
311pub type Remove<Lhs, Rhs> = RemoveFromJsonb<
312    Lhs,
313    <Rhs as JsonRemoveIndex>::Expression,
314    <<Rhs as JsonRemoveIndex>::Expression as Expression>::SqlType,
315>;
316
317#[doc(hidden)] // deprecated
318pub type RetrieveAsObjectJson<Lhs, Rhs, ST> =
319    Grouped<crate::pg::expression::operators::RetrieveAsObjectJson<Lhs, AsExprOf<Rhs, ST>>>;
320
321/// The return type of [`lhs.retrieve_as_object(rhs)`](super::expression_methods::PgAnyJsonExpressionMethods::retrieve_as_object)
322#[cfg(feature = "postgres_backend")]
323pub type RetrieveAsObject<Lhs, Rhs> = Grouped<
324    crate::pg::expression::operators::RetrieveAsObjectJson<
325        Lhs,
326        AsExprOf<
327            <Rhs as JsonIndex>::Expression,
328            <<Rhs as JsonIndex>::Expression as Expression>::SqlType,
329        >,
330    >,
331>;
332
333#[doc(hidden)] // deprecated
334pub type RetrieveAsTextJson<Lhs, Rhs, ST> =
335    Grouped<crate::expression::operators::RetrieveAsTextJson<Lhs, AsExprOf<Rhs, ST>>>;
336
337/// The return type of [`lhs.retrieve_by_path_as_object(rhs)`](super::expression_methods::PgAnyJsonExpressionMethods::retrieve_by_path_as_object)
338#[cfg(feature = "postgres_backend")]
339pub type RetrieveByPathAsObjectJson<Lhs, Rhs> =
340    Grouped<super::operators::RetrieveByPathAsObjectJson<Lhs, AsExprOf<Rhs, Array<VarChar>>>>;
341
342#[doc(hidden)] // needed for `#[auto_type]`
343pub type RetrieveByPathAsObject<Lhs, Rhs> = RetrieveByPathAsObjectJson<Lhs, Rhs>;
344
345/// The return type of [`lhs.retrieve_by_path_as_text(rhs)`](super::expression_methods::PgAnyJsonExpressionMethods::retrieve_by_path_as_text)
346#[cfg(feature = "postgres_backend")]
347pub type RetrieveByPathAsTextJson<Lhs, Rhs> =
348    Grouped<super::operators::RetrieveByPathAsTextJson<Lhs, AsExprOf<Rhs, Array<VarChar>>>>;
349
350#[doc(hidden)] // needed for `#[auto_type]`
351pub type RetrieveByPathAsText<Lhs, Rhs> = RetrieveByPathAsTextJson<Lhs, Rhs>;
352
353/// The return type of [`lhs.remove_by_path(rhs)`](super::expression_methods::PgJsonbExpressionMethods::remove_by_path)
354#[cfg(feature = "postgres_backend")]
355pub type RemoveByPathFromJsonb<Lhs, Rhs> =
356    Grouped<super::operators::RemoveByPathFromJsonb<Lhs, AsExprOf<Rhs, Array<VarChar>>>>;
357
358#[doc(hidden)] // needed for `#[auto_type]`
359pub type RemoveByPath<Lhs, Rhs> = RemoveByPathFromJsonb<Lhs, Rhs>;
360
361#[doc(hidden)]
362#[deprecated(note = "Use `dsl::Concat` instead")]
363pub type ConcatBinary<Lhs, Rhs> = crate::dsl::Concat<Lhs, Rhs>;
364
365#[doc(hidden)]
366#[deprecated(note = "Use `dsl::Like` instead")]
367pub type LikeBinary<Lhs, Rhs> = crate::dsl::Like<Lhs, Rhs>;
368
369#[doc(hidden)]
370#[deprecated(note = "Use `dsl::NotLike` instead")]
371pub type NotLikeBinary<Lhs, Rhs> = crate::dsl::NotLike<Lhs, Rhs>;
372
373#[doc(hidden)]
374#[deprecated(note = "Use `dsl::Concat` instead")]
375pub type ConcatArray<Lhs, Rhs> = crate::dsl::Concat<Lhs, Rhs>;
376
377#[doc(inline)]
378pub use super::return_type_helpers::*;