-
Notifications
You must be signed in to change notification settings - Fork 1
/
apptable.go
89 lines (87 loc) · 1.7 KB
/
apptable.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package main
import (
"cloud.google.com/go/datastore"
"context"
"fmt"
"os"
"time"
)
type Key=*datastore.Key
func NewClient() (*datastore.Client, context.Context) {
ctx := context.Background()
c, e := datastore.NewClient(ctx, os.Getenv("PROJECT_ID"))
if e != nil {
panic(e)
}
return c, ctx
}
func NewQuery(kind string) *datastore.Query {
return datastore.NewQuery(kind)
}
func NewKey(kind string) Key {
return datastore.IncompleteKey(kind, nil)
}
func NewNameKey(kind,name string) Key{
return datastore.NameKey(kind,name,nil)
}
func TablePut(k *datastore.Key, v interface{}) Key {
if c, x := NewClient(); c != nil {
defer c.Close()
if k, err := c.Put(x, k, v); err != nil {
panic(err)
} else {
return k
}
}
return nil
}
func TableGet(k *datastore.Key, v interface{}) Key {
if c, x := NewClient(); c != nil {
defer c.Close()
if err := c.Get(x, k, v); err != nil {
panic(err)
} else {
return k
}
}
return nil
}
func TableGetAll(q *datastore.Query, v interface{}) []Key {
if c, x := NewClient(); c != nil {
defer c.Close()
if keys, err := c.GetAll(x, q, v); err != nil {
panic(err)
} else {
return keys
}
}
return nil
}
func TableCount(q *datastore.Query) int {
if c, x := NewClient(); c != nil {
defer c.Close()
if n, err := c.Count(x, q); err != nil {
panic(err)
} else {
return n
}
}
return -1
}
func TableDemo() {
type ExampleEntity struct {
Self *datastore.Key `datastore:"__key__"`
Born time.Time
Age int
}
e := ExampleEntity{
Born: time.Now(),
Age: 24,
}
k := TablePut(NewKey("EXAMPLE"), &e)
m := ExampleEntity{}
TableGet(k, &m)
ms := []ExampleEntity{}
TableGetAll(NewQuery("EXAMPLE").Order("-Born").Limit(3), &ms)
fmt.Println(m)
}