example

package
v0.0.0-alpha.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 30, 2018 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Example
dbc := NewDBContext(prepareDB())
dbc.DebugMode(true)

src := []*Blog{
	&Blog{
		BlogID: uuid.Must(uuid.FromString("d03bc237-eef4-4b6f-afe1-ea901357d828")),
		Name:   "testing1",
		Author: "kamichidu",
	},
	&Blog{
		BlogID: uuid.Must(uuid.FromString("b95e5d4d-7eb9-4612-882d-224daa4a59ee")),
		Name:   "testing2",
		Author: "kamichidu",
	},
	&Blog{
		BlogID: uuid.Must(uuid.FromString("22f931c8-ac87-4520-88e8-83fc0604b8f5")),
		Name:   "testing3",
		Author: "kamichidu",
	},
	&Blog{
		BlogID: uuid.Must(uuid.FromString("065c6554-9aff-4b42-ab3b-141ed5ef5624")),
		Name:   "testing4",
		Author: "kamichidu",
	},
}
for _, blog := range src {
	dbc.Blog.Insert(blog)
}
func(blog *Blog) {
	now, err := time.Parse(time.RFC3339, "2018-06-01T12:00:00Z")
	if err != nil {
		panic(err)
	}
	dbc.Post.Insert(&Post{
		BlogID:  blog.BlogID,
		Title:   "titleA",
		Content: "contentA",
		Timestamp: Timestamp{
			CreatedAt: now,
			UpdatedAt: now,
		},
	})
	dbc.Post.Insert(&Post{
		BlogID:  blog.BlogID,
		Title:   "titleB",
		Content: "contentB",
		Timestamp: Timestamp{
			CreatedAt: now,
			UpdatedAt: now,
		},
	})
}(src[0])
src[1].Author = "unknown"
dbc.Blog.Update(src[1])
dbc.Blog.Delete(src[2])
src[3].Name = "updating"
dbc.Blog.Update(src[3])
if err := dbc.SaveChanges(); err != nil {
	panic(err)
}

// counting all records
numBlogs, err := dbc.Blog.Select().Count()
if err != nil {
	panic(err)
}
fmt.Printf("all blogs = %d\n", numBlogs)

// querying with conditions
blogs, err := dbc.Blog.Select().
	Include(dbc.Blog.IncludePosts, dbc.Post.IncludeBlog).
	Where(dbc.Blog.Name.Like(`%testing%`)).
	OrderBy(dbc.Blog.Name.Asc()).
	Query()
if err != nil {
	panic(err)
}
fmt.Printf("found blogs = %d\n", len(blogs))
spew.Config.SortKeys = true
spew.Config.MaxDepth = 1
for _, blog := range blogs {
	spew.Printf("%#v\n", blog)

	for _, post := range blog.Posts {
		spew.Printf("- %#v\n", post)
		spew.Printf("  CreatedAt:%q\n", post.Timestamp.CreatedAt.Format(time.RFC3339))
		spew.Printf("  UpdatedAt:%q\n", post.Timestamp.UpdatedAt.Format(time.RFC3339))
	}
}
Output:

all blogs = 3
found blogs = 2
(*example.Blog){BlogID:(uuid.UUID)d03bc237-eef4-4b6f-afe1-ea901357d828 Name:(string)testing1 Author:(string)kamichidu Posts:([]*example.Post)[<max>]}
- (*example.Post){Timestamp:(example.Timestamp){<max>} BlogID:(uuid.UUID)d03bc237-eef4-4b6f-afe1-ea901357d828 PostID:(int)1 Title:(string)titleA Content:(string)contentA Blog:(*example.Blog){<max>}}
  CreatedAt:"2018-06-01T12:00:00Z"
  UpdatedAt:"2018-06-01T12:00:00Z"
- (*example.Post){Timestamp:(example.Timestamp){<max>} BlogID:(uuid.UUID)d03bc237-eef4-4b6f-afe1-ea901357d828 PostID:(int)2 Title:(string)titleB Content:(string)contentB Blog:(*example.Blog){<max>}}
  CreatedAt:"2018-06-01T12:00:00Z"
  UpdatedAt:"2018-06-01T12:00:00Z"
