Skip to content

Ppl Options #14843

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 43 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
bd0ce8f
create main branch of ppl
cherylEnkidu Feb 27, 2025
84691ab
Add stage API
cherylEnkidu Feb 27, 2025
8519a5e
Add stage API
cherylEnkidu Mar 3, 2025
454893b
Add stage API
cherylEnkidu Mar 7, 2025
ed1a19b
API changes
cherylEnkidu Mar 12, 2025
819853c
Add cpp stages and expressions
wu-hui Mar 11, 2025
1be141b
Add more APIs
cherylEnkidu Mar 18, 2025
8fd5f8a
add Field
cherylEnkidu Mar 18, 2025
039b919
merge in main branch
cherylEnkidu Mar 19, 2025
5127bd0
Add UserDataReader support for constant and expr in pipelines
wu-hui Mar 17, 2025
14d2e5c
Add bridge
cherylEnkidu Mar 20, 2025
9895936
merge in push-pqrpmwtupmwv
cherylEnkidu Mar 20, 2025
5d701f8
Add UserDataReader support for constant and expr in pipelines
wu-hui Mar 17, 2025
b2af1c6
solve merge conflicts
cherylEnkidu Mar 20, 2025
cec7f6b
Fix merge conflicts
cherylEnkidu Mar 20, 2025
30b9251
solve conflicts
cherylEnkidu Mar 20, 2025
1ad093a
format and fix conflicts
cherylEnkidu Mar 20, 2025
b59a4fd
Remove placeholder for the test case
cherylEnkidu Mar 21, 2025
7d73155
Support tests
cherylEnkidu Mar 25, 2025
828bb12
Fix bug in decoding
cherylEnkidu Mar 27, 2025
d1d0aa4
Add some convert functions
cherylEnkidu Apr 1, 2025
113da45
add tests
cherylEnkidu Apr 2, 2025
39803e5
replace Any with sendable
cherylEnkidu Apr 2, 2025
6c78523
Update PipelineResult
cherylEnkidu Apr 3, 2025
9598764
add expression and stages
cherylEnkidu Apr 14, 2025
5a7f61f
merge changes
cherylEnkidu Apr 17, 2025
a5f558f
add tests
cherylEnkidu Apr 17, 2025
be5b0b2
change implementation details
cherylEnkidu Apr 24, 2025
e699c17
Add get for ppl result
cherylEnkidu Apr 24, 2025
daf1b68
revert test settings
cherylEnkidu Apr 24, 2025
5b2bd88
Change cmake version
cherylEnkidu Apr 25, 2025
04a16e2
merge in cmake settings
cherylEnkidu Apr 25, 2025
d324c5d
Merge branch 'cheryllin/ppl' into cheryllin/pplapi
cherylEnkidu Apr 26, 2025
23305c0
remove unused variable
cherylEnkidu Apr 28, 2025
6dd3515
revert settinggs
cherylEnkidu Apr 28, 2025
8ff71c2
add expressions
cherylEnkidu May 6, 2025
2372405
Add documentation to Pipeline.swift
cherylEnkidu May 6, 2025
c7ff4b7
merge in main
cherylEnkidu May 6, 2025
d5be6a0
Merge branch 'cheryllin/ppl' into cheryllin/pplapi
cherylEnkidu May 6, 2025
591816b
Fix replace with
cherylEnkidu May 7, 2025
0098829
change tests
cherylEnkidu May 8, 2025
4fb738d
Address feebacks 2
cherylEnkidu May 12, 2025
fd8b97e
first draft
cherylEnkidu May 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add UserDataReader support for constant and expr in pipelines
  • Loading branch information
wu-hui committed Mar 20, 2025
commit 5d701f8ed4b8b81d96989fe9cca31a68af97f47a
11 changes: 9 additions & 2 deletions Firestore/Source/API/FIRPipelineBridge+Internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <memory>

#include "Firestore/core/src/api/expressions.h"
#include "Firestore/core/src/api/firestore.h"
#include "Firestore/core/src/api/pipeline.h"
#include "Firestore/core/src/api/stages.h"

Expand All @@ -30,13 +31,13 @@ NS_ASSUME_NONNULL_BEGIN

@interface FIRExprBridge (Internal)

- (std::shared_ptr<api::Expr>)cpp_expr;
- (std::shared_ptr<api::Expr>)cppExprWithReader:(FSTUserDataReader *)reader;

