From c54e2b755c28548daf7ec1a1748ad290b9c4be88 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Thu, 22 Feb 2018 16:35:36 -0800 Subject: [PATCH 1/9] Adding database snippets --- snippets/auth.go | 25 ++-- snippets/db.go | 298 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 309 insertions(+), 14 deletions(-) create mode 100644 snippets/db.go diff --git a/snippets/auth.go b/snippets/auth.go index 31d24837..c650a0a9 100644 --- a/snippets/auth.go +++ b/snippets/auth.go @@ -94,10 +94,8 @@ func verifyIDToken(app *firebase.App, idToken string) *auth.Token { // https://firebase.google.com/docs/auth/admin/manage-sessions // ================================================================== -func revokeRefreshTokens(app *firebase.App, uid string) { - +func revokeRefreshTokens(ctx context.Context, app *firebase.App, uid string) { // [START revoke_tokens_golang] - ctx := context.Background() client, err := app.Auth(ctx) if err != nil { log.Fatalf("error getting Auth client: %v\n", err) @@ -115,8 +113,7 @@ func revokeRefreshTokens(app *firebase.App, uid string) { // [END revoke_tokens_golang] } -func verifyIDTokenAndCheckRevoked(app *firebase.App, idToken string) *auth.Token { - ctx := context.Background() +func verifyIDTokenAndCheckRevoked(ctx context.Context, app *firebase.App, idToken string) *auth.Token { // [START verify_id_token_and_check_revoked_golang] client, err := app.Auth(ctx) if err != nil { @@ -145,7 +142,7 @@ func getUser(ctx context.Context, app *firebase.App) *auth.UserRecord { // [START get_user_golang] // Get an auth client from the firebase.App - client, err := app.Auth(context.Background()) + client, err := app.Auth(ctx) if err != nil { log.Fatalf("error getting Auth client: %v\n", err) } @@ -193,7 +190,7 @@ func createUser(ctx context.Context, client *auth.Client) *auth.UserRecord { DisplayName("John Doe"). PhotoURL("http://www.example.com/12345678/photo.png"). Disabled(false) - u, err := client.CreateUser(context.Background(), params) + u, err := client.CreateUser(ctx, params) if err != nil { log.Fatalf("error creating user: %v\n", err) } @@ -209,7 +206,7 @@ func createUserWithUID(ctx context.Context, client *auth.Client) *auth.UserRecor UID(uid). Email("user@example.com"). PhoneNumber("+15555550100") - u, err := client.CreateUser(context.Background(), params) + u, err := client.CreateUser(ctx, params) if err != nil { log.Fatalf("error creating user: %v\n", err) } @@ -229,7 +226,7 @@ func updateUser(ctx context.Context, client *auth.Client) { DisplayName("John Doe"). PhotoURL("http://www.example.com/12345678/photo.png"). Disabled(true) - u, err := client.UpdateUser(context.Background(), uid, params) + u, err := client.UpdateUser(ctx, uid, params) if err != nil { log.Fatalf("error updating user: %v\n", err) } @@ -240,7 +237,7 @@ func updateUser(ctx context.Context, client *auth.Client) { func deleteUser(ctx context.Context, client *auth.Client) { uid := "d" // [START delete_user_golang] - err := client.DeleteUser(context.Background(), uid) + err := client.DeleteUser(ctx, uid) if err != nil { log.Fatalf("error deleting user: %v\n", err) } @@ -252,14 +249,14 @@ func customClaimsSet(ctx context.Context, app *firebase.App) { uid := "uid" // [START set_custom_user_claims_golang] // Get an auth client from the firebase.App - client, err := app.Auth(context.Background()) + client, err := app.Auth(ctx) if err != nil { log.Fatalf("error getting Auth client: %v\n", err) } // Set admin privilege on the user corresponding to uid. claims := map[string]interface{}{"admin": true} - err = client.SetCustomUserClaims(context.Background(), uid, claims) + err = client.SetCustomUserClaims(ctx, uid, claims) if err != nil { log.Fatalf("error setting custom claims %v\n", err) } @@ -351,7 +348,7 @@ func customClaimsIncremental(ctx context.Context, client *auth.Client) { func listUsers(ctx context.Context, client *auth.Client) { // [START list_all_users_golang] // Note, behind the scenes, the Users() iterator will retrive 1000 Users at a time through the API - iter := client.Users(context.Background(), "") + iter := client.Users(ctx, "") for { user, err := iter.Next() if err == iterator.Done { @@ -366,7 +363,7 @@ func listUsers(ctx context.Context, client *auth.Client) { // Iterating by pages 100 users at a time. // Note that using both the Next() function on an iterator and the NextPage() // on a Pager wrapping that same iterator will result in an error. - pager := iterator.NewPager(client.Users(context.Background(), ""), 100, "") + pager := iterator.NewPager(client.Users(ctx, ""), 100, "") for { var users []*auth.ExportedUserRecord nextPageToken, err := pager.NextPage(&users) diff --git a/snippets/db.go b/snippets/db.go new file mode 100644 index 00000000..a682e088 --- /dev/null +++ b/snippets/db.go @@ -0,0 +1,298 @@ +// Copyright 2018 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package snippets + +// [START authenticate_db_imports] +import ( + "context" + "fmt" + "log" + + "firebase.google.com/go/db" + + "firebase.google.com/go" + "google.golang.org/api/option" +) + +// [END authenticate_db_imports] + +func authenticateWithAdminPrivileges() { + // [START authenticate_with_admin_privileges] + ctx := context.Background() + conf := &firebase.Config{ + DatabaseURL: "https://databaseName.firebaseio.com", + } + // Fetch the service account key JSON file contents + opt := option.WithCredentialsFile("path/to/serviceAccountKey.json") + + // Initialize the app with a service account, granting admin privileges + app, err := firebase.NewApp(ctx, conf, opt) + if err != nil { + log.Fatalln("Error initializing app: %v", err) + } + + client, err := app.Database(ctx) + if err != nil { + log.Fatalln("Error initializing database client: %v", err) + } + + // As an admin, the app has access to read and write all data, regradless of Security Rules + ref := client.NewRef("restricted_access/secret_document") + var data map[string]interface{} + if err := ref.Get(ctx, &data); err != nil { + log.Fatalln("Error reading from database: %v", err) + } + fmt.Println(data) + // [END authenticate_with_admin_privileges] +} + +func authenticateWithLimitedPrivileges() { + // [START authenticate_with_limited_privileges] + ctx := context.Background() + // Initialize the app with a custom auth variable, limiting the server's access + ao := map[string]interface{}{"uid": "my-service-worker"} + conf := &firebase.Config{ + DatabaseURL: "https://databaseName.firebaseio.com", + AuthOverride: &ao, + } + + // Fetch the service account key JSON file contents + opt := option.WithCredentialsFile("path/to/serviceAccountKey.json") + + app, err := firebase.NewApp(ctx, conf, opt) + if err != nil { + log.Fatalln("Error initializing app: %v", err) + } + + client, err := app.Database(ctx) + if err != nil { + log.Fatalln("Error initializing database client: %v", err) + } + + // The app only has access as defined in the Security Rules + ref := client.NewRef("/some_resource") + var data map[string]interface{} + if err := ref.Get(ctx, &data); err != nil { + log.Fatalln("Error reading from database: %v", err) + } + fmt.Println(data) + // [END authenticate_with_limited_privileges] +} + +func authenticateWithGuestPrivileges() { + // [START authenticate_with_guest_privileges] + ctx := context.Background() + // Initialize the app with a nil auth variable, limiting the server's access + var nilMap map[string]interface{} + conf := &firebase.Config{ + DatabaseURL: "https://databaseName.firebaseio.com", + AuthOverride: &nilMap, + } + + // Fetch the service account key JSON file contents + opt := option.WithCredentialsFile("path/to/serviceAccountKey.json") + + app, err := firebase.NewApp(ctx, conf, opt) + if err != nil { + log.Fatalln("Error initializing app: %v", err) + } + + client, err := app.Database(ctx) + if err != nil { + log.Fatalln("Error initializing database client: %v", err) + } + + // The app only has access to public data as defined in the Security Rules + ref := client.NewRef("/some_resource") + var data map[string]interface{} + if err := ref.Get(ctx, &data); err != nil { + log.Fatalln("Error reading from database: %v", err) + } + fmt.Println(data) + // [END authenticate_with_guest_privileges] +} + +func getReference(ctx context.Context, app *firebase.App) { + // [START get_reference] + // Create a database client from App. + client, err := app.Database(ctx) + if err != nil { + log.Fatalln("Error initializing database client: %v", err) + } + + // Get a database reference to our blog. + ref := client.NewRef("server/saving-data/fireblog") + // [END get_reference] + fmt.Println(ref.Path) +} + +// [START user_type] + +// User is a json-serializable type. +type User struct { + DateOfBirth string `json:"date_of_birth,omitempty"` + FullName string `json:"full_name,omitempty"` + Nickname string `json:"nickname,omitempty"` +} + +// [END user_type] + +func setValue(ctx context.Context, ref *db.Ref) { + // [START set_value] + usersRef := ref.Child("users") + err := usersRef.Set(ctx, map[string]*User{ + "alanisawesome": &User{ + DateOfBirth: "June 23, 1912", + FullName: "Alan Turing", + }, + "gracehop": &User{ + DateOfBirth: "December 9, 1906", + FullName: "Grace Hopper", + }, + }) + if err != nil { + log.Fatalln("Error setting value: %v", err) + } + // [END set_value] +} + +func setChildValue(ctx context.Context, usersRef *db.Ref) { + // [START set_child_value] + if err := usersRef.Child("alanisawesome").Set(ctx, &User{ + DateOfBirth: "June 23, 1912", + FullName: "Alan Turing", + }); err != nil { + log.Fatalln("Error setting value: %v", err) + } + + if err := usersRef.Child("gracehop").Set(ctx, &User{ + DateOfBirth: "December 9, 1906", + FullName: "Grace Hopper", + }); err != nil { + log.Fatalln("Error setting value: %v", err) + } + // [END set_child_value] +} + +func updateChild(ctx context.Context, usersRef *db.Ref) { + // [START update_child] + hopperRef := usersRef.Child("gracehop") + if err := hopperRef.Update(ctx, map[string]interface{}{ + "nickname": "Amazing Grace", + }); err != nil { + log.Fatalln("Error updating child: %v", err) + } + // [END update_child] +} + +func updateChildren(ctx context.Context, usersRef *db.Ref) { + // [START update_children] + if err := usersRef.Update(ctx, map[string]interface{}{ + "alanisawesome/nickname": "Alan The Machine", + "gracehop/nickname": "Amazing Grace", + }); err != nil { + log.Fatalln("Error updating children: %v", err) + } + // [END update_children] +} + +func overwriteValue(ctx context.Context, usersRef *db.Ref) { + // [START overwrite_value] + if err := usersRef.Update(ctx, map[string]interface{}{ + "alanisawesome": &User{Nickname: "Alan The Machine"}, + "gracehop": &User{Nickname: "Amazing Grace"}, + }); err != nil { + log.Fatalln("Error updating children: %v", err) + } + // [END overwrite_value] +} + +// [START post_type] + +// Post is a json-serializable type. +type Post struct { + Author string `json:"author,omitempty"` + Title string `json:"title,omitempty"` +} + +// [END post_type] + +func pushValue(ctx context.Context, ref *db.Ref) { + // [START push_value] + postsRef := ref.Child("posts") + + newPostRef, err := postsRef.Push(ctx, nil) + if err != nil { + log.Fatalln("Error pushing child node: %v", err) + } + + if err := newPostRef.Set(ctx, &Post{ + Author: "gracehope", + Title: "Announcing COBOL, a New Programming Language", + }); err != nil { + log.Fatalln("Error setting value: %v", err) + } + + // We can also chain the two calls together + if _, err := postsRef.Push(ctx, &Post{ + Author: "alanisawesome", + Title: "The Turing Machine", + }); err != nil { + log.Fatalln("Error pushing child node: %v", err) + } + // [END push_value] +} + +func pushAndSetValue(ctx context.Context, postsRef *db.Ref) { + // [START push_and_set_value] + if _, err := postsRef.Push(ctx, &Post{ + Author: "gracehop", + Title: "Announcing COBOL, a New Programming Language", + }); err != nil { + log.Fatalln("Error pushing child node: %v", err) + } + // [END push_and_set_value] +} + +func pushKey(ctx context.Context, postsRef *db.Ref) { + // [START push_key] + // Generate a reference to a new location and add some data using Push() + newPostRef, err := postsRef.Push(ctx, nil) + if err != nil { + log.Fatalln("Error pushing child node: %v", err) + } + + // Get the unique key generated by Push() + postID := newPostRef.Key + // [END push_key] + fmt.Println(postID) +} + +func transaction(ctx context.Context, client *db.Client) { + // [START transaction] + fn := func(t db.TransactionNode) (interface{}, error) { + var currentValue int + if err := t.Unmarshal(¤tValue); err != nil { + return nil, err + } + return currentValue + 1, nil + } + + ref := client.NewRef("server/saving-data/fireblog/posts/-JRHTHaIs-jNPLXOQivY/upvotes") + if err := ref.Transaction(ctx, fn); err != nil { + log.Fatalln("Transaction failed to commit: %v", err) + } + // [END transaction] +} From 715a9adde27a54e69a7d483361c7b18746f17dbc Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Thu, 22 Feb 2018 17:09:36 -0800 Subject: [PATCH 2/9] Adding query snippets --- snippets/db.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/snippets/db.go b/snippets/db.go index a682e088..7bf4acda 100644 --- a/snippets/db.go +++ b/snippets/db.go @@ -296,3 +296,89 @@ func transaction(ctx context.Context, client *db.Client) { } // [END transaction] } + +func readValue(ctx context.Context, app *firebase.App) { + // [START read_value] + // Create a database client from App. + client, err := app.Database(ctx) + if err != nil { + log.Fatalln("Error initializing database client: %v", err) + } + + // Get a database reference to our posts + ref := client.NewRef("server/saving-data/fireblog/posts") + + // Read the data at the posts reference (this is a blocking operation) + var post Post + if err := ref.Get(ctx, &post); err != nil { + log.Fatalln("Error reading value: %v", err) + } + // [END read_value] + fmt.Println(ref.Path) +} + +// [START dinosaur_type] + +// Dinosaur is a json-serializable type. +type Dinosaur struct { + Height int `json:"height"` + Width int `json:"width"` +} + +// [END dinosaur_type] + +func orderByChild(ctx context.Context, client *db.Client) { + // [START order_by_child] + ref := client.NewRef("dinosaurs") + + var results map[string]Dinosaur + if err := ref.OrderByChild("height").Get(ctx, &results); err != nil { + log.Fatalln("Error querying database: %v", err) + } + // Results obtained from Get() are not ordered. + // Use GetOrdered() to retrieve sorted results. + for key, val := range results { + fmt.Printf("%s was %d meteres tall", key, val.Height) + } + // [END order_by_child] +} + +func orderByNestedChild(ctx context.Context, client *db.Client) { + // [START order_by_nested_child] + ref := client.NewRef("dinosaurs") + + var results map[string]Dinosaur + if err := ref.OrderByChild("dimensions/height").Get(ctx, &results); err != nil { + log.Fatalln("Error querying database: %v", err) + } + for key, val := range results { + fmt.Printf("%s was %d meteres tall\n", key, val.Height) + } + // [END order_by_nested_child] +} + +func orderByKey(ctx context.Context, client *db.Client) { + // [START order_by_key] + ref := client.NewRef("dinosaurs") + + var results []Dinosaur + if err := ref.OrderByKey().GetOrdered(ctx, &results); err != nil { + log.Fatalln("Error querying database: %v", err) + } + fmt.Println(results) + // [END order_by_key] +} + +func orderByValue(ctx context.Context, client *db.Client) { + // [START order_by_value] + ref := client.NewRef("scores") + + var results map[string]int + if err := ref.OrderByKey().Get(ctx, &results); err != nil { + log.Fatalln("Error querying database: %v", err) + } + for key, val := range results { + fmt.Printf("The %s dinosaur's score is %d\n", key, val) + } + // [END order_by_value] +} From 706d4d27174c19d645c522478f416ad2ac806cf7 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Thu, 22 Feb 2018 18:06:17 -0800 Subject: [PATCH 3/9] Added complex query samples --- snippets/db.go | 125 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/snippets/db.go b/snippets/db.go index 7bf4acda..516b04b2 100644 --- a/snippets/db.go +++ b/snippets/db.go @@ -382,3 +382,128 @@ func orderByValue(ctx context.Context, client *db.Client) { } // [END order_by_value] } + +func limitToLast(ctx context.Context, client *db.Client) { + // [START limit_query_1] + ref := client.NewRef("dinosaurs") + + var results map[string]Dinosaur + if err := ref.OrderByChild("weight").LimitToLast(2).Get(ctx, &results); err != nil { + log.Fatalln("Error querying database: %v", err) + } + for key := range results { + fmt.Println(key) + } + // [END limit_query_1] +} + +func limitToFirst(ctx context.Context, client *db.Client) { + // [START limit_query_2] + ref := client.NewRef("dinosaurs") + + var results map[string]Dinosaur + if err := ref.OrderByChild("height").LimitToFirst(2).Get(ctx, &results); err != nil { + log.Fatalln("Error querying database: %v", err) + } + for key := range results { + fmt.Println(key) + } + // [END limit_query_2] +} + +func limitWithValueOrder(ctx context.Context, client *db.Client) { + // [START limit_query_3] + ref := client.NewRef("scores") + + var results map[string]Dinosaur + if err := ref.OrderByValue().LimitToLast(3).Get(ctx, &results); err != nil { + log.Fatalln("Error querying database: %v", err) + } + for key, val := range results { + fmt.Printf("The %s dinosaur's score is %d\n", key, val) + } + // [END limit_query_3] +} + +func startAt(ctx context.Context, client *db.Client) { + // [START range_query_1] + ref := client.NewRef("dinosaurs") + + var results map[string]Dinosaur + if err := ref.OrderByChild("height").StartAt(3).Get(ctx, &results); err != nil { + log.Fatalln("Error querying database: %v", err) + } + for key := range results { + fmt.Println(key) + } + // [END range_query_1] +} + +func endAt(ctx context.Context, client *db.Client) { + // [START range_query_2] + ref := client.NewRef("dinosaurs") + + var results map[string]Dinosaur + if err := ref.OrderByKey().EndAt("pterodactyl").Get(ctx, &results); err != nil { + log.Fatalln("Error querying database: %v", err) + } + for key := range results { + fmt.Println(key) + } + // [END range_query_2] +} + +func startAndEndAt(ctx context.Context, client *db.Client) { + // [START range_query_3] + ref := client.NewRef("dinosaurs") + + var results map[string]Dinosaur + if err := ref.OrderByKey().StartAt("b").EndAt("b\uf8ff").Get(ctx, &results); err != nil { + log.Fatalln("Error querying database: %v", err) + } + for key := range results { + fmt.Println(key) + } + // [END range_query_3] +} + +func equalTo(ctx context.Context, client *db.Client) { + // [START range_query_4] + ref := client.NewRef("dinosaurs") + + var results map[string]Dinosaur + if err := ref.OrderByChild("height").EqualTo(25).Get(ctx, &results); err != nil { + log.Fatalln("Error querying database: %v", err) + } + for key := range results { + fmt.Println(key) + } + // [END range_query_4] +} + +func complexQuery(ctx context.Context, client *db.Client) { + // [START complex_query] + ref := client.NewRef("dinosaurs") + + var favDinoHeight int + if err := ref.Child("stegosaurus").Child("height").Get(ctx, &favDinoHeight); err != nil { + log.Fatalln("Error querying database: %v", err) + } + query := ref.OrderByChild("height").EndAt(favDinoHeight).LimitToLast(2) + var snapshot map[string]Dinosaur + if err := query.Get(ctx, &snapshot); err != nil { + log.Fatalln("Error querying database: %v", err) + } + if len(snapshot) == 2 { + for key := range snapshot { + // Data read by Get() are not ordered. So we check for the keys. + if key != "stegosaurus" { + fmt.Printf("The dinosaur just shorter than the stegosaurus is %s", key) + return + } + } + } else { + fmt.Println("The stegosaurus is the shortest dino") + } + // [END complex_query] +} From 6b989d41d8d813007802f888658f540cb698d82a Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Thu, 22 Feb 2018 18:57:50 -0800 Subject: [PATCH 4/9] Updated variable name --- snippets/db.go | 66 +++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/snippets/db.go b/snippets/db.go index 516b04b2..cc422ec3 100644 --- a/snippets/db.go +++ b/snippets/db.go @@ -331,13 +331,13 @@ func orderByChild(ctx context.Context, client *db.Client) { // [START order_by_child] ref := client.NewRef("dinosaurs") - var results map[string]Dinosaur - if err := ref.OrderByChild("height").Get(ctx, &results); err != nil { + var snapshot map[string]Dinosaur + if err := ref.OrderByChild("height").Get(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } // Results obtained from Get() are not ordered. // Use GetOrdered() to retrieve sorted results. - for key, val := range results { + for key, val := range snapshot { fmt.Printf("%s was %d meteres tall", key, val.Height) } // [END order_by_child] @@ -347,11 +347,11 @@ func orderByNestedChild(ctx context.Context, client *db.Client) { // [START order_by_nested_child] ref := client.NewRef("dinosaurs") - var results map[string]Dinosaur - if err := ref.OrderByChild("dimensions/height").Get(ctx, &results); err != nil { + var snapshot map[string]Dinosaur + if err := ref.OrderByChild("dimensions/height").Get(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } - for key, val := range results { + for key, val := range snapshot { fmt.Printf("%s was %d meteres tall\n", key, val.Height) } // [END order_by_nested_child] @@ -361,11 +361,11 @@ func orderByKey(ctx context.Context, client *db.Client) { // [START order_by_key] ref := client.NewRef("dinosaurs") - var results []Dinosaur - if err := ref.OrderByKey().GetOrdered(ctx, &results); err != nil { + var snapshot []Dinosaur + if err := ref.OrderByKey().GetOrdered(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } - fmt.Println(results) + fmt.Println(snapshot) // [END order_by_key] } @@ -373,11 +373,11 @@ func orderByValue(ctx context.Context, client *db.Client) { // [START order_by_value] ref := client.NewRef("scores") - var results map[string]int - if err := ref.OrderByKey().Get(ctx, &results); err != nil { + var snapshot map[string]int + if err := ref.OrderByKey().Get(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } - for key, val := range results { + for key, val := range snapshot { fmt.Printf("The %s dinosaur's score is %d\n", key, val) } // [END order_by_value] @@ -387,11 +387,11 @@ func limitToLast(ctx context.Context, client *db.Client) { // [START limit_query_1] ref := client.NewRef("dinosaurs") - var results map[string]Dinosaur - if err := ref.OrderByChild("weight").LimitToLast(2).Get(ctx, &results); err != nil { + var snapshot map[string]Dinosaur + if err := ref.OrderByChild("weight").LimitToLast(2).Get(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range results { + for key := range snapshot { fmt.Println(key) } // [END limit_query_1] @@ -401,11 +401,11 @@ func limitToFirst(ctx context.Context, client *db.Client) { // [START limit_query_2] ref := client.NewRef("dinosaurs") - var results map[string]Dinosaur - if err := ref.OrderByChild("height").LimitToFirst(2).Get(ctx, &results); err != nil { + var snapshot map[string]Dinosaur + if err := ref.OrderByChild("height").LimitToFirst(2).Get(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range results { + for key := range snapshot { fmt.Println(key) } // [END limit_query_2] @@ -415,11 +415,11 @@ func limitWithValueOrder(ctx context.Context, client *db.Client) { // [START limit_query_3] ref := client.NewRef("scores") - var results map[string]Dinosaur - if err := ref.OrderByValue().LimitToLast(3).Get(ctx, &results); err != nil { + var snapshot map[string]Dinosaur + if err := ref.OrderByValue().LimitToLast(3).Get(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } - for key, val := range results { + for key, val := range snapshot { fmt.Printf("The %s dinosaur's score is %d\n", key, val) } // [END limit_query_3] @@ -429,11 +429,11 @@ func startAt(ctx context.Context, client *db.Client) { // [START range_query_1] ref := client.NewRef("dinosaurs") - var results map[string]Dinosaur - if err := ref.OrderByChild("height").StartAt(3).Get(ctx, &results); err != nil { + var snapshot map[string]Dinosaur + if err := ref.OrderByChild("height").StartAt(3).Get(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range results { + for key := range snapshot { fmt.Println(key) } // [END range_query_1] @@ -443,11 +443,11 @@ func endAt(ctx context.Context, client *db.Client) { // [START range_query_2] ref := client.NewRef("dinosaurs") - var results map[string]Dinosaur - if err := ref.OrderByKey().EndAt("pterodactyl").Get(ctx, &results); err != nil { + var snapshot map[string]Dinosaur + if err := ref.OrderByKey().EndAt("pterodactyl").Get(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range results { + for key := range snapshot { fmt.Println(key) } // [END range_query_2] @@ -457,11 +457,11 @@ func startAndEndAt(ctx context.Context, client *db.Client) { // [START range_query_3] ref := client.NewRef("dinosaurs") - var results map[string]Dinosaur - if err := ref.OrderByKey().StartAt("b").EndAt("b\uf8ff").Get(ctx, &results); err != nil { + var snapshot map[string]Dinosaur + if err := ref.OrderByKey().StartAt("b").EndAt("b\uf8ff").Get(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range results { + for key := range snapshot { fmt.Println(key) } // [END range_query_3] @@ -471,11 +471,11 @@ func equalTo(ctx context.Context, client *db.Client) { // [START range_query_4] ref := client.NewRef("dinosaurs") - var results map[string]Dinosaur - if err := ref.OrderByChild("height").EqualTo(25).Get(ctx, &results); err != nil { + var snapshot map[string]Dinosaur + if err := ref.OrderByChild("height").EqualTo(25).Get(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range results { + for key := range snapshot { fmt.Println(key) } // [END range_query_4] From f98b5f322e913c1c1826092a4bc358779cd4d75d Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Fri, 23 Feb 2018 11:30:40 -0800 Subject: [PATCH 5/9] Fixing a typo --- snippets/db.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/db.go b/snippets/db.go index cc422ec3..dd040cfd 100644 --- a/snippets/db.go +++ b/snippets/db.go @@ -239,7 +239,7 @@ func pushValue(ctx context.Context, ref *db.Ref) { } if err := newPostRef.Set(ctx, &Post{ - Author: "gracehope", + Author: "gracehop", Title: "Announcing COBOL, a New Programming Language", }); err != nil { log.Fatalln("Error setting value: %v", err) From 1a0c8c8c3c733a441d589c4d6b19167759552fd4 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Fri, 23 Feb 2018 14:04:39 -0800 Subject: [PATCH 6/9] Fixing query example --- snippets/db.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/db.go b/snippets/db.go index dd040cfd..cbca5a58 100644 --- a/snippets/db.go +++ b/snippets/db.go @@ -374,7 +374,7 @@ func orderByValue(ctx context.Context, client *db.Client) { ref := client.NewRef("scores") var snapshot map[string]int - if err := ref.OrderByKey().Get(ctx, &snapshot); err != nil { + if err := ref.OrderByValue().Get(ctx, &snapshot); err != nil { log.Fatalln("Error querying database: %v", err) } for key, val := range snapshot { From 3959938acb0ccba21f228b6d4cba70e1dbeeb766 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Tue, 27 Feb 2018 13:28:03 -0800 Subject: [PATCH 7/9] Updated DB snippets to use GetOrdered() --- snippets/db.go | 127 ++++++++++++++++++++++++++++--------------------- 1 file changed, 73 insertions(+), 54 deletions(-) diff --git a/snippets/db.go b/snippets/db.go index cbca5a58..96666a12 100644 --- a/snippets/db.go +++ b/snippets/db.go @@ -331,14 +331,16 @@ func orderByChild(ctx context.Context, client *db.Client) { // [START order_by_child] ref := client.NewRef("dinosaurs") - var snapshot map[string]Dinosaur - if err := ref.OrderByChild("height").Get(ctx, &snapshot); err != nil { + results, err := ref.OrderByChild("height").GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } - // Results obtained from Get() are not ordered. - // Use GetOrdered() to retrieve sorted results. - for key, val := range snapshot { - fmt.Printf("%s was %d meteres tall", key, val.Height) + for _, r := range results { + var d Dinosaur + if err := r.Unmarshal(&d); err != nil { + log.Fatalln("Error unmarshaling result: %v", err) + } + fmt.Printf("%s was %d meteres tall", r.Key(), d.Height) } // [END order_by_child] } @@ -347,12 +349,16 @@ func orderByNestedChild(ctx context.Context, client *db.Client) { // [START order_by_nested_child] ref := client.NewRef("dinosaurs") - var snapshot map[string]Dinosaur - if err := ref.OrderByChild("dimensions/height").Get(ctx, &snapshot); err != nil { + results, err := ref.OrderByChild("dimensions/height").GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } - for key, val := range snapshot { - fmt.Printf("%s was %d meteres tall\n", key, val.Height) + for _, r := range results { + var d Dinosaur + if err := r.Unmarshal(&d); err != nil { + log.Fatalln("Error unmarshaling result: %v", err) + } + fmt.Printf("%s was %d meteres tall", r.Key(), d.Height) } // [END order_by_nested_child] } @@ -361,10 +367,18 @@ func orderByKey(ctx context.Context, client *db.Client) { // [START order_by_key] ref := client.NewRef("dinosaurs") - var snapshot []Dinosaur - if err := ref.OrderByKey().GetOrdered(ctx, &snapshot); err != nil { + results, err := ref.OrderByKey().GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } + snapshot := make([]Dinosaur, len(results)) + for i, r := range results { + var d Dinosaur + if err := r.Unmarshal(&d); err != nil { + log.Fatalln("Error unmarshaling result: %v", err) + } + snapshot[i] = d + } fmt.Println(snapshot) // [END order_by_key] } @@ -373,12 +387,16 @@ func orderByValue(ctx context.Context, client *db.Client) { // [START order_by_value] ref := client.NewRef("scores") - var snapshot map[string]int - if err := ref.OrderByValue().Get(ctx, &snapshot); err != nil { + results, err := ref.OrderByValue().GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } - for key, val := range snapshot { - fmt.Printf("The %s dinosaur's score is %d\n", key, val) + for _, r := range results { + var score int + if err := r.Unmarshal(&score); err != nil { + log.Fatalln("Error unmarshaling result: %v", err) + } + fmt.Printf("The %s dinosaur's score is %d\n", r.Key(), score) } // [END order_by_value] } @@ -387,12 +405,12 @@ func limitToLast(ctx context.Context, client *db.Client) { // [START limit_query_1] ref := client.NewRef("dinosaurs") - var snapshot map[string]Dinosaur - if err := ref.OrderByChild("weight").LimitToLast(2).Get(ctx, &snapshot); err != nil { + results, err := ref.OrderByChild("weight").LimitToLast(2).GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range snapshot { - fmt.Println(key) + for _, r := range results { + fmt.Println(r.Key()) } // [END limit_query_1] } @@ -401,12 +419,12 @@ func limitToFirst(ctx context.Context, client *db.Client) { // [START limit_query_2] ref := client.NewRef("dinosaurs") - var snapshot map[string]Dinosaur - if err := ref.OrderByChild("height").LimitToFirst(2).Get(ctx, &snapshot); err != nil { + results, err := ref.OrderByChild("height").LimitToFirst(2).GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range snapshot { - fmt.Println(key) + for _, r := range results { + fmt.Println(r.Key()) } // [END limit_query_2] } @@ -415,12 +433,16 @@ func limitWithValueOrder(ctx context.Context, client *db.Client) { // [START limit_query_3] ref := client.NewRef("scores") - var snapshot map[string]Dinosaur - if err := ref.OrderByValue().LimitToLast(3).Get(ctx, &snapshot); err != nil { + results, err := ref.OrderByValue().LimitToLast(3).GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } - for key, val := range snapshot { - fmt.Printf("The %s dinosaur's score is %d\n", key, val) + for _, r := range results { + var score int + if err := r.Unmarshal(&score); err != nil { + log.Fatalln("Error unmarshaling result: %v", err) + } + fmt.Printf("The %s dinosaur's score is %d\n", r.Key(), score) } // [END limit_query_3] } @@ -429,12 +451,12 @@ func startAt(ctx context.Context, client *db.Client) { // [START range_query_1] ref := client.NewRef("dinosaurs") - var snapshot map[string]Dinosaur - if err := ref.OrderByChild("height").StartAt(3).Get(ctx, &snapshot); err != nil { + results, err := ref.OrderByChild("height").StartAt(3).GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range snapshot { - fmt.Println(key) + for _, r := range results { + fmt.Println(r.Key()) } // [END range_query_1] } @@ -443,12 +465,12 @@ func endAt(ctx context.Context, client *db.Client) { // [START range_query_2] ref := client.NewRef("dinosaurs") - var snapshot map[string]Dinosaur - if err := ref.OrderByKey().EndAt("pterodactyl").Get(ctx, &snapshot); err != nil { + results, err := ref.OrderByKey().EndAt("pterodactyl").GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range snapshot { - fmt.Println(key) + for _, r := range results { + fmt.Println(r.Key()) } // [END range_query_2] } @@ -457,12 +479,12 @@ func startAndEndAt(ctx context.Context, client *db.Client) { // [START range_query_3] ref := client.NewRef("dinosaurs") - var snapshot map[string]Dinosaur - if err := ref.OrderByKey().StartAt("b").EndAt("b\uf8ff").Get(ctx, &snapshot); err != nil { + results, err := ref.OrderByKey().StartAt("b").EndAt("b\uf8ff").GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range snapshot { - fmt.Println(key) + for _, r := range results { + fmt.Println(r.Key()) } // [END range_query_3] } @@ -471,12 +493,12 @@ func equalTo(ctx context.Context, client *db.Client) { // [START range_query_4] ref := client.NewRef("dinosaurs") - var snapshot map[string]Dinosaur - if err := ref.OrderByChild("height").EqualTo(25).Get(ctx, &snapshot); err != nil { + results, err := ref.OrderByChild("height").EqualTo(25).GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } - for key := range snapshot { - fmt.Println(key) + for _, r := range results { + fmt.Println(r.Key()) } // [END range_query_4] } @@ -489,19 +511,16 @@ func complexQuery(ctx context.Context, client *db.Client) { if err := ref.Child("stegosaurus").Child("height").Get(ctx, &favDinoHeight); err != nil { log.Fatalln("Error querying database: %v", err) } + query := ref.OrderByChild("height").EndAt(favDinoHeight).LimitToLast(2) - var snapshot map[string]Dinosaur - if err := query.Get(ctx, &snapshot); err != nil { + results, err := query.GetOrdered(ctx) + if err != nil { log.Fatalln("Error querying database: %v", err) } - if len(snapshot) == 2 { - for key := range snapshot { - // Data read by Get() are not ordered. So we check for the keys. - if key != "stegosaurus" { - fmt.Printf("The dinosaur just shorter than the stegosaurus is %s", key) - return - } - } + if len(results) == 2 { + // Data is ordered by increasing height, so we want the first entry. + // Second entry is stegosarus. + fmt.Printf("The dinosaur just shorter than the stegosaurus is %s\n", results[0].Key()) } else { fmt.Println("The stegosaurus is the shortest dino") } From db546f2c15313399b34520b52da8e87fd13f4424 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Tue, 27 Feb 2018 13:45:27 -0800 Subject: [PATCH 8/9] Removing unnecessary placeholders in Fatalln() calls --- snippets/db.go | 84 +++++++++++++++++++++++++------------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/snippets/db.go b/snippets/db.go index 96666a12..8e0bea71 100644 --- a/snippets/db.go +++ b/snippets/db.go @@ -40,19 +40,19 @@ func authenticateWithAdminPrivileges() { // Initialize the app with a service account, granting admin privileges app, err := firebase.NewApp(ctx, conf, opt) if err != nil { - log.Fatalln("Error initializing app: %v", err) + log.Fatalln("Error initializing app:", err) } client, err := app.Database(ctx) if err != nil { - log.Fatalln("Error initializing database client: %v", err) + log.Fatalln("Error initializing database client:", err) } // As an admin, the app has access to read and write all data, regradless of Security Rules ref := client.NewRef("restricted_access/secret_document") var data map[string]interface{} if err := ref.Get(ctx, &data); err != nil { - log.Fatalln("Error reading from database: %v", err) + log.Fatalln("Error reading from database:", err) } fmt.Println(data) // [END authenticate_with_admin_privileges] @@ -73,19 +73,19 @@ func authenticateWithLimitedPrivileges() { app, err := firebase.NewApp(ctx, conf, opt) if err != nil { - log.Fatalln("Error initializing app: %v", err) + log.Fatalln("Error initializing app:", err) } client, err := app.Database(ctx) if err != nil { - log.Fatalln("Error initializing database client: %v", err) + log.Fatalln("Error initializing database client:", err) } // The app only has access as defined in the Security Rules ref := client.NewRef("/some_resource") var data map[string]interface{} if err := ref.Get(ctx, &data); err != nil { - log.Fatalln("Error reading from database: %v", err) + log.Fatalln("Error reading from database:", err) } fmt.Println(data) // [END authenticate_with_limited_privileges] @@ -106,19 +106,19 @@ func authenticateWithGuestPrivileges() { app, err := firebase.NewApp(ctx, conf, opt) if err != nil { - log.Fatalln("Error initializing app: %v", err) + log.Fatalln("Error initializing app:", err) } client, err := app.Database(ctx) if err != nil { - log.Fatalln("Error initializing database client: %v", err) + log.Fatalln("Error initializing database client:", err) } // The app only has access to public data as defined in the Security Rules ref := client.NewRef("/some_resource") var data map[string]interface{} if err := ref.Get(ctx, &data); err != nil { - log.Fatalln("Error reading from database: %v", err) + log.Fatalln("Error reading from database:", err) } fmt.Println(data) // [END authenticate_with_guest_privileges] @@ -129,7 +129,7 @@ func getReference(ctx context.Context, app *firebase.App) { // Create a database client from App. client, err := app.Database(ctx) if err != nil { - log.Fatalln("Error initializing database client: %v", err) + log.Fatalln("Error initializing database client:", err) } // Get a database reference to our blog. @@ -163,7 +163,7 @@ func setValue(ctx context.Context, ref *db.Ref) { }, }) if err != nil { - log.Fatalln("Error setting value: %v", err) + log.Fatalln("Error setting value:", err) } // [END set_value] } @@ -174,14 +174,14 @@ func setChildValue(ctx context.Context, usersRef *db.Ref) { DateOfBirth: "June 23, 1912", FullName: "Alan Turing", }); err != nil { - log.Fatalln("Error setting value: %v", err) + log.Fatalln("Error setting value:", err) } if err := usersRef.Child("gracehop").Set(ctx, &User{ DateOfBirth: "December 9, 1906", FullName: "Grace Hopper", }); err != nil { - log.Fatalln("Error setting value: %v", err) + log.Fatalln("Error setting value:", err) } // [END set_child_value] } @@ -192,7 +192,7 @@ func updateChild(ctx context.Context, usersRef *db.Ref) { if err := hopperRef.Update(ctx, map[string]interface{}{ "nickname": "Amazing Grace", }); err != nil { - log.Fatalln("Error updating child: %v", err) + log.Fatalln("Error updating child:", err) } // [END update_child] } @@ -203,7 +203,7 @@ func updateChildren(ctx context.Context, usersRef *db.Ref) { "alanisawesome/nickname": "Alan The Machine", "gracehop/nickname": "Amazing Grace", }); err != nil { - log.Fatalln("Error updating children: %v", err) + log.Fatalln("Error updating children:", err) } // [END update_children] } @@ -214,7 +214,7 @@ func overwriteValue(ctx context.Context, usersRef *db.Ref) { "alanisawesome": &User{Nickname: "Alan The Machine"}, "gracehop": &User{Nickname: "Amazing Grace"}, }); err != nil { - log.Fatalln("Error updating children: %v", err) + log.Fatalln("Error updating children:", err) } // [END overwrite_value] } @@ -235,14 +235,14 @@ func pushValue(ctx context.Context, ref *db.Ref) { newPostRef, err := postsRef.Push(ctx, nil) if err != nil { - log.Fatalln("Error pushing child node: %v", err) + log.Fatalln("Error pushing child node:", err) } if err := newPostRef.Set(ctx, &Post{ Author: "gracehop", Title: "Announcing COBOL, a New Programming Language", }); err != nil { - log.Fatalln("Error setting value: %v", err) + log.Fatalln("Error setting value:", err) } // We can also chain the two calls together @@ -250,7 +250,7 @@ func pushValue(ctx context.Context, ref *db.Ref) { Author: "alanisawesome", Title: "The Turing Machine", }); err != nil { - log.Fatalln("Error pushing child node: %v", err) + log.Fatalln("Error pushing child node:", err) } // [END push_value] } @@ -261,7 +261,7 @@ func pushAndSetValue(ctx context.Context, postsRef *db.Ref) { Author: "gracehop", Title: "Announcing COBOL, a New Programming Language", }); err != nil { - log.Fatalln("Error pushing child node: %v", err) + log.Fatalln("Error pushing child node:", err) } // [END push_and_set_value] } @@ -271,7 +271,7 @@ func pushKey(ctx context.Context, postsRef *db.Ref) { // Generate a reference to a new location and add some data using Push() newPostRef, err := postsRef.Push(ctx, nil) if err != nil { - log.Fatalln("Error pushing child node: %v", err) + log.Fatalln("Error pushing child node:", err) } // Get the unique key generated by Push() @@ -292,7 +292,7 @@ func transaction(ctx context.Context, client *db.Client) { ref := client.NewRef("server/saving-data/fireblog/posts/-JRHTHaIs-jNPLXOQivY/upvotes") if err := ref.Transaction(ctx, fn); err != nil { - log.Fatalln("Transaction failed to commit: %v", err) + log.Fatalln("Transaction failed to commit:", err) } // [END transaction] } @@ -302,7 +302,7 @@ func readValue(ctx context.Context, app *firebase.App) { // Create a database client from App. client, err := app.Database(ctx) if err != nil { - log.Fatalln("Error initializing database client: %v", err) + log.Fatalln("Error initializing database client:", err) } // Get a database reference to our posts @@ -311,7 +311,7 @@ func readValue(ctx context.Context, app *firebase.App) { // Read the data at the posts reference (this is a blocking operation) var post Post if err := ref.Get(ctx, &post); err != nil { - log.Fatalln("Error reading value: %v", err) + log.Fatalln("Error reading value:", err) } // [END read_value] fmt.Println(ref.Path) @@ -333,12 +333,12 @@ func orderByChild(ctx context.Context, client *db.Client) { results, err := ref.OrderByChild("height").GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } for _, r := range results { var d Dinosaur if err := r.Unmarshal(&d); err != nil { - log.Fatalln("Error unmarshaling result: %v", err) + log.Fatalln("Error unmarshaling result:", err) } fmt.Printf("%s was %d meteres tall", r.Key(), d.Height) } @@ -351,12 +351,12 @@ func orderByNestedChild(ctx context.Context, client *db.Client) { results, err := ref.OrderByChild("dimensions/height").GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } for _, r := range results { var d Dinosaur if err := r.Unmarshal(&d); err != nil { - log.Fatalln("Error unmarshaling result: %v", err) + log.Fatalln("Error unmarshaling result:", err) } fmt.Printf("%s was %d meteres tall", r.Key(), d.Height) } @@ -369,13 +369,13 @@ func orderByKey(ctx context.Context, client *db.Client) { results, err := ref.OrderByKey().GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } snapshot := make([]Dinosaur, len(results)) for i, r := range results { var d Dinosaur if err := r.Unmarshal(&d); err != nil { - log.Fatalln("Error unmarshaling result: %v", err) + log.Fatalln("Error unmarshaling result:", err) } snapshot[i] = d } @@ -389,12 +389,12 @@ func orderByValue(ctx context.Context, client *db.Client) { results, err := ref.OrderByValue().GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } for _, r := range results { var score int if err := r.Unmarshal(&score); err != nil { - log.Fatalln("Error unmarshaling result: %v", err) + log.Fatalln("Error unmarshaling result:", err) } fmt.Printf("The %s dinosaur's score is %d\n", r.Key(), score) } @@ -407,7 +407,7 @@ func limitToLast(ctx context.Context, client *db.Client) { results, err := ref.OrderByChild("weight").LimitToLast(2).GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } for _, r := range results { fmt.Println(r.Key()) @@ -421,7 +421,7 @@ func limitToFirst(ctx context.Context, client *db.Client) { results, err := ref.OrderByChild("height").LimitToFirst(2).GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } for _, r := range results { fmt.Println(r.Key()) @@ -435,12 +435,12 @@ func limitWithValueOrder(ctx context.Context, client *db.Client) { results, err := ref.OrderByValue().LimitToLast(3).GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } for _, r := range results { var score int if err := r.Unmarshal(&score); err != nil { - log.Fatalln("Error unmarshaling result: %v", err) + log.Fatalln("Error unmarshaling result:", err) } fmt.Printf("The %s dinosaur's score is %d\n", r.Key(), score) } @@ -453,7 +453,7 @@ func startAt(ctx context.Context, client *db.Client) { results, err := ref.OrderByChild("height").StartAt(3).GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } for _, r := range results { fmt.Println(r.Key()) @@ -467,7 +467,7 @@ func endAt(ctx context.Context, client *db.Client) { results, err := ref.OrderByKey().EndAt("pterodactyl").GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } for _, r := range results { fmt.Println(r.Key()) @@ -481,7 +481,7 @@ func startAndEndAt(ctx context.Context, client *db.Client) { results, err := ref.OrderByKey().StartAt("b").EndAt("b\uf8ff").GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } for _, r := range results { fmt.Println(r.Key()) @@ -495,7 +495,7 @@ func equalTo(ctx context.Context, client *db.Client) { results, err := ref.OrderByChild("height").EqualTo(25).GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } for _, r := range results { fmt.Println(r.Key()) @@ -509,13 +509,13 @@ func complexQuery(ctx context.Context, client *db.Client) { var favDinoHeight int if err := ref.Child("stegosaurus").Child("height").Get(ctx, &favDinoHeight); err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } query := ref.OrderByChild("height").EndAt(favDinoHeight).LimitToLast(2) results, err := query.GetOrdered(ctx) if err != nil { - log.Fatalln("Error querying database: %v", err) + log.Fatalln("Error querying database:", err) } if len(results) == 2 { // Data is ordered by increasing height, so we want the first entry. From 53d36ea8cbc339273119491ec473263595a78539 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Tue, 27 Feb 2018 13:47:57 -0800 Subject: [PATCH 9/9] Removing unnecessary placeholders in Fatalln() calls --- integration/db/db_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/db/db_test.go b/integration/db/db_test.go index 893ca180..0754d5bf 100644 --- a/integration/db/db_test.go +++ b/integration/db/db_test.go @@ -156,7 +156,7 @@ func initRules() { if err != nil { log.Fatalln(err) } else if resp.StatusCode != http.StatusOK { - log.Fatalln("failed to update rules: %q", string(b)) + log.Fatalln("failed to update rules:", string(b)) } }