(*example.Blog){BlogID:(uuid.UUID)b95e5d4d-7eb9-4612-882d-224daa4a59ee Name:(string)testing2 Author:(string)unknown Posts:([]*example.Post)<nil>}
Example (Count)
dbc := NewDBContext(prepareDB())
dbc.DebugMode(true)

for i := 0; i < 11; i++ {
	dbc.Blog.Insert(&Blog{
		BlogID: uuid.Must(uuid.NewV4()),
		Name:   fmt.Sprintf("name-%d", i),
		Author: "kamichidu",
	})
}

dbc.Compiler = goen.BulkCompiler
if err := dbc.SaveChanges(); err != nil {
	panic(err)
}

// counting a record with conditions
count, err := dbc.Blog.Select().
	Where(dbc.Blog.Name.In([]string{
		`name-3`,
		`name-4`,
		`name-5`,
		`name-6`,
		`name-7`,
	})).
	Count()
if err != nil {
	panic(err)
}
fmt.Printf("count = %d\n", count)
Output:

count = 5
Example (GeneratedSchemaFields)
dbc := NewDBContext(dialectName, nil)

fmt.Printf("dbc.Blog.String() = %q\n", dbc.Blog.String())
fmt.Printf("dbc.Blog.BlogID = %q\n", dbc.Blog.BlogID)
fmt.Printf("dbc.Blog.Name = %q\n", dbc.Blog.Name)
fmt.Printf("dbc.Blog.Author = %q\n", dbc.Blog.Author)
Output:

dbc.Blog.String() = "blogs"
dbc.Blog.BlogID = "blog_id"
dbc.Blog.Name = "name"
dbc.Blog.Author = "author"
Example (QueryRow)
dbc := NewDBContext(prepareDB())
dbc.DebugMode(true)

src := []*Blog{
	&Blog{
		BlogID: uuid.Must(uuid.FromString("d03bc237-eef4-4b6f-afe1-ea901357d828")),
		Name:   "testing1",
		Author: "kamichidu",
	},
	&Blog{
		BlogID: uuid.Must(uuid.FromString("b95e5d4d-7eb9-4612-882d-224daa4a59ee")),
		Name:   "testing2",
		Author: "kamichidu",
	},
	&Blog{
		BlogID: uuid.Must(uuid.FromString("22f931c8-ac87-4520-88e8-83fc0604b8f5")),
		Name:   "testing3",
		Author: "kamichidu",
	},
	&Blog{
		BlogID: uuid.Must(uuid.FromString("065c6554-9aff-4b42-ab3b-141ed5ef5624")),
		Name:   "testing4",
		Author: "kamichidu",
	},
}
for _, blog := range src {
	dbc.Blog.Insert(blog)
}
func(blog *Blog) {
	now, err := time.Parse(time.RFC3339, "2018-06-01T12:00:00Z")
	if err != nil {
		panic(err)
	}
	dbc.Post.Insert(&Post{
		BlogID:  blog.BlogID,
		Title:   "titleA",
		Content: "contentA",
		Timestamp: Timestamp{
			CreatedAt: now,
			UpdatedAt: now,
		},
	})
	dbc.Post.Insert(&Post{
		BlogID:  blog.BlogID,
		Title:   "titleB",
		Content: "contentB",
		Timestamp: Timestamp{
			CreatedAt: now,
			UpdatedAt: now,
		},
	})
}(src[0])
if err := dbc.SaveChanges(); err != nil {
	panic(err)
}

// when a record was not found, will get sql.ErrNoRows
_, err := dbc.Blog.Select().
	Where(dbc.Blog.Author.Eq("non-exists-author")).
	QueryRow()
if err == sql.ErrNoRows {
	fmt.Print("QueryRow returns sql.ErrNoRows when a record was not found.\n")
}

// querying a record with conditions
blog, err := dbc.Blog.Select().
	Include(dbc.Blog.IncludePosts, dbc.Post.IncludeBlog).
	Where(dbc.Blog.Name.Eq(`testing1`)).
	QueryRow()
if err != nil {
	panic(err)
}
spew.Config.SortKeys = true
spew.Config.MaxDepth = 1
spew.Printf("%#v\n", blog)
for _, post := range blog.Posts {
	spew.Printf("- %#v\n", post)
	spew.Printf("  CreatedAt:%q\n", post.Timestamp.CreatedAt.Format(time.RFC3339))
	spew.Printf("  UpdatedAt:%q\n", post.Timestamp.UpdatedAt.Format(time.RFC3339))
}
Output:

