func ExampleQuery() { ctx := context.Background() client, err := datastore.NewClient(ctx, "project-id") if err != nil { log.Fatal(err) } // Count the number of the post entities. q := datastore.NewQuery("Post") n, err := client.Count(ctx, q) if err != nil { log.Fatal(err) } log.Println("There are %d posts.", n) // List the posts published since yesterday. yesterday := time.Now().Add(-24 * time.Hour) q = datastore.NewQuery("Post").Filter("PublishedAt >", yesterday) it := client.Run(ctx, q) // Use the iterator. _ = it // Order the posts by the number of comments they have recieved. datastore.NewQuery("Post").Order("-Comments") // Start listing from an offset and limit the results. datastore.NewQuery("Post").Offset(20).Limit(10) }
// TODO(djd): reevaluate this example given new Client config. func Example_auth() *datastore.Client { // Initialize an authorized context with Google Developers Console // JSON key. Read the google package examples to learn more about // different authorization flows you can use. // http://godoc.org/golang.org/x/oauth2/google jsonKey, err := ioutil.ReadFile("/path/to/json/keyfile.json") if err != nil { log.Fatal(err) } conf, err := google.JWTConfigFromJSON( jsonKey, datastore.ScopeDatastore, datastore.ScopeUserEmail, ) if err != nil { log.Fatal(err) } ctx := context.Background() client, err := datastore.NewClient(ctx, "project-id", cloud.WithTokenSource(conf.TokenSource(ctx))) if err != nil { log.Fatal(err) } // Use the client (see other examples). return client }
func ExampleIterator_Cursor() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") cursorStr := "" // [START cursor_paging] const pageSize = 5 query := datastore.NewQuery("Tasks").Limit(pageSize) if cursorStr != "" { cursor, err := datastore.DecodeCursor(cursorStr) if err != nil { log.Fatalf("Bad cursor %q: %v", cursorStr, err) } query = query.Start(cursor) } // Read the tasks. var tasks []Task var task Task it := client.Run(ctx, query) _, err := it.Next(&task) for err == nil { tasks = append(tasks, task) _, err = it.Next(&task) } if err != datastore.Done { log.Fatalf("Failed fetching results: %v", err) } // Get the cursor for the next page of results. nextCursor, err := it.Cursor() // [END cursor_paging] _ = err // Check the error. _ = nextCursor // Use nextCursor.String as the next page's token. }
func ExampleClient_PutMulti() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") // [START batch_upsert] tasks := []*Task{ { Type: "Personal", Done: false, Priority: 4, Description: "Learn Cloud Datastore", }, { Type: "Personal", Done: false, Priority: 5, Description: "Integrate Cloud Datastore", }, } keys := []*datastore.Key{ datastore.NewIncompleteKey(ctx, "Task", nil), datastore.NewIncompleteKey(ctx, "Task", nil), } keys, err := client.PutMulti(ctx, keys, tasks) // [END batch_upsert] _ = err // Make sure you check err. _ = keys // keys now has the complete keys for the newly stored tasks. }
func Example_Transaction() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") var to, from *datastore.Key // [START transactional_update] type BankAccount struct { Balance int } const amount = 50 keys := []*datastore.Key{to, from} tx, err := client.NewTransaction(ctx) if err != nil { log.Fatalf("client.NewTransaction: %v", err) } accs := make([]BankAccount, 2) if err := tx.GetMulti(keys, accs); err != nil { tx.Rollback() log.Fatalf("tx.GetMulti: %v", err) } accs[0].Balance += amount accs[1].Balance -= amount if _, err := tx.PutMulti(keys, accs); err != nil { tx.Rollback() log.Fatalf("tx.PutMulti: %v", err) } if _, err = tx.Commit(); err != nil { log.Fatalf("tx.Commit: %v", err) } // [END transactional_update] }
func ExamplePut() { ctx := context.Background() client, err := datastore.NewClient(ctx, "project-id") if err != nil { log.Fatal(err) } type Article struct { Title string Description string Body string `datastore:",noindex"` Author *datastore.Key PublishedAt time.Time } newKey := datastore.NewIncompleteKey(ctx, "Article", nil) _, err = client.Put(ctx, newKey, &Article{ Title: "The title of the article", Description: "The description of the article...", Body: "...", Author: datastore.NewKey(ctx, "Author", "jbd", 0, nil), PublishedAt: time.Now(), }) if err != nil { log.Fatal(err) } }
func GetDatastore(ctx context.Context) *datastore.Client { client, err := datastore.NewClient(ctx, PROEJCT_ID) if err != nil { log.Fatalf("Failed to create datastore client: %v", client) } return client }
func configureDatastoreDB(projectID string) (BookDatabase, error) { ctx := context.Background() client, err := datastore.NewClient(ctx, projectID) if err != nil { return nil, err } return newDatastoreDB(client) }
func ExampleClient_Delete() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") key := datastore.NewKey(ctx, "Task", "sampletask", 0, nil) // [START delete] err := client.Delete(ctx, key) // [END delete] _ = err // Make sure you check err. }
func ExampleClient_DeleteMulti() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") var taskKeys []*datastore.Key // Populated with incomplete keys. // [START batch_delete] err := client.DeleteMulti(ctx, taskKeys) // [END batch_delete] _ = err // Make sure you check err. }
func ExampleClient_Get() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") taskKey := datastore.NewKey(ctx, "Task", "sampleTask", 0, nil) // [START lookup] var task Task err := client.Get(ctx, taskKey, &task) // [END lookup] _ = err // Make sure you check err. }
func (cred *ServerCred) AuthDatastore(ctx context.Context) (*datastore.Client, error) { ctx = TraceStart(ctx, "/frontend._.AuthDatastore") defer TraceEnd(ctx, cred) client, err := datastore.NewClient( ctx, ProjectId, cloud.WithTokenSource(cred.cred.TokenSource(ctx))) if err != nil { return nil, err } return client, nil }
func ExampleClient_Put_upsert() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") task := &Task{} // Populated with appropriate data. key := datastore.NewIncompleteKey(ctx, "Task", nil) // [START upsert] key, err := client.Put(ctx, key, task) // [END upsert] _ = err // Make sure you check err. _ = key // key is the complete key for the newly stored task }
func TestMain(m *testing.M) { ctx := context.Background() if tc, ok := testutil.ContextMain(m); ok { var err error client, err = datastore.NewClient(ctx, tc.ProjectID) if err != nil { log.Fatalf("datastore.NewClient: %v", err) } defer client.Close() } os.Exit(m.Run()) }
func ExampleDelete() { ctx := context.Background() client, err := datastore.NewClient(ctx, "project-id") if err != nil { log.Fatal(err) } key := datastore.NewKey(ctx, "Article", "articled1", 0, nil) if err := client.Delete(ctx, key); err != nil { log.Fatal(err) } }
func ExampleQuery_KeysOnly() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") // [START keys_only_query] query := datastore.NewQuery("Task").KeysOnly() // [END keys_only_query] // [START run_keys_only_query] keys, err := client.GetAll(ctx, query, nil) // [END run_keys_only_query] _ = err // Make sure you check err. _ = keys // Keys contains keys for all stored tasks. }
// NewClient creates a new Client for the given project, using bucket for // GCS storage. func NewClient(ctx context.Context, projectID string, bucket string) (*Client, error) { d, err := datastore.NewClient(ctx, projectID) if err != nil { return nil, err } return &Client{ ctx: ctx, bucket: bucket, datastore: d, }, nil }
func main() { ctx := context.Background() // Set this in app.yaml when running in production. projectID := os.Getenv("GCLOUD_DATASET_ID") var err error datastoreClient, err = datastore.NewClient(ctx, projectID) if err != nil { log.Fatal(err) } http.HandleFunc("/", handle) appengine.Main() }
func Example_metadataKinds() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") // [START kind_run_query] query := datastore.NewQuery("__kind__").KeysOnly() keys, err := client.GetAll(ctx, query, nil) if err != nil { log.Fatalf("client.GetAll: %v", err) } kinds := make([]string, 0, len(keys)) for _, k := range keys { kinds = append(kinds, k.Name()) } // [END kind_run_query] }
func (ds *Datastore) GetEntity(subject string) (reply []x.Instruction, rerr error) { skey := datastore.NewKey(ds.ctx, ds.tablePrefix+"Entity", subject, 0, nil) log.Infof("skey: %+v", skey) client, err := datastore.NewClient(ds.ctx, ds.projectId) if err != nil { x.LogErr(log, err).Error("While creating client") return reply, err } var dkeys []*datastore.Key q := datastore.NewQuery(ds.tablePrefix + "Instruction").Ancestor(skey) dkeys, rerr = client.GetAll(ds.ctx, q, &reply) log.Debugf("Got num keys: %+v", len(dkeys)) return }
func TestDatastoreDB(t *testing.T) { tc := testutil.SystemTest(t) ctx := context.Background() client, err := datastore.NewClient(ctx, tc.ProjectID) if err != nil { t.Fatal(err) } defer client.Close() db, err := newDatastoreDB(client) if err != nil { t.Fatal(err) } testDB(t, db) }
func Example_metadataPropertiesForKind() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") // [START property_by_kind_run_query] kindKey := datastore.NewKey(ctx, "__kind__", "Task", 0, nil) query := datastore.NewQuery("__property__").Ancestor(kindKey) type Prop struct { Repr []string `datastore:"property_representation"` } var props []Prop keys, err := client.GetAll(ctx, query, &props) // [END property_by_kind_run_query] _ = err // Check error. _ = keys // Use keys to find property names, and props for their representations. }
func ExampleTransaction_runQuery() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") // [START transactional_single_entity_group_read_only] tx, err := client.NewTransaction(ctx) if err != nil { log.Fatalf("client.NewTransaction: %v", err) } defer tx.Rollback() // Transaction only used for read. ancestor := datastore.NewKey(ctx, "TaskList", "default", 0, nil) query := datastore.NewQuery("Task").Ancestor(ancestor).Transaction(tx) var tasks []Task _, err = client.GetAll(ctx, query, &tasks) // [END transactional_single_entity_group_read_only] _ = err // Check error. }
func ExampleGetMulti() { ctx := context.Background() client, err := datastore.NewClient(ctx, "project-id") if err != nil { log.Fatal(err) } keys := []*datastore.Key{ datastore.NewKey(ctx, "Post", "post1", 0, nil), datastore.NewKey(ctx, "Post", "post2", 0, nil), datastore.NewKey(ctx, "Post", "post3", 0, nil), } posts := make([]Post, 3) if err := client.GetMulti(ctx, keys, posts); err != nil { log.Println(err) } }
func (ds *Datastore) Commit(its []*x.Instruction) error { var keys []*datastore.Key for _, i := range its { dkey := ds.getIKey(*i) keys = append(keys, dkey) } client, err := datastore.NewClient(ds.ctx, ds.projectId) if err != nil { x.LogErr(log, err).Error("While creating new client") return err } if _, err := client.PutMulti(ds.ctx, keys, its); err != nil { x.LogErr(log, err).Error("While committing instructions") return err } log.Debugf("%d Instructions committed", len(its)) return nil }
func Example_metadataProperties() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") // [START property_run_query] query := datastore.NewQuery("__property__").KeysOnly() keys, err := client.GetAll(ctx, query, nil) if err != nil { log.Fatalf("client.GetAll: %v", err) } props := make(map[string][]string) // Map from kind to slice of properties. for _, k := range keys { prop := k.Name() kind := k.Parent().Name() props[kind] = append(props[kind], prop) } // [END property_run_query] }
func (ds *Datastore) IsNew(id string) bool { dkey := datastore.NewKey(ds.ctx, ds.tablePrefix+"Entity", id, 0, nil) client, err := datastore.NewClient(ds.ctx, ds.projectId) if err != nil { x.LogErr(log, err).Error("While creating client") return false } q := datastore.NewQuery(ds.tablePrefix + "Instruction").Ancestor(dkey). Limit(1).KeysOnly() keys, err := client.GetAll(ds.ctx, q, nil) if err != nil { x.LogErr(log, err).Error("While GetAll") return false } if len(keys) > 0 { return false } return true }
func ExampleClient_Put() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") // [START entity_with_parent] parentKey := datastore.NewKey(ctx, "TaskList", "default", 0, nil) key := datastore.NewIncompleteKey(ctx, "Task", parentKey) task := Task{ Type: "Personal", Done: false, Priority: 4, Description: "Learn Cloud Datastore", } // A complete key is assigned to the entity when it is Put. var err error key, err = client.Put(ctx, key, &task) // [END entity_with_parent] _ = err // Make sure you check err. }
func ExampleGet() { ctx := context.Background() client, err := datastore.NewClient(ctx, "project-id") if err != nil { log.Fatal(err) } type Article struct { Title string Description string Body string `datastore:",noindex"` Author *datastore.Key PublishedAt time.Time } key := datastore.NewKey(ctx, "Article", "articled1", 0, nil) article := &Article{} if err := client.Get(ctx, key, article); err != nil { log.Fatal(err) } }
func ExampleTransaction_getOrCreate() { ctx := context.Background() client, _ := datastore.NewClient(ctx, "my-proj") key := datastore.NewKey(ctx, "Task", "sampletask", 0, nil) // [START transactional_get_or_create] _, err := client.RunInTransaction(ctx, func(tx *datastore.Transaction) error { var task Task if err := tx.Get(key, &task); err != datastore.ErrNoSuchEntity { return err } _, err := tx.Put(key, &Task{ Type: "Personal", Done: false, Priority: 4, Description: "Learn Cloud Datastore", }) return err }) // [END transactional_get_or_create] _ = err // Check error. }