aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/MySQL/MySQLRegionData.cs
diff options
context:
space:
mode:
authorDiva Canto2009-10-04 14:06:28 -0700
committerDiva Canto2009-10-04 14:06:28 -0700
commit08d3650138c106529dedd4659472868097e85ecc (patch)
tree7b63f4a8bdb03e1654abb8bf0f449d0fe39ad78a /OpenSim/Data/MySQL/MySQLRegionData.cs
parentReduced locking. (diff)
parentMerge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff)
downloadopensim-SC_OLD-08d3650138c106529dedd4659472868097e85ecc.zip
opensim-SC_OLD-08d3650138c106529dedd4659472868097e85ecc.tar.gz
opensim-SC_OLD-08d3650138c106529dedd4659472868097e85ecc.tar.bz2
opensim-SC_OLD-08d3650138c106529dedd4659472868097e85ecc.tar.xz
Merge branch 'master' of ssh://diva@opensimulator.org/var/git/opensim
Diffstat (limited to 'OpenSim/Data/MySQL/MySQLRegionData.cs')
-rw-r--r--OpenSim/Data/MySQL/MySQLRegionData.cs240
1 files changed, 119 insertions, 121 deletions
diff --git a/OpenSim/Data/MySQL/MySQLRegionData.cs b/OpenSim/Data/MySQL/MySQLRegionData.cs
index 06ef624..04b24b6 100644
--- a/OpenSim/Data/MySQL/MySQLRegionData.cs
+++ b/OpenSim/Data/MySQL/MySQLRegionData.cs
@@ -56,12 +56,13 @@ namespace OpenSim.Data.MySQL
56 if (scopeID != UUID.Zero) 56 if (scopeID != UUID.Zero)
57 command += " and ScopeID = ?scopeID"; 57 command += " and ScopeID = ?scopeID";
58 58
59 MySqlCommand cmd = new MySqlCommand(command); 59 using (MySqlCommand cmd = new MySqlCommand(command))
60 60 {
61 cmd.Parameters.AddWithValue("?regionName", regionName); 61 cmd.Parameters.AddWithValue("?regionName", regionName);
62 cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString()); 62 cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
63 63
64 return RunCommand(cmd); 64 return RunCommand(cmd);
65 }
65 } 66 }
66 67
67 public RegionData Get(int posX, int posY, UUID scopeID) 68 public RegionData Get(int posX, int posY, UUID scopeID)
@@ -70,17 +71,18 @@ namespace OpenSim.Data.MySQL
70 if (scopeID != UUID.Zero) 71 if (scopeID != UUID.Zero)
71 command += " and ScopeID = ?scopeID"; 72 command += " and ScopeID = ?scopeID";
72 73
73 MySqlCommand cmd = new MySqlCommand(command); 74 using (MySqlCommand cmd = new MySqlCommand(command))
74 75 {
75 cmd.Parameters.AddWithValue("?posX", posX.ToString()); 76 cmd.Parameters.AddWithValue("?posX", posX.ToString());
76 cmd.Parameters.AddWithValue("?posY", posY.ToString()); 77 cmd.Parameters.AddWithValue("?posY", posY.ToString());
77 cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString()); 78 cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
78 79
79 List<RegionData> ret = RunCommand(cmd); 80 List<RegionData> ret = RunCommand(cmd);
80 if (ret.Count == 0) 81 if (ret.Count == 0)
81 return null; 82 return null;
82 83
83 return ret[0]; 84 return ret[0];
85 }
84 } 86 }
85 87
86 public RegionData Get(UUID regionID, UUID scopeID) 88 public RegionData Get(UUID regionID, UUID scopeID)
@@ -89,16 +91,17 @@ namespace OpenSim.Data.MySQL
89 if (scopeID != UUID.Zero) 91 if (scopeID != UUID.Zero)
90 command += " and ScopeID = ?scopeID"; 92 command += " and ScopeID = ?scopeID";
91 93
92 MySqlCommand cmd = new MySqlCommand(command); 94 using (MySqlCommand cmd = new MySqlCommand(command))
93 95 {
94 cmd.Parameters.AddWithValue("?regionID", regionID.ToString()); 96 cmd.Parameters.AddWithValue("?regionID", regionID.ToString());
95 cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString()); 97 cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
96 98
97 List<RegionData> ret = RunCommand(cmd); 99 List<RegionData> ret = RunCommand(cmd);
98 if (ret.Count == 0) 100 if (ret.Count == 0)
99 return null; 101 return null;
100 102
101 return ret[0]; 103 return ret[0];
104 }
102 } 105 }
103 106
104 public List<RegionData> Get(int startX, int startY, int endX, int endY, UUID scopeID) 107 public List<RegionData> Get(int startX, int startY, int endX, int endY, UUID scopeID)
@@ -107,71 +110,70 @@ namespace OpenSim.Data.MySQL
107 if (scopeID != UUID.Zero) 110 if (scopeID != UUID.Zero)
108 command += " and ScopeID = ?scopeID"; 111 command += " and ScopeID = ?scopeID";
109 112
110 MySqlCommand cmd = new MySqlCommand(command); 113 using (MySqlCommand cmd = new MySqlCommand(command))
111 114 {
112 cmd.Parameters.AddWithValue("?startX", startX.ToString()); 115 cmd.Parameters.AddWithValue("?startX", startX.ToString());
113 cmd.Parameters.AddWithValue("?startY", startY.ToString()); 116 cmd.Parameters.AddWithValue("?startY", startY.ToString());
114 cmd.Parameters.AddWithValue("?endX", endX.ToString()); 117 cmd.Parameters.AddWithValue("?endX", endX.ToString());
115 cmd.Parameters.AddWithValue("?endY", endY.ToString()); 118 cmd.Parameters.AddWithValue("?endY", endY.ToString());
116 cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString()); 119 cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
117 120
118 return RunCommand(cmd); 121 return RunCommand(cmd);
122 }
119 } 123 }
120 124
121 public List<RegionData> RunCommand(MySqlCommand cmd) 125 public List<RegionData> RunCommand(MySqlCommand cmd)
122 { 126 {
123 List<RegionData> retList = new List<RegionData>(); 127 List<RegionData> retList = new List<RegionData>();
124 128
125 IDataReader result = ExecuteReader(cmd); 129 using (IDataReader result = ExecuteReader(cmd))
126
127 while (result.Read())
128 { 130 {
129 RegionData ret = new RegionData(); 131 while (result.Read())
130 ret.Data = new Dictionary<string, object>();
131
132 UUID regionID;
133 UUID.TryParse(result["uuid"].ToString(), out regionID);
134 ret.RegionID = regionID;
135 UUID scope;
136 UUID.TryParse(result["ScopeID"].ToString(), out scope);
137 ret.ScopeID = scope;
138 ret.RegionName = result["regionName"].ToString();
139 ret.posX = Convert.ToInt32(result["locX"]);
140 ret.posY = Convert.ToInt32(result["locY"]);
141 ret.sizeX = Convert.ToInt32(result["sizeX"]);
142 ret.sizeY = Convert.ToInt32(result["sizeY"]);
143
144 if (m_ColumnNames == null)
145 { 132 {
146 m_ColumnNames = new List<string>(); 133 RegionData ret = new RegionData();
147 134 ret.Data = new Dictionary<string, object>();
148 DataTable schemaTable = result.GetSchemaTable(); 135
149 foreach (DataRow row in schemaTable.Rows) 136 UUID regionID;
150 m_ColumnNames.Add(row["ColumnName"].ToString()); 137 UUID.TryParse(result["uuid"].ToString(), out regionID);
138 ret.RegionID = regionID;
139 UUID scope;
140 UUID.TryParse(result["ScopeID"].ToString(), out scope);
141 ret.ScopeID = scope;
142 ret.RegionName = result["regionName"].ToString();
143 ret.posX = Convert.ToInt32(result["locX"]);
144 ret.posY = Convert.ToInt32(result["locY"]);
145 ret.sizeX = Convert.ToInt32(result["sizeX"]);
146 ret.sizeY = Convert.ToInt32(result["sizeY"]);
147
148 if (m_ColumnNames == null)
149 {
150 m_ColumnNames = new List<string>();
151
152 DataTable schemaTable = result.GetSchemaTable();
153 foreach (DataRow row in schemaTable.Rows)
154 m_ColumnNames.Add(row["ColumnName"].ToString());
155 }
156
157 foreach (string s in m_ColumnNames)
158 {
159 if (s == "uuid")
160 continue;
161 if (s == "ScopeID")
162 continue;
163 if (s == "regionName")
164 continue;
165 if (s == "locX")
166 continue;
167 if (s == "locY")
168 continue;
169
170 ret.Data[s] = result[s].ToString();
171 }
172
173 retList.Add(ret);
151 } 174 }
152
153 foreach (string s in m_ColumnNames)
154 {
155 if (s == "uuid")
156 continue;
157 if (s == "ScopeID")
158 continue;
159 if (s == "regionName")
160 continue;
161 if (s == "locX")
162 continue;
163 if (s == "locY")
164 continue;
165
166 ret.Data[s] = result[s].ToString();
167 }
168
169 retList.Add(ret);
170 } 175 }
171 176
172 result.Close();
173 CloseReaderCommand(cmd);
174
175 return retList; 177 return retList;
176 } 178 }
177 179
@@ -198,76 +200,72 @@ namespace OpenSim.Data.MySQL
198 200
199 string[] fields = new List<string>(data.Data.Keys).ToArray(); 201 string[] fields = new List<string>(data.Data.Keys).ToArray();
200 202
201 MySqlCommand cmd = new MySqlCommand(); 203 using (MySqlCommand cmd = new MySqlCommand())
202
203 string update = "update `"+m_Realm+"` set locX=?posX, locY=?posY, sizeX=?sizeX, sizeY=?sizeY";
204 foreach (string field in fields)
205 { 204 {
206 update += ", "; 205 string update = "update `" + m_Realm + "` set locX=?posX, locY=?posY, sizeX=?sizeX, sizeY=?sizeY";
207 update += "`" + field + "` = ?"+field; 206 foreach (string field in fields)
208 207 {
209 cmd.Parameters.AddWithValue("?"+field, data.Data[field]); 208 update += ", ";
210 } 209 update += "`" + field + "` = ?" + field;
211
212 update += " where uuid = ?regionID";
213 210
214 if (data.ScopeID != UUID.Zero) 211 cmd.Parameters.AddWithValue("?" + field, data.Data[field]);
215 update += " and ScopeID = ?scopeID"; 212 }
216 213
217 cmd.CommandText = update; 214 update += " where uuid = ?regionID";
218 cmd.Parameters.AddWithValue("?regionID", data.RegionID.ToString());
219 cmd.Parameters.AddWithValue("?regionName", data.RegionName);
220 cmd.Parameters.AddWithValue("?scopeID", data.ScopeID.ToString());
221 cmd.Parameters.AddWithValue("?posX", data.posX.ToString());
222 cmd.Parameters.AddWithValue("?posY", data.posY.ToString());
223 cmd.Parameters.AddWithValue("?sizeX", data.sizeX.ToString());
224 cmd.Parameters.AddWithValue("?sizeY", data.sizeY.ToString());
225 215
226 if (ExecuteNonQuery(cmd) < 1) 216 if (data.ScopeID != UUID.Zero)
227 { 217 update += " and ScopeID = ?scopeID";
228 string insert = "insert into `" + m_Realm + "` (`uuid`, `ScopeID`, `locX`, `locY`, `sizeX`, `sizeY`, `regionName`, `" +
229 String.Join("`, `", fields) +
230 "`) values ( ?regionID, ?scopeID, ?posX, ?posY, ?sizeX, ?sizeY, ?regionName, ?" + String.Join(", ?", fields) + ")";
231 218
232 cmd.CommandText = insert; 219 cmd.CommandText = update;
220 cmd.Parameters.AddWithValue("?regionID", data.RegionID.ToString());
221 cmd.Parameters.AddWithValue("?regionName", data.RegionName);
222 cmd.Parameters.AddWithValue("?scopeID", data.ScopeID.ToString());
223 cmd.Parameters.AddWithValue("?posX", data.posX.ToString());
224 cmd.Parameters.AddWithValue("?posY", data.posY.ToString());
225 cmd.Parameters.AddWithValue("?sizeX", data.sizeX.ToString());
226 cmd.Parameters.AddWithValue("?sizeY", data.sizeY.ToString());
233 227
234 if (ExecuteNonQuery(cmd) < 1) 228 if (ExecuteNonQuery(cmd) < 1)
235 { 229 {
236 cmd.Dispose(); 230 string insert = "insert into `" + m_Realm + "` (`uuid`, `ScopeID`, `locX`, `locY`, `sizeX`, `sizeY`, `regionName`, `" +
237 return false; 231 String.Join("`, `", fields) +
232 "`) values ( ?regionID, ?scopeID, ?posX, ?posY, ?sizeX, ?sizeY, ?regionName, ?" + String.Join(", ?", fields) + ")";
233
234 cmd.CommandText = insert;
235
236 if (ExecuteNonQuery(cmd) < 1)
237 {
238 return false;
239 }
238 } 240 }
239 } 241 }
240 242
241 cmd.Dispose();
242
243 return true; 243 return true;
244 } 244 }
245 245
246 public bool SetDataItem(UUID regionID, string item, string value) 246 public bool SetDataItem(UUID regionID, string item, string value)
247 { 247 {
248 MySqlCommand cmd = new MySqlCommand("update `" + m_Realm + 248 using (MySqlCommand cmd = new MySqlCommand("update `" + m_Realm + "` set `" + item + "` = ?" + item + " where uuid = ?UUID"))
249 "` set `" + item + "` = ?" + item + " where uuid = ?UUID"); 249 {
250 250 cmd.Parameters.AddWithValue("?" + item, value);
251 251 cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
252 cmd.Parameters.AddWithValue("?"+item, value);
253 cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
254 252
255 if (ExecuteNonQuery(cmd) > 0) 253 if (ExecuteNonQuery(cmd) > 0)
256 return true; 254 return true;
255 }
257 256
258 return false; 257 return false;
259 } 258 }
260 259
261 public bool Delete(UUID regionID) 260 public bool Delete(UUID regionID)
262 { 261 {
263 MySqlCommand cmd = new MySqlCommand("delete from `" + m_Realm + 262 using (MySqlCommand cmd = new MySqlCommand("delete from `" + m_Realm + "` where uuid = ?UUID"))
264 "` where uuid = ?UUID"); 263 {
265 264 cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
266
267 cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
268 265
269 if (ExecuteNonQuery(cmd) > 0) 266 if (ExecuteNonQuery(cmd) > 0)
270 return true; 267 return true;
268 }
271 269
272 return false; 270 return false;
273 } 271 }