Skip to content

Commit 8e59f21

Browse files
committed
#774 Optional parameters in stored procedure. Thanks to @NeilN1
1 parent 2170f7f commit 8e59f21

File tree

11 files changed

+238
-180
lines changed

11 files changed

+238
-180
lines changed

EntityFramework.Reverse.POCO.Generator/Database.cs

Lines changed: 51 additions & 51 deletions
Large diffs are not rendered by default.

EntityFramework.Reverse.POCO.Generator/EF.Reverse.POCO.v3.ttinclude

Lines changed: 82 additions & 53 deletions
Large diffs are not rendered by default.

Generator/Generators/CodeGenerator.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,10 @@ public CodeGenerator(Generator generator, IDbContextFilter filter)
5454
sp.WriteStoredProcReturnType(_filter),
5555
sp.WriteStoredProcReturnModelName(filter),
5656
sp.WriteStoredProcFunctionName(filter),
57-
sp.WriteStoredProcFunctionParams(false),
58-
sp.WriteStoredProcFunctionParams(true),
57+
sp.WriteStoredProcFunctionParams(false, true),
58+
sp.WriteStoredProcFunctionParams(false, false),
59+
sp.WriteStoredProcFunctionParams(true, true),
60+
sp.WriteStoredProcFunctionParams(true, false),
5961
sp.StoredProcHasOutParams() || sp.ReturnModels.Count == 0,
6062
sp.WriteStoredProcFunctionOverloadCall(),
6163
sp.WriteStoredProcFunctionSetSqlParameters(false),
@@ -91,7 +93,8 @@ public CodeGenerator(Generator generator, IDbContextFilter filter)
9193
tvf.ReturnModels.Count == 1 && tvf.ReturnModels[0].Count == 1 ? tvf.ReturnModels[0][0].ColumnName : null,
9294
tvf.WriteStoredProcFunctionName(_filter),
9395
tvf.WriteStoredProcReturnModelName(_filter),
94-
tvf.WriteStoredProcFunctionParams(false),
96+
tvf.WriteStoredProcFunctionParams(false, true),
97+
tvf.WriteStoredProcFunctionParams(false, false),
9598
tvf.DbName,
9699
tvf.Schema.DbName,
97100
isEfCore ? tvf.WriteStoredProcFunctionDeclareSqlParameter(false) : tvf.WriteTableValuedFunctionDeclareSqlParameter(),
@@ -130,7 +133,8 @@ public CodeGenerator(Generator generator, IDbContextFilter filter)
130133
.Select(svf => new ScalarValuedFunctionsTemplateData(
131134
svf.WriteStoredProcFunctionName(_filter),
132135
svf.Parameters.Where(x => x.Mode == StoredProcedureParameterMode.Out).OrderBy(x => x.Ordinal).FirstOrDefault()?.PropertyType,
133-
svf.WriteStoredProcFunctionParams(false),
136+
svf.WriteStoredProcFunctionParams(false, true),
137+
svf.WriteStoredProcFunctionParams(false, false),
134138
svf.DbName,
135139
svf.Schema.DbName
136140
))

Generator/Generators/ScalarValuedFunctionsTemplateData.cs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,27 @@
22
{
33
public class ScalarValuedFunctionsTemplateData
44
{
5-
public string ExecName { get; }
6-
public string ReturnType { get; }
7-
public string WriteStoredProcFunctionParamsFalse { get; }
8-
public string Name { get; }
9-
public string Schema { get; }
5+
public string ExecName { get; }
6+
public string ReturnType { get; }
7+
public string WriteStoredProcFunctionParamsFalseTrue { get; }
8+
public string WriteStoredProcFunctionParamsFalseFalse { get; }
9+
public string Name { get; }
10+
public string Schema { get; }
1011

1112
public ScalarValuedFunctionsTemplateData(
1213
string execName,
1314
string returnType,
14-
string writeStoredProcFunctionParamsFalse,
15+
string writeStoredProcFunctionParamsFalseTrue,
16+
string writeStoredProcFunctionParamsFalseFalse,
1517
string name,
1618
string schema)
1719
{
18-
ExecName = execName;
19-
ReturnType = returnType;
20-
WriteStoredProcFunctionParamsFalse = writeStoredProcFunctionParamsFalse;
21-
Name = name;
22-
Schema = schema;
20+
ExecName = execName;
21+
ReturnType = returnType;
22+
WriteStoredProcFunctionParamsFalseTrue = writeStoredProcFunctionParamsFalseTrue;
23+
WriteStoredProcFunctionParamsFalseFalse = writeStoredProcFunctionParamsFalseFalse;
24+
Name = name;
25+
Schema = schema;
2326
}
2427
}
2528
}

