Пример #1
0
        public static async Task Save(QueryExecutionContext query, QueryResponseContext response)
        {
            string?statement = NormalizeSql(query.GetSqlStatement());

            if (statement is null)
            {
                return;
            }

            string sql;
            string code    = QueryHistory.GetCode(ComputeHash(statement), query.Server.Type);
            var    history = await LoadByCode(code);

            if (history is null)
            {
                history = QueryHistory.Create(code, statement, query, response);
                sql     = "INSERT INTO query (code, status, type, sql, star, execution_count, last_executed_on, last_environment, last_database) VALUES " +
                          "( " +
                          $"'{history.Code}', " +
                          $"{(int)history.Status}, " +
                          $"{(int)history.Type}, " +
                          $"'{history.Sql.Replace("'", "''")}', " +
                          $"{(history.Star ? 1 : 0)}, " +
                          $"{history.ExecutionCount}, " +
                          $"'{history.LastExecutedOn:yyyy-MM-dd HH:mm:ss}', " +
                          $"'{history.Stats.Last().Environment}', " +
                          $"'{history.Stats.Last().Database}' " +
                          ");";
            }
            else
            {
                history.UpdateStatistics(query, response);
                sql = $"UPDATE query SET " +
                      $"status = {(int)history.Status}, " +
                      $"execution_count = {history.ExecutionCount}, " +
                      $"last_executed_on = '{history.LastExecutedOn:yyyy-MM-dd HH:mm:ss}', " +
                      $"last_environment = '{history.Stats.Last().Environment}', " +
                      $"last_database = '{history.Stats.Last().Database}' " +
                      $"WHERE code = '{history.Code}';";
            }

            var stat = history.Stats.Last();

            sql += "INSERT INTO stat (code, status, executed_on, environment, database, server_connection, elapsed, row_count, records_affected) VALUES " +
                   "( " +
                   $"'{history.Code}', " +
                   $"{(int)stat.Status}, " +
                   $"'{stat.ExecutedOn:yyyy-MM-dd HH:mm:ss}', " +
                   $"'{stat.Environment}', " +
                   $"'{stat.Database}', " +
                   $"'{stat.ServerConnection}', " +
                   $"{stat.Elapsed}, " +
                   $"{stat.RowCount}, " +
                   $"{stat.RecordsAffected}" +
                   ");";

            await ServerConnection.ExecuteNonQuery(sql);
        }