Documentation
¶
Overview ¶
Package grpcsql exposes a SQL database over a gRPC endpoint.
Example ¶
listener, err := net.Listen("tcp", ":0") if err != nil { log.Fatalf("failed to create listener: %v", err) } server := grpcsql.NewServer(&sqlite3.SQLiteDriver{}) go server.Serve(listener) defer server.Stop() dialer := func() (*grpc.ClientConn, error) { return grpc.Dial(listener.Addr().String(), grpc.WithInsecure()) } driver := grpcsql.NewDriver(dialer) sql.Register("grpc", driver) db, err := sql.Open("grpc", ":memory:") if err != nil { log.Fatalf("failed to create grpc database: %s", err) } defer db.Close() tx, err := db.Begin() if err != nil { log.Fatalf("failed to create grpc transaction: %s", err) } defer tx.Rollback() result, err := tx.Exec("CREATE TABLE test (n INTEGER); INSERT INTO test(n) VALUES (1)") if err != nil { log.Fatalf("failed to execute create table statement over grpc: %s", err) } result, err = tx.Exec("INSERT INTO test(n) VALUES (2)") if err != nil { log.Fatalf("failed to execute insert statement over grpc: %s", err) } rows, err := tx.Query("SELECT n FROM test ORDER BY n") if err != nil { log.Fatalf("failed to select rows over grpc: %s", err) } types, err := rows.ColumnTypes() if len(types) != 1 { log.Fatalf("wrong count of column types: %d", len(types)) } name := types[0].DatabaseTypeName() if err != nil { log.Fatalf("failed to fetch column types over grpc: %s", err) } numbers := []int{} for rows.Next() { var n int if err := rows.Scan(&n); err != nil { log.Fatalf("failed to scan row over grpc: %s", err) } numbers = append(numbers, n) } if err := rows.Err(); err != nil { log.Fatalf("rows error over grpc: %s", err) } defer rows.Close()
Output: 2 <nil> 1 <nil> INTEGER [1 2]
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Conn ¶
type Conn struct {
// contains filtered or unexported fields
}
Conn wraps a connection to a gRPC SQL gateway.
func (*Conn) Close ¶
Close invalidates and potentially stops any current prepared statements and transactions, marking this connection as no longer in use.
type Dialer ¶
type Dialer func() (conn *grpc.ClientConn, err error)
Dialer is a function that can create a gRPC connection.
type Driver ¶
type Driver struct {
// contains filtered or unexported fields
}
Driver implements the database/sql/driver interface and executes the relevant statements over gRPC.
func NewDriver ¶
NewDriver creates a new gRPC SQL driver for creating connections to backend gateways.
type Gateway ¶
type Gateway struct {
// contains filtered or unexported fields
}
Gateway mapping gRPC requests to SQL queries.
func NewGateway ¶
NewGateway creates a new gRPC gateway executing requests against the given SQL driver.
type Result ¶
type Result struct {
// contains filtered or unexported fields
}
Result is the result of a query execution.
func (*Result) LastInsertId ¶
LastInsertId returns the database's auto-generated ID.
func (*Result) RowsAffected ¶
RowsAffected returns the number of rows affected by the query.
type Rows ¶
type Rows struct {
// contains filtered or unexported fields
}
Rows is an iterator over an executed query's results.
func (*Rows) ColumnTypeDatabaseTypeName ¶
ColumnTypeDatabaseTypeName implements RowsColumnTypeDatabaseTypeName.
func (*Rows) ColumnTypeScanType ¶
ColumnTypeScanType implements RowsColumnTypeScanType.
type Stmt ¶
type Stmt struct {
// contains filtered or unexported fields
}
Stmt is a prepared statement. It is bound to a Conn and not used by multiple goroutines concurrently.