Implement count estimate query for postgresdb (#7956)

This commit is contained in:
Julian Giebel
2022-05-06 16:04:33 +02:00
committed by GitHub
parent 382baa7bdd
commit 288f66d8c4
3 changed files with 19 additions and 1 deletions

View File

@@ -174,6 +174,8 @@ namespace Content.Server.Database
{ {
return query.Where(log => EF.Functions.Like(log.Message, "%" + searchText + "%")); return query.Where(log => EF.Functions.Like(log.Message, "%" + searchText + "%"));
} }
public abstract int CountAdminLogs();
} }
public class Preference public class Preference

View File

@@ -4,7 +4,7 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage;
using NpgsqlTypes; using Npgsql;
namespace Content.Server.Database namespace Content.Server.Database
{ {
@@ -80,5 +80,15 @@ namespace Content.Server.Database
{ {
return query.Where(log => EF.Functions.ToTsVector("english", log.Message).Matches(searchText)); return query.Where(log => EF.Functions.ToTsVector("english", log.Message).Matches(searchText));
} }
public override int CountAdminLogs()
{
using var command = new NpgsqlCommand("SELECT reltuples FROM pg_class WHERE relname = 'admin_log';", (NpgsqlConnection?) Database.GetDbConnection());
Database.GetDbConnection().Open();
var count = Convert.ToInt32((float) (command.ExecuteScalar() ?? 0));
Database.GetDbConnection().Close();
return count;
}
} }
} }

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Linq;
using System.Net; using System.Net;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
@@ -81,6 +82,11 @@ namespace Content.Server.Database
.HasConversion(jsonByteArrayConverter); .HasConversion(jsonByteArrayConverter);
} }
public override int CountAdminLogs()
{
return AdminLog.Count();
}
private static string InetToString(IPAddress address, int mask) { private static string InetToString(IPAddress address, int mask) {
if (address.IsIPv4MappedToIPv6) if (address.IsIPv4MappedToIPv6)
{ {