Compare commits

...

3 Commits

Author SHA1 Message Date
UbitUmarov
247b9182c1 small fix on sqlite 2026-07-21 21:05:56 +01:00
UbitUmarov
87fc4c1f51 cosmetics 2026-07-18 00:27:29 +01:00
UbitUmarov
1b428a1825 a few fixes and cosmetics on some DB code 2026-07-14 21:24:31 +01:00
13 changed files with 87 additions and 101 deletions

View File

@@ -250,15 +250,16 @@ namespace OpenSim.Data.MySQL
/// </summary>
/// <param name="uuidss">The assets' IDs</param>
/// <returns>For each asset: true if it exists, false otherwise</returns>
// caller needs to handle exceptions
public override bool[] AssetsExist(UUID[] uuids)
{
if (uuids.Length == 0)
return [];
HashSet<UUID> exist = new HashSet<UUID>();
HashSet<UUID> exist = [];
string ids = "'" + string.Join("','", uuids) + "'";
string sql = string.Format("SELECT id FROM assets WHERE id IN ({0})", ids);
string sql = $"SELECT id FROM assets WHERE id IN ({ids})";
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{
@@ -274,9 +275,7 @@ namespace OpenSim.Data.MySQL
}
}
}
dbcon.Close();
}
bool[] results = new bool[uuids.Length];
for (int i = 0; i < uuids.Length; i++)
results[i] = exist.Contains(uuids[i]);
@@ -294,22 +293,20 @@ namespace OpenSim.Data.MySQL
/// <returns>A list of AssetMetadata objects.</returns>
public override List<AssetMetadata> FetchAssetMetadataSet(int start, int count)
{
List<AssetMetadata> retList = new List<AssetMetadata>(count);
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
List<AssetMetadata> retList = new(count);
try
{
dbcon.Open();
using (MySqlCommand cmd
= new MySqlCommand(
"SELECT name,description,assetType,temporary,id,asset_flags,CreatorID FROM assets LIMIT ?start, ?count",
dbcon))
using (MySqlConnection dbcon = new(m_connectionString))
{
cmd.Parameters.AddWithValue("?start", start);
cmd.Parameters.AddWithValue("?count", count);
dbcon.Open();
try
using (MySqlCommand cmd = new(
"SELECT name,description,assetType,temporary,id,asset_flags,CreatorID FROM assets LIMIT ?start, ?count",
dbcon))
{
cmd.Parameters.AddWithValue("?start", start);
cmd.Parameters.AddWithValue("?count", count);
using (MySqlDataReader dbReader = cmd.ExecuteReader())
{
while (dbReader.Read())
@@ -330,36 +327,39 @@ namespace OpenSim.Data.MySQL
}
}
}
catch (Exception e)
{
m_log.Error(
string.Format(
"[ASSETS DB]: MySql failure fetching asset set from {0}, count {1}. Exception ",
start, count),
e);
}
return retList;
}
dbcon.Close();
}
catch (Exception e)
{
m_log.Error($"[ASSETS DB]: MySql failure fetching asset set from {start}, count {1}. Exception ", e);
}
return retList;
return [];
}
public override bool Delete(string id)
{
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
try
{
dbcon.Open();
using (MySqlCommand cmd = new MySqlCommand("delete from assets where id=?id", dbcon))
using (MySqlConnection dbcon = new(m_connectionString))
{
cmd.Parameters.AddWithValue("?id", id);
cmd.ExecuteNonQuery();
dbcon.Open();
using (MySqlCommand cmd = new("delete from assets where id=?id", dbcon))
{
cmd.Parameters.AddWithValue("?id", id);
cmd.ExecuteNonQuery();
}
}
dbcon.Close();
return true;
}
catch (Exception e)
{
m_log.Error($"[ASSETS DB]: MySql failure on delete asset {id}", e);
}
return true;
return false;
}
#endregion

View File

