Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 2b25afd

Browse files
committed
Stored procedure proposal.
1 parent 006d9ab commit 2b25afd

File tree

5 files changed

+19
-13
lines changed

5 files changed

+19
-13
lines changed

src/ServiceStack.OrmLite.PostgreSQL.Tests/OrmLiteExecuteProcedureTests.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,12 @@ public void Can_execute_stored_procedure_with_array_arguments()
5757
db.ExecuteSql(Create);
5858
db.GetLastSql().Print();
5959

60-
var command = db.CreateCommand();
61-
var dialect = command.GetDialectProvider();
62-
((PostgreSQLDialectProvider)dialect).ExecuteFunction(command, new ServiceStackFunction
60+
db.ExecuteProcedure(new ServiceStackFunction
6361
{
6462
StringValues = new[] { "ServiceStack", "Thoughtfully Architected" },
6563
IntegerValues = new[] { 1, 2, 3 }
6664
});
65+
6766
db.ExecuteSql(Drop);
6867
}
6968
}

src/ServiceStack.OrmLite.PostgreSQL/PostgreSQLDialectProvider.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -371,24 +371,24 @@ protected override object GetValue<T>(FieldDefinition fieldDef, object obj)
371371
return base.GetValue<T>(fieldDef, obj);
372372
}
373373

374-
public void ExecuteFunction<T>(IDbCommand dbCommand, T obj)
374+
public override void PrepareStoredProcedureStatement<T>(IDbCommand cmd, T obj)
375375
{
376376
var tableType = obj.GetType();
377377
var modelDef = GetModel(tableType);
378378

379-
dbCommand.CommandText = GetQuotedTableName(modelDef);
380-
dbCommand.CommandType = CommandType.StoredProcedure;
379+
cmd.CommandText = GetQuotedTableName(modelDef);
380+
cmd.CommandType = CommandType.StoredProcedure;
381381

382382
foreach (var fieldDef in modelDef.FieldDefinitions)
383383
{
384-
var p = dbCommand.CreateParameter();
384+
var p = cmd.CreateParameter();
385385
SetParameter(fieldDef, p);
386-
dbCommand.Parameters.Add(p);
386+
cmd.Parameters.Add(p);
387387
}
388388

389-
SetParameterValues<T>(dbCommand, obj);
389+
SetParameterValues<T>(cmd, obj);
390390

391-
dbCommand.ExecuteNonQuery();
391+
cmd.ExecuteNonQuery();
392392
}
393393
}
394394
}

src/ServiceStack.OrmLite/IOrmLiteDialectProvider.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ string GetColumnDefinition(
8686

8787
bool PrepareParameterizedDeleteStatement<T>(IDbCommand cmd, ICollection<string> deleteFields = null);
8888

89+
void PrepareStoredProcedureStatement<T>(IDbCommand cmd, T obj);
90+
8991
void SetParameterValues<T>(IDbCommand dbCmd, object obj);
9092

9193
Dictionary<string, FieldDefinition> GetFieldDefinitionMap(ModelDefinition modelDef);

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,12 @@ public virtual bool PrepareParameterizedDeleteStatement<T>(IDbCommand cmd, IColl
688688
return hadRowVesion;
689689
}
690690

691+
public virtual void PrepareStoredProcedureStatement<T>(IDbCommand cmd, T obj)
692+
{
693+
cmd.CommandText = ToExecuteProcedureStatement(obj);
694+
cmd.CommandType = CommandType.StoredProcedure;
695+
}
696+
691697
protected void AddParameter(IDbCommand cmd, FieldDefinition fieldDef)
692698
{
693699
var p = cmd.CreateParameter();

src/ServiceStack.OrmLite/OrmLiteWriteCommandExtensions.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -907,9 +907,8 @@ internal static void SaveReferences<T, TRef>(this IDbCommand dbCmd, T instance,
907907
internal static void ExecuteProcedure<T>(this IDbCommand dbCmd, T obj)
908908
{
909909
var dialectProvider = dbCmd.GetDialectProvider();
910-
string sql = dialectProvider.ToExecuteProcedureStatement(obj);
911-
dbCmd.CommandType = CommandType.StoredProcedure;
912-
dbCmd.ExecuteSql(sql);
910+
dialectProvider.PrepareStoredProcedureStatement(dbCmd, obj);
911+
dbCmd.ExecuteNonQuery();
913912
}
914913

915914
internal static ulong GetRowVersion(this IDbCommand dbCmd, ModelDefinition modelDef, object id)

0 commit comments

Comments
 (0)