/* * Copyright (c) Contributors, http://www.openmetaverse.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the OpenSim Project nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ using System; using System.Collections.Generic; using System.Data; using libsecondlife; namespace OpenSim.Framework.Data.MySQL { /// /// A MySQL interface for the inventory server /// class MySQLInventoryData : IInventoryData { /// /// The database manager /// public MySQLManager database; /// /// Loads and initialises this database plugin /// public void Initialise() { IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini"); string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname"); string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database"); string settingUsername = GridDataMySqlFile.ParseFileReadValue("username"); string settingPassword = GridDataMySqlFile.ParseFileReadValue("password"); string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling"); string settingPort = GridDataMySqlFile.ParseFileReadValue("port"); database = new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling, settingPort); } /// /// The name of this DB provider /// /// Name of DB provider public string getName() { return "MySQL Inventory Data Interface"; } /// /// Closes this DB provider /// public void Close() { // Do nothing. } /// /// Returns the version of this DB provider /// /// A string containing the DB provider public string getVersion() { return "0.1"; } /// /// Returns a list of items in a specified folder /// /// The folder to search /// A list containing inventory items public List getInventoryInFolder(LLUUID folderID) { try { lock (database) { Dictionary param = new Dictionary(); param["?uuid"] = folderID.ToStringHyphenated(); IDbCommand result = database.Query("SELECT * FROM inventoryitems WHERE parentFolderID = ?uuid", param); IDataReader reader = result.ExecuteReader(); List items = database.readInventoryItems(reader); reader.Close(); result.Dispose(); return items; } } catch (Exception e) { database.Reconnect(); Console.WriteLine(e.ToString()); return null; } } /// /// Returns a list of the root folders within a users inventory /// /// The user whos inventory is to be searched /// A list of folder objects public List getUserRootFolders(LLUUID user) { try { lock (database) { Dictionary param = new Dictionary(); param["?uuid"] = user.ToStringHyphenated(); param["?zero"] = LLUUID.Zero.ToStringHyphenated(); IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", param); IDataReader reader = result.ExecuteReader(); List items = database.readInventoryFolders(reader); reader.Close(); result.Dispose(); return items; } } catch (Exception e) { database.Reconnect(); Console.WriteLine(e.ToString()); return null; } } /// /// Returns the users inventory root folder. /// /// /// public InventoryFolderBase getUserRootFolder(LLUUID user) { try { lock (database) { Dictionary param = new Dictionary(); param["?uuid"] = user.ToStringHyphenated(); param["?zero"] = LLUUID.Zero.ToStringHyphenated(); IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", param); IDataReader reader = result.ExecuteReader(); List items = database.readInventoryFolders(reader); InventoryFolderBase rootFolder = items[0]; //should only be one folder with parent set to zero (the root one). reader.Close(); result.Dispose(); return rootFolder; } } catch (Exception e) { database.Reconnect(); Console.WriteLine(e.ToString()); return null; } } /// /// Returns a list of folders in a users inventory contained within the specified folder /// /// The folder to search /// A list of inventory folders public List getInventoryFolders(LLUUID parentID) { try { lock (database) { Dictionary param = new Dictionary(); param["?uuid"] = parentID.ToStringHyphenated(); IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?uuid", param); IDataReader reader = result.ExecuteReader(); List items = database.readInventoryFolders(reader); reader.Close(); result.Dispose(); return items; } } catch (Exception e) { database.Reconnect(); Console.WriteLine(e.ToString()); return null; } } /// /// Returns a specified inventory item /// /// The item to return /// An inventory item public InventoryItemBase getInventoryItem(LLUUID item) { try { lock (database) { Dictionary param = new Dictionary(); param["?uuid"] = item.ToStringHyphenated(); IDbCommand result = database.Query("SELECT * FROM inventoryitems WHERE inventoryID = ?uuid", param); IDataReader reader = result.ExecuteReader(); List items = database.readInventoryItems(reader); reader.Close(); result.Dispose(); if (items.Count > 0) { return items[0]; } else { return null; } } } catch (Exception e) { database.Reconnect(); Console.WriteLine(e.ToString()); return null; } } /// /// Returns a specified inventory folder /// /// The folder to return /// A folder class public InventoryFolderBase getInventoryFolder(LLUUID folder) { try { lock (database) { Dictionary param = new Dictionary(); param["?uuid"] = folder.ToStringHyphenated(); IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", param); IDataReader reader = result.ExecuteReader(); List items = database.readInventoryFolders(reader); reader.Close(); result.Dispose(); if (items.Count > 0) { return items[0]; } else { return null; } } } catch (Exception e) { database.Reconnect(); Console.WriteLine(e.ToString()); return null; } } /// /// Adds a specified item to the database /// /// The inventory item public void addInventoryItem(InventoryItemBase item) { lock (database) { database.insertItem(item); } } /// /// Updates the specified inventory item /// /// Inventory item to update public void updateInventoryItem(InventoryItemBase item) { addInventoryItem(item); } /// /// /// /// public void deleteInventoryItem(InventoryItemBase item) { } /// /// Creates a new inventory folder /// /// Folder to create public void addInventoryFolder(InventoryFolderBase folder) { lock (database) { database.insertFolder(folder); } } /// /// Updates an inventory folder /// /// Folder to update public void updateInventoryFolder(InventoryFolderBase folder) { addInventoryFolder(folder); } } }