Beispiel #1
0
        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("}");
        }
Beispiel #2
0
 private static string getQueryCacheType(Query query, QueryPostSelectFromClause postSelectFromClause) =>
 DataAccessStatics.GetNamedParamList(info, query.selectFromClause + " " + postSelectFromClause.Value).Any()
                         ? "QueryRetrievalQueryCache<Row>"
                         : "ParameterlessQueryCache<Row>";
Beispiel #3
0
 private static string getQueryCacheName(Query query, QueryPostSelectFromClause postSelectFromClause, bool getFieldName) =>
 (getFieldName ? "rows" : "Rows") + postSelectFromClause.name +
 (DataAccessStatics.GetNamedParamList(info, query.selectFromClause + " " + postSelectFromClause.Value).Any() ? "Queries" : "Query");