SqlBuilder.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / SqlClient / SqlGen / SqlBuilder.cs / 1305376 / SqlBuilder.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner  [....]
// @backupOwner [....] 
//--------------------------------------------------------------------- 

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 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 virtual bool IsEmpty 
        {
            get { return ((null == _sqlFragments) || (0 == _sqlFragments.Count)); } 
        } 

        #region ISqlFragment Members 

        /// 
        /// We delegate the writing of the fragment to the appropriate type.
        ///  
        /// 
        ///  
        public virtual 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