Removed non-DRY SQL helper methods

This commit is contained in:
2025-06-07 21:13:21 +02:00
parent 3ec078053d
commit 465926dcab
4 changed files with 51 additions and 131 deletions

View File

@@ -70,7 +70,7 @@ public class SearchdomainController : ControllerBase
{"settings", settings}, {"settings", settings},
{"id", searchdomain_.id} {"id", searchdomain_.id}
}; };
searchdomain_.ExecuteSQLNonQuery("UPDATE searchdomain set name = @name, settings = @settings WHERE id = @id", parameters); searchdomain_.helper.ExecuteSQLNonQuery("UPDATE searchdomain set name = @name, settings = @settings WHERE id = @id", parameters);
} catch (Exception) } catch (Exception)
{ {
return Ok(new SearchdomainUpdateResults(){Success = false}); return Ok(new SearchdomainUpdateResults(){Success = false});

View File

@@ -12,38 +12,47 @@ public class SQLHelper
} }
public DbDataReader ExecuteSQLCommand(string query, Dictionary<string, dynamic> parameters) public DbDataReader ExecuteSQLCommand(string query, Dictionary<string, dynamic> parameters)
{ {
using MySqlCommand command = connection.CreateCommand(); lock (connection)
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{ {
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value); using MySqlCommand command = connection.CreateCommand();
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value);
}
return command.ExecuteReader();
} }
return command.ExecuteReader();
} }
public void ExecuteSQLNonQuery(string query, Dictionary<string, dynamic> parameters) public void ExecuteSQLNonQuery(string query, Dictionary<string, dynamic> parameters)
{ {
using MySqlCommand command = connection.CreateCommand(); lock (connection)
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{ {
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value); using MySqlCommand command = connection.CreateCommand();
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value);
}
command.ExecuteNonQuery();
} }
command.ExecuteNonQuery();
} }
public int ExecuteSQLCommandGetInsertedID(string query, Dictionary<string, dynamic> parameters) public int ExecuteSQLCommandGetInsertedID(string query, Dictionary<string, dynamic> parameters)
{ {
using MySqlCommand command = connection.CreateCommand(); lock (connection)
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{ {
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value); using MySqlCommand command = connection.CreateCommand();
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value);
}
command.ExecuteNonQuery();
command.CommandText = "SELECT LAST_INSERT_ID();";
return Convert.ToInt32(command.ExecuteScalar());
} }
command.ExecuteNonQuery();
command.CommandText = "SELECT LAST_INSERT_ID();";
return Convert.ToInt32(command.ExecuteScalar());
} }
} }

View File