QueryRow returns sql.ErrNoRows when a record was not found.
(*example.Blog){BlogID:(uuid.UUID)d03bc237-eef4-4b6f-afe1-ea901357d828 Name:(string)testing1 Author:(string)kamichidu Posts:([]*example.Post)[<max>]}
- (*example.Post){Timestamp:(example.Timestamp){<max>} BlogID:(uuid.UUID)d03bc237-eef4-4b6f-afe1-ea901357d828 PostID:(int)1 Title:(string)titleA Content:(string)contentA Blog:(*example.Blog){<max>}}
  CreatedAt:"2018-06-01T12:00:00Z"
  UpdatedAt:"2018-06-01T12:00:00Z"
- (*example.Post){Timestamp:(example.Timestamp){<max>} BlogID:(uuid.UUID)d03bc237-eef4-4b6f-afe1-ea901357d828 PostID:(int)2 Title:(string)titleB Content:(string)contentB Blog:(*example.Blog){<max>}}
  CreatedAt:"2018-06-01T12:00:00Z"
  UpdatedAt:"2018-06-01T12:00:00Z"
Example (Transaction)
dbc := NewDBContext(prepareDB())
dbc.DebugMode(true)

tx, err := dbc.DB.Begin()
if err != nil {
	panic(err)
}

txc := dbc.UseTx(tx)
blogID := uuid.Must(uuid.FromString("d03bc237-eef4-4b6f-afe1-ea901357d828"))
txc.Blog.Insert(&Blog{
	BlogID: blogID,
	Name:   "tx",
	Author: "kamichidu",
})
if err := txc.SaveChanges(); err != nil {
	panic(err)
}

n, err := dbc.Blog.Select().
	Where(dbc.Blog.BlogID.Eq(blogID)).
	Count()
if err != nil {
	panic(err)
}
fmt.Printf("dbc founds %d blogs when not committed yet\n", n)

n, err = txc.Blog.Select().
	Where(dbc.Blog.BlogID.Eq(blogID)).
	Count()
if err != nil {
	panic(err)
}
fmt.Printf("txc founds %d blogs when not committed yet since it's in same transaction\n", n)

if err := tx.Commit(); err != nil {
	panic(err)
}

n, err = dbc.Blog.Select().
	Where(dbc.Blog.BlogID.Eq(blogID)).
	Count()
if err != nil {
	panic(err)
}
fmt.Printf("dbc founds %d blogs after committed\n", n)
Output:

dbc founds 0 blogs when not committed yet
txc founds 1 blogs when not committed yet since it's in same transaction
dbc founds 1 blogs after committed

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Blog

type Blog struct {
	BlogID uuid.UUID `goen:"" table:"blogs" primary_key:""`

	Name string

	Author string

	Posts []*Post `foreign_key:"blog_id"`
}

type BlogColumnExpr

type BlogColumnExpr interface {
	BlogColumnExpr() string

	String() string
}

type BlogDBSet

type BlogDBSet struct {
	BlogID _Blog_BlogID

	Name _Blog_Name

	Author _Blog_Author

	IncludePosts goen.IncludeLoader
	// contains filtered or unexported fields
}

func (*BlogDBSet) Delete

func (dbset *BlogDBSet) Delete(v *Blog)

func (*BlogDBSet) Insert

func (dbset *BlogDBSet) Insert(v *Blog)

func (*BlogDBSet) Select

func (dbset *BlogDBSet) Select() BlogQueryBuilder

func (*BlogDBSet) String

func (dbset *BlogDBSet) String() string

func (*BlogDBSet) Update

func (dbset *BlogDBSet) Update(v *Blog)

type BlogOrderExpr

type BlogOrderExpr interface {
	BlogOrderExpr() string
}

type BlogQueryBuilder

type BlogQueryBuilder struct {
	// contains filtered or unexported fields
}

func (BlogQueryBuilder) Count

func (qb BlogQueryBuilder) Count() (int64, error)

func (BlogQueryBuilder) Include

func (qb BlogQueryBuilder) Include(loaders ...goen.IncludeLoader) BlogQueryBuilder

