private async Task Run() { // setup connection var connectionString = GetConvar($"{m_name}_connection_string", ""); if (string.IsNullOrEmpty(connectionString)) { throw new InvalidOperationException($"No connection string configured for {m_name}. " + $"Please set the `{m_name}_connection_string` convar in your server startup script."); } var csBuilder = new DbConnectionStringBuilder(); csBuilder.ConnectionString = connectionString; if (!csBuilder.TryGetValue("dbProvider", out object provider)) { provider = "mysql"; } csBuilder.Remove("dbProvider"); var factory = m_factoryList.GetFactory(provider.ToString()); if (factory == null) { throw new InvalidOperationException($"Invalid database provider name {provider} in connection string for {m_name}. " + $"Supported providers: [{string.Join(", ", m_factoryList.GetNames())}]."); } m_dataAbstraction = m_factoryList.GetDataAbstraction(provider.ToString()); m_connectionString = csBuilder.ConnectionString; using (var connection = await OpenConnection(factory)) { using (var command = connection.CreateCommand()) { command.CommandText = "SELECT 1"; var r = await command.ExecuteScalarAsync(); if (Convert.ToInt32(r) == 1) { m_factory = factory; } else { throw new InvalidOperationException($"SELECT 1 failed for {m_name} - it returned {r} instead."); } } } }
public override Task <object> ExecuteCommandAsync(DbDataAbstraction dataAbstraction) { return(cmd.ExecuteScalarAsync()); }
public override async Task <IList <IDictionary <string, object> > > ExecuteCommandAsync(DbDataAbstraction dataAbstraction) { var rows = new List <IDictionary <string, object> >(); using (var reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { rows.Add( Enumerable.Range(0, reader.FieldCount) .ToDictionary( i => reader.GetName(i), i => !reader.IsDBNull(i) ? reader.GetValue(i) : null ) ); } } return(rows); }
public virtual string ModifyQuery(string query, DbDataAbstraction dataAbstraction) { return(query); }
public abstract Task <TResult> ExecuteCommandAsync(DbDataAbstraction dataAbstraction);
public override async Task <object> ExecuteCommandAsync(DbDataAbstraction dataAbstraction) { return(await cmd.ExecuteNonQueryAsync()); }
public override string ModifyQuery(string query, DbDataAbstraction dataAbstraction) { return(dataAbstraction.AppendInsertIdQuery(query)); }