Exemple #1
0
        // 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;
                }
            }
        }
Exemple #2
0
        //-------------------------------------------------------------------------
        // 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);
            }
        }