Skip to content

Commit 6791661

Browse files
authored
feat: Add timestamp expressions (#7955)
Add new timestamp expressions `timestamp_diff` and `timestamp_extract` and integration tests for the expressions The expression `timestamp_trunc` already existed in the repo with integration tests. Add methods for timestampTruncWithTimezone to avoid signature collision. Add methods to allow timezone as parameter in chained expressions. Amend the tests for the `timestamp_trunc` expression Ported from firebase/firebase-js-sdk#9728
1 parent afbe8b9 commit 6791661

4 files changed

Lines changed: 982 additions & 17 deletions

File tree

firebase-firestore/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Unreleased
22

3+
- [feature] Added support for `timestampTruncate`, `timestampDiff`, and `timestampExtract` Pipeline expressions.
4+
[#7955](https://github.com/firebase/firebase-android-sdk/pull/7955)
35
- [feature] Pipeline operations are GA now.
46
- [feature] Added support for Pipeline Subqueries, including `define` and `variable` expressions.
57
[#7736](https://github.com/firebase/firebase-android-sdk/pull/7736)

firebase-firestore/api.txt

Lines changed: 63 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1263,6 +1263,32 @@ package com.google.firebase.firestore.pipeline {
12631263
method public static final com.google.firebase.firestore.pipeline.Expression timestampAdd(String fieldName, com.google.firebase.firestore.pipeline.Expression unit, com.google.firebase.firestore.pipeline.Expression amount);
12641264
method public static final com.google.firebase.firestore.pipeline.Expression timestampAdd(String fieldName, String unit, long amount);
12651265
method public final com.google.firebase.firestore.pipeline.Expression timestampAdd(String unit, long amount);
1266+
method public final com.google.firebase.firestore.pipeline.Expression timestampDiff(com.google.firebase.firestore.pipeline.Expression start, com.google.firebase.firestore.pipeline.Expression unit);
1267+
method public static final com.google.firebase.firestore.pipeline.Expression timestampDiff(com.google.firebase.firestore.pipeline.Expression end, com.google.firebase.firestore.pipeline.Expression start, com.google.firebase.firestore.pipeline.Expression unit);
1268+
method public static final com.google.firebase.firestore.pipeline.Expression timestampDiff(com.google.firebase.firestore.pipeline.Expression end, com.google.firebase.firestore.pipeline.Expression start, String unit);
1269+
method public final com.google.firebase.firestore.pipeline.Expression timestampDiff(com.google.firebase.firestore.pipeline.Expression start, String unit);
1270+
method public static final com.google.firebase.firestore.pipeline.Expression timestampDiff(com.google.firebase.firestore.pipeline.Expression end, String startFieldName, String unit);
1271+
method public static final com.google.firebase.firestore.pipeline.Expression timestampDiff(String endFieldName, com.google.firebase.firestore.pipeline.Expression start, String unit);
1272+
method public final com.google.firebase.firestore.pipeline.Expression timestampDiff(String startFieldName, String unit);
1273+
method public static final com.google.firebase.firestore.pipeline.Expression timestampDiff(String endFieldName, String startFieldName, String unit);
1274+
method public final com.google.firebase.firestore.pipeline.Expression timestampExtract(com.google.firebase.firestore.pipeline.Expression part);
1275+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtract(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression part);
1276+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtract(com.google.firebase.firestore.pipeline.Expression timestamp, String part);
1277+
method public final com.google.firebase.firestore.pipeline.Expression timestampExtract(String part);
1278+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtract(String fieldName, com.google.firebase.firestore.pipeline.Expression part);
1279+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtract(String fieldName, String part);
1280+
method public final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(com.google.firebase.firestore.pipeline.Expression part, com.google.firebase.firestore.pipeline.Expression timezone);
1281+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression part, com.google.firebase.firestore.pipeline.Expression timezone);
1282+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression part, String timezone);
1283+
method public final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(com.google.firebase.firestore.pipeline.Expression part, String timezone);
1284+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, String part, com.google.firebase.firestore.pipeline.Expression timezone);
1285+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, String part, String timezone);
1286+
method public final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(String part, com.google.firebase.firestore.pipeline.Expression timezone);
1287+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(String fieldName, com.google.firebase.firestore.pipeline.Expression part, com.google.firebase.firestore.pipeline.Expression timezone);
1288+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(String fieldName, com.google.firebase.firestore.pipeline.Expression part, String timezone);
1289+
method public final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(String part, String timezone);
1290+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(String fieldName, String part, com.google.firebase.firestore.pipeline.Expression timezone);
1291+
method public static final com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(String fieldName, String part, String timezone);
12661292
method public final com.google.firebase.firestore.pipeline.Expression timestampSubtract(com.google.firebase.firestore.pipeline.Expression unit, com.google.firebase.firestore.pipeline.Expression amount);
12671293
method public static final com.google.firebase.firestore.pipeline.Expression timestampSubtract(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression unit, com.google.firebase.firestore.pipeline.Expression amount);
12681294
method public static final com.google.firebase.firestore.pipeline.Expression timestampSubtract(com.google.firebase.firestore.pipeline.Expression timestamp, String unit, long amount);
@@ -1280,14 +1306,22 @@ package com.google.firebase.firestore.pipeline {
12801306
method public static final com.google.firebase.firestore.pipeline.Expression timestampToUnixSeconds(String fieldName);
12811307
method public final com.google.firebase.firestore.pipeline.Expression timestampTruncate(com.google.firebase.firestore.pipeline.Expression granularity);
12821308
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncate(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression granularity);
1283-
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncate(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression granularity, String timezone);
12841309
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncate(com.google.firebase.firestore.pipeline.Expression timestamp, String granularity);
1285-
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncate(com.google.firebase.firestore.pipeline.Expression timestamp, String granularity, String timezone);
12861310
method public final com.google.firebase.firestore.pipeline.Expression timestampTruncate(String granularity);
12871311
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncate(String fieldName, com.google.firebase.firestore.pipeline.Expression granularity);
1288-
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncate(String fieldName, com.google.firebase.firestore.pipeline.Expression granularity, String timezone);
12891312
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncate(String fieldName, String granularity);
1290-
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncate(String fieldName, String granularity, String timezone);
1313+
method public final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(com.google.firebase.firestore.pipeline.Expression granularity, com.google.firebase.firestore.pipeline.Expression timezone);
1314+
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression granularity, com.google.firebase.firestore.pipeline.Expression timezone);
1315+
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression granularity, String timezone);
1316+
method public final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(com.google.firebase.firestore.pipeline.Expression granularity, String timezone);
1317+
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, String granularity, com.google.firebase.firestore.pipeline.Expression timezone);
1318+
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, String granularity, String timezone);
1319+
method public final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(String granularity, com.google.firebase.firestore.pipeline.Expression timezone);
1320+
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(String fieldName, com.google.firebase.firestore.pipeline.Expression granularity, com.google.firebase.firestore.pipeline.Expression timezone);
1321+
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(String fieldName, com.google.firebase.firestore.pipeline.Expression granularity, String timezone);
1322+
method public final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(String granularity, String timezone);
1323+
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(String fieldName, String granularity, com.google.firebase.firestore.pipeline.Expression timezone);
1324+
method public static final com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(String fieldName, String granularity, String timezone);
12911325
method public final com.google.firebase.firestore.pipeline.Expression toLower();
12921326
method public static final com.google.firebase.firestore.pipeline.Expression toLower(com.google.firebase.firestore.pipeline.Expression stringExpression);
12931327
method public static final com.google.firebase.firestore.pipeline.Expression toLower(String fieldName);
@@ -1637,6 +1671,23 @@ package com.google.firebase.firestore.pipeline {
16371671
method public com.google.firebase.firestore.pipeline.Expression timestampAdd(com.google.firebase.firestore.pipeline.Expression timestamp, String unit, long amount);
16381672
method public com.google.firebase.firestore.pipeline.Expression timestampAdd(String fieldName, com.google.firebase.firestore.pipeline.Expression unit, com.google.firebase.firestore.pipeline.Expression amount);
16391673
method public com.google.firebase.firestore.pipeline.Expression timestampAdd(String fieldName, String unit, long amount);
1674+
method public com.google.firebase.firestore.pipeline.Expression timestampDiff(com.google.firebase.firestore.pipeline.Expression end, com.google.firebase.firestore.pipeline.Expression start, com.google.firebase.firestore.pipeline.Expression unit);
1675+
method public com.google.firebase.firestore.pipeline.Expression timestampDiff(com.google.firebase.firestore.pipeline.Expression end, com.google.firebase.firestore.pipeline.Expression start, String unit);
1676+
method public com.google.firebase.firestore.pipeline.Expression timestampDiff(com.google.firebase.firestore.pipeline.Expression end, String startFieldName, String unit);
1677+
method public com.google.firebase.firestore.pipeline.Expression timestampDiff(String endFieldName, com.google.firebase.firestore.pipeline.Expression start, String unit);
1678+
method public com.google.firebase.firestore.pipeline.Expression timestampDiff(String endFieldName, String startFieldName, String unit);
1679+
method public com.google.firebase.firestore.pipeline.Expression timestampExtract(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression part);
1680+
method public com.google.firebase.firestore.pipeline.Expression timestampExtract(com.google.firebase.firestore.pipeline.Expression timestamp, String part);
1681+
method public com.google.firebase.firestore.pipeline.Expression timestampExtract(String fieldName, com.google.firebase.firestore.pipeline.Expression part);
1682+
method public com.google.firebase.firestore.pipeline.Expression timestampExtract(String fieldName, String part);
1683+
method public com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression part, com.google.firebase.firestore.pipeline.Expression timezone);
1684+
method public com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression part, String timezone);
1685+
method public com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, String part, com.google.firebase.firestore.pipeline.Expression timezone);
1686+
method public com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, String part, String timezone);
1687+
method public com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(String fieldName, com.google.firebase.firestore.pipeline.Expression part, com.google.firebase.firestore.pipeline.Expression timezone);
1688+
method public com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(String fieldName, com.google.firebase.firestore.pipeline.Expression part, String timezone);
1689+
method public com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(String fieldName, String part, com.google.firebase.firestore.pipeline.Expression timezone);
1690+
method public com.google.firebase.firestore.pipeline.Expression timestampExtractWithTimezone(String fieldName, String part, String timezone);
16401691
method public com.google.firebase.firestore.pipeline.Expression timestampSubtract(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression unit, com.google.firebase.firestore.pipeline.Expression amount);
16411692
method public com.google.firebase.firestore.pipeline.Expression timestampSubtract(com.google.firebase.firestore.pipeline.Expression timestamp, String unit, long amount);
16421693
method public com.google.firebase.firestore.pipeline.Expression timestampSubtract(String fieldName, com.google.firebase.firestore.pipeline.Expression unit, com.google.firebase.firestore.pipeline.Expression amount);
@@ -1648,13 +1699,17 @@ package com.google.firebase.firestore.pipeline {
16481699
method public com.google.firebase.firestore.pipeline.Expression timestampToUnixSeconds(com.google.firebase.firestore.pipeline.Expression expr);
16491700
method public com.google.firebase.firestore.pipeline.Expression timestampToUnixSeconds(String fieldName);
16501701
method public com.google.firebase.firestore.pipeline.Expression timestampTruncate(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression granularity);
1651-
method public com.google.firebase.firestore.pipeline.Expression timestampTruncate(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression granularity, String timezone);
16521702
method public com.google.firebase.firestore.pipeline.Expression timestampTruncate(com.google.firebase.firestore.pipeline.Expression timestamp, String granularity);
1653-
method public com.google.firebase.firestore.pipeline.Expression timestampTruncate(com.google.firebase.firestore.pipeline.Expression timestamp, String granularity, String timezone);
16541703
method public com.google.firebase.firestore.pipeline.Expression timestampTruncate(String fieldName, com.google.firebase.firestore.pipeline.Expression granularity);
1655-
method public com.google.firebase.firestore.pipeline.Expression timestampTruncate(String fieldName, com.google.firebase.firestore.pipeline.Expression granularity, String timezone);
16561704
method public com.google.firebase.firestore.pipeline.Expression timestampTruncate(String fieldName, String granularity);
1657-
method public com.google.firebase.firestore.pipeline.Expression timestampTruncate(String fieldName, String granularity, String timezone);
1705+
method public com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression granularity, com.google.firebase.firestore.pipeline.Expression timezone);
1706+
method public com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, com.google.firebase.firestore.pipeline.Expression granularity, String timezone);
1707+
method public com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, String granularity, com.google.firebase.firestore.pipeline.Expression timezone);
1708+
method public com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(com.google.firebase.firestore.pipeline.Expression timestamp, String granularity, String timezone);
1709+
method public com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(String fieldName, com.google.firebase.firestore.pipeline.Expression granularity, com.google.firebase.firestore.pipeline.Expression timezone);
1710+
method public com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(String fieldName, com.google.firebase.firestore.pipeline.Expression granularity, String timezone);
1711+
method public com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(String fieldName, String granularity, com.google.firebase.firestore.pipeline.Expression timezone);
1712+
method public com.google.firebase.firestore.pipeline.Expression timestampTruncateWithTimezone(String fieldName, String granularity, String timezone);
16581713
method public com.google.firebase.firestore.pipeline.Expression toLower(com.google.firebase.firestore.pipeline.Expression stringExpression);
16591714
method public com.google.firebase.firestore.pipeline.Expression toLower(String fieldName);
16601715
method public com.google.firebase.firestore.pipeline.Expression toUpper(com.google.firebase.firestore.pipeline.Expression stringExpression);

0 commit comments

Comments
 (0)