1- using Microsoft . CodeAnalysis . CSharp . Syntax ;
2- using Plugin ;
3- using static Microsoft . CodeAnalysis . CSharp . SyntaxFactory ;
4-
5- namespace SqlcGenCsharp . Drivers . Generators ;
6-
7- public class ExecDeclareGen ( DbDriver dbDriver )
8- {
9- private CommonGen CommonGen { get ; } = new ( dbDriver ) ;
10-
11- public MemberDeclarationSyntax Generate ( string queryTextConstant , string argInterface , Query query )
12- {
13- var parametersStr = CommonGen . GetMethodParameterList ( argInterface , query . Params ) ;
14- return ParseMemberDeclaration ( $$ """
15- public async Task {{ query . Name . ToMethodName ( dbDriver . Options . WithAsyncSuffix ) }} ({{ parametersStr }} )
16- {
17- {{ GetMethodBody ( queryTextConstant , query ) }}
18- }
19- """ ) ! ;
20- }
21-
22- private string GetMethodBody ( string queryTextConstant , Query query )
23- {
24- var sqlTextTransform = CommonGen . GetSqlTransformations ( query , queryTextConstant ) ;
25- var useDapper = dbDriver . Options . UseDapper ;
26-
27- var dapperParams = useDapper ? CommonGen . ConstructDapperParamsDict ( query ) : string . Empty ;
28- var sqlVar = sqlTextTransform != string . Empty ? Variable . TransformedSql . AsVarName ( ) : queryTextConstant ;
29- var transactionProperty = Variable . Transaction . AsPropertyName ( ) ;
30-
31- var noTxBody = useDapper ? GetDapperNoTxBody ( sqlVar , query ) : GetDriverNoTxBody ( sqlVar , query ) ;
32- var withTxBody = useDapper ? GetDapperWithTxBody ( sqlVar , query ) : GetDriverWithTxBody ( sqlVar , query ) ;
33-
34- return $$ """
35- {{ sqlTextTransform }}
36- {{ dapperParams }}
37- if (this.{{ transactionProperty }} == null)
38- {
39- {{ noTxBody }}
40- }
41- {{ withTxBody }}
42- """ ;
43- }
44-
45- private string GetDapperNoTxBody ( string sqlVar , Query query )
46- {
47- var connectionCommands = dbDriver . EstablishConnection ( query ) ;
48- var dapperArgs = CommonGen . GetDapperArgs ( query ) ;
49- return connectionCommands . GetConnectionOrDataSource . WrapBlock (
50- $ """
51- await { Variable . Connection . AsVarName ( ) } .ExecuteAsync({ sqlVar } { dapperArgs } );
52- return;
53- """
54- ) ;
55- }
56-
57- private string GetDapperWithTxBody ( string sqlVar , Query query )
58- {
59- var transactionProperty = Variable . Transaction . AsPropertyName ( ) ;
60- var dapperArgs = CommonGen . GetDapperArgs ( query ) ;
61- return $$ """
62- {{ dbDriver . TransactionConnectionNullExcetionThrow }}
63- await this.{{ transactionProperty }} .Connection.ExecuteAsync(
64- {{ sqlVar }} {{ dapperArgs }} ,
65- transaction: this.{{ transactionProperty }} );
66- """ ;
67- }
68-
69- private string GetDriverNoTxBody ( string sqlVar , Query query )
70- {
71- var connectionCommands = dbDriver . EstablishConnection ( query ) ;
72- var sqlCommands = dbDriver . CreateSqlCommand ( sqlVar ) ;
73- var commandBlock = sqlCommands . CommandCreation . WrapBlock (
74- $ """
75- { sqlCommands . SetCommandText . AppendSemicolonUnlessEmpty ( ) }
76- { dbDriver . AddParametersToCommand ( query ) }
77- { sqlCommands . PrepareCommand . AppendSemicolonUnlessEmpty ( ) }
78- await { Variable . Command . AsVarName ( ) } .ExecuteNonQueryAsync();
79- """
80- ) ;
81- return connectionCommands . GetConnectionOrDataSource . WrapBlock (
82- $$ """
83- {{ connectionCommands . ConnectionOpen . AppendSemicolonUnlessEmpty ( ) }}
84- {{ commandBlock }}
85- return;
86- """
87- ) ;
88- }
89-
90- private string GetDriverWithTxBody ( string sqlVar , Query query )
91- {
92- var transactionProperty = Variable . Transaction . AsPropertyName ( ) ;
93- var commandVar = Variable . Command . AsVarName ( ) ;
94-
95- return $$ """
96- {{ dbDriver . TransactionConnectionNullExcetionThrow }}
97- using (var {{ commandVar }} = this.{{ transactionProperty }} .Connection.CreateCommand())
98- {
99- {{ commandVar }} .CommandText = {{ sqlVar }} ;
100- {{ commandVar }} .Transaction = this.{{ transactionProperty }} ;
101- {{ dbDriver . AddParametersToCommand ( query ) }}
102- await {{ commandVar }} .ExecuteNonQueryAsync();
103- }
104- """ ;
105- }
1+ using Microsoft . CodeAnalysis . CSharp . Syntax ;
2+ using Plugin ;
3+ using static Microsoft . CodeAnalysis . CSharp . SyntaxFactory ;
4+
5+ namespace SqlcGenCsharp . Drivers . Generators ;
6+
7+ public class ExecDeclareGen ( DbDriver dbDriver )
8+ {
9+ private CommonGen CommonGen { get ; } = new ( dbDriver ) ;
10+
11+ public MemberDeclarationSyntax Generate ( string queryTextConstant , string argInterface , Query query )
12+ {
13+ var parametersStr = CommonGen . GetMethodParameterList ( argInterface , query . Params ) ;
14+ return ParseMemberDeclaration ( $$ """
15+ public async Task {{ query . Name . ToMethodName ( dbDriver . Options . WithAsyncSuffix ) }} ({{ parametersStr }} )
16+ {
17+ {{ GetMethodBody ( queryTextConstant , query ) }}
18+ }
19+ """ ) ! ;
20+ }
21+
22+ private string GetMethodBody ( string queryTextConstant , Query query )
23+ {
24+ var sqlTextTransform = CommonGen . GetSqlTransformations ( query , queryTextConstant ) ;
25+ var useDapper = dbDriver . Options . UseDapper ;
26+
27+ var dapperParams = useDapper ? CommonGen . ConstructDapperParamsDict ( query ) : string . Empty ;
28+ var sqlVar = sqlTextTransform != string . Empty ? Variable . TransformedSql . AsVarName ( ) : queryTextConstant ;
29+ var transactionProperty = Variable . Transaction . AsPropertyName ( ) ;
30+
31+ var noTxBody = useDapper ? GetDapperNoTxBody ( sqlVar , query ) : GetDriverNoTxBody ( sqlVar , query ) ;
32+ var withTxBody = useDapper ? GetDapperWithTxBody ( sqlVar , query ) : GetDriverWithTxBody ( sqlVar , query ) ;
33+
34+ return $$ """
35+ {{ sqlTextTransform }}
36+ {{ dapperParams }}
37+ if (this.{{ transactionProperty }} == null)
38+ {
39+ {{ noTxBody }}
40+ }
41+ {{ withTxBody }}
42+ """ ;
43+ }
44+
45+ private string GetDapperNoTxBody ( string sqlVar , Query query )
46+ {
47+ var connectionCommands = dbDriver . EstablishConnection ( query ) ;
48+ var dapperArgs = CommonGen . GetDapperArgs ( query ) ;
49+ return connectionCommands . GetConnectionOrDataSource . WrapBlock (
50+ $ """
51+ await { Variable . Connection . AsVarName ( ) } .ExecuteAsync({ sqlVar } { dapperArgs } );
52+ return;
53+ """
54+ ) ;
55+ }
56+
57+ private string GetDapperWithTxBody ( string sqlVar , Query query )
58+ {
59+ var transactionProperty = Variable . Transaction . AsPropertyName ( ) ;
60+ var dapperArgs = CommonGen . GetDapperArgs ( query ) ;
61+ return $$ """
62+ {{ dbDriver . TransactionConnectionNullExcetionThrow }}
63+ await this.{{ transactionProperty }} .Connection.ExecuteAsync(
64+ {{ sqlVar }} {{ dapperArgs }} ,
65+ transaction: this.{{ transactionProperty }} );
66+ """ ;
67+ }
68+
69+ private string GetDriverNoTxBody ( string sqlVar , Query query )
70+ {
71+ var connectionCommands = dbDriver . EstablishConnection ( query ) ;
72+ var sqlCommands = dbDriver . CreateSqlCommand ( sqlVar ) ;
73+ var commandBlock = sqlCommands . CommandCreation . WrapBlock (
74+ $ """
75+ { sqlCommands . SetCommandText . AppendSemicolonUnlessEmpty ( ) }
76+ { dbDriver . AddParametersToCommand ( query ) }
77+ { sqlCommands . PrepareCommand . AppendSemicolonUnlessEmpty ( ) }
78+ await { Variable . Command . AsVarName ( ) } .ExecuteNonQueryAsync();
79+ """
80+ ) ;
81+ return connectionCommands . GetConnectionOrDataSource . WrapBlock (
82+ $$ """
83+ {{ connectionCommands . ConnectionOpen . AppendSemicolonUnlessEmpty ( ) }}
84+ {{ commandBlock }}
85+ return;
86+ """
87+ ) ;
88+ }
89+
90+ private string GetDriverWithTxBody ( string sqlVar , Query query )
91+ {
92+ var transactionProperty = Variable . Transaction . AsPropertyName ( ) ;
93+ var commandVar = Variable . Command . AsVarName ( ) ;
94+
95+ return $$ """
96+ {{ dbDriver . TransactionConnectionNullExcetionThrow }}
97+ using (var {{ commandVar }} = this.{{ transactionProperty }} .Connection.CreateCommand())
98+ {
99+ {{ commandVar }} .CommandText = {{ sqlVar }} ;
100+ {{ commandVar }} .Transaction = this.{{ transactionProperty }} ;
101+ {{ dbDriver . AddParametersToCommand ( query ) }}
102+ await {{ commandVar }} .ExecuteNonQueryAsync();
103+ }
104+ """ ;
105+ }
106106}
0 commit comments