2023-01-03 21:45:35 +09:00
|
|
|
package d1
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"database/sql/driver"
|
2023-02-26 12:07:38 +09:00
|
|
|
"syscall/js"
|
|
|
|
|
|
|
|
"github.com/syumai/workers/cloudflare/internal/cfruntimecontext"
|
2023-01-03 21:45:35 +09:00
|
|
|
)
|
|
|
|
|
|
|
|
type Connector struct {
|
2023-02-26 12:07:38 +09:00
|
|
|
dbObj js.Value
|
2023-01-03 21:45:35 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
_ driver.Connector = (*Connector)(nil)
|
|
|
|
)
|
|
|
|
|
2023-02-26 12:07:38 +09:00
|
|
|
// OpenConnector returns Connector of D1.
|
|
|
|
// This method checks DB existence. If DB was not found, this function returns error.
|
2024-04-17 00:52:30 +09:00
|
|
|
func OpenConnector(name string) (driver.Connector, error) {
|
|
|
|
v := cfruntimecontext.MustGetRuntimeContextEnv().Get(name)
|
2023-02-26 12:07:38 +09:00
|
|
|
if v.IsUndefined() {
|
|
|
|
return nil, ErrDatabaseNotFound
|
|
|
|
}
|
|
|
|
return &Connector{dbObj: v}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Connect returns Conn of D1.
|
2023-02-12 01:50:45 +09:00
|
|
|
// This method doesn't check DB existence, so this function never return errors.
|
2023-01-03 21:45:35 +09:00
|
|
|
func (c *Connector) Connect(context.Context) (driver.Conn, error) {
|
2023-02-26 12:07:38 +09:00
|
|
|
return &Conn{dbObj: c.dbObj}, nil
|
2023-01-03 21:45:35 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Connector) Driver() driver.Driver {
|
|
|
|
return &Driver{}
|
|
|
|
}
|