Skip to content

Commit c5deb99

Browse files
committed
Replace some hardcoded validation exceptions with optional configuration properties
1 parent d0559db commit c5deb99

23 files changed

Lines changed: 122 additions & 211 deletions

src/Dibix.Sdk.Cli/CodeGenerationTaskRunner.cs

Lines changed: 0 additions & 41 deletions
This file was deleted.

src/Dibix.Sdk.Cli/SqlCodeAnalysisTaskRunner.cs

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/Dibix.Sdk.Cli/SqlCoreTaskRunner.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ protected override void Execute(InputConfiguration configuration)
3030
, references: configuration.GetItems("References")
3131
, defaultSecuritySchemes: configuration.GetItems("DefaultSecuritySchemes")
3232
, isEmbedded: configuration.GetSingleValue<bool>("IsEmbedded")
33+
, limitDdlStatements: configuration.GetSingleValue<bool>("LimitDdlStatements")
34+
, preventDmlReferences: configuration.GetSingleValue<bool>("PreventDmlReferences")
3335
, enableExperimentalFeatures: configuration.GetSingleValue<bool>("EnableExperimentalFeatures")
3436
, databaseSchemaProviderName: configuration.GetSingleValue<string>("DatabaseSchemaProviderName")
3537
, modelCollation: configuration.GetSingleValue<string>("ModelCollation")