@@ -35,6 +35,7 @@ public class Searchdomain
public Dictionary<string, Dictionary<string, float[]>> embeddingCache; public Dictionary<string, Dictionary<string, float[]>> embeddingCache;
public int embeddingCacheMaxSize = 10000000; public int embeddingCacheMaxSize = 10000000;
private readonly MySqlConnection connection; private readonly MySqlConnection connection;
public SQLHelper helper;
// TODO Add settings and update cli/program.cs, as well as DatabaseInsertSearchdomain() // TODO Add settings and update cli/program.cs, as well as DatabaseInsertSearchdomain()
@@ -49,6 +50,7 @@ public class Searchdomain
embeddingCache = []; embeddingCache = [];
connection = new MySqlConnection(connectionString); connection = new MySqlConnection(connectionString);
connection.Open(); connection.Open();
helper = new SQLHelper(connection);
probmethods = new(); probmethods = new();
modelsInUse = []; // To make the compiler shut up - it is set in UpdateSearchDomain() don't worry // yeah, about that... modelsInUse = []; // To make the compiler shut up - it is set in UpdateSearchDomain() don't worry // yeah, about that...
if (!runEmpty) if (!runEmpty)
@@ -64,16 +66,8 @@ public class Searchdomain
{ {
["id"] = this.id ["id"] = this.id
}; };
//(error) DbDataReader embeddingReader = ExecuteSQLCommand("SELECT id, id_datapoint, model, embedding FROM embedding JOIN datapoint on embedding.id as dp JOIN entity on dp.id_entity as en JOIN searchdomain on en.id_searchdomain as sd WHERE sd=@id", parametersIDSearchdomain); DbDataReader embeddingReader = helper.ExecuteSQLCommand("SELECT embedding.id, id_datapoint, model, embedding FROM embedding", parametersIDSearchdomain);
//(produces endless amounts of data) DbDataReader embeddingReader = ExecuteSQLCommand("SELECT embedding.id, id_datapoint, model, embedding FROM embedding JOIN datapoint as dp on embedding.id JOIN entity as en on dp.id_entity JOIN searchdomain as sd on en.id_searchdomain WHERE sd.id=@id", parametersIDSearchdomain);
DbDataReader embeddingReader = ExecuteSQLCommand("SELECT embedding.id, id_datapoint, model, embedding FROM embedding", parametersIDSearchdomain);
//DbDataReader datapointReader = ExecuteSQLCommand("SELECT id, id_entity, name, probmethod_embedding FROM datapoint JOIN entity on Datapoint.id_entity as en JOIN searchdomain on en.id_searchdomain as sd WHERE sd=@id", parametersIDSearchdomain);
//DbDataReader attributeReader = ExecuteSQLCommand("SELECT id, id_entity, attribute, value FROM attribute JOIN entity on attribute.id_entity as en JOIN searchdomain on en.id_searchdomain as sd WHERE sd=@id", parametersIDSearchdomain);
//DbDataReader entityReader = ExecuteSQLCommand("SELECT id, name, probmethod FROM entity WHERE id_searchdomain=@id", parametersIDSearchdomain);
Dictionary<int, Dictionary<string, float[]>> embedding_unassigned = []; Dictionary<int, Dictionary<string, float[]>> embedding_unassigned = [];
// embedding_unassigned.key = embedding.id_datapoint
// embedding_unassigned.Value.Key = model
// embedding_unassigned.Value.Value = Embeddings
while (embeddingReader.Read()) while (embeddingReader.Read())
{ {
int id_datapoint = embeddingReader.GetInt32(1); int id_datapoint = embeddingReader.GetInt32(1);
@@ -83,7 +77,6 @@ public class Searchdomain
embeddingReader.GetBytes(3, 0, embedding, 0, (int) length); embeddingReader.GetBytes(3, 0, embedding, 0, (int) length);
if (embedding_unassigned.TryGetValue(id_datapoint, out Dictionary<string, float[]>? embedding_unassigned_id_datapoint)) if (embedding_unassigned.TryGetValue(id_datapoint, out Dictionary<string, float[]>? embedding_unassigned_id_datapoint))
{ {
//embedding_unassigned_id_datapoint[model] = FloatArrayFromBytes(embedding);
embedding_unassigned[id_datapoint][model] = FloatArrayFromBytes(embedding); embedding_unassigned[id_datapoint][model] = FloatArrayFromBytes(embedding);
} }
else else
@@ -96,8 +89,7 @@ public class Searchdomain
} }
embeddingReader.Close(); embeddingReader.Close();
//DbDataReader datapointReader = ExecuteSQLCommand("SELECT datapoint.id, id_entity, datapoint.name, probmethod_embedding FROM datapoint JOIN entity as en on Datapoint.id_entity JOIN searchdomain as sd on en.id_searchdomain WHERE sd.id=@id", parametersIDSearchdomain); DbDataReader datapointReader = helper.ExecuteSQLCommand("SELECT id, id_entity, name, probmethod_embedding FROM datapoint", parametersIDSearchdomain);
DbDataReader datapointReader = ExecuteSQLCommand("SELECT id, id_entity, name, probmethod_embedding FROM datapoint", parametersIDSearchdomain);
Dictionary<int, List<Datapoint>> datapoint_unassigned = []; Dictionary<int, List<Datapoint>> datapoint_unassigned = [];
while (datapointReader.Read()) while (datapointReader.Read())
{ {
@@ -118,8 +110,7 @@ public class Searchdomain
} }
datapointReader.Close(); datapointReader.Close();
//DbDataReader attributeReader = ExecuteSQLCommand("SELECT attribute.id, id_entity, attribute, value FROM attribute JOIN entity as en on attribute.id_entity JOIN searchdomain as sd on en.id_searchdomain WHERE sd.id=@id", parametersIDSearchdomain); DbDataReader attributeReader = helper.ExecuteSQLCommand("SELECT id, id_entity, attribute, value FROM attribute", parametersIDSearchdomain);
DbDataReader attributeReader = ExecuteSQLCommand("SELECT id, id_entity, attribute, value FROM attribute", parametersIDSearchdomain);
Dictionary<int, Dictionary<string, string>> attributes_unassigned = []; Dictionary<int, Dictionary<string, string>> attributes_unassigned = [];
while (attributeReader.Read()) while (attributeReader.Read())
{ {
@@ -136,7 +127,7 @@ public class Searchdomain
} }
attributeReader.Close(); attributeReader.Close();
DbDataReader entityReader = ExecuteSQLCommand("SELECT entity.id, name, probmethod FROM entity WHERE id_searchdomain=@id", parametersIDSearchdomain); DbDataReader entityReader = helper.ExecuteSQLCommand("SELECT entity.id, name, probmethod FROM entity WHERE id_searchdomain=@id", parametersIDSearchdomain);
while (entityReader.Read()) while (entityReader.Read())
{ {
//SELECT id, name, probmethod FROM entity WHERE id_searchdomain=@id //SELECT id, name, probmethod FROM entity WHERE id_searchdomain=@id
@@ -158,9 +149,6 @@ public class Searchdomain
} }
} }
entityReader.Close(); entityReader.Close();
// TODO test this
modelsInUse = GetModels(entityCache); modelsInUse = GetModels(entityCache);
} }
@@ -223,7 +211,7 @@ public class Searchdomain
{ {
["name"] = this.searchdomain ["name"] = this.searchdomain
}; };
DbDataReader reader = ExecuteSQLCommand("SELECT id from searchdomain WHERE name = @name", parameters); DbDataReader reader = helper.ExecuteSQLCommand("SELECT id from searchdomain WHERE name = @name", parameters);
reader.Read(); reader.Read();
this.id = reader.GetInt32(0); this.id = reader.GetInt32(0);
reader.Close(); reader.Close();
@@ -356,10 +344,10 @@ public class Searchdomain
{ {
{ "name", name } { "name", name }
}; };
ExecuteSQLNonQuery("DELETE embedding.* FROM embedding JOIN datapoint dp ON id_datapoint = dp.id JOIN entity ON id_entity = entity.id WHERE entity.name = @name", parameters); helper.ExecuteSQLNonQuery("DELETE embedding.* FROM embedding JOIN datapoint dp ON id_datapoint = dp.id JOIN entity ON id_entity = entity.id WHERE entity.name = @name", parameters);
ExecuteSQLNonQuery("DELETE datapoint.* FROM datapoint JOIN entity ON id_entity = entity.id WHERE entity.name = @name", parameters); helper.ExecuteSQLNonQuery("DELETE datapoint.* FROM datapoint JOIN entity ON id_entity = entity.id WHERE entity.name = @name", parameters);
ExecuteSQLNonQuery("DELETE attribute.* FROM attribute JOIN entity ON id_entity = entity.id WHERE entity.name = @name", parameters); helper.ExecuteSQLNonQuery("DELETE attribute.* FROM attribute JOIN entity ON id_entity = entity.id WHERE entity.name = @name", parameters);
ExecuteSQLNonQuery("DELETE FROM entity WHERE name = @name", parameters); helper.ExecuteSQLNonQuery("DELETE FROM entity WHERE name = @name", parameters);
entityCache.RemoveAll(entity => entity.name == name); entityCache.RemoveAll(entity => entity.name == name);
} }
@@ -370,7 +358,7 @@ public class Searchdomain
{ "name", name }, { "name", name },
{ "settings", "{}"} // TODO add settings. It's not used yet, but maybe it's needed someday... { "settings", "{}"} // TODO add settings. It's not used yet, but maybe it's needed someday...
}; };
return ExecuteSQLCommandGetInsertedID("INSERT INTO searchdomain (name, settings) VALUES (@name, @settings)", parameters); return helper.ExecuteSQLCommandGetInsertedID("INSERT INTO searchdomain (name, settings) VALUES (@name, @settings)", parameters);
} }
public int DatabaseInsertEntity(string name, string probmethod, int id_searchdomain) public int DatabaseInsertEntity(string name, string probmethod, int id_searchdomain)
@@ -381,7 +369,7 @@ public class Searchdomain
{ "probmethod", probmethod }, { "probmethod", probmethod },
{ "id_searchdomain", id_searchdomain } { "id_searchdomain", id_searchdomain }
}; };
return ExecuteSQLCommandGetInsertedID("INSERT INTO entity (name, probmethod, id_searchdomain) VALUES (@name, @probmethod, @id_searchdomain)", parameters); return helper.ExecuteSQLCommandGetInsertedID("INSERT INTO entity (name, probmethod, id_searchdomain) VALUES (@name, @probmethod, @id_searchdomain)", parameters);
} }
public int DatabaseInsertAttribute(string attribute, string value, int id_entity) public int DatabaseInsertAttribute(string attribute, string value, int id_entity)
@@ -392,7 +380,7 @@ public class Searchdomain
{ "value", value }, { "value", value },
{ "id_entity", id_entity } { "id_entity", id_entity }
}; };
return ExecuteSQLCommandGetInsertedID("INSERT INTO attribute (attribute, value, id_entity) VALUES (@attribute, @value, @id_entity)", parameters); return helper.ExecuteSQLCommandGetInsertedID("INSERT INTO attribute (attribute, value, id_entity) VALUES (@attribute, @value, @id_entity)", parameters);
} }
@@ -404,7 +392,7 @@ public class Searchdomain
{ "probmethod_embedding", probmethod_embedding }, { "probmethod_embedding", probmethod_embedding },
{ "id_entity", id_entity } { "id_entity", id_entity }
}; };
return ExecuteSQLCommandGetInsertedID("INSERT INTO datapoint (name, probmethod_embedding, id_entity) VALUES (@name, @probmethod_embedding, @id_entity)", parameters); return helper.ExecuteSQLCommandGetInsertedID("INSERT INTO datapoint (name, probmethod_embedding, id_entity) VALUES (@name, @probmethod_embedding, @id_entity)", parameters);
} }
public int DatabaseInsertEmbedding(int id_datapoint, string model, byte[] embedding) public int DatabaseInsertEmbedding(int id_datapoint, string model, byte[] embedding)
@@ -415,43 +403,6 @@ public class Searchdomain
{ "model", model }, { "model", model },
{ "embedding", embedding } { "embedding", embedding }
}; };
return ExecuteSQLCommandGetInsertedID("INSERT INTO embedding (id_datapoint, model, embedding) VALUES (@id_datapoint, @model, @embedding)", parameters); return helper.ExecuteSQLCommandGetInsertedID("INSERT INTO embedding (id_datapoint, model, embedding) VALUES (@id_datapoint, @model, @embedding)", parameters);
}
public DbDataReader ExecuteSQLCommand(string query, Dictionary<string, dynamic> parameters)
{
using MySqlCommand command = connection.CreateCommand();
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value);
}
return command.ExecuteReader();
}
public void ExecuteSQLNonQuery(string query, Dictionary<string, dynamic> parameters)
{
using MySqlCommand command = connection.CreateCommand();
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value);
}
command.ExecuteNonQuery();
}
public int ExecuteSQLCommandGetInsertedID(string query, Dictionary<string, dynamic> parameters)
{
using MySqlCommand command = connection.CreateCommand();
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value);
}
command.ExecuteNonQuery();
command.CommandText = "SELECT LAST_INSERT_ID();";
return Convert.ToInt32(command.ExecuteScalar());
} }
} }

