private static void writeQueryMethod( TextWriter writer, Database database, EnterpriseWebLibrary.Configuration.SystemDevelopment.Query query, EnterpriseWebLibrary.Configuration.SystemDevelopment.QueryPostSelectFromClause postSelectFromClause) { // header CodeGenerationStatics.AddSummaryDocComment(writer, "Queries the database and returns the full results collection immediately."); writer.WriteLine( "public static IEnumerable<Row> GetRows" + postSelectFromClause.name + "( " + DataAccessStatics.GetMethodParamsFromCommandText(info, query.selectFromClause + " " + postSelectFromClause.Value) + " ) {"); // body var namedParamList = DataAccessStatics.GetNamedParamList(info, query.selectFromClause + " " + postSelectFromClause.Value); var getResultSetFirstArg = namedParamList.Any() ? "new[] { " + StringTools.ConcatenateWithDelimiter(", ", namedParamList.ToArray()) + " }, " : ""; writer.WriteLine("return Cache.Current." + getQueryCacheName(query, postSelectFromClause) + ".GetResultSet( " + getResultSetFirstArg + "() => {"); writer.WriteLine("var cmd = " + DataAccessStatics.GetConnectionExpression(database) + ".DatabaseInfo.CreateCommand();"); writer.WriteLine("cmd.CommandText = selectFromClause + @\"" + postSelectFromClause.Value + "\";"); DataAccessStatics.WriteAddParamBlockFromCommandText(writer, "cmd", info, query.selectFromClause + " " + postSelectFromClause.Value, database); writer.WriteLine("var results = new List<Row>();"); writer.WriteLine( DataAccessStatics.GetConnectionExpression(database) + ".ExecuteReaderCommand( cmd, r => { while( r.Read() ) results.Add( new Row( new BasicRow( r ) ) ); } );"); // Update single-row caches. writer.WriteLine("foreach( var i in results )"); writer.WriteLine("updateSingleRowCaches( i );"); writer.WriteLine("return results;"); writer.WriteLine("} );"); writer.WriteLine("}"); }
private static void writeMethod(TextWriter writer, Database database, RedStapler.StandardLibrary.Configuration.SystemDevelopment.CustomModification mod) { writer.WriteLine("public static void " + mod.name + "( " + DataAccessStatics.GetMethodParamsFromCommandText(info, StringTools.ConcatenateWithDelimiter("; ", mod.commands)) + " ) {"); writer.WriteLine(DataAccessStatics.GetConnectionExpression(database) + ".ExecuteInTransaction( delegate {"); var cnt = 0; foreach (var command in mod.commands) { var commandVariableName = "cmd" + cnt++; writer.WriteLine("DbCommand " + commandVariableName + " = " + DataAccessStatics.GetConnectionExpression(database) + ".DatabaseInfo.CreateCommand();"); writer.WriteLine(commandVariableName + ".CommandText = @\"" + command + "\";"); DataAccessStatics.WriteAddParamBlockFromCommandText(writer, commandVariableName, info, command, database); writer.WriteLine(DataAccessStatics.GetConnectionExpression(database) + ".ExecuteNonQueryCommand( " + commandVariableName + " );"); } writer.WriteLine("} );"); // execute in transaction call writer.WriteLine("}"); // method }
private static void writeMethod(TextWriter writer, IDatabase database, CustomModification mod, int?commandTimeout) { writer.WriteLine( $"public static void {mod.name}( {DataAccessStatics.GetMethodParamsFromCommandText( info, StringTools.ConcatenateWithDelimiter( "; ", mod.commands ) )} ) {{"); writer.WriteLine(DataAccessStatics.DataAccessStateCurrentDatabaseConnectionExpression + ".ExecuteInTransaction( delegate {"); var cnt = 0; foreach (var command in mod.commands) { var commandVariableName = "cmd" + cnt++; writer.WriteLine($"{TypeNames.DbCommand} {commandVariableName} = {DataAccessStatics.DataAccessStateCurrentDatabaseConnectionCreateCommandExpression( commandTimeout )};"); writer.WriteLine(commandVariableName + ".CommandText = @\"" + command + "\";"); DataAccessStatics.WriteAddParamBlockFromCommandText(writer, commandVariableName, info, command, database); writer.WriteLine($"{DataAccessStatics.DataAccessStateCurrentDatabaseConnectionExpression}.ExecuteNonQueryCommand( {commandVariableName} );"); } writer.WriteLine("} );"); // execute in transaction call writer.WriteLine("}"); // method }
private static void writeQueryMethod( TextWriter writer, IDatabase database, Query query, QueryPostSelectFromClause postSelectFromClause, int?commandTimeout) { // header CodeGenerationStatics.AddSummaryDocComment(writer, "Queries the database and returns the full results collection immediately."); writer.WriteLine( "public static IEnumerable<Row> GetRows" + postSelectFromClause.name + "( " + DataAccessStatics.GetMethodParamsFromCommandText(info, query.selectFromClause + " " + postSelectFromClause.Value) + " ) {"); // body var namedParamList = DataAccessStatics.GetNamedParamList(info, query.selectFromClause + " " + postSelectFromClause.Value); var getResultSetFirstArg = namedParamList.Any() ? "new[] { " + StringTools.ConcatenateWithDelimiter(", ", namedParamList.ToArray()) + " }, " : ""; writer.WriteLine("return Cache.Current." + getQueryCacheName(query, postSelectFromClause, false) + ".GetResultSet( " + getResultSetFirstArg + "() => {"); writer.WriteLine($"var cmd = {DataAccessStatics.DataAccessStateCurrentDatabaseConnectionCreateCommandExpression( commandTimeout )};"); writer.WriteLine("cmd.CommandText = selectFromClause"); if (!postSelectFromClause.Value.IsNullOrWhiteSpace()) { writer.Write($@"+ @""{postSelectFromClause.Value}"""); } writer.Write(";"); DataAccessStatics.WriteAddParamBlockFromCommandText(writer, "cmd", info, query.selectFromClause + " " + postSelectFromClause.Value, database); writer.WriteLine("var results = new List<Row>();"); writer.WriteLine( DataAccessStatics.DataAccessStateCurrentDatabaseConnectionExpression + ".ExecuteReaderCommand( cmd, r => { while( r.Read() ) results.Add( new Row( new BasicRow( r ) ) ); } );"); // Update single-row caches. writer.WriteLine("foreach( var i in results )"); writer.WriteLine("updateSingleRowCaches( i );"); writer.WriteLine("return results;"); writer.WriteLine("} );"); writer.WriteLine("}"); }