// Add one gateway for each DatabaseN key, plus common settings public static void AddGateways(Dictionary <string, string> settings) { //Logger.Open(3); //Logger.OpenTrace(5); var cd = Directory.GetCurrentDirectory(); var common = settings .Where(s => _settingsdict.ContainsKey(s.Key) && _settingsdict[s.Key] == SettingOptions.Common) .ToDictionary(k => k.Key, v => v.Value); // root folder is set from Server object during app startup var root = (settings.ContainsKey("RootFolder")) ? settings["RootFolder"] : "."; foreach (var key in settings.Keys) { if (Regex.IsMatch(key, "^Database.*$")) { var values = settings[key].Split(','); var path = values[2].Replace("$RootFolder$", root); var gateway = GatewayFactory.Create(path, common); // This is an attempt to avoid later multi-threaded problems loading the catalog. // The type system is single-instance and is shared across database instances, // which may not be a good thing. gateway.OpenSession(); _gatewaydict[values[0]] = gateway; } } }
//------------------------------------------------------------------------- // Entry point: Create a gateway connection, return 1 if ok else set up message int Connect(string options) { //pg_elog(ElogLevel.NOTICE, $"Connect: '{options}'"); Logger.Open(0); try { var opts = Regex.Split(options, @"\s*,\s*"); foreach (var opt in opts) { if (opt == "Debug") { Debugger.Launch(); } else { var o = Regex.Split(opt, @"\s*\=\s*"); if (o.Length == 2) { _settings[o[0]] = o[1]; } else { Logger.WriteLine(1, $"Invalid option ignored: {opt}"); } } } var gateway = GatewayFactory.Create(_databasename, _settings); // send tracing as NOTICE so it won't get lost on a crash if (Logger.Level >= 2) { Logger.Open(5, new ElogWriter()); } Logger.WriteLine(1, $">Connect: {_databasename}, {options}"); // this is the function call interface _database = SqlTarget.Current.Database as PostgresDatabase; // must be set up by now // this is to install any initial functions var pgconn = PostgresConnect.Create(gateway, _database); Logger.Assert(pgconn != null, "pg function"); _pgfunction = pgconn; SqlTarget.Current.FunctionCreator = pgconn; return(1); } catch (Exception ex) { _error_message = ex.ToString(); return(0); } }