Пример #1
0
        protected DataAccessModelConfiguration CreatePostgresConfiguration(string databaseName)
        {
            var retval = PostgresConfiguration.Create(new PostgresSqlDatabaseContextInfo()
            {
                DatabaseName        = databaseName,
                ServerName          = "localhost",
                UserId              = "postgres",
                Password            = "******",
                NativeEnums         = false,
                Categories          = null,
                Pooling             = true,
                MinPoolSize         = 10,
                MaxPoolSize         = 10,
                SqlDataTypeProvider = Type.GetType("Shaolinq.Postgres.PostgresSqlDataTypeProvider, Shaolinq.Postgres")
            });

            retval.AlwaysSubmitDefaultValues               = this.alwaysSubmitDefaultValues;
            retval.ValueTypesAutoImplicitDefault           = this.valueTypesAutoImplicitDefault;
            retval.SaveAndReuseGeneratedAssemblies         = true;
            retval.SqlDatabaseContextInfos[0].SqlDataTypes = new List <Type> {
                typeof(SqlFixedDateDataType)
            };

            return(retval);
        }
        public PostgresReadModelUnitOfWork(PostgresConfiguration configuration, IPostgresConnectionFactory connectionFactory)
        {
            Connection = connectionFactory.Create(configuration);
            Connection.Open();

            userRepository = new PostgresReadModelUserRepository(Connection);
            transaction    = null;
        }
        public void StartInit()
        {
            _netManager.RegisterNetMessage <MsgPreferencesAndSettings>(nameof(MsgPreferencesAndSettings));
            _netManager.RegisterNetMessage <MsgSelectCharacter>(nameof(MsgSelectCharacter),
                                                                HandleSelectCharacterMessage);
            _netManager.RegisterNetMessage <MsgUpdateCharacter>(nameof(MsgUpdateCharacter),
                                                                HandleUpdateCharacterMessage);

            _configuration.RegisterCVar("game.maxcharacterslots", 10);
            _configuration.RegisterCVar("database.prefs_engine", "sqlite");
            _configuration.RegisterCVar("database.prefs_sqlite_dbpath", "preferences.db");
            _configuration.RegisterCVar("database.prefs_pg_host", "localhost");
            _configuration.RegisterCVar("database.prefs_pg_port", 5432);
            _configuration.RegisterCVar("database.prefs_pg_database", "ss14_prefs");
            _configuration.RegisterCVar("database.prefs_pg_username", string.Empty);
            _configuration.RegisterCVar("database.prefs_pg_password", string.Empty);

            var engine = _configuration.GetCVar <string>("database.prefs_engine").ToLower();
            IDatabaseConfiguration dbConfig;

            switch (engine)
            {
            case "sqlite":
                var configPreferencesDbPath = _configuration.GetCVar <string>("database.prefs_sqlite_dbpath");
                var finalPreferencesDbPath  =
                    Path.Combine(_resourceManager.UserData.RootDir, configPreferencesDbPath);
                dbConfig = new SqliteConfiguration(
                    finalPreferencesDbPath
                    );
                break;

            case "postgres":
                dbConfig = new PostgresConfiguration(
                    _configuration.GetCVar <string>("database.prefs_pg_host"),
                    _configuration.GetCVar <int>("database.prefs_pg_port"),
                    _configuration.GetCVar <string>("database.prefs_pg_database"),
                    _configuration.GetCVar <string>("database.prefs_pg_username"),
                    _configuration.GetCVar <string>("database.prefs_pg_password")
                    );
                break;

            default:
                throw new NotImplementedException("Unknown database engine {engine}.");
            }

            var maxCharacterSlots = _configuration.GetCVar <int>("game.maxcharacterslots");

            // Actually loading the preferences database takes a while,
            // because EFCore has to initialize and run migrations.
            // We load it in the thread pool here and then fetch the .Result in FinishInit.
            // This means it'll run in parallel with other loading like prototypes & map load.
            _prefsDbLoadTask = Task.Run(() => new PreferencesDatabase(dbConfig, maxCharacterSlots));
        }
Пример #4
0
 protected DataAccessModelConfiguration CreatePostgresConfiguration(string databaseName)
 {
     return(PostgresConfiguration.Create(new PostgresSqlDatabaseContextInfo()
     {
         DatabaseName = databaseName,
         ServerName = "localhost",
         UserId = "postgres",
         Password = "******",
         NativeEnums = true,
         Categories = null
     }));
 }
