/
database.go
54 lines (48 loc) · 1.18 KB
/
database.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
package main
import (
"log"
"sync"
"github.com/couchbaselabs/go-couchbase"
"github.com/dustin/gomemcached"
)
const (
db_ddoc_version_key = "/@ddocVersion"
db_ddoc_name = "forum"
)
var db_init_once sync.Once
func db_init() {
var ddocVersion uint64
err := Bucket.Get(db_ddoc_version_key, &ddocVersion)
if err != nil && !gomemcached.IsNotFound(err) {
log.Fatalf("fatal error getting ddoc version from database: %v", err)
}
if wanted := uint64(1); ddocVersion != wanted {
log.Printf("updating ddoc from version %d to %d", ddocVersion, wanted)
err = Bucket.PutDDoc(db_ddoc_name, couchbase.DDocJSON{
Views: map[string]couchbase.ViewDefinition{
"discussion-posts": {
Map: `function( doc, meta ) {
if ( doc.Type == "post" ) {
emit( doc.Discussion, null );
}
}`,
Reduce: `_count`,
},
"updated-discussions": {
Map: `function( doc, meta ) {
if ( doc.Type == "discussion" ) {
emit( dateToArray( doc.Modified ), null );
}
}`,
},
},
})
if err != nil {
log.Fatalf("fatal error storing ddoc: %v", err)
}
err = Bucket.Set(db_ddoc_version_key, 0, wanted)
if err != nil {
log.Fatalf("fatal error storing ddoc version: %v", err)
}
}
}