public KasbahQueryProviderFactory(ILoggerFactory loggerFactory, NpgsqlSettings settings, TypeRegistry typeRegistry, TypeMapper typeMapper) { _loggerFactory = loggerFactory; _settings = settings; _typeRegistry = typeRegistry; _typeMapper = typeMapper; }
public KasbahNpgsqlQueryProvider(ILoggerFactory loggerFactory, Type targetType, NpgsqlSettings settings, TypeRegistry typeRegistry, TypeMapper typeMapper) { _log = loggerFactory.CreateLogger <KasbahNpgsqlQueryProvider>(); _targetType = targetType; _settings = settings; _typeRegistry = typeRegistry; _typeMapper = typeMapper; }
internal static DbConnection GetConnection(this NpgsqlSettings settings) { var connection = new NpgsqlConnection(settings.ConnectionString); return(connection); // return new StackExchange.Profiling.Data.ProfiledDbConnection(connection, MiniProfiler.Current); }
public MediaProvider(NpgsqlSettings settings) { _settings = settings; }
public void InitialiseSchema(NpgsqlSettings settings) { _log.LogInformation("Checking database is initialised"); using (var connection = settings.GetConnection()) { connection.Open(); var initialised = CheckDatabaseInitialised(connection); _log.LogInformation($"Database is{(initialised ? string.Empty : " not")} initialised"); if (!initialised) { _log.LogInformation($"Initialising database"); var initTransaction = connection.BeginTransaction(); connection.Execute("create schema kasbah;"); connection.Execute("create table kasbah.setting ( key text, value jsonb );"); connection.Execute("insert into kasbah.setting values ( 'schema_version', '{\"version\":0}'::jsonb );"); initTransaction.Commit(); _log.LogInformation($"Database initialised"); } _log.LogInformation("Checking for pending database migrations"); var currentSchemaVersion = GetSystemValue <SchemaVersion>(connection, SchemaVersion.Key); var assembly = typeof(DatabaseUtility).GetTypeInfo().Assembly; const string Prefix = "Kasbah.Provider.Npgsql.Resources.migration_"; var resources = assembly.GetManifestResourceNames() .Where(ent => ent.StartsWith(Prefix)) .Select(ent => new { Name = ent, ShortName = ent.Replace(".sql", string.Empty).Split('.').Last(), Version = int.Parse(ent .Replace(Prefix, string.Empty) .Replace(".sql", string.Empty) .TrimStart(new[] { '0' })) }) .Where(ent => ent.Version > currentSchemaVersion.Version) .OrderBy(ent => ent.Version); if (resources.Any()) { _log.LogInformation($"Pending database migrations: {string.Join(", ", resources.Select(ent => ent.ShortName))}"); var transaction = connection.BeginTransaction(); try { foreach (var resource in resources) { _log.LogInformation($"Running migrations in '{resource.ShortName}'"); using (var stream = assembly.GetManifestResourceStream(resource.Name)) { var buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); var content = Encoding.UTF8.GetString(buffer); var statements = content.Split(';') .Where(ent => !string.IsNullOrWhiteSpace(ent)); foreach (var sql in statements) { try { connection.Execute(sql); } catch (PostgresException ex) { _log.LogError($"Migration failed: '{resource.ShortName}'; statement: {sql}; error: {ex.Message}"); throw; } } PutSystemValue(connection, SchemaVersion.Key, new SchemaVersion { Version = resource.Version }); _log.LogInformation($"Migration run successfully: '{resource.ShortName}'"); } } transaction.Commit(); _log.LogInformation("All migrations run successfully"); } catch (PostgresException) { transaction.Rollback(); throw; } } else { _log.LogInformation("No database migrations pending"); } } }
public ContentProvider(NpgsqlSettings settings) { _settings = settings; }
public AnalyticsDataProvider(NpgsqlSettings settings) { _settings = settings; }
public UserProvider(NpgsqlSettings settings) { _settings = settings; }