Esempio n. 1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public virtual void ConfigureServices(IServiceCollection services)
        {
            /*
             * // Configure Flexberry services (LockService and IDataService) via native DI.
             * {
             *  services.AddSingleton<IDataService>(provider =>
             *  {
             *      IDataService dataService = new PostgresDataService() { CustomizationString = CustomizationString };
             *      ExternalLangDef.LanguageDef.DataService = dataService;
             *
             *      return dataService;
             *  });
             *
             *  services.AddSingleton<ILockService, LockService>();
             * }
             */

            // Configure Flexberry services via Unity.
            {
                IUnityContainer unityContainer = UnityFactory.GetContainer();

                IDataService dataService = new PostgresDataService()
                {
                    CustomizationString = CustomizationString
                };

                unityContainer.RegisterInstance(dataService);
                ExternalLangDef.LanguageDef.DataService = dataService;

                unityContainer.RegisterInstance <ILockService>(new LockService(dataService));

                unityContainer.RegisterInstance <ISecurityManager>(new EmptySecurityManager());
            }

            services.AddMvcCore(options =>
            {
                options.Filters.Add <CustomExceptionFilter>();
                options.EnableEndpointRouting = false;
            })
            .AddFormatterMappings();

            services.AddOData();

            services.AddSingleton <IDataObjectFileAccessor>(provider =>
            {
                Uri baseUri = new Uri("http://localhost");

                if (ServerAddressesFeature != null && ServerAddressesFeature.Addresses != null)
                {
                    // This works with pure self-hosted service only.
                    baseUri = new Uri(ServerAddressesFeature.Addresses.Single());
                }

                var env = provider.GetRequiredService <IHostingEnvironment>();

                return(new DefaultDataObjectFileAccessor(baseUri, "api/File", "Uploads"));
            });
        }
 public PostgresDataServiceTest() : base("test")
 {
     foreach (var ds in DataServices)
     {
         if (ds is PostgresDataService)
         {
             DataService = ds as PostgresDataService;
         }
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Получить список льготных категорий личности по иду личности, имеющих указанную льготу
        /// </summary>
        /// <param name="leechnostId">Идентификатор личности</param>
        /// <param name="lgotaId">Идентификатор льготы</param>
        /// <returns>Список идов льготных категорий личности</returns>
        public static Guid[] GetLgotKatLeechnostiListForLeechnost(Guid leechnostId, Guid lgotaId)
        {
            List <Guid> lgotas = new List <Guid>();

            if (leechnostId == null || lgotaId == null)
            {
                return(new Guid[] { });
            }

            string sql =
                $@"select distinct LKL.primarykey
from LgKatLeechnosti LKL
inner join LgotKat LK on LK.primarykey=LKL.lgotKat
inner join LgotaDliaKat LDK on LDK.kategoriia=LK.primarykey
where LKL.leechnost='{leechnostId}'
and LDK.lgota='{lgotaId}'";

            IDbConnection dbConn     = null;
            IDataReader   dataReader = null;

            try
            {
                // Получаем коннекцию к базе данных и открываем соединение
                PostgresDataService DataSrv = (PostgresDataService)DataServiceProvider.DataService;
                dbConn = DataSrv.GetConnection();
                dbConn.Open();

                // Создаем команду и выполняем ее
                var comm = dbConn.CreateCommand();
                comm.CommandText = sql;
                dataReader       = comm.ExecuteReader();

                // Перегоняем результат запроса в массив
                while (dataReader.Read())
                {
                    lgotas.Add(Guid.Parse(dataReader.GetValue(0).ToString()));
                }
            }
            finally
            {
                if (dataReader != null)
                {
                    dataReader.Close();
                }
                if (dbConn != null)
                {
                    dbConn.Close();
                }
            }

            return(lgotas.ToArray());
        }
Esempio n. 4
0
        /// <summary>
        /// Получить список идов льгот для указанной льготной категории
        /// </summary>
        /// <param name="lgotKatId">Идентификатор льготной категории</param>
        /// <returns>Список идов льгот для льготной категории</returns>
        public static Guid[] GetLgotaListForLgotKat(Guid lgotKatId)
        {
            List <Guid> lgotas = new List <Guid>();

            if (lgotKatId == null)
            {
                return(new Guid[] { });
            }

            string sql =
                $@"SELECT DISTINCT LDK.lgota
FROM public.lgkatleechnosti LKL
INNER JOIN public.lgotKat LK ON LK.primarykey = LKL.lgotKat
INNER JOIN public.lgotaDliaKat LDK ON LK.primarykey = LDK.Kategoriia 
WHERE LK.primarykey='{lgotKatId}'
AND (LKL.dataOtmeny IS NULL OR LKL.dataOtmeny > GETDATE())";

            IDbConnection dbConn     = null;
            IDataReader   dataReader = null;

            try
            {
                // Получаем коннекцию к базе данных и открываем соединение
                PostgresDataService DataSrv = (PostgresDataService)DataServiceProvider.DataService;
                dbConn = DataSrv.GetConnection();
                dbConn.Open();

                // Создаем команду и выполняем ее
                var comm = dbConn.CreateCommand();
                comm.CommandText = sql;
                dataReader       = comm.ExecuteReader();

                // Перегоняем результат запроса в массив
                while (dataReader.Read())
                {
                    lgotas.Add(Guid.Parse(dataReader.GetValue(0).ToString()));
                }
            }
            finally
            {
                if (dataReader != null)
                {
                    dataReader.Close();
                }
                if (dbConn != null)
                {
                    dbConn.Close();
                }
            }

            return(lgotas.ToArray());
        }
 public override string Format(string identifier)
 {
     return(PostgresDataService.PrepareIdentifier(identifier));
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="BaseIntegratedTest" /> class.
        /// </summary>
        /// <param name="tempDbNamePrefix">Prefix for temp database name.</param>
        protected BaseIntegratedTest(string tempDbNamePrefix)
        {
            Configuration            configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            string                   connectionStringsConfigSectionName = "connectionStrings";
            ConnectionStringsSection connectionStringsSection           = (ConnectionStringsSection)configuration.GetSection(connectionStringsConfigSectionName);

            if (!(tempDbNamePrefix != null))
            {
                throw new ArgumentNullException();
            }
            if (!(tempDbNamePrefix != string.Empty))
            {
                throw new ArgumentException();
            }
            if (!tempDbNamePrefix.All(char.IsLetterOrDigit))
            {
                throw new ArgumentException();
            }
            _tempDbNamePrefix = tempDbNamePrefix;
            _databaseName     = _tempDbNamePrefix + "_" + DateTime.Now.ToString("yyyyMMddHHmmssff") + "_" + Guid.NewGuid().ToString("N");
            if (!string.IsNullOrWhiteSpace(PostgresScript) && ConnectionStringPostgres != poolingFalseConst)
            {
                if (!(tempDbNamePrefix.Length <= 12)) // Max length is 63 (-18 -32).
                {
                    throw new ArgumentException();
                }
                if (!char.IsLetter(tempDbNamePrefix[0])) // Database names must have an alphabetic first character.
                {
                    throw new ArgumentException();
                }
                using (var conn = new NpgsqlConnection(ConnectionStringPostgres))
                {
                    conn.Open();
                    using (var cmd = new NpgsqlCommand(string.Format("CREATE DATABASE \"{0}\" ENCODING = 'UTF8' CONNECTION LIMIT = -1;", _databaseName), conn))
                        cmd.ExecuteNonQuery();
                }

                using (var conn = new NpgsqlConnection($"{ConnectionStringPostgres};Database={_databaseName}"))
                {
                    conn.Open();
                    using (var cmd = new NpgsqlCommand(PostgresScript, conn))
                        cmd.ExecuteNonQuery();
                    string connStr = $"{ConnectionStringPostgres};Database={_databaseName}";
                    PostgresDataService dataService = CreatePostgresDataService(connStr);
                    _dataServices.Add(dataService);

                    InitAuditService(dataService);

                    connectionStringsSection.ConnectionStrings.Add(new ConnectionStringSettings($"{dataService.AuditService.AppSetting.AppName}_{dataService.AuditService.AppSetting.AuditConnectionStringName}", connStr));
                }
            }

            if (!string.IsNullOrWhiteSpace(MssqlScript) && ConnectionStringMssql != poolingFalseConst)
            {
                if (!(tempDbNamePrefix.Length <= 64))// Max is 128.
                {
                    throw new ArgumentException();
                }
                using (var connection = new SqlConnection(ConnectionStringMssql))
                {
                    connection.Open();
                    using (var command = new SqlCommand($"CREATE DATABASE {_databaseName} COLLATE Cyrillic_General_CI_AS", connection))
                        command.ExecuteNonQuery();
                }

                using (var connection = new SqlConnection($"{ConnectionStringMssql};Database={_databaseName}"))
                {
                    connection.Open();
                    using (var command = new SqlCommand(MssqlScript, connection))
                    {
                        command.CommandTimeout = 180;
                        command.ExecuteNonQuery();
                    }

                    string           connStr     = $"{ConnectionStringMssql};Database={_databaseName}";
                    MSSQLDataService dataService = CreateMssqlDataService(connStr);
                    _dataServices.Add(dataService);
                    InitAuditService(dataService);
                    connectionStringsSection.ConnectionStrings.Add(new ConnectionStringSettings($"{dataService.AuditService.AppSetting.AppName}_{dataService.AuditService.AppSetting.AuditConnectionStringName}", connStr));
                }
            }

            if (!string.IsNullOrWhiteSpace(OracleScript) && ConnectionStringOracle != poolingFalseConst)
            {
                if (!(tempDbNamePrefix.Length <= 8)) // Max length is 30 (-18 -4).
                {
                    throw new ArgumentException();
                }

                using (var connection = new OracleConnection(ConnectionStringOracle))
                {
                    connection.Open();
                    using (var command = connection.CreateCommand())
                    {
                        // "CREATE USER" privileges required.
                        var doWhile = true;
                        while (doWhile)
                        {
                            _tmpUserNameOracle  = tempDbNamePrefix + "_" + DateTime.Now.ToString("yyyyMMddHHmmssff") + "_" + new Random().Next(9999);
                            command.CommandText = $"CREATE USER {_tmpUserNameOracle} IDENTIFIED BY {_tmpUserNameOracle} DEFAULT TABLESPACE users  quota unlimited on users  TEMPORARY TABLESPACE temp";
                            try
                            {
                                command.ExecuteNonQuery();
                            }
                            catch (OracleException ex)
                            {
                                Thread.Sleep(1000);
                                if (ex.Message.Contains("conflicts with another user or role name "))
                                {
                                    continue;
                                }
                                throw;
                            }

                            doWhile = false;
                        }

                        // "CREATE SESSION WITH ADMIN OPTION" privileges required.
                        command.CommandText = $"GRANT CREATE SESSION TO {_tmpUserNameOracle}";
                        command.ExecuteNonQuery();
                        command.CommandText = $"GRANT CREATE TABLE TO {_tmpUserNameOracle}";
                        command.ExecuteNonQuery();
                    }
                }

                using (var connection = new OracleConnection($"{ConnectionStringOracleDataSource};User Id={_tmpUserNameOracle};Password={_tmpUserNameOracle};"))
                {
                    connection.Open();
                    using (var command = connection.CreateCommand())
                    {
                        foreach (var cmdText in OracleScript.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
                        {
                            command.CommandText = cmdText.Trim();
                            if (!string.IsNullOrWhiteSpace(command.CommandText))
                            {
                                command.ExecuteNonQuery();
                            }
                        }

                        string            connStr     = $"{ConnectionStringOracleDataSource};User Id={_tmpUserNameOracle};Password={_tmpUserNameOracle};";
                        OracleDataService dataService = CreateOracleDataService(connStr);
                        _dataServices.Add(dataService);
                        InitAuditService(dataService);
                        connectionStringsSection.ConnectionStrings.Add(new ConnectionStringSettings($"{dataService.AuditService.AppSetting.AppName}_{dataService.AuditService.AppSetting.AuditConnectionStringName}", connStr));
                    }
                }
            }

            configuration.Save();
            ConfigurationManager.RefreshSection(connectionStringsConfigSectionName);
        }