// 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; } } }
/// <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()); }
/// <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); }