Skip to content

Commit 57c2a56

Browse files
committed
Query to pipeline conversion is performed from the PipelineSource class rather than the Query class
1 parent 9f1abbb commit 57c2a56

File tree

5 files changed

+63
-82
lines changed

5 files changed

+63
-82
lines changed

packages/firestore/src/api/pipeline_impl.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import { Pipeline } from '../api/pipeline';
1919
import { firestoreClientExecutePipeline } from '../core/firestore_client';
20-
import { toPipeline } from '../core/pipeline-util';
2120
import { Pipeline as LitePipeline } from '../lite-api/pipeline';
2221
import { PipelineResult, PipelineSnapshot } from '../lite-api/pipeline-result';
2322
import { PipelineSource } from '../lite-api/pipeline-source';
@@ -26,7 +25,7 @@ import { newUserDataReader } from '../lite-api/user_data_reader';
2625
import { cast } from '../util/input_validation';
2726

2827
import { ensureFirestoreConfigured, Firestore } from './database';
29-
import { DocumentReference, Query } from './reference';
28+
import { DocumentReference } from './reference';
3029
import { ExpUserDataWriter } from './user_data_writer';
3130

3231
declare module './database' {
@@ -108,11 +107,3 @@ Firestore.prototype.pipeline = function (): PipelineSource<Pipeline> {
108107
);
109108
});
110109
};
111-
112-
// Augment the Query class with the pipeline() factory method
113-
Query.prototype.pipeline = function (): Pipeline {
114-
const db = cast<Firestore>(this.firestore, Firestore);
115-
116-
const litePipeline: LitePipeline = toPipeline(this._query, db);
117-
return cast<Pipeline>(litePipeline, Pipeline);
118-
};

packages/firestore/src/core/pipeline-util.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* limitations under the License.
1616
*/
1717

18-
import { Firestore } from '../api/database';
18+
import { Firestore } from '../lite-api/database';
1919
import {
2020
Constant,
2121
Field,

packages/firestore/src/lite-api/pipeline-source.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
*/
1717

1818
import { DatabaseId } from '../core/database_info';
19+
import { toPipeline } from '../core/pipeline-util';
1920
import { FirestoreError, Code } from '../util/error';
2021

21-
import { CollectionReference, DocumentReference } from './reference';
22+
import { Pipeline } from './pipeline';
23+
import { CollectionReference, DocumentReference, Query } from './reference';
2224
import {
2325
CollectionGroupSource,
2426
CollectionSource,
@@ -105,6 +107,17 @@ export class PipelineSource<PipelineType> {
105107
return this._createPipeline([DocumentsSource.of(docs)]);
106108
}
107109

110+
/**
111+
* Convert the given Query into an equivalent Pipeline.
112+
*
113+
* @param query A Query to be converted into a Pipeline.
114+
*
115+
* @throws {@FirestoreError} Thrown if any of the provided DocumentReferences target a different project or database than the pipeline.
116+
*/
117+
createFrom(query: Query): Pipeline {
118+
return toPipeline(query._query, query.firestore);
119+
}
120+
108121
_validateReference(reference: CollectionReference | DocumentReference): void {
109122
const refDbId = reference.firestore._databaseId;
110123
if (!refDbId.isEqual(this.databaseId)) {

packages/firestore/src/lite-api/pipeline_impl.ts

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { Firestore } from './database';
2222
import { Pipeline } from './pipeline';
2323
import { PipelineResult, PipelineSnapshot } from './pipeline-result';
2424
import { PipelineSource } from './pipeline-source';
25-
import { DocumentReference, Query } from './reference';
25+
import { DocumentReference } from './reference';
2626
import { LiteUserDataWriter } from './reference_impl';
2727
import { Stage } from './stage';
2828
import { newUserDataReader } from './user_data_reader';
@@ -33,12 +33,6 @@ declare module './database' {
3333
}
3434
}
3535

36-
declare module './reference' {
37-
interface Query {
38-
pipeline(): Pipeline;
39-
}
40-
}
41-
4236
/**
4337
* Executes this pipeline and returns a Promise to represent the asynchronous operation.
4438
*
@@ -107,22 +101,3 @@ Firestore.prototype.pipeline = function (): PipelineSource<Pipeline> {
107101
return new Pipeline(this, userDataReader, userDataWriter, stages);
108102
});
109103
};
110-
111-
Query.prototype.pipeline = function (): Pipeline {
112-
let pipeline;
113-
const query = this;
114-
if (query._query.collectionGroup) {
115-
pipeline = query.firestore
116-
.pipeline()
117-
.collectionGroup(query._query.collectionGroup);
118-
} else {
119-
pipeline = query.firestore
120-
.pipeline()
121-
.collection(query._query.path.canonicalString());
122-
}
123-
124-
// TODO(pipeline) convert existing query filters, limits, etc into
125-
// pipeline stages
126-
127-
return pipeline;
128-
};

0 commit comments

Comments
 (0)