mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
doc: add examples for custom sql.DB and opencensus
Reviewed By: alexsn Differential Revision: D17853894 fbshipit-source-id: bdceae27fe12bcf8bde877c51472efe7bd2b2bd6
This commit is contained in:
committed by
Facebook Github Bot
parent
ce2bc07c1a
commit
9521000534
105
doc/md/sql-integration.md
Normal file
105
doc/md/sql-integration.md
Normal file
@@ -0,0 +1,105 @@
|
||||
---
|
||||
id: sql-integration
|
||||
title: sql.DB Integration
|
||||
---
|
||||
|
||||
The following examples show how to pass a custom `sql.DB` object to `ent.Client`.
|
||||
|
||||
## Configure `sql.DB`
|
||||
|
||||
First option:
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"<your_project>/ent"
|
||||
"github.com/facebookincubator/ent/dialect/sql"
|
||||
)
|
||||
|
||||
func Open() (*ent.Client, error) {
|
||||
drv, err := sql.Open("mysql", "<mysql-dsn>")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Get the underlying sql.DB object of the driver.
|
||||
db := drv.DB()
|
||||
db.SetMaxIdleConns(10)
|
||||
db.SetMaxOpenConns(100)
|
||||
db.SetConnMaxLifetime(time.Hour)
|
||||
return ent.NewClient(ent.Driver(drv)), nil
|
||||
}
|
||||
```
|
||||
|
||||
Second option:
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"time"
|
||||
|
||||
"<your_project>/ent"
|
||||
entsql "github.com/facebookincubator/ent/dialect/sql"
|
||||
)
|
||||
|
||||
func Open() (*ent.Client, error) {
|
||||
db, err := sql.Open("mysql", "<mysql-dsn>")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
db.SetMaxIdleConns(10)
|
||||
db.SetMaxOpenConns(100)
|
||||
db.SetConnMaxLifetime(time.Hour)
|
||||
// Create an ent.Driver from `db`.
|
||||
drv := entsql.OpenDB("mysql", db)
|
||||
return ent.NewClient(ent.Driver(drv)), nil
|
||||
}
|
||||
```
|
||||
|
||||
## Use Opencensus With MySQL
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"database/sql/driver"
|
||||
|
||||
"<project>/ent"
|
||||
|
||||
"contrib.go.opencensus.io/integrations/ocsql"
|
||||
"github.com/go-sql-driver/mysql"
|
||||
entsql "github.com/facebookincubator/ent/dialect/sql"
|
||||
)
|
||||
|
||||
type connector struct {
|
||||
dsn string
|
||||
}
|
||||
|
||||
func (c connector) Connect(context.Context) (driver.Conn, error) {
|
||||
return c.Driver().Open(c.dsn)
|
||||
}
|
||||
|
||||
func (connector) Driver() driver.Driver {
|
||||
return ocsql.Wrap(
|
||||
mysql.MySQLDriver{},
|
||||
ocsql.WithAllTraceOptions(),
|
||||
ocsql.WithRowsClose(false),
|
||||
ocsql.WithRowsNext(false),
|
||||
ocsql.WithDisableErrSkip(true),
|
||||
)
|
||||
}
|
||||
|
||||
// Open new connection and start stats recorder.
|
||||
func Open(dsn string) *ent.Client {
|
||||
db := sql.OpenDB(connector{dsn})
|
||||
// Create an ent.Driver from `db`.
|
||||
drv := entsql.OpenDB("mysql", db)
|
||||
return ent.NewClient(ent.Driver(drv))
|
||||
}
|
||||
```
|
||||
@@ -23,6 +23,9 @@
|
||||
"Migration": [
|
||||
"migrate",
|
||||
"dialects"
|
||||
],
|
||||
"Misc": [
|
||||
"sql-integration"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -519,11 +519,6 @@ header > .navigationSlider {
|
||||
margin: 0 20px;
|
||||
}
|
||||
|
||||
.blog .headerWrapper.wrapper header,
|
||||
.sideNavVisible .headerWrapper.wrapper header {
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
.blog .headerWrapper.wrapper header > a,
|
||||
.sideNavVisible .headerWrapper.wrapper header > a {
|
||||
width: 288px;
|
||||
|
||||
Reference in New Issue
Block a user