internal static StatementModificationInfo GetModificationInfo()
        {
            LocalDataStoreSlot        modificationData = Thread.GetNamedDataSlot(KEY_MODIFICATIONSTORE);
            StatementModificationInfo smi = (StatementModificationInfo)Thread.GetData(modificationData);

            return(smi);
        }
        public void AddToModificationManager()
        {
            if (IsValid)
            {
                StatementModificationInfo smInfo = DbStatementModificationManager.GetModificationInfo();
                if (smInfo == null)
                {
                    smInfo = new StatementModificationInfo();
                }

                smInfo.Modifiers[ModificationTypeKey] = this;
                DbStatementModificationManager.ExposeModificationInfoDataProvider(smInfo);
            }
        }
        internal static string ModifyDbStatement(string statementName, string originalStatement)
        {
            string val = originalStatement;

            StatementModificationInfo smi = GetModificationInfo();

            if (smi != null && smi.Modifiers != null && smi.Modifiers.Count > 0)
            {
                foreach (DbStatementModifierBase modifier in smi.Modifiers.Values)
                {
                    if (statementName.Equals(modifier.StatementName, StringComparison.Ordinal))
                    {
                        val = modifier.ProcessStatement(val);
                    }
                }
            }

            return(val);
        }
        public static void ExposeModificationInfoDataProvider(StatementModificationInfo smi)
        {
            LocalDataStoreSlot modificationData = Thread.GetNamedDataSlot(KEY_MODIFICATIONSTORE);

            Thread.SetData(modificationData, smi);
        }