Пример #5
0
        public WikiStore(PostgresConfiguration postgresConfiguration)
        {
            var connectionStrBuilder = new NpgsqlConnectionStringBuilder
            {
                Database = postgresConfiguration.Database,
                Host     = postgresConfiguration.Host,
                Port     = postgresConfiguration.Port,
                Username = postgresConfiguration.Username,
                Password = postgresConfiguration.Password
            };

            m_ConnectionString = connectionStrBuilder.ToString();
        }
        public void Constructor_SetsEverything_ToEmpty()
        {
            //Arrange
            var config = new PostgresConfiguration();

            //Act

            //Assert
            config.Host.Should().BeEmpty();
            config.Port.Should().Be(-1);
            config.Username.Should().BeEmpty();
            config.Password.Should().BeEmpty();
            config.Database.Should().BeEmpty();
        }
        public void GetConnectionString_ThrowsArgumentException_WhenUsernameIsMissing()
        {
            //Arrange
            var config = new PostgresConfiguration();

            config.Host     = fixture.Create <string>();
            config.Port     = fixture.Create <int>();
            config.Username = string.Empty;;
            config.Password = fixture.Create <string>();
            config.Database = fixture.Create <string>();

            //Act
            Action action = (() => config.GetConnectionString());

            //Assert
            Assert.Throws <ArgumentException>(action);
        }
        public void GetConnectionString_IsValid_WhenPortIsMissing()
        {
            //Arrange
            var config = new PostgresConfiguration();

            config.Host     = fixture.Create <string>();
            config.Port     = -1;
            config.Username = fixture.Create <string>();
            config.Password = fixture.Create <string>();
            config.Database = fixture.Create <string>();

            var expectedConnectionString = $"Host={config.Host};Username={config.Username};" +
                                           $"Password={config.Password};Database={config.Database}";

            //Act
            var connectionString = config.GetConnectionString();

            //Assert
            connectionString.Should().Be(expectedConnectionString);
        }
Пример #9
0
        public void StressTest()
        {
            var config = PostgresConfiguration.Create("StressTest", "localhost", "postgres", "postgres");

            (config.SqlDatabaseContextInfos[0] as PostgresSqlDatabaseContextInfo).MaxPoolSize = 2;
            (config.SqlDatabaseContextInfos[0] as PostgresSqlDatabaseContextInfo).KeepAlive   = 0;

            var dataModel = DataAccessModel.BuildDataAccessModel <TestDataAccessModel>(config);

            dataModel.Create(DatabaseCreationOptions.DeleteExistingDatabase);

            Console.WriteLine(dataModel.GetCurrentSqlDatabaseContext().ConnectionString);

            using (var scope = new DataAccessScope())
            {
                var school  = dataModel.Schools.Create();
                var student = dataModel.Students.Create();

                student.School    = school;
                student.Firstname = "Tum";
                student.Lastname  = "Nguyen";

                for (var i = 0; i < 10000; i++)
                {
                    var s2 = dataModel.Students.Create();

                    s2.School    = school;
                    s2.Firstname = "Student " + i;
                }

                scope.Complete();
            }

            const int numThreads = 10;

            var cancellationTokenSource = new CancellationTokenSource();

            var resetEvents = new List <WaitHandle>();

            for (var i = 0; i < numThreads; i++)
            {
                var resetEvent = new ManualResetEvent(false);
                resetEvents.Add(resetEvent);

                var dispatchThread = new Thread(_ =>
                {
                    while (!cancellationTokenSource.Token.IsCancellationRequested)
                    {
                        try
                        {
                            dataModel.Students.ToList();
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Test error: {0}", ex);
                        }
                    }

                    resetEvent.Set();
                })
                {
                    Name = $"Thread: {i + 1}"
                };

                dispatchThread.Start();
            }

            Thread.Sleep(10000);

            cancellationTokenSource.Cancel();

            WaitHandle.WaitAll(resetEvents.ToArray());
        }
Пример #10
0
 public PostgresqlContext(IOptions <PostgresConfiguration> configuration)
 {
     _configuration = configuration.Value ?? throw new ArgumentNullException(nameof(configuration));
 }
Пример #11
0
 public IPostgresConnection Create(PostgresConfiguration configuration)
 {
     return(new PostgresConnection(
                new NpgsqlConnection(configuration.GetConnectionString())
                ));
 }
Пример #12
0
 public void Connect()
 {
     var configuration = PostgresConfiguration.Create(ConnectionString);
     var model         = DataAccessModel.BuildDataAccessModel <MldbModel>(configuration);
 }