src/Dibix.Sdk/CodeAnalysis/SqlCodeAnalysisContext.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,15 @@ TSqlModel model
2929
, string projectName
3030
, SqlCodeAnalysisConfiguration configuration
3131
, bool isEmbedded
32+
, bool limitDdlStatements
3233
, ISqlCodeAnalysisSuppressionService suppressionService
3334
, ILogger logger
3435
)
3536
{
3637
this._source = source;
3738
this._suppressionService = suppressionService;
3839
this._logger = logger;
39-
this.Model = new SqlModel(source, fragment, isScriptArtifact, projectName, isEmbedded, model, logger);
40+
this.Model = new SqlModel(source, fragment, isScriptArtifact, projectName, isEmbedded, limitDdlStatements, model, logger);
4041
this._hash = CalculateHash(source);
4142
this.Fragment = fragment;
4243
this.Configuration = configuration;

src/Dibix.Sdk/CodeAnalysis/SqlCodeAnalysisRuleEngine.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,30 @@ public sealed class SqlCodeAnalysisRuleEngine : ISqlCodeAnalysisRuleEngine, ISql
1717
private readonly string _projectName;
1818
private readonly SqlCodeAnalysisConfiguration _configuration;
1919
private readonly bool _isEmbedded;
20+
private readonly bool _limitDdlStatements;
2021
private readonly LockEntryManager _lockEntryManager;
2122
private readonly ILogger _logger;
2223
private readonly ICollection<Func<SqlCodeAnalysisContext, IEnumerable<SqlCodeAnalysisError>>> _rules;
2324
#endregion
2425

2526
#region Constructor
26-
private SqlCodeAnalysisRuleEngine(TSqlModel model, string projectName, SqlCodeAnalysisConfiguration configuration, bool isEmbedded, LockEntryManager lockEntryManager, ILogger logger)
27+
private SqlCodeAnalysisRuleEngine(TSqlModel model, string projectName, SqlCodeAnalysisConfiguration configuration, bool isEmbedded, bool limitDdlStatements, LockEntryManager lockEntryManager, ILogger logger)
2728
{
2829
this._model = model;
2930
this._projectName = projectName;
3031
this._configuration = configuration;
3132
this._isEmbedded = isEmbedded;
33+
this._limitDdlStatements = limitDdlStatements;
3234
this._lockEntryManager = lockEntryManager;
3335
this._logger = logger;
3436
this._rules = ScanRules().ToArray();
3537
}
3638
#endregion
3739

3840
#region Factory Methods
39-
public static SqlCodeAnalysisRuleEngine Create(TSqlModel model, string projectName, SqlCodeAnalysisConfiguration configuration, bool isEmbedded, LockEntryManager lockEntryManager, ILogger logger)
41+
public static SqlCodeAnalysisRuleEngine Create(TSqlModel model, string projectName, SqlCodeAnalysisConfiguration configuration, bool isEmbedded, bool limitDdlStatements, LockEntryManager lockEntryManager, ILogger logger)
4042
{
41-
return new SqlCodeAnalysisRuleEngine(model, projectName, configuration, isEmbedded, lockEntryManager, logger);
43+
return new SqlCodeAnalysisRuleEngine(model, projectName, configuration, isEmbedded, limitDdlStatements, lockEntryManager, logger);
4244
}
4345
#endregion
4446

@@ -76,7 +78,7 @@ private IEnumerable<SqlCodeAnalysisError> Analyze(string source, TSqlFragment fr
7678

7779
private SqlCodeAnalysisContext CreateContext(string source, TSqlFragment fragment, bool isScriptArtifact)
7880
{
79-
return new SqlCodeAnalysisContext(this._model, source, fragment, isScriptArtifact, this._projectName, this._configuration, this._isEmbedded, this, this._logger);
81+
return new SqlCodeAnalysisContext(this._model, source, fragment, isScriptArtifact, this._projectName, this._configuration, this._isEmbedded, this._limitDdlStatements, this, this._logger);
8082
}
8183

8284
private static IEnumerable<Func<SqlCodeAnalysisContext, IEnumerable<SqlCodeAnalysisError>>> ScanRules()

src/Dibix.Sdk/CodeAnalysis/SqlCodeAnalysisTask.cs

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,44 +11,12 @@ namespace Dibix.Sdk.CodeAnalysis
1111
{
1212
public static class SqlCodeAnalysisTask
1313
{
14-
public static bool Execute
15-
(
16-
string projectName
17-
, string databaseSchemaProviderName
18-
, string modelCollation
19-
, string namingConventionPrefix
20-
, bool isEmbedded
21-
, string staticCodeAnalysisSucceededFile
22-
, string resultsFile
23-
, ICollection<TaskItem> source
24-
, IEnumerable<TaskItem> scriptSource
25-
, ICollection<TaskItem> sqlReferencePath
26-
, ILogger logger
27-
)
28-
{
29-
TSqlModel model = PublicSqlDataSchemaModelLoader.Load(projectName, databaseSchemaProviderName, modelCollation, source, sqlReferencePath, logger);
30-
using (LockEntryManager lockEntryManager = LockEntryManager.Create())
31-
{
32-
return Execute
33-
(
34-
projectName
35-
, new SqlCodeAnalysisConfiguration(namingConventionPrefix)
36-
, isEmbedded
37-
, staticCodeAnalysisSucceededFile
38-
, resultsFile
39-
, source
40-
, scriptSource
41-
, lockEntryManager
42-
, logger
43-
, model
44-
);
45-
}
46-
}
4714
internal static bool Execute
4815
(
4916
string projectName
5017
, SqlCodeAnalysisConfiguration configuration
5118
, bool isEmbedded
19+
, bool limitDdlStatements
5220
, string staticCodeAnalysisSucceededFile
5321
, string resultsFile
5422
, ICollection<TaskItem> source
@@ -63,7 +31,7 @@ string projectName
6331

6432
ExecuteNativeCodeAnalysis(model, logger, staticCodeAnalysisSucceededFile, resultsFile);
6533

66-
ExecuteExtendedCodeAnalysis(projectName, configuration, isEmbedded, source, scriptSource, lockEntryManager, logger, model);
34+
ExecuteExtendedCodeAnalysis(projectName, configuration, isEmbedded, limitDdlStatements, source, scriptSource, lockEntryManager, logger, model);
6735

6836
return !logger.HasLoggedErrors;
6937
}
@@ -89,10 +57,10 @@ private static bool ExecuteNativeCodeAnalysis(TSqlModel model, ILogger logger, s
8957
return analysisResult != null;
9058
}
9159

92-
private static void ExecuteExtendedCodeAnalysis(string projectName, SqlCodeAnalysisConfiguration configuration, bool isEmbedded, ICollection<TaskItem> source, IEnumerable<TaskItem> scriptSource, LockEntryManager lockEntryManager, ILogger logger, TSqlModel model)
60+
private static void ExecuteExtendedCodeAnalysis(string projectName, SqlCodeAnalysisConfiguration configuration, bool isEmbedded, bool limitDdlStatements, IEnumerable<TaskItem> source, IEnumerable<TaskItem> scriptSource, LockEntryManager lockEntryManager, ILogger logger, TSqlModel model)
9361
{
9462
logger.LogMessage("Performing extended code analysis...");
95-
SqlCodeAnalysisRuleEngine codeAnalysisEngine = SqlCodeAnalysisRuleEngine.Create(model, projectName, configuration, isEmbedded, lockEntryManager, logger);
63+
SqlCodeAnalysisRuleEngine codeAnalysisEngine = SqlCodeAnalysisRuleEngine.Create(model, projectName, configuration, isEmbedded, limitDdlStatements, lockEntryManager, logger);
9664

9765
foreach (TaskItem inputFile in source)
9866
{

src/Dibix.Sdk/CodeGeneration/Model/CodeGenerationModelLoader.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ string projectName
2525
, IEnumerable<TaskItem> endpoints
2626
, IEnumerable<TaskItem> defaultSecuritySchemes
2727
, bool isEmbedded
28+
, bool limitDdlStatements
29+
, bool preventDmlReferences
2830
, bool enableExperimentalFeatures
2931
, string databaseSchemaProviderName
3032
, string modelCollation
@@ -71,7 +73,7 @@ string projectName
7173
// DDL statements however, need explicit markup, i.E. @Name at least
7274
bool requireExplicitMarkup = !isEmbedded;
7375
ISqlStatementParser parser = new SqlStoredProcedureParser(requireExplicitMarkup);
74-
Lazy<TSqlModel> modelAccessor = sqlModel != null ? new Lazy<TSqlModel>(() => sqlModel) : new Lazy<TSqlModel>(() => PublicSqlDataSchemaModelLoader.Load(projectName, databaseSchemaProviderName, modelCollation, source, sqlReferencePath, logger));
76+
Lazy<TSqlModel> modelAccessor = sqlModel != null ? new Lazy<TSqlModel>(() => sqlModel) : new Lazy<TSqlModel>(() => PublicSqlDataSchemaModelLoader.Load(preventDmlReferences, databaseSchemaProviderName, modelCollation, source, sqlReferencePath, logger));
7577
ISqlStatementFormatter formatter = SelectSqlStatementFormatter(isEmbedded);
7678
formatter.StripWhiteSpace = model.CommandTextFormatting == CommandTextFormatting.StripWhiteSpace;
7779
IDictionary<string, SecurityScheme> securitySchemeMap = new Dictionary<string, SecurityScheme>();
@@ -85,7 +87,7 @@ string projectName
8587
typeResolver.Register(new ContractDefinitionSchemaTypeResolver(schemaRegistry, contractDefinitionProvider, externalSchemaResolver, assemblyResolver, assemblyResolver, logger, productName, areaName), 1);
8688
typeResolver.Register(new UserDefinedTypeSchemaTypeResolver(schemaRegistry, userDefinedTypeProvider, externalSchemaResolver, assemblyResolver, logger), 2);
8789

88-
ISqlStatementDefinitionProvider sqlStatementDefinitionProvider = new SqlStatementDefinitionProvider(projectName, isEmbedded, analyzeAlways: true, rootNamespace, productName, areaName, parser, formatter, typeResolver, schemaRegistry, schemaDefinitionResolver, logger, normalizedSources, modelAccessor);
90+
ISqlStatementDefinitionProvider sqlStatementDefinitionProvider = new SqlStatementDefinitionProvider(projectName, isEmbedded, limitDdlStatements, analyzeAlways: true, rootNamespace, productName, areaName, parser, formatter, typeResolver, schemaRegistry, schemaDefinitionResolver, logger, normalizedSources, modelAccessor);
8991
IActionDefinitionResolverFacade actionResolver = new ActionDefinitionResolverFacade(productName, areaName, className, sqlStatementDefinitionProvider, externalSchemaResolver, assemblyResolver, lockEntryManager, schemaDefinitionResolver, schemaRegistry, logger);
9092
IControllerDefinitionProvider controllerDefinitionProvider = new ControllerDefinitionProvider(normalizedEndpoints, normalizedDefaultSecuritySchemes, securitySchemeMap, actionResolver, typeResolver, schemaDefinitionResolver, actionParameterSourceRegistry, actionParameterConverterRegistry, lockEntryManager, fileSystemProvider, logger);
9193

src/Dibix.Sdk/CodeGeneration/Model/SqlStatementDefinitionProvider.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ internal sealed class SqlStatementDefinitionProvider : ISqlStatementDefinitionPr
1010
#region Fields
1111
private readonly string _projectName;
1212
private readonly bool _isEmbedded;
13+
private readonly bool _limitDdlStatements;
1314
private readonly bool _analyzeAlways;
1415
private readonly string _rootNamespace;
1516
private readonly string _productName;
@@ -34,6 +35,7 @@ public SqlStatementDefinitionProvider
3435
(
3536
string projectName
3637
, bool isEmbedded
38+
, bool limitDdlStatements
3739
, bool analyzeAlways
3840
, string rootNamespace
3941
, string productName
@@ -50,6 +52,7 @@ string projectName
5052
{
5153
this._projectName = projectName;
5254
this._isEmbedded = isEmbedded;
55+
this._limitDdlStatements = limitDdlStatements;
5356
this._analyzeAlways = analyzeAlways;
5457
this._rootNamespace = rootNamespace;
5558
this._productName = productName;
@@ -86,6 +89,7 @@ private void Collect(IEnumerable<string> files)
8689
, modelAccessor: this._modelAccessor
8790
, projectName: this._projectName
8891
, isEmbedded: this._isEmbedded
92+
, limitDdlStatements: this._limitDdlStatements
8993
, analyzeAlways: this._analyzeAlways
9094
, rootNamspace: this._rootNamespace
9195
, productName: this._productName

src/Dibix.Sdk/CodeGeneration/Output/CodeGenerationTask.cs

Lines changed: 4 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -6,73 +6,6 @@ namespace Dibix.Sdk.CodeGeneration
66
{
77
public static class CodeGenerationTask
88
{
9-
public static bool Execute
10-
(
11-
string projectName
12-
, string projectDirectory
13-
, string productName
14-
, string areaName
15-
, string title
16-
, string version
17-
, string description
18-
, string baseUrl
19-
, string outputDirectory
20-
, string defaultOutputName
21-
, string clientOutputName
22-
, string externalAssemblyReferenceDirectory
23-
, ICollection<TaskItem> source
24-
, IEnumerable<TaskItem> contracts
25-
, IEnumerable<TaskItem> endpoints
26-
, IEnumerable<TaskItem> references
27-
, IEnumerable<TaskItem> defaultSecuritySchemes
28-
, bool isEmbedded
29-
, bool enableExperimentalFeatures
30-
, string databaseSchemaProviderName
31-
, string modelCollation
32-
, ICollection<TaskItem> sqlReferencePath
33-
, ILogger logger
34-
, out string[] additionalAssemblyReferences
35-
)
36-
{
37-
IActionParameterSourceRegistry actionParameterSourceRegistry = new ActionParameterSourceRegistry();
38-
IActionParameterConverterRegistry actionParameterConverterRegistry = new ActionParameterConverterRegistry();
39-
IFileSystemProvider fileSystemProvider = new PhysicalFileSystemProvider(projectDirectory);
40-
using (LockEntryManager lockEntryManager = LockEntryManager.Create())
41-
{
42-
return Execute
43-
(
44-
projectName
45-
, projectDirectory
46-
, productName
47-
, areaName
48-
, title
49-
, version
50-
, description
51-
, new EndpointConfiguration(baseUrl)
52-
, outputDirectory
53-
, defaultOutputName
54-
, clientOutputName
55-
, externalAssemblyReferenceDirectory
56-
, source
57-
, contracts
58-
, endpoints
59-
, references
60-
, defaultSecuritySchemes
61-
, isEmbedded
62-
, enableExperimentalFeatures
63-
, databaseSchemaProviderName
64-
, modelCollation
65-
, sqlReferencePath
66-
, actionParameterSourceRegistry
67-
, actionParameterConverterRegistry
68-
, lockEntryManager
69-
, fileSystemProvider
70-
, logger
71-
, sqlModel: null
72-
, out additionalAssemblyReferences
73-
);
74-
}
75-
}
769
internal static bool Execute
7710
(
7811
string projectName
@@ -93,6 +26,8 @@ string projectName
9326
, IEnumerable<TaskItem> references
9427
, IEnumerable<TaskItem> defaultSecuritySchemes
9528
, bool isEmbedded
29+
, bool limitDdlStatements
30+
, bool preventDmlReferences
9631
, bool enableExperimentalFeatures
9732
, string databaseSchemaProviderName
9833
, string modelCollation
@@ -127,6 +62,8 @@ string projectName
12762
, contracts
12863
, endpoints, defaultSecuritySchemes
12964
, isEmbedded
65+
, limitDdlStatements
66+
, preventDmlReferences
13067
, enableExperimentalFeatures
13168
, databaseSchemaProviderName
13269
, modelCollation

0 commit comments

Comments
 (0)