package base import ( "context" "database/sql" "github.com/gogf/gf/contrib/drivers/pgsql/v2" "github.com/gogf/gf/v2/database/gdb" ) type GDB struct { *pgsql.Driver } var ( // customDriverName is my driver name, which is used for registering. customDriverName = "MyDriver" ) func init() { // It here registers my custom driver in package initialization function "init". // You can later use this type in the database configuration. if err := gdb.Register(customDriverName, &GDB{}); err != nil { panic(err) } } // New creates and returns a database object for mysql. // It implements the interface of gdb.Driver for extra database driver installation. func (d *GDB) New(core *gdb.Core, node *gdb.ConfigNode) (gdb.DB, error) { return &GDB{ &pgsql.Driver{ Core: core, }, }, nil } // DoCommit commits current sql and arguments to underlying sql driver. func (d *GDB) DoCommit(ctx context.Context, in gdb.DoCommitInput) (out gdb.DoCommitOutput, err error) { out, err = d.Core.DoCommit(ctx, in) return } // 其他接口方法 func (d *GDB) DoFilter(ctx context.Context, link gdb.Link, sql string, args []any) (string, []any, error) { return d.Core.DoFilter(ctx, link, sql, args) } func (d *GDB) DoPrepare(ctx context.Context, link gdb.Link, sql string) (*gdb.Stmt, error) { return d.Core.DoPrepare(ctx, link, sql) } func (d *GDB) ConvertValueForField(ctx context.Context, fieldType string, fieldValue any) (any, error) { return fieldValue, nil } func (d *GDB) ConvertValueForLocal(ctx context.Context, fieldType string, fieldValue any) (any, error) { return d.Core.ConvertValueForLocal(ctx, fieldType, fieldValue) } func (d *GDB) Exec(ctx context.Context, sql string, args ...any) (sql.Result, error) { in := gdb.DoCommitInput{Type: gdb.SqlTypeExecContext, Sql: sql, Args: args} out, err := d.DoCommit(ctx, in) if err != nil { return nil, err } return out.Result, nil } func (d *GDB) DoExec(ctx context.Context, link gdb.Link, sql string, args ...any) (sql.Result, error) { in := gdb.DoCommitInput{Type: gdb.SqlTypeExecContext, Sql: sql, Args: args} out, err := d.DoCommit(ctx, in) if err != nil { return nil, err } return out.Result, nil }