mirror of
https://github.com/ent/ent.git
synced 2026-05-02 15:40:55 +03:00
Reviewed By: alexsn Differential Revision: D17853894 fbshipit-source-id: bdceae27fe12bcf8bde877c51472efe7bd2b2bd6
106 lines
2.0 KiB
Markdown
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))
|
|
}
|
|
```
|