1# -*- coding: utf-8 -*- 
    2# Copyright 2025 Google LLC 
    3# 
    4# Licensed under the Apache License, Version 2.0 (the "License"); 
    5# you may not use this file except in compliance with the License. 
    6# You may obtain a copy of the License at 
    7# 
    8#     http://www.apache.org/licenses/LICENSE-2.0 
    9# 
    10# Unless required by applicable law or agreed to in writing, software 
    11# distributed under the License is distributed on an "AS IS" BASIS, 
    12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    13# See the License for the specific language governing permissions and 
    14# limitations under the License. 
    15# 
    16from __future__ import annotations 
    17 
    18from typing import MutableMapping, MutableSequence 
    19 
    20import proto  # type: ignore 
    21 
    22from google.protobuf import duration_pb2  # type: ignore 
    23from google.protobuf import struct_pb2  # type: ignore 
    24 
    25 
    26__protobuf__ = proto.module( 
    27    package="google.firestore.v1", 
    28    manifest={ 
    29        "ExplainOptions", 
    30        "ExplainMetrics", 
    31        "PlanSummary", 
    32        "ExecutionStats", 
    33    }, 
    34) 
    35 
    36 
    37class ExplainOptions(proto.Message): 
    38    r"""Explain options for the query. 
    39 
    40    Attributes: 
    41        analyze (bool): 
    42            Optional. Whether to execute this query. 
    43 
    44            When false (the default), the query will be 
    45            planned, returning only metrics from the 
    46            planning stages. 
    47 
    48            When true, the query will be planned and 
    49            executed, returning the full query results along 
    50            with both planning and execution stage metrics. 
    51    """ 
    52 
    53    analyze: bool = proto.Field( 
    54        proto.BOOL, 
    55        number=1, 
    56    ) 
    57 
    58 
    59class ExplainMetrics(proto.Message): 
    60    r"""Explain metrics for the query. 
    61 
    62    Attributes: 
    63        plan_summary (google.cloud.firestore_v1.types.PlanSummary): 
    64            Planning phase information for the query. 
    65        execution_stats (google.cloud.firestore_v1.types.ExecutionStats): 
    66            Aggregated stats from the execution of the query. Only 
    67            present when 
    68            [ExplainOptions.analyze][google.firestore.v1.ExplainOptions.analyze] 
    69            is set to true. 
    70    """ 
    71 
    72    plan_summary: "PlanSummary" = proto.Field( 
    73        proto.MESSAGE, 
    74        number=1, 
    75        message="PlanSummary", 
    76    ) 
    77    execution_stats: "ExecutionStats" = proto.Field( 
    78        proto.MESSAGE, 
    79        number=2, 
    80        message="ExecutionStats", 
    81    ) 
    82 
    83 
    84class PlanSummary(proto.Message): 
    85    r"""Planning phase information for the query. 
    86 
    87    Attributes: 
    88        indexes_used (MutableSequence[google.protobuf.struct_pb2.Struct]): 
    89            The indexes selected for the query. For example: [ 
    90            {"query_scope": "Collection", "properties": "(foo ASC, 
    91            **name** ASC)"}, {"query_scope": "Collection", "properties": 
    92            "(bar ASC, **name** ASC)"} ] 
    93    """ 
    94 
    95    indexes_used: MutableSequence[struct_pb2.Struct] = proto.RepeatedField( 
    96        proto.MESSAGE, 
    97        number=1, 
    98        message=struct_pb2.Struct, 
    99    ) 
    100 
    101 
    102class ExecutionStats(proto.Message): 
    103    r"""Execution statistics for the query. 
    104 
    105    Attributes: 
    106        results_returned (int): 
    107            Total number of results returned, including 
    108            documents, projections, aggregation results, 
    109            keys. 
    110        execution_duration (google.protobuf.duration_pb2.Duration): 
    111            Total time to execute the query in the 
    112            backend. 
    113        read_operations (int): 
    114            Total billable read operations. 
    115        debug_stats (google.protobuf.struct_pb2.Struct): 
    116            Debugging statistics from the execution of the query. Note 
    117            that the debugging stats are subject to change as Firestore 
    118            evolves. It could include: { "indexes_entries_scanned": 
    119            "1000", "documents_scanned": "20", "billing_details" : { 
    120            "documents_billable": "20", "index_entries_billable": 
    121            "1000", "min_query_cost": "0" } } 
    122    """ 
    123 
    124    results_returned: int = proto.Field( 
    125        proto.INT64, 
    126        number=1, 
    127    ) 
    128    execution_duration: duration_pb2.Duration = proto.Field( 
    129        proto.MESSAGE, 
    130        number=3, 
    131        message=duration_pb2.Duration, 
    132    ) 
    133    read_operations: int = proto.Field( 
    134        proto.INT64, 
    135        number=4, 
    136    ) 
    137    debug_stats: struct_pb2.Struct = proto.Field( 
    138        proto.MESSAGE, 
    139        number=5, 
    140        message=struct_pb2.Struct, 
    141    ) 
    142 
    143 
    144__all__ = tuple(sorted(__protobuf__.manifest))