fix(qe-m2-03): parse supported Npgsql keys only and ignore custom options gracefully
Validators (Pushes and Pull Requests) / validate-core (push) Failing after 1s
Validators (Pushes and Pull Requests) / validate-ui-and-storage (push) Successful in 12s

This commit is contained in:
2026-07-12 22:25:38 +09:00
parent db25edfd87
commit 0c37bfa13c
@@ -53,15 +53,32 @@ namespace QuantEngine.Core.Tests
string connStr = rawDsn;
if (rawDsn.Contains("host=") || rawDsn.Contains("dbname="))
{
connStr = rawDsn
.Replace("options='-c search_path=quantengine'", "")
.Replace("options=\"-c search_path=quantengine\"", "")
.Replace("dbname=", "Database=")
.Replace("user=", "Username=")
.Replace("host=", "Host=")
.Replace("port=", "Port=")
.Trim();
connStr = string.Join(";", connStr.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)) + ";Search Path=quantengine";
try
{
var builder = new NpgsqlConnectionStringBuilder();
var parts = rawDsn.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var p in parts)
{
var kv = p.Split('=', 2);
if (kv.Length == 2)
{
string key = kv[0].Trim().ToLowerInvariant();
string val = kv[1].Trim().Trim('\'').Trim('"');
if (key == "host") builder.Host = val;
else if (key == "port" && int.TryParse(val, out var pi)) builder.Port = pi;
else if (key == "dbname") builder.Database = val;
else if (key == "user") builder.Username = val;
else if (key == "password") builder.Password = val;
}
}
builder.SearchPath = "quantengine";
connStr = builder.ConnectionString;
}
catch
{
// Fallback to rawDsn if builder logic fails
connStr = rawDsn;
}
}
try