aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorSean Dague2007-08-09 23:51:26 +0000
committerSean Dague2007-08-09 23:51:26 +0000
commit6063d2ce5fc8bae2940f751e80fd821b9e0b2a3e (patch)
tree083f96a8ac2b7da9b796e430a7980cf3b6020393
parentcomment out load from sqlite as this blows up on object creation right now. (diff)
downloadopensim-SC-6063d2ce5fc8bae2940f751e80fd821b9e0b2a3e.zip
opensim-SC-6063d2ce5fc8bae2940f751e80fd821b9e0b2a3e.tar.gz
opensim-SC-6063d2ce5fc8bae2940f751e80fd821b9e0b2a3e.tar.bz2
opensim-SC-6063d2ce5fc8bae2940f751e80fd821b9e0b2a3e.tar.xz
Couldn't leave this one alone. Data is now flowing both ways in
sqlite *but* isn't being added back to the scene on load because some information (like rootpart) isn't currently exposed enough to save/restore, and I don't want to change the SceneObjectGroup definition without MW around to discuss. A couple of minor changes on the object interface for SceneObjectGroup and tweaks to this class, and we have persistant prims again.
-rw-r--r--OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs151
1 files changed, 79 insertions, 72 deletions
diff --git a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
index 0cb3bf3..66ca56d 100644
--- a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
+++ b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
@@ -11,6 +11,7 @@ using OpenSim.Framework.Types;
11using libsecondlife; 11using libsecondlife;
12 12
13using System.Data; 13using System.Data;
14using System.Data.SqlTypes;
14// Yes, this won't compile on MS, need to deal with that later 15// Yes, this won't compile on MS, need to deal with that later
15using Mono.Data.SqliteClient; 16using Mono.Data.SqliteClient;
16 17
@@ -244,57 +245,59 @@ namespace OpenSim.DataStore.MonoSqliteStorage
244 // interesting has to be done to actually get these values 245 // interesting has to be done to actually get these values
245 // back out. Not enough time to figure it out yet. 246 // back out. Not enough time to figure it out yet.
246 SceneObjectPart prim = new SceneObjectPart(); 247 SceneObjectPart prim = new SceneObjectPart();
247 prim.UUID = new LLUUID((string)row["UUID"]); 248 prim.UUID = new LLUUID((String)row["UUID"]);
248 prim.ParentID = (uint)row["ParentID"]; 249 // explicit conversion of integers is required, which sort
249 prim.CreationDate = (int)row["CreationDate"]; 250 // of sucks. No idea if there is a shortcut here or not.
250 prim.PartName = (string)row["Name"]; 251 prim.ParentID = Convert.ToUInt32(row["ParentID"]);
252 prim.CreationDate = Convert.ToInt32(row["CreationDate"]);
253 prim.PartName = (String)row["Name"];
251 // various text fields 254 // various text fields
252 prim.Text = (string)row["Text"]; 255 prim.Text = (String)row["Text"];
253 prim.Description = (string)row["Description"]; 256 prim.Description = (String)row["Description"];
254 prim.SitName = (string)row["SitName"]; 257 prim.SitName = (String)row["SitName"];
255 prim.TouchName = (string)row["TouchName"]; 258 prim.TouchName = (String)row["TouchName"];
256 // permissions 259 // permissions
257 prim.CreatorID = new LLUUID((string)row["CreatorID"]); 260 prim.CreatorID = new LLUUID((String)row["CreatorID"]);
258 prim.OwnerID = new LLUUID((string)row["OwnerID"]); 261 prim.OwnerID = new LLUUID((String)row["OwnerID"]);
259 prim.GroupID = new LLUUID((string)row["GroupID"]); 262 prim.GroupID = new LLUUID((String)row["GroupID"]);
260 prim.LastOwnerID = new LLUUID((string)row["LastOwnerID"]); 263 prim.LastOwnerID = new LLUUID((String)row["LastOwnerID"]);
261 prim.OwnerMask = (uint)row["OwnerMask"]; 264 prim.OwnerMask = Convert.ToUInt32(row["OwnerMask"]);
262 prim.NextOwnerMask = (uint)row["NextOwnerMask"]; 265 prim.NextOwnerMask = Convert.ToUInt32(row["NextOwnerMask"]);
263 prim.GroupMask = (uint)row["GroupMask"]; 266 prim.GroupMask = Convert.ToUInt32(row["GroupMask"]);
264 prim.EveryoneMask = (uint)row["EveryoneMask"]; 267 prim.EveryoneMask = Convert.ToUInt32(row["EveryoneMask"]);
265 prim.BaseMask = (uint)row["BaseMask"]; 268 prim.BaseMask = Convert.ToUInt32(row["BaseMask"]);
266 // vectors 269 // vectors
267 prim.OffsetPosition = new LLVector3( 270 prim.OffsetPosition = new LLVector3(
268 (float)row["PositionX"], 271 Convert.ToSingle(row["PositionX"]),
269 (float)row["PositionY"], 272 Convert.ToSingle(row["PositionY"]),
270 (float)row["PositionZ"] 273 Convert.ToSingle(row["PositionZ"])
271 ); 274 );
272 prim.GroupPosition = new LLVector3( 275 prim.GroupPosition = new LLVector3(
273 (float)row["GroupPositionX"], 276 Convert.ToSingle(row["GroupPositionX"]),
274 (float)row["GroupPositionY"], 277 Convert.ToSingle(row["GroupPositionY"]),
275 (float)row["GroupPositionZ"] 278 Convert.ToSingle(row["GroupPositionZ"])
276 ); 279 );
277 prim.Velocity = new LLVector3( 280 prim.Velocity = new LLVector3(
278 (float)row["VelocityX"], 281 Convert.ToSingle(row["VelocityX"]),
279 (float)row["VelocityY"], 282 Convert.ToSingle(row["VelocityY"]),
280 (float)row["VelocityZ"] 283 Convert.ToSingle(row["VelocityZ"])
281 ); 284 );
282 prim.AngularVelocity = new LLVector3( 285 prim.AngularVelocity = new LLVector3(
283 (float)row["AngularVelocityX"], 286 Convert.ToSingle(row["AngularVelocityX"]),
284 (float)row["AngularVelocityY"], 287 Convert.ToSingle(row["AngularVelocityY"]),
285 (float)row["AngularVelocityZ"] 288 Convert.ToSingle(row["AngularVelocityZ"])
286 ); 289 );
287 prim.Acceleration = new LLVector3( 290 prim.Acceleration = new LLVector3(
288 (float)row["AccelerationX"], 291 Convert.ToSingle(row["AccelerationX"]),
289 (float)row["AccelerationY"], 292 Convert.ToSingle(row["AccelerationY"]),
290 (float)row["AccelerationZ"] 293 Convert.ToSingle(row["AccelerationZ"])
291 ); 294 );
292 // quaternions 295 // quaternions
293 prim.RotationOffset = new LLQuaternion( 296 prim.RotationOffset = new LLQuaternion(
294 (float)row["RotationX"], 297 Convert.ToSingle(row["RotationX"]),
295 (float)row["RotationY"], 298 Convert.ToSingle(row["RotationY"]),
296 (float)row["RotationZ"], 299 Convert.ToSingle(row["RotationZ"]),
297 (float)row["RotationW"] 300 Convert.ToSingle(row["RotationW"])
298 ); 301 );
299 return prim; 302 return prim;
300 } 303 }
@@ -347,34 +350,34 @@ namespace OpenSim.DataStore.MonoSqliteStorage
347 { 350 {
348 PrimitiveBaseShape s = new PrimitiveBaseShape(); 351 PrimitiveBaseShape s = new PrimitiveBaseShape();
349 s.Scale = new LLVector3( 352 s.Scale = new LLVector3(
350 (float)row["ScaleX"], 353 Convert.ToSingle(row["ScaleX"]),
351 (float)row["ScaleY"], 354 Convert.ToSingle(row["ScaleY"]),
352 (float)row["ScaleZ"] 355 Convert.ToSingle(row["ScaleZ"])
353 ); 356 );
354 // paths 357 // paths
355 s.PCode = (byte)row["PCode"]; 358 s.PCode = Convert.ToByte(row["PCode"]);
356 s.PathBegin = (ushort)row["PathBegin"]; 359 s.PathBegin = Convert.ToUInt16(row["PathBegin"]);
357 s.PathEnd = (ushort)row["PathEnd"]; 360 s.PathEnd = Convert.ToUInt16(row["PathEnd"]);
358 s.PathScaleX = (byte)row["PathScaleX"]; 361 s.PathScaleX = Convert.ToByte(row["PathScaleX"]);
359 s.PathScaleY = (byte)row["PathScaleY"]; 362 s.PathScaleY = Convert.ToByte(row["PathScaleY"]);
360 s.PathShearX = (byte)row["PathShearX"]; 363 s.PathShearX = Convert.ToByte(row["PathShearX"]);
361 s.PathShearY = (byte)row["PathShearY"]; 364 s.PathShearY = Convert.ToByte(row["PathShearY"]);
362 s.PathSkew = (sbyte)row["PathSkew"]; 365 s.PathSkew = Convert.ToSByte(row["PathSkew"]);
363 s.PathCurve = (byte)row["PathCurve"]; 366 s.PathCurve = Convert.ToByte(row["PathCurve"]);
364 s.PathRadiusOffset = (sbyte)row["PathRadiusOffset"]; 367 s.PathRadiusOffset = Convert.ToSByte(row["PathRadiusOffset"]);
365 s.PathRevolutions = (byte)row["PathRevolutions"]; 368 s.PathRevolutions = Convert.ToByte(row["PathRevolutions"]);
366 s.PathTaperX = (sbyte)row["PathTaperX"]; 369 s.PathTaperX = Convert.ToSByte(row["PathTaperX"]);
367 s.PathTaperY = (sbyte)row["PathTaperY"]; 370 s.PathTaperY = Convert.ToSByte(row["PathTaperY"]);
368 s.PathTwist = (sbyte)row["PathTwist"]; 371 s.PathTwist = Convert.ToSByte(row["PathTwist"]);
369 s.PathTwistBegin = (sbyte)row["PathTwistBegin"]; 372 s.PathTwistBegin = Convert.ToSByte(row["PathTwistBegin"]);
370 // profile 373 // profile
371 s.ProfileBegin = (ushort)row["ProfileBegin"]; 374 s.ProfileBegin = Convert.ToUInt16(row["ProfileBegin"]);
372 s.ProfileEnd = (ushort)row["ProfileEnd"]; 375 s.ProfileEnd = Convert.ToUInt16(row["ProfileEnd"]);
373 s.ProfileCurve = (byte)row["ProfileCurve"]; 376 s.ProfileCurve = Convert.ToByte(row["ProfileCurve"]);
374 s.ProfileHollow = (byte)row["ProfileHollow"]; 377 s.ProfileHollow = Convert.ToByte(row["ProfileHollow"]);
375 // text TODO: this isn't right] = but I'm not sure the right 378 // text TODO: this isn't right] = but I'm not sure the right
376 // way to specify this as a blob atm 379 // way to specify this as a blob atm
377 s.TextureEntry = (byte[])row["Texture"]; 380 // s.TextureEntry = (byte[])row["Texture"];
378 return s; 381 return s;
379 } 382 }
380 383
@@ -464,19 +467,23 @@ namespace OpenSim.DataStore.MonoSqliteStorage
464 DataTable shapes = ds.Tables["primshapes"]; 467 DataTable shapes = ds.Tables["primshapes"];
465 468
466 // This only supports 1 prim per SceneObjectGroup. Need to fix later 469 // This only supports 1 prim per SceneObjectGroup. Need to fix later
467// foreach (DataRow primRow in prims.Rows) 470 foreach (DataRow primRow in prims.Rows)
468// { 471 {
469// SceneObjectGroup group = new SceneObjectGroup(); 472 SceneObjectGroup group = new SceneObjectGroup();
470// SceneObjectPart prim = buildPrim(primRow); 473 SceneObjectPart prim = buildPrim(primRow);
471// DataRow shapeRow = shapes.Rows.Find(prim.UUID); 474 DataRow shapeRow = shapes.Rows.Find(prim.UUID);
472// if (shapeRow != null) { 475 if (shapeRow != null) {
473// prim.Shape = buildShape(shapeRow); 476 prim.Shape = buildShape(shapeRow);
474// } 477 }
475// group.Children.Add(prim.UUID, prim); 478 group.Children.Add(prim.UUID, prim);
476// retvals.Add(group); 479 // TODO: there are a couple of known issues to get this to work
477// } 480 // * While we can add Children, we can't set the root part (or
478 481 // or even figure out which should be the root part)
479 MainLog.Instance.Verbose("DATASTORE", "Sqlite - LoadObjects found " + " objects"); 482 // * region handle may need to be persisted, it isn't now
483 // retvals.Add(group);
484 }
485
486 MainLog.Instance.Verbose("DATASTORE", "Sqlite - LoadObjects found " + prims.Rows.Count + " objects");
480 487
481 return retvals; 488 return retvals;
482 } 489 }