本文整理汇总了Golang中google/golang.org/appengine/datastore.PutMulti函数的典型用法代码示例。如果您正苦于以下问题:Golang PutMulti函数的具体用法?Golang PutMulti怎么用?Golang PutMulti使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PutMulti函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TestIndexAuthors
// Should return users that are level 3 or above
func TestIndexAuthors(t *testing.T) {
ctx, done, err := aetest.NewContext()
if err != nil {
t.Fatal(err)
}
defer done()
key := []*datastore.Key{
datastore.NewKey(ctx, "User", "dranton", 0, nil),
datastore.NewKey(ctx, "User", "testertim", 0, nil),
datastore.NewKey(ctx, "User", "rookierook", 0, nil),
}
seededUsers := []*models.User{
&models.User{FirstName: "Anton", Level: 5},
&models.User{FirstName: "Tim", Level: 3},
&models.User{FirstName: "Rookie", Level: 1},
}
if _, err := datastore.PutMulti(ctx, key, seededUsers); err != nil {
t.Fatal(err)
}
time.Sleep(300 * time.Millisecond)
var authors []models.User
authors, err = repositories.GetUsersAboveLevel(ctx, 3)
if err != nil {
t.Errorf("Error: %v", err)
}
if len(authors) != 2 {
t.Errorf("Got %d authors, want %d", len(authors), 2)
}
if authors[0].Username != "testertim" {
t.Errorf("Got username %d, want %d", authors[1].Username, "testertim")
}
}
示例2: writeLinkTweet
//WriteLinkTweet writes a given Tweet to the datastore
func (mb MapBuilder) writeLinkTweet(tweets <-chan anaconda.Tweet, wg *sync.WaitGroup) {
defer wg.Done()
var keys []*datastore.Key
var values []*int64
for tweet := range tweets {
key := datastore.NewIncompleteKey(mb.c, linkTweetKind, getTweetKey(mb.c))
keys = append(keys, key)
values = append(values, &tweet.Id)
}
err := datastore.RunInTransaction(mb.c, func(c context.Context) error {
_, err := datastore.PutMulti(c, keys, values)
if err != nil {
log.Errorf(c, "Failed to write LinkTweet to datastore. %v", err.Error())
return err
}
return nil
}, nil)
if err != nil {
log.Errorf(mb.c, "Failed to write LinkTweet to datastore. %v", err.Error())
}
}
示例3: resaveAllIdiomHistory
// 2015-11-06 to force field EditSummary (even if empty) on every IdiomHistory persisted entity.
func resaveAllIdiomHistory(c context.Context) error {
defer memcache.Flush(c)
saved := 0
keys, err := datastore.NewQuery("IdiomHistory").KeysOnly().GetAll(c, nil)
if err != nil {
return err
}
nbEntities := len(keys)
defer func() {
log.Infof(c, "Resaved %d IdiomHistory entities out of %d.", saved, nbEntities)
}()
for len(keys) > 0 {
bunch := 100
if len(keys) < bunch {
bunch = len(keys)
}
histories := make([]*IdiomHistory, bunch)
err := datastore.GetMulti(c, keys[:bunch], histories)
if err != nil {
return err
}
_, err = datastore.PutMulti(c, keys[:bunch], histories)
if err != nil {
return err
}
saved += bunch
// Remove processed keys
keys = keys[bunch:]
}
return nil
}
示例4: PutMulti
// PutMulti wraps datastore.PutMulti
func (d *Driver) PutMulti(key []*datastore.Key, src interface{}) ([]*datastore.Key, error) {
var keyLen = len(key)
var fromIdx, toIdx int
var v = reflect.ValueOf(src)
var resultKeys = make([]*datastore.Key, 0)
// TODO: split multiple goroutine
for {
fromIdx = toIdx
toIdx = fromIdx + d.PutSplitThreshold
if toIdx > keyLen {
toIdx = keyLen
}
_keys := key[fromIdx:toIdx]
_data := v.Slice(fromIdx, toIdx).Interface()
d.logOps(opRead, len(_keys), "PutMulti")
updatedKeys, err := datastore.PutMulti(d.ctx, _keys, _data)
if err != nil {
return resultKeys, err
}
resultKeys = append(resultKeys, updatedKeys...)
if toIdx == keyLen {
break
}
}
return resultKeys, nil
}
示例5: savePostsToDB
func savePostsToDB(c context.Context, posts []reddit.Post, key string) error {
var keys []*datastore.Key
for _, element := range posts {
keys = append(keys, datastore.NewKey(c, key, element.Title, 0, getParentKey(c, key)))
}
_, err := datastore.PutMulti(c, keys, posts)
return err
}
示例6: adminAutoPay
func adminAutoPay(w http.ResponseWriter, r *http.Request) {
now := time.Now()
c := appengine.NewContext(r)
q := datastore.NewQuery("Task").
Filter("Disabled =", false).
Filter("Automatic = ", true).
Filter("Next < ", now)
tasks := []*Task{}
if err := fillKeyQuery(c, q, &tasks); err != nil {
log.Warningf(c, "Error finding automatic things: %v", err)
w.WriteHeader(500)
return
}
if len(tasks) == 0 {
log.Infof(c, "No automatic tasks.")
w.WriteHeader(204)
return
}
storeKeys := make([]*datastore.Key, 0, 2*len(tasks))
vals := []interface{}{}
for i := range tasks {
log.Infof(c, "Recording automatic task %q for %v at %s", tasks[i].Name,
tasks[i].Assignee, moneyFmt(tasks[i].Value))
su, err := getUserByEmail(c, tasks[i].Assignee)
if err != nil {
log.Warningf(c, "Failed to look up user %v: %v", tasks[i].Assignee, err)
w.WriteHeader(500)
return
}
tasks[i].updateTime()
tasks[i].Prev = now
storeKeys = append(storeKeys, tasks[i].Key)
vals = append(vals, tasks[i])
storeKeys = append(storeKeys,
datastore.NewIncompleteKey(c, "LoggedTask", nil))
vals = append(vals, &LoggedTask{
Task: tasks[i].Key,
User: su.Key,
Completed: now,
Who: su.Name,
Name: tasks[i].Name,
Amount: tasks[i].Value,
})
}
if _, err := datastore.PutMulti(c, storeKeys, vals); err != nil {
panic(err)
}
w.WriteHeader(204)
}
示例7: storeNextSessions
// storeNextSessions saves IDs of items under kindNext entity kind,
// keyed by "sessionID:eventSession.Update".
func storeNextSessions(c context.Context, items []*eventSession) error {
pkey := nextSessionParent(c)
keys := make([]*datastore.Key, len(items))
for i, s := range items {
id := s.ID + ":" + s.Update
keys[i] = datastore.NewKey(c, kindNext, id, 0, pkey)
}
zeros := make([]struct{}, len(keys))
_, err := datastore.PutMulti(c, keys, zeros)
return err
}
示例8: example
func example() {
// [START batch]
// A batch put.
_, err = datastore.PutMulti(ctx, []*datastore.Key{k1, k2, k3}, []interface{}{e1, e2, e3})
// A batch get.
var entities = make([]*T, 3)
err = datastore.GetMulti(ctx, []*datastore.Key{k1, k2, k3}, entities)
// A batch delete.
err = datastore.DeleteMulti(ctx, []*datastore.Key{k1, k2, k3})
// [END batch]
_ = err
}
示例9: PutMulti
func (d rdsImpl) PutMulti(keys []ds.Key, vals []ds.PropertyMap, cb ds.PutMultiCB) error {
rkeys := dsMF2R(keys)
rvals := make([]datastore.PropertyLoadSaver, len(vals))
for i, val := range vals {
rvals[i] = &typeFilter{val}
}
rkeys, err := datastore.PutMulti(d, rkeys, rvals)
return idxCallbacker(err, len(keys), func(idx int, err error) {
k := ds.Key(nil)
if err == nil {
k = dsR2F(rkeys[idx])
}
cb(k, err)
})
}
示例10: Load
// Load reads the JSON representation of entities from the io.Reader "r",
// and stores them in the Datastore using the given context.Context.
// The Options parameter allows you to configure how the dump will work.
// If there is any parsing erros, improper format, or datastore failures
// during the process, that error is returned and processing stops. The
// error may be returned after some entities were loaded: there is no
// parsing cache.
func Load(c context.Context, r io.Reader, o *Options) error {
entities, err := DecodeEntities(c, r)
if err != nil {
return err
}
if len(entities) == 0 {
log.Infof(c, "Skipping load of 0 entities")
return nil
}
batchSize := o.BatchSize
if batchSize <= 0 {
batchSize = 50
}
for start, end := 0, 0; start < len(entities); {
end += batchSize
if end > len(entities) {
end = len(entities)
}
keys := make([]*datastore.Key, 0, end-start)
values := make([]datastore.PropertyList, 0, cap(keys))
for _, e := range entities[start:end] {
keys = append(keys, e.Key)
values = append(values, e.Properties)
}
keys, err = datastore.PutMulti(c, keys, values)
if err != nil {
return err
}
log.Infof(c, "Loaded %d entities ...", len(keys))
if o.GetAfterPut {
log.Infof(c, "Making a read to force consistency ...")
l := make([]Entity, len(keys))
err := datastore.GetMulti(c, keys, l)
if err != nil {
return err
}
}
start = end
}
return nil
}
示例11: saveAppConfig
func (a *GaeDatastoreAccessor) saveAppConfig(c context.Context, appConfig ApplicationConfig) error {
keys := make([]*datastore.Key, len(appConfig.Toggles))
properties := make([]*AppConfigProperty, len(appConfig.Toggles))
i := 0
for name, value := range appConfig.Toggles {
prop := AppConfigProperty{
AppConfigId: 0, // TODO: meaningful appConfigId
Name: name,
Value: value,
}
keystr := fmt.Sprintf("%d_%s", prop.AppConfigId, prop.Name)
keys[i] = datastore.NewKey(c, "AppConfigProperty", keystr, 0, nil)
properties[i] = &prop
i++
}
_, err := datastore.PutMulti(c, keys, properties)
return err
}
示例12: adminMarkPaid
func adminMarkPaid(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
action := r.FormValue("action")
keys := make([]*datastore.Key, 0, len(r.Form["pay"]))
for _, s := range r.Form["pay"] {
k, err := datastore.DecodeKey(s)
if err != nil {
panic(err)
}
keys = append(keys, k)
}
if action == "Mark Paid" {
tasks := make([]LoggedTask, len(keys))
err := datastore.GetMulti(c, keys, tasks)
if err != nil {
panic(err)
}
now := time.Now().UTC()
for i := range tasks {
tasks[i].Paid = true
tasks[i].PaidTime = now
}
_, err = datastore.PutMulti(c, keys, tasks)
if err != nil {
panic(err)
}
} else if action == "Delete" {
err := datastore.DeleteMulti(c, keys)
if err != nil {
panic(err)
}
} else {
panic("Unhandled action: " + action)
}
http.Redirect(w, r, "/admin/", 303)
}
示例13: PutMultiTeams
func (c *DSContext) PutMultiTeams(teams []*Team) error {
keys := make([]*datastore.Key, len(teams))
for i, m := range teams {
if m.ID == 0 {
keys[i] = datastore.NewIncompleteKey(c, KindTeam, nil)
} else {
keys[i] = datastore.NewKey(c, KindTeam, "", m.ID, nil)
}
}
keys, err := datastore.PutMulti(c, keys, teams)
if err != nil {
return err
}
for i := range teams {
teams[i].ID = keys[i].IntID()
}
return nil
}
示例14: PutMultiLeagues
func (c *DSContext) PutMultiLeagues(leagues []*League) error {
keys := make([]*datastore.Key, len(leagues))
for i, m := range leagues {
if m.ID == 0 {
keys[i] = datastore.NewIncompleteKey(c, KindLeague, nil)
} else {
keys[i] = datastore.NewKey(c, KindLeague, "", m.ID, nil)
}
}
keys, err := datastore.PutMulti(c, keys, leagues)
if err != nil {
return err
}
for i := range leagues {
leagues[i].ID = keys[i].IntID()
}
return nil
}
示例15: PutMultiMatches
func (c *DSContext) PutMultiMatches(matches []*Match) error {
keys := make([]*datastore.Key, len(matches))
for i, m := range matches {
if m.ID == 0 {
keys[i] = datastore.NewIncompleteKey(c, KindMatch, nil)
} else {
keys[i] = datastore.NewKey(c, KindMatch, "", m.ID, nil)
}
}
keys, err := datastore.PutMulti(c, keys, matches)
if err != nil {
return err
}
for i := range matches {
matches[i].ID = keys[i].IntID()
}
return nil
}