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))
if post.DeletedAt != nil {
spew.Printf(" DeletedAt:%q\n", post.DeletedAt.Format(time.RFC3339))
} else {
spew.Print(" DeletedAt:nil\n")
}
}
}
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 Order:(int)0 Blog:(*example.Blog){<max>}} CreatedAt:"2018-06-01T12:00:00Z" UpdatedAt:"2018-06-01T12:00:00Z" DeletedAt:nil - (*example.Post){Timestamp:(example.Timestamp){<max>} BlogID:(uuid.UUID)d03bc237-eef4-4b6f-afe1-ea901357d828 PostID:(int)2 Title:(string)titleB Content:(string)contentB Order:(int)0 Blog:(*example.Blog){<max>}} CreatedAt:"2018-06-01T12:00:00Z" UpdatedAt:"2018-06-01T12:00:00Z" DeletedAt:nil (*example.Blog){BlogID:(uuid.UUID)b95e5d4d-7eb9-4612-882d-224daa4a59ee Name:(string)testing2 Author:(string)unknown Posts:([]*example.Post)<nil>}
Example (BrokenManyToOneRelationWithNonForeignKey) ¶
dbc := NewDBContext(prepareDB())
dropForeignKeys(dbc.DB)
validBlogID := uuid.Must(uuid.FromString("d03bc237-eef4-4b6f-afe1-ea901357d828"))
invalidBlogID := uuid.Must(uuid.FromString("0c816298-1d35-4948-870a-6f7b5bba14d3"))
dbc.Blog.Insert(&Blog{
BlogID: validBlogID,
Name: "the blog",
})
dbc.Post.Insert(&Post{
BlogID: validBlogID,
Title: "0 the valid post",
Timestamp: Timestamp{
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
},
})
dbc.Post.Insert(&Post{
BlogID: invalidBlogID,
Title: "1 the invalid post",
Timestamp: Timestamp{
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
},
})
if err := dbc.SaveChanges(); err != nil {
panic(err)
}
posts, err := dbc.Post.Select().
Include(dbc.Post.IncludeBlog).
OrderBy(dbc.Post.Title.Asc()).
Query()
if err != nil {
panic(err)
}
for _, post := range posts {
var blogName string
if post.Blog != nil {
blogName = post.Blog.Name
} else {
blogName = "<nil>"
}
fmt.Printf("%q with related blog %q\n", post.Title, blogName)
}
Output: "0 the valid post" with related blog "the blog" "1 the invalid post" with related blog "<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(
`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 (CustomDelete) ¶
dbc := NewDBContext(prepareDB())
// expect `delete from posts where blog_id = ?`
dbc.Patch(goen.DeletePatch(
dbc.Post.String(),
&goen.MapRowKey{
Table: dbc.Post.String(),
Key: map[string]interface{}{
dbc.Post.BlogID.String(): uuid.Must(uuid.FromString("d03bc237-eef4-4b6f-afe1-ea901357d828")),
},
}))
if err := dbc.SaveChanges(); err != nil {
panic(err)
}
Example (GeneratedSchemaFields) ¶
dbc := NewDBContext(dialectName, nil)
// can get quoted names
fmt.Printf("dbc.Blog = %s / %s\n", dbc.Blog, unifyQuery(dbc.Blog.QuotedString()))
fmt.Printf("dbc.Blog.BlogID = %s / %s\n", dbc.Blog.BlogID, unifyQuery(dbc.Blog.BlogID.QuotedString()))
fmt.Printf("dbc.Blog.Name = %s / %s\n", dbc.Blog.Name, unifyQuery(dbc.Blog.Name.QuotedString()))
fmt.Printf("dbc.Blog.Author = %s / %s\n", dbc.Blog.Author, unifyQuery(dbc.Blog.Author.QuotedString()))
Output: dbc.Blog = blogs / `blogs` dbc.Blog.BlogID = blog_id / `blog_id` dbc.Blog.Name = name / `name` dbc.Blog.Author = author / `author`
Example (NullableColumn) ¶
dbc := NewDBContext(prepareDB())
dbc.DebugMode(true)
blogID := uuid.Must(uuid.FromString("d03bc237-eef4-4b6f-afe1-ea901357d828"))
dbc.Blog.Insert(&Blog{
BlogID: blogID,
Name: "nullable",
Author: "kamichidu",
})
now, err := time.Parse(time.RFC3339, "2018-08-09T13:48:29Z")
if err != nil {
panic(err)
}
dbc.Post.Insert(&Post{
BlogID: blogID,
Title: "p1",
Timestamp: Timestamp{
CreatedAt: now,
UpdatedAt: now,
DeletedAt: &now,
},
})
dbc.Post.Insert(&Post{
BlogID: blogID,
Title: "p2",
Timestamp: Timestamp{
CreatedAt: now,
UpdatedAt: now,
DeletedAt: nil,
},
})
if err := dbc.SaveChanges(); err != nil {
panic(err)
}
fmt.Println("print all rows")
posts, err := dbc.Post.Select().
OrderBy(dbc.Post.Title.Asc()).
Query()
if err != nil {
panic(err)
}
for _, post := range posts {
if post.DeletedAt != nil {
fmt.Printf("%q > DeletedAt = %q\n", post.Title, post.DeletedAt.Format(time.RFC3339))
} else {
fmt.Printf("%q > DeletedAt = nil\n", post.Title)
}
}
fmt.Println("print filtered rows that deleted at is null")
posts, err = dbc.Post.Select().
Where(dbc.Post.DeletedAt.Eq(nil)).
OrderBy(dbc.Post.Title.Asc()).
Query()
if err != nil {
panic(err)
}
for _, post := range posts {
if post.DeletedAt != nil {
fmt.Printf("%q > DeletedAt = %q\n", post.Title, post.DeletedAt.Format(time.RFC3339))
} else {
fmt.Printf("%q > DeletedAt = nil\n", post.Title)
}
}
Output: print all rows "p1" > DeletedAt = "2018-08-09T13:48:29Z" "p2" > DeletedAt = nil print filtered rows that deleted at is null "p2" > DeletedAt = nil
Example (QueryBuilderAsSqlizer) ¶
dbc := NewDBContext(prepareDB())
query, args, err := dbc.Blog.Select().
Where(dbc.Blog.Author.Eq("kamichidu")).
ToSqlizer(dbc.Blog.BlogID.QuotedString()).
ToSql()
if err != nil {
panic(err)
}
// for stable output
query = unifyQuery(query)
fmt.Printf("%q\n", query)
fmt.Printf("%q\n", args)
Output: "SELECT `blog_id` FROM `blogs` WHERE `author` = ?" ["kamichidu"]
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 Order:(int)0 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 Order:(int)0 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 ¶
- type Blog
- type BlogColumnExpr
- type BlogDBSet
- type BlogOrderExpr
- type BlogQueryBuilder
- func (qb BlogQueryBuilder) Count() (int64, error)
- func (qb BlogQueryBuilder) CountContext(ctx context.Context) (int64, error)
- func (qb BlogQueryBuilder) Include(loaders ...goen.IncludeLoader) BlogQueryBuilder
- func (qb BlogQueryBuilder) Limit(limit uint64) BlogQueryBuilder
- func (qb BlogQueryBuilder) Offset(offset uint64) BlogQueryBuilder
- func (qb BlogQueryBuilder) OrderBy(orderBys ...BlogOrderExpr) BlogQueryBuilder
- func (qb BlogQueryBuilder) Query() ([]*Blog, error)
- func (qb BlogQueryBuilder) QueryContext(ctx context.Context) ([]*Blog, error)
- func (qb BlogQueryBuilder) QueryRow() (*Blog, error)
- func (qb BlogQueryBuilder) QueryRowContext(ctx context.Context) (*Blog, error)
- func (qb BlogQueryBuilder) ToSqlizer(columns ...string) BlogSqlizer
- func (qb BlogQueryBuilder) Where(conds ...BlogSqlizer) BlogQueryBuilder
- func (qb BlogQueryBuilder) WhereRaw(conds ...squirrel.Sqlizer) BlogQueryBuilder
- type BlogSqlizer
- type DBContext
- type Post
- type PostColumnExpr
- type PostDBSet
- type PostOrderExpr
- type PostQueryBuilder
- func (qb PostQueryBuilder) Count() (int64, error)
- func (qb PostQueryBuilder) CountContext(ctx context.Context) (int64, error)
- func (qb PostQueryBuilder) Include(loaders ...goen.IncludeLoader) PostQueryBuilder
- func (qb PostQueryBuilder) Limit(limit uint64) PostQueryBuilder
- func (qb PostQueryBuilder) Offset(offset uint64) PostQueryBuilder
- func (qb PostQueryBuilder) OrderBy(orderBys ...PostOrderExpr) PostQueryBuilder
- func (qb PostQueryBuilder) Query() ([]*Post, error)
- func (qb PostQueryBuilder) QueryContext(ctx context.Context) ([]*Post, error)
- func (qb PostQueryBuilder) QueryRow() (*Post, error)
- func (qb PostQueryBuilder) QueryRowContext(ctx context.Context) (*Post, error)
- func (qb PostQueryBuilder) ToSqlizer(columns ...string) PostSqlizer
- func (qb PostQueryBuilder) Where(conds ...PostSqlizer) PostQueryBuilder
- func (qb PostQueryBuilder) WhereRaw(conds ...squirrel.Sqlizer) PostQueryBuilder
- type PostSqlizer
- type Timestamp
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BlogColumnExpr ¶
type BlogDBSet ¶
type BlogDBSet struct {
BlogID _Blog_BlogID
Name _Blog_Name
Author _Blog_Author
IncludePosts goen.IncludeLoader
// contains filtered or unexported fields
}
func (*BlogDBSet) QuotedString ¶ added in v0.0.3
QuotedString gets quoted table name
func (*BlogDBSet) Select ¶
func (dbset *BlogDBSet) Select() BlogQueryBuilder
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) CountContext ¶
func (qb BlogQueryBuilder) CountContext(ctx context.Context) (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) QueryContext ¶
func (qb BlogQueryBuilder) QueryContext(ctx context.Context) ([]*Blog, error)
func (BlogQueryBuilder) QueryRow ¶
func (qb BlogQueryBuilder) QueryRow() (*Blog, error)
func (BlogQueryBuilder) QueryRowContext ¶
func (qb BlogQueryBuilder) QueryRowContext(ctx context.Context) (*Blog, error)
func (BlogQueryBuilder) ToSqlizer ¶ added in v0.0.1
func (qb BlogQueryBuilder) ToSqlizer(columns ...string) BlogSqlizer
ToSqlizer returns Sqlizer that built by BlogQueryBuilder with given columns. The columns defaults to all columns of Blog, if columns is zero-length.
func (BlogQueryBuilder) Where ¶
func (qb BlogQueryBuilder) Where(conds ...BlogSqlizer) BlogQueryBuilder
func (BlogQueryBuilder) WhereRaw ¶
func (qb BlogQueryBuilder) WhereRaw(conds ...squirrel.Sqlizer) BlogQueryBuilder
type BlogSqlizer ¶
type PostColumnExpr ¶
type PostDBSet ¶
type PostDBSet struct {
CreatedAt _Post_CreatedAt
UpdatedAt _Post_UpdatedAt
DeletedAt _Post_DeletedAt
BlogID _Post_BlogID
PostID _Post_PostID
Title _Post_Title
Content _Post_Content
Order _Post_Order
IncludeBlog goen.IncludeLoader
// contains filtered or unexported fields
}
func (*PostDBSet) QuotedString ¶ added in v0.0.3
QuotedString gets quoted table name
func (*PostDBSet) Select ¶
func (dbset *PostDBSet) Select() PostQueryBuilder
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) CountContext ¶
func (qb PostQueryBuilder) CountContext(ctx context.Context) (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) QueryContext ¶
func (qb PostQueryBuilder) QueryContext(ctx context.Context) ([]*Post, error)
func (PostQueryBuilder) QueryRow ¶
func (qb PostQueryBuilder) QueryRow() (*Post, error)
func (PostQueryBuilder) QueryRowContext ¶
func (qb PostQueryBuilder) QueryRowContext(ctx context.Context) (*Post, error)
func (PostQueryBuilder) ToSqlizer ¶ added in v0.0.1
func (qb PostQueryBuilder) ToSqlizer(columns ...string) PostSqlizer
ToSqlizer returns Sqlizer that built by PostQueryBuilder with given columns. The columns defaults to all columns of Post, if columns is zero-length.
func (PostQueryBuilder) Where ¶
func (qb PostQueryBuilder) Where(conds ...PostSqlizer) PostQueryBuilder
func (PostQueryBuilder) WhereRaw ¶
func (qb PostQueryBuilder) WhereRaw(conds ...squirrel.Sqlizer) PostQueryBuilder
type PostSqlizer ¶
Click to show internal directories.
Click to hide internal directories.