SqlBuilder.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / SqlClient / SqlGen / SqlBuilder.cs / 2 / SqlBuilder.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner  [....], [....]
//--------------------------------------------------------------------- 
 
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
{ 
    /// 
    /// This class is like StringBuilder.  While traversing the tree for the first time,
    /// we do not know all the strings that need to be appended e.g. things that need to be
    /// renamed, nested select statements etc.  So, we use a builder that can collect 
    /// all kinds of sql fragments.
    ///  
    internal sealed class SqlBuilder : ISqlFragment 
    {
        private List _sqlFragments; 
        private List sqlFragments
        {
            get
            { 
                if (null == _sqlFragments)
                { 
                    _sqlFragments = new List(); 
                }
                return _sqlFragments; 
            }
        }

 
        /// 
        /// Add an object to the list - we do not verify that it is a proper sql fragment 
        /// since this is an internal method. 
        /// 
        ///  
        public void Append(object s)
        {
            Debug.Assert(s != null);
            sqlFragments.Add(s); 
        }
 
        ///  
        /// This is to pretty print the SQL.  The writer 
        /// needs to know about new lines so that it can add the right amount of 
        /// indentation at the beginning of lines.
        /// 
        public void AppendLine()
        { 
            sqlFragments.Add("\r\n");
        } 
 
        /// 
        /// Whether the builder is empty.  This is used by the  
        /// to determine whether a sql statement can be reused.
        /// 
        public bool IsEmpty
        { 
            get { return ((null == _sqlFragments) || (0 == _sqlFragments.Count)); }
        } 
 
        #region ISqlFragment Members
 
        /// 
        /// We delegate the writing of the fragment to the appropriate type.
        /// 
        ///  
        /// 
        public void WriteSql(SqlWriter writer, SqlGenerator sqlGenerator) 
        { 
            if (null != _sqlFragments)
            { 
                foreach (object o in _sqlFragments)
                {
                    string str = (o as String);
                    if (null != str) 
                    {
                        writer.Write(str); 
                    } 
                    else
                    { 
                        ISqlFragment sqlFragment = (o as ISqlFragment);
                        if (null != sqlFragment)
                        {
                            sqlFragment.WriteSql(writer, sqlGenerator); 
                        }
                        else 
                        { 
                            throw new InvalidOperationException();
                        } 
                    }
                }
            }
        } 

        #endregion 
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner  [....], [....]
//--------------------------------------------------------------------- 
 
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
{ 
    /// 
    /// This class is like StringBuilder.  While traversing the tree for the first time,
    /// we do not know all the strings that need to be appended e.g. things that need to be
    /// renamed, nested select statements etc.  So, we use a builder that can collect 
    /// all kinds of sql fragments.
    ///  
    internal sealed class SqlBuilder : ISqlFragment 
    {
        private List _sqlFragments; 
        private List sqlFragments
        {
            get
            { 
                if (null == _sqlFragments)
                { 
                    _sqlFragments = new List(); 
                }
                return _sqlFragments; 
            }
        }

 
        /// 
        /// Add an object to the list - we do not verify that it is a proper sql fragment 
        /// since this is an internal method. 
        /// 
        ///  
        public void Append(object s)
        {
            Debug.Assert(s != null);
            sqlFragments.Add(s); 
        }
 
        ///  
        /// This is to pretty print the SQL.  The writer 
        /// needs to know about new lines so that it can add the right amount of 
        /// indentation at the beginning of lines.
        /// 
        public void AppendLine()
        { 
            sqlFragments.Add("\r\n");
        } 
 
        /// 
        /// Whether the builder is empty.  This is used by the  
        /// to determine whether a sql statement can be reused.
        /// 
        public bool IsEmpty
        { 
            get { return ((null == _sqlFragments) || (0 == _sqlFragments.Count)); }
        } 
 
        #region ISqlFragment Members
 
        /// 
        /// We delegate the writing of the fragment to the appropriate type.
        /// 
        ///  
        /// 
        public void WriteSql(SqlWriter writer, SqlGenerator sqlGenerator) 
        { 
            if (null != _sqlFragments)
            { 
                foreach (object o in _sqlFragments)
                {
                    string str = (o as String);
                    if (null != str) 
                    {
                        writer.Write(str); 
                    } 
                    else
                    { 
                        ISqlFragment sqlFragment = (o as ISqlFragment);
                        if (null != sqlFragment)
                        {
                            sqlFragment.WriteSql(writer, sqlGenerator); 
                        }
                        else 
                        { 
                            throw new InvalidOperationException();
                        } 
                    }
                }
            }
        } 

        #endregion 
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK