Skip to content

Relaxing in restrictions. #6757

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
Closed
Show file tree
Hide file tree
Changes from 51 commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
effced9
Add composite filters. Port of https://github.com/firebase/firebase-a…
MarkDuckworth Jun 24, 2022
eba3b84
Cleanup: lint
MarkDuckworth Jun 24, 2022
33a0896
Support encoding and decoding Composite Filters
MarkDuckworth Jun 29, 2022
9f6e216
Formatting
MarkDuckworth Jun 30, 2022
a722abc
Add composite filters in support of OR queries (#6385)
MarkDuckworth Jul 26, 2022
6556240
Merge remote-tracking branch 'origin/markduckworth/or-queries' into m…
MarkDuckworth Jul 26, 2022
78a8900
Fix issue with readonly array.
MarkDuckworth Jul 26, 2022
80fc05d
WIP: serving results from index.
MarkDuckworth Aug 5, 2022
1e33050
Support encoding and decoding Composite Filters (#6402)
MarkDuckworth Aug 5, 2022
8b6f05f
Perform DNF transform
MarkDuckworth Aug 10, 2022
152fc18
Cleanup and tests from https://github.com/firebase/firebase-android-s…
MarkDuckworth Aug 10, 2022
8b0bfbd
Merge branch 'markduckworth/or-queries' of github.com:firebase/fireba…
MarkDuckworth Aug 12, 2022
45be193
Merge branch 'master' of github.com:firebase/firebase-js-sdk into mar…
MarkDuckworth Aug 12, 2022
1c948cb
use index if we have composite filters
MarkDuckworth Aug 12, 2022
2cad46c
Merge branch 'markduckworth/or-queries' into markduckworth/or-queries…
MarkDuckworth Aug 12, 2022
266f7f6
Fix bad import
MarkDuckworth Aug 12, 2022
c2d7cd2
Update the orderBy filtering mechanism for OR queries and steps to se…
MarkDuckworth Aug 15, 2022
41d0e29
Adding tests
MarkDuckworth Aug 15, 2022
90f7c50
Test for DNF computation.
MarkDuckworth Aug 16, 2022
ff52ecc
Fix implementation of isFlatConjunction
MarkDuckworth Aug 16, 2022
dfda9f8
Adding integration tests for validation of composite queries.
MarkDuckworth Aug 17, 2022
9bc3336
IndexDb manager tests for partial and full index.
MarkDuckworth Aug 17, 2022
d66abd4
Test query does not include documents with missing fields
MarkDuckworth Aug 17, 2022
e33263d
Run prettier
MarkDuckworth Aug 17, 2022
01c3487
Add missing awaits
MarkDuckworth Aug 17, 2022
7d56b57
Fixing argument validation for and . Updating tests for asserted err…
MarkDuckworth Aug 17, 2022
d01ff74
Prettier
MarkDuckworth Aug 18, 2022
186fd92
Removing duplicate test cases.
MarkDuckworth Aug 18, 2022
409b19c
Update proto with OR operator.
MarkDuckworth Aug 22, 2022
131f4be
Update protos with OR operator.
MarkDuckworth Aug 23, 2022
a514358
Testing query with indexes
MarkDuckworth Aug 23, 2022
0ab215b
Add compile.sh to compile proto updates.
MarkDuckworth Aug 23, 2022
638b0ad
Adding new script to run browser tests against the emulator.
MarkDuckworth Aug 23, 2022
86c9057
Update stringifyFilter to support CompositeFilters
MarkDuckworth Aug 23, 2022
3501135
Lint and formatting
MarkDuckworth Aug 23, 2022
4adf98d
Refactor core/target.ts, extracting classes Bound, OrderBy, and Filte…
MarkDuckworth Aug 24, 2022
60f4276
Formatting
MarkDuckworth Aug 24, 2022
476be61
Making public API changes to ensure that only QueryFilterConstraints …
MarkDuckworth Aug 24, 2022
a0e5d30
Remove QueryNonFilterConstraint from exports.
MarkDuckworth Aug 25, 2022
77afd20
Add overloads for query and deprecate existing query overload that su…
MarkDuckworth Aug 26, 2022
bf21b93
Merge branch 'master' into markduckworth/or-queries
MarkDuckworth Sep 22, 2022
c15333a
Markduckworth/or queries pr 4 (#6527)
MarkDuckworth Oct 26, 2022
2a20810
Refactor core/target.ts, extracting classes Bound, OrderBy, and Filte…
MarkDuckworth Oct 26, 2022
7c54b30
Making public API changes to ensure that only QueryFilterConstraints …
MarkDuckworth Oct 26, 2022
3862740
Merge branch 'markduckworth/or-queries' of github.com:firebase/fireba…
MarkDuckworth Oct 26, 2022
efd98c7
Implementing public API for OR queries that does not need the depreca…
MarkDuckworth Oct 27, 2022
94250da
Implementing 3rd iteration of the public API for OR queries.
MarkDuckworth Oct 28, 2022
ff0eede
Compute IN expansion.
MarkDuckworth Oct 28, 2022
66bf749
Fix edge case a == 1 && a == 6
MarkDuckworth Nov 3, 2022
968d133
Logic utils tests for in expansion.
MarkDuckworth Nov 3, 2022
934fbef
Relaxing in restrictions.
MarkDuckworth Nov 4, 2022
5f37954
Fixed rogue comment.
MarkDuckworth Nov 8, 2022
ab5cad2
Comment cleanup.
MarkDuckworth Nov 8, 2022
5fa9c76
Comment cleanup.
MarkDuckworth Nov 8, 2022
9c6395b
Test refactoring.
MarkDuckworth Nov 8, 2022
e711f06
Merge branch 'markduckworth/or-queries-pr-9' into markduckworth/or-qu…
MarkDuckworth Nov 8, 2022
838f825
Adding missing tests.
MarkDuckworth Nov 9, 2022
433b283
Adding and fixing tests.
MarkDuckworth Nov 9, 2022
9f5721e
Removing .only
MarkDuckworth Nov 11, 2022
1280052
Merge branch 'master' into markduckworth/or-queries-relaxing-in-restr…
MarkDuckworth Feb 9, 2023
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
73 changes: 61 additions & 12 deletions common/api-review/firestore-lite.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ export type AddPrefixToKeys<Prefix extends string, T extends Record<string, unkn
[K in keyof T & string as `${Prefix}.${K}`]+?: T[K];
};

// @public
export function and(...queryConstraints: QueryFilterConstraint[]): QueryCompositeFilterConstraint;

// @public
export function arrayRemove(...elements: unknown[]): FieldValue;

Expand Down Expand Up @@ -111,16 +114,16 @@ export class DocumentSnapshot<T = DocumentData> {
export { EmulatorMockTokenOptions }

// @public
export function endAt(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
export function endAt(snapshot: DocumentSnapshot<unknown>): QueryEndAtConstraint;

// @public
export function endAt(...fieldValues: unknown[]): QueryConstraint;
export function endAt(...fieldValues: unknown[]): QueryEndAtConstraint;

// @public
export function endBefore(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
export function endBefore(snapshot: DocumentSnapshot<unknown>): QueryEndAtConstraint;

// @public
export function endBefore(...fieldValues: unknown[]): QueryConstraint;
export function endBefore(...fieldValues: unknown[]): QueryEndAtConstraint;

// @public
export class FieldPath {
Expand Down Expand Up @@ -188,10 +191,10 @@ export function increment(n: number): FieldValue;
export function initializeFirestore(app: FirebaseApp, settings: Settings): Firestore;

// @public
export function limit(limit: number): QueryConstraint;
export function limit(limit: number): QueryLimitConstraint;

// @public
export function limitToLast(limit: number): QueryConstraint;
export function limitToLast(limit: number): QueryLimitConstraint;

export { LogLevel }

Expand All @@ -201,7 +204,10 @@ export type NestedUpdateFields<T extends Record<string, unknown>> = UnionToInter
}[keyof T & string]>;

// @public
export function orderBy(fieldPath: string | FieldPath, directionStr?: OrderByDirection): QueryConstraint;
export function or(...queryConstraints: QueryFilterConstraint[]): QueryCompositeFilterConstraint;

// @public
export function orderBy(fieldPath: string | FieldPath, directionStr?: OrderByDirection): QueryOrderByConstraint;

// @public
export type OrderByDirection = 'desc' | 'asc';
Expand All @@ -224,12 +230,24 @@ export class Query<T = DocumentData> {
withConverter<U>(converter: FirestoreDataConverter<U>): Query<U>;
}

// @public
export function query<T>(query: Query<T>, compositeFilter: QueryCompositeFilterConstraint, ...queryConstraints: QueryNonFilterConstraint[]): Query<T>;

// @public
export function query<T>(query: Query<T>, ...queryConstraints: QueryConstraint[]): Query<T>;

// @public
export class QueryCompositeFilterConstraint {
readonly type: 'or' | 'and';
}

// @public
export abstract class QueryConstraint {
abstract readonly type: QueryConstraintType;
/**
* Takes the provided {@link Query} and returns a copy of the {@link Query} with this
* {@link AppliableConstraint} applied.
*/
}

// @public
Expand All @@ -241,9 +259,35 @@ export class QueryDocumentSnapshot<T = DocumentData> extends DocumentSnapshot<T>
data(): T;
}

// @public
export class QueryEndAtConstraint extends QueryConstraint {
readonly type: 'endBefore' | 'endAt';
}

// @public
export function queryEqual<T>(left: Query<T>, right: Query<T>): boolean;

// @public
export class QueryFieldFilterConstraint extends QueryConstraint {
readonly type = "where";
}

// @public
export type QueryFilterConstraint = QueryFieldFilterConstraint | QueryCompositeFilterConstraint;

// @public
export class QueryLimitConstraint extends QueryConstraint {
readonly type: 'limit' | 'limitToLast';
}

// @public
export type QueryNonFilterConstraint = QueryOrderByConstraint | QueryLimitConstraint | QueryStartAtConstraint | QueryEndAtConstraint;

// @public
export class QueryOrderByConstraint extends QueryConstraint {
readonly type = "orderBy";
}

// @public
export class QuerySnapshot<T = DocumentData> {
get docs(): Array<QueryDocumentSnapshot<T>>;
Expand All @@ -253,6 +297,11 @@ export class QuerySnapshot<T = DocumentData> {
get size(): number;
}

// @public
export class QueryStartAtConstraint extends QueryConstraint {
readonly type: 'startAt' | 'startAfter';
}

// @public
export function refEqual<T>(left: DocumentReference<T> | CollectionReference<T>, right: DocumentReference<T> | CollectionReference<T>): boolean;

Expand Down Expand Up @@ -289,16 +338,16 @@ export interface Settings {
export function snapshotEqual<T>(left: DocumentSnapshot<T> | QuerySnapshot<T>, right: DocumentSnapshot<T> | QuerySnapshot<T>): boolean;

// @public
export function startAfter(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
export function startAfter(snapshot: DocumentSnapshot<unknown>): QueryStartAtConstraint;

// @public
export function startAfter(...fieldValues: unknown[]): QueryConstraint;
export function startAfter(...fieldValues: unknown[]): QueryStartAtConstraint;

// @public
export function startAt(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
export function startAt(snapshot: DocumentSnapshot<unknown>): QueryStartAtConstraint;

// @public
export function startAt(...fieldValues: unknown[]): QueryConstraint;
export function startAt(...fieldValues: unknown[]): QueryStartAtConstraint;

// @public
export function terminate(firestore: Firestore): Promise<void>;
Expand Down Expand Up @@ -354,7 +403,7 @@ export function updateDoc<T>(reference: DocumentReference<T>, data: UpdateData<T
export function updateDoc(reference: DocumentReference<unknown>, field: string | FieldPath, value: unknown, ...moreFieldsAndValues: unknown[]): Promise<void>;

// @public
export function where(fieldPath: string | FieldPath, opStr: WhereFilterOp, value: unknown): QueryConstraint;
export function where(fieldPath: string | FieldPath, opStr: WhereFilterOp, value: unknown): QueryFieldFilterConstraint;

// @public
export type WhereFilterOp = '<' | '<=' | '==' | '!=' | '>=' | '>' | 'array-contains' | 'in' | 'array-contains-any' | 'not-in';
Expand Down
73 changes: 61 additions & 12 deletions common/api-review/firestore.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ export type AddPrefixToKeys<Prefix extends string, T extends Record<string, unkn
[K in keyof T & string as `${Prefix}.${K}`]+?: T[K];
};

// @public
export function and(...queryConstraints: QueryFilterConstraint[]): QueryCompositeFilterConstraint;

// @public
export function arrayRemove(...elements: unknown[]): FieldValue;

Expand Down Expand Up @@ -141,16 +144,16 @@ export function enableMultiTabIndexedDbPersistence(firestore: Firestore): Promis
export function enableNetwork(firestore: Firestore): Promise<void>;

// @public
export function endAt(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
export function endAt(snapshot: DocumentSnapshot<unknown>): QueryEndAtConstraint;

// @public
export function endAt(...fieldValues: unknown[]): QueryConstraint;
export function endAt(...fieldValues: unknown[]): QueryEndAtConstraint;

// @public
export function endBefore(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
export function endBefore(snapshot: DocumentSnapshot<unknown>): QueryEndAtConstraint;

// @public
export function endBefore(...fieldValues: unknown[]): QueryConstraint;
export function endBefore(...fieldValues: unknown[]): QueryEndAtConstraint;

// @public
export class FieldPath {
Expand Down Expand Up @@ -240,10 +243,10 @@ export function increment(n: number): FieldValue;
export function initializeFirestore(app: FirebaseApp, settings: FirestoreSettings, databaseId?: string): Firestore;

// @public
export function limit(limit: number): QueryConstraint;
export function limit(limit: number): QueryLimitConstraint;

// @public
export function limitToLast(limit: number): QueryConstraint;
export function limitToLast(limit: number): QueryLimitConstraint;

// @public
export function loadBundle(firestore: Firestore, bundleData: ReadableStream<Uint8Array> | ArrayBuffer | string): LoadBundleTask;
Expand Down Expand Up @@ -325,7 +328,10 @@ export function onSnapshotsInSync(firestore: Firestore, observer: {
export function onSnapshotsInSync(firestore: Firestore, onSync: () => void): Unsubscribe;

// @public
export function orderBy(fieldPath: string | FieldPath, directionStr?: OrderByDirection): QueryConstraint;
export function or(...queryConstraints: QueryFilterConstraint[]): QueryCompositeFilterConstraint;

// @public
export function orderBy(fieldPath: string | FieldPath, directionStr?: OrderByDirection): QueryOrderByConstraint;

// @public
export type OrderByDirection = 'desc' | 'asc';
Expand Down Expand Up @@ -353,12 +359,24 @@ export class Query<T = DocumentData> {
withConverter<U>(converter: FirestoreDataConverter<U>): Query<U>;
}

// @public
export function query<T>(query: Query<T>, compositeFilter: QueryCompositeFilterConstraint, ...queryConstraints: QueryNonFilterConstraint[]): Query<T>;

// @public
export function query<T>(query: Query<T>, ...queryConstraints: QueryConstraint[]): Query<T>;

// @public
export class QueryCompositeFilterConstraint {
readonly type: 'or' | 'and';
}

// @public
export abstract class QueryConstraint {
abstract readonly type: QueryConstraintType;
/**
* Takes the provided {@link Query} and returns a copy of the {@link Query} with this
* {@link AppliableConstraint} applied.
*/
}

// @public
Expand All @@ -370,9 +388,35 @@ export class QueryDocumentSnapshot<T = DocumentData> extends DocumentSnapshot<T>
data(options?: SnapshotOptions): T;
}

// @public
export class QueryEndAtConstraint extends QueryConstraint {
readonly type: 'endBefore' | 'endAt';
}

// @public
export function queryEqual<T>(left: Query<T>, right: Query<T>): boolean;

// @public
export class QueryFieldFilterConstraint extends QueryConstraint {
readonly type = "where";
}

// @public
export type QueryFilterConstraint = QueryFieldFilterConstraint | QueryCompositeFilterConstraint;

// @public
export class QueryLimitConstraint extends QueryConstraint {
readonly type: 'limit' | 'limitToLast';
}

// @public
export type QueryNonFilterConstraint = QueryOrderByConstraint | QueryLimitConstraint | QueryStartAtConstraint | QueryEndAtConstraint;

// @public
export class QueryOrderByConstraint extends QueryConstraint {
readonly type = "orderBy";
}

// @public
export class QuerySnapshot<T = DocumentData> {
docChanges(options?: SnapshotListenOptions): Array<DocumentChange<T>>;
Expand All @@ -384,6 +428,11 @@ export class QuerySnapshot<T = DocumentData> {
get size(): number;
}

// @public
export class QueryStartAtConstraint extends QueryConstraint {
readonly type: 'startAt' | 'startAfter';
}

// @public
export function refEqual<T>(left: DocumentReference<T> | CollectionReference<T>, right: DocumentReference<T> | CollectionReference<T>): boolean;

Expand Down Expand Up @@ -430,16 +479,16 @@ export interface SnapshotOptions {
}

// @public
export function startAfter(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
export function startAfter(snapshot: DocumentSnapshot<unknown>): QueryStartAtConstraint;

// @public
export function startAfter(...fieldValues: unknown[]): QueryConstraint;
export function startAfter(...fieldValues: unknown[]): QueryStartAtConstraint;

// @public
export function startAt(snapshot: DocumentSnapshot<unknown>): QueryConstraint;
export function startAt(snapshot: DocumentSnapshot<unknown>): QueryStartAtConstraint;

// @public
export function startAt(...fieldValues: unknown[]): QueryConstraint;
export function startAt(...fieldValues: unknown[]): QueryStartAtConstraint;

// @public
export type TaskState = 'Error' | 'Running' | 'Success';
Expand Down Expand Up @@ -506,7 +555,7 @@ export function updateDoc(reference: DocumentReference<unknown>, field: string |
export function waitForPendingWrites(firestore: Firestore): Promise<void>;

// @public
export function where(fieldPath: string | FieldPath, opStr: WhereFilterOp, value: unknown): QueryConstraint;
export function where(fieldPath: string | FieldPath, opStr: WhereFilterOp, value: unknown): QueryFieldFilterConstraint;

// @public
export type WhereFilterOp = '<' | '<=' | '==' | '!=' | '>=' | '>' | 'array-contains' | 'in' | 'array-contains-any' | 'not-in';
Expand Down
18 changes: 14 additions & 4 deletions packages/firestore/lite/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,19 +55,29 @@ export {
} from '../src/lite-api/reference';

export {
and,
endAt,
endBefore,
startAt,
startAfter,
limit,
limitToLast,
orderBy,
OrderByDirection,
where,
WhereFilterOp,
or,
orderBy,
query,
QueryConstraint,
QueryConstraintType
QueryConstraintType,
QueryCompositeFilterConstraint,
QueryFilterConstraint,
QueryFieldFilterConstraint,
QueryOrderByConstraint,
QueryLimitConstraint,
QueryNonFilterConstraint,
QueryStartAtConstraint,
QueryEndAtConstraint,
OrderByDirection,
WhereFilterOp
} from '../src/lite-api/query';

export {
Expand Down
2 changes: 2 additions & 0 deletions packages/firestore/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
"test:all:ci": "run-p test:browser test:lite:browser test:travis",
"test:all": "run-p test:browser test:lite:browser test:travis test:minified",
"test:browser": "karma start --single-run",
"test:browser:emulator:debug": "karma start --browsers=Chrome --local",
"test:browser:emulator": "karma start --single-run --local",
"test:browser:unit": "karma start --single-run --unit",
"test:browser:debug": "karma start --browsers=Chrome --auto-watch",
"test:node": "node ./scripts/run-tests.js --main=test/register.ts --emulator 'test/{,!(browser|lite)/**/}*.test.ts'",
Expand Down
10 changes: 10 additions & 0 deletions packages/firestore/src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,17 +72,27 @@ export {
} from './api/reference';

export {
and,
endAt,
endBefore,
startAt,
startAfter,
limit,
limitToLast,
where,
or,
orderBy,
query,
QueryConstraint,
QueryConstraintType,
QueryCompositeFilterConstraint,
QueryFilterConstraint,
QueryFieldFilterConstraint,
QueryOrderByConstraint,
QueryLimitConstraint,
QueryNonFilterConstraint,
QueryStartAtConstraint,
QueryEndAtConstraint,
OrderByDirection,
WhereFilterOp
} from './api/filter';
Expand Down
Loading