示例#1
0
        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("}");
        }
示例#2
0
 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"));
 }
示例#3
0
 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>");
 }
示例#4
0
        private static List <Column> validateQueryAndGetColumns(DBConnection cn, RedStapler.StandardLibrary.Configuration.SystemDevelopment.Query query)
        {
            // Attempt to query with every postSelectFromClause to ensure validity.
            foreach (var postSelectFromClause in query.postSelectFromClauses)
            {
                cn.ExecuteReaderCommandWithSchemaOnlyBehavior(
                    DataAccessStatics.GetCommandFromRawQueryText(cn, query.selectFromClause + " " + postSelectFromClause.Value),
                    r => { });
            }

            return(Column.GetColumnsInQueryResults(cn, query.selectFromClause, false));
        }
示例#5
0
 private static void writeCacheClass(TextWriter writer, Database database, RedStapler.StandardLibrary.Configuration.SystemDevelopment.Query query)
 {
     writer.WriteLine("private partial class Cache {");
     writer.WriteLine(
         "internal static Cache Current { get { return DataAccessState.Current.GetCacheValue( \"" + database.SecondaryDatabaseName + query.name +
         "QueryRetrieval\", () => new Cache() ); } }");
     foreach (var i in query.postSelectFromClauses)
     {
         var type = getQueryCacheType(query, i);
         writer.WriteLine("private readonly " + type + " " + getQueryCacheName(query, i, true) + " = new " + type + "();");
     }
     writer.WriteLine("private Cache() {}");
     foreach (var i in query.postSelectFromClauses)
     {
         var type = getQueryCacheType(query, i);
         writer.WriteLine("internal " + type + " " + getQueryCacheName(query, i, false) + " { get { return " + getQueryCacheName(query, i, true) + "; } }");
     }
     writer.WriteLine("}");
 }