Mantis#2657. Thank you kindly, StrawberryFride for a patch that:

Added access_time and create_time, plus the new sun position 
data to MSSQL code.
0.6.1-post-fixes
Charles Krinke 2008-11-19 18:36:04 +00:00
parent 44c56a974c
commit 9babdb1095
4 changed files with 70 additions and 57 deletions

View File

@ -42,7 +42,7 @@ namespace OpenSim.Data.MSSQL
private const string _migrationStore = "AssetStore"; private const string _migrationStore = "AssetStore";
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private long TicksToEpoch;
/// <summary> /// <summary>
/// Database manager /// Database manager
/// </summary> /// </summary>
@ -71,6 +71,8 @@ namespace OpenSim.Data.MSSQL
/// <param name="connectionString">connect string</param> /// <param name="connectionString">connect string</param>
override public void Initialise(string connectionString) override public void Initialise(string connectionString)
{ {
TicksToEpoch = new System.DateTime(1970, 1, 1).Ticks;
if (!string.IsNullOrEmpty(connectionString)) if (!string.IsNullOrEmpty(connectionString))
{ {
database = new MSSQLManager(connectionString); database = new MSSQLManager(connectionString);
@ -156,18 +158,19 @@ namespace OpenSim.Data.MSSQL
} }
using (AutoClosingSqlCommand command = database.Query( using (AutoClosingSqlCommand command = database.Query(
"INSERT INTO assets ([id], [name], [description], [assetType], [local], [temporary], [data])" + "INSERT INTO assets ([id], [name], [description], [assetType], [local], [temporary], [create_time], [access_time], [data])" +
" VALUES " + " VALUES " +
"(@id, @name, @description, @assetType, @local, @temporary, @data)")) "(@id, @name, @description, @assetType, @local, @temporary, @create_time, @access_time, @data)"))
{ {
//SqlParameter p = cmd.Parameters.Add("id", SqlDbType.NVarChar); int now = (int)((System.DateTime.Now.Ticks - TicksToEpoch) / 10000000);
//p.Value = asset.FullID.ToString();
command.Parameters.Add(database.CreateParameter("id", asset.FullID)); command.Parameters.Add(database.CreateParameter("id", asset.FullID));
command.Parameters.Add(database.CreateParameter("name", asset.Name)); command.Parameters.Add(database.CreateParameter("name", asset.Name));
command.Parameters.Add(database.CreateParameter("description", asset.Description)); command.Parameters.Add(database.CreateParameter("description", asset.Description));
command.Parameters.Add(database.CreateParameter("assetType", asset.Type)); command.Parameters.Add(database.CreateParameter("assetType", asset.Type));
command.Parameters.Add(database.CreateParameter("local", asset.Local)); command.Parameters.Add(database.CreateParameter("local", asset.Local));
command.Parameters.Add(database.CreateParameter("temporary", asset.Temporary)); command.Parameters.Add(database.CreateParameter("temporary", asset.Temporary));
command.Parameters.Add(database.CreateParameter("access_time", now));
command.Parameters.Add(database.CreateParameter("create_time", now));
command.Parameters.Add(database.CreateParameter("data", asset.Data)); command.Parameters.Add(database.CreateParameter("data", asset.Data));
command.ExecuteNonQuery(); command.ExecuteNonQuery();
@ -209,6 +212,25 @@ namespace OpenSim.Data.MSSQL
} }
} }
private void UpdateAccessTime(AssetBase asset)
{
using (AutoClosingSqlCommand cmd = database.Query("UPDATE assets SET access_time = @access_time WHERE id=@id"))
{
int now = (int)((System.DateTime.Now.Ticks - TicksToEpoch) / 10000000);
cmd.Parameters.AddWithValue("@id", asset.FullID.ToString());
cmd.Parameters.AddWithValue("@access_time", now);
try
{
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
m_log.Error(e.ToString());
}
}
}
/// <summary> /// <summary>
/// Check if asset exist in database /// Check if asset exist in database
/// </summary> /// </summary>

View File