@@ -39,7 +39,7 @@ namespace OpenSim.Data.MySQL
{
//private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected Dictionary<string, FieldInfo> m_Fields = new Dictionary<string, FieldInfo>();
protected Dictionary<string, FieldInfo> m_Fields = [];
protected List<string> m_ColumnNames = null;
protected string m_Realm;
@@ -71,7 +71,7 @@ namespace OpenSim.Data.MySQL
if (!string.IsNullOrEmpty(storeName))
{
// We always use a new connection for any Migrations
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
using (MySqlConnection dbcon = new(m_connectionString))
{
dbcon.Open();
Migration m = new Migration(dbcon, Assembly, storeName);
@@ -101,7 +101,7 @@ namespace OpenSim.Data.MySQL
if (m_ColumnNames != null)
return;
List<string> columnNames = new List<string>();
List<string> columnNames = [];
DataTable schemaTable = reader.GetSchemaTable();
foreach (DataRow row in schemaTable.Rows)
@@ -116,7 +116,7 @@ namespace OpenSim.Data.MySQL
public virtual T[] Get(string field, string key)
{
using (MySqlCommand cmd = new MySqlCommand())
using (MySqlCommand cmd = new())
{
cmd.Parameters.AddWithValue(field, key);
cmd.CommandText = $"select * from {m_Realm} where `{field}` = ?{field}";
@@ -128,7 +128,7 @@ namespace OpenSim.Data.MySQL
{
int flen = keys.Length;
if(flen == 0)
return new T[0];
return [];
int flast = flen - 1;
StringBuilder sb = new StringBuilder(1024);
@@ -144,7 +144,7 @@ namespace OpenSim.Data.MySQL
if(i < flast)
sb.Append(",?");
else
sb.Append(")");
sb.Append(')');
}
cmd.CommandText = sb.ToString();
return DoQuery(cmd);
@@ -153,14 +153,14 @@ namespace OpenSim.Data.MySQL
public virtual T[] Get(string[] fields, string[] keys)
{
return Get(fields, keys, String.Empty);
return Get(fields, keys, string.Empty);
}
public virtual T[] Get(string[] fields, string[] keys, string options)
{
int flen = fields.Length;
if (flen == 0 || flen != keys.Length)
return new T[0];
return [];
int flast = flen - 1;
StringBuilder sb = new StringBuilder(1024);
@@ -188,7 +188,7 @@ namespace OpenSim.Data.MySQL
{
if (m_trans == null)
{
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
using (MySqlConnection dbcon = new(m_connectionString))
{
dbcon.Open();
T[] ret = DoQueryWithConnection(cmd, dbcon);
@@ -211,14 +211,14 @@ namespace OpenSim.Data.MySQL
protected T[] DoQueryWithConnection(MySqlCommand cmd, MySqlConnection dbcon)
{
List<T> result = new List<T>();
List<T> result = [];
cmd.Connection = dbcon;
using (IDataReader reader = cmd.ExecuteReader())
using (MySqlDataReader reader = cmd.ExecuteReader())
{
if (reader == null)
return new T[0];
return [];
CheckColumnNames(reader);
@@ -259,14 +259,13 @@ namespace OpenSim.Data.MySQL
if (m_DataField != null)
{
Dictionary<string, string> data =
new Dictionary<string, string>();
Dictionary<string, string> data = [];
foreach (string col in m_ColumnNames)
{
data[col] = reader[col].ToString();
if (data[col] == null)
data[col] = String.Empty;
data[col] = string.Empty;
}
m_DataField.SetValue(row, data);
@@ -281,10 +280,9 @@ namespace OpenSim.Data.MySQL
public virtual T[] Get(string where)
{
using (MySqlCommand cmd = new MySqlCommand())
using (MySqlCommand cmd = new())
{
cmd.CommandText = $"select * from {m_Realm} where {where}"; ;
cmd.CommandText = $"select * from {m_Realm} where {where}";
return DoQuery(cmd);
}
}
@@ -293,11 +291,11 @@ namespace OpenSim.Data.MySQL
{
//m_log.DebugFormat("[MYSQL GENERIC TABLE HANDLER]: Store(T row) invoked");
using (MySqlCommand cmd = new MySqlCommand())
using (MySqlCommand cmd = new())
{
string query = "";
List<String> names = new List<String>();
List<String> values = new List<String>();
List<string> names = [];
List<string> values = [];
foreach (FieldInfo fi in m_Fields.Values)
{
@@ -340,7 +338,7 @@ namespace OpenSim.Data.MySQL
public virtual bool Delete(string field, string key)
{
return Delete(new string[] { field }, new string[] { key });
return Delete([field], [key]);
}
public virtual bool Delete(string[] fields, string[] keys)
@@ -375,7 +373,7 @@ namespace OpenSim.Data.MySQL
public long GetCount(string field, string key)
{
return GetCount(new string[] { field }, new string[] { key });
return GetCount([field], [key]);
}
public long GetCount(string[] fields, string[] keys)
@@ -388,7 +386,7 @@ namespace OpenSim.Data.MySQL
StringBuilder sb = new StringBuilder(1024);
sb.AppendFormat("select count(*) from {0} where ", m_Realm);
using (MySqlCommand cmd = new MySqlCommand())
using (MySqlCommand cmd = new())
{
for (int i = 0 ; i < flen ; i++)
{
@@ -408,12 +406,9 @@ namespace OpenSim.Data.MySQL
public long GetCount(string where)
{
using (MySqlCommand cmd = new MySqlCommand())
using (MySqlCommand cmd = new() )
{
string query = String.Format("select count(*) from {0} where {1}",
m_Realm, where);
cmd.CommandText = query;
cmd.CommandText = $"select count(*) from {m_Realm} where {where}";
object result = DoQueryScalar(cmd);

View File

@@ -42,7 +42,7 @@ namespace OpenSim.Data.MySQL
/// </summary>
public class MySQLGridUserData : MySQLGenericTableHandler<GridUserData>, IGridUserData
{
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
//private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public MySQLGridUserData(string connectionString, string realm) : base(connectionString, realm, "GridUserStore") {}
@@ -58,6 +58,7 @@ namespace OpenSim.Data.MySQL
public GridUserData[] GetAll(string userID)
{
userID = MySqlHelper.EscapeString(userID);
return base.Get(String.Format("UserID LIKE '{0}%'", userID));
}
}

View File

@@ -44,7 +44,7 @@ namespace OpenSim.Data.MySQL
public UserAccountData[] GetUsers(UUID scopeID, string query)
{
string[] words = query.Split();
string[] words = query.Split(' ', StringSplitOptions.RemoveEmptyEntries);
bool valid = false;
@@ -52,19 +52,10 @@ namespace OpenSim.Data.MySQL
{
if (words[i].Length > 2)
valid = true;
// if (words[i].Length < 3)
// {
// if (i != words.Length - 1)
// Array.Copy(words, i + 1, words, i, words.Length - i - 1);
// Array.Resize(ref words, words.Length - 1);
// }
}
if ((!valid) || words.Length == 0)
return new UserAccountData[0];
if (words.Length > 2)
return new UserAccountData[0];
if ((!valid) || words.Length == 0 || words.Length > 2)
return [];
using (MySqlCommand cmd = new MySqlCommand())
{

View File

@@ -1007,7 +1007,7 @@ namespace OpenSim.Data.MySQL
cmd.Parameters.AddWithValue("?UserId", props.UserId.ToString());
cmd.Parameters.AddWithValue("?TagId", props.TagId.ToString());
cmd.Parameters.AddWithValue("?DataKey", props.DataKey.ToString());
cmd.Parameters.AddWithValue("?DataVal", props.DataKey.ToString());
cmd.Parameters.AddWithValue("?DataVal", props.DataVal.ToString());
cmd.ExecuteNonQuery();
}

View File

@@ -406,7 +406,7 @@ namespace OpenSim.Data.MySQL
HashSet<UUID> exists = new HashSet<UUID>();
string ids = "'" + string.Join("','", uuids) + "'";
string sql = string.Format("SELECT ID FROM assets WHERE ID IN ({0})", ids);
string sql = $"SELECT ID FROM XAssetsMeta WHERE ID IN ({ids})";
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{

View File

@@ -224,7 +224,7 @@ namespace OpenSim.Data.PGSQL
}
if (PGFieldType == "boolean" || PGFieldType == "bit")
{
return (value.ToString() == "true");
return "true".Equals(value.ToString(), StringComparison.OrdinalIgnoreCase);
}
if (PGFieldType == "timestamp with time zone")
{
@@ -307,7 +307,7 @@ namespace OpenSim.Data.PGSQL
internal NpgsqlParameter CreateParameter(string parameterName, object parameterObject, string PGFieldType)
{
//Tweak so we dont always have to add : sign
if (parameterName.StartsWith(":")) parameterName = parameterName.Replace(":", "");
if (parameterName.StartsWith(':')) parameterName = parameterName[1..];
//HACK if object is null, it is turned into a string, there are no nullable type till now
if (parameterObject == null) parameterObject = "";

View File

@@ -274,7 +274,7 @@ namespace OpenSim.Data.PGSQL
public UserAccountData[] GetUsers(UUID scopeID, string query)
{
string[] words = query.Split();
string[] words = query.Split(' ', StringSplitOptions.RemoveEmptyEntries);;
for (int i = 0; i < words.Length; i++)
{

View File

@@ -1042,7 +1042,7 @@ namespace OpenSim.Data.PGSQL
cmd.Parameters.Add(m_database.CreateParameter("UserId", props.UserId.ToString()));
cmd.Parameters.Add(m_database.CreateParameter("TagId", props.TagId.ToString()));
cmd.Parameters.Add(m_database.CreateParameter("DataKey", props.DataKey.ToString()));
cmd.Parameters.Add(m_database.CreateParameter("DataVal", props.DataKey.ToString()));
cmd.Parameters.Add(m_database.CreateParameter("DataVal", props.DataVal.ToString()));
cmd.ExecuteNonQuery();
}

View File

@@ -44,7 +44,7 @@ namespace OpenSim.Data.SQLite
public UserAccountData[] GetUsers(UUID scopeID, string query)
{
string[] words = query.Split();
string[] words = query.Split(' ', StringSplitOptions.RemoveEmptyEntries);;
for (int i = 0 ; i < words.Length ; i++)
{
@@ -56,11 +56,8 @@ namespace OpenSim.Data.SQLite
}
}
if (words.Length == 0)
return new UserAccountData[0];
if (words.Length > 2)
return new UserAccountData[0];
if (words.Length == 0 || words.Length > 2)
return [];
using (SQLiteCommand cmd = new SQLiteCommand())
{

View File

@@ -851,11 +851,12 @@ namespace OpenSim.Data.SQLite
query += ":UserId,";
query += ":TagId,";
query += ":DataKey,";
query += ":DataVal) ";
query += ":DataVal) ";
using (SQLiteCommand put = (SQLiteCommand)m_connection.CreateCommand())
{
put.Parameters.AddWithValue(":Id", props.UserId.ToString());
cmd.CommandText = query;
put.Parameters.AddWithValue(":UserId", props.UserId.ToString());
put.Parameters.AddWithValue(":TagId", props.TagId.ToString());
put.Parameters.AddWithValue(":DataKey", props.DataKey.ToString());
put.Parameters.AddWithValue(":DataVal", props.DataVal.ToString());

View File

@@ -784,6 +784,7 @@ namespace OpenSim.Region.Framework.Scenes
#region Constructors
public Scene(RegionInfo regInfo, AgentCircuitManager authen,
ISimulationDataService simDataService, IEstateDataService estateDataService,
IConfigSource config, string simulatorVersion)
@@ -1004,7 +1005,8 @@ namespace OpenSim.Region.Framework.Scenes
m_strictAccessControl = startupConfig.GetBoolean("StrictAccessControl", m_strictAccessControl);
m_seeIntoBannedRegion = startupConfig.GetBoolean("SeeIntoBannedRegion", m_seeIntoBannedRegion);
string[] possibleMapConfigSections = new string[] { "Map", "Startup" };
string[] possibleMapConfigSections = ["Map", "Startup"];
m_generateMaptiles
= Util.GetConfigVarFromSections<bool>(config, "GenerateMaptiles", possibleMapConfigSections, true);
@@ -1037,7 +1039,7 @@ namespace OpenSim.Region.Framework.Scenes
}
}
string[] possibleAccessControlConfigSections = new string[] { "Startup", "AccessControl"};
string[] possibleAccessControlConfigSections = ["Startup", "AccessControl"];
string grant = Util.GetConfigVarFromSections<string>(
config, "AllowedClients", possibleAccessControlConfigSections, string.Empty);
@@ -1078,7 +1080,7 @@ namespace OpenSim.Region.Framework.Scenes
m_update_terrain = startupConfig.GetInt("UpdateTerrainEveryNFrames", m_update_terrain);
m_update_temp_cleaning = startupConfig.GetInt("UpdateTempCleaningEveryNSeconds", m_update_temp_cleaning);
string[] possibleScriptConfigSections = new string[] { "YEngine", "Xengine", "Scripts" };
string[] possibleScriptConfigSections = ["YEngine", "Xengine", "Scripts"];
m_LinkSetDataLimit = Util.GetConfigVarFromSections<int>(config, "LinksetDataLimit", possibleScriptConfigSections, m_LinkSetDataLimit);
}

View File

@@ -156,8 +156,8 @@ namespace OpenSim.Services.AssetService
{
try
{
UUID[] uuid = Array.ConvertAll(ids, id => UUID.Parse(id));
return m_Database.AssetsExist(uuid);
UUID[] uuids = Array.ConvertAll(ids, id => UUID.Parse(id));
return m_Database.AssetsExist(uuids);
}
catch (Exception e)
{
@@ -192,13 +192,12 @@ namespace OpenSim.Services.AssetService
public virtual bool Delete(string id)
{
// m_log.DebugFormat("[ASSET SERVICE]: Deleting asset {0}", id);
//m_log.DebugFormat("[ASSET SERVICE]: Deleting asset {0}", id);
UUID assetID;
if (!UUID.TryParse(id, out assetID))
return false;
if (UUID.TryParse(id, out _))
return m_Database.Delete(id);
return m_Database.Delete(id);
return false;
}
public void Get(string id, string ForeignAssetService, bool StoreOnLocalGrid, SimpleAssetRetrieved callBack)