2016-08-03 10:59:49 +00:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
// <copyright file="SqlWriter.cs" company="Microsoft">
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
// </copyright>
|
|
|
|
//
|
2017-08-21 15:34:15 +00:00
|
|
|
// @owner Microsoft
|
|
|
|
// @backupOwner Microsoft
|
2016-08-03 10:59:49 +00:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Diagnostics;
|
|
|
|
using System.IO;
|
|
|
|
using System.Text;
|
|
|
|
using System.Data.SqlClient;
|
|
|
|
using System.Data.Metadata.Edm;
|
|
|
|
using System.Data.Common.CommandTrees;
|
|
|
|
|
|
|
|
namespace System.Data.SqlClient.SqlGen
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// This extends StringWriter primarily to add the ability to add an indent
|
|
|
|
/// to each line that is written out.
|
|
|
|
/// </summary>
|
|
|
|
class SqlWriter : StringWriter
|
|
|
|
{
|
|
|
|
// We start at -1, since the first select statement will increment it to 0.
|
|
|
|
int indent = -1;
|
|
|
|
/// <summary>
|
|
|
|
/// The number of tabs to be added at the beginning of each new line.
|
|
|
|
/// </summary>
|
|
|
|
internal int Indent
|
|
|
|
{
|
|
|
|
get { return indent; }
|
|
|
|
set { indent = value; }
|
|
|
|
}
|
|
|
|
|
|
|
|
bool atBeginningOfLine = true;
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
///
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="b"></param>
|
|
|
|
public SqlWriter(StringBuilder b)
|
|
|
|
: base(b, System.Globalization.CultureInfo.InvariantCulture)
|
|
|
|
// I don't think the culture matters, but FxCop wants something
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Reset atBeginningofLine if we detect the newline string.
|
|
|
|
/// <see cref="SqlBuilder.AppendLine"/>
|
|
|
|
/// Add as many tabs as the value of indent if we are at the
|
|
|
|
/// beginning of a line.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="value"></param>
|
|
|
|
public override void Write(string value)
|
|
|
|
{
|
|
|
|
if (value == "\r\n")
|
|
|
|
{
|
|
|
|
base.WriteLine();
|
|
|
|
atBeginningOfLine = true;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (atBeginningOfLine)
|
|
|
|
{
|
|
|
|
if (indent > 0)
|
|
|
|
{
|
|
|
|
base.Write(new string('\t', indent));
|
|
|
|
}
|
|
|
|
atBeginningOfLine = false;
|
|
|
|
}
|
|
|
|
base.Write(value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
///
|
|
|
|
/// </summary>
|
|
|
|
public override void WriteLine()
|
|
|
|
{
|
|
|
|
base.WriteLine();
|
|
|
|
atBeginningOfLine = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|