func (BlogQueryBuilder) Limit

func (qb BlogQueryBuilder) Limit(limit uint64) BlogQueryBuilder

func (BlogQueryBuilder) Offset

func (qb BlogQueryBuilder) Offset(offset uint64) BlogQueryBuilder

func (BlogQueryBuilder) OrderBy

func (qb BlogQueryBuilder) OrderBy(orderBys ...BlogOrderExpr) BlogQueryBuilder

func (BlogQueryBuilder) Query

func (qb BlogQueryBuilder) Query() ([]*Blog, error)

func (BlogQueryBuilder) QueryRow

func (qb BlogQueryBuilder) QueryRow() (*Blog, error)

func (BlogQueryBuilder) Where

func (qb BlogQueryBuilder) Where(conds ...BlogSqlizer) BlogQueryBuilder

func (BlogQueryBuilder) WhereRaw

func (qb BlogQueryBuilder) WhereRaw(conds ...squirrel.Sqlizer) BlogQueryBuilder

type BlogSqlizer

type BlogSqlizer interface {
	squirrel.Sqlizer

	BlogToSql() (string, []interface{}, error)
}

type DBContext

type DBContext struct {
	*goen.DBContext

	Blog *BlogDBSet

	Post *PostDBSet
}

func NewDBContext

func NewDBContext(dialectName string, db *sql.DB) *DBContext

func (*DBContext) UseTx

func (dbc *DBContext) UseTx(tx *sql.Tx) *DBContext

type Post

type Post struct {
	Timestamp

	BlogID uuid.UUID `goen:"" table:"posts"`

	PostID int `primary_key:",omitempty"`

	Title string

	Content string

	Blog *Blog `foreign_key:"blog_id"`
}

type PostColumnExpr

type PostColumnExpr interface {
	PostColumnExpr() string

	String() string
}

type PostDBSet

type PostDBSet struct {
	CreatedAt _Post_CreatedAt

	UpdatedAt _Post_UpdatedAt

	BlogID _Post_BlogID

	PostID _Post_PostID

	Title _Post_Title

	Content _Post_Content

	IncludeBlog goen.IncludeLoader
	// contains filtered or unexported fields
}

func (*PostDBSet) Delete

func (dbset *PostDBSet) Delete(v *Post)

func (*PostDBSet) Insert

func (dbset *PostDBSet) Insert(v *Post)

func (*PostDBSet) Select

func (dbset *PostDBSet) Select() PostQueryBuilder

func (*PostDBSet) String

func (dbset *PostDBSet) String() string

func (*PostDBSet) Update

func (dbset *PostDBSet) Update(v *Post)

type PostOrderExpr

type PostOrderExpr interface {
	PostOrderExpr() string
}

type PostQueryBuilder

type PostQueryBuilder struct {
	// contains filtered or unexported fields
}

func (PostQueryBuilder) Count

func (qb PostQueryBuilder) Count() (int64, error)

func (PostQueryBuilder) Include

func (qb PostQueryBuilder) Include(loaders ...goen.IncludeLoader) PostQueryBuilder

func (PostQueryBuilder) Limit

func (qb PostQueryBuilder) Limit(limit uint64) PostQueryBuilder

func (PostQueryBuilder) Offset

func (qb PostQueryBuilder) Offset(offset uint64) PostQueryBuilder

func (PostQueryBuilder) OrderBy

func (qb PostQueryBuilder) OrderBy(orderBys ...PostOrderExpr) PostQueryBuilder

func (PostQueryBuilder) Query

func (qb PostQueryBuilder) Query() ([]*Post, error)

func (PostQueryBuilder) QueryRow

func (qb PostQueryBuilder) QueryRow() (*Post, error)

func (PostQueryBuilder) Where

func (qb PostQueryBuilder) Where(conds ...PostSqlizer) PostQueryBuilder

func (PostQueryBuilder) WhereRaw

func (qb PostQueryBuilder) WhereRaw(conds ...squirrel.Sqlizer) PostQueryBuilder

type PostSqlizer

type PostSqlizer interface {
	squirrel.Sqlizer

	PostToSql() (string, []interface{}, error)
}

type Timestamp

type Timestamp struct {
	CreatedAt time.Time
	UpdatedAt time.Time
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL