Skip to content
Ayush Agrawal edited this page Jun 27, 2015 · 16 revisions

package main

import (
    "encoding/json"
    "fmt"

    r "github.com/dancannon/gorethink"
)

var session *r.Session

// Struct tags are used to map struct fields to fields in the database
type Person struct {
    Id    string `gorethink:"id,omitempty"`
    Name  string `gorethink:"name"`
    Place string `gorethink:"place"`
}

func init() {
    var err error
    session, err = r.Connect(r.ConnectOpts{
        Address:  "localhost:28015",
        Database: "test",
    })
    if err != nil {
        fmt.Println(err)
        return
    }
}

func main() {
    // Create a table
    createTable()

    // Insert a record
    id := insertRecord()

    if id != "" {
        // Update a record
        updateRecord(id)
    }

    // Fetch one
    fetchOneRecord()

    // Record count
    recordCount()

    // Fetch all
    fetchAllRecords()

    if id != "" {
        // Delete a record
        deleteRecord(id)
    }
}

func createTable() {
    result, err := r.DB("test").TableCreate("people").RunWrite(session)
    if err != nil {
        fmt.Println(err)
    }

    printStr("*** Create table result: ***")
    printObj(result)
    printStr("\n")
}

func insertRecord() string {
    var data = map[string]interface{}{
        "Name":  "David Davidson",
        "Place": "Somewhere",
    }

    result, err := r.Table("people").Insert(data).RunWrite(session)
    if err != nil {
        fmt.Println(err)
        return ""
    }

    printStr("*** Insert result: ***")
    printObj(result)
    printStr("\n")

    return result.GeneratedKeys[0]
}

func updateRecord(id string) {
    var data = map[string]interface{}{
        "Name":  "Steve Stevenson",
        "Place": "Anywhere",
    }

    result, err := r.Table("people").Get(id).Update(data).RunWrite(session)
    if err != nil {
        fmt.Println(err)
        return
    }

    printStr("*** Update result: ***")
    printObj(result)
    printStr("\n")
}

func fetchOneRecord() {
    cursor, err := r.Table("people").Run(session)
    if err != nil {
        fmt.Println(err)
        return
    }

    var person interface{}
    cursor.One(&person)
    cursor.Close()

    printStr("*** Fetch one record: ***")
    printObj(person)
    printStr("\n")
}

func recordCount() {
    cursor, err := r.Table("people").Count().Run(session)
    if err != nil {
        fmt.Println(err)
        return
    }

    var cnt int
    cursor.One(&cnt)
    cursor.Close()

    printStr("*** Count: ***")
    printObj(cnt)
    printStr("\n")
}

func fetchAllRecords() {
    rows, err := r.Table("people").Run(session)
    if err != nil {
        fmt.Println(err)
        return
    }

    // Read records into persons slice
    var persons []Person
    err2 := rows.All(&persons)
    if err2 != nil {
        fmt.Println(err2)
        return
    }

    printStr("*** Fetch all rows: ***")
    for _, p := range persons {
        printObj(p)
    }
    printStr("\n")
}

func deleteRecord(id string) {
    result, err := r.Table("people").Get(id).Delete().Run(session)
    if err != nil {
        fmt.Println(err)
        return
    }

    printStr("*** Delete result: ***")
    printObj(result)
    printStr("\n")
}

func printStr(v string) {
    fmt.Println(v)
}
func printObj(v interface{}) {
    vBytes, _ := json.Marshal(v)
    fmt.Println(string(vBytes))
}
Clone this wiki locally