@ -101,8 +101,6 @@ namespace OpenSim.Data.MSSQL
using (SqlCommand primSelectCmd = new SqlCommand(_PrimSelect, connection)) using (SqlCommand primSelectCmd = new SqlCommand(_PrimSelect, connection))
{ {
primSelectCmd.Parameters.AddWithValue("@RegionUUID", ""); primSelectCmd.Parameters.AddWithValue("@RegionUUID", "");
//primSelectCmd.Parameters.AddWithValue("@SceneGroupID", "%");
//primSelectCmd.Parameters.AddWithValue("@UUID", "");
_PrimDataAdapter = new SqlDataAdapter(primSelectCmd); _PrimDataAdapter = new SqlDataAdapter(primSelectCmd);
DataTable primDataTable = new DataTable("prims"); DataTable primDataTable = new DataTable("prims");
@ -110,8 +108,7 @@ namespace OpenSim.Data.MSSQL
primDataTable.PrimaryKey = new DataColumn[] { primDataTable.Columns["UUID"] }; primDataTable.PrimaryKey = new DataColumn[] { primDataTable.Columns["UUID"] };
_PrimsDataSet.Tables.Add(primDataTable); _PrimsDataSet.Tables.Add(primDataTable);
SetupCommands(_PrimDataAdapter); //, connection); SetupCommands(_PrimDataAdapter);
//SetupPrimCommands(_PrimDataAdapter, connection);
primDataTable.Clear(); primDataTable.Clear();
} }
@ -119,8 +116,6 @@ namespace OpenSim.Data.MSSQL
using (SqlCommand shapeSelectCmd = new SqlCommand(_ShapeSelect, connection)) using (SqlCommand shapeSelectCmd = new SqlCommand(_ShapeSelect, connection))
{ {
shapeSelectCmd.Parameters.AddWithValue("@RegionUUID", ""); shapeSelectCmd.Parameters.AddWithValue("@RegionUUID", "");
//shapeSelectCmd.Parameters.AddWithValue("@SceneGroupID", "%");
//shapeSelectCmd.Parameters.AddWithValue("@UUID", "");
_ShapeDataAdapter = new SqlDataAdapter(shapeSelectCmd); _ShapeDataAdapter = new SqlDataAdapter(shapeSelectCmd);
DataTable shapeDataTable = new DataTable("primshapes"); DataTable shapeDataTable = new DataTable("primshapes");
@ -128,8 +123,7 @@ namespace OpenSim.Data.MSSQL
shapeDataTable.PrimaryKey = new DataColumn[] { shapeDataTable.Columns["UUID"] }; shapeDataTable.PrimaryKey = new DataColumn[] { shapeDataTable.Columns["UUID"] };
_PrimsDataSet.Tables.Add(shapeDataTable); _PrimsDataSet.Tables.Add(shapeDataTable);
SetupCommands(_ShapeDataAdapter); //, connection); SetupCommands(_ShapeDataAdapter);
//SetupShapeCommands(_ShapeDataAdapter, connection);
shapeDataTable.Clear(); shapeDataTable.Clear();
} }
@ -137,8 +131,6 @@ namespace OpenSim.Data.MSSQL
using (SqlCommand itemSelectCmd = new SqlCommand(_ItemsSelect, connection)) using (SqlCommand itemSelectCmd = new SqlCommand(_ItemsSelect, connection))
{ {
itemSelectCmd.Parameters.AddWithValue("@RegionUUID", ""); itemSelectCmd.Parameters.AddWithValue("@RegionUUID", "");
//itemSelectCmd.Parameters.AddWithValue("@SceneGroupID", "%");
//itemSelectCmd.Parameters.AddWithValue("@UUID", "");
_ItemsDataAdapter = new SqlDataAdapter(itemSelectCmd); _ItemsDataAdapter = new SqlDataAdapter(itemSelectCmd);
DataTable itemsDataTable = new DataTable("primitems"); DataTable itemsDataTable = new DataTable("primitems");
@ -146,8 +138,7 @@ namespace OpenSim.Data.MSSQL
itemsDataTable.PrimaryKey = new DataColumn[] { itemsDataTable.Columns["itemID"] }; itemsDataTable.PrimaryKey = new DataColumn[] { itemsDataTable.Columns["itemID"] };
_PrimsDataSet.Tables.Add(itemsDataTable); _PrimsDataSet.Tables.Add(itemsDataTable);
SetupCommands(_ItemsDataAdapter); //, connection); SetupCommands(_ItemsDataAdapter);
//SetupItemsCommands(_ItemsDataAdapter, connection);
itemsDataTable.Clear(); itemsDataTable.Clear();
} }
@ -328,11 +319,6 @@ namespace OpenSim.Data.MSSQL
//Retrieve all values of current region, and current scene/or prims //Retrieve all values of current region, and current scene/or prims
//Build primID's, we use IN so I can select all prims from objgroup //Build primID's, we use IN so I can select all prims from objgroup
string primID = ""; string primID = "";
// foreach (SceneObjectPart prim in obj.Children.Values)
// {
// primID += prim.UUID + "', '";
// }
// primID = primID.Remove(primID.LastIndexOf("',"));
lock (_Database) lock (_Database)
{ {
@ -352,14 +338,12 @@ namespace OpenSim.Data.MSSQL
DataRow primRow = prims.Rows.Find(prim.UUID.ToString()); DataRow primRow = prims.Rows.Find(prim.UUID.ToString());
if (primRow == null) if (primRow == null)
{ {
// _Log.DebugFormat("[REGION DB]: Adding new prim with key: {0}", prim.UUID);
primRow = prims.NewRow(); primRow = prims.NewRow();
fillPrimRow(primRow, prim, obj.UUID, regionUUID); fillPrimRow(primRow, prim, obj.UUID, regionUUID);
prims.Rows.Add(primRow); prims.Rows.Add(primRow);
} }
else else
{ {
// _Log.DebugFormat("[REGION DB]: Changing prim with key: {0}", prim.UUID);
fillPrimRow(primRow, prim, obj.UUID, regionUUID); fillPrimRow(primRow, prim, obj.UUID, regionUUID);
} }
@ -440,11 +424,9 @@ namespace OpenSim.Data.MSSQL
using (AutoClosingSqlCommand cmd = _Database.Query(sql)) using (AutoClosingSqlCommand cmd = _Database.Query(sql))
{ {
foreach (TaskInventoryItem newItem in items) foreach (TaskInventoryItem taskItem in items)
{ {
// cmd.Parameters.AddRange(CreatePrimInventoryParameters(taskItem));
cmd.Parameters.AddRange(CreatePrimInventoryParameters(newItem));
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
cmd.Parameters.Clear(); cmd.Parameters.Clear();
@ -547,7 +529,6 @@ namespace OpenSim.Data.MSSQL
{ {
while (readerLandData.Read()) while (readerLandData.Read())
{ {
// LandData data = buildLandData(readerLandData);
landDataForRegion.Add(buildLandData(readerLandData)); landDataForRegion.Add(buildLandData(readerLandData));
} }
} }
@ -605,10 +586,9 @@ VALUES
{ {
foreach (ParcelManager.ParcelAccessEntry parcelAccessEntry in parcel.landData.ParcelAccessList) foreach (ParcelManager.ParcelAccessEntry parcelAccessEntry in parcel.landData.ParcelAccessList)
{ {
cmd.Parameters.AddRange(CreateLandAccessParameters(parcelAccessEntry, parcel.regionUUID)); cmd.Parameters.AddRange(CreateLandAccessParameters(parcelAccessEntry, parcel.regionUUID));
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
cmd.Parameters.Clear(); cmd.Parameters.Clear();
} }
} }
@ -699,7 +679,7 @@ VALUES
,[elevation_1_ne] = @elevation_1_ne ,[elevation_2_ne] = @elevation_2_ne ,[elevation_1_se] = @elevation_1_se ,[elevation_2_se] = @elevation_2_se ,[elevation_1_ne] = @elevation_1_ne ,[elevation_2_ne] = @elevation_2_ne ,[elevation_1_se] = @elevation_1_se ,[elevation_2_se] = @elevation_2_se
,[elevation_1_sw] = @elevation_1_sw ,[elevation_2_sw] = @elevation_2_sw ,[water_height] = @water_height ,[terrain_raise_limit] = @terrain_raise_limit ,[elevation_1_sw] = @elevation_1_sw ,[elevation_2_sw] = @elevation_2_sw ,[water_height] = @water_height ,[terrain_raise_limit] = @terrain_raise_limit
,[terrain_lower_limit] = @terrain_lower_limit ,[use_estate_sun] = @use_estate_sun ,[fixed_sun] = @fixed_sun ,[sun_position] = @sun_position ,[terrain_lower_limit] = @terrain_lower_limit ,[use_estate_sun] = @use_estate_sun ,[fixed_sun] = @fixed_sun ,[sun_position] = @sun_position
,[covenant] = @covenant ,[Sandbox] = @Sandbox WHERE [regionUUID] = @regionUUID"; ,[covenant] = @covenant , [sunvectorx] = @sunvectorx, [sunvectory] = @sunvectory, [sunvectorz] = @sunvectorz, [Sandbox] = @Sandbox WHERE [regionUUID] = @regionUUID";
using (AutoClosingSqlCommand cmd = _Database.Query(sql)) using (AutoClosingSqlCommand cmd = _Database.Query(sql))
{ {
@ -779,13 +759,21 @@ VALUES
private void StoreNewRegionSettings(RegionSettings regionSettings) private void StoreNewRegionSettings(RegionSettings regionSettings)
{ {
string sql = @"INSERT INTO [regionsettings] string sql = @"INSERT INTO [regionsettings]
([regionUUID],[block_terraform],[block_fly],[allow_damage],[restrict_pushing],[allow_land_resell],[allow_land_join_divide],[block_show_in_search],[agent_limit],[object_bonus],[maturity],[disable_scripts],[disable_collisions],[disable_physics],[terrain_texture_1],[terrain_texture_2],[terrain_texture_3],[terrain_texture_4],[elevation_1_nw],[elevation_2_nw],[elevation_1_ne],[elevation_2_ne],[elevation_1_se],[elevation_2_se],[elevation_1_sw],[elevation_2_sw],[water_height],[terrain_raise_limit],[terrain_lower_limit],[use_estate_sun],[fixed_sun],[sun_position],[covenant],[Sandbox]) VALUES ([regionUUID],[block_terraform],[block_fly],[allow_damage],[restrict_pushing],[allow_land_resell],[allow_land_join_divide],
(@regionUUID,@block_terraform,@block_fly,@allow_damage,@restrict_pushing,@allow_land_resell,@allow_land_join_divide,@block_show_in_search,@agent_limit,@object_bonus,@maturity,@disable_scripts,@disable_collisions,@disable_physics,@terrain_texture_1,@terrain_texture_2,@terrain_texture_3,@terrain_texture_4,@elevation_1_nw,@elevation_2_nw,@elevation_1_ne,@elevation_2_ne,@elevation_1_se,@elevation_2_se,@elevation_1_sw,@elevation_2_sw,@water_height,@terrain_raise_limit,@terrain_lower_limit,@use_estate_sun,@fixed_sun,@sun_position,@covenant,@Sandbox)"; [block_show_in_search],[agent_limit],[object_bonus],[maturity],[disable_scripts],[disable_collisions],[disable_physics],
[terrain_texture_1],[terrain_texture_2],[terrain_texture_3],[terrain_texture_4],[elevation_1_nw],[elevation_2_nw],[elevation_1_ne],
[elevation_2_ne],[elevation_1_se],[elevation_2_se],[elevation_1_sw],[elevation_2_sw],[water_height],[terrain_raise_limit],
[terrain_lower_limit],[use_estate_sun],[fixed_sun],[sun_position],[covenant],[Sandbox])
VALUES
(@regionUUID,@block_terraform,@block_fly,@allow_damage,@restrict_pushing,@allow_land_resell,@allow_land_join_divide,
@block_show_in_search,@agent_limit,@object_bonus,@maturity,@disable_scripts,@disable_collisions,@disable_physics,@terrain_texture_1,
@terrain_texture_2,@terrain_texture_3,@terrain_texture_4,@elevation_1_nw,@elevation_2_nw,@elevation_1_ne,@elevation_2_ne,
@elevation_1_se,@elevation_2_se,@elevation_1_sw,@elevation_2_sw,@water_height,@terrain_raise_limit,@terrain_lower_limit,
@use_estate_sun,@fixed_sun,@sun_position,@covenant,@sunvectorx,@sunvectory, @sunvectorz, @Sandbox)";
using (AutoClosingSqlCommand cmd = _Database.Query(sql)) using (AutoClosingSqlCommand cmd = _Database.Query(sql))
{ {
cmd.Parameters.AddRange(CreateRegionSettingParameters(regionSettings)); cmd.Parameters.AddRange(CreateRegionSettingParameters(regionSettings));
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
} }
@ -835,6 +823,11 @@ VALUES
newSettings.Sandbox = Convert.ToBoolean(row["sandbox"]); newSettings.Sandbox = Convert.ToBoolean(row["sandbox"]);
newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]); newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]);
newSettings.SunPosition = Convert.ToDouble(row["sun_position"]); newSettings.SunPosition = Convert.ToDouble(row["sun_position"]);
newSettings.SunVector = new Vector3(
Convert.ToSingle(row["sunvectorx"]),
Convert.ToSingle(row["sunvectory"]),
Convert.ToSingle(row["sunvectorz"])
);
newSettings.Covenant = new UUID((String)row["covenant"]); newSettings.Covenant = new UUID((String)row["covenant"]);
return newSettings; return newSettings;
@ -1147,7 +1140,6 @@ VALUES
#endregion #endregion
#region Create parameters methods #region Create parameters methods
/// <summary> /// <summary>
/// Creates the prim inventory parameters. /// Creates the prim inventory parameters.
/// </summary> /// </summary>
@ -1189,7 +1181,7 @@ VALUES
/// <returns></returns> /// <returns></returns>
private SqlParameter[] CreateRegionSettingParameters(RegionSettings settings) private SqlParameter[] CreateRegionSettingParameters(RegionSettings settings)
{ {
SqlParameter[] parameters = new SqlParameter[34]; SqlParameter[] parameters = new SqlParameter[37];
parameters[0] = _Database.CreateParameter("regionUUID", settings.RegionUUID); parameters[0] = _Database.CreateParameter("regionUUID", settings.RegionUUID);
parameters[1] = _Database.CreateParameter("block_terraform", settings.BlockTerraform); parameters[1] = _Database.CreateParameter("block_terraform", settings.BlockTerraform);
@ -1224,7 +1216,10 @@ VALUES
parameters[30] = _Database.CreateParameter("sandbox", settings.Sandbox); parameters[30] = _Database.CreateParameter("sandbox", settings.Sandbox);
parameters[31] = _Database.CreateParameter("fixed_sun", settings.FixedSun); parameters[31] = _Database.CreateParameter("fixed_sun", settings.FixedSun);
parameters[32] = _Database.CreateParameter("sun_position", settings.SunPosition); parameters[32] = _Database.CreateParameter("sun_position", settings.SunPosition);
parameters[33] = _Database.CreateParameter("covenant", settings.Covenant); parameters[33] = _Database.CreateParameter("sunvectorx", settings.SunVector.X);
parameters[34] = _Database.CreateParameter("sunvectory", settings.SunVector.Y);
parameters[35] = _Database.CreateParameter("sunvectorz", settings.SunVector.Z);
parameters[36] = _Database.CreateParameter("covenant", settings.Covenant);
return parameters; return parameters;
} }
@ -1298,6 +1293,7 @@ VALUES
} }
/// <summary> /// <summary>
/// <summary>
/// Fills/Updates the prim datarow. /// Fills/Updates the prim datarow.
/// </summary> /// </summary>
/// <param name="row">datarow.</param> /// <param name="row">datarow.</param>
@ -1480,34 +1476,16 @@ VALUES
{ {
_PrimDataAdapter.SelectCommand.Connection = connection; _PrimDataAdapter.SelectCommand.Connection = connection;
_PrimDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString(); _PrimDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString();
// if (sceneGroupID != UUID.Zero)
// _PrimDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString();
// else
// _PrimDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%";
// _PrimDataAdapter.SelectCommand.Parameters["@UUID"].Value = primID;
_PrimDataAdapter.Fill(_PrimsDataSet, "prims"); _PrimDataAdapter.Fill(_PrimsDataSet, "prims");
_Log.Debug("Prim row count: " + _PrimsDataSet.Tables["prims"].Rows.Count); _Log.Debug("Prim row count: " + _PrimsDataSet.Tables["prims"].Rows.Count);
_ShapeDataAdapter.SelectCommand.Connection = connection; _ShapeDataAdapter.SelectCommand.Connection = connection;
_ShapeDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString(); _ShapeDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString();
// if (sceneGroupID != UUID.Zero)
// _ShapeDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString();
// else
// _ShapeDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%";
// _ShapeDataAdapter.SelectCommand.Parameters["@UUID"].Value = primID;
_ShapeDataAdapter.Fill(_PrimsDataSet, "primshapes"); _ShapeDataAdapter.Fill(_PrimsDataSet, "primshapes");
_ItemsDataAdapter.SelectCommand.Connection = connection; _ItemsDataAdapter.SelectCommand.Connection = connection;
_ItemsDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString(); _ItemsDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString();
// if (sceneGroupID != UUID.Zero)
// _ItemsDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString();
// else
// _ItemsDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%";
// _ItemsDataAdapter.SelectCommand.Parameters["@UUID"].Value = primID;
_ItemsDataAdapter.Fill(_PrimsDataSet, "primitems"); _ItemsDataAdapter.Fill(_PrimsDataSet, "primitems");
} }
} }

View File

@ -0,0 +1,6 @@
BEGIN TRANSACTION
ALTER TABLE assets add create_time integer default 0
ALTER TABLE assets add access_time integer default 0
COMMIT

View File

@ -0,0 +1,7 @@
BEGIN TRANSACTION
ALTER TABLE regionsettings ADD sunvectorx float NOT NULL default 0;
ALTER TABLE regionsettings ADD sunvectory float NOT NULL default 0;
ALTER TABLE regionsettings ADD sunvectorz float NOT NULL default 0;
COMMIT