@end

@interface FIRStageBridge (Internal)

- (std::shared_ptr<api::Stage>)cpp_stage;
- (std::shared_ptr<api::Stage>)cppStageWithReader:(FSTUserDataReader *)reader;

@end

Expand All @@ -46,4 +47,10 @@ NS_ASSUME_NONNULL_BEGIN

@end

@interface __FIRPipelineResultBridge (Internal)

- (id)initWithCppResult:(api::PipelineResult)result db:(std::shared_ptr<api::Firestore>)db;

@end

NS_ASSUME_NONNULL_END
154 changes: 127 additions & 27 deletions Firestore/Source/API/FIRPipelineBridge.mm
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,15 @@

#include <memory>

#import "Firestore/Source/API/FIRDocumentReference+Internal.h"
#import "Firestore/Source/API/FIRFirestore+Internal.h"
#import "Firestore/Source/API/FIRPipelineBridge+Internal.h"
#import "Firestore/Source/API/FSTUserDataReader.h"
#import "Firestore/Source/API/FSTUserDataWriter.h"

#include "Firestore/Protos/nanopb/google/firestore/v1/document.nanopb.h"

#include "Firestore/core/src/api/document_reference.h"
#include "Firestore/core/src/api/expressions.h"
#include "Firestore/core/src/api/pipeline.h"
#include "Firestore/core/src/api/pipeline_result.h"
Expand All @@ -32,12 +38,14 @@

using firebase::firestore::api::CollectionSource;
using firebase::firestore::api::Constant;
using firebase::firestore::api::DocumentReference;
using firebase::firestore::api::Expr;
using firebase::firestore::api::Field;
using firebase::firestore::api::FunctionExpr;
using firebase::firestore::api::Pipeline;
using firebase::firestore::api::Where;
using firebase::firestore::util::MakeCallback;
using firebase::firestore::util::MakeNSString;
using firebase::firestore::util::MakeString;

NS_ASSUME_NONNULL_BEGIN
Expand All @@ -57,47 +65,60 @@ - (id)init:(NSString *)name {
return self;
}

