Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@ on:
push:
branches: [ main ]
paths:
- '**.cs'
- '**.csproj'
- '**.cs'
- '**.csproj'

pull_request:
paths:
- '**.cs'
- '**.csproj'

env:
REPODB_MYSQL_CONSTR_SYS: "Server=127.0.0.1;Port=43306;Database=sys;User ID=root;Password=ddd53e85-b15e-4da8-91e5-a7d3b00a0ab2;"
Expand Down
28 changes: 19 additions & 9 deletions src/RepoDb.Oracle/DbHelpers/OracleDbHelper.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Data;
using System.Data.Common;
using System.Linq.Expressions;
using System.Text.RegularExpressions;
using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;
Expand All @@ -10,6 +11,7 @@
using RepoDb.Resolvers;

namespace RepoDb.DbHelpers;

public sealed class OracleDbHelper : BaseDbHelper
{
public OracleDbHelper(IDbSetting dbSetting)
Expand All @@ -27,17 +29,25 @@ public override void DynamicHandler<TEventInstance>(TEventInstance instance, str
{
HandleDbParameterPostCreation(op);
}
}

public override Expression? GetParameterPostCreationExpression(ParameterExpression dbParameterExpression, ParameterExpression? propertyExpression, DbField dbField)
{
// Shortcut the DynamicHandler to allow inlining
return Expression.IfThen(Expression.TypeIs(dbParameterExpression, typeof(OracleParameter)),
Expression.Call(typeof(OracleDbHelper).GetMethod(nameof(HandleDbParameterPostCreation), System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static)!,
Expression.Convert(dbParameterExpression, typeof(OracleParameter))));
}

static void HandleDbParameterPostCreation(OracleParameter oracleParameter)
static void HandleDbParameterPostCreation(OracleParameter oracleParameter)
{
if (oracleParameter.Value is string)
{
if (oracleParameter.Value is string)
{
oracleParameter.OracleDbType = OracleDbType.Varchar2;
}
else if (oracleParameter.Value is TimeSpan)
{
oracleParameter.OracleDbType = OracleDbType.IntervalDS;
}
oracleParameter.OracleDbType = OracleDbType.Varchar2;
}
else if (oracleParameter.Value is TimeSpan)
{
oracleParameter.OracleDbType = OracleDbType.IntervalDS;
}
}

Expand Down
9 changes: 9 additions & 0 deletions src/RepoDb.PostgreSql/DbHelpers/PostgreSqlDbHelper.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#nullable enable
using System.Data;
using System.Data.Common;
using System.Linq.Expressions;
using System.Text.RegularExpressions;
using Npgsql;
using RepoDb.DbSettings;
Expand Down Expand Up @@ -250,6 +251,14 @@ public override void DynamicHandler<TEventInstance>(TEventInstance instance,
}
}

public override Expression? GetParameterPostCreationExpression(ParameterExpression dbParameterExpression, ParameterExpression? propertyExpression, DbField dbField)
{
// Shortcut the DynamicHandler to allow inlining
return Expression.IfThen(Expression.TypeIs(dbParameterExpression, typeof(NpgsqlParameter)),
Expression.Call(typeof(PostgreSqlDbHelper).GetMethod(nameof(HandleDbParameterPostCreation), System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static)!,
Expression.Convert(dbParameterExpression, typeof(NpgsqlParameter))));
}

#region Handlers

/// <summary>
Expand Down
9 changes: 9 additions & 0 deletions src/RepoDb/DbSettings/BaseDbHelper.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Collections;
using System.Data;
using System.Data.Common;
using System.Linq.Expressions;
using RepoDb.Interfaces;

namespace RepoDb.DbSettings;
Expand Down Expand Up @@ -68,4 +69,12 @@ public virtual ValueTask<DbRuntimeSetting> GetDbConnectionRuntimeInformationAsyn

/// <inheritdoc />
public virtual Func<object?>? PrepareForIdentityOutput(DbCommand command) => null;

public virtual Expression? GetParameterPostCreationExpression(ParameterExpression dbParameterExpression, ParameterExpression? propertyExpression, DbField dbField)
{
var method = StaticType.IDbHelper.GetMethod(nameof(IDbHelper.DynamicHandler))!
.MakeGenericMethod(dbParameterExpression.Type);
return Expression.Call(Expression.Constant(this),
method, dbParameterExpression, Expression.Constant("RepoDb.Internal.Compiler.Events[AfterCreateDbParameter]"));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Data;
using System.Linq.Expressions;
using RepoDb.DbSettings;
using RepoDb.Extensions;
using RepoDb.Interfaces;

Expand Down Expand Up @@ -91,7 +92,10 @@ private static BlockExpression GetDataEntityParameterAssignmentExpression(Parame
}

// Compiler.DbParameterPostCreation
var dbParameterPostCreationExpression = GetCompilerDbParameterPostCreationExpression(dbParameterExpression, dbHelper);
var dbParameterPostCreationExpression =
dbHelper is BaseDbHelper bh
? bh.GetParameterPostCreationExpression(dbParameterExpression, propertyExpression, dbField)
: GetCompilerDbParameterPostCreationExpression(dbParameterExpression, dbHelper);
parameterAssignmentExpressions.AddIfNotNull(dbParameterPostCreationExpression);

// PropertyValueAttributes / DbField must precide
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Data;
using System.Linq.Expressions;
using RepoDb.DbSettings;
using RepoDb.Extensions;
using RepoDb.Interfaces;

Expand Down Expand Up @@ -78,7 +79,10 @@ private static BlockExpression GetDictionaryStringObjectParameterAssignmentExpre
}

// Compiler.DbParameterPostCreation
var dbParameterPostCreationExpression = GetCompilerDbParameterPostCreationExpression(dbParameterExpression, dbHelper);
var dbParameterPostCreationExpression =
dbHelper is BaseDbHelper bh
? bh.GetParameterPostCreationExpression(dbParameterExpression, null, dbField)
: GetCompilerDbParameterPostCreationExpression(dbParameterExpression, dbHelper);
parameterAssignmentExpressions.AddIfNotNull(dbParameterPostCreationExpression);

// DbCommand.Parameters.Add
Expand Down
8 changes: 4 additions & 4 deletions src/RepoDb/Reflection/Compiler.DynamicHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ internal partial class Compiler
/// <summary>
///
/// </summary>
/// <param name="dbCommandExpression"></param>
/// <param name="dbParameterExpression"></param>
/// <param name="dbHelper"></param>
/// <returns></returns>
private static MethodCallExpression GetCompilerDbParameterPostCreationExpression(ParameterExpression dbCommandExpression,
private static MethodCallExpression GetCompilerDbParameterPostCreationExpression(ParameterExpression dbParameterExpression,
IDbHelper? dbHelper)
{
var method = StaticType.IDbHelper.GetMethod(nameof(IDbHelper.DynamicHandler))!
.MakeGenericMethod(dbCommandExpression.Type);
.MakeGenericMethod(dbParameterExpression.Type);
return Expression.Call(Expression.Constant(dbHelper),
method, dbCommandExpression, Expression.Constant("RepoDb.Internal.Compiler.Events[AfterCreateDbParameter]"));
method, dbParameterExpression, Expression.Constant("RepoDb.Internal.Compiler.Events[AfterCreateDbParameter]"));
}
}
Loading