public PostgreSQLRepository(PostgreSQLTypeLookup typeLookup, PostgreSQLConstants <T> sqlConstants, EntityUtils entityUtils,
                                    ExpressionUtils expressionUtils, PostgreSQLExecutor sqlExecutor, List <string> updateableFields) : base(typeLookup, sqlConstants, entityUtils,
                                                                                                                                            expressionUtils, sqlExecutor, updateableFields)
        {
            var sb = new StringBuilder();

            for (var i = 0; i < Fields.Length; i++)
            {
                var field = Fields[i];
                sb.Append($"{PostgreSQLConstants.PARAMETER_PRESIGN}{SQLConstants.PARAMETER_PREFIX}{field.Name.GetDelimitedName()},");
            }

            var lastComma = sb.ToString().LastIndexOf(',');

            sb.Remove(lastComma, 1);

            QueryInsert = $"{SQLConstants.SELECT} * {SQLConstants.FROM} {_sqlConstants.ProcedureNameInsert} (:{SQLConstants.UPDATED_BY_PARAMETER_NAME},:{SQLConstants.UID_PARAMETER_NAME},:{SQLConstants.NAME_PARAMETER_NAME},{sb});";
            QueryUpdate = $"{PostgreSQLConstants.CALL} {_sqlConstants.ProcedureNameUpdate} (:{SQLConstants.UPDATED_BY_PARAMETER_NAME},:{_sqlConstants.IdParameterName},:{SQLConstants.NAME_PARAMETER_NAME},{sb});";

            QueryDelete     = $"{PostgreSQLConstants.CALL} {_sqlConstants.ProcedureNameDelete} (:{SQLConstants.UPDATED_BY_PARAMETER_NAME},:{_sqlConstants.IdParameterName});";
            QueryUndoDelete = $"{PostgreSQLConstants.CALL} {_sqlConstants.ProcedureNameUndoDelete} (:{SQLConstants.UPDATED_BY_PARAMETER_NAME},:{_sqlConstants.IdParameterName});";
            QueryHardDelete = $"{PostgreSQLConstants.CALL} {_sqlConstants.ProcedureNameHardDelete} (:{SQLConstants.UPDATED_BY_PARAMETER_NAME},:{_sqlConstants.IdParameterName});";

            QuerySelectById = $"{SQLConstants.SELECT} * {SQLConstants.FROM} {_sqlConstants.ProcedureNameSelectById} (:{_sqlConstants.IdParameterName});";

            QuerySelectRevisions = $"{SQLConstants.SELECT} * {SQLConstants.FROM} {_sqlConstants.ProcedureNameSelectRevisions} (:{_sqlConstants.IdParameterName});";
            QueryRestoreRevision = $"{PostgreSQLConstants.CALL} {_sqlConstants.ProcedureNameRestoreRevision} (:{SQLConstants.UPDATED_BY_PARAMETER_NAME},:{_sqlConstants.IdParameterName},:{SQLConstants.REVISION_PARAMETER_NAME}, null);";
        }
