Skip to content

Commit

Permalink
Cater for optional parameter prefix in Database.AddParameter instead …
Browse files Browse the repository at this point in the history
…of "undoing" the pramPrefix modification in OracleDatabaseProvider.
  • Loading branch information
Curlack committed Oct 23, 2023
1 parent 8d5b363 commit 0dfc8e8
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 19 deletions.
12 changes: 10 additions & 2 deletions PetaPoco/Database.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3161,14 +3161,22 @@ private void AddParameter(IDbCommand cmd, object value, PocoColumn pc)
if (cmd.CommandType == CommandType.Text)
idbParam.ParameterName = cmd.Parameters.Count.EnsureParamPrefix(_paramPrefix);
else if (idbParam.ParameterName?.StartsWith(_paramPrefix) != true)
idbParam.ParameterName = idbParam.ParameterName.EnsureParamPrefix(_paramPrefix);
{
// only add param prefix if it's not an Oracle stored procedures
if (!(cmd.CommandType == CommandType.StoredProcedure && _provider is Providers.OracleDatabaseProvider))
idbParam.ParameterName = idbParam.ParameterName.EnsureParamPrefix(_paramPrefix);
}

cmd.Parameters.Add(idbParam);
}
else
{
var p = cmd.CreateParameter();
p.ParameterName = cmd.Parameters.Count.EnsureParamPrefix(_paramPrefix);

// only add param prefix if it's not an Oracle stored procedures
if (!(cmd.CommandType == CommandType.StoredProcedure && _provider is Providers.OracleDatabaseProvider))
p.ParameterName = cmd.Parameters.Count.EnsureParamPrefix(_paramPrefix);

SetParameterProperties(p, value, pc);

cmd.Parameters.Add(p);
Expand Down
17 changes: 0 additions & 17 deletions PetaPoco/Providers/OracleDatabaseProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,23 +35,6 @@ public override void PreExecute(IDbCommand cmd)
{
cmd.GetType().GetProperty("BindByName")?.SetValue(cmd, true, null);
cmd.GetType().GetProperty("InitialLONGFetchSize")?.SetValue(cmd, -1, null);

if (cmd.CommandType == CommandType.StoredProcedure)
{
//Oracle stored procedure parameter names do not use the parameter prefix
//They also need to match the db exactly, so it's up to the consumer to specify the correct name
//In Database.AddParameter, the parameter prefix is prepended and it didn't seem right to cater for this case there...
//...so we need to undo those changes here
var paramPrefix = GetParameterPrefix(null);
var enumerator = cmd.Parameters.GetEnumerator();
while (enumerator.MoveNext())
{
var parameter = (IDataParameter)enumerator.Current;

if (parameter.ParameterName.StartsWith(paramPrefix, StringComparison.OrdinalIgnoreCase))
parameter.ParameterName = parameter.ParameterName.Substring(paramPrefix.Length);
}
}
}

/// <inheritdoc/>
Expand Down

0 comments on commit 0dfc8e8

Please sign in to comment.