From 9fae975a53fbb852dfbaf811dca259ddd4f74f4c Mon Sep 17 00:00:00 2001 From: Jeff Ames Date: Thu, 26 Jun 2008 20:14:33 +0000 Subject: Apply patch from bug #1605 -- Documentation for Data/SQLite. Thanks kerunix_Flan! --- OpenSim/Data/RegionProfileData.cs | 19 +- OpenSim/Data/SQLite/SQLiteAssetData.cs | 68 ++++++- OpenSim/Data/SQLite/SQLiteGridData.cs | 21 ++- OpenSim/Data/SQLite/SQLiteInventoryStore.cs | 104 +++++++++-- OpenSim/Data/SQLite/SQLiteManager.cs | 14 +- OpenSim/Data/SQLite/SQLiteRegionData.cs | 263 ++++++++++++++++++++++++++-- OpenSim/Data/SQLite/SQLiteUserData.cs | 152 +++++++++++++++- OpenSim/Data/SQLite/SQLiteUtils.cs | 64 +++++-- 8 files changed, 634 insertions(+), 71 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Data/RegionProfileData.cs b/OpenSim/Data/RegionProfileData.cs index 897dcbf..12f3927 100644 --- a/OpenSim/Data/RegionProfileData.cs +++ b/OpenSim/Data/RegionProfileData.cs @@ -130,13 +130,16 @@ namespace OpenSim.Data /// public LLUUID originUUID; + /// - /// Get Sim profile data from grid server when in grid mode + /// Request sim profile information from a grid server, by Region UUID /// - /// + /// The region UUID to look for /// - /// - /// + /// + /// + /// The sim profile. Null if there was a request failure + /// This method should be statics public RegionProfileData RequestSimProfileData(LLUUID region_uuid, string gridserver_url, string gridserver_sendkey, string gridserver_recvkey) { @@ -172,9 +175,9 @@ namespace OpenSim.Data } /// - /// Request sim profile information from a grid server + /// Request sim profile information from a grid server, by Region Handle /// - /// + /// the region handle to look for /// /// /// @@ -214,9 +217,9 @@ namespace OpenSim.Data } /// - /// Request sim profile information from a grid server + /// Request sim profile information from a grid server, by Region Name /// - /// + /// the region name to look for /// /// /// diff --git a/OpenSim/Data/SQLite/SQLiteAssetData.cs b/OpenSim/Data/SQLite/SQLiteAssetData.cs index 4370cf7..f560b9e 100644 --- a/OpenSim/Data/SQLite/SQLiteAssetData.cs +++ b/OpenSim/Data/SQLite/SQLiteAssetData.cs @@ -56,6 +56,14 @@ namespace OpenSim.Data.SQLite private SqliteConnection m_conn; + /// + /// + /// Initialises AssetData interface + /// Loads and initialises a new SQLite connection and maintains it. + /// use default URI if connect string is empty. + /// + /// + /// connect string override public void Initialise(string dbconnect) { if (dbconnect == string.Empty) @@ -65,9 +73,6 @@ namespace OpenSim.Data.SQLite m_conn = new SqliteConnection(dbconnect); m_conn.Open(); - - - Assembly assem = GetType().Assembly; Migration m = new Migration(m_conn, assem, "AssetStore"); // TODO: remove this next line after changeset 6000, @@ -80,6 +85,11 @@ namespace OpenSim.Data.SQLite return; } + /// + /// Fetch Asset + /// + /// UUID of ... ? + /// Asset base override public AssetBase FetchAsset(LLUUID uuid) { @@ -103,6 +113,10 @@ namespace OpenSim.Data.SQLite } } + /// + /// Create an asset + /// + /// Asset Base override public void CreateAsset(AssetBase asset) { m_log.Info("[ASSET DB]: Creating Asset " + Util.ToRawUuidString(asset.FullID)); @@ -128,6 +142,10 @@ namespace OpenSim.Data.SQLite } } + /// + /// Update an asset + /// + /// override public void UpdateAsset(AssetBase asset) { LogAssetLoad(asset); @@ -148,6 +166,10 @@ namespace OpenSim.Data.SQLite } + /// + /// Some... logging functionnality + /// + /// private static void LogAssetLoad(AssetBase asset) { string temporary = asset.Temporary ? "Temporary" : "Stored"; @@ -161,6 +183,11 @@ namespace OpenSim.Data.SQLite asset.InvType, temporary, local, assetLength)); } + /// + /// Check if an asset exist in database + /// + /// The asset UUID + /// True if exist, or false. override public bool ExistsAsset(LLUUID uuid) { using (SqliteCommand cmd = new SqliteCommand(SelectAssetSQL, m_conn)) @@ -182,6 +209,10 @@ namespace OpenSim.Data.SQLite } } + /// + /// Delete an asset from database + /// + /// public void DeleteAsset(LLUUID uuid) { using (SqliteCommand cmd = new SqliteCommand(DeleteAssetSQL, m_conn)) @@ -192,6 +223,9 @@ namespace OpenSim.Data.SQLite } } + /// + /// commit + /// override public void CommitAssets() // force a sync to the database { m_log.Info("[ASSET DB]: Attempting commit"); @@ -210,6 +244,10 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// Create the "assets" table + /// + /// private static DataTable createAssetsTable() { DataTable assets = new DataTable("assets"); @@ -235,6 +273,11 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// + /// + /// + /// private static AssetBase buildAsset(IDataReader row) { // TODO: this doesn't work yet because something more @@ -263,6 +306,10 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// + /// + /// private static void InitDB(SqliteConnection conn) { string createAssets = SQLiteUtil.defineTable(createAssetsTable()); @@ -270,6 +317,12 @@ namespace OpenSim.Data.SQLite pcmd.ExecuteNonQuery(); } + /// + /// + /// + /// + /// + /// private static bool TestTables(SqliteConnection conn, Migration m) { SqliteCommand cmd = new SqliteCommand(assetSelect, conn); @@ -295,6 +348,9 @@ namespace OpenSim.Data.SQLite #region IPlugin interface + /// + /// + /// override public string Version { get @@ -309,11 +365,17 @@ namespace OpenSim.Data.SQLite } } + /// + /// Initialise the AssetData interface using default URI + /// override public void Initialise() { Initialise("URI=file:AssetStorage.db,version=3"); } + /// + /// Name of this DB provider + /// override public string Name { get { return "SQLite Asset storage engine"; } diff --git a/OpenSim/Data/SQLite/SQLiteGridData.cs b/OpenSim/Data/SQLite/SQLiteGridData.cs index 7c5bb0c..0d24a40 100644 --- a/OpenSim/Data/SQLite/SQLiteGridData.cs +++ b/OpenSim/Data/SQLite/SQLiteGridData.cs @@ -41,13 +41,18 @@ namespace OpenSim.Data.SQLite public class SQLiteGridData : GridDataBase { /// - /// A database manager + /// SQLite database manager /// private SQLiteManager database; /// - /// Initialises the Grid Interface + /// + /// Initialises Inventory interface + /// Loads and initialises a new SQLite connection and maintains it. + /// use default URI if connect string is empty. + /// /// + /// connect string override public void Initialise(string connect) { database = new SQLiteManager(connect); @@ -87,13 +92,14 @@ namespace OpenSim.Data.SQLite /// maximum X coordinate /// maximum Y coordinate /// An array of region profiles + /// NOT IMPLEMENTED ? always return null override public RegionProfileData[] GetProfilesInRange(uint a, uint b, uint c, uint d) { return null; } /// - /// Returns a sim profile from it's location + /// Returns a sim profile from it's handle /// /// Region location handle /// Sim profile @@ -162,8 +168,9 @@ namespace OpenSim.Data.SQLite } /// - /// // Returns a list of avatar and UUIDs that match the query + /// Returns a list of avatar and UUIDs that match the query /// + /// do nothing yet public List GeneratePickerResults(LLUUID queryID, string query) { //Do nothing yet @@ -232,6 +239,12 @@ namespace OpenSim.Data.SQLite return false; } + /// + /// NOT IMPLEMENTED + /// + /// x coordinate + /// y coordinate + /// always return null override public ReservationData GetReservationAtPoint(uint x, uint y) { return null; diff --git a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs index 5b77f82..f7a1fdc 100644 --- a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs +++ b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs @@ -36,6 +36,9 @@ using OpenSim.Framework; namespace OpenSim.Data.SQLite { + /// + /// An Inventory Interface to the SQLite database + /// public class SQLiteInventoryStore : SQLiteUtil, IInventoryData { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -48,8 +51,13 @@ namespace OpenSim.Data.SQLite private SqliteDataAdapter invFoldersDa; /// - /// Initialises the interface + /// + /// Initialises Inventory interface + /// Loads and initialises a new SQLite connection and maintains it. + /// use default URI if connect string string is empty. + /// /// + /// connect string public void Initialise(string dbconnect) { if (dbconnect == string.Empty) @@ -90,6 +98,11 @@ namespace OpenSim.Data.SQLite ds.AcceptChanges(); } + /// + /// + /// + /// + /// public InventoryItemBase buildItem(DataRow row) { InventoryItemBase item = new InventoryItemBase(); @@ -130,6 +143,11 @@ namespace OpenSim.Data.SQLite return item; } + /// + /// + /// + /// + /// private static void fillItemRow(DataRow row, InventoryItemBase item) { row["UUID"] = Util.ToRawUuidString(item.ID); @@ -156,6 +174,12 @@ namespace OpenSim.Data.SQLite row["flags"] = item.Flags; } + /// + /// Add inventory folder + /// + /// Folder base + /// true=create folder. false=update existing folder + /// nasty private void addFolder(InventoryFolderBase folder, bool add) { lock (ds) @@ -184,6 +208,10 @@ namespace OpenSim.Data.SQLite } } + /// + /// Move an inventory folder + /// + /// folder base private void moveFolder(InventoryFolderBase folder) { lock (ds) @@ -206,6 +234,11 @@ namespace OpenSim.Data.SQLite } } + /// + /// add an item in inventory + /// + /// the item + /// true=add item ; false=update existing item private void addItem(InventoryItemBase item, bool add) { lock (ds) @@ -233,31 +266,34 @@ namespace OpenSim.Data.SQLite } } + /// + /// TODO : DataSet commit + /// public void Shutdown() { // TODO: DataSet commit } /// - /// Closes the interface + /// Closes the inventory interface /// public void Close() { } /// - /// The plugin being loaded + /// The name of this DB provider /// - /// A string containing the plugin name + /// Name of DB provider public string getName() { return "SQLite Inventory Data Interface"; } /// - /// The plugins version + /// Returns the version of this DB provider /// - /// A string containing the plugin version + /// A string containing the DB provider version public string getVersion() { Module module = GetType().Module; @@ -362,7 +398,11 @@ namespace OpenSim.Data.SQLite return folders; } - // See IInventoryData + /// + /// See IInventoryData + /// + /// + /// public List getFolderHierarchy(LLUUID parentID) { List folders = new List(); @@ -440,9 +480,9 @@ namespace OpenSim.Data.SQLite } /// - /// + /// Delete an inventory item /// - /// + /// The item UUID public void deleteInventoryItem(LLUUID itemID) { lock (ds) @@ -463,7 +503,7 @@ namespace OpenSim.Data.SQLite /// Delete all items in the specified folder /// /// id of the folder, whose item content should be deleted - //!TODO, this is horribly inefficient, but I don't want to ruin the overall structure of this implementation + /// this is horribly inefficient, but I don't want to ruin the overall structure of this implementation private void deleteItemsInFolder(LLUUID folderId) { List items = getInventoryInFolder(Util.ToRawUuidString(folderId)); @@ -505,7 +545,7 @@ namespace OpenSim.Data.SQLite /// /// This will clean-up any child folders and child items as well /// - /// + /// the folder UUID public void deleteInventoryFolder(LLUUID folderID) { lock (ds) @@ -544,6 +584,9 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// Create the "inventoryitems" table + /// private static DataTable createInventoryItemsTable() { DataTable inv = new DataTable("inventoryitems"); @@ -582,6 +625,10 @@ namespace OpenSim.Data.SQLite return inv; } + /// + /// Creates the "inventoryfolders" table + /// + /// private static DataTable createInventoryFoldersTable() { DataTable fol = new DataTable("inventoryfolders"); @@ -597,6 +644,11 @@ namespace OpenSim.Data.SQLite return fol; } + /// + /// + /// + /// + /// private void setupItemsCommands(SqliteDataAdapter da, SqliteConnection conn) { lock (ds) @@ -614,6 +666,11 @@ namespace OpenSim.Data.SQLite } } + /// + /// + /// + /// + /// private void setupFoldersCommands(SqliteDataAdapter da, SqliteConnection conn) { lock (ds) @@ -631,6 +688,11 @@ namespace OpenSim.Data.SQLite } } + /// + /// + /// + /// + /// private static InventoryFolderBase buildFolder(DataRow row) { InventoryFolderBase folder = new InventoryFolderBase(); @@ -643,6 +705,11 @@ namespace OpenSim.Data.SQLite return folder; } + /// + /// + /// + /// + /// private static void fillFolderRow(DataRow row, InventoryFolderBase folder) { row["UUID"] = Util.ToRawUuidString(folder.ID); @@ -653,6 +720,11 @@ namespace OpenSim.Data.SQLite row["version"] = folder.Version; } + /// + /// + /// + /// + /// private static void moveFolderRow(DataRow row, InventoryFolderBase folder) { row["UUID"] = Util.ToRawUuidString(folder.ID); @@ -665,6 +737,10 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// + /// + /// private static void InitDB(SqliteConnection conn) { string createInventoryItems = defineTable(createInventoryItemsTable()); @@ -677,6 +753,12 @@ namespace OpenSim.Data.SQLite scmd.ExecuteNonQuery(); } + /// + /// + /// + /// + /// + /// private static bool TestTables(SqliteConnection conn, Migration m) { SqliteCommand invItemsSelectCmd = new SqliteCommand(invItemsSelect, conn); diff --git a/OpenSim/Data/SQLite/SQLiteManager.cs b/OpenSim/Data/SQLite/SQLiteManager.cs index 4d39527..46c40e5 100644 --- a/OpenSim/Data/SQLite/SQLiteManager.cs +++ b/OpenSim/Data/SQLite/SQLiteManager.cs @@ -35,6 +35,9 @@ using log4net; namespace OpenSim.Data.SQLite { + /// + /// SQLite Manager + /// internal class SQLiteManager : SQLiteUtil { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -42,13 +45,12 @@ namespace OpenSim.Data.SQLite private IDbConnection dbcon; /// - /// Initialises and creates a new SQLite connection and maintains it. + /// + /// Initialises and creates a new SQLite connection and maintains it. + /// use default URI if connect string is empty. + /// /// - /// The SQLite server being connected to - /// The name of the SQLite database being used - /// The username logging into the database - /// The password for the user logging in - /// Whether to use connection pooling or not, can be one of the following: 'yes', 'true', 'no' or 'false', if unsure use 'false'. + /// connect string public SQLiteManager(string connect) { try diff --git a/OpenSim/Data/SQLite/SQLiteRegionData.cs b/OpenSim/Data/SQLite/SQLiteRegionData.cs index eb6f253..86f4370 100644 --- a/OpenSim/Data/SQLite/SQLiteRegionData.cs +++ b/OpenSim/Data/SQLite/SQLiteRegionData.cs @@ -40,6 +40,9 @@ using OpenSim.Region.Environment.Scenes; namespace OpenSim.Data.SQLite { + /// + /// A RegionData Interface to the SQLite database + /// public class SQLiteRegionData : IRegionDataStore { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -74,7 +77,15 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ - // see IRegionDataStore + /// + /// See IRegionDataStore + /// + /// Initialises RegionData Interface + /// Loads and initialises a new SQLite connection and maintains it. + /// + /// + /// the connection string + /// ? public void Initialise(string connectionString, bool persistPrimInventories) { m_connectionString = connectionString; @@ -203,6 +214,11 @@ namespace OpenSim.Data.SQLite } } + /// + /// Adds an object into region storage + /// + /// the object + /// the region UUID public void StoreObject(SceneObjectGroup obj, LLUUID regionUUID) { lock (ds) @@ -233,6 +249,11 @@ namespace OpenSim.Data.SQLite // m_log.Info("[Dump of prims]: " + ds.GetXml()); } + /// + /// Removes an object from region storage + /// + /// the object + /// the region UUID public void RemoveObject(LLUUID obj, LLUUID regionUUID) { m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.UUID, regionUUID); @@ -271,6 +292,7 @@ namespace OpenSim.Data.SQLite /// Remove all persisted items of the given prim. /// The caller must acquire the necessrary synchronization locks and commit or rollback changes. /// + /// The item UUID private void RemoveItems(LLUUID uuid) { DataTable items = ds.Tables["primitems"]; @@ -287,7 +309,7 @@ namespace OpenSim.Data.SQLite /// /// Load persisted objects from region storage. /// - /// + /// The region UUID /// List of loaded groups public List LoadObjects(LLUUID regionUUID) { @@ -375,7 +397,7 @@ namespace OpenSim.Data.SQLite /// /// Load in a prim's persisted inventory. /// - /// + /// the prim private void LoadItems(SceneObjectPart prim) { //m_log.DebugFormat("[DATASTORE]: Loading inventory for {0}, {1}", prim.Name, prim.UUID); @@ -405,6 +427,11 @@ namespace OpenSim.Data.SQLite } } + /// + /// Store a terrain revision in region storage + /// + /// terrain heightfield + /// region UUID public void StoreTerrain(double[,] ter, LLUUID regionID) { lock (ds) @@ -444,6 +471,11 @@ namespace OpenSim.Data.SQLite } } + /// + /// Load the latest terrain revision from region storage + /// + /// the region UUID + /// Heightfield data public double[,] LoadTerrain(LLUUID regionID) { lock (ds) @@ -488,6 +520,10 @@ namespace OpenSim.Data.SQLite } } + /// + /// + /// + /// public void RemoveLandObject(LLUUID globalID) { lock (ds) @@ -506,6 +542,10 @@ namespace OpenSim.Data.SQLite } } + /// + /// + /// + /// public void StoreLandObject(ILandObject parcel) { lock (ds) @@ -543,6 +583,11 @@ namespace OpenSim.Data.SQLite Commit(); } + /// + /// + /// + /// + /// public List LoadLandObjects(LLUUID regionUUID) { List landDataForRegion = new List(); @@ -568,6 +613,9 @@ namespace OpenSim.Data.SQLite return landDataForRegion; } + /// + /// + /// public void Commit() { lock (ds) @@ -587,6 +635,9 @@ namespace OpenSim.Data.SQLite } } + /// + /// See + /// public void Shutdown() { Commit(); @@ -600,12 +651,22 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// + /// + /// + /// + /// private static void createCol(DataTable dt, string name, Type type) { DataColumn col = new DataColumn(name, type); dt.Columns.Add(col); } + /// + /// Creates the "terrain" table + /// + /// terrain table DataTable private static DataTable createTerrainTable() { DataTable terrain = new DataTable("terrain"); @@ -617,6 +678,10 @@ namespace OpenSim.Data.SQLite return terrain; } + /// + /// Creates the "prims" table + /// + /// prim table DataTable private static DataTable createPrimTable() { DataTable prims = new DataTable("prims"); @@ -681,6 +746,10 @@ namespace OpenSim.Data.SQLite return prims; } + /// + /// Creates "primshapes" table + /// + /// shape table DataTable private static DataTable createShapeTable() { DataTable shapes = new DataTable("primshapes"); @@ -723,6 +792,10 @@ namespace OpenSim.Data.SQLite return shapes; } + /// + /// creates "primitems" table + /// + /// item table DataTable private static DataTable createItemsTable() { DataTable items = new DataTable("primitems"); @@ -756,6 +829,10 @@ namespace OpenSim.Data.SQLite return items; } + /// + /// Creates "land" table + /// + /// land table DataTable private static DataTable createLandTable() { DataTable land = new DataTable("land"); @@ -800,6 +877,10 @@ namespace OpenSim.Data.SQLite return land; } + /// + /// create "landaccesslist" table + /// + /// Landacceslist DataTable private static DataTable createLandAccessListTable() { DataTable landaccess = new DataTable("landaccesslist"); @@ -810,6 +891,10 @@ namespace OpenSim.Data.SQLite return landaccess; } + /// + /// create "regionban" table + /// + /// regionban datatable private static DataTable createRegionBanListTable() { DataTable regionbanlist = new DataTable("regionban"); @@ -829,6 +914,11 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// + /// + /// + /// private SceneObjectPart buildPrim(DataRow row) { // TODO: this doesn't work yet because something more @@ -971,6 +1061,11 @@ namespace OpenSim.Data.SQLite return taskItem; } + /// + /// Build a Land Data from the persisted data. + /// + /// + /// private LandData buildLandData(DataRow row) { LandData newData = new LandData(); @@ -1059,6 +1154,11 @@ namespace OpenSim.Data.SQLite return newData; } + /// + /// Build a land access entry from the persisted data. + /// + /// + /// private static ParcelManager.ParcelAccessEntry buildLandAccessData(DataRow row) { ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); @@ -1069,7 +1169,11 @@ namespace OpenSim.Data.SQLite } - + /// + /// Load a region banlist + /// + /// the region UUID + /// The banlist public List LoadRegionBanList(LLUUID regionUUID) { List regionbanlist = new List(); @@ -1096,6 +1200,10 @@ namespace OpenSim.Data.SQLite return regionbanlist; } + /// + /// Add en entry into region banlist + /// + /// public void AddToRegionBanlist(RegionBanListItem item) { lock (ds) @@ -1111,6 +1219,10 @@ namespace OpenSim.Data.SQLite } } + /// + /// remove an entry from the region banlist + /// + /// public void RemoveFromRegionBanlist(RegionBanListItem item) { lock (ds) @@ -1124,6 +1236,11 @@ namespace OpenSim.Data.SQLite } } + /// + /// + /// + /// + /// private static Array serializeTerrain(double[,] val) { MemoryStream str = new MemoryStream(65536*sizeof (double)); @@ -1153,6 +1270,13 @@ namespace OpenSim.Data.SQLite // row["Heightfield"] = str.ToArray(); // } + /// + /// + /// + /// + /// + /// + /// private static void fillPrimRow(DataRow row, SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) { row["UUID"] = Util.ToRawUuidString(prim.UUID); @@ -1213,6 +1337,11 @@ namespace OpenSim.Data.SQLite row["SitTargetOrientZ"] = sitTargetOrient.Z; } + /// + /// + /// + /// + /// private static void fillItemRow(DataRow row, TaskInventoryItem taskItem) { row["itemID"] = taskItem.ItemID; @@ -1238,6 +1367,12 @@ namespace OpenSim.Data.SQLite row["flags"] = taskItem.Flags; } + /// + /// + /// + /// + /// + /// private static void fillLandRow(DataRow row, LandData land, LLUUID regionUUID) { row["UUID"] = Util.ToRawUuidString(land.globalID); @@ -1277,6 +1412,12 @@ namespace OpenSim.Data.SQLite row["AuthbuyerID"] = Util.ToRawUuidString(land.authBuyerID); } + /// + /// + /// + /// + /// + /// private static void fillLandAccessRow(DataRow row, ParcelManager.ParcelAccessEntry entry, LLUUID parcelID) { row["LandUUID"] = Util.ToRawUuidString(parcelID); @@ -1284,6 +1425,11 @@ namespace OpenSim.Data.SQLite row["Flags"] = entry.Flags; } + /// + /// + /// + /// + /// private PrimitiveBaseShape buildShape(DataRow row) { PrimitiveBaseShape s = new PrimitiveBaseShape(); @@ -1334,6 +1480,11 @@ namespace OpenSim.Data.SQLite return s; } + /// + /// + /// + /// + /// private static void fillShapeRow(DataRow row, SceneObjectPart prim) { PrimitiveBaseShape s = prim.Shape; @@ -1371,6 +1522,12 @@ namespace OpenSim.Data.SQLite row["ExtraParams"] = s.ExtraParams; } + /// + /// + /// + /// + /// + /// private void addPrim(SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) { DataTable prims = ds.Tables["prims"]; @@ -1401,7 +1558,11 @@ namespace OpenSim.Data.SQLite } } - // see IRegionDatastore + /// + /// see IRegionDatastore + /// + /// + /// public void StorePrimInventory(LLUUID primID, ICollection items) { if (!persistPrimInventories) @@ -1444,17 +1605,23 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// Create an insert command + /// + /// table name + /// data table + /// the created command + /// + /// This is subtle enough to deserve some commentary. + /// Instead of doing *lots* and *lots of hardcoded strings + /// for database definitions we'll use the fact that + /// realistically all insert statements look like "insert + /// into A(b, c) values(:b, :c) on the parameterized query + /// front. If we just have a list of b, c, etc... we can + /// generate these strings instead of typing them out. + /// private static SqliteCommand createInsertCommand(string table, DataTable dt) { - /** - * This is subtle enough to deserve some commentary. - * Instead of doing *lots* and *lots of hardcoded strings - * for database definitions we'll use the fact that - * realistically all insert statements look like "insert - * into A(b, c) values(:b, :c) on the parameterized query - * front. If we just have a list of b, c, etc... we can - * generate these strings instead of typing them out. - */ string[] cols = new string[dt.Columns.Count]; for (int i = 0; i < dt.Columns.Count; i++) { @@ -1479,6 +1646,14 @@ namespace OpenSim.Data.SQLite return cmd; } + + /// + /// create an update command + /// + /// table name + /// + /// + /// the created command private static SqliteCommand createUpdateCommand(string table, string pk, DataTable dt) { string sql = "update " + table + " set "; @@ -1506,7 +1681,11 @@ namespace OpenSim.Data.SQLite return cmd; } - + /// + /// + /// + /// Data Table + /// private static string defineTable(DataTable dt) { string sql = "create table " + dt.TableName + "("; @@ -1559,6 +1738,11 @@ namespace OpenSim.Data.SQLite return param; } + /// + /// + /// + /// + /// private void setupPrimCommands(SqliteDataAdapter da, SqliteConnection conn) { da.InsertCommand = createInsertCommand("prims", ds.Tables["prims"]); @@ -1573,6 +1757,11 @@ namespace OpenSim.Data.SQLite da.DeleteCommand = delete; } + /// + /// + /// + /// + /// private void setupItemsCommands(SqliteDataAdapter da, SqliteConnection conn) { da.InsertCommand = createInsertCommand("primitems", ds.Tables["primitems"]); @@ -1587,12 +1776,22 @@ namespace OpenSim.Data.SQLite da.DeleteCommand = delete; } + /// + /// + /// + /// + /// private void setupTerrainCommands(SqliteDataAdapter da, SqliteConnection conn) { da.InsertCommand = createInsertCommand("terrain", ds.Tables["terrain"]); da.InsertCommand.Connection = conn; } + /// + /// + /// + /// + /// private void setupLandCommands(SqliteDataAdapter da, SqliteConnection conn) { da.InsertCommand = createInsertCommand("land", ds.Tables["land"]); @@ -1602,12 +1801,22 @@ namespace OpenSim.Data.SQLite da.UpdateCommand.Connection = conn; } + /// + /// + /// + /// + /// private void setupLandAccessCommands(SqliteDataAdapter da, SqliteConnection conn) { da.InsertCommand = createInsertCommand("landaccesslist", ds.Tables["landaccesslist"]); da.InsertCommand.Connection = conn; } + /// + /// + /// + /// + /// private void setupRegionBanCommands(SqliteDataAdapter da, SqliteConnection conn) { da.InsertCommand = createInsertCommand("regionban", ds.Tables["regionban"]); @@ -1617,7 +1826,11 @@ namespace OpenSim.Data.SQLite da.UpdateCommand.Connection = conn; } - + /// + /// + /// + /// + /// private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn) { da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]); @@ -1710,6 +1923,12 @@ namespace OpenSim.Data.SQLite // } // } + /// + /// + /// + /// + /// + /// private bool TestTables(SqliteConnection conn, Migration m) { SqliteCommand primSelectCmd = new SqliteCommand(primSelect, conn); @@ -1822,6 +2041,11 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// Type conversion function + /// + /// + /// private static DbType dbtypeFromType(Type type) { if (type == typeof (String)) @@ -1854,8 +2078,11 @@ namespace OpenSim.Data.SQLite } } - // this is something we'll need to implement for each db - // slightly differently. + /// + /// + /// a Type + /// an sqliteType + /// this is something we'll need to implement for each db slightly differently. private static string sqliteType(Type type) { if (type == typeof (String)) diff --git a/OpenSim/Data/SQLite/SQLiteUserData.cs b/OpenSim/Data/SQLite/SQLiteUserData.cs index 36ec9ea..24c7944 100644 --- a/OpenSim/Data/SQLite/SQLiteUserData.cs +++ b/OpenSim/Data/SQLite/SQLiteUserData.cs @@ -65,6 +65,14 @@ namespace OpenSim.Data.SQLite private SqliteDataAdapter daf; SqliteConnection g_conn; + /// + /// + /// Initialises User Interface + /// Loads and initialises a new SQLite connection and maintains it. + /// use default URI if connect string string is empty. + /// + /// + /// connect string override public void Initialise(string connect) { // default to something sensible @@ -116,7 +124,12 @@ namespace OpenSim.Data.SQLite return; } - // see IUserData + /// + /// see IUserData, + /// Get user data profile by UUID + /// + /// User UUID + /// user profile data override public UserProfileData GetUserByUUID(LLUUID uuid) { lock (ds) @@ -139,7 +152,13 @@ namespace OpenSim.Data.SQLite } } - // see IUserData + /// + /// see IUserData, + /// Get user data profile by name + /// + /// first name + /// last name + /// user profile data override public UserProfileData GetUserByName(string fname, string lname) { string select = "surname = '" + lname + "' and username = '" + fname + "'"; @@ -165,6 +184,12 @@ namespace OpenSim.Data.SQLite #region User Friends List Data + /// + /// Add a new friend in the friendlist + /// + /// UUID of the friendlist owner + /// UUID of the friend to add + /// permission flag override public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) { string InsertFriends = "insert into userfriends(ownerID, friendID, friendPerms) values(:ownerID, :friendID, :perms)"; @@ -185,6 +210,11 @@ namespace OpenSim.Data.SQLite } } + /// + /// Remove a user from the friendlist + /// + /// UUID of the friendlist owner + /// UUID of the friend to remove override public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) { string DeletePerms = "delete from friendlist where (ownerID=:ownerID and friendID=:friendID) or (ownerID=:friendID and friendID=:ownerID)"; @@ -196,6 +226,12 @@ namespace OpenSim.Data.SQLite } } + /// + /// Update the friendlist permission + /// + /// UUID of the friendlist owner + /// UUID of the friend to modify + /// updated permission flag override public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) { string UpdatePerms = "update friendlist set perms=:perms where ownerID=:ownerID and friendID=:friendID"; @@ -208,6 +244,11 @@ namespace OpenSim.Data.SQLite } } + /// + /// Get (fetch?) the friendlist for a user + /// + /// UUID of the friendlist owner + /// The friendlist list override public List GetUserFriendList(LLUUID friendlistowner) { List returnlist = new List(); @@ -246,12 +287,24 @@ namespace OpenSim.Data.SQLite #endregion + /// + /// STUB, Update the user's current region + /// + /// UUID of the user + /// UUID of the region + /// region handle + /// DO NOTHING override public void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle) { //m_log.Info("[USER DB]: Stub UpdateUserCUrrentRegion called"); } - + /// + /// + /// + /// + /// + /// override public List GeneratePickerResults(LLUUID queryID, string query) { List returnlist = new List(); @@ -347,7 +400,11 @@ namespace OpenSim.Data.SQLite } } - + /// + /// DEPRECATED? Store the weblogin key + /// + /// UUID of the user + /// UUID of the weblogin override public void StoreWebLoginKey(LLUUID AgentID, LLUUID WebLoginKey) { DataTable users = ds.Tables["users"]; @@ -487,8 +544,13 @@ namespace OpenSim.Data.SQLite return true; } - /// Appearance + + /// + /// Appearance. /// TODO: stubs for now to do in memory appearance. + /// + /// The user UUID + /// Avatar Appearence override public AvatarAppearance GetUserAppearance(LLUUID user) { AvatarAppearance aa = null; @@ -501,22 +563,45 @@ namespace OpenSim.Data.SQLite return aa; } + /// + /// Update a user appearence + /// + /// the user UUID + /// appearence override public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) { appearance.Owner = user; aplist[user] = appearance; } + /// + /// Add an attachment item to an avatar + /// + /// the user UUID + /// the item UUID + /// DO NOTHING ? override public void AddAttachment(LLUUID user, LLUUID item) { return; } + /// + /// Remove an attachement item from an avatar + /// + /// the user UUID + /// the item UUID + /// DO NOTHING ? override public void RemoveAttachment(LLUUID user, LLUUID item) { return; } + /// + /// Get list of attached item + /// + /// the user UUID + /// List of attached item + /// DO NOTHING ? override public List GetAttachments(LLUUID user) { return new List(); @@ -553,6 +638,10 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// Create the "users" table + /// + /// DataTable private static DataTable createUsersTable() { DataTable users = new DataTable("users"); @@ -588,6 +677,10 @@ namespace OpenSim.Data.SQLite return users; } + /// + /// Create the "useragents" table + /// + /// Data Table private static DataTable createUserAgentsTable() { DataTable ua = new DataTable("useragents"); @@ -613,6 +706,10 @@ namespace OpenSim.Data.SQLite return ua; } + /// + /// Create the "userfriends" table + /// + /// Data Table private static DataTable createUserFriendsTable() { DataTable ua = new DataTable("userfriends"); @@ -634,11 +731,15 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// TODO: this doesn't work yet because something more + /// interesting has to be done to actually get these values + /// back out. Not enough time to figure it out yet. + /// + /// + /// private static UserProfileData buildUserProfile(DataRow row) { - // TODO: this doesn't work yet because something more - // interesting has to be done to actually get these values - // back out. Not enough time to figure it out yet. UserProfileData user = new UserProfileData(); LLUUID tmp; LLUUID.TryParse((String)row["UUID"], out tmp); @@ -678,6 +779,11 @@ namespace OpenSim.Data.SQLite return user; } + /// + /// + /// + /// + /// private void fillUserRow(DataRow row, UserProfileData user) { row["UUID"] = Util.ToRawUuidString(user.ID); @@ -719,6 +825,11 @@ namespace OpenSim.Data.SQLite } } + /// + /// + /// + /// + /// private static UserAgentData buildUserAgent(DataRow row) { UserAgentData ua = new UserAgentData(); @@ -742,6 +853,11 @@ namespace OpenSim.Data.SQLite return ua; } + /// + /// + /// + /// + /// private static void fillUserAgentRow(DataRow row, UserAgentData ua) { row["UUID"] = ua.ProfileID; @@ -770,6 +886,11 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// + /// + /// + /// private void setupUserCommands(SqliteDataAdapter da, SqliteConnection conn) { da.InsertCommand = SQLiteUtil.createInsertCommand("users", ds.Tables["users"]); @@ -784,6 +905,11 @@ namespace OpenSim.Data.SQLite da.DeleteCommand = delete; } + /// + /// + /// + /// + /// private void setupUserFriendsCommands(SqliteDataAdapter daf, SqliteConnection conn) { daf.InsertCommand = SQLiteUtil.createInsertCommand("userfriends", ds.Tables["userfriends"]); @@ -800,6 +926,10 @@ namespace OpenSim.Data.SQLite } + /// + /// + /// + /// private static void InitDB(SqliteConnection conn) { string createUsers = SQLiteUtil.defineTable(createUsersTable()); @@ -832,6 +962,12 @@ namespace OpenSim.Data.SQLite conn.Close(); } + /// + /// + /// + /// + /// + /// private static bool TestTables(SqliteConnection conn, Migration m) { SqliteCommand cmd = new SqliteCommand(userSelect, conn); diff --git a/OpenSim/Data/SQLite/SQLiteUtils.cs b/OpenSim/Data/SQLite/SQLiteUtils.cs index 0862de0..18bb137 100644 --- a/OpenSim/Data/SQLite/SQLiteUtils.cs +++ b/OpenSim/Data/SQLite/SQLiteUtils.cs @@ -44,6 +44,12 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// + /// + /// + /// + /// public static void createCol(DataTable dt, string name, Type type) { DataColumn col = new DataColumn(name, type); @@ -60,17 +66,24 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// Create an insert command + /// + /// table name + /// data table + /// the created command + /// + /// This is subtle enough to deserve some commentary. + /// Instead of doing *lots* and *lots of hardcoded strings + /// for database definitions we'll use the fact that + /// realistically all insert statements look like "insert + /// into A(b, c) values(:b, :c) on the parameterized query + /// front. If we just have a list of b, c, etc... we can + /// generate these strings instead of typing them out. + /// public static SqliteCommand createInsertCommand(string table, DataTable dt) { - /** - * This is subtle enough to deserve some commentary. - * Instead of doing *lots* and *lots of hardcoded strings - * for database definitions we'll use the fact that - * realistically all insert statements look like "insert - * into A(b, c) values(:b, :c) on the parameterized query - * front. If we just have a list of b, c, etc... we can - * generate these strings instead of typing them out. - */ + string[] cols = new string[dt.Columns.Count]; for (int i = 0; i < dt.Columns.Count; i++) { @@ -95,6 +108,13 @@ namespace OpenSim.Data.SQLite return cmd; } + /// + /// create an update command + /// + /// table name + /// + /// + /// the created command public static SqliteCommand createUpdateCommand(string table, string pk, DataTable dt) { string sql = "update " + table + " set "; @@ -122,7 +142,11 @@ namespace OpenSim.Data.SQLite return cmd; } - + /// + /// + /// + /// Data Table + /// public static string defineTable(DataTable dt) { string sql = "create table " + dt.TableName + "("; @@ -158,15 +182,21 @@ namespace OpenSim.Data.SQLite **********************************************************************/ /// + /// /// This is a convenience function that collapses 5 repetitive /// lines for defining SqliteParameters to 2 parameters: /// column name and database type. - /// + /// + /// + /// /// It assumes certain conventions like :param as the param /// name to replace in parametrized queries, and that source /// version is always current version, both of which are fine /// for us. + /// /// + /// + /// ///a built sqlite parameter public static SqliteParameter createSqliteParameter(string name, Type type) { @@ -184,6 +214,11 @@ namespace OpenSim.Data.SQLite * **********************************************************************/ + /// + /// Type conversion function + /// + /// a type + /// a DbType public static DbType dbtypeFromType(Type type) { if (type == typeof (String)) @@ -224,8 +259,11 @@ namespace OpenSim.Data.SQLite } } - // this is something we'll need to implement for each db - // slightly differently. + /// + /// + /// a Type + /// a string + /// this is something we'll need to implement for each db slightly differently. public static string sqliteType(Type type) { if (type == typeof (String)) -- cgit v1.1