aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs40
1 files changed, 19 insertions, 21 deletions
diff --git a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
index 6540b6d..582bdfc 100644
--- a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
+++ b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
@@ -246,49 +246,47 @@ namespace OpenSim.DataStore.MonoSqlite
246 public void StoreTerrain(double[,] ter, LLUUID regionID) 246 public void StoreTerrain(double[,] ter, LLUUID regionID)
247 { 247 {
248 int revision = Util.UnixTimeSinceEpoch(); 248 int revision = Util.UnixTimeSinceEpoch();
249
250 // the following is an work around for .NET. The perf
251 // issues associated with it aren't as bad as you think.
249 SqliteConnection conn = new SqliteConnection(connectionString); 252 SqliteConnection conn = new SqliteConnection(connectionString);
250 conn.Open(); 253 conn.Open();
251 MainLog.Instance.Verbose("DATASTORE", "Storing terrain revision r" + revision.ToString()); 254 MainLog.Instance.Verbose("DATASTORE", "Storing terrain revision r" + revision.ToString());
255 String sql = "insert into terrain(RegionUUID, Revision, Heightfield)" +
256 " values(:RegionUUID, :Revision, :Heightfield)";
252 257
253 DataTable terrain = ds.Tables["terrain"]; 258 using(SqliteCommand cmd = new SqliteCommand(sql, conn))
254 lock (ds)
255 { 259 {
256 SqliteCommand cmd = new SqliteCommand("insert into terrain(RegionUUID, Revision, Heightfield)" + 260 cmd.Parameters.Add(new SqliteParameter(":RegionUUID", regionID.ToString()));
257 " values(:RegionUUID, :Revision, :Heightfield)", conn); 261 cmd.Parameters.Add(new SqliteParameter(":Revision", revision));
258 using(cmd) 262 cmd.Parameters.Add(new SqliteParameter(":Heightfield", serializeTerrain(ter)));
259 { 263 cmd.ExecuteNonQuery();
260
261 cmd.Parameters.Add(new SqliteParameter(":RegionUUID", regionID.ToString()));
262 cmd.Parameters.Add(new SqliteParameter(":Revision", revision));
263 cmd.Parameters.Add(new SqliteParameter(":Heightfield", serializeTerrain(ter)));
264 cmd.ExecuteNonQuery();
265 }
266 } 264 }
267 conn.Close(); 265 conn.Close();
268 } 266 }
269 267
270 public double[,] LoadTerrain(LLUUID regionID) 268 public double[,] LoadTerrain(LLUUID regionID)
271 { 269 {
272 SqliteConnection conn = new SqliteConnection(connectionString);
273 conn.Open();
274 double[,] terret = new double[256,256]; 270 double[,] terret = new double[256,256];
275 terret.Initialize(); 271 terret.Initialize();
272 // the following is an work around for .NET. The perf
273 // issues associated with it aren't as bad as you think.
274 SqliteConnection conn = new SqliteConnection(connectionString);
275 conn.Open();
276 String sql = "select RegionUUID, Revision, Heightfield from terrain" + 276 String sql = "select RegionUUID, Revision, Heightfield from terrain" +
277 " where RegionUUID='" + regionID.ToString() + "' order by Revision desc"; 277 " where RegionUUID=:RegionUUID order by Revision desc";
278 278
279 using (IDbCommand cmd = conn.CreateCommand()) 279
280 using (SqliteCommand cmd = new SqliteCommand(sql, conn))
280 { 281 {
281 cmd.CommandText = sql; 282 cmd.Parameters.Add(new SqliteParameter(":RegionUUID", regionID.ToString()));
282 // SqliteParameter param = new SqliteParameter(":RegionUUID", regionID.ToString());
283// param.SourceColumn = "RegionUUID";
284// param.SourceVersion = DataRowVersion.Current;
285// cmd.Parameters.Add(param);
286 283
287 using (IDataReader row = cmd.ExecuteReader()) 284 using (IDataReader row = cmd.ExecuteReader())
288 { 285 {
289 int rev = 0; 286 int rev = 0;
290 if (row.Read()) 287 if (row.Read())
291 { 288 {
289 // TODO: put this into a function
292 byte[] heightmap = (byte[]) row["Heightfield"]; 290 byte[] heightmap = (byte[]) row["Heightfield"];
293 for (int x = 0; x < 256; x++) 291 for (int x = 0; x < 256; x++)
294 { 292 {