Esempio n. 2
0
        public (PostgreSQLTypeLookup, EntityUtils, ConnectionSettings, PostgreSQLExecutor) Generate()
        {
            var connectionSettings = new ConnectionSettings();

            connectionSettings.DbName     = ConfigurationManager.AppSettings["DbName"];
            connectionSettings.DbHost     = ConfigurationManager.AppSettings["DbHost"];
            connectionSettings.DbUser     = ConfigurationManager.AppSettings["DbUser"];
            connectionSettings.DbPassword = ConfigurationManager.AppSettings["DbPass"];
            connectionSettings.DbPort     = ConfigurationManager.AppSettings["DbPort"];

            var typeLookup  = new PostgreSQLTypeLookup();
            var entityUtils = new EntityUtils(typeLookup, Assembly.GetExecutingAssembly());

            var masterConnectionString  = PostgreSQLConnectionFactory.GetConnectionString(connectionSettings.DbHost, connectionSettings.DbNameMaster, connectionSettings.DbUser, connectionSettings.DbPassword, connectionSettings.DbPort);
            var masterConnectionFactory = new PostgreSQLConnectionFactory(masterConnectionString);
            var sqlExecutorMaster       = new PostgreSQLExecutor(masterConnectionFactory, entityUtils);

            var connectionString  = PostgreSQLConnectionFactory.GetConnectionString(connectionSettings);
            var connectionFactory = new PostgreSQLConnectionFactory(connectionString);
            var sqlExecutor       = new PostgreSQLExecutor(connectionFactory, entityUtils);

            var dbGenerator = new PostgreSQLDbGenerator(typeLookup, entityUtils, sqlExecutorMaster, sqlExecutor);

            if (!dbGenerator.IsDbExistsDb(connectionSettings.DbName))
            {
                dbGenerator.CreateDb(connectionSettings.DbName);
                dbGenerator.Generate().Wait();
            }

            return(typeLookup, entityUtils, connectionSettings, sqlExecutor);
        }
        public void PostgreSQLDbGenerator_Generate()
        {
            var connectionSettings = GetConnectionSettings();

            connectionSettings.DbName += "_" + Guid.NewGuid().ToString("N");

            var typeLookup  = new PostgreSQLTypeLookup();
            var entityUtils = new EntityUtils(typeLookup, typeof(Project).Assembly);

            var masterConnectionString = PostgreSQLConnectionFactory.GetConnectionString(connectionSettings.DbHost, connectionSettings.DbNameMaster, connectionSettings.DbUser,
                                                                                         connectionSettings.DbPassword, connectionSettings.DbPort);
            var masterConnectionFactory = new PostgreSQLConnectionFactory(masterConnectionString);
            var sqlExecutorMaster       = new PostgreSQLExecutor(masterConnectionFactory, entityUtils);

            var connectionString  = PostgreSQLConnectionFactory.GetConnectionString(connectionSettings);
            var connectionFactory = new PostgreSQLConnectionFactory(connectionString);
            var sqlExecutor       = new PostgreSQLExecutor(connectionFactory, entityUtils);

            var dbGenerator = new PostgreSQLDbGenerator(typeLookup, entityUtils, sqlExecutorMaster, sqlExecutor);

            dbGenerator.CreateDb(connectionSettings.DbName);
            dbGenerator.Generate().Wait();

            Assert.True(dbGenerator.IsDbExistsDb(connectionSettings.DbName));

            sqlExecutorMaster.ExecuteSql($@"SELECT Pg_terminate_backend(pg_stat_activity.pid)
                                            FROM   pg_stat_activity
                                            WHERE  pg_stat_activity.datname = '{connectionSettings.DbName}'
                                                   AND pid <> Pg_backend_pid();

                                            DROP DATABASE {connectionSettings.DbName};").Wait();
        }
        private PostgreSQLExecutor GetSQLExecutor(string dbName)
        {
            var typeLookup  = new PostgreSQLTypeLookup();
            var entityUtils = new EntityUtils(typeLookup, GetAssemblyOfEntities());
            var sqlExecutor = new PostgreSQLExecutor(new PostgreSQLConnectionFactory(GetConnectionSettings(dbName)), entityUtils);

            return(sqlExecutor);
        }
        public PostgreSQLExecutor GetSQLExecutor(string dbName)
        {
            var typeLookup  = new PostgreSQLTypeLookup();
            var entityUtils = new EntityUtils(typeLookup, Assembly.GetExecutingAssembly());
            var sqlExecutor = new PostgreSQLExecutor(new PostgreSQLConnectionFactory(GetConnectionSettings(dbName)), entityUtils);

            return(sqlExecutor);
        }
        private async Task <PostgreSQLExecutor> GetSQLExecutor(string dbName)
        {
            var typeLookup         = new PostgreSQLTypeLookup();
            var entityUtils        = new EntityUtils(typeLookup, Assembly.GetExecutingAssembly());
            var connectionSettings = await GetConnectionSettings(dbName);

            var sqlExecutor = new PostgreSQLExecutor(new PostgreSQLConnectionFactory(connectionSettings), entityUtils);

            return(sqlExecutor);
        }
Esempio n. 7
0
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(Component.For <CryptoHelper>());

            var connectionSettings = new ConnectionSettings();

            connectionSettings.DbName     = ConfigurationManager.AppSettings[ConstantHelper.KEY_DB_NAME];
            connectionSettings.DbHost     = ConfigurationManager.AppSettings[ConstantHelper.KEY_DB_HOST];
            connectionSettings.DbUser     = ConfigurationManager.AppSettings[ConstantHelper.KEY_DB_USER];
            connectionSettings.DbPassword = ConfigurationManager.AppSettings[ConstantHelper.KEY_DB_PASS];
            connectionSettings.DbPort     = ConfigurationManager.AppSettings[ConstantHelper.KEY_DB_PORT];
            container.Register(Component.For <ConnectionSettings>().Instance(connectionSettings));

            var adminSettings = new AdminSettings();

            adminSettings.AdminEmail     = ConfigurationManager.AppSettings[ConstantHelper.KEY_SUPER_ADMIN_EMAIL];
            adminSettings.AdminFirstName = ConfigurationManager.AppSettings[ConstantHelper.KEY_SUPER_ADMIN_FIRST_NAME];
            adminSettings.AdminLastName  = ConfigurationManager.AppSettings[ConstantHelper.KEY_SUPER_ADMIN_LAST_NAME];
            adminSettings.AdminPassword  = ConfigurationManager.AppSettings[ConstantHelper.KEY_SUPER_ADMIN_PASS];
            container.Register(Component.For <AdminSettings>().Instance(adminSettings));

            container.Register(Component.For(typeof(PostgreSQLConstants <>)));

            var expressionUtils = new PostgreSQLExpressionUtils();

            container.Register(Component.For <ExpressionUtils>().Instance(expressionUtils));
            var typeLookup = new PostgreSQLTypeLookup();

            container.Register(Component.For <PostgreSQLTypeLookup>().Instance(typeLookup));

            var entityAssemblies = new[] { typeof(Organization).Assembly };
            var entityUtils      = new EntityUtils(typeLookup, entityAssemblies);

            container.Register(Component.For <EntityUtils>().Instance(entityUtils));

            container.Register(Component.For <PostgreSQLConnectionFactory>());
            container.Register(Component.For <NpgsqlConnection>()
                               .DependsOn(Dependency.OnValue("connectionString", PostgreSQLConnectionFactory.GetConnectionString(connectionSettings)))
                               .LifestyleTransient());

            container.Register(Component.For <PostgreSQLExecutor>().LifestyleTransient());
            container.Register(Component.For <PostgreSQLTransactionalExecutor>().LifestyleTransient());
        }
        private void EnsureDbGenerated(string dbName)
        {
            var masterExecutor = GetSQLExecutor(POSTGRES_DB_NAME);
            var isDbExist      = masterExecutor.ExecuteSqlReturningValue <bool>($"SELECT true FROM pg_database WHERE datname = '{dbName}';").Result;

            if (!isDbExist)
            {
                masterExecutor.ExecuteSql($"CREATE DATABASE {dbName};").Wait();
            }

            Sleep();

            if (!isDbExist)
            {
                var typeLookup  = new PostgreSQLTypeLookup();
                var entityUtils = new EntityUtils(typeLookup, GetAssemblyOfEntities());
                var executor    = GetSQLExecutor(dbName);
                var dbGenerator = new PostgreSQLDbGenerator(typeLookup, entityUtils, masterExecutor, executor);
                dbGenerator.Generate().Wait();
            }
        }
 public OrganizationRepository(PostgreSQLTypeLookup typeLookup, PostgreSQLConstants <Organization> sqlConstants, EntityUtils entityUtils, ExpressionUtils expressionUtils, PostgreSQLExecutor sqlExecutor, List <string> updateableFields) : base(typeLookup, sqlConstants, entityUtils, expressionUtils, sqlExecutor, updateableFields)
 {
 }
Esempio n. 10
0
 public ProjectRepository(PostgreSQLTypeLookup typeLookup, PostgreSQLConstants <Project> sqlConstants, EntityUtils entityUtils,
                          ExpressionUtils expressionUtils, PostgreSQLExecutor sqlExecutor) : base(typeLookup, sqlConstants, entityUtils,
                                                                                                  expressionUtils, sqlExecutor, GetUpdateableFieldsList())
 {
 }
Esempio n. 11
0
        public void PostgreSQLTypeLookup_HasDbType(Type type)
        {
            var typeLookup = new PostgreSQLTypeLookup();

            Assert.IsTrue(typeLookup.HasDbType(type));
        }