Пример #1
0
        public async Task ExecuteSql(string query)
        {
            if (string.IsNullOrWhiteSpace(query) || !IsConnected)
            {
                return;
            }

            databaseLogger.Log(query, null, TraceLevel.Info);

            using var writeLock = await DatabaseLock.WriteLock();

            MySqlConnection  conn = new(worldConnectionString.ConnectionString);
            MySqlTransaction transaction;

            try
            {
                conn.Open();
                transaction = await conn.BeginTransactionAsync();
            }
            catch (Exception e)
            {
                throw new IMySqlExecutor.CannotConnectToDatabaseException(e);
            }

            try
            {
                MySqlCommand cmd = new(query, conn, transaction);
                await cmd.ExecuteNonQueryAsync();

                await transaction.CommitAsync();
            }
            catch (MySqlConnector.MySqlException e)
            {
                await transaction.RollbackAsync();

                await conn.CloseAsync();

                throw new IMySqlExecutor.QueryFailedDatabaseException(e.Message, e);
            }
            catch (Exception ex)
            {
                await transaction.RollbackAsync();

                await conn.CloseAsync();

                throw new IMySqlExecutor.QueryFailedDatabaseException(ex);
            }
            await conn.CloseAsync();

            foreach (var tableName in queryEvaluator.Extract(query).Select(q => q.TableName).Distinct())
            {
                mainThread.Dispatch(() =>
                                    eventAggregator.GetEvent <DatabaseTableChanged>().Publish(tableName));
            }
        }
Пример #2
0
 protected override void CallCallbacksOnMainThread()
 {
     mainThread.Dispatch(InvokeUpdatedEvent);
 }
Пример #3
0
 public void Report(float value)
 {
     mainThread.Dispatch(() => FilteringProgress = value * 100f);
 }