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); }
/// <summary> /// 指定した構成要素の要素キーを取得 /// </summary> /// <param name="element"></param> /// <returns></returns> protected override object GetElementKey(ConfigurationElement element) { CollectConfigItem item = element as CollectConfigItem; return(item.Name); }