Generator/Generators/StoredProcTemplateData.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ public class StoredProcTemplateData
1010
public string ReturnType { get; } // sp.WriteStoredProcReturnType()
1111
public string ReturnModelName { get; } // sp.WriteStoredProcReturnModelName()
1212
public string FunctionName { get; } // sp.WriteStoredProcFunctionName()
13-
public string WriteStoredProcFunctionParamsFalse { get; } // WriteStoredProcFunctionParams(false)
14-
public string WriteStoredProcFunctionParamsTrue { get; } // WriteStoredProcFunctionParams(true)
13+
public string WriteStoredProcFunctionParamsFalseTrue { get; } // WriteStoredProcFunctionParams(false, true)
14+
public string WriteStoredProcFunctionParamsFalseFalse { get; } // WriteStoredProcFunctionParams(false, false)
15+
public string WriteStoredProcFunctionParamsTrueTrue { get; } // WriteStoredProcFunctionParams(true, true)
16+
public string WriteStoredProcFunctionParamsTrueFalse { get; } // WriteStoredProcFunctionParams(true, false)
1517
public bool AsyncFunctionCannotBeCreated { get; } // sp.StoredProcHasOutParams() || sp.ReturnModels.Count == 0
1618
public string WriteStoredProcFunctionOverloadCall { get; } // sp.WriteStoredProcFunctionOverloadCall()
1719
public string WriteStoredProcFunctionSetSqlParametersFalse { get; } // WriteStoredProcFunctionSetSqlParameters(false)
@@ -36,8 +38,10 @@ public StoredProcTemplateData(
3638
string returnType,
3739
string returnModelName,
3840
string functionName,
39-
string writeStoredProcFunctionParamsFalse,
40-
string writeStoredProcFunctionParamsTrue,
41+
string writeStoredProcFunctionParamsFalseTrue,
42+
string writeStoredProcFunctionParamsFalseFalse,
43+
string writeStoredProcFunctionParamsTrueTrue,
44+
string writeStoredProcFunctionParamsTrueFalse,
4145
bool asyncFunctionCannotBeCreated,
4246
string writeStoredProcFunctionOverloadCall,
4347
string writeStoredProcFunctionSetSqlParametersFalse,
@@ -59,8 +63,10 @@ public StoredProcTemplateData(
5963
ReturnType = returnType;
6064
ReturnModelName = returnModelName;
6165
FunctionName = functionName;
62-
WriteStoredProcFunctionParamsFalse = writeStoredProcFunctionParamsFalse;
63-
WriteStoredProcFunctionParamsTrue = writeStoredProcFunctionParamsTrue;
66+
WriteStoredProcFunctionParamsFalseTrue = writeStoredProcFunctionParamsFalseTrue;
67+
WriteStoredProcFunctionParamsFalseFalse = writeStoredProcFunctionParamsFalseFalse;
68+
WriteStoredProcFunctionParamsTrueTrue = writeStoredProcFunctionParamsTrueTrue;
69+
WriteStoredProcFunctionParamsTrueFalse = writeStoredProcFunctionParamsTrueFalse;
6470
AsyncFunctionCannotBeCreated = asyncFunctionCannotBeCreated;
6571
WriteStoredProcFunctionOverloadCall = writeStoredProcFunctionOverloadCall;
6672
WriteStoredProcFunctionSetSqlParametersFalse = writeStoredProcFunctionSetSqlParametersFalse;

Generator/Generators/TableValuedFunctionsTemplateData.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ public class TableValuedFunctionsTemplateData
77
public string ExecName { get; }
88
public string ReturnClassName { get; }
99
public string PluralReturnClassName { get; }
10-
public string WriteStoredProcFunctionParamsFalse { get; }
10+
public string WriteStoredProcFunctionParamsFalseTrue { get; }
11+
public string WriteStoredProcFunctionParamsFalseFalse { get; }
1112
public string Name { get; }
1213
public string Schema { get; }
1314
public string WriteTableValuedFunctionDeclareSqlParameter { get; }
@@ -23,7 +24,8 @@ public TableValuedFunctionsTemplateData(bool singleReturnModel,
2324
string singleReturnColumnName,
2425
string execName,
2526
string returnClassName,
26-
string writeStoredProcFunctionParamsFalse,
27+
string writeStoredProcFunctionParamsFalseTrue,
28+
string writeStoredProcFunctionParamsFalseFalse,
2729
string name,
2830
string schema,
2931
string writeTableValuedFunctionDeclareSqlParameter,
@@ -40,7 +42,8 @@ public TableValuedFunctionsTemplateData(bool singleReturnModel,
4042
ExecName = execName;
4143
ReturnClassName = returnClassName;
4244
PluralReturnClassName = Inflector.MakePlural(returnClassName);
43-
WriteStoredProcFunctionParamsFalse = writeStoredProcFunctionParamsFalse;
45+
WriteStoredProcFunctionParamsFalseTrue = writeStoredProcFunctionParamsFalseTrue;
46+
WriteStoredProcFunctionParamsFalseFalse = writeStoredProcFunctionParamsFalseFalse;
4447
Name = name;
4548
Schema = schema;
4649
WriteTableValuedFunctionDeclareSqlParameter = writeTableValuedFunctionDeclareSqlParameter;

Generator/StoredProcedure.cs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,39 +52,52 @@ public bool StoredProcHasOutParams()
5252
return Parameters.Any(x => x.Mode != StoredProcedureParameterMode.In);
5353
}
5454

55-
public string WriteStoredProcFunctionParams(bool includeProcResult)
55+
public string WriteStoredProcFunctionParams(bool includeProcResult, bool forInterface)
5656
{
5757
var sb = new StringBuilder(255);
5858
var n = 1;
5959
var data = Parameters.Where(x => x.Mode != StoredProcedureParameterMode.Out).OrderBy(x => x.Ordinal).ToList();
6060
var count = data.Count;
61+
62+
if (includeProcResult && ReturnModels.Count > 0 && ReturnModels.First().Count > 0)
63+
{
64+
sb.Append("out int procResult");
65+
if (count > 0)
66+
sb.Append(", ");
67+
}
68+
6169
foreach (var p in data)
6270
{
63-
sb.AppendFormat("{0}{1}{2} {3}{4}",
71+
var notNullable = Column.StoredProcedureNotNullable.Contains(p.PropertyType.ToLower());
72+
73+
sb.AppendFormat("{0}{1}{2} {3}{4}{5}",
6474
p.Mode == StoredProcedureParameterMode.In ? string.Empty : "out ",
6575
p.PropertyType,
66-
Column.StoredProcedureNotNullable.Contains(p.PropertyType.ToLower()) ? string.Empty : "?",
76+
notNullable ? string.Empty : "?",
6777
p.NameHumanCase,
78+
notNullable || forInterface ? string.Empty : " = null",
6879
n++ < count ? ", " : string.Empty);
6980
}
7081

71-
if (includeProcResult && ReturnModels.Count > 0 && ReturnModels.First().Count > 0)
72-
sb.AppendFormat((data.Count > 0 ? ", " : string.Empty) + "out int procResult");
7382

7483
return sb.ToString();
7584
}
7685

7786
public string WriteStoredProcFunctionOverloadCall()
7887
{
7988
var sb = new StringBuilder(255);
89+
sb.Append("out procResult");
90+
if (Parameters.Any())
91+
sb.Append(", ");
92+
8093
foreach (var p in Parameters.OrderBy(x => x.Ordinal))
8194
{
8295
sb.AppendFormat("{0}{1}, ",
8396
p.Mode == StoredProcedureParameterMode.In ? string.Empty : "out ",
8497
p.NameHumanCase);
8598
}
8699

87-
sb.Append("out procResult");
100+
sb.Length -= 2;
88101
return sb.ToString();
89102
}
90103

0 commit comments

Comments
 (0)