examples icon indicating copy to clipboard operation
examples copied to clipboard

[SecureADODB] Needs an `IDbParameter` abstraction

Open retailcoder opened this issue 5 years ago • 0 comments

Having an IDbParameter interface, and tweaking IDbCommand.Execute methods' ParamArray handling to accept it, would allow providing named and output parameters inline, without needing to deal with ADODB.Parameter directly.

The interface should expose the ADODB.Parameter object (much like DbConnection exposes the ADODB.Connection object) - this should fit the bill:

'@Interface
'@ModuleDescription("An object representing a command parameter.")
Option Explicit

Public Property Get Parameter() As ADODB.Parameter
End Property

Public Property Get ParameterName() As String
End Property

Public Property Get ParameterValue() As Variant
End Property

Public Property Get ParameterType() As ADODB.DataTypeEnum
End Property

Public Property Get ParameterDirection() As ADODB.ParameterDirectionEnum
End Property

Public Property Get ParameterSize() As Long

Public Property Get IsNamedParameter() As Boolean
End Property

Needs a StubDbParameter implementation for unit tests, and the DbParameter class needs to property-inject the properties through a number of factory methods:

  • Create should take in all dependencies
  • FromValue should take in a value (and an optional name, direction, and size)
  • NullValue should take in a data type (and an optional name, direction, and size)

The IsNamedParameter get-only property should return True if a name was supplied. Unit tests should validate that a command doesn't accept mixed named & ordinal parameters.

retailcoder avatar Apr 22 '20 16:04 retailcoder