@@ -50,6 +50,9 @@ const char* kCollectionParentsTable = "collection_parent";
50
50
const char * kRemoteDocumentReadTimeTable = " remote_document_read_time" ;
51
51
const char * kBundlesTable = " bundles" ;
52
52
const char * kNamedQueriesTable = " named_queries" ;
53
+ const char * kIndexConfigurationTable = " index_configuration" ;
54
+ const char * kIndexStateTable = " index_state" ;
55
+ const char * kIndexEntriesTable = " index_entries" ;
53
56
54
57
/* *
55
58
* Labels for the components of keys. These serve to make keys self-describing.
@@ -115,6 +118,11 @@ enum ComponentLabel {
115
118
/* * A component containing the name of a named query. */
116
119
QueryName = 18 ,
117
120
121
+ /* * A component containing a index id. */
122
+ IndexId = 19 ,
123
+ IndexArrayValue = 20 ,
124
+ IndexDirectionalValue = 21 ,
125
+
118
126
/* *
119
127
* A path segment describes just a single segment in a resource path. Path
120
128
* segments that occur sequentially in a key represent successive segments in
@@ -201,6 +209,18 @@ class Reader {
201
209
return ReadLabeledString (ComponentLabel::QueryName);
202
210
}
203
211
212
+ int32_t ReadIndexId () {
213
+ return ReadLabeledInt32 (ComponentLabel::IndexId);
214
+ }
215
+
216
+ std::string ReadIndexArrayValue () {
217
+ return ReadLabeledString (ComponentLabel::IndexArrayValue);
218
+ }
219
+
220
+ std::string ReadIndexDirectionalValue () {
221
+ return ReadLabeledString (ComponentLabel::IndexDirectionalValue);
222
+ }
223
+
204
224
/* *
205
225
* Reads a snapshot version, encoded as a component label and a pair of
206
226
* seconds (int64) and nanoseconds (int32).
@@ -567,6 +587,21 @@ std::string Reader::Describe() {
567
587
if (ok_) {
568
588
absl::StrAppend (&description, " query_name=" , query_name);
569
589
}
590
+ } else if (label == ComponentLabel::IndexId) {
591
+ int32_t index_id = ReadIndexId ();
592
+ if (ok_) {
593
+ absl::StrAppend (&description, " index_id=" , index_id);
594
+ }
595
+ } else if (label == ComponentLabel::IndexArrayValue) {
596
+ const std::string& value = ReadIndexArrayValue ();
597
+ if (ok_) {
598
+ absl::StrAppend (&description, " array_value=" , value);
599
+ }
600
+ } else if (label == ComponentLabel::IndexDirectionalValue) {
601
+ const std::string& value = ReadIndexDirectionalValue ();
602
+ if (ok_) {
603
+ absl::StrAppend (&description, " directional_value=" , value);
604
+ }
570
605
} else {
571
606
absl::StrAppend (&description, " unknown label=" , static_cast <int >(label));
572
607
Fail ();
@@ -650,6 +685,18 @@ class Writer {
650
685
}
651
686
}
652
687
688
+ void WriteIndexId (int32_t id) {
689
+ WriteLabeledInt32 (ComponentLabel::IndexId, id);
690
+ }
691
+
692
+ void WriteIndexArrayValue (absl::string_view value) {
693
+ WriteLabeledString (ComponentLabel::IndexArrayValue, value);
694
+ }
695
+
696
+ void WriteIndexDirectionalValue (absl::string_view value) {
697
+ WriteLabeledString (ComponentLabel::IndexDirectionalValue, value);
698
+ }
699
+
653
700
private:
654
701
/* * Writes a component label to the given key destination. */
655
702
void WriteComponentLabel (ComponentLabel label) {
@@ -1094,6 +1141,87 @@ bool LevelDbNamedQueryKey::Decode(absl::string_view key) {
1094
1141
return reader.ok ();
1095
1142
}
1096
1143
1144
+ std::string LevelDbIndexConfigurationKey::KeyPrefix () {
1145
+ Writer writer;
1146
+ writer.WriteTableName (kIndexConfigurationTable );
1147
+ return writer.result ();
1148
+ }
1149
+
1150
+ std::string LevelDbIndexConfigurationKey::Key (int32_t id) {
1151
+ Writer writer;
1152
+ writer.WriteTableName (kIndexConfigurationTable );
1153
+ writer.WriteIndexId (id);
1154
+ writer.WriteTerminator ();
1155
+ return writer.result ();
1156
+ }
1157
+
1158
+ bool LevelDbIndexConfigurationKey::Decode (absl::string_view key) {
1159
+ Reader reader{key};
1160
+ reader.ReadTableNameMatching (kIndexConfigurationTable );
1161
+ index_id_ = reader.ReadIndexId ();
1162
+ reader.ReadTerminator ();
1163
+ return reader.ok ();
1164
+ }
1165
+
1166
+ std::string LevelDbIndexStateKey::KeyPrefix () {
1167
+ Writer writer;
1168
+ writer.WriteTableName (kIndexStateTable );
1169
+ return writer.result ();
1170
+ }
1171
+
1172
+ std::string LevelDbIndexStateKey::Key (int32_t index_id,
1173
+ absl::string_view user_id) {
1174
+ Writer writer;
1175
+ writer.WriteTableName (kIndexStateTable );
1176
+ writer.WriteIndexId (index_id);
1177
+ writer.WriteUserId (user_id);
1178
+ writer.WriteTerminator ();
1179
+ return writer.result ();
1180
+ }
1181
+
1182
+ bool LevelDbIndexStateKey::Decode (absl::string_view key) {
1183
+ Reader reader{key};
1184
+ reader.ReadTableNameMatching (kIndexStateTable );
1185
+ index_id_ = reader.ReadIndexId ();
1186
+ user_id_ = reader.ReadUserId ();
1187
+ reader.ReadTerminator ();
1188
+ return reader.ok ();
1189
+ }
1190
+
1191
+ std::string LevelDbIndexEntryKey::KeyPrefix () {
1192
+ Writer writer;
1193
+ writer.WriteTableName (kIndexEntriesTable );
1194
+ return writer.result ();
1195
+ }
1196
+
1197
+ std::string LevelDbIndexEntryKey::Key (int32_t index_id,
1198
+ absl::string_view user_id,
1199
+ absl::string_view array_value,
1200
+ absl::string_view dicrectional_value,
1201
+ absl::string_view document_name) {
1202
+ Writer writer;
1203
+ writer.WriteTableName (kIndexEntriesTable );
1204
+ writer.WriteIndexId (index_id);
1205
+ writer.WriteUserId (user_id);
1206
+ writer.WriteIndexArrayValue (array_value);
1207
+ writer.WriteIndexDirectionalValue (dicrectional_value);
1208
+ writer.WriteDocumentId (document_name);
1209
+ writer.WriteTerminator ();
1210
+ return writer.result ();
1211
+ }
1212
+
1213
+ bool LevelDbIndexEntryKey::Decode (absl::string_view key) {
1214
+ Reader reader{key};
1215
+ reader.ReadTableNameMatching (kIndexEntriesTable );
1216
+ index_id_ = reader.ReadIndexId ();
1217
+ user_id_ = reader.ReadUserId ();
1218
+ array_value_ = reader.ReadIndexArrayValue ();
1219
+ directional_value_ = reader.ReadIndexDirectionalValue ();
1220
+ document_name_ = reader.ReadDocumentId ();
1221
+ reader.ReadTerminator ();
1222
+ return reader.ok ();
1223
+ }
1224
+
1097
1225
} // namespace local
1098
1226
} // namespace firestore
1099
1227
} // namespace firebase
0 commit comments