summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_change_stream.idl
blob: 6fa2bca9b84dde801f7d0cfafa6dbc514addbf2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# Copyright (C) 2018 MongoDB Inc.
#
# This program is free software: you can redistribute it and/or  modify

#    Copyright (C) 2018-present MongoDB, Inc.
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the Server Side Public License, version 1,
#    as published by MongoDB, Inc.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    Server Side Public License for more details.
#
#    You should have received a copy of the Server Side Public License
#    along with this program. If not, see
#    <http://www.mongodb.com/licensing/server-side-public-license>.
#
#    As a special exception, the copyright holders give permission to link the
#    code of portions of this program with the OpenSSL library under certain
#    conditions as described in each individual source file and distribute
#    linked combinations including the program with the OpenSSL library. You
#    must comply with the Server Side Public License in all respects for
#    all of the code used other than as permitted herein. If you modify file(s)
#    with this exception, you may extend this exception to your version of the
#    file(s), but you are not obligated to do so. If you do not wish to do so,
#    delete this exception statement from your version. If you delete this
#    exception statement from all source files in the program, then also delete
#    it in the license file.
#

# Document source change stream stage IDL file

global:
   cpp_namespace: "mongo"
   cpp_includes:
       - "mongo/db/pipeline/resume_token.h"

imports:
    - "mongo/idl/basic_types.idl"

types:
    # A resume token is an opaque document we return to the user that contains all the information
    # needed to resume a stream where they left off.  It also provides the ordering of streams
    # from multiple shards.
    resumeToken:
        bson_serialization_type: object
        description: An object representing a resume token for a change stream
        cpp_type: ResumeToken
        # The IDL requires a serializer for any custom type. The serializer for this type actually
        # needs to know which format to use though, so requires an argument which is not currently
        # supported by the IDL. We don't expect anyone to use the IDL to serialize the type, so we
        # just provide a dummy serializer here.
        serializer: ResumeToken::toBSON_do_not_use
        deserializer: ResumeToken::parse

    # The document key element in a resume token can be any BSON element, so we need a custom type
    # which leaves it as a BSONElement
    resumeTokenDocumentKey:
        bson_serialization_type: any
        description: The document id contained within a resume token
        cpp_type: Value
        serializer: Value::serializeForIDL
        deserializer: Value::deserializeForIDL


structs:
  ResumeTokenClusterTime:
      description: The IDL type of cluster time
      fields:
          ts:
            cpp_name: timestamp
            type: timestamp
            description: The timestamp of the logical time

  DocumentSourceChangeStreamSpec:
      description: A document used to specify the $changeStream stage of an aggregation
                   pipeline.
      fields:
          resumeAfter:
              cpp_name: resumeAfter
              type: resumeToken
              optional: true
              description: An object representing the point at which we should resume reporting
                           changes from.

          startAfter:
              cpp_name: startAfter
              type: resumeToken
              optional: true
              description: An object representing the point at which we should start reporting
                           changes from. This is allowed to be a token from an invalidating command.

          startAtOperationTime:
              cpp_name: startAtOperationTime
              type: timestamp
              optional: true
              description: The operation time after which we should start reporting changes.
                           Only one of resumeAfter, _resumeAfterClusterTimeDeprecated, and
                           startAtOperationTime should be specified.
          fullDocument:
              cpp_name: fullDocument
              type: string
              default: '"default"'
              description: A string '"updateLookup"' or '"default"', indicating whether or not we
                           should return a full document or just changes for an update.
          allChangesForCluster:
              cpp_name: allChangesForCluster
              type: bool
              default: false
              description: A flag indicating whether the stream should report all changes that occur
                           on the deployment, aside from those on internal databases or collections.