private static void writeQueryMethod( TextWriter writer, Database database, RedStapler.StandardLibrary.Configuration.SystemDevelopment.Query query, RedStapler.StandardLibrary.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, false) + ".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 string getQueryCacheName( RedStapler.StandardLibrary.Configuration.SystemDevelopment.Query query, RedStapler.StandardLibrary.Configuration.SystemDevelopment.QueryPostSelectFromClause postSelectFromClause, bool getFieldName) { return((getFieldName ? "rows" : "Rows") + postSelectFromClause.name + (DataAccessStatics.GetNamedParamList(info, query.selectFromClause + " " + postSelectFromClause.Value).Any() ? "Queries" : "Query")); }
private static string getQueryCacheType( RedStapler.StandardLibrary.Configuration.SystemDevelopment.Query query, RedStapler.StandardLibrary.Configuration.SystemDevelopment.QueryPostSelectFromClause postSelectFromClause) { return(DataAccessStatics.GetNamedParamList(info, query.selectFromClause + " " + postSelectFromClause.Value).Any() ? "QueryRetrievalQueryCache<Row>" : "ParameterlessQueryCache<Row>"); }