Пример #1
0
        private static Dictionary <String, Query> LoadQuery(SQLVersion ver)
        {
            Dictionary <String, Query> list      = new Dictionary <String, Query>();
            CollectConfigHandler       appconfig = null;

            Query.QueryTarget     target = Query.QueryTarget.Instance;
            ResourceSet           res    = null;
            IDictionaryEnumerator files  = null;
            CollectConfigItem     conf   = null;
            int system_query_num         = 0;
            int db_query_num             = 0;
            int instance_query_num       = 0;

            //  外部クエリのロード
            if (Parameters.ExternalQueryDir != null)
            {
                foreach (string filename in System.IO.Directory.GetFiles(Parameters.ExternalQueryDir, "*.sql"))
                {
                    using (StreamReader sr = new StreamReader(filename, System.Text.Encoding.Default))
                    {
                        // ファイル名が"Instance(大文字小文字を区別しない)"で開始されていた場合はインスタンスレベルのクエリであると解釈する
                        if (Path.GetFileName(filename).StartsWith("Instance", true, null))
                        {
                            target = Query.QueryTarget.Instance;
                            instance_query_num++;
                        }
                        // そうでない場合は、DB名が指定されている場合はDBレベルのクエリであると解釈する
                        else
                        {
                            if (Parameters.DatabaseName != null || Parameters.DatabaseNameList != null)
                            {
                                target = Query.QueryTarget.Database;
                                db_query_num++;
                            }
                            else
                            {
                                target = Query.QueryTarget.Instance;
                                instance_query_num++;
                            }
                        }

                        list.Add(Path.GetFileNameWithoutExtension(filename)
                                 , new Query(sr.ReadToEnd(), target));
#if TRACE
                        logger.Info("ExternalQuery = " + Path.GetFileNameWithoutExtension(filename)
                                    + ", Target = " + target.ToString()
                                    );
#endif
                    }
                }
            }

            //  内部クエリのロード
            if (!Parameters.IsExternalQueryOnly)
            {
                appconfig = (CollectConfigHandler)ConfigurationManager.GetSection("CollectConfig");

                //内部クエリのロード
                res = Properties.Resources.ResourceManager.GetResourceSet(new CultureInfo("en-US"), true, true);
                if (res == null)
                {
                    //リソースファイルが見つかりません
                    throw new Exception("Resource file can not be found");
                }

                files = res.GetEnumerator();
                while (files.MoveNext())
                {
                    String key = files.Entry.Key.ToString();
                    conf = (CollectConfigItem)appconfig.Query[key];
                    if (conf != null)
                    {
                        //HasFlag は .net v4以降
                        //if (conf.Run
                        //    && ((SQLVersion)conf.Version).HasFlag(ver))
                        if (
                            conf.Run
                            &&
                            (
                                ((((SQLVersion)conf.Version) & ver) == ver)
                                ||
                                (conf.Version == 0)
                            )
                            )
                        {
                            if (conf.Target.ToString().Equals("System"))
                            {
                                target = Query.QueryTarget.System;
                                system_query_num++;
                            }
                            else if (conf.Target.ToString().Equals("Instance"))
                            {
                                target = Query.QueryTarget.Instance;
                                instance_query_num++;
                            }
                            else if (conf.Target.ToString().Equals("Database"))
                            {
                                target = Query.QueryTarget.Database;
                                db_query_num++;
                            }
                            else
                            {
                                logger.Error(String.Format("Invalid target string({0}),", conf.Target.ToString()));
                            }

                            list.Add(files.Entry.Key.ToString()
                                     , new Query(files.Entry.Value.ToString(), target));
                        }

#if TRACE
                        logger.Info("InternalQuery = " + conf.Name.ToString()
                                    + ", Version = " + String.Format("0x{0:X4}", conf.Version)
                                    + ", Target = " + conf.Target.ToString()
                                    + ", Run = " + conf.Run.ToString()
                                    /* + ", Query = " + files.Entry.Value.ToString() */
                                    );
#endif

                        conf = null;
                    }
                }
            }
#if TRACE
            logger.Info("Total Query Count= " + (system_query_num + instance_query_num + db_query_num).ToString()
                        + ", System Query Count = " + system_query_num.ToString()
                        + ", Instance Query Count = " + instance_query_num.ToString()
                        + ", Database Query Count = " + db_query_num.ToString()
                        );
#endif
            return(list);
        }
Пример #2
0
        /// <summary>
        /// 指定した構成要素の要素キーを取得
        /// </summary>
        /// <param name="element"></param>
        /// <returns></returns>
        protected override object GetElementKey(ConfigurationElement element)
        {
            CollectConfigItem item = element as CollectConfigItem;

            return(item.Name);
        }