diff options
author | Jeff Ames | 2008-06-26 20:14:33 +0000 |
---|---|---|
committer | Jeff Ames | 2008-06-26 20:14:33 +0000 |
commit | 9fae975a53fbb852dfbaf811dca259ddd4f74f4c (patch) | |
tree | 7273987bd5c30c4fabca6fa68b43ce25304a703a /OpenSim/Data/SQLite | |
parent | Update svn properties. Minor formatting cleanup. (diff) | |
download | opensim-SC-9fae975a53fbb852dfbaf811dca259ddd4f74f4c.zip opensim-SC-9fae975a53fbb852dfbaf811dca259ddd4f74f4c.tar.gz opensim-SC-9fae975a53fbb852dfbaf811dca259ddd4f74f4c.tar.bz2 opensim-SC-9fae975a53fbb852dfbaf811dca259ddd4f74f4c.tar.xz |
Apply patch from bug #1605 -- Documentation for Data/SQLite. Thanks kerunix_Flan!
Diffstat (limited to 'OpenSim/Data/SQLite')
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteAssetData.cs | 68 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteGridData.cs | 21 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteInventoryStore.cs | 104 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteManager.cs | 14 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteRegionData.cs | 263 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteUserData.cs | 152 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteUtils.cs | 64 |
7 files changed, 623 insertions, 63 deletions
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 | |||
56 | 56 | ||
57 | private SqliteConnection m_conn; | 57 | private SqliteConnection m_conn; |
58 | 58 | ||
59 | /// <summary> | ||
60 | /// <list type="bullet"> | ||
61 | /// <item>Initialises AssetData interface</item> | ||
62 | /// <item>Loads and initialises a new SQLite connection and maintains it.</item> | ||
63 | /// <item>use default URI if connect string is empty.</item> | ||
64 | /// </list> | ||
65 | /// </summary> | ||
66 | /// <param name="dbconnect">connect string</param> | ||
59 | override public void Initialise(string dbconnect) | 67 | override public void Initialise(string dbconnect) |
60 | { | 68 | { |
61 | if (dbconnect == string.Empty) | 69 | if (dbconnect == string.Empty) |
@@ -65,9 +73,6 @@ namespace OpenSim.Data.SQLite | |||
65 | m_conn = new SqliteConnection(dbconnect); | 73 | m_conn = new SqliteConnection(dbconnect); |
66 | m_conn.Open(); | 74 | m_conn.Open(); |
67 | 75 | ||
68 | |||
69 | |||
70 | |||
71 | Assembly assem = GetType().Assembly; | 76 | Assembly assem = GetType().Assembly; |
72 | Migration m = new Migration(m_conn, assem, "AssetStore"); | 77 | Migration m = new Migration(m_conn, assem, "AssetStore"); |
73 | // TODO: remove this next line after changeset 6000, | 78 | // TODO: remove this next line after changeset 6000, |
@@ -80,6 +85,11 @@ namespace OpenSim.Data.SQLite | |||
80 | return; | 85 | return; |
81 | } | 86 | } |
82 | 87 | ||
88 | /// <summary> | ||
89 | /// Fetch Asset | ||
90 | /// </summary> | ||
91 | /// <param name="uuid">UUID of ... ?</param> | ||
92 | /// <returns>Asset base</returns> | ||
83 | override public AssetBase FetchAsset(LLUUID uuid) | 93 | override public AssetBase FetchAsset(LLUUID uuid) |
84 | { | 94 | { |
85 | 95 | ||
@@ -103,6 +113,10 @@ namespace OpenSim.Data.SQLite | |||
103 | } | 113 | } |
104 | } | 114 | } |
105 | 115 | ||
116 | /// <summary> | ||
117 | /// Create an asset | ||
118 | /// </summary> | ||
119 | /// <param name="asset">Asset Base</param> | ||
106 | override public void CreateAsset(AssetBase asset) | 120 | override public void CreateAsset(AssetBase asset) |
107 | { | 121 | { |
108 | m_log.Info("[ASSET DB]: Creating Asset " + Util.ToRawUuidString(asset.FullID)); | 122 | m_log.Info("[ASSET DB]: Creating Asset " + Util.ToRawUuidString(asset.FullID)); |
@@ -128,6 +142,10 @@ namespace OpenSim.Data.SQLite | |||
128 | } | 142 | } |
129 | } | 143 | } |
130 | 144 | ||
145 | /// <summary> | ||
146 | /// Update an asset | ||
147 | /// </summary> | ||
148 | /// <param name="asset"></param> | ||
131 | override public void UpdateAsset(AssetBase asset) | 149 | override public void UpdateAsset(AssetBase asset) |
132 | { | 150 | { |
133 | LogAssetLoad(asset); | 151 | LogAssetLoad(asset); |
@@ -148,6 +166,10 @@ namespace OpenSim.Data.SQLite | |||
148 | 166 | ||
149 | } | 167 | } |
150 | 168 | ||
169 | /// <summary> | ||
170 | /// Some... logging functionnality | ||
171 | /// </summary> | ||
172 | /// <param name="asset"></param> | ||
151 | private static void LogAssetLoad(AssetBase asset) | 173 | private static void LogAssetLoad(AssetBase asset) |
152 | { | 174 | { |
153 | string temporary = asset.Temporary ? "Temporary" : "Stored"; | 175 | string temporary = asset.Temporary ? "Temporary" : "Stored"; |
@@ -161,6 +183,11 @@ namespace OpenSim.Data.SQLite | |||
161 | asset.InvType, temporary, local, assetLength)); | 183 | asset.InvType, temporary, local, assetLength)); |
162 | } | 184 | } |
163 | 185 | ||
186 | /// <summary> | ||
187 | /// Check if an asset exist in database | ||
188 | /// </summary> | ||
189 | /// <param name="uuid">The asset UUID</param> | ||
190 | /// <returns>True if exist, or false.</returns> | ||
164 | override public bool ExistsAsset(LLUUID uuid) | 191 | override public bool ExistsAsset(LLUUID uuid) |
165 | { | 192 | { |
166 | using (SqliteCommand cmd = new SqliteCommand(SelectAssetSQL, m_conn)) | 193 | using (SqliteCommand cmd = new SqliteCommand(SelectAssetSQL, m_conn)) |
@@ -182,6 +209,10 @@ namespace OpenSim.Data.SQLite | |||
182 | } | 209 | } |
183 | } | 210 | } |
184 | 211 | ||
212 | /// <summary> | ||
213 | /// Delete an asset from database | ||
214 | /// </summary> | ||
215 | /// <param name="uuid"></param> | ||
185 | public void DeleteAsset(LLUUID uuid) | 216 | public void DeleteAsset(LLUUID uuid) |
186 | { | 217 | { |
187 | using (SqliteCommand cmd = new SqliteCommand(DeleteAssetSQL, m_conn)) | 218 | using (SqliteCommand cmd = new SqliteCommand(DeleteAssetSQL, m_conn)) |
@@ -192,6 +223,9 @@ namespace OpenSim.Data.SQLite | |||
192 | } | 223 | } |
193 | } | 224 | } |
194 | 225 | ||
226 | /// <summary> | ||
227 | /// commit | ||
228 | /// </summary> | ||
195 | override public void CommitAssets() // force a sync to the database | 229 | override public void CommitAssets() // force a sync to the database |
196 | { | 230 | { |
197 | m_log.Info("[ASSET DB]: Attempting commit"); | 231 | m_log.Info("[ASSET DB]: Attempting commit"); |
@@ -210,6 +244,10 @@ namespace OpenSim.Data.SQLite | |||
210 | * | 244 | * |
211 | **********************************************************************/ | 245 | **********************************************************************/ |
212 | 246 | ||
247 | /// <summary> | ||
248 | /// Create the "assets" table | ||
249 | /// </summary> | ||
250 | /// <returns></returns> | ||
213 | private static DataTable createAssetsTable() | 251 | private static DataTable createAssetsTable() |
214 | { | 252 | { |
215 | DataTable assets = new DataTable("assets"); | 253 | DataTable assets = new DataTable("assets"); |
@@ -235,6 +273,11 @@ namespace OpenSim.Data.SQLite | |||
235 | * | 273 | * |
236 | **********************************************************************/ | 274 | **********************************************************************/ |
237 | 275 | ||
276 | /// <summary> | ||
277 | /// | ||
278 | /// </summary> | ||
279 | /// <param name="row"></param> | ||
280 | /// <returns></returns> | ||
238 | private static AssetBase buildAsset(IDataReader row) | 281 | private static AssetBase buildAsset(IDataReader row) |
239 | { | 282 | { |
240 | // TODO: this doesn't work yet because something more | 283 | // TODO: this doesn't work yet because something more |
@@ -263,6 +306,10 @@ namespace OpenSim.Data.SQLite | |||
263 | * | 306 | * |
264 | **********************************************************************/ | 307 | **********************************************************************/ |
265 | 308 | ||
309 | /// <summary> | ||
310 | /// | ||
311 | /// </summary> | ||
312 | /// <param name="conn"></param> | ||
266 | private static void InitDB(SqliteConnection conn) | 313 | private static void InitDB(SqliteConnection conn) |
267 | { | 314 | { |
268 | string createAssets = SQLiteUtil.defineTable(createAssetsTable()); | 315 | string createAssets = SQLiteUtil.defineTable(createAssetsTable()); |
@@ -270,6 +317,12 @@ namespace OpenSim.Data.SQLite | |||
270 | pcmd.ExecuteNonQuery(); | 317 | pcmd.ExecuteNonQuery(); |
271 | } | 318 | } |
272 | 319 | ||
320 | /// <summary> | ||
321 | /// | ||
322 | /// </summary> | ||
323 | /// <param name="conn"></param> | ||
324 | /// <param name="m"></param> | ||
325 | /// <returns></returns> | ||
273 | private static bool TestTables(SqliteConnection conn, Migration m) | 326 | private static bool TestTables(SqliteConnection conn, Migration m) |
274 | { | 327 | { |
275 | SqliteCommand cmd = new SqliteCommand(assetSelect, conn); | 328 | SqliteCommand cmd = new SqliteCommand(assetSelect, conn); |
@@ -295,6 +348,9 @@ namespace OpenSim.Data.SQLite | |||
295 | 348 | ||
296 | #region IPlugin interface | 349 | #region IPlugin interface |
297 | 350 | ||
351 | /// <summary> | ||
352 | /// | ||
353 | /// </summary> | ||
298 | override public string Version | 354 | override public string Version |
299 | { | 355 | { |
300 | get | 356 | get |
@@ -309,11 +365,17 @@ namespace OpenSim.Data.SQLite | |||
309 | } | 365 | } |
310 | } | 366 | } |
311 | 367 | ||
368 | /// <summary> | ||
369 | /// Initialise the AssetData interface using default URI | ||
370 | /// </summary> | ||
312 | override public void Initialise() | 371 | override public void Initialise() |
313 | { | 372 | { |
314 | Initialise("URI=file:AssetStorage.db,version=3"); | 373 | Initialise("URI=file:AssetStorage.db,version=3"); |
315 | } | 374 | } |
316 | 375 | ||
376 | /// <summary> | ||
377 | /// Name of this DB provider | ||
378 | /// </summary> | ||
317 | override public string Name | 379 | override public string Name |
318 | { | 380 | { |
319 | get { return "SQLite Asset storage engine"; } | 381 | 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 | |||
41 | public class SQLiteGridData : GridDataBase | 41 | public class SQLiteGridData : GridDataBase |
42 | { | 42 | { |
43 | /// <summary> | 43 | /// <summary> |
44 | /// A database manager | 44 | /// SQLite database manager |
45 | /// </summary> | 45 | /// </summary> |
46 | private SQLiteManager database; | 46 | private SQLiteManager database; |
47 | 47 | ||
48 | /// <summary> | 48 | /// <summary> |
49 | /// Initialises the Grid Interface | 49 | /// <list type="bullet"> |
50 | /// <item>Initialises Inventory interface</item> | ||
51 | /// <item>Loads and initialises a new SQLite connection and maintains it.</item> | ||
52 | /// <item>use default URI if connect string is empty.</item> | ||
53 | /// </list> | ||
50 | /// </summary> | 54 | /// </summary> |
55 | /// <param name="dbconnect">connect string</param> | ||
51 | override public void Initialise(string connect) | 56 | override public void Initialise(string connect) |
52 | { | 57 | { |
53 | database = new SQLiteManager(connect); | 58 | database = new SQLiteManager(connect); |
@@ -87,13 +92,14 @@ namespace OpenSim.Data.SQLite | |||
87 | /// <param name="c">maximum X coordinate</param> | 92 | /// <param name="c">maximum X coordinate</param> |
88 | /// <param name="d">maximum Y coordinate</param> | 93 | /// <param name="d">maximum Y coordinate</param> |
89 | /// <returns>An array of region profiles</returns> | 94 | /// <returns>An array of region profiles</returns> |
95 | /// <remarks>NOT IMPLEMENTED ? always return null</remarks> | ||
90 | override public RegionProfileData[] GetProfilesInRange(uint a, uint b, uint c, uint d) | 96 | override public RegionProfileData[] GetProfilesInRange(uint a, uint b, uint c, uint d) |
91 | { | 97 | { |
92 | return null; | 98 | return null; |
93 | } | 99 | } |
94 | 100 | ||
95 | /// <summary> | 101 | /// <summary> |
96 | /// Returns a sim profile from it's location | 102 | /// Returns a sim profile from it's handle |
97 | /// </summary> | 103 | /// </summary> |
98 | /// <param name="handle">Region location handle</param> | 104 | /// <param name="handle">Region location handle</param> |
99 | /// <returns>Sim profile</returns> | 105 | /// <returns>Sim profile</returns> |
@@ -162,8 +168,9 @@ namespace OpenSim.Data.SQLite | |||
162 | } | 168 | } |
163 | 169 | ||
164 | /// <summary> | 170 | /// <summary> |
165 | /// // Returns a list of avatar and UUIDs that match the query | 171 | /// Returns a list of avatar and UUIDs that match the query |
166 | /// </summary> | 172 | /// </summary> |
173 | /// <remarks>do nothing yet</remarks> | ||
167 | public List<AvatarPickerAvatar> GeneratePickerResults(LLUUID queryID, string query) | 174 | public List<AvatarPickerAvatar> GeneratePickerResults(LLUUID queryID, string query) |
168 | { | 175 | { |
169 | //Do nothing yet | 176 | //Do nothing yet |
@@ -232,6 +239,12 @@ namespace OpenSim.Data.SQLite | |||
232 | return false; | 239 | return false; |
233 | } | 240 | } |
234 | 241 | ||
242 | /// <summary> | ||
243 | /// NOT IMPLEMENTED | ||
244 | /// </summary> | ||
245 | /// <param name="x">x coordinate</param> | ||
246 | /// <param name="y">y coordinate</param> | ||
247 | /// <returns>always return null</returns> | ||
235 | override public ReservationData GetReservationAtPoint(uint x, uint y) | 248 | override public ReservationData GetReservationAtPoint(uint x, uint y) |
236 | { | 249 | { |
237 | return null; | 250 | 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; | |||
36 | 36 | ||
37 | namespace OpenSim.Data.SQLite | 37 | namespace OpenSim.Data.SQLite |
38 | { | 38 | { |
39 | /// <summary> | ||
40 | /// An Inventory Interface to the SQLite database | ||
41 | /// </summary> | ||
39 | public class SQLiteInventoryStore : SQLiteUtil, IInventoryData | 42 | public class SQLiteInventoryStore : SQLiteUtil, IInventoryData |
40 | { | 43 | { |
41 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 44 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
@@ -48,8 +51,13 @@ namespace OpenSim.Data.SQLite | |||
48 | private SqliteDataAdapter invFoldersDa; | 51 | private SqliteDataAdapter invFoldersDa; |
49 | 52 | ||
50 | /// <summary> | 53 | /// <summary> |
51 | /// Initialises the interface | 54 | /// <list type="bullet"> |
55 | /// <item>Initialises Inventory interface</item> | ||
56 | /// <item>Loads and initialises a new SQLite connection and maintains it.</item> | ||
57 | /// <item>use default URI if connect string string is empty.</item> | ||
58 | /// </list> | ||
52 | /// </summary> | 59 | /// </summary> |
60 | /// <param name="dbconnect">connect string</param> | ||
53 | public void Initialise(string dbconnect) | 61 | public void Initialise(string dbconnect) |
54 | { | 62 | { |
55 | if (dbconnect == string.Empty) | 63 | if (dbconnect == string.Empty) |
@@ -90,6 +98,11 @@ namespace OpenSim.Data.SQLite | |||
90 | ds.AcceptChanges(); | 98 | ds.AcceptChanges(); |
91 | } | 99 | } |
92 | 100 | ||
101 | /// <summary> | ||
102 | /// | ||
103 | /// </summary> | ||
104 | /// <param name="row"></param> | ||
105 | /// <returns></returns> | ||
93 | public InventoryItemBase buildItem(DataRow row) | 106 | public InventoryItemBase buildItem(DataRow row) |
94 | { | 107 | { |
95 | InventoryItemBase item = new InventoryItemBase(); | 108 | InventoryItemBase item = new InventoryItemBase(); |
@@ -130,6 +143,11 @@ namespace OpenSim.Data.SQLite | |||
130 | return item; | 143 | return item; |
131 | } | 144 | } |
132 | 145 | ||
146 | /// <summary> | ||
147 | /// | ||
148 | /// </summary> | ||
149 | /// <param name="row"></param> | ||
150 | /// <param name="item"></param> | ||
133 | private static void fillItemRow(DataRow row, InventoryItemBase item) | 151 | private static void fillItemRow(DataRow row, InventoryItemBase item) |
134 | { | 152 | { |
135 | row["UUID"] = Util.ToRawUuidString(item.ID); | 153 | row["UUID"] = Util.ToRawUuidString(item.ID); |
@@ -156,6 +174,12 @@ namespace OpenSim.Data.SQLite | |||
156 | row["flags"] = item.Flags; | 174 | row["flags"] = item.Flags; |
157 | } | 175 | } |
158 | 176 | ||
177 | /// <summary> | ||
178 | /// Add inventory folder | ||
179 | /// </summary> | ||
180 | /// <param name="folder">Folder base</param> | ||
181 | /// <param name="add">true=create folder. false=update existing folder</param> | ||
182 | /// <remarks>nasty</remarks> | ||
159 | private void addFolder(InventoryFolderBase folder, bool add) | 183 | private void addFolder(InventoryFolderBase folder, bool add) |
160 | { | 184 | { |
161 | lock (ds) | 185 | lock (ds) |
@@ -184,6 +208,10 @@ namespace OpenSim.Data.SQLite | |||
184 | } | 208 | } |
185 | } | 209 | } |
186 | 210 | ||
211 | /// <summary> | ||
212 | /// Move an inventory folder | ||
213 | /// </summary> | ||
214 | /// <param name="folder">folder base</param> | ||
187 | private void moveFolder(InventoryFolderBase folder) | 215 | private void moveFolder(InventoryFolderBase folder) |
188 | { | 216 | { |
189 | lock (ds) | 217 | lock (ds) |
@@ -206,6 +234,11 @@ namespace OpenSim.Data.SQLite | |||
206 | } | 234 | } |
207 | } | 235 | } |
208 | 236 | ||
237 | /// <summary> | ||
238 | /// add an item in inventory | ||
239 | /// </summary> | ||
240 | /// <param name="item">the item</param> | ||
241 | /// <param name="add">true=add item ; false=update existing item</param> | ||
209 | private void addItem(InventoryItemBase item, bool add) | 242 | private void addItem(InventoryItemBase item, bool add) |
210 | { | 243 | { |
211 | lock (ds) | 244 | lock (ds) |
@@ -233,31 +266,34 @@ namespace OpenSim.Data.SQLite | |||
233 | } | 266 | } |
234 | } | 267 | } |
235 | 268 | ||
269 | /// <summary> | ||
270 | /// TODO : DataSet commit | ||
271 | /// </summary> | ||
236 | public void Shutdown() | 272 | public void Shutdown() |
237 | { | 273 | { |
238 | // TODO: DataSet commit | 274 | // TODO: DataSet commit |
239 | } | 275 | } |
240 | 276 | ||
241 | /// <summary> | 277 | /// <summary> |
242 | /// Closes the interface | 278 | /// Closes the inventory interface |
243 | /// </summary> | 279 | /// </summary> |
244 | public void Close() | 280 | public void Close() |
245 | { | 281 | { |
246 | } | 282 | } |
247 | 283 | ||
248 | /// <summary> | 284 | /// <summary> |
249 | /// The plugin being loaded | 285 | /// The name of this DB provider |
250 | /// </summary> | 286 | /// </summary> |
251 | /// <returns>A string containing the plugin name</returns> | 287 | /// <returns>Name of DB provider</returns> |
252 | public string getName() | 288 | public string getName() |
253 | { | 289 | { |
254 | return "SQLite Inventory Data Interface"; | 290 | return "SQLite Inventory Data Interface"; |
255 | } | 291 | } |
256 | 292 | ||
257 | /// <summary> | 293 | /// <summary> |
258 | /// The plugins version | 294 | /// Returns the version of this DB provider |
259 | /// </summary> | 295 | /// </summary> |
260 | /// <returns>A string containing the plugin version</returns> | 296 | /// <returns>A string containing the DB provider version</returns> |
261 | public string getVersion() | 297 | public string getVersion() |
262 | { | 298 | { |
263 | Module module = GetType().Module; | 299 | Module module = GetType().Module; |
@@ -362,7 +398,11 @@ namespace OpenSim.Data.SQLite | |||
362 | return folders; | 398 | return folders; |
363 | } | 399 | } |
364 | 400 | ||
365 | // See IInventoryData | 401 | /// <summary> |
402 | /// See IInventoryData | ||
403 | /// </summary> | ||
404 | /// <param name="parentID"></param> | ||
405 | /// <returns></returns> | ||
366 | public List<InventoryFolderBase> getFolderHierarchy(LLUUID parentID) | 406 | public List<InventoryFolderBase> getFolderHierarchy(LLUUID parentID) |
367 | { | 407 | { |
368 | List<InventoryFolderBase> folders = new List<InventoryFolderBase>(); | 408 | List<InventoryFolderBase> folders = new List<InventoryFolderBase>(); |
@@ -440,9 +480,9 @@ namespace OpenSim.Data.SQLite | |||
440 | } | 480 | } |
441 | 481 | ||
442 | /// <summary> | 482 | /// <summary> |
443 | /// | 483 | /// Delete an inventory item |
444 | /// </summary> | 484 | /// </summary> |
445 | /// <param name="item"></param> | 485 | /// <param name="item">The item UUID</param> |
446 | public void deleteInventoryItem(LLUUID itemID) | 486 | public void deleteInventoryItem(LLUUID itemID) |
447 | { | 487 | { |
448 | lock (ds) | 488 | lock (ds) |
@@ -463,7 +503,7 @@ namespace OpenSim.Data.SQLite | |||
463 | /// Delete all items in the specified folder | 503 | /// Delete all items in the specified folder |
464 | /// </summary> | 504 | /// </summary> |
465 | /// <param name="folderId">id of the folder, whose item content should be deleted</param> | 505 | /// <param name="folderId">id of the folder, whose item content should be deleted</param> |
466 | //!TODO, this is horribly inefficient, but I don't want to ruin the overall structure of this implementation | 506 | /// <todo>this is horribly inefficient, but I don't want to ruin the overall structure of this implementation</todo> |
467 | private void deleteItemsInFolder(LLUUID folderId) | 507 | private void deleteItemsInFolder(LLUUID folderId) |
468 | { | 508 | { |
469 | List<InventoryItemBase> items = getInventoryInFolder(Util.ToRawUuidString(folderId)); | 509 | List<InventoryItemBase> items = getInventoryInFolder(Util.ToRawUuidString(folderId)); |
@@ -505,7 +545,7 @@ namespace OpenSim.Data.SQLite | |||
505 | /// <remarks> | 545 | /// <remarks> |
506 | /// This will clean-up any child folders and child items as well | 546 | /// This will clean-up any child folders and child items as well |
507 | /// </remarks> | 547 | /// </remarks> |
508 | /// <param name="item"></param> | 548 | /// <param name="folderID">the folder UUID</param> |
509 | public void deleteInventoryFolder(LLUUID folderID) | 549 | public void deleteInventoryFolder(LLUUID folderID) |
510 | { | 550 | { |
511 | lock (ds) | 551 | lock (ds) |
@@ -544,6 +584,9 @@ namespace OpenSim.Data.SQLite | |||
544 | * | 584 | * |
545 | **********************************************************************/ | 585 | **********************************************************************/ |
546 | 586 | ||
587 | /// <summary> | ||
588 | /// Create the "inventoryitems" table | ||
589 | /// </summary> | ||
547 | private static DataTable createInventoryItemsTable() | 590 | private static DataTable createInventoryItemsTable() |
548 | { | 591 | { |
549 | DataTable inv = new DataTable("inventoryitems"); | 592 | DataTable inv = new DataTable("inventoryitems"); |
@@ -582,6 +625,10 @@ namespace OpenSim.Data.SQLite | |||
582 | return inv; | 625 | return inv; |
583 | } | 626 | } |
584 | 627 | ||
628 | /// <summary> | ||
629 | /// Creates the "inventoryfolders" table | ||
630 | /// </summary> | ||
631 | /// <returns></returns> | ||
585 | private static DataTable createInventoryFoldersTable() | 632 | private static DataTable createInventoryFoldersTable() |
586 | { | 633 | { |
587 | DataTable fol = new DataTable("inventoryfolders"); | 634 | DataTable fol = new DataTable("inventoryfolders"); |
@@ -597,6 +644,11 @@ namespace OpenSim.Data.SQLite | |||
597 | return fol; | 644 | return fol; |
598 | } | 645 | } |
599 | 646 | ||
647 | /// <summary> | ||
648 | /// | ||
649 | /// </summary> | ||
650 | /// <param name="da"></param> | ||
651 | /// <param name="conn"></param> | ||
600 | private void setupItemsCommands(SqliteDataAdapter da, SqliteConnection conn) | 652 | private void setupItemsCommands(SqliteDataAdapter da, SqliteConnection conn) |
601 | { | 653 | { |
602 | lock (ds) | 654 | lock (ds) |
@@ -614,6 +666,11 @@ namespace OpenSim.Data.SQLite | |||
614 | } | 666 | } |
615 | } | 667 | } |
616 | 668 | ||
669 | /// <summary> | ||
670 | /// | ||
671 | /// </summary> | ||
672 | /// <param name="da"></param> | ||
673 | /// <param name="conn"></param> | ||
617 | private void setupFoldersCommands(SqliteDataAdapter da, SqliteConnection conn) | 674 | private void setupFoldersCommands(SqliteDataAdapter da, SqliteConnection conn) |
618 | { | 675 | { |
619 | lock (ds) | 676 | lock (ds) |
@@ -631,6 +688,11 @@ namespace OpenSim.Data.SQLite | |||
631 | } | 688 | } |
632 | } | 689 | } |
633 | 690 | ||
691 | /// <summary> | ||
692 | /// | ||
693 | /// </summary> | ||
694 | /// <param name="row"></param> | ||
695 | /// <returns></returns> | ||
634 | private static InventoryFolderBase buildFolder(DataRow row) | 696 | private static InventoryFolderBase buildFolder(DataRow row) |
635 | { | 697 | { |
636 | InventoryFolderBase folder = new InventoryFolderBase(); | 698 | InventoryFolderBase folder = new InventoryFolderBase(); |
@@ -643,6 +705,11 @@ namespace OpenSim.Data.SQLite | |||
643 | return folder; | 705 | return folder; |
644 | } | 706 | } |
645 | 707 | ||
708 | /// <summary> | ||
709 | /// | ||
710 | /// </summary> | ||
711 | /// <param name="row"></param> | ||
712 | /// <param name="folder"></param> | ||
646 | private static void fillFolderRow(DataRow row, InventoryFolderBase folder) | 713 | private static void fillFolderRow(DataRow row, InventoryFolderBase folder) |
647 | { | 714 | { |
648 | row["UUID"] = Util.ToRawUuidString(folder.ID); | 715 | row["UUID"] = Util.ToRawUuidString(folder.ID); |
@@ -653,6 +720,11 @@ namespace OpenSim.Data.SQLite | |||
653 | row["version"] = folder.Version; | 720 | row["version"] = folder.Version; |
654 | } | 721 | } |
655 | 722 | ||
723 | /// <summary> | ||
724 | /// | ||
725 | /// </summary> | ||
726 | /// <param name="row"></param> | ||
727 | /// <param name="folder"></param> | ||
656 | private static void moveFolderRow(DataRow row, InventoryFolderBase folder) | 728 | private static void moveFolderRow(DataRow row, InventoryFolderBase folder) |
657 | { | 729 | { |
658 | row["UUID"] = Util.ToRawUuidString(folder.ID); | 730 | row["UUID"] = Util.ToRawUuidString(folder.ID); |
@@ -665,6 +737,10 @@ namespace OpenSim.Data.SQLite | |||
665 | * | 737 | * |
666 | **********************************************************************/ | 738 | **********************************************************************/ |
667 | 739 | ||
740 | /// <summary> | ||
741 | /// | ||
742 | /// </summary> | ||
743 | /// <param name="conn"></param> | ||
668 | private static void InitDB(SqliteConnection conn) | 744 | private static void InitDB(SqliteConnection conn) |
669 | { | 745 | { |
670 | string createInventoryItems = defineTable(createInventoryItemsTable()); | 746 | string createInventoryItems = defineTable(createInventoryItemsTable()); |
@@ -677,6 +753,12 @@ namespace OpenSim.Data.SQLite | |||
677 | scmd.ExecuteNonQuery(); | 753 | scmd.ExecuteNonQuery(); |
678 | } | 754 | } |
679 | 755 | ||
756 | /// <summary> | ||
757 | /// | ||
758 | /// </summary> | ||
759 | /// <param name="conn"></param> | ||
760 | /// <param name="m"></param> | ||
761 | /// <returns></returns> | ||
680 | private static bool TestTables(SqliteConnection conn, Migration m) | 762 | private static bool TestTables(SqliteConnection conn, Migration m) |
681 | { | 763 | { |
682 | SqliteCommand invItemsSelectCmd = new SqliteCommand(invItemsSelect, conn); | 764 | 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; | |||
35 | 35 | ||
36 | namespace OpenSim.Data.SQLite | 36 | namespace OpenSim.Data.SQLite |
37 | { | 37 | { |
38 | /// <summary> | ||
39 | /// SQLite Manager | ||
40 | /// </summary> | ||
38 | internal class SQLiteManager : SQLiteUtil | 41 | internal class SQLiteManager : SQLiteUtil |
39 | { | 42 | { |
40 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 43 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
@@ -42,13 +45,12 @@ namespace OpenSim.Data.SQLite | |||
42 | private IDbConnection dbcon; | 45 | private IDbConnection dbcon; |
43 | 46 | ||
44 | /// <summary> | 47 | /// <summary> |
45 | /// Initialises and creates a new SQLite connection and maintains it. | 48 | /// <list type="bullet"> |
49 | /// <item>Initialises and creates a new SQLite connection and maintains it.</item> | ||
50 | /// <item>use default URI if connect string is empty.</item> | ||
51 | /// </list> | ||
46 | /// </summary> | 52 | /// </summary> |
47 | /// <param name="hostname">The SQLite server being connected to</param> | 53 | /// <param name="connect">connect string</param> |
48 | /// <param name="database">The name of the SQLite database being used</param> | ||
49 | /// <param name="username">The username logging into the database</param> | ||
50 | /// <param name="password">The password for the user logging in</param> | ||
51 | /// <param name="cpooling">Whether to use connection pooling or not, can be one of the following: 'yes', 'true', 'no' or 'false', if unsure use 'false'.</param> | ||
52 | public SQLiteManager(string connect) | 54 | public SQLiteManager(string connect) |
53 | { | 55 | { |
54 | try | 56 | 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; | |||
40 | 40 | ||
41 | namespace OpenSim.Data.SQLite | 41 | namespace OpenSim.Data.SQLite |
42 | { | 42 | { |
43 | /// <summary> | ||
44 | /// A RegionData Interface to the SQLite database | ||
45 | /// </summary> | ||
43 | public class SQLiteRegionData : IRegionDataStore | 46 | public class SQLiteRegionData : IRegionDataStore |
44 | { | 47 | { |
45 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 48 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
@@ -74,7 +77,15 @@ namespace OpenSim.Data.SQLite | |||
74 | * | 77 | * |
75 | **********************************************************************/ | 78 | **********************************************************************/ |
76 | 79 | ||
77 | // see IRegionDataStore | 80 | /// <summary> |
81 | /// See IRegionDataStore | ||
82 | /// <list type="bullet"> | ||
83 | /// <item>Initialises RegionData Interface</item> | ||
84 | /// <item>Loads and initialises a new SQLite connection and maintains it.</item> | ||
85 | /// </list> | ||
86 | /// </summary> | ||
87 | /// <param name="connectionString">the connection string</param> | ||
88 | /// <param name="persistPrimInventories">?</param> | ||
78 | public void Initialise(string connectionString, bool persistPrimInventories) | 89 | public void Initialise(string connectionString, bool persistPrimInventories) |
79 | { | 90 | { |
80 | m_connectionString = connectionString; | 91 | m_connectionString = connectionString; |
@@ -203,6 +214,11 @@ namespace OpenSim.Data.SQLite | |||
203 | } | 214 | } |
204 | } | 215 | } |
205 | 216 | ||
217 | /// <summary> | ||
218 | /// Adds an object into region storage | ||
219 | /// </summary> | ||
220 | /// <param name="obj">the object</param> | ||
221 | /// <param name="regionUUID">the region UUID</param> | ||
206 | public void StoreObject(SceneObjectGroup obj, LLUUID regionUUID) | 222 | public void StoreObject(SceneObjectGroup obj, LLUUID regionUUID) |
207 | { | 223 | { |
208 | lock (ds) | 224 | lock (ds) |
@@ -233,6 +249,11 @@ namespace OpenSim.Data.SQLite | |||
233 | // m_log.Info("[Dump of prims]: " + ds.GetXml()); | 249 | // m_log.Info("[Dump of prims]: " + ds.GetXml()); |
234 | } | 250 | } |
235 | 251 | ||
252 | /// <summary> | ||
253 | /// Removes an object from region storage | ||
254 | /// </summary> | ||
255 | /// <param name="obj">the object</param> | ||
256 | /// <param name="regionUUID">the region UUID</param> | ||
236 | public void RemoveObject(LLUUID obj, LLUUID regionUUID) | 257 | public void RemoveObject(LLUUID obj, LLUUID regionUUID) |
237 | { | 258 | { |
238 | m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.UUID, regionUUID); | 259 | m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.UUID, regionUUID); |
@@ -271,6 +292,7 @@ namespace OpenSim.Data.SQLite | |||
271 | /// Remove all persisted items of the given prim. | 292 | /// Remove all persisted items of the given prim. |
272 | /// The caller must acquire the necessrary synchronization locks and commit or rollback changes. | 293 | /// The caller must acquire the necessrary synchronization locks and commit or rollback changes. |
273 | /// </summary> | 294 | /// </summary> |
295 | /// <param name="uuid">The item UUID</param> | ||
274 | private void RemoveItems(LLUUID uuid) | 296 | private void RemoveItems(LLUUID uuid) |
275 | { | 297 | { |
276 | DataTable items = ds.Tables["primitems"]; | 298 | DataTable items = ds.Tables["primitems"]; |
@@ -287,7 +309,7 @@ namespace OpenSim.Data.SQLite | |||
287 | /// <summary> | 309 | /// <summary> |
288 | /// Load persisted objects from region storage. | 310 | /// Load persisted objects from region storage. |
289 | /// </summary> | 311 | /// </summary> |
290 | /// <param name="regionUUID"></param> | 312 | /// <param name="regionUUID">The region UUID</param> |
291 | /// <returns>List of loaded groups</returns> | 313 | /// <returns>List of loaded groups</returns> |
292 | public List<SceneObjectGroup> LoadObjects(LLUUID regionUUID) | 314 | public List<SceneObjectGroup> LoadObjects(LLUUID regionUUID) |
293 | { | 315 | { |
@@ -375,7 +397,7 @@ namespace OpenSim.Data.SQLite | |||
375 | /// <summary> | 397 | /// <summary> |
376 | /// Load in a prim's persisted inventory. | 398 | /// Load in a prim's persisted inventory. |
377 | /// </summary> | 399 | /// </summary> |
378 | /// <param name="prim"></param> | 400 | /// <param name="prim">the prim</param> |
379 | private void LoadItems(SceneObjectPart prim) | 401 | private void LoadItems(SceneObjectPart prim) |
380 | { | 402 | { |
381 | //m_log.DebugFormat("[DATASTORE]: Loading inventory for {0}, {1}", prim.Name, prim.UUID); | 403 | //m_log.DebugFormat("[DATASTORE]: Loading inventory for {0}, {1}", prim.Name, prim.UUID); |
@@ -405,6 +427,11 @@ namespace OpenSim.Data.SQLite | |||
405 | } | 427 | } |
406 | } | 428 | } |
407 | 429 | ||
430 | /// <summary> | ||
431 | /// Store a terrain revision in region storage | ||
432 | /// </summary> | ||
433 | /// <param name="ter">terrain heightfield</param> | ||
434 | /// <param name="regionID">region UUID</param> | ||
408 | public void StoreTerrain(double[,] ter, LLUUID regionID) | 435 | public void StoreTerrain(double[,] ter, LLUUID regionID) |
409 | { | 436 | { |
410 | lock (ds) | 437 | lock (ds) |
@@ -444,6 +471,11 @@ namespace OpenSim.Data.SQLite | |||
444 | } | 471 | } |
445 | } | 472 | } |
446 | 473 | ||
474 | /// <summary> | ||
475 | /// Load the latest terrain revision from region storage | ||
476 | /// </summary> | ||
477 | /// <param name="regionID">the region UUID</param> | ||
478 | /// <returns>Heightfield data</returns> | ||
447 | public double[,] LoadTerrain(LLUUID regionID) | 479 | public double[,] LoadTerrain(LLUUID regionID) |
448 | { | 480 | { |
449 | lock (ds) | 481 | lock (ds) |
@@ -488,6 +520,10 @@ namespace OpenSim.Data.SQLite | |||
488 | } | 520 | } |
489 | } | 521 | } |
490 | 522 | ||
523 | /// <summary> | ||
524 | /// | ||
525 | /// </summary> | ||
526 | /// <param name="globalID"></param> | ||
491 | public void RemoveLandObject(LLUUID globalID) | 527 | public void RemoveLandObject(LLUUID globalID) |
492 | { | 528 | { |
493 | lock (ds) | 529 | lock (ds) |
@@ -506,6 +542,10 @@ namespace OpenSim.Data.SQLite | |||
506 | } | 542 | } |
507 | } | 543 | } |
508 | 544 | ||
545 | /// <summary> | ||
546 | /// | ||
547 | /// </summary> | ||
548 | /// <param name="parcel"></param> | ||
509 | public void StoreLandObject(ILandObject parcel) | 549 | public void StoreLandObject(ILandObject parcel) |
510 | { | 550 | { |
511 | lock (ds) | 551 | lock (ds) |
@@ -543,6 +583,11 @@ namespace OpenSim.Data.SQLite | |||
543 | Commit(); | 583 | Commit(); |
544 | } | 584 | } |
545 | 585 | ||
586 | /// <summary> | ||
587 | /// | ||
588 | /// </summary> | ||
589 | /// <param name="regionUUID"></param> | ||
590 | /// <returns></returns> | ||
546 | public List<LandData> LoadLandObjects(LLUUID regionUUID) | 591 | public List<LandData> LoadLandObjects(LLUUID regionUUID) |
547 | { | 592 | { |
548 | List<LandData> landDataForRegion = new List<LandData>(); | 593 | List<LandData> landDataForRegion = new List<LandData>(); |
@@ -568,6 +613,9 @@ namespace OpenSim.Data.SQLite | |||
568 | return landDataForRegion; | 613 | return landDataForRegion; |
569 | } | 614 | } |
570 | 615 | ||
616 | /// <summary> | ||
617 | /// | ||
618 | /// </summary> | ||
571 | public void Commit() | 619 | public void Commit() |
572 | { | 620 | { |
573 | lock (ds) | 621 | lock (ds) |
@@ -587,6 +635,9 @@ namespace OpenSim.Data.SQLite | |||
587 | } | 635 | } |
588 | } | 636 | } |
589 | 637 | ||
638 | /// <summary> | ||
639 | /// See <see cref="Commit"/> | ||
640 | /// </summary> | ||
590 | public void Shutdown() | 641 | public void Shutdown() |
591 | { | 642 | { |
592 | Commit(); | 643 | Commit(); |
@@ -600,12 +651,22 @@ namespace OpenSim.Data.SQLite | |||
600 | * | 651 | * |
601 | **********************************************************************/ | 652 | **********************************************************************/ |
602 | 653 | ||
654 | /// <summary> | ||
655 | /// | ||
656 | /// </summary> | ||
657 | /// <param name="dt"></param> | ||
658 | /// <param name="name"></param> | ||
659 | /// <param name="type"></param> | ||
603 | private static void createCol(DataTable dt, string name, Type type) | 660 | private static void createCol(DataTable dt, string name, Type type) |
604 | { | 661 | { |
605 | DataColumn col = new DataColumn(name, type); | 662 | DataColumn col = new DataColumn(name, type); |
606 | dt.Columns.Add(col); | 663 | dt.Columns.Add(col); |
607 | } | 664 | } |
608 | 665 | ||
666 | /// <summary> | ||
667 | /// Creates the "terrain" table | ||
668 | /// </summary> | ||
669 | /// <returns>terrain table DataTable</returns> | ||
609 | private static DataTable createTerrainTable() | 670 | private static DataTable createTerrainTable() |
610 | { | 671 | { |
611 | DataTable terrain = new DataTable("terrain"); | 672 | DataTable terrain = new DataTable("terrain"); |
@@ -617,6 +678,10 @@ namespace OpenSim.Data.SQLite | |||
617 | return terrain; | 678 | return terrain; |
618 | } | 679 | } |
619 | 680 | ||
681 | /// <summary> | ||
682 | /// Creates the "prims" table | ||
683 | /// </summary> | ||
684 | /// <returns>prim table DataTable</returns> | ||
620 | private static DataTable createPrimTable() | 685 | private static DataTable createPrimTable() |
621 | { | 686 | { |
622 | DataTable prims = new DataTable("prims"); | 687 | DataTable prims = new DataTable("prims"); |
@@ -681,6 +746,10 @@ namespace OpenSim.Data.SQLite | |||
681 | return prims; | 746 | return prims; |
682 | } | 747 | } |
683 | 748 | ||
749 | /// <summary> | ||
750 | /// Creates "primshapes" table | ||
751 | /// </summary> | ||
752 | /// <returns>shape table DataTable</returns> | ||
684 | private static DataTable createShapeTable() | 753 | private static DataTable createShapeTable() |
685 | { | 754 | { |
686 | DataTable shapes = new DataTable("primshapes"); | 755 | DataTable shapes = new DataTable("primshapes"); |
@@ -723,6 +792,10 @@ namespace OpenSim.Data.SQLite | |||
723 | return shapes; | 792 | return shapes; |
724 | } | 793 | } |
725 | 794 | ||
795 | /// <summary> | ||
796 | /// creates "primitems" table | ||
797 | /// </summary> | ||
798 | /// <returns>item table DataTable</returns> | ||
726 | private static DataTable createItemsTable() | 799 | private static DataTable createItemsTable() |
727 | { | 800 | { |
728 | DataTable items = new DataTable("primitems"); | 801 | DataTable items = new DataTable("primitems"); |
@@ -756,6 +829,10 @@ namespace OpenSim.Data.SQLite | |||
756 | return items; | 829 | return items; |
757 | } | 830 | } |
758 | 831 | ||
832 | /// <summary> | ||
833 | /// Creates "land" table | ||
834 | /// </summary> | ||
835 | /// <returns>land table DataTable</returns> | ||
759 | private static DataTable createLandTable() | 836 | private static DataTable createLandTable() |
760 | { | 837 | { |
761 | DataTable land = new DataTable("land"); | 838 | DataTable land = new DataTable("land"); |
@@ -800,6 +877,10 @@ namespace OpenSim.Data.SQLite | |||
800 | return land; | 877 | return land; |
801 | } | 878 | } |
802 | 879 | ||
880 | /// <summary> | ||
881 | /// create "landaccesslist" table | ||
882 | /// </summary> | ||
883 | /// <returns>Landacceslist DataTable</returns> | ||
803 | private static DataTable createLandAccessListTable() | 884 | private static DataTable createLandAccessListTable() |
804 | { | 885 | { |
805 | DataTable landaccess = new DataTable("landaccesslist"); | 886 | DataTable landaccess = new DataTable("landaccesslist"); |
@@ -810,6 +891,10 @@ namespace OpenSim.Data.SQLite | |||
810 | return landaccess; | 891 | return landaccess; |
811 | } | 892 | } |
812 | 893 | ||
894 | /// <summary> | ||
895 | /// create "regionban" table | ||
896 | /// </summary> | ||
897 | /// <returns>regionban datatable</returns> | ||
813 | private static DataTable createRegionBanListTable() | 898 | private static DataTable createRegionBanListTable() |
814 | { | 899 | { |
815 | DataTable regionbanlist = new DataTable("regionban"); | 900 | DataTable regionbanlist = new DataTable("regionban"); |
@@ -829,6 +914,11 @@ namespace OpenSim.Data.SQLite | |||
829 | * | 914 | * |
830 | **********************************************************************/ | 915 | **********************************************************************/ |
831 | 916 | ||
917 | /// <summary> | ||
918 | /// | ||
919 | /// </summary> | ||
920 | /// <param name="row"></param> | ||
921 | /// <returns></returns> | ||
832 | private SceneObjectPart buildPrim(DataRow row) | 922 | private SceneObjectPart buildPrim(DataRow row) |
833 | { | 923 | { |
834 | // TODO: this doesn't work yet because something more | 924 | // TODO: this doesn't work yet because something more |
@@ -971,6 +1061,11 @@ namespace OpenSim.Data.SQLite | |||
971 | return taskItem; | 1061 | return taskItem; |
972 | } | 1062 | } |
973 | 1063 | ||
1064 | /// <summary> | ||
1065 | /// Build a Land Data from the persisted data. | ||
1066 | /// </summary> | ||
1067 | /// <param name="row"></param> | ||
1068 | /// <returns></returns> | ||
974 | private LandData buildLandData(DataRow row) | 1069 | private LandData buildLandData(DataRow row) |
975 | { | 1070 | { |
976 | LandData newData = new LandData(); | 1071 | LandData newData = new LandData(); |
@@ -1059,6 +1154,11 @@ namespace OpenSim.Data.SQLite | |||
1059 | return newData; | 1154 | return newData; |
1060 | } | 1155 | } |
1061 | 1156 | ||
1157 | /// <summary> | ||
1158 | /// Build a land access entry from the persisted data. | ||
1159 | /// </summary> | ||
1160 | /// <param name="row"></param> | ||
1161 | /// <returns></returns> | ||
1062 | private static ParcelManager.ParcelAccessEntry buildLandAccessData(DataRow row) | 1162 | private static ParcelManager.ParcelAccessEntry buildLandAccessData(DataRow row) |
1063 | { | 1163 | { |
1064 | ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); | 1164 | ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); |
@@ -1069,7 +1169,11 @@ namespace OpenSim.Data.SQLite | |||
1069 | } | 1169 | } |
1070 | 1170 | ||
1071 | 1171 | ||
1072 | 1172 | /// <summary> | |
1173 | /// Load a region banlist | ||
1174 | /// </summary> | ||
1175 | /// <param name="regionUUID">the region UUID</param> | ||
1176 | /// <returns>The banlist</returns> | ||
1073 | public List<RegionBanListItem> LoadRegionBanList(LLUUID regionUUID) | 1177 | public List<RegionBanListItem> LoadRegionBanList(LLUUID regionUUID) |
1074 | { | 1178 | { |
1075 | List<RegionBanListItem> regionbanlist = new List<RegionBanListItem>(); | 1179 | List<RegionBanListItem> regionbanlist = new List<RegionBanListItem>(); |
@@ -1096,6 +1200,10 @@ namespace OpenSim.Data.SQLite | |||
1096 | return regionbanlist; | 1200 | return regionbanlist; |
1097 | } | 1201 | } |
1098 | 1202 | ||
1203 | /// <summary> | ||
1204 | /// Add en entry into region banlist | ||
1205 | /// </summary> | ||
1206 | /// <param name="item"></param> | ||
1099 | public void AddToRegionBanlist(RegionBanListItem item) | 1207 | public void AddToRegionBanlist(RegionBanListItem item) |
1100 | { | 1208 | { |
1101 | lock (ds) | 1209 | lock (ds) |
@@ -1111,6 +1219,10 @@ namespace OpenSim.Data.SQLite | |||
1111 | } | 1219 | } |
1112 | } | 1220 | } |
1113 | 1221 | ||
1222 | /// <summary> | ||
1223 | /// remove an entry from the region banlist | ||
1224 | /// </summary> | ||
1225 | /// <param name="item"></param> | ||
1114 | public void RemoveFromRegionBanlist(RegionBanListItem item) | 1226 | public void RemoveFromRegionBanlist(RegionBanListItem item) |
1115 | { | 1227 | { |
1116 | lock (ds) | 1228 | lock (ds) |
@@ -1124,6 +1236,11 @@ namespace OpenSim.Data.SQLite | |||
1124 | } | 1236 | } |
1125 | } | 1237 | } |
1126 | 1238 | ||
1239 | /// <summary> | ||
1240 | /// | ||
1241 | /// </summary> | ||
1242 | /// <param name="val"></param> | ||
1243 | /// <returns></returns> | ||
1127 | private static Array serializeTerrain(double[,] val) | 1244 | private static Array serializeTerrain(double[,] val) |
1128 | { | 1245 | { |
1129 | MemoryStream str = new MemoryStream(65536*sizeof (double)); | 1246 | MemoryStream str = new MemoryStream(65536*sizeof (double)); |
@@ -1153,6 +1270,13 @@ namespace OpenSim.Data.SQLite | |||
1153 | // row["Heightfield"] = str.ToArray(); | 1270 | // row["Heightfield"] = str.ToArray(); |
1154 | // } | 1271 | // } |
1155 | 1272 | ||
1273 | /// <summary> | ||
1274 | /// | ||
1275 | /// </summary> | ||
1276 | /// <param name="row"></param> | ||
1277 | /// <param name="prim"></param> | ||
1278 | /// <param name="sceneGroupID"></param> | ||
1279 | /// <param name="regionUUID"></param> | ||
1156 | private static void fillPrimRow(DataRow row, SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) | 1280 | private static void fillPrimRow(DataRow row, SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) |
1157 | { | 1281 | { |
1158 | row["UUID"] = Util.ToRawUuidString(prim.UUID); | 1282 | row["UUID"] = Util.ToRawUuidString(prim.UUID); |
@@ -1213,6 +1337,11 @@ namespace OpenSim.Data.SQLite | |||
1213 | row["SitTargetOrientZ"] = sitTargetOrient.Z; | 1337 | row["SitTargetOrientZ"] = sitTargetOrient.Z; |
1214 | } | 1338 | } |
1215 | 1339 | ||
1340 | /// <summary> | ||
1341 | /// | ||
1342 | /// </summary> | ||
1343 | /// <param name="row"></param> | ||
1344 | /// <param name="taskItem"></param> | ||
1216 | private static void fillItemRow(DataRow row, TaskInventoryItem taskItem) | 1345 | private static void fillItemRow(DataRow row, TaskInventoryItem taskItem) |
1217 | { | 1346 | { |
1218 | row["itemID"] = taskItem.ItemID; | 1347 | row["itemID"] = taskItem.ItemID; |
@@ -1238,6 +1367,12 @@ namespace OpenSim.Data.SQLite | |||
1238 | row["flags"] = taskItem.Flags; | 1367 | row["flags"] = taskItem.Flags; |
1239 | } | 1368 | } |
1240 | 1369 | ||
1370 | /// <summary> | ||
1371 | /// | ||
1372 | /// </summary> | ||
1373 | /// <param name="row"></param> | ||
1374 | /// <param name="land"></param> | ||
1375 | /// <param name="regionUUID"></param> | ||
1241 | private static void fillLandRow(DataRow row, LandData land, LLUUID regionUUID) | 1376 | private static void fillLandRow(DataRow row, LandData land, LLUUID regionUUID) |
1242 | { | 1377 | { |
1243 | row["UUID"] = Util.ToRawUuidString(land.globalID); | 1378 | row["UUID"] = Util.ToRawUuidString(land.globalID); |
@@ -1277,6 +1412,12 @@ namespace OpenSim.Data.SQLite | |||
1277 | row["AuthbuyerID"] = Util.ToRawUuidString(land.authBuyerID); | 1412 | row["AuthbuyerID"] = Util.ToRawUuidString(land.authBuyerID); |
1278 | } | 1413 | } |
1279 | 1414 | ||
1415 | /// <summary> | ||
1416 | /// | ||
1417 | /// </summary> | ||
1418 | /// <param name="row"></param> | ||
1419 | /// <param name="entry"></param> | ||
1420 | /// <param name="parcelID"></param> | ||
1280 | private static void fillLandAccessRow(DataRow row, ParcelManager.ParcelAccessEntry entry, LLUUID parcelID) | 1421 | private static void fillLandAccessRow(DataRow row, ParcelManager.ParcelAccessEntry entry, LLUUID parcelID) |
1281 | { | 1422 | { |
1282 | row["LandUUID"] = Util.ToRawUuidString(parcelID); | 1423 | row["LandUUID"] = Util.ToRawUuidString(parcelID); |
@@ -1284,6 +1425,11 @@ namespace OpenSim.Data.SQLite | |||
1284 | row["Flags"] = entry.Flags; | 1425 | row["Flags"] = entry.Flags; |
1285 | } | 1426 | } |
1286 | 1427 | ||
1428 | /// <summary> | ||
1429 | /// | ||
1430 | /// </summary> | ||
1431 | /// <param name="row"></param> | ||
1432 | /// <returns></returns> | ||
1287 | private PrimitiveBaseShape buildShape(DataRow row) | 1433 | private PrimitiveBaseShape buildShape(DataRow row) |
1288 | { | 1434 | { |
1289 | PrimitiveBaseShape s = new PrimitiveBaseShape(); | 1435 | PrimitiveBaseShape s = new PrimitiveBaseShape(); |
@@ -1334,6 +1480,11 @@ namespace OpenSim.Data.SQLite | |||
1334 | return s; | 1480 | return s; |
1335 | } | 1481 | } |
1336 | 1482 | ||
1483 | /// <summary> | ||
1484 | /// | ||
1485 | /// </summary> | ||
1486 | /// <param name="row"></param> | ||
1487 | /// <param name="prim"></param> | ||
1337 | private static void fillShapeRow(DataRow row, SceneObjectPart prim) | 1488 | private static void fillShapeRow(DataRow row, SceneObjectPart prim) |
1338 | { | 1489 | { |
1339 | PrimitiveBaseShape s = prim.Shape; | 1490 | PrimitiveBaseShape s = prim.Shape; |
@@ -1371,6 +1522,12 @@ namespace OpenSim.Data.SQLite | |||
1371 | row["ExtraParams"] = s.ExtraParams; | 1522 | row["ExtraParams"] = s.ExtraParams; |
1372 | } | 1523 | } |
1373 | 1524 | ||
1525 | /// <summary> | ||
1526 | /// | ||
1527 | /// </summary> | ||
1528 | /// <param name="prim"></param> | ||
1529 | /// <param name="sceneGroupID"></param> | ||
1530 | /// <param name="regionUUID"></param> | ||
1374 | private void addPrim(SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) | 1531 | private void addPrim(SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) |
1375 | { | 1532 | { |
1376 | DataTable prims = ds.Tables["prims"]; | 1533 | DataTable prims = ds.Tables["prims"]; |
@@ -1401,7 +1558,11 @@ namespace OpenSim.Data.SQLite | |||
1401 | } | 1558 | } |
1402 | } | 1559 | } |
1403 | 1560 | ||
1404 | // see IRegionDatastore | 1561 | /// <summary> |
1562 | /// see IRegionDatastore | ||
1563 | /// </summary> | ||
1564 | /// <param name="primID"></param> | ||
1565 | /// <param name="items"></param> | ||
1405 | public void StorePrimInventory(LLUUID primID, ICollection<TaskInventoryItem> items) | 1566 | public void StorePrimInventory(LLUUID primID, ICollection<TaskInventoryItem> items) |
1406 | { | 1567 | { |
1407 | if (!persistPrimInventories) | 1568 | if (!persistPrimInventories) |
@@ -1444,17 +1605,23 @@ namespace OpenSim.Data.SQLite | |||
1444 | * | 1605 | * |
1445 | **********************************************************************/ | 1606 | **********************************************************************/ |
1446 | 1607 | ||
1608 | /// <summary> | ||
1609 | /// Create an insert command | ||
1610 | /// </summary> | ||
1611 | /// <param name="table">table name</param> | ||
1612 | /// <param name="dt">data table</param> | ||
1613 | /// <returns>the created command</returns> | ||
1614 | /// <remarks> | ||
1615 | /// This is subtle enough to deserve some commentary. | ||
1616 | /// Instead of doing *lots* and *lots of hardcoded strings | ||
1617 | /// for database definitions we'll use the fact that | ||
1618 | /// realistically all insert statements look like "insert | ||
1619 | /// into A(b, c) values(:b, :c) on the parameterized query | ||
1620 | /// front. If we just have a list of b, c, etc... we can | ||
1621 | /// generate these strings instead of typing them out. | ||
1622 | /// </remarks> | ||
1447 | private static SqliteCommand createInsertCommand(string table, DataTable dt) | 1623 | private static SqliteCommand createInsertCommand(string table, DataTable dt) |
1448 | { | 1624 | { |
1449 | /** | ||
1450 | * This is subtle enough to deserve some commentary. | ||
1451 | * Instead of doing *lots* and *lots of hardcoded strings | ||
1452 | * for database definitions we'll use the fact that | ||
1453 | * realistically all insert statements look like "insert | ||
1454 | * into A(b, c) values(:b, :c) on the parameterized query | ||
1455 | * front. If we just have a list of b, c, etc... we can | ||
1456 | * generate these strings instead of typing them out. | ||
1457 | */ | ||
1458 | string[] cols = new string[dt.Columns.Count]; | 1625 | string[] cols = new string[dt.Columns.Count]; |
1459 | for (int i = 0; i < dt.Columns.Count; i++) | 1626 | for (int i = 0; i < dt.Columns.Count; i++) |
1460 | { | 1627 | { |
@@ -1479,6 +1646,14 @@ namespace OpenSim.Data.SQLite | |||
1479 | return cmd; | 1646 | return cmd; |
1480 | } | 1647 | } |
1481 | 1648 | ||
1649 | |||
1650 | /// <summary> | ||
1651 | /// create an update command | ||
1652 | /// </summary> | ||
1653 | /// <param name="table">table name</param> | ||
1654 | /// <param name="pk"></param> | ||
1655 | /// <param name="dt"></param> | ||
1656 | /// <returns>the created command</returns> | ||
1482 | private static SqliteCommand createUpdateCommand(string table, string pk, DataTable dt) | 1657 | private static SqliteCommand createUpdateCommand(string table, string pk, DataTable dt) |
1483 | { | 1658 | { |
1484 | string sql = "update " + table + " set "; | 1659 | string sql = "update " + table + " set "; |
@@ -1506,7 +1681,11 @@ namespace OpenSim.Data.SQLite | |||
1506 | return cmd; | 1681 | return cmd; |
1507 | } | 1682 | } |
1508 | 1683 | ||
1509 | 1684 | /// <summary> | |
1685 | /// | ||
1686 | /// </summary> | ||
1687 | /// <param name="dt">Data Table</param> | ||
1688 | /// <returns></returns> | ||
1510 | private static string defineTable(DataTable dt) | 1689 | private static string defineTable(DataTable dt) |
1511 | { | 1690 | { |
1512 | string sql = "create table " + dt.TableName + "("; | 1691 | string sql = "create table " + dt.TableName + "("; |
@@ -1559,6 +1738,11 @@ namespace OpenSim.Data.SQLite | |||
1559 | return param; | 1738 | return param; |
1560 | } | 1739 | } |
1561 | 1740 | ||
1741 | /// <summary> | ||
1742 | /// | ||
1743 | /// </summary> | ||
1744 | /// <param name="da"></param> | ||
1745 | /// <param name="conn"></param> | ||
1562 | private void setupPrimCommands(SqliteDataAdapter da, SqliteConnection conn) | 1746 | private void setupPrimCommands(SqliteDataAdapter da, SqliteConnection conn) |
1563 | { | 1747 | { |
1564 | da.InsertCommand = createInsertCommand("prims", ds.Tables["prims"]); | 1748 | da.InsertCommand = createInsertCommand("prims", ds.Tables["prims"]); |
@@ -1573,6 +1757,11 @@ namespace OpenSim.Data.SQLite | |||
1573 | da.DeleteCommand = delete; | 1757 | da.DeleteCommand = delete; |
1574 | } | 1758 | } |
1575 | 1759 | ||
1760 | /// <summary> | ||
1761 | /// | ||
1762 | /// </summary> | ||
1763 | /// <param name="da"></param> | ||
1764 | /// <param name="conn"></param> | ||
1576 | private void setupItemsCommands(SqliteDataAdapter da, SqliteConnection conn) | 1765 | private void setupItemsCommands(SqliteDataAdapter da, SqliteConnection conn) |
1577 | { | 1766 | { |
1578 | da.InsertCommand = createInsertCommand("primitems", ds.Tables["primitems"]); | 1767 | da.InsertCommand = createInsertCommand("primitems", ds.Tables["primitems"]); |
@@ -1587,12 +1776,22 @@ namespace OpenSim.Data.SQLite | |||
1587 | da.DeleteCommand = delete; | 1776 | da.DeleteCommand = delete; |
1588 | } | 1777 | } |
1589 | 1778 | ||
1779 | /// <summary> | ||
1780 | /// | ||
1781 | /// </summary> | ||
1782 | /// <param name="da"></param> | ||
1783 | /// <param name="conn"></param> | ||
1590 | private void setupTerrainCommands(SqliteDataAdapter da, SqliteConnection conn) | 1784 | private void setupTerrainCommands(SqliteDataAdapter da, SqliteConnection conn) |
1591 | { | 1785 | { |
1592 | da.InsertCommand = createInsertCommand("terrain", ds.Tables["terrain"]); | 1786 | da.InsertCommand = createInsertCommand("terrain", ds.Tables["terrain"]); |
1593 | da.InsertCommand.Connection = conn; | 1787 | da.InsertCommand.Connection = conn; |
1594 | } | 1788 | } |
1595 | 1789 | ||
1790 | /// <summary> | ||
1791 | /// | ||
1792 | /// </summary> | ||
1793 | /// <param name="da"></param> | ||
1794 | /// <param name="conn"></param> | ||
1596 | private void setupLandCommands(SqliteDataAdapter da, SqliteConnection conn) | 1795 | private void setupLandCommands(SqliteDataAdapter da, SqliteConnection conn) |
1597 | { | 1796 | { |
1598 | da.InsertCommand = createInsertCommand("land", ds.Tables["land"]); | 1797 | da.InsertCommand = createInsertCommand("land", ds.Tables["land"]); |
@@ -1602,12 +1801,22 @@ namespace OpenSim.Data.SQLite | |||
1602 | da.UpdateCommand.Connection = conn; | 1801 | da.UpdateCommand.Connection = conn; |
1603 | } | 1802 | } |
1604 | 1803 | ||
1804 | /// <summary> | ||
1805 | /// | ||
1806 | /// </summary> | ||
1807 | /// <param name="da"></param> | ||
1808 | /// <param name="conn"></param> | ||
1605 | private void setupLandAccessCommands(SqliteDataAdapter da, SqliteConnection conn) | 1809 | private void setupLandAccessCommands(SqliteDataAdapter da, SqliteConnection conn) |
1606 | { | 1810 | { |
1607 | da.InsertCommand = createInsertCommand("landaccesslist", ds.Tables["landaccesslist"]); | 1811 | da.InsertCommand = createInsertCommand("landaccesslist", ds.Tables["landaccesslist"]); |
1608 | da.InsertCommand.Connection = conn; | 1812 | da.InsertCommand.Connection = conn; |
1609 | } | 1813 | } |
1610 | 1814 | ||
1815 | /// <summary> | ||
1816 | /// | ||
1817 | /// </summary> | ||
1818 | /// <param name="da"></param> | ||
1819 | /// <param name="conn"></param> | ||
1611 | private void setupRegionBanCommands(SqliteDataAdapter da, SqliteConnection conn) | 1820 | private void setupRegionBanCommands(SqliteDataAdapter da, SqliteConnection conn) |
1612 | { | 1821 | { |
1613 | da.InsertCommand = createInsertCommand("regionban", ds.Tables["regionban"]); | 1822 | da.InsertCommand = createInsertCommand("regionban", ds.Tables["regionban"]); |
@@ -1617,7 +1826,11 @@ namespace OpenSim.Data.SQLite | |||
1617 | da.UpdateCommand.Connection = conn; | 1826 | da.UpdateCommand.Connection = conn; |
1618 | } | 1827 | } |
1619 | 1828 | ||
1620 | 1829 | /// <summary> | |
1830 | /// | ||
1831 | /// </summary> | ||
1832 | /// <param name="da"></param> | ||
1833 | /// <param name="conn"></param> | ||
1621 | private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn) | 1834 | private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn) |
1622 | { | 1835 | { |
1623 | da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]); | 1836 | da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]); |
@@ -1710,6 +1923,12 @@ namespace OpenSim.Data.SQLite | |||
1710 | // } | 1923 | // } |
1711 | // } | 1924 | // } |
1712 | 1925 | ||
1926 | /// <summary> | ||
1927 | /// | ||
1928 | /// </summary> | ||
1929 | /// <param name="conn"></param> | ||
1930 | /// <param name="m"></param> | ||
1931 | /// <returns></returns> | ||
1713 | private bool TestTables(SqliteConnection conn, Migration m) | 1932 | private bool TestTables(SqliteConnection conn, Migration m) |
1714 | { | 1933 | { |
1715 | SqliteCommand primSelectCmd = new SqliteCommand(primSelect, conn); | 1934 | SqliteCommand primSelectCmd = new SqliteCommand(primSelect, conn); |
@@ -1822,6 +2041,11 @@ namespace OpenSim.Data.SQLite | |||
1822 | * | 2041 | * |
1823 | **********************************************************************/ | 2042 | **********************************************************************/ |
1824 | 2043 | ||
2044 | /// <summary> | ||
2045 | /// Type conversion function | ||
2046 | /// </summary> | ||
2047 | /// <param name="type"></param> | ||
2048 | /// <returns></returns> | ||
1825 | private static DbType dbtypeFromType(Type type) | 2049 | private static DbType dbtypeFromType(Type type) |
1826 | { | 2050 | { |
1827 | if (type == typeof (String)) | 2051 | if (type == typeof (String)) |
@@ -1854,8 +2078,11 @@ namespace OpenSim.Data.SQLite | |||
1854 | } | 2078 | } |
1855 | } | 2079 | } |
1856 | 2080 | ||
1857 | // this is something we'll need to implement for each db | 2081 | /// <summary> |
1858 | // slightly differently. | 2082 | /// </summary> |
2083 | /// <param name="type">a Type</param> | ||
2084 | /// <returns>an sqliteType</returns> | ||
2085 | /// <remarks>this is something we'll need to implement for each db slightly differently.</remarks> | ||
1859 | private static string sqliteType(Type type) | 2086 | private static string sqliteType(Type type) |
1860 | { | 2087 | { |
1861 | if (type == typeof (String)) | 2088 | 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 | |||
65 | private SqliteDataAdapter daf; | 65 | private SqliteDataAdapter daf; |
66 | SqliteConnection g_conn; | 66 | SqliteConnection g_conn; |
67 | 67 | ||
68 | /// <summary> | ||
69 | /// <list type="bullet"> | ||
70 | /// <item>Initialises User Interface</item> | ||
71 | /// <item>Loads and initialises a new SQLite connection and maintains it.</item> | ||
72 | /// <item>use default URI if connect string string is empty.</item> | ||
73 | /// </list> | ||
74 | /// </summary> | ||
75 | /// <param name="connect">connect string</param> | ||
68 | override public void Initialise(string connect) | 76 | override public void Initialise(string connect) |
69 | { | 77 | { |
70 | // default to something sensible | 78 | // default to something sensible |
@@ -116,7 +124,12 @@ namespace OpenSim.Data.SQLite | |||
116 | return; | 124 | return; |
117 | } | 125 | } |
118 | 126 | ||
119 | // see IUserData | 127 | /// <summary> |
128 | /// see IUserData, | ||
129 | /// Get user data profile by UUID | ||
130 | /// </summary> | ||
131 | /// <param name="uuid">User UUID</param> | ||
132 | /// <returns>user profile data</returns> | ||
120 | override public UserProfileData GetUserByUUID(LLUUID uuid) | 133 | override public UserProfileData GetUserByUUID(LLUUID uuid) |
121 | { | 134 | { |
122 | lock (ds) | 135 | lock (ds) |
@@ -139,7 +152,13 @@ namespace OpenSim.Data.SQLite | |||
139 | } | 152 | } |
140 | } | 153 | } |
141 | 154 | ||
142 | // see IUserData | 155 | /// <summary> |
156 | /// see IUserData, | ||
157 | /// Get user data profile by name | ||
158 | /// </summary> | ||
159 | /// <param name="fname">first name</param> | ||
160 | /// <param name="lname">last name</param> | ||
161 | /// <returns>user profile data</returns> | ||
143 | override public UserProfileData GetUserByName(string fname, string lname) | 162 | override public UserProfileData GetUserByName(string fname, string lname) |
144 | { | 163 | { |
145 | string select = "surname = '" + lname + "' and username = '" + fname + "'"; | 164 | string select = "surname = '" + lname + "' and username = '" + fname + "'"; |
@@ -165,6 +184,12 @@ namespace OpenSim.Data.SQLite | |||
165 | 184 | ||
166 | #region User Friends List Data | 185 | #region User Friends List Data |
167 | 186 | ||
187 | /// <summary> | ||
188 | /// Add a new friend in the friendlist | ||
189 | /// </summary> | ||
190 | /// <param name="friendlistowner">UUID of the friendlist owner</param> | ||
191 | /// <param name="friend">UUID of the friend to add</param> | ||
192 | /// <param name="perms">permission flag</param> | ||
168 | override public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) | 193 | override public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) |
169 | { | 194 | { |
170 | string InsertFriends = "insert into userfriends(ownerID, friendID, friendPerms) values(:ownerID, :friendID, :perms)"; | 195 | string InsertFriends = "insert into userfriends(ownerID, friendID, friendPerms) values(:ownerID, :friendID, :perms)"; |
@@ -185,6 +210,11 @@ namespace OpenSim.Data.SQLite | |||
185 | } | 210 | } |
186 | } | 211 | } |
187 | 212 | ||
213 | /// <summary> | ||
214 | /// Remove a user from the friendlist | ||
215 | /// </summary> | ||
216 | /// <param name="friendlistowner">UUID of the friendlist owner</param> | ||
217 | /// <param name="friend">UUID of the friend to remove</param> | ||
188 | override public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) | 218 | override public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) |
189 | { | 219 | { |
190 | string DeletePerms = "delete from friendlist where (ownerID=:ownerID and friendID=:friendID) or (ownerID=:friendID and friendID=:ownerID)"; | 220 | 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 | |||
196 | } | 226 | } |
197 | } | 227 | } |
198 | 228 | ||
229 | /// <summary> | ||
230 | /// Update the friendlist permission | ||
231 | /// </summary> | ||
232 | /// <param name="friendlistowner">UUID of the friendlist owner</param> | ||
233 | /// <param name="friend">UUID of the friend to modify</param> | ||
234 | /// <param name="perms">updated permission flag</param> | ||
199 | override public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) | 235 | override public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) |
200 | { | 236 | { |
201 | string UpdatePerms = "update friendlist set perms=:perms where ownerID=:ownerID and friendID=:friendID"; | 237 | string UpdatePerms = "update friendlist set perms=:perms where ownerID=:ownerID and friendID=:friendID"; |
@@ -208,6 +244,11 @@ namespace OpenSim.Data.SQLite | |||
208 | } | 244 | } |
209 | } | 245 | } |
210 | 246 | ||
247 | /// <summary> | ||
248 | /// Get (fetch?) the friendlist for a user | ||
249 | /// </summary> | ||
250 | /// <param name="friendlistowner">UUID of the friendlist owner</param> | ||
251 | /// <returns>The friendlist list</returns> | ||
211 | override public List<FriendListItem> GetUserFriendList(LLUUID friendlistowner) | 252 | override public List<FriendListItem> GetUserFriendList(LLUUID friendlistowner) |
212 | { | 253 | { |
213 | List<FriendListItem> returnlist = new List<FriendListItem>(); | 254 | List<FriendListItem> returnlist = new List<FriendListItem>(); |
@@ -246,12 +287,24 @@ namespace OpenSim.Data.SQLite | |||
246 | 287 | ||
247 | #endregion | 288 | #endregion |
248 | 289 | ||
290 | /// <summary> | ||
291 | /// STUB, Update the user's current region | ||
292 | /// </summary> | ||
293 | /// <param name="avatarid">UUID of the user</param> | ||
294 | /// <param name="regionuuid">UUID of the region</param> | ||
295 | /// <param name="regionhandle">region handle</param> | ||
296 | /// <remarks>DO NOTHING</remarks> | ||
249 | override public void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle) | 297 | override public void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle) |
250 | { | 298 | { |
251 | //m_log.Info("[USER DB]: Stub UpdateUserCUrrentRegion called"); | 299 | //m_log.Info("[USER DB]: Stub UpdateUserCUrrentRegion called"); |
252 | } | 300 | } |
253 | 301 | ||
254 | 302 | /// <summary> | |
303 | /// | ||
304 | /// </summary> | ||
305 | /// <param name="queryID"></param> | ||
306 | /// <param name="query"></param> | ||
307 | /// <returns></returns> | ||
255 | override public List<AvatarPickerAvatar> GeneratePickerResults(LLUUID queryID, string query) | 308 | override public List<AvatarPickerAvatar> GeneratePickerResults(LLUUID queryID, string query) |
256 | { | 309 | { |
257 | List<AvatarPickerAvatar> returnlist = new List<AvatarPickerAvatar>(); | 310 | List<AvatarPickerAvatar> returnlist = new List<AvatarPickerAvatar>(); |
@@ -347,7 +400,11 @@ namespace OpenSim.Data.SQLite | |||
347 | } | 400 | } |
348 | } | 401 | } |
349 | 402 | ||
350 | 403 | /// <summary> | |
404 | /// DEPRECATED? Store the weblogin key | ||
405 | /// </summary> | ||
406 | /// <param name="AgentID">UUID of the user</param> | ||
407 | /// <param name="WebLoginKey">UUID of the weblogin</param> | ||
351 | override public void StoreWebLoginKey(LLUUID AgentID, LLUUID WebLoginKey) | 408 | override public void StoreWebLoginKey(LLUUID AgentID, LLUUID WebLoginKey) |
352 | { | 409 | { |
353 | DataTable users = ds.Tables["users"]; | 410 | DataTable users = ds.Tables["users"]; |
@@ -487,8 +544,13 @@ namespace OpenSim.Data.SQLite | |||
487 | return true; | 544 | return true; |
488 | } | 545 | } |
489 | 546 | ||
490 | /// Appearance | 547 | |
548 | /// <summary> | ||
549 | /// Appearance. | ||
491 | /// TODO: stubs for now to do in memory appearance. | 550 | /// TODO: stubs for now to do in memory appearance. |
551 | /// </summary> | ||
552 | /// <param name="user">The user UUID</param> | ||
553 | /// <returns>Avatar Appearence</returns> | ||
492 | override public AvatarAppearance GetUserAppearance(LLUUID user) | 554 | override public AvatarAppearance GetUserAppearance(LLUUID user) |
493 | { | 555 | { |
494 | AvatarAppearance aa = null; | 556 | AvatarAppearance aa = null; |
@@ -501,22 +563,45 @@ namespace OpenSim.Data.SQLite | |||
501 | return aa; | 563 | return aa; |
502 | } | 564 | } |
503 | 565 | ||
566 | /// <summary> | ||
567 | /// Update a user appearence | ||
568 | /// </summary> | ||
569 | /// <param name="user">the user UUID</param> | ||
570 | /// <param name="appearance">appearence</param> | ||
504 | override public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) | 571 | override public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) |
505 | { | 572 | { |
506 | appearance.Owner = user; | 573 | appearance.Owner = user; |
507 | aplist[user] = appearance; | 574 | aplist[user] = appearance; |
508 | } | 575 | } |
509 | 576 | ||
577 | /// <summary> | ||
578 | /// Add an attachment item to an avatar | ||
579 | /// </summary> | ||
580 | /// <param name="user">the user UUID</param> | ||
581 | /// <param name="item">the item UUID</param> | ||
582 | /// <remarks>DO NOTHING ?</remarks> | ||
510 | override public void AddAttachment(LLUUID user, LLUUID item) | 583 | override public void AddAttachment(LLUUID user, LLUUID item) |
511 | { | 584 | { |
512 | return; | 585 | return; |
513 | } | 586 | } |
514 | 587 | ||
588 | /// <summary> | ||
589 | /// Remove an attachement item from an avatar | ||
590 | /// </summary> | ||
591 | /// <param name="user">the user UUID</param> | ||
592 | /// <param name="item">the item UUID</param> | ||
593 | /// <remarks>DO NOTHING ?</remarks> | ||
515 | override public void RemoveAttachment(LLUUID user, LLUUID item) | 594 | override public void RemoveAttachment(LLUUID user, LLUUID item) |
516 | { | 595 | { |
517 | return; | 596 | return; |
518 | } | 597 | } |
519 | 598 | ||
599 | /// <summary> | ||
600 | /// Get list of attached item | ||
601 | /// </summary> | ||
602 | /// <param name="user">the user UUID</param> | ||
603 | /// <returns>List of attached item</returns> | ||
604 | /// <remarks>DO NOTHING ?</remarks> | ||
520 | override public List<LLUUID> GetAttachments(LLUUID user) | 605 | override public List<LLUUID> GetAttachments(LLUUID user) |
521 | { | 606 | { |
522 | return new List<LLUUID>(); | 607 | return new List<LLUUID>(); |
@@ -553,6 +638,10 @@ namespace OpenSim.Data.SQLite | |||
553 | * | 638 | * |
554 | **********************************************************************/ | 639 | **********************************************************************/ |
555 | 640 | ||
641 | /// <summary> | ||
642 | /// Create the "users" table | ||
643 | /// </summary> | ||
644 | /// <returns>DataTable</returns> | ||
556 | private static DataTable createUsersTable() | 645 | private static DataTable createUsersTable() |
557 | { | 646 | { |
558 | DataTable users = new DataTable("users"); | 647 | DataTable users = new DataTable("users"); |
@@ -588,6 +677,10 @@ namespace OpenSim.Data.SQLite | |||
588 | return users; | 677 | return users; |
589 | } | 678 | } |
590 | 679 | ||
680 | /// <summary> | ||
681 | /// Create the "useragents" table | ||
682 | /// </summary> | ||
683 | /// <returns>Data Table</returns> | ||
591 | private static DataTable createUserAgentsTable() | 684 | private static DataTable createUserAgentsTable() |
592 | { | 685 | { |
593 | DataTable ua = new DataTable("useragents"); | 686 | DataTable ua = new DataTable("useragents"); |
@@ -613,6 +706,10 @@ namespace OpenSim.Data.SQLite | |||
613 | return ua; | 706 | return ua; |
614 | } | 707 | } |
615 | 708 | ||
709 | /// <summary> | ||
710 | /// Create the "userfriends" table | ||
711 | /// </summary> | ||
712 | /// <returns>Data Table</returns> | ||
616 | private static DataTable createUserFriendsTable() | 713 | private static DataTable createUserFriendsTable() |
617 | { | 714 | { |
618 | DataTable ua = new DataTable("userfriends"); | 715 | DataTable ua = new DataTable("userfriends"); |
@@ -634,11 +731,15 @@ namespace OpenSim.Data.SQLite | |||
634 | * | 731 | * |
635 | **********************************************************************/ | 732 | **********************************************************************/ |
636 | 733 | ||
734 | /// <summary> | ||
735 | /// TODO: this doesn't work yet because something more | ||
736 | /// interesting has to be done to actually get these values | ||
737 | /// back out. Not enough time to figure it out yet. | ||
738 | /// </summary> | ||
739 | /// <param name="row"></param> | ||
740 | /// <returns></returns> | ||
637 | private static UserProfileData buildUserProfile(DataRow row) | 741 | private static UserProfileData buildUserProfile(DataRow row) |
638 | { | 742 | { |
639 | // TODO: this doesn't work yet because something more | ||
640 | // interesting has to be done to actually get these values | ||
641 | // back out. Not enough time to figure it out yet. | ||
642 | UserProfileData user = new UserProfileData(); | 743 | UserProfileData user = new UserProfileData(); |
643 | LLUUID tmp; | 744 | LLUUID tmp; |
644 | LLUUID.TryParse((String)row["UUID"], out tmp); | 745 | LLUUID.TryParse((String)row["UUID"], out tmp); |
@@ -678,6 +779,11 @@ namespace OpenSim.Data.SQLite | |||
678 | return user; | 779 | return user; |
679 | } | 780 | } |
680 | 781 | ||
782 | /// <summary> | ||
783 | /// | ||
784 | /// </summary> | ||
785 | /// <param name="row"></param> | ||
786 | /// <param name="user"></param> | ||
681 | private void fillUserRow(DataRow row, UserProfileData user) | 787 | private void fillUserRow(DataRow row, UserProfileData user) |
682 | { | 788 | { |
683 | row["UUID"] = Util.ToRawUuidString(user.ID); | 789 | row["UUID"] = Util.ToRawUuidString(user.ID); |
@@ -719,6 +825,11 @@ namespace OpenSim.Data.SQLite | |||
719 | } | 825 | } |
720 | } | 826 | } |
721 | 827 | ||
828 | /// <summary> | ||
829 | /// | ||
830 | /// </summary> | ||
831 | /// <param name="row"></param> | ||
832 | /// <returns></returns> | ||
722 | private static UserAgentData buildUserAgent(DataRow row) | 833 | private static UserAgentData buildUserAgent(DataRow row) |
723 | { | 834 | { |
724 | UserAgentData ua = new UserAgentData(); | 835 | UserAgentData ua = new UserAgentData(); |
@@ -742,6 +853,11 @@ namespace OpenSim.Data.SQLite | |||
742 | return ua; | 853 | return ua; |
743 | } | 854 | } |
744 | 855 | ||
856 | /// <summary> | ||
857 | /// | ||
858 | /// </summary> | ||
859 | /// <param name="row"></param> | ||
860 | /// <param name="ua"></param> | ||
745 | private static void fillUserAgentRow(DataRow row, UserAgentData ua) | 861 | private static void fillUserAgentRow(DataRow row, UserAgentData ua) |
746 | { | 862 | { |
747 | row["UUID"] = ua.ProfileID; | 863 | row["UUID"] = ua.ProfileID; |
@@ -770,6 +886,11 @@ namespace OpenSim.Data.SQLite | |||
770 | * | 886 | * |
771 | **********************************************************************/ | 887 | **********************************************************************/ |
772 | 888 | ||
889 | /// <summary> | ||
890 | /// | ||
891 | /// </summary> | ||
892 | /// <param name="da"></param> | ||
893 | /// <param name="conn"></param> | ||
773 | private void setupUserCommands(SqliteDataAdapter da, SqliteConnection conn) | 894 | private void setupUserCommands(SqliteDataAdapter da, SqliteConnection conn) |
774 | { | 895 | { |
775 | da.InsertCommand = SQLiteUtil.createInsertCommand("users", ds.Tables["users"]); | 896 | da.InsertCommand = SQLiteUtil.createInsertCommand("users", ds.Tables["users"]); |
@@ -784,6 +905,11 @@ namespace OpenSim.Data.SQLite | |||
784 | da.DeleteCommand = delete; | 905 | da.DeleteCommand = delete; |
785 | } | 906 | } |
786 | 907 | ||
908 | /// <summary> | ||
909 | /// | ||
910 | /// </summary> | ||
911 | /// <param name="daf"></param> | ||
912 | /// <param name="conn"></param> | ||
787 | private void setupUserFriendsCommands(SqliteDataAdapter daf, SqliteConnection conn) | 913 | private void setupUserFriendsCommands(SqliteDataAdapter daf, SqliteConnection conn) |
788 | { | 914 | { |
789 | daf.InsertCommand = SQLiteUtil.createInsertCommand("userfriends", ds.Tables["userfriends"]); | 915 | daf.InsertCommand = SQLiteUtil.createInsertCommand("userfriends", ds.Tables["userfriends"]); |
@@ -800,6 +926,10 @@ namespace OpenSim.Data.SQLite | |||
800 | 926 | ||
801 | } | 927 | } |
802 | 928 | ||
929 | /// <summary> | ||
930 | /// | ||
931 | /// </summary> | ||
932 | /// <param name="conn"></param> | ||
803 | private static void InitDB(SqliteConnection conn) | 933 | private static void InitDB(SqliteConnection conn) |
804 | { | 934 | { |
805 | string createUsers = SQLiteUtil.defineTable(createUsersTable()); | 935 | string createUsers = SQLiteUtil.defineTable(createUsersTable()); |
@@ -832,6 +962,12 @@ namespace OpenSim.Data.SQLite | |||
832 | conn.Close(); | 962 | conn.Close(); |
833 | } | 963 | } |
834 | 964 | ||
965 | /// <summary> | ||
966 | /// | ||
967 | /// </summary> | ||
968 | /// <param name="conn"></param> | ||
969 | /// <param name="m"></param> | ||
970 | /// <returns></returns> | ||
835 | private static bool TestTables(SqliteConnection conn, Migration m) | 971 | private static bool TestTables(SqliteConnection conn, Migration m) |
836 | { | 972 | { |
837 | SqliteCommand cmd = new SqliteCommand(userSelect, conn); | 973 | 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 | |||
44 | * | 44 | * |
45 | **********************************************************************/ | 45 | **********************************************************************/ |
46 | 46 | ||
47 | /// <summary> | ||
48 | /// | ||
49 | /// </summary> | ||
50 | /// <param name="dt"></param> | ||
51 | /// <param name="name"></param> | ||
52 | /// <param name="type"></param> | ||
47 | public static void createCol(DataTable dt, string name, Type type) | 53 | public static void createCol(DataTable dt, string name, Type type) |
48 | { | 54 | { |
49 | DataColumn col = new DataColumn(name, type); | 55 | DataColumn col = new DataColumn(name, type); |
@@ -60,17 +66,24 @@ namespace OpenSim.Data.SQLite | |||
60 | * | 66 | * |
61 | **********************************************************************/ | 67 | **********************************************************************/ |
62 | 68 | ||
69 | /// <summary> | ||
70 | /// Create an insert command | ||
71 | /// </summary> | ||
72 | /// <param name="table">table name</param> | ||
73 | /// <param name="dt">data table</param> | ||
74 | /// <returns>the created command</returns> | ||
75 | /// <remarks> | ||
76 | /// This is subtle enough to deserve some commentary. | ||
77 | /// Instead of doing *lots* and *lots of hardcoded strings | ||
78 | /// for database definitions we'll use the fact that | ||
79 | /// realistically all insert statements look like "insert | ||
80 | /// into A(b, c) values(:b, :c) on the parameterized query | ||
81 | /// front. If we just have a list of b, c, etc... we can | ||
82 | /// generate these strings instead of typing them out. | ||
83 | /// </remarks> | ||
63 | public static SqliteCommand createInsertCommand(string table, DataTable dt) | 84 | public static SqliteCommand createInsertCommand(string table, DataTable dt) |
64 | { | 85 | { |
65 | /** | 86 | |
66 | * This is subtle enough to deserve some commentary. | ||
67 | * Instead of doing *lots* and *lots of hardcoded strings | ||
68 | * for database definitions we'll use the fact that | ||
69 | * realistically all insert statements look like "insert | ||
70 | * into A(b, c) values(:b, :c) on the parameterized query | ||
71 | * front. If we just have a list of b, c, etc... we can | ||
72 | * generate these strings instead of typing them out. | ||
73 | */ | ||
74 | string[] cols = new string[dt.Columns.Count]; | 87 | string[] cols = new string[dt.Columns.Count]; |
75 | for (int i = 0; i < dt.Columns.Count; i++) | 88 | for (int i = 0; i < dt.Columns.Count; i++) |
76 | { | 89 | { |
@@ -95,6 +108,13 @@ namespace OpenSim.Data.SQLite | |||
95 | return cmd; | 108 | return cmd; |
96 | } | 109 | } |
97 | 110 | ||
111 | /// <summary> | ||
112 | /// create an update command | ||
113 | /// </summary> | ||
114 | /// <param name="table">table name</param> | ||
115 | /// <param name="pk"></param> | ||
116 | /// <param name="dt"></param> | ||
117 | /// <returns>the created command</returns> | ||
98 | public static SqliteCommand createUpdateCommand(string table, string pk, DataTable dt) | 118 | public static SqliteCommand createUpdateCommand(string table, string pk, DataTable dt) |
99 | { | 119 | { |
100 | string sql = "update " + table + " set "; | 120 | string sql = "update " + table + " set "; |
@@ -122,7 +142,11 @@ namespace OpenSim.Data.SQLite | |||
122 | return cmd; | 142 | return cmd; |
123 | } | 143 | } |
124 | 144 | ||
125 | 145 | /// <summary> | |
146 | /// | ||
147 | /// </summary> | ||
148 | /// <param name="dt">Data Table</param> | ||
149 | /// <returns></returns> | ||
126 | public static string defineTable(DataTable dt) | 150 | public static string defineTable(DataTable dt) |
127 | { | 151 | { |
128 | string sql = "create table " + dt.TableName + "("; | 152 | string sql = "create table " + dt.TableName + "("; |
@@ -158,15 +182,21 @@ namespace OpenSim.Data.SQLite | |||
158 | **********************************************************************/ | 182 | **********************************************************************/ |
159 | 183 | ||
160 | ///<summary> | 184 | ///<summary> |
185 | /// <para> | ||
161 | /// This is a convenience function that collapses 5 repetitive | 186 | /// This is a convenience function that collapses 5 repetitive |
162 | /// lines for defining SqliteParameters to 2 parameters: | 187 | /// lines for defining SqliteParameters to 2 parameters: |
163 | /// column name and database type. | 188 | /// column name and database type. |
164 | /// | 189 | /// </para> |
190 | /// | ||
191 | /// <para> | ||
165 | /// It assumes certain conventions like :param as the param | 192 | /// It assumes certain conventions like :param as the param |
166 | /// name to replace in parametrized queries, and that source | 193 | /// name to replace in parametrized queries, and that source |
167 | /// version is always current version, both of which are fine | 194 | /// version is always current version, both of which are fine |
168 | /// for us. | 195 | /// for us. |
196 | /// </para> | ||
169 | ///</summary> | 197 | ///</summary> |
198 | /// <param name="name"></param> | ||
199 | /// <param name="type"></param> | ||
170 | ///<returns>a built sqlite parameter</returns> | 200 | ///<returns>a built sqlite parameter</returns> |
171 | public static SqliteParameter createSqliteParameter(string name, Type type) | 201 | public static SqliteParameter createSqliteParameter(string name, Type type) |
172 | { | 202 | { |
@@ -184,6 +214,11 @@ namespace OpenSim.Data.SQLite | |||
184 | * | 214 | * |
185 | **********************************************************************/ | 215 | **********************************************************************/ |
186 | 216 | ||
217 | /// <summary> | ||
218 | /// Type conversion function | ||
219 | /// </summary> | ||
220 | /// <param name="type">a type</param> | ||
221 | /// <returns>a DbType</returns> | ||
187 | public static DbType dbtypeFromType(Type type) | 222 | public static DbType dbtypeFromType(Type type) |
188 | { | 223 | { |
189 | if (type == typeof (String)) | 224 | if (type == typeof (String)) |
@@ -224,8 +259,11 @@ namespace OpenSim.Data.SQLite | |||
224 | } | 259 | } |
225 | } | 260 | } |
226 | 261 | ||
227 | // this is something we'll need to implement for each db | 262 | /// <summary> |
228 | // slightly differently. | 263 | /// </summary> |
264 | /// <param name="type">a Type</param> | ||
265 | /// <returns>a string</returns> | ||
266 | /// <remarks>this is something we'll need to implement for each db slightly differently.</remarks> | ||
229 | public static string sqliteType(Type type) | 267 | public static string sqliteType(Type type) |
230 | { | 268 | { |
231 | if (type == typeof (String)) | 269 | if (type == typeof (String)) |