/// <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> /// Update asset in m_database /// </summary> /// <param name="asset">the asset</param> override public void UpdateAsset(AssetBase asset) { string sql = @"UPDATE assets set id = @id, name = @name, description = @description, assetType = @assetType, local = @local, temporary = @temporary, data = @data WHERE id = @keyId;"; using (AutoClosingSqlCommand command = m_database.Query(sql)) { command.Parameters.Add(m_database.CreateParameter("id", asset.FullID)); command.Parameters.Add(m_database.CreateParameter("name", asset.Name)); command.Parameters.Add(m_database.CreateParameter("description", asset.Description)); command.Parameters.Add(m_database.CreateParameter("assetType", asset.Type)); command.Parameters.Add(m_database.CreateParameter("local", asset.Local)); command.Parameters.Add(m_database.CreateParameter("temporary", asset.Temporary)); command.Parameters.Add(m_database.CreateParameter("data", asset.Data)); command.Parameters.Add(m_database.CreateParameter("@keyId", asset.FullID)); try { command.ExecuteNonQuery(); } catch (Exception e) { m_log.Error(e.ToString()); } } }
/// <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> /// Stores the estate settings. /// </summary> /// <param name="es">estate settings</param> public void StoreEstateSettings(EstateSettings es) { List <string> names = new List <string>(FieldList); names.Remove("EstateID"); string sql = string.Format("UPDATE estate_settings SET "); foreach (string name in names) { sql += name + " = @" + name + ", "; } sql = sql.Remove(sql.LastIndexOf(",")); sql += " WHERE EstateID = @EstateID"; using (AutoClosingSqlCommand cmd = _Database.Query(sql)) { foreach (string name in names) { cmd.Parameters.Add(_Database.CreateParameter("@" + name, _FieldMap[name].GetValue(es))); } cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID)); cmd.ExecuteNonQuery(); } SaveBanList(es); SaveUUIDList(es.EstateID, "estate_managers", es.EstateManagers); SaveUUIDList(es.EstateID, "estate_users", es.EstateAccess); SaveUUIDList(es.EstateID, "estate_groups", es.EstateGroups); }
/// <summary> /// Create asset in m_database /// </summary> /// <param name="asset">the asset</param> override public void CreateAsset(AssetBase asset) { if (ExistsAsset(asset.FullID)) { return; } string sql = @"INSERT INTO assets ([id], [name], [description], [assetType], [local], [temporary], [create_time], [access_time], [data]) VALUES (@id, @name, @description, @assetType, @local, @temporary, @create_time, @access_time, @data)"; using (AutoClosingSqlCommand command = m_database.Query(sql)) { int now = (int)((System.DateTime.Now.Ticks - m_ticksToEpoch) / 10000000); command.Parameters.Add(m_database.CreateParameter("id", asset.FullID)); command.Parameters.Add(m_database.CreateParameter("name", asset.Name)); command.Parameters.Add(m_database.CreateParameter("description", asset.Description)); command.Parameters.Add(m_database.CreateParameter("assetType", asset.Type)); command.Parameters.Add(m_database.CreateParameter("local", asset.Local)); command.Parameters.Add(m_database.CreateParameter("temporary", asset.Temporary)); command.Parameters.Add(m_database.CreateParameter("access_time", now)); command.Parameters.Add(m_database.CreateParameter("create_time", now)); command.Parameters.Add(m_database.CreateParameter("data", asset.Data)); command.ExecuteNonQuery(); } }
private void SaveUUIDList(uint estateID, string table, UUID[] data) { //Delete first string sql = string.Format("delete from {0} where EstateID = @EstateID", table); using (AutoClosingSqlCommand cmd = _Database.Query(sql)) { cmd.Parameters.Add(_Database.CreateParameter("@EstateID", estateID)); cmd.ExecuteNonQuery(); } sql = string.Format("insert into {0} (EstateID, uuid) values ( @EstateID, @uuid )", table); using (AutoClosingSqlCommand cmd = _Database.Query(sql)) { cmd.Parameters.Add(_Database.CreateParameter("@EstateID", estateID)); bool createParamOnce = true; foreach (UUID uuid in data) { if (createParamOnce) { cmd.Parameters.Add(_Database.CreateParameter("@uuid", uuid)); createParamOnce = false; } else { cmd.Parameters["@uuid"].Value = uuid.Guid; //.ToString(); //TODO check if this works } cmd.ExecuteNonQuery(); } } }
private void LoadBanList(EstateSettings es) { es.ClearBans(); string sql = "select bannedUUID from estateban where EstateID = @EstateID"; using (AutoClosingSqlCommand cmd = _Database.Query(sql)) { SqlParameter idParameter = new SqlParameter("@EstateID", SqlDbType.Int); idParameter.Value = es.EstateID; cmd.Parameters.Add(idParameter); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { EstateBan eb = new EstateBan(); eb.BannedUserID = new UUID((Guid)reader["bannedUUID"]); //uuid; eb.BannedHostAddress = "0.0.0.0"; eb.BannedHostIPMask = "0.0.0.0"; es.AddBan(eb); } } } }
/// <summary> /// Delete an inventory folder /// </summary> /// <param name="folderID">Id of folder to delete</param> public void deleteInventoryFolder(UUID folderID) { using (SqlConnection connection = database.DatabaseConnection()) { List <InventoryFolderBase> subFolders; using (SqlCommand command = new SqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = @parentID", connection)) { command.Parameters.Add(database.CreateParameter("@parentID", UUID.Zero)); AutoClosingSqlCommand autoCommand = new AutoClosingSqlCommand(command); subFolders = getFolderHierarchy(folderID, autoCommand); } //Delete all sub-folders foreach (InventoryFolderBase f in subFolders) { DeleteOneFolder(f.ID, connection); DeleteItemsInFolder(f.ID, connection); } //Delete the actual row DeleteOneFolder(folderID, connection); DeleteItemsInFolder(folderID, connection); connection.Close(); } }
/// <summary> /// Returns a list of AssetMetadata objects. The list is a subset of /// the entire data set offset by <paramref name="start" /> containing /// <paramref name="count" /> elements. /// </summary> /// <param name="start">The number of results to discard from the total data set.</param> /// <param name="count">The number of rows the returned list should contain.</param> /// <returns>A list of AssetMetadata objects.</returns> public override List <AssetMetadata> FetchAssetMetadataSet(int start, int count) { List <AssetMetadata> retList = new List <AssetMetadata>(count); string sql = @"SELECT (name,description,assetType,temporary,id), Row = ROW_NUMBER() OVER (ORDER BY (some column to order by)) WHERE Row >= @Start AND Row < @Start + @Count"; using (AutoClosingSqlCommand command = m_database.Query(sql)) { command.Parameters.Add(m_database.CreateParameter("start", start)); command.Parameters.Add(m_database.CreateParameter("count", count)); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { AssetMetadata metadata = new AssetMetadata(); metadata.FullID = new UUID((Guid)reader["id"]); metadata.Name = (string)reader["name"]; metadata.Description = (string)reader["description"]; metadata.Type = Convert.ToSByte(reader["assetType"]); metadata.Temporary = Convert.ToBoolean(reader["temporary"]); } } } return(retList); }
/// <summary> /// Updates an inventory folder /// </summary> /// <param name="folder">Folder to update</param> public void updateInventoryFolder(InventoryFolderBase folder) { string sql = @"UPDATE inventoryfolders SET folderID = @folderID, agentID = @agentID, parentFolderID = @parentFolderID, folderName = @folderName, type = @type, version = @version WHERE folderID = @keyFolderID"; using (AutoClosingSqlCommand command = database.Query(sql)) { command.Parameters.Add(database.CreateParameter("folderID", folder.ID)); command.Parameters.Add(database.CreateParameter("agentID", folder.Owner)); command.Parameters.Add(database.CreateParameter("parentFolderID", folder.ParentID)); command.Parameters.Add(database.CreateParameter("folderName", folder.Name)); command.Parameters.Add(database.CreateParameter("type", folder.Type)); command.Parameters.Add(database.CreateParameter("version", folder.Version)); command.Parameters.Add(database.CreateParameter("@keyFolderID", folder.ID)); try { command.ExecuteNonQuery(); } catch (Exception e) { m_log.ErrorFormat("[INVENTORY DB]: Error : {0}", e.Message); } } }
/// <summary> /// Creates a new inventory folder /// </summary> /// <param name="folder">Folder to create</param> public void addInventoryFolder(InventoryFolderBase folder) { string sql = @"INSERT INTO inventoryfolders ([folderID], [agentID], [parentFolderID], [folderName], [type], [version]) VALUES (@folderID, @agentID, @parentFolderID, @folderName, @type, @version);"; using (AutoClosingSqlCommand command = database.Query(sql)) { command.Parameters.Add(database.CreateParameter("folderID", folder.ID)); command.Parameters.Add(database.CreateParameter("agentID", folder.Owner)); command.Parameters.Add(database.CreateParameter("parentFolderID", folder.ParentID)); command.Parameters.Add(database.CreateParameter("folderName", folder.Name)); command.Parameters.Add(database.CreateParameter("type", folder.Type)); command.Parameters.Add(database.CreateParameter("version", folder.Version)); try { //IDbCommand result = database.Query(sql, param); command.ExecuteNonQuery(); } catch (Exception e) { m_log.ErrorFormat("[INVENTORY DB]: Error : {0}", e.Message); } } }
/// <summary> /// Returns all child folders in the hierarchy from the parent folder and down. /// Does not return the parent folder itself. /// </summary> /// <param name="parentID">The folder to get subfolders for</param> /// <returns>A list of inventory folders</returns> public List <InventoryFolderBase> getFolderHierarchy(UUID parentID) { //Note maybe change this to use a Dataset that loading in all folders of a user and then go throw it that way. //Note this is changed so it opens only one connection to the database and not everytime it wants to get data. List <InventoryFolderBase> folders = new List <InventoryFolderBase>(); using (AutoClosingSqlCommand command = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = @parentID")) { command.Parameters.Add(database.CreateParameter("@parentID", parentID)); folders.AddRange(getInventoryFolders(command)); List <InventoryFolderBase> tempFolders = new List <InventoryFolderBase>(); foreach (InventoryFolderBase folderBase in folders) { tempFolders.AddRange(getFolderHierarchy(folderBase.ID, command)); } if (tempFolders.Count > 0) { folders.AddRange(tempFolders); } } return(folders); }
/// <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> /// Updates the specified inventory item /// </summary> /// <param name="item">Inventory item to update</param> public void updateInventoryItem(InventoryItemBase item) { string sql = @"UPDATE inventoryitems SET inventoryID = @inventoryID, assetID = @assetID, assetType = @assetType, parentFolderID = @parentFolderID, avatarID = @avatarID, inventoryName = @inventoryName, inventoryDescription = @inventoryDescription, inventoryNextPermissions = @inventoryNextPermissions, inventoryCurrentPermissions = @inventoryCurrentPermissions, invType = @invType, creatorID = @creatorID, inventoryBasePermissions = @inventoryBasePermissions, inventoryEveryOnePermissions = @inventoryEveryOnePermissions, salePrice = @salePrice, saleType = @saleType, creationDate = @creationDate, groupID = @groupID, groupOwned = @groupOwned, flags = @flags WHERE inventoryID = @keyInventoryID"; using (AutoClosingSqlCommand command = database.Query(sql)) { command.Parameters.Add(database.CreateParameter("inventoryID", item.ID)); command.Parameters.Add(database.CreateParameter("assetID", item.AssetID)); command.Parameters.Add(database.CreateParameter("assetType", item.AssetType)); command.Parameters.Add(database.CreateParameter("parentFolderID", item.Folder)); command.Parameters.Add(database.CreateParameter("avatarID", item.Owner)); command.Parameters.Add(database.CreateParameter("inventoryName", item.Name)); command.Parameters.Add(database.CreateParameter("inventoryDescription", item.Description)); command.Parameters.Add(database.CreateParameter("inventoryNextPermissions", item.NextPermissions)); command.Parameters.Add(database.CreateParameter("inventoryCurrentPermissions", item.CurrentPermissions)); command.Parameters.Add(database.CreateParameter("invType", item.InvType)); command.Parameters.Add(database.CreateParameter("creatorID", item.CreatorIdAsUuid)); command.Parameters.Add(database.CreateParameter("inventoryBasePermissions", item.BasePermissions)); command.Parameters.Add(database.CreateParameter("inventoryEveryOnePermissions", item.EveryOnePermissions)); command.Parameters.Add(database.CreateParameter("salePrice", item.SalePrice)); command.Parameters.Add(database.CreateParameter("saleType", item.SaleType)); command.Parameters.Add(database.CreateParameter("creationDate", item.CreationDate)); command.Parameters.Add(database.CreateParameter("groupID", item.GroupID)); command.Parameters.Add(database.CreateParameter("groupOwned", item.GroupOwned)); command.Parameters.Add(database.CreateParameter("flags", item.Flags)); command.Parameters.Add(database.CreateParameter("@keyInventoryID", item.ID)); try { command.ExecuteNonQuery(); } catch (Exception e) { m_log.Error("[INVENTORY DB]: Error updating item :" + e.Message); } } }
/// <summary> /// Gets the inventory folders. /// </summary> /// <param name="command">SQLcommand.</param> /// <returns></returns> private static List <InventoryFolderBase> getInventoryFolders(AutoClosingSqlCommand command) { using (IDataReader reader = command.ExecuteReader()) { List <InventoryFolderBase> items = new List <InventoryFolderBase>(); while (reader.Read()) { items.Add(readInventoryFolder(reader)); } return(items); } }
// See IInventoryDataPlugin /// <summary> /// Delete an item in inventory database /// </summary> /// <param name="itemID">the item UUID</param> public void deleteInventoryItem(UUID itemID) { using (AutoClosingSqlCommand command = database.Query("DELETE FROM inventoryitems WHERE inventoryID=@inventoryID")) { command.Parameters.Add(database.CreateParameter("inventoryID", itemID)); try { command.ExecuteNonQuery(); } catch (Exception e) { m_log.Error("[INVENTORY DB]: Error deleting item :" + e.Message); } } }
/// <summary> /// Deletes a sim profile from the database /// </summary> /// <param name="uuid">the sim UUID</param> /// <returns>Successful?</returns> //public DataResponse DeleteProfile(RegionProfileData profile) override public DataResponse DeleteProfile(string uuid) { using (AutoClosingSqlCommand command = database.Query("DELETE FROM regions WHERE uuid = @uuid;")) { command.Parameters.Add(database.CreateParameter("uuid", uuid)); try { command.ExecuteNonQuery(); return(DataResponse.RESPONSE_OK); } catch (Exception e) { m_log.DebugFormat("[GRID DB] : Error deleting region info, error is : {0}", e.Message); return(DataResponse.RESPONSE_ERROR); } } }
/// <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); }
/// <summary> /// Returns a sim profile from its UUID /// </summary> /// <param name="uuid">The region UUID</param> /// <returns>The sim profile</returns> override public RegionProfileData GetProfileByUUID(UUID uuid) { using (AutoClosingSqlCommand command = database.Query("SELECT * FROM " + m_regionsTableName + " WHERE uuid = @uuid")) { command.Parameters.Add(database.CreateParameter("uuid", uuid)); using (SqlDataReader reader = command.ExecuteReader()) { if (reader.Read()) { return(ReadSimRow(reader)); } } } m_log.InfoFormat("[GRID DB] : No region found with UUID : {0}", uuid); return(null); }
/// <summary> /// Gets the inventory folders. /// </summary> /// <param name="parentID">parentID, use UUID.Zero to get root</param> /// <param name="user">user id, use UUID.Zero, if you want all folders from a parentID.</param> /// <returns></returns> private List <InventoryFolderBase> getInventoryFolders(UUID parentID, UUID user) { using (AutoClosingSqlCommand command = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = @parentID AND agentID LIKE @uuid")) { if (user == UUID.Zero) { command.Parameters.Add(database.CreateParameter("uuid", "%")); } else { command.Parameters.Add(database.CreateParameter("uuid", user)); } command.Parameters.Add(database.CreateParameter("parentID", parentID)); return(getInventoryFolders(command)); } }
/// <summary> /// Returns a sim profile from its location /// </summary> /// <param name="handle">Region location handle</param> /// <returns>Sim profile</returns> override public RegionProfileData GetProfileByHandle(ulong handle) { using (AutoClosingSqlCommand command = database.Query("SELECT * FROM " + m_regionsTableName + " WHERE regionHandle = @handle")) { command.Parameters.Add(database.CreateParameter("handle", handle)); using (SqlDataReader reader = command.ExecuteReader()) { if (reader.Read()) { return(ReadSimRow(reader)); } } } m_log.InfoFormat("[GRID DB] : No region found with handle : {0}", handle); return(null); }
/// <summary> /// Returns a list of items in a specified folder /// </summary> /// <param name="folderID">The folder to search</param> /// <returns>A list containing inventory items</returns> public List <InventoryItemBase> getInventoryInFolder(UUID folderID) { using (AutoClosingSqlCommand command = database.Query("SELECT * FROM inventoryitems WHERE parentFolderID = @parentFolderID")) { command.Parameters.Add(database.CreateParameter("parentFolderID", folderID)); List <InventoryItemBase> items = new List <InventoryItemBase>(); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { items.Add(readInventoryItem(reader)); } } return(items); } }
/// <summary> /// Returns a specified inventory item /// </summary> /// <param name="itemID">The item ID</param> /// <returns>An inventory item</returns> public InventoryItemBase getInventoryItem(UUID itemID) { using (AutoClosingSqlCommand result = database.Query("SELECT * FROM inventoryitems WHERE inventoryID = @inventoryID")) { result.Parameters.Add(database.CreateParameter("inventoryID", itemID)); using (IDataReader reader = result.ExecuteReader()) { if (reader.Read()) { return(readInventoryItem(reader)); } } } m_log.InfoFormat("[INVENTORY DB]: Found no inventory item with ID : {0}", itemID); return(null); }
/// <summary> /// Returns all activated gesture-items in the inventory of the specified avatar. /// </summary> /// <param name="avatarID">The <see cref="UUID"/> of the avatar</param> /// <returns> /// The list of gestures (<see cref="InventoryItemBase"/>s) /// </returns> public List <InventoryItemBase> fetchActiveGestures(UUID avatarID) { using (AutoClosingSqlCommand command = database.Query("SELECT * FROM inventoryitems WHERE avatarId = @uuid AND assetType = @assetType and flags = 1")) { command.Parameters.Add(database.CreateParameter("uuid", avatarID)); command.Parameters.Add(database.CreateParameter("assetType", (int)AssetType.Gesture)); using (IDataReader reader = command.ExecuteReader()) { List <InventoryItemBase> gestureList = new List <InventoryItemBase>(); while (reader.Read()) { gestureList.Add(readInventoryItem(reader)); } return(gestureList); } } }
/// <summary> /// Returns up to maxNum profiles of regions that have a name starting with namePrefix /// </summary> /// <param name="namePrefix">The name to match against</param> /// <param name="maxNum">Maximum number of profiles to return</param> /// <returns>A list of sim profiles</returns> override public List <RegionProfileData> GetRegionsByName(string namePrefix, uint maxNum) { using (AutoClosingSqlCommand command = database.Query("SELECT * FROM regions WHERE regionName LIKE @name")) { command.Parameters.Add(database.CreateParameter("name", namePrefix + "%")); List <RegionProfileData> rows = new List <RegionProfileData>(); using (SqlDataReader reader = command.ExecuteReader()) { while (rows.Count < maxNum && reader.Read()) { rows.Add(ReadSimRow(reader)); } } return(rows); } }
private UUID[] LoadUUIDList(uint estateID, string table) { List <UUID> uuids = new List <UUID>(); string sql = string.Format("select uuid from {0} where EstateID = @EstateID", table); using (AutoClosingSqlCommand cmd = _Database.Query(sql)) { cmd.Parameters.Add(_Database.CreateParameter("@EstateID", estateID)); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { uuids.Add(new UUID((Guid)reader["uuid"])); //uuid); } } } return(uuids.ToArray()); }
/// <summary> /// Gets the folder hierarchy in a loop. /// </summary> /// <param name="parentID">parent ID.</param> /// <param name="command">SQL command/connection to database</param> /// <returns></returns> private static List <InventoryFolderBase> getFolderHierarchy(UUID parentID, AutoClosingSqlCommand command) { command.Parameters["@parentID"].Value = parentID.Guid; //.ToString(); List <InventoryFolderBase> folders = getInventoryFolders(command); if (folders.Count > 0) { List <InventoryFolderBase> tempFolders = new List <InventoryFolderBase>(); foreach (InventoryFolderBase folderBase in folders) { tempFolders.AddRange(getFolderHierarchy(folderBase.ID, command)); } if (tempFolders.Count > 0) { folders.AddRange(tempFolders); } } return(folders); }
/// <summary> /// Returns a sim profile from it's Region name string /// </summary> /// <param name="regionName">The region name search query</param> /// <returns>The sim profile</returns> override public RegionProfileData GetProfileByString(string regionName) { if (regionName.Length > 2) { using (AutoClosingSqlCommand command = database.Query("SELECT top 1 * FROM " + m_regionsTableName + " WHERE regionName like @regionName order by regionName")) { command.Parameters.Add(database.CreateParameter("regionName", regionName + "%")); using (SqlDataReader reader = command.ExecuteReader()) { if (reader.Read()) { return(ReadSimRow(reader)); } } } m_log.InfoFormat("[GRID DB] : No region found with regionName : {0}", regionName); return(null); } m_log.Error("[GRID DB]: Searched for a Region Name shorter then 3 characters"); return(null); }
private void SaveBanList(EstateSettings es) { //Delete first string sql = "delete from estateban where EstateID = @EstateID"; using (AutoClosingSqlCommand cmd = _Database.Query(sql)) { cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID)); cmd.ExecuteNonQuery(); } //Insert after sql = "insert into estateban (EstateID, bannedUUID) values ( @EstateID, @bannedUUID )"; using (AutoClosingSqlCommand cmd = _Database.Query(sql)) { foreach (EstateBan b in es.EstateBans) { cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID)); cmd.Parameters.Add(_Database.CreateParameter("@bannedUUID", b.BannedUserID)); cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } } }
/// <summary> /// Gets the inventory folders. /// </summary> /// <param name="command">SQLcommand.</param> /// <returns></returns> private static List<InventoryFolderBase> getInventoryFolders(AutoClosingSqlCommand command) { using (IDataReader reader = command.ExecuteReader()) { List<InventoryFolderBase> items = new List<InventoryFolderBase>(); while (reader.Read()) { items.Add(readInventoryFolder(reader)); } return items; } }
/// <summary> /// Gets the folder hierarchy in a loop. /// </summary> /// <param name="parentID">parent ID.</param> /// <param name="command">SQL command/connection to database</param> /// <returns></returns> private static List<InventoryFolderBase> getFolderHierarchy(UUID parentID, AutoClosingSqlCommand command) { command.Parameters["@parentID"].Value = parentID.Guid; //.ToString(); List<InventoryFolderBase> folders = getInventoryFolders(command); if (folders.Count > 0) { List<InventoryFolderBase> tempFolders = new List<InventoryFolderBase>(); foreach (InventoryFolderBase folderBase in folders) { tempFolders.AddRange(getFolderHierarchy(folderBase.ID, command)); } if (tempFolders.Count > 0) { folders.AddRange(tempFolders); } } return folders; }
/// <summary> /// Delete an inventory folder /// </summary> /// <param name="folderID">Id of folder to delete</param> public void deleteInventoryFolder(UUID folderID) { using (SqlConnection connection = database.DatabaseConnection()) { List<InventoryFolderBase> subFolders; using (SqlCommand command = new SqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = @parentID", connection)) { command.Parameters.Add(database.CreateParameter("@parentID", UUID.Zero)); AutoClosingSqlCommand autoCommand = new AutoClosingSqlCommand(command); subFolders = getFolderHierarchy(folderID, autoCommand); } //Delete all sub-folders foreach (InventoryFolderBase f in subFolders) { DeleteOneFolder(f.ID, connection); DeleteItemsInFolder(f.ID, connection); } //Delete the actual row DeleteOneFolder(folderID, connection); DeleteItemsInFolder(folderID, connection); } }
/// <summary> /// Creates a new region in the database /// </summary> /// <param name="profile">The region profile to insert</param> /// <returns>Successful?</returns> private bool InsertRegionRow(RegionProfileData profile) { bool returnval = false; //Insert new region string sql = "INSERT INTO " + m_regionsTableName + @" ([regionHandle], [regionName], [uuid], [regionRecvKey], [regionSecret], [regionSendKey], [regionDataURI], [serverIP], [serverPort], [serverURI], [locX], [locY], [locZ], [eastOverrideHandle], [westOverrideHandle], [southOverrideHandle], [northOverrideHandle], [regionAssetURI], [regionAssetRecvKey], [regionAssetSendKey], [regionUserURI], [regionUserRecvKey], [regionUserSendKey], [regionMapTexture], [serverHttpPort], [serverRemotingPort], [owner_uuid], [originUUID]) VALUES (@regionHandle, @regionName, @uuid, @regionRecvKey, @regionSecret, @regionSendKey, @regionDataURI, @serverIP, @serverPort, @serverURI, @locX, @locY, @locZ, @eastOverrideHandle, @westOverrideHandle, @southOverrideHandle, @northOverrideHandle, @regionAssetURI, @regionAssetRecvKey, @regionAssetSendKey, @regionUserURI, @regionUserRecvKey, @regionUserSendKey, @regionMapTexture, @serverHttpPort, @serverRemotingPort, @owner_uuid, @originUUID);"; using (AutoClosingSqlCommand command = database.Query(sql)) { command.Parameters.Add(database.CreateParameter("regionHandle", profile.regionHandle)); command.Parameters.Add(database.CreateParameter("regionName", profile.regionName)); command.Parameters.Add(database.CreateParameter("uuid", profile.UUID)); command.Parameters.Add(database.CreateParameter("regionRecvKey", profile.regionRecvKey)); command.Parameters.Add(database.CreateParameter("regionSecret", profile.regionSecret)); command.Parameters.Add(database.CreateParameter("regionSendKey", profile.regionSendKey)); command.Parameters.Add(database.CreateParameter("regionDataURI", profile.regionDataURI)); command.Parameters.Add(database.CreateParameter("serverIP", profile.serverIP)); command.Parameters.Add(database.CreateParameter("serverPort", profile.serverPort)); command.Parameters.Add(database.CreateParameter("serverURI", profile.serverURI)); command.Parameters.Add(database.CreateParameter("locX", profile.regionLocX)); command.Parameters.Add(database.CreateParameter("locY", profile.regionLocY)); command.Parameters.Add(database.CreateParameter("locZ", profile.regionLocZ)); command.Parameters.Add(database.CreateParameter("eastOverrideHandle", profile.regionEastOverrideHandle)); command.Parameters.Add(database.CreateParameter("westOverrideHandle", profile.regionWestOverrideHandle)); command.Parameters.Add(database.CreateParameter("northOverrideHandle", profile.regionNorthOverrideHandle)); command.Parameters.Add(database.CreateParameter("southOverrideHandle", profile.regionSouthOverrideHandle)); command.Parameters.Add(database.CreateParameter("regionAssetURI", profile.regionAssetURI)); command.Parameters.Add(database.CreateParameter("regionAssetRecvKey", profile.regionAssetRecvKey)); command.Parameters.Add(database.CreateParameter("regionAssetSendKey", profile.regionAssetSendKey)); command.Parameters.Add(database.CreateParameter("regionUserURI", profile.regionUserURI)); command.Parameters.Add(database.CreateParameter("regionUserRecvKey", profile.regionUserRecvKey)); command.Parameters.Add(database.CreateParameter("regionUserSendKey", profile.regionUserSendKey)); command.Parameters.Add(database.CreateParameter("regionMapTexture", profile.regionMapTextureID)); command.Parameters.Add(database.CreateParameter("serverHttpPort", profile.httpPort)); command.Parameters.Add(database.CreateParameter("serverRemotingPort", profile.remotingPort)); command.Parameters.Add(database.CreateParameter("owner_uuid", profile.owner_uuid)); command.Parameters.Add(database.CreateParameter("originUUID", profile.originUUID)); try { command.ExecuteNonQuery(); returnval = true; } catch (Exception e) { m_log.Error("[GRID DB] : Error inserting region, error: " + e.Message); } } return(returnval); }