From d1a05eb263c1f869c732b1318d2c56a3e33664f2 Mon Sep 17 00:00:00 2001 From: Juan Lara <1543140+jlara310@users.noreply.github.com> Date: Fri, 21 Feb 2020 12:01:16 -0800 Subject: [PATCH] Add sample queries for optimizing-indexes docs (#2855) * Add sample queries for optimizing-indexes docs * Fix syntax error --- datastore/cloud-client/snippets.py | 91 +++++++++++++++++++++++++ datastore/cloud-client/snippets_test.py | 4 ++ 2 files changed, 95 insertions(+) diff --git a/datastore/cloud-client/snippets.py b/datastore/cloud-client/snippets.py index 904ee3187c9c..97ff5d41cd91 100644 --- a/datastore/cloud-client/snippets.py +++ b/datastore/cloud-client/snippets.py @@ -789,6 +789,97 @@ def eventual_consistent_query(client): pass +def index_merge_queries(client): + # Create a Photo entity to query + photo = datastore.Entity(client.key('Photo', 'sample_photo')) + + photo.update({ + 'owner_id': 'user1234', + 'size': 2, + 'coloration': 2, + 'tag': ['family', 'outside', 'camping'] + }) + + client.put(photo) + + # Sample queries using built-in indexes + queries = [] + + # [START datastore_built_in_index_queries] + query_owner_id = client.query( + kind='Photo', + filters=[('owner_id', '=', 'user1234')]) + + query_size = client.query( + kind='Photo', + filters=[('size', '=', 2)]) + + query_coloration = client.query( + kind='Photo', + filters=[('coloration', '=', 2)]) + # [END datastore_built_in_index_queries] + + queries.append(query_owner_id) + queries.append(query_size) + queries.append(query_coloration) + + # [START datastore_merged_index_query] + query_all_properties = client.query( + kind='Photo', + filters=[('owner_id', '=', 'user1234'), + ('size', '=', 2), + ('coloration', '=', 2), + ('tag', '=', 'family')]) + # [END datastore_merged_index_query] + + queries.append(query_all_properties) + + # [START datastore_merged_index_tag_queries] + query_tag = client.query( + kind='Photo', + filters=[('tag', '=', 'family'), + ('tag', '=', 'outside'), + ('tag', '=', 'camping')]) + + query_owner_size_color_tags = client.query( + kind='Photo', + filters=[('owner_id', '=', 'user1234'), + ('size', '=', 2), + ('coloration', '=', 2), + ('tag', '=', 'family'), + ('tag', '=', 'outside'), + ('tag', '=', 'camping')]) + # [END datastore_merged_index_tag_queries] + + queries.append(query_tag) + queries.append(query_owner_size_color_tags) + + # [START datastore_owner_size_tag_query] + query_owner_size_tag = client.query( + kind='Photo', + filters=[('owner_id', '=', 'username'), + ('size', '=', 2), + ('tag', '=', 'family')]) + # [END datastore_owner_size_tag_query] + + queries.append(query_owner_size_tag) + + # [START datastore_size_coloration_query] + query_size_coloration = client.query( + kind='Photo', + filters=[('size', '=', 2), + ('coloration', '=', 1)]) + # [END datastore_size_coloration_query] + + queries.append(query_size_coloration) + + results = [] + for query in queries: + results.append(query.fetch()) + + return results + + def main(project_id): client = datastore.Client(project_id) diff --git a/datastore/cloud-client/snippets_test.py b/datastore/cloud-client/snippets_test.py index 193439f7b8ca..8e00d309ac1c 100644 --- a/datastore/cloud-client/snippets_test.py +++ b/datastore/cloud-client/snippets_test.py @@ -276,3 +276,7 @@ def test_property_by_kind_run_query(self, client): client.entities_to_delete.extend( client.query(kind='Task').fetch()) assert reprs + + @eventually_consistent.mark + def test_index_merge_queries(self, client): + snippets.index_merge_queries(client)