- (std::shared_ptr<api::Expr>)cpp_expr {
- (std::shared_ptr<api::Expr>)cppExprWithReader:(FSTUserDataReader *)reader {
return field;
}

@end

@implementation FIRConstantBridge {
std::shared_ptr<Constant> constant;
id _input;
Boolean isUserDataRead;
}
- (id)init:(NSNumber *)value {
- (id)init:(id)input {
self = [super init];
if (self) {
constant = std::make_shared<Constant>(value.doubleValue);
}
_input = input;
isUserDataRead = NO;
return self;
}

- (std::shared_ptr<api::Expr>)cpp_expr {
- (std::shared_ptr<api::Expr>)cppExprWithReader:(FSTUserDataReader *)reader {
if (!isUserDataRead) {
constant = std::make_shared<Constant>([reader parsedQueryValue:_input]);
}

isUserDataRead = YES;
return constant;
}

@end

@implementation FIRFunctionExprBridge {
std::shared_ptr<FunctionExpr> eq;
NSString *_name;
NSArray<FIRExprBridge *> *_args;
Boolean isUserDataRead;
}

- (nonnull id)initWithName:(NSString *)name Args:(nonnull NSArray<FIRExprBridge *> *)args {
self = [super init];
if (self) {
_name = name;
_args = args;
isUserDataRead = NO;
return self;
}

- (std::shared_ptr<api::Expr>)cppExprWithReader:(FSTUserDataReader *)reader {
if (!isUserDataRead) {
std::vector<std::shared_ptr<Expr>> cpp_args;
for (FIRExprBridge *arg in args) {
cpp_args.push_back(arg.cpp_expr);
for (FIRExprBridge *arg in _args) {
cpp_args.push_back([arg cppExprWithReader:reader]);
}

eq = std::make_shared<FunctionExpr>(MakeString(name), std::move(cpp_args));
eq = std::make_shared<FunctionExpr>(MakeString(_name), std::move(cpp_args));
}
return self;
}

- (std::shared_ptr<api::Expr>)cpp_expr {
isUserDataRead = YES;
return eq;
}

Expand All @@ -118,63 +139,142 @@ - (id)initWithPath:(NSString *)path {
return self;
}

- (std::shared_ptr<api::Stage>)cpp_stage {
- (std::shared_ptr<api::Stage>)cppStageWithReader:(FSTUserDataReader *)reader {
return collection_source;
}

@end

@implementation FIRWhereStageBridge {
FIRExprBridge *_exprBridge;
Boolean isUserDataRead;
std::shared_ptr<Where> where;
}

- (id)initWithExpr:(FIRExprBridge *)expr {
self = [super init];
if (self) {
where = std::make_shared<Where>(expr.cpp_expr);
_exprBridge = expr;
isUserDataRead = NO;
}
return self;
}

- (std::shared_ptr<api::Stage>)cpp_stage {
- (std::shared_ptr<api::Stage>)cppStageWithReader:(FSTUserDataReader *)reader {
if (!isUserDataRead) {
where = std::make_shared<Where>([_exprBridge cppExprWithReader:reader]);
}

isUserDataRead = YES;
return where;
}

@end

@interface __FIRPipelineSnapshotBridge ()

@property(nonatomic, strong, readwrite) NSArray<__FIRPipelineSnapshotBridge *> *results;

@end

@implementation __FIRPipelineSnapshotBridge {
absl::optional<api::PipelineSnapshot> pipeline;
absl::optional<api::PipelineSnapshot> snapshot_;
NSMutableArray<__FIRPipelineResultBridge *> *results_;
}

- (id)initWithCppSnapshot:(api::PipelineSnapshot)snapshot {
self = [super init];
if (self) {
pipeline = std::move(snapshot);
snapshot_ = std::move(snapshot);
if (!snapshot_.has_value()) {
results_ = nil;
} else {
NSMutableArray<__FIRPipelineResultBridge *> *results = [NSMutableArray array];
for (auto &result : snapshot_.value().results()) {
[results addObject:[[__FIRPipelineResultBridge alloc]
initWithCppResult:result
db:snapshot_.value().firestore()]];
}
results_ = results;
}
}

return self;
}

- (NSArray<__FIRPipelineResultBridge *> *)results {
return results_;
}

@end

@implementation FIRPipelineBridge {
std::shared_ptr<Pipeline> pipeline;
@implementation __FIRPipelineResultBridge {
api::PipelineResult _result;
std::shared_ptr<api::Firestore> _db;
}

- (id)initWithStages:(NSArray<FIRStageBridge *> *)stages db:(FIRFirestore *)db {
- (FIRDocumentReference *)reference {
if (!_result.internal_key().has_value()) return nil;

return [[FIRDocumentReference alloc] initWithKey:_result.internal_key().value() firestore:_db];
}

- (NSString *)documentID {
if (!_result.document_id().has_value()) {
return nil;
}

return MakeNSString(_result.document_id().value());
}

- (id)initWithCppResult:(api::PipelineResult)result db:(std::shared_ptr<api::Firestore>)db {
self = [super init];
if (self) {
std::vector<std::shared_ptr<firebase::firestore::api::Stage>> cpp_stages;
for (FIRStageBridge *stage in stages) {
cpp_stages.push_back(stage.cpp_stage);
}
pipeline = std::make_shared<Pipeline>(cpp_stages, db.wrapped);
_result = std::move(result);
_db = std::move(db);
}

return self;
}

- (nullable NSDictionary<NSString *, id> *)data {
return [self dataWithServerTimestampBehavior:FIRServerTimestampBehaviorNone];
}

- (nullable NSDictionary<NSString *, id> *)dataWithServerTimestampBehavior:
(FIRServerTimestampBehavior)serverTimestampBehavior {
absl::optional<firebase::firestore::google_firestore_v1_Value> data =
_result.internal_value()->Get();
if (!data) return nil;

FSTUserDataWriter *dataWriter =
[[FSTUserDataWriter alloc] initWithFirestore:_db
serverTimestampBehavior:serverTimestampBehavior];
return [dataWriter convertedValue:*data];
}

@end

@implementation FIRPipelineBridge {
NSArray<FIRStageBridge *> *_stages;
FIRFirestore *firestore;
std::shared_ptr<Pipeline> pipeline;
}

- (id)initWithStages:(NSArray<FIRStageBridge *> *)stages db:(FIRFirestore *)db {
_stages = stages;
firestore = db;
return [super init];
}

- (void)executeWithCompletion:(void (^)(__FIRPipelineSnapshotBridge *_Nullable result,
NSError *_Nullable error))completion {
std::vector<std::shared_ptr<firebase::firestore::api::Stage>> cpp_stages;
for (FIRStageBridge *stage in _stages) {
cpp_stages.push_back([stage cppStageWithReader:firestore.dataReader]);
}
pipeline = std::make_shared<Pipeline>(cpp_stages, firestore.wrapped);

pipeline->execute([completion](StatusOr<api::PipelineSnapshot> maybe_value) {
if (maybe_value.ok()) {
__FIRPipelineSnapshotBridge *bridge = [[__FIRPipelineSnapshotBridge alloc]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

#import <Foundation/Foundation.h>

#import "FIRDocumentSnapshot.h"

NS_ASSUME_NONNULL_BEGIN

NS_SWIFT_NAME(ExprBridge)
Expand All @@ -31,7 +33,7 @@ NS_SWIFT_NAME(FieldBridge)

NS_SWIFT_NAME(ConstantBridge)
@interface FIRConstantBridge : FIRExprBridge
- (id)init:(NSNumber *)value;
- (id)init:(id)input;
@end

NS_SWIFT_NAME(FunctionExprBridge)
Expand Down Expand Up @@ -72,6 +74,8 @@ NS_SWIFT_NAME(__PipelineResultBridge)
@property(nonatomic, copy, readonly) NSString *documentID;

- (nullable NSDictionary<NSString *, id> *)data;
- (nullable NSDictionary<NSString *, id> *)dataWithServerTimestampBehavior:
(FIRServerTimestampBehavior)serverTimestampBehavior;

@end

Expand Down
30 changes: 18 additions & 12 deletions Firestore/Swift/Source/SwiftAPI/Expressions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,26 +16,28 @@

import Foundation

public protocol Expr {
public protocol Expr {}

protocol BridgeWrapper {
var bridge: ExprBridge { get }
}

public struct Constant: Expr {
public var bridge: ExprBridge
public struct Constant: Expr, BridgeWrapper {
var bridge: ExprBridge

var value: any Numeric
init(value: any Numeric) {
var value: Any
init(value: Any) {
self.value = value
bridge = ConstantBridge(value as! NSNumber)
bridge = ConstantBridge(value)
}
}

public func constant(_ number: any Numeric) -> Constant {
public func constant(_ number: Any) -> Constant {
return Constant(value: number)
}

public struct Field: Expr {
public var bridge: ExprBridge
public struct Field: Expr, BridgeWrapper {
var bridge: ExprBridge

var name: String
init(name: String) {
Expand All @@ -52,16 +54,20 @@ protocol Function: Expr {
var name: String { get }
}

public struct FunctionExpr: Function {
public var bridge: ExprBridge
public struct FunctionExpr: Function, BridgeWrapper {
var bridge: ExprBridge

var name: String
private var args: [Expr]

init(name: String, args: [Expr]) {
self.name = name
self.args = args
bridge = FunctionExprBridge(name: name, args: args.map { $0.bridge })
bridge = FunctionExprBridge(
name: name,
args: args.map { ($0 as! (Expr & BridgeWrapper)).bridge
}
)
}
}

Expand Down
2 changes: 1 addition & 1 deletion Firestore/Swift/Source/SwiftAPI/Stages.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

import FirebaseFirestoreInternal

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, visionOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, visionOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, iOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, iOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, iOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, iOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, iOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, iOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, iOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, iOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, iOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, iOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, macOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, macOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, macOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, macOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, macOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, macOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, macOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, macOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, macOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, macOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, tvOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, tvOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, tvOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, tvOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, tvOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, tvOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, tvOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, tvOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, tvOS)

no such module 'FirebaseFirestoreInternal'

Check failure on line 17 in Firestore/Swift/Source/SwiftAPI/Stages.swift

View workflow job for this annotation

GitHub Actions / spm-source (macos-15, Xcode_16.2, tvOS)

no such module 'FirebaseFirestoreInternal'
import Foundation

protocol Stage {
Expand Down Expand Up @@ -42,6 +42,6 @@

init(condition: Expr) {
self.condition = condition
bridge = WhereStageBridge(expr: condition.bridge)
bridge = WhereStageBridge(expr: (condition as! (Expr & BridgeWrapper)).bridge)
}
}
Loading
Loading