zeroshade commented on code in PR #686:
URL: https://github.com/apache/arrow-adbc/pull/686#discussion_r1196726165
##########
go/adbc/adbc.go:
##########
@@ -536,3 +536,16 @@ type Statement interface {
// an error with a StatusNotImplemented code.
ExecutePartitions(context.Context) (*arrow.Schema, Partitions, int64,
error)
}
+
+// Statement110 is an extension interface for methods added to Statement in
+// ADBC API revision 1.1.0.
+type Statement110 interface {
+ Statement
+
+ // ExecuteSchema returns the schema of the result set of a query without
+ // executing it.
+ //
+ // If the driver does not support this, this will return an error with a
+ // StatusNotImplemented code.
+ ExecuteSchema(context.Context) (*arrow.Schema, error)
+}
Review Comment:
If we're looking to avoid the breaking change, there's a couple options:
1. We can introduce a single method interface that only exposes the
`ExecuteSchema` method which a consumer can use a type inference test for (like
we do for `PostInitOptions`)
2. Something like this (though I think I'd name it differently) that embeds
the original interface with the new method.
3. adding a new package, if we go this route we'd make this a new major
version and include the major version in the path (like we do for arrow itself)
and just make the breaking change. Adding a new package that re-exports things
would have to be using aliases if we don't want it to break anyone that is
using the existing stuff (as non-aliases would be explicitly different types).
Of these options, I think I prefer the first option, adding a new,
single-method interface like `StatementExecSchema` (for example, look at
https://pkg.go.dev/database/sql/driver#ConnBeginTx)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]