View File

@@ -16,6 +16,7 @@ public class SearchdomainManager
private readonly string connectionString; private readonly string connectionString;
private OllamaApiClient client; private OllamaApiClient client;
private MySqlConnection connection; private MySqlConnection connection;
private SQLHelper helper;
public SearchdomainManager(ILogger<SearchdomainManager> logger, IConfiguration config) public SearchdomainManager(ILogger<SearchdomainManager> logger, IConfiguration config)
{ {
@@ -30,11 +31,10 @@ public class SearchdomainManager
client = new(new Uri(ollamaURL)); client = new(new Uri(ollamaURL));
connection = new MySqlConnection(connectionString); connection = new MySqlConnection(connectionString);
connection.Open(); connection.Open();
DatabaseMigrations.Migrate(new SQLHelper(connection)); helper = new SQLHelper(connection);
DatabaseMigrations.Migrate(helper);
} }
public Searchdomain GetSearchdomain(string searchdomain) public Searchdomain GetSearchdomain(string searchdomain)
{ {
if (searchdomains.TryGetValue(searchdomain, out Searchdomain? value)) if (searchdomains.TryGetValue(searchdomain, out Searchdomain? value))
@@ -59,7 +59,7 @@ public class SearchdomainManager
public List<string> ListSearchdomains() public List<string> ListSearchdomains()
{ {
DbDataReader reader = ExecuteSQLCommand("SELECT name FROM searchdomain", []); DbDataReader reader = helper.ExecuteSQLCommand("SELECT name FROM searchdomain", []);
List<string> results = []; List<string> results = [];
while (reader.Read()) while (reader.Read())
{ {
@@ -80,7 +80,7 @@ public class SearchdomainManager
{ "name", searchdomain }, { "name", searchdomain },
{ "settings", settings} { "settings", settings}
}; };
return ExecuteSQLCommandGetInsertedID("INSERT INTO searchdomain (name, settings) VALUES (@name, @settings)", parameters); return helper.ExecuteSQLCommandGetInsertedID("INSERT INTO searchdomain (name, settings) VALUES (@name, @settings)", parameters);
} }
public int DeleteSearchdomain(string searchdomain) public int DeleteSearchdomain(string searchdomain)
@@ -93,54 +93,14 @@ public class SearchdomainManager
counter += 1; counter += 1;
} }
_logger.LogDebug($"Number of entities deleted as part of deleting the searchdomain \"{searchdomain}\": {counter}"); _logger.LogDebug($"Number of entities deleted as part of deleting the searchdomain \"{searchdomain}\": {counter}");
searchdomain_.ExecuteSQLNonQuery("DELETE FROM searchdomain WHERE name = @name", new() {{"name", searchdomain}}); helper.ExecuteSQLNonQuery("DELETE FROM searchdomain WHERE name = @name", new() {{"name", searchdomain}});
searchdomains.Remove(searchdomain); searchdomains.Remove(searchdomain);
_logger.LogDebug($"Searchdomain has been successfully removed"); _logger.LogDebug($"Searchdomain has been successfully removed");
return counter; return counter;
} }
public DbDataReader ExecuteSQLCommand(string query, Dictionary<string, dynamic> parameters)
{
using MySqlCommand command = connection.CreateCommand();
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value);
}
return command.ExecuteReader();
}
public void ExecuteSQLNonQuery(string query, Dictionary<string, dynamic> parameters)
{
using MySqlCommand command = connection.CreateCommand();
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value);
}
command.ExecuteNonQuery();
}
public int ExecuteSQLCommandGetInsertedID(string query, Dictionary<string, dynamic> parameters)
{
using MySqlCommand command = connection.CreateCommand();
command.CommandText = query;
foreach (KeyValuePair<string, dynamic> parameter in parameters)
{
command.Parameters.AddWithValue($"@{parameter.Key}", parameter.Value);
}
command.ExecuteNonQuery();
command.CommandText = "SELECT LAST_INSERT_ID();";
return Convert.ToInt32(command.ExecuteScalar());
}
private Searchdomain SetSearchdomain(string name, Searchdomain searchdomain) private Searchdomain SetSearchdomain(string name, Searchdomain searchdomain)
{ {
searchdomains[name] = searchdomain; searchdomains[name] = searchdomain;
return searchdomain; return searchdomain;
} }
} }