Skip to content

Commit 6a64143

Browse files
committed
feat: mark the typed table access API as experimental
1 parent 9fdbc8e commit 6a64143

11 files changed

Lines changed: 54 additions & 0 deletions

packages/postgrest/lib/src/postgrest.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ class PostgrestClient {
126126
/// .select()
127127
/// .where(Books.id.gt(10));
128128
/// ```
129+
@experimental
129130
PostgrestTypedQueryBuilder<Row> table<Row>(PostgrestTable<Row> table) {
130131
return PostgrestTypedQueryBuilder(from(table.name), table);
131132
}

packages/postgrest/lib/src/postgrest_table.dart

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
part of 'postgrest_typed_builder.dart';
22

33
/// Converts a single decoded PostgREST row into [Row].
4+
@experimental
45
typedef RowConverter<Row> = Row Function(Map<String, dynamic> json);
56

67
/// Describes a database table (or view) together with the Dart type its rows
@@ -31,6 +32,7 @@ typedef RowConverter<Row> = Row Function(Map<String, dynamic> json);
3132
/// row representation since they carry no conversion cost and tolerate
3233
/// partial selects, but any converter works, for example `Book.fromJson` on a
3334
/// regular data class.
35+
@experimental
3436
class PostgrestTable<Row> {
3537
const PostgrestTable(this.name, this.rowFromJson);
3638

@@ -48,6 +50,7 @@ class PostgrestTable<Row> {
4850
///
4951
/// [Value] is always the non-nullable value type of the column. Null checks
5052
/// are expressed with [isNull] and [isNotNull] instead of nullable values.
53+
@experimental
5154
class TableColumn<Value extends Object> {
5255
const TableColumn(this.name);
5356

@@ -123,6 +126,7 @@ class TableColumn<Value extends Object> {
123126
}
124127

125128
/// Filters that only apply to text columns.
129+
@experimental
126130
extension TextTableColumnFilters on TableColumn<String> {
127131
/// Only rows whose value matches [pattern] case-sensitively.
128132
LikeFilter like(String pattern) => LikeFilter._(name, pattern);
@@ -173,6 +177,7 @@ extension TextTableColumnFilters on TableColumn<String> {
173177
/// hierarchy is sealed with one class per operator, so consumers can switch
174178
/// on the filter itself instead of comparing operator values; realtime
175179
/// streams for example only accept [ComparisonFilter]s and [InListFilter].
180+
@experimental
176181
sealed class ColumnFilter {
177182
const ColumnFilter._();
178183

@@ -202,6 +207,7 @@ sealed class ColumnFilter {
202207
///
203208
/// Besides regular queries, these are the filters that realtime streams
204209
/// support, together with [InListFilter].
210+
@experimental
205211
sealed class ComparisonFilter extends ColumnFilter {
206212
const ComparisonFilter._(this.column, this.value) : super._();
207213

@@ -213,6 +219,7 @@ sealed class ComparisonFilter extends ColumnFilter {
213219
}
214220

215221
/// Only rows where the column equals [value]; created by [TableColumn.eq].
222+
@experimental
216223
final class EqFilter extends ComparisonFilter {
217224
const EqFilter._(super.column, super.value) : super._();
218225

@@ -227,6 +234,7 @@ final class EqFilter extends ComparisonFilter {
227234

228235
/// Only rows where the column does not equal [value]; created by
229236
/// [TableColumn.neq].
237+
@experimental
230238
final class NeqFilter extends ComparisonFilter {
231239
const NeqFilter._(super.column, super.value) : super._();
232240

@@ -241,6 +249,7 @@ final class NeqFilter extends ComparisonFilter {
241249

242250
/// Only rows where the column is greater than [value]; created by
243251
/// [TableColumn.gt].
252+
@experimental
244253
final class GtFilter extends ComparisonFilter {
245254
const GtFilter._(super.column, super.value) : super._();
246255

@@ -255,6 +264,7 @@ final class GtFilter extends ComparisonFilter {
255264

256265
/// Only rows where the column is greater than or equal to [value]; created
257266
/// by [TableColumn.gte].
267+
@experimental
258268
final class GteFilter extends ComparisonFilter {
259269
const GteFilter._(super.column, super.value) : super._();
260270

@@ -269,6 +279,7 @@ final class GteFilter extends ComparisonFilter {
269279

270280
/// Only rows where the column is less than [value]; created by
271281
/// [TableColumn.lt].
282+
@experimental
272283
final class LtFilter extends ComparisonFilter {
273284
const LtFilter._(super.column, super.value) : super._();
274285

@@ -283,6 +294,7 @@ final class LtFilter extends ComparisonFilter {
283294

284295
/// Only rows where the column is less than or equal to [value]; created by
285296
/// [TableColumn.lte].
297+
@experimental
286298
final class LteFilter extends ComparisonFilter {
287299
const LteFilter._(super.column, super.value) : super._();
288300

@@ -300,6 +312,7 @@ final class LteFilter extends ComparisonFilter {
300312
///
301313
/// Besides regular queries, this filter is supported by realtime streams,
302314
/// together with [ComparisonFilter]s.
315+
@experimental
303316
final class InListFilter extends ColumnFilter {
304317
const InListFilter._(this.column, this.values) : super._();
305318

@@ -325,6 +338,7 @@ final class InListFilter extends ColumnFilter {
325338

326339
/// A filter matching rows whose column value is `null`; created by
327340
/// [TableColumn.isNull].
341+
@experimental
328342
final class IsNullFilter extends ColumnFilter {
329343
const IsNullFilter._(this.column) : super._();
330344

@@ -346,6 +360,7 @@ final class IsNullFilter extends ColumnFilter {
346360
/// A filter matching rows whose column value is distinct from [value],
347361
/// treating `null` as a comparable value; created by
348362
/// [TableColumn.isDistinctFrom].
363+
@experimental
349364
final class IsDistinctFilter extends ColumnFilter {
350365
const IsDistinctFilter._(this.column, this.value) : super._();
351366

@@ -365,6 +380,7 @@ final class IsDistinctFilter extends ColumnFilter {
365380
}
366381

367382
/// A containment or overlap filter on a json, array, or range column.
383+
@experimental
368384
sealed class ContainmentFilter extends ColumnFilter {
369385
const ContainmentFilter._(this.column, this.value) : super._();
370386

@@ -376,6 +392,7 @@ sealed class ContainmentFilter extends ColumnFilter {
376392
}
377393

378394
/// Only rows whose value contains [value]; created by [TableColumn.contains].
395+
@experimental
379396
final class ContainsFilter extends ContainmentFilter {
380397
const ContainsFilter._(super.column, super.value) : super._();
381398

@@ -390,6 +407,7 @@ final class ContainsFilter extends ContainmentFilter {
390407

391408
/// Only rows whose value is contained by [value]; created by
392409
/// [TableColumn.containedBy].
410+
@experimental
393411
final class ContainedByFilter extends ContainmentFilter {
394412
const ContainedByFilter._(super.column, super.value) : super._();
395413

@@ -404,6 +422,7 @@ final class ContainedByFilter extends ContainmentFilter {
404422

405423
/// Only rows whose value overlaps with [value]; created by
406424
/// [TableColumn.overlaps].
425+
@experimental
407426
final class OverlapsFilter extends ContainmentFilter {
408427
const OverlapsFilter._(super.column, super.value) : super._();
409428

@@ -417,6 +436,7 @@ final class OverlapsFilter extends ContainmentFilter {
417436
}
418437

419438
/// A filter comparing a range column against the range literal [range].
439+
@experimental
420440
sealed class RangeFilter extends ColumnFilter {
421441
const RangeFilter._(this.column, this.range) : super._();
422442

@@ -434,6 +454,7 @@ sealed class RangeFilter extends ColumnFilter {
434454

435455
/// Only rows whose range is strictly to the left of [range]; created by
436456
/// [TableColumn.rangeLt].
457+
@experimental
437458
final class RangeLtFilter extends RangeFilter {
438459
const RangeLtFilter._(super.column, super.range) : super._();
439460

@@ -448,6 +469,7 @@ final class RangeLtFilter extends RangeFilter {
448469

449470
/// Only rows whose range is strictly to the right of [range]; created by
450471
/// [TableColumn.rangeGt].
472+
@experimental
451473
final class RangeGtFilter extends RangeFilter {
452474
const RangeGtFilter._(super.column, super.range) : super._();
453475

@@ -462,6 +484,7 @@ final class RangeGtFilter extends RangeFilter {
462484

463485
/// Only rows whose range does not extend to the left of [range]; created by
464486
/// [TableColumn.rangeGte].
487+
@experimental
465488
final class RangeGteFilter extends RangeFilter {
466489
const RangeGteFilter._(super.column, super.range) : super._();
467490

@@ -476,6 +499,7 @@ final class RangeGteFilter extends RangeFilter {
476499

477500
/// Only rows whose range does not extend to the right of [range]; created by
478501
/// [TableColumn.rangeLte].
502+
@experimental
479503
final class RangeLteFilter extends RangeFilter {
480504
const RangeLteFilter._(super.column, super.range) : super._();
481505

@@ -490,6 +514,7 @@ final class RangeLteFilter extends RangeFilter {
490514

491515
/// Only rows whose range is adjacent to [range]; created by
492516
/// [TableColumn.rangeAdjacent].
517+
@experimental
493518
final class RangeAdjacentFilter extends RangeFilter {
494519
const RangeAdjacentFilter._(super.column, super.range) : super._();
495520

@@ -503,6 +528,7 @@ final class RangeAdjacentFilter extends RangeFilter {
503528
}
504529

505530
/// A filter matching a text column against a single [pattern].
531+
@experimental
506532
sealed class PatternFilter extends ColumnFilter {
507533
const PatternFilter._(this.column, this.pattern) : super._();
508534

@@ -520,6 +546,7 @@ sealed class PatternFilter extends ColumnFilter {
520546

521547
/// Only rows matching [pattern] case-sensitively; created by
522548
/// [TextTableColumnFilters.like].
549+
@experimental
523550
final class LikeFilter extends PatternFilter {
524551
const LikeFilter._(super.column, super.pattern) : super._();
525552

@@ -534,6 +561,7 @@ final class LikeFilter extends PatternFilter {
534561

535562
/// Only rows matching [pattern] case-insensitively; created by
536563
/// [TextTableColumnFilters.ilike].
564+
@experimental
537565
final class IlikeFilter extends PatternFilter {
538566
const IlikeFilter._(super.column, super.pattern) : super._();
539567

@@ -548,6 +576,7 @@ final class IlikeFilter extends PatternFilter {
548576

549577
/// Only rows matching the regular expression [pattern] case-sensitively;
550578
/// created by [TextTableColumnFilters.matchRegex].
579+
@experimental
551580
final class MatchRegexFilter extends PatternFilter {
552581
const MatchRegexFilter._(super.column, super.pattern) : super._();
553582

@@ -562,6 +591,7 @@ final class MatchRegexFilter extends PatternFilter {
562591

563592
/// Only rows matching the regular expression [pattern] case-insensitively;
564593
/// created by [TextTableColumnFilters.imatchRegex].
594+
@experimental
565595
final class ImatchRegexFilter extends PatternFilter {
566596
const ImatchRegexFilter._(super.column, super.pattern) : super._();
567597

@@ -575,6 +605,7 @@ final class ImatchRegexFilter extends PatternFilter {
575605
}
576606

577607
/// A filter matching a text column against several [patterns] at once.
608+
@experimental
578609
sealed class PatternListFilter extends ColumnFilter {
579610
const PatternListFilter._(this.column, this.patterns) : super._();
580611

@@ -592,6 +623,7 @@ sealed class PatternListFilter extends ColumnFilter {
592623

593624
/// Only rows matching all of [patterns] case-sensitively; created by
594625
/// [TextTableColumnFilters.likeAllOf].
626+
@experimental
595627
final class LikeAllOfFilter extends PatternListFilter {
596628
const LikeAllOfFilter._(super.column, super.patterns) : super._();
597629

@@ -606,6 +638,7 @@ final class LikeAllOfFilter extends PatternListFilter {
606638

607639
/// Only rows matching any of [patterns] case-sensitively; created by
608640
/// [TextTableColumnFilters.likeAnyOf].
641+
@experimental
609642
final class LikeAnyOfFilter extends PatternListFilter {
610643
const LikeAnyOfFilter._(super.column, super.patterns) : super._();
611644

@@ -620,6 +653,7 @@ final class LikeAnyOfFilter extends PatternListFilter {
620653

621654
/// Only rows matching all of [patterns] case-insensitively; created by
622655
/// [TextTableColumnFilters.ilikeAllOf].
656+
@experimental
623657
final class IlikeAllOfFilter extends PatternListFilter {
624658
const IlikeAllOfFilter._(super.column, super.patterns) : super._();
625659

@@ -634,6 +668,7 @@ final class IlikeAllOfFilter extends PatternListFilter {
634668

635669
/// Only rows matching any of [patterns] case-insensitively; created by
636670
/// [TextTableColumnFilters.ilikeAnyOf].
671+
@experimental
637672
final class IlikeAnyOfFilter extends PatternListFilter {
638673
const IlikeAnyOfFilter._(super.column, super.patterns) : super._();
639674

@@ -648,6 +683,7 @@ final class IlikeAnyOfFilter extends PatternListFilter {
648683

649684
/// A full text search filter on a text or tsvector column; created by
650685
/// [TextTableColumnFilters.textSearch].
686+
@experimental
651687
final class TextSearchFilter extends ColumnFilter {
652688
const TextSearchFilter._(this.column, this.query, {this.config, this.type})
653689
: super._();
@@ -689,6 +725,7 @@ final class TextSearchFilter extends ColumnFilter {
689725

690726
/// The negation of another [ColumnFilter], created through
691727
/// [ColumnFilter.not].
728+
@experimental
692729
final class NegatedFilter extends ColumnFilter {
693730
const NegatedFilter._(this.inner) : super._();
694731

packages/postgrest/lib/src/postgrest_typed_builder.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:async';
22
import 'dart:convert';
33

4+
import 'package:meta/meta.dart';
45
import 'package:postgrest/postgrest.dart';
56

67
part 'postgrest_table.dart';
@@ -26,6 +27,7 @@ void _toVoid(dynamic data) {}
2627
/// Wraps an untyped [PostgrestBuilder] and converts its result into [T]
2728
/// before it is returned, so awaiting it never exposes raw
2829
/// `Map<String, dynamic>` data.
30+
@experimental
2931
class PostgrestTypedBuilder<T> implements Future<T> {
3032
const PostgrestTypedBuilder._(this._rawBuilder, this._convert);
3133

packages/postgrest/lib/src/postgrest_typed_filter_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ part of 'postgrest_typed_builder.dart';
44
///
55
/// Filters are built from [TableColumn]s and applied with [where], which
66
/// checks the value type of each filter against its column at compile time.
7+
@experimental
78
class PostgrestTypedFilterBuilder<Row, T>
89
extends PostgrestTypedTransformBuilder<Row, T> {
910
const PostgrestTypedFilterBuilder._(

packages/postgrest/lib/src/postgrest_typed_query_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ part of 'postgrest_typed_builder.dart';
77
/// Query results are converted into [Row] through
88
/// [PostgrestTable.rowFromJson], so no raw `Map<String, dynamic>` is exposed.
99
/// {@endtemplate}
10+
@experimental
1011
class PostgrestTypedQueryBuilder<Row> {
1112
/// {@macro postgrest_typed_query_builder}
1213
const PostgrestTypedQueryBuilder(

packages/postgrest/lib/src/postgrest_typed_transform_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ part of 'postgrest_typed_builder.dart';
44
///
55
/// [Row] is the type a single row converts into and [T] is the type the
66
/// request resolves to when awaited.
7+
@experimental
78
class PostgrestTypedTransformBuilder<Row, T> extends PostgrestTypedBuilder<T> {
89
const PostgrestTypedTransformBuilder._(
910
PostgrestTransformBuilder<dynamic> super.rawBuilder,

packages/supabase/lib/src/supabase_client.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:async';
22

33
import 'package:http/http.dart';
44
import 'package:logging/logging.dart';
5+
import 'package:meta/meta.dart';
56
import 'package:supabase/src/constants.dart';
67
import 'package:supabase/src/version.dart';
78
import 'package:supabase/supabase.dart';
@@ -232,6 +233,7 @@ class SupabaseClient {
232233
/// .select()
233234
/// .where(Books.id.gt(10));
234235
/// ```
236+
@experimental
235237
SupabaseTypedQueryBuilder<Row> table<Row>(PostgrestTable<Row> table) {
236238
return SupabaseTypedQueryBuilder(from(table.name), table);
237239
}

packages/supabase/lib/src/supabase_query_schema.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:http/http.dart';
2+
import 'package:meta/meta.dart';
23
import 'package:supabase/supabase.dart';
34
import 'package:yet_another_json_isolate/yet_another_json_isolate.dart';
45

@@ -49,6 +50,7 @@ class SupabaseQuerySchema {
4950
}
5051

5152
/// Perform a typed table operation, see [SupabaseClient.table].
53+
@experimental
5254
SupabaseTypedQueryBuilder<Row> table<Row>(PostgrestTable<Row> table) {
5355
return SupabaseTypedQueryBuilder(from(table.name), table);
5456
}

packages/supabase/lib/src/supabase_typed_query_builder.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:meta/meta.dart';
12
import 'package:supabase/supabase.dart';
23

34
/// The typed counterpart of [SupabaseQueryBuilder], returned by
@@ -6,6 +7,7 @@ import 'package:supabase/supabase.dart';
67
/// In addition to the typed query methods inherited from
78
/// [PostgrestTypedQueryBuilder], this builder exposes a typed realtime
89
/// [stream].
10+
@experimental
911
class SupabaseTypedQueryBuilder<Row> extends PostgrestTypedQueryBuilder<Row> {
1012
// The query builder is also kept as a field to expose [stream], so it
1113
// cannot become a super parameter.

0 commit comments

Comments
 (0)