• Daniel Theophanes's avatar
    database/sql: allow drivers to support custom arg types · a9bf3b2e
    Daniel Theophanes authored
    Previously all arguments were passed through driver.IsValid.
    This checked arguments against a few fundamental go types and
    prevented others from being passed in as arguments.
    
    The new interface driver.NamedValueChecker may be implemented
    by both driver.Stmt and driver.Conn. This allows
    this new interface to completely supersede the
    driver.ColumnConverter interface as it can be used for
    checking arguments known to a prepared statement and
    arbitrary query arguments. The NamedValueChecker may be
    skipped with driver.ErrSkip after all special cases are
    exhausted to use the default argument converter.
    
    In addition if driver.ErrRemoveArgument is returned
    the argument will not be passed to the query at all,
    useful for passing in driver specific per-query options.
    
    Add a canonical Out argument wrapper to be passed
    to OUTPUT parameters. This will unify checks that need to
    be written in the NameValueChecker.
    
    The statement number check is also moved to the argument
    converter so the NamedValueChecker may remove arguments
    passed to the query.
    
    Fixes #13567
    Fixes #18079
    Updates #18417
    Updates #17834
    Updates #16235
    Updates #13067
    Updates #19797
    
    Change-Id: I89088bd9cca4596a48bba37bfd20d987453ef237
    Reviewed-on: https://go-review.googlesource.com/38533Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    a9bf3b2e
convert.go 12.4 KB