/// <summary> /// Fetch Asset from m_database /// </summary> /// <param name="assetID">the asset UUID</param> /// <returns></returns> override protected AssetBase FetchStoredAsset(UUID assetID) { string sql = "SELECT * FROM assets WHERE id = @id"; using (AutoClosingSqlCommand command = m_database.Query(sql)) { command.Parameters.Add(m_database.CreateParameter("id", assetID)); using (SqlDataReader reader = command.ExecuteReader()) { if (reader.Read()) { AssetBase asset = new AssetBase(); // Region Main asset.FullID = new UUID((Guid)reader["id"]); asset.Name = (string)reader["name"]; asset.Description = (string)reader["description"]; asset.Type = Convert.ToSByte(reader["assetType"]); asset.Local = Convert.ToBoolean(reader["local"]); asset.Temporary = Convert.ToBoolean(reader["temporary"]); asset.Data = (byte[])reader["data"]; return(asset); } return(null); // throw new Exception("No rows to return"); } } }
/// <summary> /// Returns a list of regions within the specified ranges /// </summary> /// <param name="xmin">minimum X coordinate</param> /// <param name="ymin">minimum Y coordinate</param> /// <param name="xmax">maximum X coordinate</param> /// <param name="ymax">maximum Y coordinate</param> /// <returns>null</returns> /// <remarks>always return null</remarks> override public RegionProfileData[] GetProfilesInRange(uint xmin, uint ymin, uint xmax, uint ymax) { using (AutoClosingSqlCommand command = database.Query("SELECT * FROM regions WHERE locX >= @xmin AND locX <= @xmax AND locY >= @ymin AND locY <= @ymax")) { command.Parameters.Add(database.CreateParameter("xmin", xmin)); command.Parameters.Add(database.CreateParameter("ymin", ymin)); command.Parameters.Add(database.CreateParameter("xmax", xmax)); command.Parameters.Add(database.CreateParameter("ymax", ymax)); List <RegionProfileData> rows = new List <RegionProfileData>(); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { rows.Add(ReadSimRow(reader)); } } if (rows.Count > 0) { return(rows.ToArray()); } } m_log.Info("[GRID DB] : Found no regions within range."); return(null); }
/// <summary> /// Saves a log item to the database /// </summary> /// <param name="serverDaemon">The daemon triggering the event</param> /// <param name="target">The target of the action (region / agent UUID, etc)</param> /// <param name="methodCall">The method call where the problem occured</param> /// <param name="arguments">The arguments passed to the method</param> /// <param name="priority">How critical is this?</param> /// <param name="logMessage">The message to log</param> public void saveLog(string serverDaemon, string target, string methodCall, string arguments, int priority, string logMessage) { string sql = "INSERT INTO logs ([target], [server], [method], [arguments], [priority], [message]) VALUES "; sql += "(@target, @server, @method, @arguments, @priority, @message);"; using (AutoClosingSqlCommand command = database.Query(sql)) { command.Parameters.Add(database.CreateParameter("server", serverDaemon)); command.Parameters.Add(database.CreateParameter("target", target)); command.Parameters.Add(database.CreateParameter("method", methodCall)); command.Parameters.Add(database.CreateParameter("arguments", arguments)); command.Parameters.Add(database.CreateParameter("priority", priority.ToString())); command.Parameters.Add(database.CreateParameter("message", logMessage)); try { command.ExecuteNonQuery(); } catch (Exception e) { //Are we not in a loop here m_log.Error("[LOG DB] Error logging : " + e.Message); } } }
/// <summary> /// Loads the estate settings. /// </summary> /// <param name="regionID">region ID.</param> /// <returns></returns> public EstateSettings LoadEstateSettings(UUID regionID) { EstateSettings es = new EstateSettings(); string sql = "select estate_settings." + String.Join(",estate_settings.", FieldList) + " from estate_map left join estate_settings on estate_map.EstateID = estate_settings.EstateID where estate_settings.EstateID is not null and RegionID = @RegionID"; bool insertEstate = false; using (AutoClosingSqlCommand cmd = _Database.Query(sql)) { cmd.Parameters.Add(_Database.CreateParameter("@RegionID", regionID)); using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { foreach (string name in FieldList) { if (_FieldMap[name].GetValue(es) is bool) { int v = Convert.ToInt32(reader[name]); if (v != 0) { _FieldMap[name].SetValue(es, true); } else { _FieldMap[name].SetValue(es, false); } } else if (_FieldMap[name].GetValue(es) is UUID) { _FieldMap[name].SetValue(es, new UUID((Guid)reader[name])); // uuid); } else { es.EstateID = Convert.ToUInt32(reader["EstateID"].ToString()); } } } else { insertEstate = true; } } } if (insertEstate) { List <string> names = new List <string>(FieldList); names.Remove("EstateID"); sql = string.Format("insert into estate_settings ({0}) values ( @{1})", String.Join(",", names.ToArray()), String.Join(", @", names.ToArray())); //_Log.Debug("[DB ESTATE]: SQL: " + sql); using (SqlConnection connection = _Database.DatabaseConnection()) { using (SqlCommand insertCommand = connection.CreateCommand()) { insertCommand.CommandText = sql + " SET @ID = SCOPE_IDENTITY()"; foreach (string name in names) { insertCommand.Parameters.Add(_Database.CreateParameter("@" + name, _FieldMap[name].GetValue(es))); } SqlParameter idParameter = new SqlParameter("@ID", SqlDbType.Int); idParameter.Direction = ParameterDirection.Output; insertCommand.Parameters.Add(idParameter); insertCommand.ExecuteNonQuery(); es.EstateID = Convert.ToUInt32(idParameter.Value); } } using (AutoClosingSqlCommand cmd = _Database.Query("INSERT INTO [estate_map] ([RegionID] ,[EstateID]) VALUES (@RegionID, @EstateID)")) { cmd.Parameters.Add(_Database.CreateParameter("@RegionID", regionID)); cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID)); // This will throw on dupe key try { cmd.ExecuteNonQuery(); } catch (Exception e) { _Log.DebugFormat("[ESTATE DB]: Error inserting regionID and EstateID in estate_map: {0}", e); } } // Munge and transfer the ban list sql = string.Format("insert into estateban select {0}, bannedUUID, bannedIp, bannedIpHostMask, '' from regionban where regionban.regionUUID = @UUID", es.EstateID); using (AutoClosingSqlCommand cmd = _Database.Query(sql)) { cmd.Parameters.Add(_Database.CreateParameter("@UUID", regionID)); try { cmd.ExecuteNonQuery(); } catch (Exception) { _Log.Debug("[ESTATE DB]: Error setting up estateban from regionban"); } } //TODO check if this is needed?? es.Save(); } LoadBanList(es); es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers"); es.EstateAccess = LoadUUIDList(es.EstateID, "estate_users"); es.EstateGroups = LoadUUIDList(es.EstateID, "estate_groups"); //Set event es.OnSave += StoreEstateSettings; return(es); }
/// <summary> /// Returns a specified inventory folder /// </summary> /// <param name="folderID">The folder to return</param> /// <returns>A folder class</returns> public InventoryFolderBase getInventoryFolder(UUID folderID) { using (AutoClosingSqlCommand command = database.Query("SELECT * FROM inventoryfolders WHERE folderID = @folderID")) { command.Parameters.Add(database.CreateParameter("folderID", folderID)); using (IDataReader reader = command.ExecuteReader()) { if (reader.Read()) { return(readInventoryFolder(reader)); } } } m_log.InfoFormat("[INVENTORY DB] : Found no inventory folder with ID : {0}", folderID); return(null); }