public void WriteSql(SqlWriter writer, SqlGenerator sqlGenerator) { writer.Write("TOP "); writer.Write("("); TopCount.WriteSql(writer, sqlGenerator); writer.Write(")"); writer.Write(" "); if (WithTies) { writer.Write("WITH TIES "); } }
internal string GenerateSql(DbQueryCommandTree tree, out HashSet <string> paramsToForceNonUnicode) { _targets = new List <string>(); var targetTree = tree; selectStatementStack = new Stack <SqlSelectStatement>(); isParentAJoinStack = new Stack <bool>(); allExtentNames = new Dictionary <string, int>(StringComparer.OrdinalIgnoreCase); allColumnNames = new Dictionary <string, int>(StringComparer.OrdinalIgnoreCase); ISqlFragment result; if (BuiltInTypeKind.CollectionType == targetTree.Query.ResultType.EdmType.BuiltInTypeKind) { var sqlStatement = VisitExpressionEnsureSqlStatement(targetTree.Query); sqlStatement.IsTopMost = true; result = sqlStatement; } else { var sqlBuilder = new SqlBuilder(); sqlBuilder.Append("SELECT "); sqlBuilder.Append(targetTree.Query.Accept(this)); result = sqlBuilder; } if (isVarRefSingle) { throw new NotSupportedException(); } paramsToForceNonUnicode = new HashSet <string>(_candidateParametersToForceNonUnicode.Where(p => p.Value).Select(q => q.Key).ToList()); var builder = new StringBuilder(1024); var writer = new SqlWriter(builder); WriteSql(writer, result); return(builder.ToString()); }
public override void WriteSql(SqlWriter writer, SqlGenerator sqlGenerator) { writer.Write("SELECT "); if (IsDistinct) { writer.Write("DISTINCT "); } if (Top != null && Skip == null) { Top.WriteSql(writer, sqlGenerator); } if (IsEmpty) { writer.Write("*"); } else { var printedAny = WriteOptionalColumns(writer, sqlGenerator); if (!base.IsEmpty) { if (printedAny) { writer.Write(", "); } base.WriteSql(writer, sqlGenerator); } else if (!printedAny) { m_optionalColumns[0].MarkAsUsed(); m_optionalColumns[0].WriteSqlIfUsed(writer, sqlGenerator, ""); } } }
public void WriteSql(SqlWriter writer, SqlGenerator sqlGenerator) { List <string> outerExtentAliases = null; if ((null != outerExtents) && (0 < outerExtents.Count)) { foreach (var outerExtent in outerExtents.Keys) { var joinSymbol = outerExtent as JoinSymbol; if (joinSymbol != null) { foreach (var symbol in joinSymbol.FlattenedExtentList) { if (null == outerExtentAliases) { outerExtentAliases = new List <string>(); } outerExtentAliases.Add(symbol.NewName); } } else { if (null == outerExtentAliases) { outerExtentAliases = new List <string>(); } outerExtentAliases.Add(outerExtent.NewName); } } } var extentList = AllJoinExtents ?? fromExtents; if (null != extentList) { foreach (var fromAlias in extentList) { if ((null != outerExtentAliases) && outerExtentAliases.Contains(fromAlias.Name)) { var i = sqlGenerator.AllExtentNames[fromAlias.Name]; string newName; do { ++i; newName = fromAlias.Name + i.ToString(CultureInfo.InvariantCulture); }while (sqlGenerator.AllExtentNames.ContainsKey(newName)); sqlGenerator.AllExtentNames[fromAlias.Name] = i; fromAlias.NewName = newName; sqlGenerator.AllExtentNames[newName] = 0; } if (null == outerExtentAliases) { outerExtentAliases = new List <string>(); } outerExtentAliases.Add(fromAlias.NewName); } } writer.Indent += 1; @select.WriteSql(writer, sqlGenerator); writer.WriteLine(); writer.Write("FROM "); From.WriteSql(writer, sqlGenerator); if ((null != @where) && !Where.IsEmpty) { writer.WriteLine(); writer.Write("WHERE "); Where.WriteSql(writer, sqlGenerator); } if ((null != groupBy) && !GroupBy.IsEmpty) { writer.WriteLine(); writer.Write("GROUP BY "); GroupBy.WriteSql(writer, sqlGenerator); } if ((null != orderBy) && !OrderBy.IsEmpty && (IsTopMost || Select.Top != null || Select.Skip != null)) { writer.WriteLine(); writer.Write("ORDER BY "); OrderBy.WriteSql(writer, sqlGenerator); } if (null != Select.Skip) { writer.WriteLine(); WriteOffsetFetch(writer, Select.Top, Select.Skip, sqlGenerator); } --writer.Indent; }
internal SqlWriter WriteSql(SqlWriter writer, ISqlFragment sqlStatement) { sqlStatement.WriteSql(writer, this); return(writer); }
public void WriteSql(SqlWriter writer, SqlGenerator sqlGenerator) { }