|
81 | 81 | </xsl:variable> |
82 | 82 | <xsl:choose> |
83 | 83 | <xsl:when test="type[@isnull = 1]"> |
84 | | -<xsl:text> </xsl:text><xsl:value-of select="name"/> = reader[<xsl:value-of select="position()-1" />] == DBNull.Value ? null : (<xsl:apply-templates select="type"/>)reader[<xsl:value-of select="position()-1" />], |
| 84 | +<xsl:if test="not(type[@custom])"> |
| 85 | + <xsl:text> </xsl:text><xsl:value-of select="name"/> = reader[<xsl:value-of select="position()-1" />] == DBNull.Value ? null : (<xsl:apply-templates select="type"/>)reader[<xsl:value-of select="position()-1" />], |
| 86 | +</xsl:if> |
| 87 | +<xsl:if test="type[@custom]"> |
| 88 | + <xsl:text> </xsl:text><xsl:value-of select="name"/> = reader[<xsl:value-of select="position()-1" />] == DBNull.Value ? null : (<xsl:apply-templates select="type"/>)(typeof(<xsl:value-of select="type/@custom"/>).IsEnum ? Enum.ToObject(typeof(<xsl:value-of select="type/@custom"/>), reader[<xsl:value-of select="position()-1" />]) : Convert.ChangeType(reader[<xsl:value-of select="position()-1" />], typeof(<xsl:value-of select="type/@custom"/>), System.Globalization.CultureInfo.InvariantCulture)), |
| 89 | +</xsl:if> |
85 | 90 | </xsl:when> |
86 | 91 | <xsl:otherwise> |
87 | 92 | <xsl:if test="not(type[@custom])"> |
88 | 93 | <xsl:text> </xsl:text><xsl:value-of select="name"/> = (<xsl:apply-templates select="type"/>)reader[<xsl:value-of select="position()-1" />], |
89 | 94 | </xsl:if> |
90 | 95 | <xsl:if test="type[@custom]"> |
91 | | - <xsl:text> </xsl:text><xsl:value-of select="name"/> = (<xsl:apply-templates select="type"/>)(typeof(<xsl:apply-templates select="type"/>).IsEnum ? Enum.ToObject(typeof(<xsl:apply-templates select="type"/>), reader[<xsl:value-of select="position()-1" />]) : Convert.ChangeType(reader[<xsl:value-of select="position()-1" />], typeof(<xsl:apply-templates select="type"/>), System.Globalization.CultureInfo.InvariantCulture)), |
| 96 | + <xsl:text> </xsl:text><xsl:value-of select="name"/> = (<xsl:apply-templates select="type"/>)(typeof(<xsl:value-of select="type/@custom"/>).IsEnum ? Enum.ToObject(typeof(<xsl:value-of select="type/@custom"/>), reader[<xsl:value-of select="position()-1" />]) : Convert.ChangeType(reader[<xsl:value-of select="position()-1" />], typeof(<xsl:value-of select="type/@custom"/>), System.Globalization.CultureInfo.InvariantCulture)), |
92 | 97 | </xsl:if> |
93 | 98 | </xsl:otherwise> |
94 | 99 | </xsl:choose> |
|
111 | 116 | </xsl:template> |
112 | 117 | <xsl:template match="input">, <xsl:apply-templates select="./type" mode="input"/><xsl:text> </xsl:text><xsl:value-of select="name"/></xsl:template> |
113 | 118 |
|
| 119 | +<xsl:template match="query" mode="returntype"> |
| 120 | + <xsl:variable name="name" select="../name"/> |
| 121 | + <xsl:variable name="nboutput" select="count(output)"/> |
| 122 | + <xsl:variable name="nboutputmultiple" select="@multiplerows = 1"/> |
| 123 | + <xsl:if test="position() != 1">, </xsl:if> |
| 124 | + <xsl:if test="$nboutput = 1 and $nboutputmultiple = 0"><xsl:apply-templates select="output/type"/></xsl:if> |
| 125 | + <xsl:if test="$nboutput > 1 and $nboutputmultiple = 0"><xsl:value-of select="../name"/>ResultQuery<xsl:value-of select="position()" /></xsl:if> |
| 126 | + <xsl:if test="$nboutputmultiple = 1">List<<xsl:value-of select="../name"/>ResultQuery<xsl:value-of select="position()" />></xsl:if> |
| 127 | +</xsl:template> |
| 128 | + |
| 129 | +<xsl:template match="query" mode="initresult"> |
| 130 | + <xsl:variable name="name" select="../name"/> |
| 131 | + <xsl:variable name="nboutput" select="count(output)"/> |
| 132 | + <xsl:variable name="nboutputmultiple" select="@multiplerows = 1"/> |
| 133 | + <xsl:if test="$nboutput = 1 and $nboutputmultiple = 0"><xsl:apply-templates select="output/type"/> result<xsl:value-of select="position()" /> = default; |
| 134 | + </xsl:if> |
| 135 | + <xsl:if test="$nboutput > 1 and $nboutputmultiple = 0"><xsl:value-of select="../name"/>ResultQuery<xsl:value-of select="position()" /> result<xsl:value-of select="position()" /> = new <xsl:value-of select="../name"/>ResultQuery<xsl:value-of select="position()" />(); |
| 136 | + </xsl:if> |
| 137 | + <xsl:if test="$nboutputmultiple = 1">List<<xsl:value-of select="../name"/>ResultQuery<xsl:value-of select="position()" />> result<xsl:value-of select="position()" /> = new List<<xsl:value-of select="../name"/>ResultQuery<xsl:value-of select="position()" />>(); |
| 138 | + </xsl:if> |
| 139 | +</xsl:template> |
| 140 | + |
| 141 | +<xsl:template match="query" mode="getresult"> |
| 142 | + <xsl:variable name="nboutput" select="count(output)"/> |
| 143 | + <xsl:variable name="returntype"> |
| 144 | + <xsl:apply-templates select="output/type"/> |
| 145 | + </xsl:variable> |
| 146 | + // <xsl:value-of select="../name"/>ResultQuery<xsl:value-of select="position()" /> |
| 147 | + <xsl:if test="position() != 1"> |
| 148 | + if(!await reader.NextResultAsync()) |
| 149 | + throw new InvalidOperationException("<xsl:value-of select="../name"/>Result query <xsl:value-of select="position()" /> invalid number of result"); |
| 150 | + </xsl:if> |
| 151 | + <!-- Return only one value --> |
| 152 | + <xsl:if test="$nboutput = 1 and @multiplerows = 0"> |
| 153 | + if(!await reader.ReadAsync()) |
| 154 | + throw new InvalidOperationException("<xsl:value-of select="../name"/>Result query <xsl:value-of select="position()" /> return no row"); |
| 155 | + <xsl:if test="output/type[@isnull = 0]"> |
| 156 | + <xsl:if test="not(output/type[@custom])"> |
| 157 | + result<xsl:value-of select="position()" /> = (<xsl:value-of select="$returntype"/>)reader[0]; |
| 158 | + </xsl:if> |
| 159 | + <xsl:if test="output/type[@custom]"> |
| 160 | + result<xsl:value-of select="position()" /> = (<xsl:value-of select="$returntype"/>)Convert.ChangeType(reader[0], typeof(<xsl:value-of select="$returntype"/>), System.Globalization.CultureInfo.InvariantCulture); |
| 161 | + </xsl:if> |
| 162 | + </xsl:if> |
| 163 | + <xsl:if test="output/type[@isnull = 1]"> |
| 164 | + <xsl:if test="not(output/type[@custom])"> |
| 165 | + result<xsl:value-of select="position()" /> = reader[0] == DBNull.Value ? null : (<xsl:value-of select="$returntype"/>)reader[0]; |
| 166 | + </xsl:if> |
| 167 | + <xsl:if test="output/type[@custom]"> |
| 168 | + result<xsl:value-of select="position()" /> = reader[0] == DBNull.Value ? null : (<xsl:value-of select="$returntype"/>)Convert.ChangeType(reader[0], typeof(<xsl:value-of select="$returntype"/>), System.Globalization.CultureInfo.InvariantCulture); |
| 169 | + </xsl:if> |
| 170 | + </xsl:if> |
| 171 | + </xsl:if> |
| 172 | + |
| 173 | + <!-- Return one multiple columns --> |
| 174 | + <xsl:if test="$nboutput > 1 and @multiplerows = 0"> |
| 175 | + if(!await reader.ReadAsync()) |
| 176 | + throw new InvalidOperationException("<xsl:value-of select="../name"/>Result query <xsl:value-of select="position()" /> return no row"); |
| 177 | + |
| 178 | + result<xsl:value-of select="position()" /> = new <xsl:value-of select="../name"/>ResultQuery<xsl:value-of select="position()" /> |
| 179 | + { |
| 180 | +<xsl:apply-templates select="." mode="outputassign"/> |
| 181 | + }; |
| 182 | + </xsl:if> |
| 183 | + |
| 184 | + <!-- Return several row of one column --> |
| 185 | + <xsl:if test="$nboutput = 1 and @multiplerows = 1"> |
| 186 | + while (reader.Read()) |
| 187 | + result<xsl:value-of select="position()" />.Add(<xsl:apply-templates select="." mode="outputconvert"/>); |
| 188 | + </xsl:if> |
| 189 | + |
| 190 | + <!-- Return several row multiple columns --> |
| 191 | + <xsl:if test="$nboutput > 1 and @multiplerows = 1"> |
| 192 | + while (reader.Read()) |
| 193 | + result<xsl:value-of select="position()" />.Add(new <xsl:value-of select="../name"/>ResultQuery<xsl:value-of select="position()" /> |
| 194 | + { |
| 195 | +<xsl:apply-templates select="." mode="outputassign"/> |
| 196 | + }); |
| 197 | + </xsl:if> |
| 198 | + |
| 199 | +</xsl:template> |
| 200 | + |
114 | 201 | <xsl:template match="sql"> |
115 | 202 | <xsl:variable name="nboutput" select="count(query[@ignore = 0]/output)"/> |
116 | 203 | <xsl:variable name="nboutputmultiple" select="count(query[@ignore = 0 and @multiplerows = 1])"/> |
117 | | - |
| 204 | +<xsl:variable name="nbquery" select="count(query[@ignore = 0])"/> |
| 205 | + |
118 | 206 | <!-- Non Query Insert Delete Update --> |
119 | 207 | <xsl:if test="$nboutput = 0"> |
120 | 208 | public static async Task<int> <xsl:value-of select="name"/>(MySqlConnection conn, MySqlTransaction transaction<xsl:apply-templates select="query/input"/>) |
|
146 | 234 | }; |
147 | 235 | <xsl:for-each select="query/input"><xsl:if test="type[@array != 1]">sqlCmd.Parameters.AddWithValue("@<xsl:value-of select="name"/>", <xsl:value-of select="name"/>); |
148 | 236 | </xsl:if></xsl:for-each> |
149 | | - Object result = await sqlCmd.ExecuteScalarAsync(); |
| 237 | + object result = await sqlCmd.ExecuteScalarAsync(); |
150 | 238 | if (result != null) |
151 | | - <xsl:if test="not(query[@ignore = 0]/output/type[@custom])">return (<xsl:value-of select="$returntype"/>)result;</xsl:if> |
152 | | - <xsl:if test="query[@ignore = 0]/output/type[@custom]">return (<xsl:value-of select="$returntype"/>)Convert.ChangeType(result, typeof(<xsl:value-of select="$returntype"/>), System.Globalization.CultureInfo.InvariantCulture);</xsl:if> |
| 239 | + <xsl:if test="query[@ignore = 0]/output/type[@isnull = 0]"> |
| 240 | + <xsl:if test="not(query[@ignore = 0]/output/type[@custom]) and not(query[@ignore = 0]/output/type[@lastinsertid = 1])">return (<xsl:value-of select="$returntype"/>)result;</xsl:if> |
| 241 | + <xsl:if test="query[@ignore = 0]/output/type[@custom] or query[@ignore = 0]/output/type[@lastinsertid = 1]">return (<xsl:value-of select="$returntype"/>)Convert.ChangeType(result, typeof(<xsl:value-of select="$returntype"/>), System.Globalization.CultureInfo.InvariantCulture);</xsl:if> |
| 242 | + </xsl:if> |
| 243 | + <xsl:if test="query[@ignore = 0]/output/type[@isnull = 1]"> |
| 244 | + <xsl:if test="not(query[@ignore = 0]/output/type[@custom])">return result == DBNull.Value ? null : (<xsl:value-of select="$returntype"/>)result;</xsl:if> |
| 245 | + <xsl:if test="query[@ignore = 0]/output/type[@custom]">return result == DBNull.Value ? null : (<xsl:value-of select="$returntype"/>)Convert.ChangeType(result, typeof(<xsl:value-of select="$returntype"/>), System.Globalization.CultureInfo.InvariantCulture);</xsl:if> |
| 246 | + </xsl:if> |
153 | 247 | if (!returnDefault) |
154 | 248 | throw new InvalidOperationException("<xsl:value-of select="name"/> return no row"); |
155 | 249 | return default; |
156 | 250 | } |
157 | 251 | </xsl:if> |
158 | 252 |
|
159 | 253 | <!-- Return one multiple columns --> |
160 | | -<xsl:if test="$nboutput > 1 and $nboutputmultiple = 0"> |
| 254 | +<xsl:if test="$nboutput > 1 and $nboutputmultiple = 0 and $nbquery = 1"> |
161 | 255 | public class <xsl:value-of select="name"/>Result |
162 | 256 | { |
163 | 257 | <xsl:apply-templates select="query/output"/> } |
|
210 | 304 | </xsl:if> |
211 | 305 |
|
212 | 306 | <!-- Return several row multiple columns --> |
213 | | -<xsl:if test="$nboutput > 1 and $nboutputmultiple = 1"> |
| 307 | +<xsl:if test="$nboutput > 1 and $nboutputmultiple = 1 and $nbquery = 1"> |
214 | 308 | public class <xsl:value-of select="name"/>Result |
215 | 309 | { |
216 | 310 | <xsl:apply-templates select="query/output"/> } |
|
238 | 332 | return listResult; |
239 | 333 | } |
240 | 334 | </xsl:if> |
| 335 | + |
| 336 | +<!-- Return several queries --> |
| 337 | +<xsl:if test="$nboutput > 1 and $nbquery > 1"> |
| 338 | +<xsl:variable name="name" select="name"/> |
| 339 | +<xsl:for-each select="query[@ignore = 0]"> |
| 340 | + <xsl:if test="count(output) > 1"> |
| 341 | + public class <xsl:value-of select="$name"/>ResultQuery<xsl:value-of select="position()" /> |
| 342 | + { |
| 343 | +<xsl:apply-templates select="output"/> } |
| 344 | + </xsl:if> |
| 345 | +</xsl:for-each> |
| 346 | + public static async Task<(<xsl:apply-templates select="query[@ignore = 0]" mode="returntype"/>)> <xsl:value-of select="name"/>(MySqlConnection conn, MySqlTransaction transaction<xsl:apply-templates select="query/input"/>) |
| 347 | + { |
| 348 | + using MySqlCommand sqlCmd = new MySqlCommand |
| 349 | + { |
| 350 | + Connection = conn, |
| 351 | + Transaction = transaction, |
| 352 | + CommandText = @"<xsl:value-of select="text"/>"<xsl:for-each select="query/input/type[@array = 1]">.Replace("@<xsl:value-of select="../name"/>", (<xsl:value-of select="../name"/> != null && <xsl:value-of select="../name"/>.Any()) ? string.Join(",", <xsl:value-of select="../name"/>) : "NULL", StringComparison.Ordinal)</xsl:for-each> |
| 353 | + }; |
| 354 | + <xsl:for-each select="query/input"><xsl:if test="type[@array != 1]">sqlCmd.Parameters.AddWithValue("@<xsl:value-of select="name"/>", <xsl:value-of select="name"/>); |
| 355 | + </xsl:if></xsl:for-each> |
| 356 | + <xsl:text> |
| 357 | + </xsl:text> |
| 358 | + <xsl:apply-templates select="query[@ignore = 0]" mode="initresult"/> |
| 359 | + using (DbDataReader reader = await sqlCmd.ExecuteReaderAsync()) |
| 360 | + if (reader != null) |
| 361 | + { |
| 362 | + <xsl:apply-templates select="query[@ignore = 0]" mode="getresult"/> |
| 363 | + } |
| 364 | + |
| 365 | + return (<xsl:for-each select="query[@ignore = 0]"><xsl:if test="position() != 1">, </xsl:if>result<xsl:value-of select="position()" /></xsl:for-each>); |
| 366 | + } |
| 367 | + |
| 368 | +</xsl:if> |
241 | 369 |
|
242 | 370 | </xsl:template> |
243 | 371 |
|
244 | | -<xsl:template match="/">using MySql.Data.MySqlClient; |
| 372 | +<xsl:template match="/">using MySqlConnector; |
245 | 373 | using System; |
246 | 374 | using System.Collections.Generic; |
247 | 375 | using System.Data.Common; |
|
0 commit comments