Exemplo n.º 1
0
 public KasbahQueryProviderFactory(ILoggerFactory loggerFactory, NpgsqlSettings settings, TypeRegistry typeRegistry, TypeMapper typeMapper)
 {
     _loggerFactory = loggerFactory;
     _settings      = settings;
     _typeRegistry  = typeRegistry;
     _typeMapper    = typeMapper;
 }
Exemplo n.º 2
0
 public KasbahNpgsqlQueryProvider(ILoggerFactory loggerFactory, Type targetType, NpgsqlSettings settings, TypeRegistry typeRegistry, TypeMapper typeMapper)
 {
     _log          = loggerFactory.CreateLogger <KasbahNpgsqlQueryProvider>();
     _targetType   = targetType;
     _settings     = settings;
     _typeRegistry = typeRegistry;
     _typeMapper   = typeMapper;
 }
Exemplo n.º 3
0
        internal static DbConnection GetConnection(this NpgsqlSettings settings)
        {
            var connection = new NpgsqlConnection(settings.ConnectionString);

            return(connection);

            // return new StackExchange.Profiling.Data.ProfiledDbConnection(connection, MiniProfiler.Current);
        }
Exemplo n.º 4
0
 public MediaProvider(NpgsqlSettings settings)
 {
     _settings = settings;
 }
Exemplo n.º 5
0
        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");
                }
            }
        }
Exemplo n.º 6
0
 public ContentProvider(NpgsqlSettings settings)
 {
     _settings = settings;
 }
 public AnalyticsDataProvider(NpgsqlSettings settings)
 {
     _settings = settings;
 }
Exemplo n.º 8
0
 public UserProvider(NpgsqlSettings settings)
 {
     _settings = settings;
 }