Files
ent/doc/md/sql-integration.md
Ariel Mashraki 9521000534 doc: add examples for custom sql.DB and opencensus
Reviewed By: alexsn

Differential Revision: D17853894

fbshipit-source-id: bdceae27fe12bcf8bde877c51472efe7bd2b2bd6
2019-10-10 05:02:59 -07:00

106 lines
2.0 KiB
Markdown

---
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))
}
```