private void CompileViews() { if (!_dbModel.Driver.Supports(DbFeatures.Views)) { return; } var views = _dbModel.Tables.Where(t => t.Kind == EntityKind.View).ToList(); if (views.Count == 0) { return; } // create dummy session, needed for LINQ translation var dummySession = new EntitySession(new OperationContext(this._entityModel.App), EntitySessionKind.Dummy); var engine = new LinqEngine(_dbModel); var emptyList = new List <string>(); foreach (var viewTbl in views) { var entInfo = viewTbl.Entity; var expr = entInfo.ViewDefinition.Query.Expression; var viewCmd = new DynamicLinqCommand(dummySession, expr, LinqCommandKind.View, LinqOperation.Select); LinqCommandRewriter.RewriteToLambda(viewCmd); var sql = engine.TranslateSelect(viewCmd); var cmdBuilder = new DataCommandBuilder(_driver, mode: SqlGenMode.NoParameters); //there might be some local values that are transformed into params. But they will be replaced with literals // when generating final SQL cmdBuilder.AddLinqStatement(sql, viewCmd.ParamValues); viewTbl.ViewSql = cmdBuilder.GetSqlText(); } }
// Insert-many are never cached - these are custom-built each time public SqlStatement GetCrudInsertMany(DbTableInfo table, IList <EntityRecord> records, DataCommandBuilder commandBuilder) { var sql = _crudSqlBuilder.BuildCrudInsertMany(table, records, commandBuilder); //commandBuilder is ICommandValueFormatter _driver.SqlDialect.ReviewSqlStatement(sql, table); return(sql); }