aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2014-11-28 00:27:13 +0000
committerJustin Clark-Casey (justincc)2014-11-28 00:27:13 +0000
commitd9f7aa41c100ebbc8a9f817ec4d4e247b2bd27fd (patch)
tree745f9e4e150ccc1d1e81ee04ebda5fa46a5ed1b8 /OpenSim/Data
parentStop writing SizeZ config parameter for now when creating regions from consol... (diff)
downloadopensim-SC_OLD-d9f7aa41c100ebbc8a9f817ec4d4e247b2bd27fd.zip
opensim-SC_OLD-d9f7aa41c100ebbc8a9f817ec4d4e247b2bd27fd.tar.gz
opensim-SC_OLD-d9f7aa41c100ebbc8a9f817ec4d4e247b2bd27fd.tar.bz2
opensim-SC_OLD-d9f7aa41c100ebbc8a9f817ec4d4e247b2bd27fd.tar.xz
Remove unmaintained MSSQL support.
This has not been maintained for more than 2 years, is unimplemented for newer features (e.g. built-in groups) and has no core developers using it. If somebody fixes these issues then it could be reinstated.
Diffstat (limited to 'OpenSim/Data')
-rw-r--r--OpenSim/Data/MSSQL/MSSQLAssetData.cs314
-rw-r--r--OpenSim/Data/MSSQL/MSSQLAuthenticationData.cs227
-rw-r--r--OpenSim/Data/MSSQL/MSSQLAvatarData.cs71
-rw-r--r--OpenSim/Data/MSSQL/MSSQLEstateData.cs577
-rw-r--r--OpenSim/Data/MSSQL/MSSQLFriendsData.cs99
-rw-r--r--OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs384
-rw-r--r--OpenSim/Data/MSSQL/MSSQLGridUserData.cs69
-rw-r--r--OpenSim/Data/MSSQL/MSSQLInventoryData.cs831
-rw-r--r--OpenSim/Data/MSSQL/MSSQLManager.cs219
-rw-r--r--OpenSim/Data/MSSQL/MSSQLMigration.cs99
-rw-r--r--OpenSim/Data/MSSQL/MSSQLPresenceData.cs117
-rw-r--r--OpenSim/Data/MSSQL/MSSQLRegionData.cs352
-rw-r--r--OpenSim/Data/MSSQL/MSSQLSimulationData.cs2242
-rw-r--r--OpenSim/Data/MSSQL/MSSQLUserAccountData.cs246
-rw-r--r--OpenSim/Data/MSSQL/MSSQLXInventoryData.cs305
-rw-r--r--OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs65
-rw-r--r--OpenSim/Data/MSSQL/Resources/AssetStore.migrations106
-rw-r--r--OpenSim/Data/MSSQL/Resources/AuthStore.migrations32
-rw-r--r--OpenSim/Data/MSSQL/Resources/Avatar.migrations64
-rw-r--r--OpenSim/Data/MSSQL/Resources/EstateStore.migrations342
-rw-r--r--OpenSim/Data/MSSQL/Resources/FriendsStore.migrations50
-rw-r--r--OpenSim/Data/MSSQL/Resources/GridStore.migrations245
-rw-r--r--OpenSim/Data/MSSQL/Resources/GridUserStore.migrations65
-rw-r--r--OpenSim/Data/MSSQL/Resources/InventoryStore.migrations279
-rw-r--r--OpenSim/Data/MSSQL/Resources/LogStore.migrations19
-rw-r--r--OpenSim/Data/MSSQL/Resources/Presence.migrations39
-rw-r--r--OpenSim/Data/MSSQL/Resources/RegionStore.migrations1182
-rw-r--r--OpenSim/Data/MSSQL/Resources/UserAccount.migrations55
-rw-r--r--OpenSim/Data/MSSQL/Resources/UserStore.migrations421
-rw-r--r--OpenSim/Data/Tests/AssetTests.cs8
-rw-r--r--OpenSim/Data/Tests/EstateTests.cs8
-rw-r--r--OpenSim/Data/Tests/InventoryTests.cs8
-rw-r--r--OpenSim/Data/Tests/RegionTests.cs8
33 files changed, 0 insertions, 9148 deletions
diff --git a/OpenSim/Data/MSSQL/MSSQLAssetData.cs b/OpenSim/Data/MSSQL/MSSQLAssetData.cs
deleted file mode 100644
index f94375d..0000000
--- a/OpenSim/Data/MSSQL/MSSQLAssetData.cs
+++ /dev/null
@@ -1,314 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Data;
30using System.Data.SqlClient;
31using System.Reflection;
32using System.Collections.Generic;
33using OpenMetaverse;
34using log4net;
35using OpenSim.Framework;
36
37namespace OpenSim.Data.MSSQL
38{
39 /// <summary>
40 /// A MSSQL Interface for the Asset server
41 /// </summary>
42 public class MSSQLAssetData : AssetDataBase
43 {
44 private const string _migrationStore = "AssetStore";
45
46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47 private long m_ticksToEpoch;
48 /// <summary>
49 /// Database manager
50 /// </summary>
51 private MSSQLManager m_database;
52 private string m_connectionString;
53
54 #region IPlugin Members
55
56 override public void Dispose() { }
57
58 /// <summary>
59 /// <para>Initialises asset interface</para>
60 /// </summary>
61 // [Obsolete("Cannot be default-initialized!")]
62 override public void Initialise()
63 {
64 m_log.Info("[MSSQLAssetData]: " + Name + " cannot be default-initialized!");
65 throw new PluginNotInitialisedException(Name);
66 }
67
68 /// <summary>
69 /// Initialises asset interface
70 /// </summary>
71 /// <para>
72 /// a string instead of file, if someone writes the support
73 /// </para>
74 /// <param name="connectionString">connect string</param>
75 override public void Initialise(string connectionString)
76 {
77 m_ticksToEpoch = new System.DateTime(1970, 1, 1).Ticks;
78
79 m_database = new MSSQLManager(connectionString);
80 m_connectionString = connectionString;
81
82 //New migration to check for DB changes
83 m_database.CheckMigration(_migrationStore);
84 }
85
86 /// <summary>
87 /// Database provider version.
88 /// </summary>
89 override public string Version
90 {
91 get { return m_database.getVersion(); }
92 }
93
94 /// <summary>
95 /// The name of this DB provider.
96 /// </summary>
97 override public string Name
98 {
99 get { return "MSSQL Asset storage engine"; }
100 }
101
102 #endregion
103
104 #region IAssetDataPlugin Members
105
106 /// <summary>
107 /// Fetch Asset from m_database
108 /// </summary>
109 /// <param name="assetID">the asset UUID</param>
110 /// <returns></returns>
111 override public AssetBase GetAsset(UUID assetID)
112 {
113 string sql = "SELECT * FROM assets WHERE id = @id";
114 using (SqlConnection conn = new SqlConnection(m_connectionString))
115 using (SqlCommand cmd = new SqlCommand(sql, conn))
116 {
117 cmd.Parameters.Add(m_database.CreateParameter("id", assetID));
118 conn.Open();
119 using (SqlDataReader reader = cmd.ExecuteReader())
120 {
121 if (reader.Read())
122 {
123 AssetBase asset = new AssetBase(
124 DBGuid.FromDB(reader["id"]),
125 (string)reader["name"],
126 Convert.ToSByte(reader["assetType"]),
127 reader["creatorid"].ToString()
128 );
129 // Region Main
130 asset.Description = (string)reader["description"];
131 asset.Local = Convert.ToBoolean(reader["local"]);
132 asset.Temporary = Convert.ToBoolean(reader["temporary"]);
133 asset.Flags = (AssetFlags)(Convert.ToInt32(reader["asset_flags"]));
134 asset.Data = (byte[])reader["data"];
135 return asset;
136 }
137 return null; // throw new Exception("No rows to return");
138 }
139 }
140 }
141
142 /// <summary>
143 /// Create asset in m_database
144 /// </summary>
145 /// <param name="asset">the asset</param>
146 override public void StoreAsset(AssetBase asset)
147 {
148
149 string sql =
150 @"IF EXISTS(SELECT * FROM assets WHERE id=@id)
151 UPDATE assets set name = @name, description = @description, assetType = @assetType,
152 local = @local, temporary = @temporary, creatorid = @creatorid, data = @data
153 WHERE id=@id
154 ELSE
155 INSERT INTO assets
156 ([id], [name], [description], [assetType], [local],
157 [temporary], [create_time], [access_time], [creatorid], [asset_flags], [data])
158 VALUES
159 (@id, @name, @description, @assetType, @local,
160 @temporary, @create_time, @access_time, @creatorid, @asset_flags, @data)";
161
162 string assetName = asset.Name;
163 if (asset.Name.Length > AssetBase.MAX_ASSET_NAME)
164 {
165 assetName = asset.Name.Substring(0, AssetBase.MAX_ASSET_NAME);
166 m_log.WarnFormat(
167 "[ASSET DB]: Name '{0}' for asset {1} truncated from {2} to {3} characters on add",
168 asset.Name, asset.ID, asset.Name.Length, assetName.Length);
169 }
170
171 string assetDescription = asset.Description;
172 if (asset.Description.Length > AssetBase.MAX_ASSET_DESC)
173 {
174 assetDescription = asset.Description.Substring(0, AssetBase.MAX_ASSET_DESC);
175 m_log.WarnFormat(
176 "[ASSET DB]: Description '{0}' for asset {1} truncated from {2} to {3} characters on add",
177 asset.Description, asset.ID, asset.Description.Length, assetDescription.Length);
178 }
179
180 using (SqlConnection conn = new SqlConnection(m_connectionString))
181 using (SqlCommand command = new SqlCommand(sql, conn))
182 {
183 int now = (int)((System.DateTime.Now.Ticks - m_ticksToEpoch) / 10000000);
184 command.Parameters.Add(m_database.CreateParameter("id", asset.FullID));
185 command.Parameters.Add(m_database.CreateParameter("name", assetName));
186 command.Parameters.Add(m_database.CreateParameter("description", assetDescription));
187 command.Parameters.Add(m_database.CreateParameter("assetType", asset.Type));
188 command.Parameters.Add(m_database.CreateParameter("local", asset.Local));
189 command.Parameters.Add(m_database.CreateParameter("temporary", asset.Temporary));
190 command.Parameters.Add(m_database.CreateParameter("access_time", now));
191 command.Parameters.Add(m_database.CreateParameter("create_time", now));
192 command.Parameters.Add(m_database.CreateParameter("asset_flags", (int)asset.Flags));
193 command.Parameters.Add(m_database.CreateParameter("creatorid", asset.Metadata.CreatorID));
194 command.Parameters.Add(m_database.CreateParameter("data", asset.Data));
195 conn.Open();
196 try
197 {
198 command.ExecuteNonQuery();
199 }
200 catch(Exception e)
201 {
202 m_log.Error("[ASSET DB]: Error storing item :" + e.Message);
203 }
204 }
205 }
206
207
208// Commented out since currently unused - this probably should be called in GetAsset()
209// private void UpdateAccessTime(AssetBase asset)
210// {
211// using (AutoClosingSqlCommand cmd = m_database.Query("UPDATE assets SET access_time = @access_time WHERE id=@id"))
212// {
213// int now = (int)((System.DateTime.Now.Ticks - m_ticksToEpoch) / 10000000);
214// cmd.Parameters.AddWithValue("@id", asset.FullID.ToString());
215// cmd.Parameters.AddWithValue("@access_time", now);
216// try
217// {
218// cmd.ExecuteNonQuery();
219// }
220// catch (Exception e)
221// {
222// m_log.Error(e.ToString());
223// }
224// }
225// }
226
227 /// <summary>
228 /// Check if the assets exist in the database.
229 /// </summary>
230 /// <param name="uuids">The assets' IDs</param>
231 /// <returns>For each asset: true if it exists, false otherwise</returns>
232 public override bool[] AssetsExist(UUID[] uuids)
233 {
234 if (uuids.Length == 0)
235 return new bool[0];
236
237 HashSet<UUID> exist = new HashSet<UUID>();
238
239 string ids = "'" + string.Join("','", uuids) + "'";
240 string sql = string.Format("SELECT id FROM assets WHERE id IN ({0})", ids);
241
242 using (SqlConnection conn = new SqlConnection(m_connectionString))
243 using (SqlCommand cmd = new SqlCommand(sql, conn))
244 {
245 conn.Open();
246 using (SqlDataReader reader = cmd.ExecuteReader())
247 {
248 while (reader.Read())
249 {
250 UUID id = DBGuid.FromDB(reader["id"]);
251 exist.Add(id);
252 }
253 }
254 }
255
256 bool[] results = new bool[uuids.Length];
257 for (int i = 0; i < uuids.Length; i++)
258 results[i] = exist.Contains(uuids[i]);
259 return results;
260 }
261
262 /// <summary>
263 /// Returns a list of AssetMetadata objects. The list is a subset of
264 /// the entire data set offset by <paramref name="start" /> containing
265 /// <paramref name="count" /> elements.
266 /// </summary>
267 /// <param name="start">The number of results to discard from the total data set.</param>
268 /// <param name="count">The number of rows the returned list should contain.</param>
269 /// <returns>A list of AssetMetadata objects.</returns>
270 public override List<AssetMetadata> FetchAssetMetadataSet(int start, int count)
271 {
272 List<AssetMetadata> retList = new List<AssetMetadata>(count);
273 string sql = @"WITH OrderedAssets AS
274 (
275 SELECT id, name, description, assetType, temporary, creatorid,
276 RowNumber = ROW_NUMBER() OVER (ORDER BY id)
277 FROM assets
278 )
279 SELECT *
280 FROM OrderedAssets
281 WHERE RowNumber BETWEEN @start AND @stop;";
282
283 using (SqlConnection conn = new SqlConnection(m_connectionString))
284 using (SqlCommand cmd = new SqlCommand(sql, conn))
285 {
286 cmd.Parameters.Add(m_database.CreateParameter("start", start));
287 cmd.Parameters.Add(m_database.CreateParameter("stop", start + count - 1));
288 conn.Open();
289 using (SqlDataReader reader = cmd.ExecuteReader())
290 {
291 while (reader.Read())
292 {
293 AssetMetadata metadata = new AssetMetadata();
294 metadata.FullID = DBGuid.FromDB(reader["id"]);
295 metadata.Name = (string)reader["name"];
296 metadata.Description = (string)reader["description"];
297 metadata.Type = Convert.ToSByte(reader["assetType"]);
298 metadata.Temporary = Convert.ToBoolean(reader["temporary"]);
299 metadata.CreatorID = (string)reader["creatorid"];
300 retList.Add(metadata);
301 }
302 }
303 }
304
305 return retList;
306 }
307
308 public override bool Delete(string id)
309 {
310 return false;
311 }
312 #endregion
313 }
314}
diff --git a/OpenSim/Data/MSSQL/MSSQLAuthenticationData.cs b/OpenSim/Data/MSSQL/MSSQLAuthenticationData.cs
deleted file mode 100644
index 1ae78c4..0000000
--- a/OpenSim/Data/MSSQL/MSSQLAuthenticationData.cs
+++ /dev/null
@@ -1,227 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ''AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using System.Data;
32using OpenMetaverse;
33using OpenSim.Framework;
34using System.Data.SqlClient;
35using System.Reflection;
36using System.Text;
37
38namespace OpenSim.Data.MSSQL
39{
40 public class MSSQLAuthenticationData : IAuthenticationData
41 {
42 private string m_Realm;
43 private List<string> m_ColumnNames = null;
44 private int m_LastExpire = 0;
45 private string m_ConnectionString;
46 private MSSQLManager m_database;
47
48 public MSSQLAuthenticationData(string connectionString, string realm)
49 {
50 m_Realm = realm;
51 m_ConnectionString = connectionString;
52 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
53 {
54 conn.Open();
55 Migration m = new Migration(conn, GetType().Assembly, "AuthStore");
56 m_database = new MSSQLManager(m_ConnectionString);
57 m.Update();
58 }
59 }
60
61 public AuthenticationData Get(UUID principalID)
62 {
63 AuthenticationData ret = new AuthenticationData();
64 ret.Data = new Dictionary<string, object>();
65
66 string sql = string.Format("select * from {0} where UUID = @principalID", m_Realm);
67
68 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
69 using (SqlCommand cmd = new SqlCommand(sql, conn))
70 {
71 cmd.Parameters.Add(m_database.CreateParameter("@principalID", principalID));
72 conn.Open();
73 using (SqlDataReader result = cmd.ExecuteReader())
74 {
75 if (result.Read())
76 {
77 ret.PrincipalID = principalID;
78
79 if (m_ColumnNames == null)
80 {
81 m_ColumnNames = new List<string>();
82
83 DataTable schemaTable = result.GetSchemaTable();
84 foreach (DataRow row in schemaTable.Rows)
85 m_ColumnNames.Add(row["ColumnName"].ToString());
86 }
87
88 foreach (string s in m_ColumnNames)
89 {
90 if (s == "UUID")
91 continue;
92
93 ret.Data[s] = result[s].ToString();
94 }
95 return ret;
96 }
97 }
98 }
99 return null;
100 }
101
102 public bool Store(AuthenticationData data)
103 {
104 if (data.Data.ContainsKey("UUID"))
105 data.Data.Remove("UUID");
106
107 string[] fields = new List<string>(data.Data.Keys).ToArray();
108 StringBuilder updateBuilder = new StringBuilder();
109
110 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
111 using (SqlCommand cmd = new SqlCommand())
112 {
113 updateBuilder.AppendFormat("update {0} set ", m_Realm);
114
115 bool first = true;
116 foreach (string field in fields)
117 {
118 if (!first)
119 updateBuilder.Append(", ");
120 updateBuilder.AppendFormat("{0} = @{0}",field);
121
122 first = false;
123 cmd.Parameters.Add(m_database.CreateParameter("@" + field, data.Data[field]));
124 }
125
126 updateBuilder.Append(" where UUID = @principalID");
127
128 cmd.CommandText = updateBuilder.ToString();
129 cmd.Connection = conn;
130 cmd.Parameters.Add(m_database.CreateParameter("@principalID", data.PrincipalID));
131
132 conn.Open();
133 if (cmd.ExecuteNonQuery() < 1)
134 {
135 StringBuilder insertBuilder = new StringBuilder();
136
137 insertBuilder.AppendFormat("insert into {0} (UUID, ", m_Realm);
138 insertBuilder.Append(String.Join(", ", fields));
139 insertBuilder.Append(") values (@principalID, @");
140 insertBuilder.Append(String.Join(", @", fields));
141 insertBuilder.Append(")");
142
143 cmd.CommandText = insertBuilder.ToString();
144
145 if (cmd.ExecuteNonQuery() < 1)
146 {
147 return false;
148 }
149 }
150 }
151 return true;
152 }
153
154 public bool SetDataItem(UUID principalID, string item, string value)
155 {
156 string sql = string.Format("update {0} set {1} = @{1} where UUID = @UUID", m_Realm, item);
157 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
158 using (SqlCommand cmd = new SqlCommand(sql, conn))
159 {
160 cmd.Parameters.Add(m_database.CreateParameter("@" + item, value));
161 conn.Open();
162 if (cmd.ExecuteNonQuery() > 0)
163 return true;
164 }
165 return false;
166 }
167
168 public bool SetToken(UUID principalID, string token, int lifetime)
169 {
170 if (System.Environment.TickCount - m_LastExpire > 30000)
171 DoExpire();
172
173 string sql = "insert into tokens (UUID, token, validity) values (@principalID, @token, @lifetime)";
174 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
175 using (SqlCommand cmd = new SqlCommand(sql, conn))
176 {
177 cmd.Parameters.Add(m_database.CreateParameter("@principalID", principalID));
178 cmd.Parameters.Add(m_database.CreateParameter("@token", token));
179 cmd.Parameters.Add(m_database.CreateParameter("@lifetime", DateTime.Now.AddMinutes(lifetime)));
180 conn.Open();
181
182 if (cmd.ExecuteNonQuery() > 0)
183 {
184 return true;
185 }
186 }
187 return false;
188 }
189
190 public bool CheckToken(UUID principalID, string token, int lifetime)
191 {
192 if (System.Environment.TickCount - m_LastExpire > 30000)
193 DoExpire();
194
195 DateTime validDate = DateTime.Now.AddMinutes(lifetime);
196 string sql = "update tokens set validity = @validDate where UUID = @principalID and token = @token and validity > GetDate()";
197 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
198 using (SqlCommand cmd = new SqlCommand(sql, conn))
199 {
200 cmd.Parameters.Add(m_database.CreateParameter("@principalID", principalID));
201 cmd.Parameters.Add(m_database.CreateParameter("@token", token));
202 cmd.Parameters.Add(m_database.CreateParameter("@validDate", validDate));
203 conn.Open();
204
205 if (cmd.ExecuteNonQuery() > 0)
206 {
207 return true;
208 }
209 }
210 return false;
211 }
212
213 private void DoExpire()
214 {
215 DateTime currentDateTime = DateTime.Now;
216 string sql = "delete from tokens where validity < @currentDateTime";
217 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
218 using (SqlCommand cmd = new SqlCommand(sql, conn))
219 {
220 conn.Open();
221 cmd.Parameters.Add(m_database.CreateParameter("@currentDateTime", currentDateTime));
222 cmd.ExecuteNonQuery();
223 }
224 m_LastExpire = System.Environment.TickCount;
225 }
226 }
227}
diff --git a/OpenSim/Data/MSSQL/MSSQLAvatarData.cs b/OpenSim/Data/MSSQL/MSSQLAvatarData.cs
deleted file mode 100644
index 301b424..0000000
--- a/OpenSim/Data/MSSQL/MSSQLAvatarData.cs
+++ /dev/null
@@ -1,71 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Data;
31using System.Reflection;
32using System.Threading;
33using log4net;
34using OpenMetaverse;
35using OpenSim.Framework;
36using System.Data.SqlClient;
37
38namespace OpenSim.Data.MSSQL
39{
40 /// <summary>
41 /// A MSSQL Interface for Avatar Storage
42 /// </summary>
43 public class MSSQLAvatarData : MSSQLGenericTableHandler<AvatarBaseData>,
44 IAvatarData
45 {
46// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47
48 public MSSQLAvatarData(string connectionString, string realm) :
49 base(connectionString, realm, "Avatar")
50 {
51 }
52
53 public bool Delete(UUID principalID, string name)
54 {
55 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
56 using (SqlCommand cmd = new SqlCommand())
57 {
58
59 cmd.CommandText = String.Format("DELETE FROM {0} where [PrincipalID] = @PrincipalID and [Name] = @Name", m_Realm);
60 cmd.Parameters.Add(m_database.CreateParameter("@PrincipalID", principalID.ToString()));
61 cmd.Parameters.Add(m_database.CreateParameter("@Name", name));
62 cmd.Connection = conn;
63 conn.Open();
64 if (cmd.ExecuteNonQuery() > 0)
65 return true;
66
67 return false;
68 }
69 }
70 }
71}
diff --git a/OpenSim/Data/MSSQL/MSSQLEstateData.cs b/OpenSim/Data/MSSQL/MSSQLEstateData.cs
deleted file mode 100644
index 1faa249..0000000
--- a/OpenSim/Data/MSSQL/MSSQLEstateData.cs
+++ /dev/null
@@ -1,577 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Data;
31using System.Data.SqlClient;
32using System.Reflection;
33using log4net;
34using OpenMetaverse;
35using OpenSim.Framework;
36using OpenSim.Region.Framework.Interfaces;
37
38namespace OpenSim.Data.MSSQL
39{
40 public class MSSQLEstateStore : IEstateDataStore
41 {
42 private const string _migrationStore = "EstateStore";
43
44 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45
46 private MSSQLManager _Database;
47 private string m_connectionString;
48 private FieldInfo[] _Fields;
49 private Dictionary<string, FieldInfo> _FieldMap = new Dictionary<string, FieldInfo>();
50
51 #region Public methods
52
53 public MSSQLEstateStore()
54 {
55 }
56
57 public MSSQLEstateStore(string connectionString)
58 {
59 Initialise(connectionString);
60 }
61
62 /// <summary>
63 /// Initialises the estatedata class.
64 /// </summary>
65 /// <param name="connectionString">connectionString.</param>
66 public void Initialise(string connectionString)
67 {
68 if (!string.IsNullOrEmpty(connectionString))
69 {
70 m_connectionString = connectionString;
71 _Database = new MSSQLManager(connectionString);
72 }
73
74 //Migration settings
75 using (SqlConnection conn = new SqlConnection(m_connectionString))
76 {
77 conn.Open();
78 Migration m = new Migration(conn, GetType().Assembly, "EstateStore");
79 m.Update();
80 }
81
82 //Interesting way to get parameters! Maybe implement that also with other types
83 Type t = typeof(EstateSettings);
84 _Fields = t.GetFields(BindingFlags.NonPublic |
85 BindingFlags.Instance |
86 BindingFlags.DeclaredOnly);
87
88 foreach (FieldInfo f in _Fields)
89 {
90 if (f.Name.Substring(0, 2) == "m_")
91 _FieldMap[f.Name.Substring(2)] = f;
92 }
93 }
94
95 /// <summary>
96 /// Loads the estate settings.
97 /// </summary>
98 /// <param name="regionID">region ID.</param>
99 /// <returns></returns>
100 public EstateSettings LoadEstateSettings(UUID regionID, bool create)
101 {
102 EstateSettings es = new EstateSettings();
103
104 string sql = "select estate_settings." + String.Join(",estate_settings.", FieldList) + " from estate_map left join estate_settings on estate_map.EstateID = estate_settings.EstateID where estate_settings.EstateID is not null and RegionID = @RegionID";
105
106 bool insertEstate = false;
107 using (SqlConnection conn = new SqlConnection(m_connectionString))
108 using (SqlCommand cmd = new SqlCommand(sql, conn))
109 {
110 cmd.Parameters.Add(_Database.CreateParameter("@RegionID", regionID));
111 conn.Open();
112 using (SqlDataReader reader = cmd.ExecuteReader())
113 {
114 if (reader.Read())
115 {
116 foreach (string name in FieldList)
117 {
118 FieldInfo f = _FieldMap[name];
119 object v = reader[name];
120 if (f.FieldType == typeof(bool))
121 {
122 f.SetValue(es, Convert.ToInt32(v) != 0);
123 }
124 else if (f.FieldType == typeof(UUID))
125 {
126 f.SetValue(es, new UUID((Guid)v)); // uuid);
127 }
128 else if (f.FieldType == typeof(string))
129 {
130 f.SetValue(es, v.ToString());
131 }
132 else if (f.FieldType == typeof(UInt32))
133 {
134 f.SetValue(es, Convert.ToUInt32(v));
135 }
136 else if (f.FieldType == typeof(Single))
137 {
138 f.SetValue(es, Convert.ToSingle(v));
139 }
140 else
141 f.SetValue(es, v);
142 }
143 }
144 else
145 {
146 insertEstate = true;
147 }
148 }
149 }
150
151 if (insertEstate && create)
152 {
153 DoCreate(es);
154 LinkRegion(regionID, (int)es.EstateID);
155 }
156
157 LoadBanList(es);
158
159 es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
160 es.EstateAccess = LoadUUIDList(es.EstateID, "estate_users");
161 es.EstateGroups = LoadUUIDList(es.EstateID, "estate_groups");
162
163 //Set event
164 es.OnSave += StoreEstateSettings;
165 return es;
166 }
167
168 public EstateSettings CreateNewEstate()
169 {
170 EstateSettings es = new EstateSettings();
171 es.OnSave += StoreEstateSettings;
172
173 DoCreate(es);
174
175 LoadBanList(es);
176
177 es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
178 es.EstateAccess = LoadUUIDList(es.EstateID, "estate_users");
179 es.EstateGroups = LoadUUIDList(es.EstateID, "estate_groups");
180
181 return es;
182 }
183
184 private void DoCreate(EstateSettings es)
185 {
186 List<string> names = new List<string>(FieldList);
187
188 names.Remove("EstateID");
189
190 string sql = string.Format("insert into estate_settings ({0}) values ( @{1})", String.Join(",", names.ToArray()), String.Join(", @", names.ToArray()));
191
192 //_Log.Debug("[DB ESTATE]: SQL: " + sql);
193 using (SqlConnection conn = new SqlConnection(m_connectionString))
194 using (SqlCommand insertCommand = new SqlCommand(sql, conn))
195 {
196 insertCommand.CommandText = sql + " SET @ID = SCOPE_IDENTITY()";
197
198 foreach (string name in names)
199 {
200 insertCommand.Parameters.Add(_Database.CreateParameter("@" + name, _FieldMap[name].GetValue(es)));
201 }
202 SqlParameter idParameter = new SqlParameter("@ID", SqlDbType.Int);
203 idParameter.Direction = ParameterDirection.Output;
204 insertCommand.Parameters.Add(idParameter);
205 conn.Open();
206 insertCommand.ExecuteNonQuery();
207
208 es.EstateID = Convert.ToUInt32(idParameter.Value);
209 }
210
211 //TODO check if this is needed??
212 es.Save();
213 }
214
215 /// <summary>
216 /// Stores the estate settings.
217 /// </summary>
218 /// <param name="es">estate settings</param>
219 public void StoreEstateSettings(EstateSettings es)
220 {
221 List<string> names = new List<string>(FieldList);
222
223 names.Remove("EstateID");
224
225 string sql = string.Format("UPDATE estate_settings SET ");
226 foreach (string name in names)
227 {
228 sql += name + " = @" + name + ", ";
229 }
230 sql = sql.Remove(sql.LastIndexOf(","));
231 sql += " WHERE EstateID = @EstateID";
232
233 using (SqlConnection conn = new SqlConnection(m_connectionString))
234 using (SqlCommand cmd = new SqlCommand(sql, conn))
235 {
236 foreach (string name in names)
237 {
238 cmd.Parameters.Add(_Database.CreateParameter("@" + name, _FieldMap[name].GetValue(es)));
239 }
240
241 cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID));
242 conn.Open();
243 cmd.ExecuteNonQuery();
244 }
245
246 SaveBanList(es);
247 SaveUUIDList(es.EstateID, "estate_managers", es.EstateManagers);
248 SaveUUIDList(es.EstateID, "estate_users", es.EstateAccess);
249 SaveUUIDList(es.EstateID, "estate_groups", es.EstateGroups);
250 }
251
252 #endregion
253
254 #region Private methods
255
256 private string[] FieldList
257 {
258 get { return new List<string>(_FieldMap.Keys).ToArray(); }
259 }
260
261 private void LoadBanList(EstateSettings es)
262 {
263 es.ClearBans();
264
265 string sql = "select bannedUUID from estateban where EstateID = @EstateID";
266
267 using (SqlConnection conn = new SqlConnection(m_connectionString))
268 using (SqlCommand cmd = new SqlCommand(sql, conn))
269 {
270 SqlParameter idParameter = new SqlParameter("@EstateID", SqlDbType.Int);
271 idParameter.Value = es.EstateID;
272 cmd.Parameters.Add(idParameter);
273 conn.Open();
274 using (SqlDataReader reader = cmd.ExecuteReader())
275 {
276 while (reader.Read())
277 {
278 EstateBan eb = new EstateBan();
279
280 eb.BannedUserID = new UUID((Guid)reader["bannedUUID"]); //uuid;
281 eb.BannedHostAddress = "0.0.0.0";
282 eb.BannedHostIPMask = "0.0.0.0";
283 es.AddBan(eb);
284 }
285 }
286 }
287 }
288
289 private UUID[] LoadUUIDList(uint estateID, string table)
290 {
291 List<UUID> uuids = new List<UUID>();
292
293 string sql = string.Format("select uuid from {0} where EstateID = @EstateID", table);
294
295 using (SqlConnection conn = new SqlConnection(m_connectionString))
296 using (SqlCommand cmd = new SqlCommand(sql, conn))
297 {
298 cmd.Parameters.Add(_Database.CreateParameter("@EstateID", estateID));
299 conn.Open();
300 using (SqlDataReader reader = cmd.ExecuteReader())
301 {
302 while (reader.Read())
303 {
304 uuids.Add(new UUID((Guid)reader["uuid"])); //uuid);
305 }
306 }
307 }
308
309 return uuids.ToArray();
310 }
311
312 private void SaveBanList(EstateSettings es)
313 {
314 //Delete first
315 using (SqlConnection conn = new SqlConnection(m_connectionString))
316 {
317 conn.Open();
318 using (SqlCommand cmd = conn.CreateCommand())
319 {
320 cmd.CommandText = "delete from estateban where EstateID = @EstateID";
321 cmd.Parameters.AddWithValue("@EstateID", (int)es.EstateID);
322 cmd.ExecuteNonQuery();
323
324 //Insert after
325 cmd.CommandText = "insert into estateban (EstateID, bannedUUID,bannedIp, bannedIpHostMask, bannedNameMask) values ( @EstateID, @bannedUUID, '','','' )";
326 cmd.Parameters.AddWithValue("@bannedUUID", Guid.Empty);
327 foreach (EstateBan b in es.EstateBans)
328 {
329 cmd.Parameters["@bannedUUID"].Value = b.BannedUserID.Guid;
330 cmd.ExecuteNonQuery();
331 }
332 }
333 }
334 }
335
336 private void SaveUUIDList(uint estateID, string table, UUID[] data)
337 {
338 using (SqlConnection conn = new SqlConnection(m_connectionString))
339 {
340 conn.Open();
341 using (SqlCommand cmd = conn.CreateCommand())
342 {
343 cmd.Parameters.AddWithValue("@EstateID", (int)estateID);
344 cmd.CommandText = string.Format("delete from {0} where EstateID = @EstateID", table);
345 cmd.ExecuteNonQuery();
346
347 cmd.CommandText = string.Format("insert into {0} (EstateID, uuid) values ( @EstateID, @uuid )", table);
348 cmd.Parameters.AddWithValue("@uuid", Guid.Empty);
349 foreach (UUID uuid in data)
350 {
351 cmd.Parameters["@uuid"].Value = uuid.Guid; //.ToString(); //TODO check if this works
352 cmd.ExecuteNonQuery();
353 }
354 }
355 }
356 }
357
358 public EstateSettings LoadEstateSettings(int estateID)
359 {
360 EstateSettings es = new EstateSettings();
361 string sql = "select estate_settings." + String.Join(",estate_settings.", FieldList) + " from estate_settings where EstateID = @EstateID";
362 using (SqlConnection conn = new SqlConnection(m_connectionString))
363 {
364 conn.Open();
365 using (SqlCommand cmd = new SqlCommand(sql, conn))
366 {
367 cmd.Parameters.AddWithValue("@EstateID", (int)estateID);
368 using (SqlDataReader reader = cmd.ExecuteReader())
369 {
370 if (reader.Read())
371 {
372 foreach (string name in FieldList)
373 {
374 FieldInfo f = _FieldMap[name];
375 object v = reader[name];
376 if (f.FieldType == typeof(bool))
377 {
378 f.SetValue(es, Convert.ToInt32(v) != 0);
379 }
380 else if (f.FieldType == typeof(UUID))
381 {
382 f.SetValue(es, new UUID((Guid)v)); // uuid);
383 }
384 else if (f.FieldType == typeof(string))
385 {
386 f.SetValue(es, v.ToString());
387 }
388 else if (f.FieldType == typeof(UInt32))
389 {
390 f.SetValue(es, Convert.ToUInt32(v));
391 }
392 else if (f.FieldType == typeof(Single))
393 {
394 f.SetValue(es, Convert.ToSingle(v));
395 }
396 else
397 f.SetValue(es, v);
398 }
399 }
400
401 }
402 }
403 }
404 LoadBanList(es);
405
406 es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
407 es.EstateAccess = LoadUUIDList(es.EstateID, "estate_users");
408 es.EstateGroups = LoadUUIDList(es.EstateID, "estate_groups");
409
410 //Set event
411 es.OnSave += StoreEstateSettings;
412 return es;
413
414 }
415
416 public List<EstateSettings> LoadEstateSettingsAll()
417 {
418 List<EstateSettings> allEstateSettings = new List<EstateSettings>();
419
420 List<int> allEstateIds = GetEstatesAll();
421
422 foreach (int estateId in allEstateIds)
423 allEstateSettings.Add(LoadEstateSettings(estateId));
424
425 return allEstateSettings;
426 }
427
428 public List<int> GetEstates(string search)
429 {
430 List<int> result = new List<int>();
431 string sql = "select estateID from estate_settings where EstateName = @EstateName";
432 using (SqlConnection conn = new SqlConnection(m_connectionString))
433 {
434 conn.Open();
435 using (SqlCommand cmd = new SqlCommand(sql, conn))
436 {
437 cmd.Parameters.AddWithValue("@EstateName", search);
438
439 using (IDataReader reader = cmd.ExecuteReader())
440 {
441 while (reader.Read())
442 {
443 result.Add(Convert.ToInt32(reader["EstateID"]));
444 }
445 reader.Close();
446 }
447 }
448 }
449
450 return result;
451 }
452
453 public List<int> GetEstatesAll()
454 {
455 List<int> result = new List<int>();
456 string sql = "select estateID from estate_settings";
457 using (SqlConnection conn = new SqlConnection(m_connectionString))
458 {
459 conn.Open();
460 using (SqlCommand cmd = new SqlCommand(sql, conn))
461 {
462 using (IDataReader reader = cmd.ExecuteReader())
463 {
464 while (reader.Read())
465 {
466 result.Add(Convert.ToInt32(reader["EstateID"]));
467 }
468 reader.Close();
469 }
470 }
471 }
472
473 return result;
474 }
475
476 public List<int> GetEstatesByOwner(UUID ownerID)
477 {
478 List<int> result = new List<int>();
479 string sql = "select estateID from estate_settings where EstateOwner = @EstateOwner";
480 using (SqlConnection conn = new SqlConnection(m_connectionString))
481 {
482 conn.Open();
483 using (SqlCommand cmd = new SqlCommand(sql, conn))
484 {
485 cmd.Parameters.AddWithValue("@EstateOwner", ownerID);
486
487 using (IDataReader reader = cmd.ExecuteReader())
488 {
489 while (reader.Read())
490 {
491 result.Add(Convert.ToInt32(reader["EstateID"]));
492 }
493 reader.Close();
494 }
495 }
496 }
497
498 return result;
499 }
500
501 public bool LinkRegion(UUID regionID, int estateID)
502 {
503 string deleteSQL = "delete from estate_map where RegionID = @RegionID";
504 string insertSQL = "insert into estate_map values (@RegionID, @EstateID)";
505 using (SqlConnection conn = new SqlConnection(m_connectionString))
506 {
507 conn.Open();
508 SqlTransaction transaction = conn.BeginTransaction();
509
510 try
511 {
512 using (SqlCommand cmd = new SqlCommand(deleteSQL, conn))
513 {
514 cmd.Transaction = transaction;
515 cmd.Parameters.AddWithValue("@RegionID", regionID.Guid);
516
517 cmd.ExecuteNonQuery();
518 }
519
520 using (SqlCommand cmd = new SqlCommand(insertSQL, conn))
521 {
522 cmd.Transaction = transaction;
523 cmd.Parameters.AddWithValue("@RegionID", regionID.Guid);
524 cmd.Parameters.AddWithValue("@EstateID", estateID);
525
526 int ret = cmd.ExecuteNonQuery();
527
528 if (ret != 0)
529 transaction.Commit();
530 else
531 transaction.Rollback();
532
533 return (ret != 0);
534 }
535 }
536 catch (Exception ex)
537 {
538 m_log.Error("[REGION DB]: LinkRegion failed: " + ex.Message);
539 transaction.Rollback();
540 }
541 }
542 return false;
543 }
544
545 public List<UUID> GetRegions(int estateID)
546 {
547 List<UUID> result = new List<UUID>();
548 string sql = "select RegionID from estate_map where EstateID = @EstateID";
549 using (SqlConnection conn = new SqlConnection(m_connectionString))
550 {
551 conn.Open();
552 using (SqlCommand cmd = new SqlCommand(sql, conn))
553 {
554 cmd.Parameters.AddWithValue("@EstateID", estateID);
555
556 using (IDataReader reader = cmd.ExecuteReader())
557 {
558 while (reader.Read())
559 {
560 result.Add(DBGuid.FromDB(reader["RegionID"]));
561 }
562 reader.Close();
563 }
564 }
565 }
566
567 return result;
568 }
569
570 public bool DeleteEstate(int estateID)
571 {
572 // TODO: Implementation!
573 return false;
574 }
575 #endregion
576 }
577}
diff --git a/OpenSim/Data/MSSQL/MSSQLFriendsData.cs b/OpenSim/Data/MSSQL/MSSQLFriendsData.cs
deleted file mode 100644
index 1af2dce..0000000
--- a/OpenSim/Data/MSSQL/MSSQLFriendsData.cs
+++ /dev/null
@@ -1,99 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ''AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using System.Data;
32using OpenMetaverse;
33using OpenSim.Framework;
34using System.Data.SqlClient;
35using System.Reflection;
36using System.Text;
37
38namespace OpenSim.Data.MSSQL
39{
40 public class MSSQLFriendsData : MSSQLGenericTableHandler<FriendsData>, IFriendsData
41 {
42 public MSSQLFriendsData(string connectionString, string realm)
43 : base(connectionString, realm, "FriendsStore")
44 {
45 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
46 {
47 conn.Open();
48 Migration m = new Migration(conn, GetType().Assembly, "FriendsStore");
49 m.Update();
50 }
51 }
52
53 public bool Delete(UUID principalID, string friend)
54 {
55 return Delete(principalID.ToString(), friend);
56 }
57
58 public override bool Delete(string principalID, string friend)
59 {
60 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
61 using (SqlCommand cmd = new SqlCommand())
62 {
63 cmd.CommandText = String.Format("delete from {0} where PrincipalID = @PrincipalID and Friend = @Friend", m_Realm);
64 cmd.Parameters.Add(m_database.CreateParameter("@PrincipalID", principalID.ToString()));
65 cmd.Parameters.Add(m_database.CreateParameter("@Friend", friend));
66 cmd.Connection = conn;
67 conn.Open();
68 cmd.ExecuteNonQuery();
69
70 return true;
71 }
72 }
73
74 public FriendsData[] GetFriends(UUID principalID)
75 {
76 return GetFriends(principalID.ToString());
77 }
78
79 public FriendsData[] GetFriends(string principalID)
80 {
81 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
82 using (SqlCommand cmd = new SqlCommand())
83 {
84
85 cmd.CommandText = String.Format("select a.*,case when b.Flags is null then -1 else b.Flags end as TheirFlags from {0} as a left join {0} as b on a.PrincipalID = b.Friend and a.Friend = b.PrincipalID where a.PrincipalID = @PrincipalID", m_Realm);
86 cmd.Parameters.Add(m_database.CreateParameter("@PrincipalID", principalID.ToString()));
87 cmd.Connection = conn;
88 conn.Open();
89 return DoQuery(cmd);
90 }
91 }
92
93 public FriendsData[] GetFriends(Guid principalID)
94 {
95 return GetFriends(principalID.ToString());
96 }
97
98 }
99}
diff --git a/OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs b/OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs
deleted file mode 100644
index 4145d95..0000000
--- a/OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs
+++ /dev/null
@@ -1,384 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Data;
31using System.Reflection;
32using log4net;
33using System.Data.SqlClient;
34using OpenMetaverse;
35using OpenSim.Framework;
36using OpenSim.Region.Framework.Interfaces;
37using System.Text;
38
39namespace OpenSim.Data.MSSQL
40{
41 public class MSSQLGenericTableHandler<T> where T : class, new()
42 {
43// private static readonly ILog m_log =
44// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45
46 protected string m_ConnectionString;
47 protected MSSQLManager m_database; //used for parameter type translation
48 protected Dictionary<string, FieldInfo> m_Fields =
49 new Dictionary<string, FieldInfo>();
50
51 protected List<string> m_ColumnNames = null;
52 protected string m_Realm;
53 protected FieldInfo m_DataField = null;
54
55 public MSSQLGenericTableHandler(string connectionString,
56 string realm, string storeName)
57 {
58 m_Realm = realm;
59
60 m_ConnectionString = connectionString;
61
62 if (storeName != String.Empty)
63 {
64 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
65 {
66 conn.Open();
67 Migration m = new Migration(conn, GetType().Assembly, storeName);
68 m.Update();
69 }
70
71 }
72 m_database = new MSSQLManager(m_ConnectionString);
73
74 Type t = typeof(T);
75 FieldInfo[] fields = t.GetFields(BindingFlags.Public |
76 BindingFlags.Instance |
77 BindingFlags.DeclaredOnly);
78
79 if (fields.Length == 0)
80 return;
81
82 foreach (FieldInfo f in fields)
83 {
84 if (f.Name != "Data")
85 m_Fields[f.Name] = f;
86 else
87 m_DataField = f;
88 }
89
90 }
91
92 private void CheckColumnNames(SqlDataReader reader)
93 {
94 if (m_ColumnNames != null)
95 return;
96
97 m_ColumnNames = new List<string>();
98
99 DataTable schemaTable = reader.GetSchemaTable();
100 foreach (DataRow row in schemaTable.Rows)
101 {
102 if (row["ColumnName"] != null &&
103 (!m_Fields.ContainsKey(row["ColumnName"].ToString())))
104 m_ColumnNames.Add(row["ColumnName"].ToString());
105
106 }
107 }
108
109 private List<string> GetConstraints()
110 {
111 List<string> constraints = new List<string>();
112 string query = string.Format(@"SELECT
113 COL_NAME(ic.object_id,ic.column_id) AS column_name
114 FROM sys.indexes AS i
115 INNER JOIN sys.index_columns AS ic
116 ON i.object_id = ic.object_id AND i.index_id = ic.index_id
117 WHERE i.is_primary_key = 1
118 AND i.object_id = OBJECT_ID('{0}');", m_Realm);
119 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
120 using (SqlCommand cmd = new SqlCommand(query, conn))
121 {
122 conn.Open();
123 using (SqlDataReader rdr = cmd.ExecuteReader())
124 {
125 while (rdr.Read())
126 {
127 // query produces 0 to many rows of single column, so always add the first item in each row
128 constraints.Add((string)rdr[0]);
129 }
130 }
131 return constraints;
132 }
133 }
134
135 public virtual T[] Get(string field, string key)
136 {
137 return Get(new string[] { field }, new string[] { key });
138 }
139
140 public virtual T[] Get(string[] fields, string[] keys)
141 {
142 if (fields.Length != keys.Length)
143 return new T[0];
144
145 List<string> terms = new List<string>();
146
147 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
148 using (SqlCommand cmd = new SqlCommand())
149 {
150
151 for (int i = 0; i < fields.Length; i++)
152 {
153 cmd.Parameters.Add(m_database.CreateParameter(fields[i], keys[i]));
154 terms.Add("[" + fields[i] + "] = @" + fields[i]);
155 }
156
157 string where = String.Join(" AND ", terms.ToArray());
158
159 string query = String.Format("SELECT * FROM {0} WHERE {1}",
160 m_Realm, where);
161
162 cmd.Connection = conn;
163 cmd.CommandText = query;
164 conn.Open();
165 return DoQuery(cmd);
166 }
167 }
168
169 protected T[] DoQuery(SqlCommand cmd)
170 {
171 List<T> result = new List<T>();
172 using (SqlDataReader reader = cmd.ExecuteReader())
173 {
174 if (reader == null)
175 return new T[0];
176
177 CheckColumnNames(reader);
178
179 while (reader.Read())
180 {
181 T row = new T();
182
183 foreach (string name in m_Fields.Keys)
184 {
185 if (m_Fields[name].GetValue(row) is bool)
186 {
187 int v = Convert.ToInt32(reader[name]);
188 m_Fields[name].SetValue(row, v != 0 ? true : false);
189 }
190 else if (m_Fields[name].GetValue(row) is UUID)
191 {
192 UUID uuid = UUID.Zero;
193
194 UUID.TryParse(reader[name].ToString(), out uuid);
195 m_Fields[name].SetValue(row, uuid);
196 }
197 else if (m_Fields[name].GetValue(row) is int)
198 {
199 int v = Convert.ToInt32(reader[name]);
200 m_Fields[name].SetValue(row, v);
201 }
202 else
203 {
204 m_Fields[name].SetValue(row, reader[name]);
205 }
206 }
207
208 if (m_DataField != null)
209 {
210 Dictionary<string, string> data =
211 new Dictionary<string, string>();
212
213 foreach (string col in m_ColumnNames)
214 {
215 data[col] = reader[col].ToString();
216 if (data[col] == null)
217 data[col] = String.Empty;
218 }
219
220 m_DataField.SetValue(row, data);
221 }
222
223 result.Add(row);
224 }
225 return result.ToArray();
226 }
227 }
228
229 public virtual T[] Get(string where)
230 {
231 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
232 using (SqlCommand cmd = new SqlCommand())
233 {
234
235 string query = String.Format("SELECT * FROM {0} WHERE {1}",
236 m_Realm, where);
237 cmd.Connection = conn;
238 cmd.CommandText = query;
239
240 //m_log.WarnFormat("[MSSQLGenericTable]: SELECT {0} WHERE {1}", m_Realm, where);
241
242 conn.Open();
243 return DoQuery(cmd);
244 }
245 }
246
247 public virtual bool Store(T row)
248 {
249 List<string> constraintFields = GetConstraints();
250 List<KeyValuePair<string, string>> constraints = new List<KeyValuePair<string, string>>();
251
252 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
253 using (SqlCommand cmd = new SqlCommand())
254 {
255
256 StringBuilder query = new StringBuilder();
257 List<String> names = new List<String>();
258 List<String> values = new List<String>();
259
260 foreach (FieldInfo fi in m_Fields.Values)
261 {
262 names.Add(fi.Name);
263 values.Add("@" + fi.Name);
264 // Temporarily return more information about what field is unexpectedly null for
265 // http://opensimulator.org/mantis/view.php?id=5403. This might be due to a bug in the
266 // InventoryTransferModule or we may be required to substitute a DBNull here.
267 if (fi.GetValue(row) == null)
268 throw new NullReferenceException(
269 string.Format(
270 "[MSSQL GENERIC TABLE HANDLER]: Trying to store field {0} for {1} which is unexpectedly null",
271 fi.Name, row));
272
273 if (constraintFields.Count > 0 && constraintFields.Contains(fi.Name))
274 {
275 constraints.Add(new KeyValuePair<string, string>(fi.Name, fi.GetValue(row).ToString()));
276 }
277 cmd.Parameters.Add(m_database.CreateParameter(fi.Name, fi.GetValue(row).ToString()));
278 }
279
280 if (m_DataField != null)
281 {
282 Dictionary<string, string> data =
283 (Dictionary<string, string>)m_DataField.GetValue(row);
284
285 foreach (KeyValuePair<string, string> kvp in data)
286 {
287 if (constraintFields.Count > 0 && constraintFields.Contains(kvp.Key))
288 {
289 constraints.Add(new KeyValuePair<string, string>(kvp.Key, kvp.Key));
290 }
291 names.Add(kvp.Key);
292 values.Add("@" + kvp.Key);
293 cmd.Parameters.Add(m_database.CreateParameter("@" + kvp.Key, kvp.Value));
294 }
295
296 }
297
298 query.AppendFormat("UPDATE {0} SET ", m_Realm);
299 int i = 0;
300 for (i = 0; i < names.Count - 1; i++)
301 {
302 query.AppendFormat("[{0}] = {1}, ", names[i], values[i]);
303 }
304 query.AppendFormat("[{0}] = {1} ", names[i], values[i]);
305 if (constraints.Count > 0)
306 {
307 List<string> terms = new List<string>();
308 for (int j = 0; j < constraints.Count; j++)
309 {
310 terms.Add(" [" + constraints[j].Key + "] = @" + constraints[j].Key);
311 }
312 string where = String.Join(" AND ", terms.ToArray());
313 query.AppendFormat(" WHERE {0} ", where);
314
315 }
316 cmd.Connection = conn;
317 cmd.CommandText = query.ToString();
318
319 conn.Open();
320 if (cmd.ExecuteNonQuery() > 0)
321 {
322 //m_log.WarnFormat("[MSSQLGenericTable]: Updating {0}", m_Realm);
323 return true;
324 }
325 else
326 {
327 // assume record has not yet been inserted
328
329 query = new StringBuilder();
330 query.AppendFormat("INSERT INTO {0} ([", m_Realm);
331 query.Append(String.Join("],[", names.ToArray()));
332 query.Append("]) values (" + String.Join(",", values.ToArray()) + ")");
333 cmd.Connection = conn;
334 cmd.CommandText = query.ToString();
335 //m_log.WarnFormat("[MSSQLGenericTable]: Inserting into {0}", m_Realm);
336 if (conn.State != ConnectionState.Open)
337 conn.Open();
338 if (cmd.ExecuteNonQuery() > 0)
339 return true;
340 }
341
342 return false;
343 }
344 }
345
346 public virtual bool Delete(string field, string key)
347 {
348 return Delete(new string[] { field }, new string[] { key });
349 }
350
351 public virtual bool Delete(string[] fields, string[] keys)
352 {
353 if (fields.Length != keys.Length)
354 return false;
355
356 List<string> terms = new List<string>();
357
358 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
359 using (SqlCommand cmd = new SqlCommand())
360 {
361 for (int i = 0; i < fields.Length; i++)
362 {
363 cmd.Parameters.Add(m_database.CreateParameter(fields[i], keys[i]));
364 terms.Add("[" + fields[i] + "] = @" + fields[i]);
365 }
366
367 string where = String.Join(" AND ", terms.ToArray());
368
369 string query = String.Format("DELETE FROM {0} WHERE {1}", m_Realm, where);
370
371 cmd.Connection = conn;
372 cmd.CommandText = query;
373 conn.Open();
374
375 if (cmd.ExecuteNonQuery() > 0)
376 {
377 //m_log.Warn("[MSSQLGenericTable]: " + deleteCommand);
378 return true;
379 }
380 return false;
381 }
382 }
383 }
384}
diff --git a/OpenSim/Data/MSSQL/MSSQLGridUserData.cs b/OpenSim/Data/MSSQL/MSSQLGridUserData.cs
deleted file mode 100644
index 8ec8d49..0000000
--- a/OpenSim/Data/MSSQL/MSSQLGridUserData.cs
+++ /dev/null
@@ -1,69 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Data;
31using System.Reflection;
32using System.Threading;
33using log4net;
34using OpenMetaverse;
35using OpenSim.Framework;
36using System.Data.SqlClient;
37
38namespace OpenSim.Data.MSSQL
39{
40 /// <summary>
41 /// A MSSQL Interface for Avatar Storage
42 /// </summary>
43 public class MSSQLGridUserData : MSSQLGenericTableHandler<GridUserData>,
44 IGridUserData
45 {
46// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47
48 public MSSQLGridUserData(string connectionString, string realm) :
49 base(connectionString, realm, "GridUserStore")
50 {
51 }
52
53 public new GridUserData Get(string userID)
54 {
55 GridUserData[] ret = Get("UserID", userID);
56
57 if (ret.Length == 0)
58 return null;
59
60 return ret[0];
61 }
62
63 public GridUserData[] GetAll(string userID)
64 {
65 return base.Get(String.Format("UserID LIKE '{0}%'", userID));
66 }
67
68 }
69}
diff --git a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs b/OpenSim/Data/MSSQL/MSSQLInventoryData.cs
deleted file mode 100644
index 961593f..0000000
--- a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs
+++ /dev/null
@@ -1,831 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Data;
31using System.Data.SqlClient;
32using System.Reflection;
33using log4net;
34using OpenMetaverse;
35using OpenSim.Framework;
36
37namespace OpenSim.Data.MSSQL
38{
39 /// <summary>
40 /// A MSSQL interface for the inventory server
41 /// </summary>
42 public class MSSQLInventoryData : IInventoryDataPlugin
43 {
44 private const string _migrationStore = "InventoryStore";
45
46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47
48 /// <summary>
49 /// The database manager
50 /// </summary>
51 private MSSQLManager database;
52 private string m_connectionString;
53
54 #region IPlugin members
55
56 [Obsolete("Cannot be default-initialized!")]
57 public void Initialise()
58 {
59 m_log.Info("[MSSQLInventoryData]: " + Name + " cannot be default-initialized!");
60 throw new PluginNotInitialisedException(Name);
61 }
62
63 /// <summary>
64 /// Loads and initialises the MSSQL inventory storage interface
65 /// </summary>
66 /// <param name="connectionString">connect string</param>
67 /// <remarks>use mssql_connection.ini</remarks>
68 public void Initialise(string connectionString)
69 {
70 m_connectionString = connectionString;
71 database = new MSSQLManager(connectionString);
72
73 //New migrations check of store
74 database.CheckMigration(_migrationStore);
75 }
76
77 /// <summary>
78 /// The name of this DB provider
79 /// </summary>
80 /// <returns>A string containing the name of the DB provider</returns>
81 public string Name
82 {
83 get { return "MSSQL Inventory Data Interface"; }
84 }
85
86 /// <summary>
87 /// Closes this DB provider
88 /// </summary>
89 public void Dispose()
90 {
91 database = null;
92 }
93
94 /// <summary>
95 /// Returns the version of this DB provider
96 /// </summary>
97 /// <returns>A string containing the DB provider</returns>
98 public string Version
99 {
100 get { return database.getVersion(); }
101 }
102
103 #endregion
104
105 #region Folder methods
106
107 /// <summary>
108 /// Returns a list of the root folders within a users inventory
109 /// </summary>
110 /// <param name="user">The user whos inventory is to be searched</param>
111 /// <returns>A list of folder objects</returns>
112 public List<InventoryFolderBase> getUserRootFolders(UUID user)
113 {
114 if (user == UUID.Zero)
115 return new List<InventoryFolderBase>();
116
117 return getInventoryFolders(UUID.Zero, user);
118 }
119
120 /// <summary>
121 /// see InventoryItemBase.getUserRootFolder
122 /// </summary>
123 /// <param name="user">the User UUID</param>
124 /// <returns></returns>
125 public InventoryFolderBase getUserRootFolder(UUID user)
126 {
127 List<InventoryFolderBase> items = getUserRootFolders(user);
128
129 InventoryFolderBase rootFolder = null;
130
131 // There should only ever be one root folder for a user. However, if there's more
132 // than one we'll simply use the first one rather than failing. It would be even
133 // nicer to print some message to this effect, but this feels like it's too low a
134 // to put such a message out, and it's too minor right now to spare the time to
135 // suitably refactor.
136 if (items.Count > 0)
137 {
138 rootFolder = items[0];
139 }
140
141 return rootFolder;
142 }
143
144 /// <summary>
145 /// Returns a list of folders in a users inventory contained within the specified folder
146 /// </summary>
147 /// <param name="parentID">The folder to search</param>
148 /// <returns>A list of inventory folders</returns>
149 public List<InventoryFolderBase> getInventoryFolders(UUID parentID)
150 {
151 return getInventoryFolders(parentID, UUID.Zero);
152 }
153
154 /// <summary>
155 /// Returns a specified inventory folder
156 /// </summary>
157 /// <param name="folderID">The folder to return</param>
158 /// <returns>A folder class</returns>
159 public InventoryFolderBase getInventoryFolder(UUID folderID)
160 {
161 string sql = "SELECT * FROM inventoryfolders WHERE folderID = @folderID";
162 using (SqlConnection conn = new SqlConnection(m_connectionString))
163 using (SqlCommand cmd = new SqlCommand(sql, conn))
164 {
165 cmd.Parameters.Add(database.CreateParameter("folderID", folderID));
166 conn.Open();
167 using (SqlDataReader reader = cmd.ExecuteReader())
168 {
169 if (reader.Read())
170 {
171 return readInventoryFolder(reader);
172 }
173 }
174 }
175 m_log.InfoFormat("[INVENTORY DB] : Found no inventory folder with ID : {0}", folderID);
176 return null;
177 }
178
179 /// <summary>
180 /// Returns all child folders in the hierarchy from the parent folder and down.
181 /// Does not return the parent folder itself.
182 /// </summary>
183 /// <param name="parentID">The folder to get subfolders for</param>
184 /// <returns>A list of inventory folders</returns>
185 public List<InventoryFolderBase> getFolderHierarchy(UUID parentID)
186 {
187 //Note maybe change this to use a Dataset that loading in all folders of a user and then go throw it that way.
188 //Note this is changed so it opens only one connection to the database and not everytime it wants to get data.
189
190 /* NOTE: the implementation below is very inefficient (makes a separate request to get subfolders for
191 * every found folder, recursively). Inventory code for other DBs has been already rewritten to get ALL
192 * inventory for a specific user at once.
193 *
194 * Meanwhile, one little thing is corrected: getFolderHierarchy(UUID.Zero) doesn't make sense and should never
195 * be used, so check for that and return an empty list.
196 */
197
198 List<InventoryFolderBase> folders = new List<InventoryFolderBase>();
199
200 if (parentID == UUID.Zero)
201 return folders;
202
203 string sql = "SELECT * FROM inventoryfolders WHERE parentFolderID = @parentID";
204 using (SqlConnection conn = new SqlConnection(m_connectionString))
205 using (SqlCommand cmd = new SqlCommand(sql, conn))
206 {
207 cmd.Parameters.Add(database.CreateParameter("@parentID", parentID));
208 conn.Open();
209 folders.AddRange(getInventoryFolders(cmd));
210
211 List<InventoryFolderBase> tempFolders = new List<InventoryFolderBase>();
212
213 foreach (InventoryFolderBase folderBase in folders)
214 {
215 tempFolders.AddRange(getFolderHierarchy(folderBase.ID, cmd));
216 }
217 if (tempFolders.Count > 0)
218 {
219 folders.AddRange(tempFolders);
220 }
221 }
222 return folders;
223 }
224
225 /// <summary>
226 /// Creates a new inventory folder
227 /// </summary>
228 /// <param name="folder">Folder to create</param>
229 public void addInventoryFolder(InventoryFolderBase folder)
230 {
231 string sql = @"INSERT INTO inventoryfolders ([folderID], [agentID], [parentFolderID], [folderName], [type], [version])
232 VALUES (@folderID, @agentID, @parentFolderID, @folderName, @type, @version);";
233
234 string folderName = folder.Name;
235 if (folderName.Length > 64)
236 {
237 folderName = folderName.Substring(0, 64);
238 m_log.Warn("[INVENTORY DB]: Name field truncated from " + folder.Name.Length.ToString() + " to " + folderName.Length + " characters on add");
239 }
240 using (SqlConnection conn = new SqlConnection(m_connectionString))
241 using (SqlCommand cmd = new SqlCommand(sql, conn))
242 {
243 cmd.Parameters.Add(database.CreateParameter("folderID", folder.ID));
244 cmd.Parameters.Add(database.CreateParameter("agentID", folder.Owner));
245 cmd.Parameters.Add(database.CreateParameter("parentFolderID", folder.ParentID));
246 cmd.Parameters.Add(database.CreateParameter("folderName", folderName));
247 cmd.Parameters.Add(database.CreateParameter("type", folder.Type));
248 cmd.Parameters.Add(database.CreateParameter("version", folder.Version));
249 conn.Open();
250 try
251 {
252 cmd.ExecuteNonQuery();
253 }
254 catch (Exception e)
255 {
256 m_log.ErrorFormat("[INVENTORY DB]: Error : {0}", e.Message);
257 }
258 }
259 }
260
261 /// <summary>
262 /// Updates an inventory folder
263 /// </summary>
264 /// <param name="folder">Folder to update</param>
265 public void updateInventoryFolder(InventoryFolderBase folder)
266 {
267 string sql = @"UPDATE inventoryfolders SET agentID = @agentID,
268 parentFolderID = @parentFolderID,
269 folderName = @folderName,
270 type = @type,
271 version = @version
272 WHERE folderID = @folderID";
273
274 string folderName = folder.Name;
275 if (folderName.Length > 64)
276 {
277 folderName = folderName.Substring(0, 64);
278 m_log.Warn("[INVENTORY DB]: Name field truncated from " + folder.Name.Length.ToString() + " to " + folderName.Length + " characters on update");
279 }
280 using (SqlConnection conn = new SqlConnection(m_connectionString))
281 using (SqlCommand cmd = new SqlCommand(sql, conn))
282 {
283 cmd.Parameters.Add(database.CreateParameter("folderID", folder.ID));
284 cmd.Parameters.Add(database.CreateParameter("agentID", folder.Owner));
285 cmd.Parameters.Add(database.CreateParameter("parentFolderID", folder.ParentID));
286 cmd.Parameters.Add(database.CreateParameter("folderName", folderName));
287 cmd.Parameters.Add(database.CreateParameter("type", folder.Type));
288 cmd.Parameters.Add(database.CreateParameter("version", folder.Version));
289 conn.Open();
290 try
291 {
292 cmd.ExecuteNonQuery();
293 }
294 catch (Exception e)
295 {
296 m_log.ErrorFormat("[INVENTORY DB]: Error : {0}", e.Message);
297 }
298 }
299 }
300
301 /// <summary>
302 /// Updates an inventory folder
303 /// </summary>
304 /// <param name="folder">Folder to update</param>
305 public void moveInventoryFolder(InventoryFolderBase folder)
306 {
307 string sql = @"UPDATE inventoryfolders SET parentFolderID = @parentFolderID WHERE folderID = @folderID";
308 using (SqlConnection conn = new SqlConnection(m_connectionString))
309 using (SqlCommand cmd = new SqlCommand(sql, conn))
310 {
311 cmd.Parameters.Add(database.CreateParameter("parentFolderID", folder.ParentID));
312 cmd.Parameters.Add(database.CreateParameter("folderID", folder.ID));
313 conn.Open();
314 try
315 {
316 cmd.ExecuteNonQuery();
317 }
318 catch (Exception e)
319 {
320 m_log.ErrorFormat("[INVENTORY DB]: Error : {0}", e.Message);
321 }
322 }
323 }
324
325 /// <summary>
326 /// Delete an inventory folder
327 /// </summary>
328 /// <param name="folderID">Id of folder to delete</param>
329 public void deleteInventoryFolder(UUID folderID)
330 {
331 string sql = "SELECT * FROM inventoryfolders WHERE parentFolderID = @parentID";
332
333 using (SqlConnection conn = new SqlConnection(m_connectionString))
334 using (SqlCommand cmd = new SqlCommand(sql, conn))
335 {
336 List<InventoryFolderBase> subFolders;
337 cmd.Parameters.Add(database.CreateParameter("@parentID", UUID.Zero));
338 conn.Open();
339 subFolders = getFolderHierarchy(folderID, cmd);
340
341
342 //Delete all sub-folders
343 foreach (InventoryFolderBase f in subFolders)
344 {
345 DeleteOneFolder(f.ID, conn);
346 DeleteItemsInFolder(f.ID, conn);
347 }
348
349 //Delete the actual row
350 DeleteOneFolder(folderID, conn);
351 DeleteItemsInFolder(folderID, conn);
352 }
353 }
354
355 #endregion
356
357 #region Item Methods
358
359 /// <summary>
360 /// Returns a list of items in a specified folder
361 /// </summary>
362 /// <param name="folderID">The folder to search</param>
363 /// <returns>A list containing inventory items</returns>
364 public List<InventoryItemBase> getInventoryInFolder(UUID folderID)
365 {
366 string sql = "SELECT * FROM inventoryitems WHERE parentFolderID = @parentFolderID";
367 using (SqlConnection conn = new SqlConnection(m_connectionString))
368 using (SqlCommand cmd = new SqlCommand(sql, conn))
369 {
370 cmd.Parameters.Add(database.CreateParameter("parentFolderID", folderID));
371 conn.Open();
372 List<InventoryItemBase> items = new List<InventoryItemBase>();
373
374 using (SqlDataReader reader = cmd.ExecuteReader())
375 {
376 while (reader.Read())
377 {
378 items.Add(readInventoryItem(reader));
379 }
380 }
381 return items;
382 }
383 }
384
385 /// <summary>
386 /// Returns a specified inventory item
387 /// </summary>
388 /// <param name="itemID">The item ID</param>
389 /// <returns>An inventory item</returns>
390 public InventoryItemBase getInventoryItem(UUID itemID)
391 {
392 string sql = "SELECT * FROM inventoryitems WHERE inventoryID = @inventoryID";
393 using (SqlConnection conn = new SqlConnection(m_connectionString))
394 using (SqlCommand cmd = new SqlCommand(sql, conn))
395 {
396 cmd.Parameters.Add(database.CreateParameter("inventoryID", itemID));
397 conn.Open();
398 using (SqlDataReader reader = cmd.ExecuteReader())
399 {
400 if (reader.Read())
401 {
402 return readInventoryItem(reader);
403 }
404 }
405 }
406
407 m_log.InfoFormat("[INVENTORY DB]: Found no inventory item with ID : {0}", itemID);
408 return null;
409 }
410
411 /// <summary>
412 /// Adds a specified item to the database
413 /// </summary>
414 /// <param name="item">The inventory item</param>
415 public void addInventoryItem(InventoryItemBase item)
416 {
417 if (getInventoryItem(item.ID) != null)
418 {
419 updateInventoryItem(item);
420 return;
421 }
422
423 string sql = @"INSERT INTO inventoryitems
424 ([inventoryID], [assetID], [assetType], [parentFolderID], [avatarID], [inventoryName],
425 [inventoryDescription], [inventoryNextPermissions], [inventoryCurrentPermissions],
426 [invType], [creatorID], [inventoryBasePermissions], [inventoryEveryOnePermissions], [inventoryGroupPermissions],
427 [salePrice], [saleType], [creationDate], [groupID], [groupOwned], [flags])
428 VALUES
429 (@inventoryID, @assetID, @assetType, @parentFolderID, @avatarID, @inventoryName, @inventoryDescription,
430 @inventoryNextPermissions, @inventoryCurrentPermissions, @invType, @creatorID,
431 @inventoryBasePermissions, @inventoryEveryOnePermissions, @inventoryGroupPermissions, @salePrice, @saleType,
432 @creationDate, @groupID, @groupOwned, @flags)";
433
434 string itemName = item.Name;
435 if (item.Name.Length > 64)
436 {
437 itemName = item.Name.Substring(0, 64);
438 m_log.Warn("[INVENTORY DB]: Name field truncated from " + item.Name.Length.ToString() + " to " + itemName.Length.ToString() + " characters");
439 }
440
441 string itemDesc = item.Description;
442 if (item.Description.Length > 128)
443 {
444 itemDesc = item.Description.Substring(0, 128);
445 m_log.Warn("[INVENTORY DB]: Description field truncated from " + item.Description.Length.ToString() + " to " + itemDesc.Length.ToString() + " characters");
446 }
447
448 using (SqlConnection conn = new SqlConnection(m_connectionString))
449 using (SqlCommand command = new SqlCommand(sql, conn))
450 {
451 command.Parameters.Add(database.CreateParameter("inventoryID", item.ID));
452 command.Parameters.Add(database.CreateParameter("assetID", item.AssetID));
453 command.Parameters.Add(database.CreateParameter("assetType", item.AssetType));
454 command.Parameters.Add(database.CreateParameter("parentFolderID", item.Folder));
455 command.Parameters.Add(database.CreateParameter("avatarID", item.Owner));
456 command.Parameters.Add(database.CreateParameter("inventoryName", itemName));
457 command.Parameters.Add(database.CreateParameter("inventoryDescription", itemDesc));
458 command.Parameters.Add(database.CreateParameter("inventoryNextPermissions", item.NextPermissions));
459 command.Parameters.Add(database.CreateParameter("inventoryCurrentPermissions", item.CurrentPermissions));
460 command.Parameters.Add(database.CreateParameter("invType", item.InvType));
461 command.Parameters.Add(database.CreateParameter("creatorID", item.CreatorId));
462 command.Parameters.Add(database.CreateParameter("inventoryBasePermissions", item.BasePermissions));
463 command.Parameters.Add(database.CreateParameter("inventoryEveryOnePermissions", item.EveryOnePermissions));
464 command.Parameters.Add(database.CreateParameter("inventoryGroupPermissions", item.GroupPermissions));
465 command.Parameters.Add(database.CreateParameter("salePrice", item.SalePrice));
466 command.Parameters.Add(database.CreateParameter("saleType", item.SaleType));
467 command.Parameters.Add(database.CreateParameter("creationDate", item.CreationDate));
468 command.Parameters.Add(database.CreateParameter("groupID", item.GroupID));
469 command.Parameters.Add(database.CreateParameter("groupOwned", item.GroupOwned));
470 command.Parameters.Add(database.CreateParameter("flags", item.Flags));
471 conn.Open();
472 try
473 {
474 command.ExecuteNonQuery();
475 }
476 catch (Exception e)
477 {
478 m_log.Error("[INVENTORY DB]: Error inserting item :" + e.Message);
479 }
480 }
481
482 sql = "UPDATE inventoryfolders SET version = version + 1 WHERE folderID = @folderID";
483 using (SqlConnection conn = new SqlConnection(m_connectionString))
484 using (SqlCommand command = new SqlCommand(sql, conn))
485 {
486 command.Parameters.Add(database.CreateParameter("folderID", item.Folder.ToString()));
487 conn.Open();
488 try
489 {
490 command.ExecuteNonQuery();
491 }
492 catch (Exception e)
493 {
494 m_log.Error("[INVENTORY DB] Error updating inventory folder for new item :" + e.Message);
495 }
496 }
497 }
498
499 /// <summary>
500 /// Updates the specified inventory item
501 /// </summary>
502 /// <param name="item">Inventory item to update</param>
503 public void updateInventoryItem(InventoryItemBase item)
504 {
505 string sql = @"UPDATE inventoryitems SET assetID = @assetID,
506 assetType = @assetType,
507 parentFolderID = @parentFolderID,
508 avatarID = @avatarID,
509 inventoryName = @inventoryName,
510 inventoryDescription = @inventoryDescription,
511 inventoryNextPermissions = @inventoryNextPermissions,
512 inventoryCurrentPermissions = @inventoryCurrentPermissions,
513 invType = @invType,
514 creatorID = @creatorID,
515 inventoryBasePermissions = @inventoryBasePermissions,
516 inventoryEveryOnePermissions = @inventoryEveryOnePermissions,
517 inventoryGroupPermissions = @inventoryGroupPermissions,
518 salePrice = @salePrice,
519 saleType = @saleType,
520 creationDate = @creationDate,
521 groupID = @groupID,
522 groupOwned = @groupOwned,
523 flags = @flags
524 WHERE inventoryID = @inventoryID";
525
526 string itemName = item.Name;
527 if (item.Name.Length > 64)
528 {
529 itemName = item.Name.Substring(0, 64);
530 m_log.Warn("[INVENTORY DB]: Name field truncated from " + item.Name.Length.ToString() + " to " + itemName.Length.ToString() + " characters on update");
531 }
532
533 string itemDesc = item.Description;
534 if (item.Description.Length > 128)
535 {
536 itemDesc = item.Description.Substring(0, 128);
537 m_log.Warn("[INVENTORY DB]: Description field truncated from " + item.Description.Length.ToString() + " to " + itemDesc.Length.ToString() + " characters on update");
538 }
539
540 using (SqlConnection conn = new SqlConnection(m_connectionString))
541 using (SqlCommand command = new SqlCommand(sql, conn))
542 {
543 command.Parameters.Add(database.CreateParameter("inventoryID", item.ID));
544 command.Parameters.Add(database.CreateParameter("assetID", item.AssetID));
545 command.Parameters.Add(database.CreateParameter("assetType", item.AssetType));
546 command.Parameters.Add(database.CreateParameter("parentFolderID", item.Folder));
547 command.Parameters.Add(database.CreateParameter("avatarID", item.Owner));
548 command.Parameters.Add(database.CreateParameter("inventoryName", itemName));
549 command.Parameters.Add(database.CreateParameter("inventoryDescription", itemDesc));
550 command.Parameters.Add(database.CreateParameter("inventoryNextPermissions", item.NextPermissions));
551 command.Parameters.Add(database.CreateParameter("inventoryCurrentPermissions", item.CurrentPermissions));
552 command.Parameters.Add(database.CreateParameter("invType", item.InvType));
553 command.Parameters.Add(database.CreateParameter("creatorID", item.CreatorId));
554 command.Parameters.Add(database.CreateParameter("inventoryBasePermissions", item.BasePermissions));
555 command.Parameters.Add(database.CreateParameter("inventoryEveryOnePermissions", item.EveryOnePermissions));
556 command.Parameters.Add(database.CreateParameter("inventoryGroupPermissions", item.GroupPermissions));
557 command.Parameters.Add(database.CreateParameter("salePrice", item.SalePrice));
558 command.Parameters.Add(database.CreateParameter("saleType", item.SaleType));
559 command.Parameters.Add(database.CreateParameter("creationDate", item.CreationDate));
560 command.Parameters.Add(database.CreateParameter("groupID", item.GroupID));
561 command.Parameters.Add(database.CreateParameter("groupOwned", item.GroupOwned));
562 command.Parameters.Add(database.CreateParameter("flags", item.Flags));
563 conn.Open();
564 try
565 {
566 command.ExecuteNonQuery();
567 }
568 catch (Exception e)
569 {
570 m_log.Error("[INVENTORY DB]: Error updating item :" + e.Message);
571 }
572 }
573 }
574
575 // See IInventoryDataPlugin
576
577 /// <summary>
578 /// Delete an item in inventory database
579 /// </summary>
580 /// <param name="itemID">the item UUID</param>
581 public void deleteInventoryItem(UUID itemID)
582 {
583 string sql = "DELETE FROM inventoryitems WHERE inventoryID=@inventoryID";
584 using (SqlConnection conn = new SqlConnection(m_connectionString))
585 using (SqlCommand cmd = new SqlCommand(sql, conn))
586 {
587 cmd.Parameters.Add(database.CreateParameter("inventoryID", itemID));
588 try
589 {
590 conn.Open();
591 cmd.ExecuteNonQuery();
592 }
593 catch (Exception e)
594 {
595 m_log.Error("[INVENTORY DB]: Error deleting item :" + e.Message);
596 }
597 }
598 }
599
600 public InventoryItemBase queryInventoryItem(UUID itemID)
601 {
602 return getInventoryItem(itemID);
603 }
604
605 public InventoryFolderBase queryInventoryFolder(UUID folderID)
606 {
607 return getInventoryFolder(folderID);
608 }
609
610 /// <summary>
611 /// Returns all activated gesture-items in the inventory of the specified avatar.
612 /// </summary>
613 /// <param name="avatarID">The <see cref="UUID"/> of the avatar</param>
614 /// <returns>
615 /// The list of gestures (<see cref="InventoryItemBase"/>s)
616 /// </returns>
617 public List<InventoryItemBase> fetchActiveGestures(UUID avatarID)
618 {
619 string sql = "SELECT * FROM inventoryitems WHERE avatarId = @uuid AND assetType = @assetType and flags = 1";
620 using (SqlConnection conn = new SqlConnection(m_connectionString))
621 using (SqlCommand cmd = new SqlCommand(sql, conn))
622 {
623 cmd.Parameters.Add(database.CreateParameter("uuid", avatarID));
624 cmd.Parameters.Add(database.CreateParameter("assetType", (int)AssetType.Gesture));
625 conn.Open();
626 using (SqlDataReader reader = cmd.ExecuteReader())
627 {
628 List<InventoryItemBase> gestureList = new List<InventoryItemBase>();
629 while (reader.Read())
630 {
631 gestureList.Add(readInventoryItem(reader));
632 }
633 return gestureList;
634 }
635 }
636 }
637
638 #endregion
639
640 #region Private methods
641
642 /// <summary>
643 /// Delete an item in inventory database
644 /// </summary>
645 /// <param name="folderID">the item ID</param>
646 /// <param name="connection">connection to the database</param>
647 private void DeleteItemsInFolder(UUID folderID, SqlConnection connection)
648 {
649 using (SqlCommand command = new SqlCommand("DELETE FROM inventoryitems WHERE folderID=@folderID", connection))
650 {
651 command.Parameters.Add(database.CreateParameter("folderID", folderID));
652
653 try
654 {
655 command.ExecuteNonQuery();
656 }
657 catch (Exception e)
658 {
659 m_log.Error("[INVENTORY DB] Error deleting item :" + e.Message);
660 }
661 }
662 }
663
664 /// <summary>
665 /// Gets the folder hierarchy in a loop.
666 /// </summary>
667 /// <param name="parentID">parent ID.</param>
668 /// <param name="command">SQL command/connection to database</param>
669 /// <returns></returns>
670 private static List<InventoryFolderBase> getFolderHierarchy(UUID parentID, SqlCommand command)
671 {
672 command.Parameters["@parentID"].Value = parentID.Guid; //.ToString();
673
674 List<InventoryFolderBase> folders = getInventoryFolders(command);
675
676 if (folders.Count > 0)
677 {
678 List<InventoryFolderBase> tempFolders = new List<InventoryFolderBase>();
679
680 foreach (InventoryFolderBase folderBase in folders)
681 {
682 tempFolders.AddRange(getFolderHierarchy(folderBase.ID, command));
683 }
684
685 if (tempFolders.Count > 0)
686 {
687 folders.AddRange(tempFolders);
688 }
689 }
690 return folders;
691 }
692
693 /// <summary>
694 /// Gets the inventory folders.
695 /// </summary>
696 /// <param name="parentID">parentID, use UUID.Zero to get root</param>
697 /// <param name="user">user id, use UUID.Zero, if you want all folders from a parentID.</param>
698 /// <returns></returns>
699 private List<InventoryFolderBase> getInventoryFolders(UUID parentID, UUID user)
700 {
701 string sql = "SELECT * FROM inventoryfolders WHERE parentFolderID = @parentID AND agentID LIKE @uuid";
702 using (SqlConnection conn = new SqlConnection(m_connectionString))
703 using (SqlCommand command = new SqlCommand(sql, conn))
704 {
705 if (user == UUID.Zero)
706 {
707 command.Parameters.Add(database.CreateParameter("uuid", "%"));
708 }
709 else
710 {
711 command.Parameters.Add(database.CreateParameter("uuid", user));
712 }
713 command.Parameters.Add(database.CreateParameter("parentID", parentID));
714 conn.Open();
715 return getInventoryFolders(command);
716 }
717 }
718
719 /// <summary>
720 /// Gets the inventory folders.
721 /// </summary>
722 /// <param name="command">SQLcommand.</param>
723 /// <returns></returns>
724 private static List<InventoryFolderBase> getInventoryFolders(SqlCommand command)
725 {
726 using (SqlDataReader reader = command.ExecuteReader())
727 {
728
729 List<InventoryFolderBase> items = new List<InventoryFolderBase>();
730 while (reader.Read())
731 {
732 items.Add(readInventoryFolder(reader));
733 }
734 return items;
735 }
736 }
737
738 /// <summary>
739 /// Reads a list of inventory folders returned by a query.
740 /// </summary>
741 /// <param name="reader">A MSSQL Data Reader</param>
742 /// <returns>A List containing inventory folders</returns>
743 protected static InventoryFolderBase readInventoryFolder(SqlDataReader reader)
744 {
745 try
746 {
747 InventoryFolderBase folder = new InventoryFolderBase();
748 folder.Owner = DBGuid.FromDB(reader["agentID"]);
749 folder.ParentID = DBGuid.FromDB(reader["parentFolderID"]);
750 folder.ID = DBGuid.FromDB(reader["folderID"]);
751 folder.Name = (string)reader["folderName"];
752 folder.Type = (short)reader["type"];
753 folder.Version = Convert.ToUInt16(reader["version"]);
754
755 return folder;
756 }
757 catch (Exception e)
758 {
759 m_log.Error("[INVENTORY DB] Error reading inventory folder :" + e.Message);
760 }
761
762 return null;
763 }
764
765 /// <summary>
766 /// Reads a one item from an SQL result
767 /// </summary>
768 /// <param name="reader">The SQL Result</param>
769 /// <returns>the item read</returns>
770 private static InventoryItemBase readInventoryItem(IDataRecord reader)
771 {
772 try
773 {
774 InventoryItemBase item = new InventoryItemBase();
775
776 item.ID = DBGuid.FromDB(reader["inventoryID"]);
777 item.AssetID = DBGuid.FromDB(reader["assetID"]);
778 item.AssetType = Convert.ToInt32(reader["assetType"].ToString());
779 item.Folder = DBGuid.FromDB(reader["parentFolderID"]);
780 item.Owner = DBGuid.FromDB(reader["avatarID"]);
781 item.Name = reader["inventoryName"].ToString();
782 item.Description = reader["inventoryDescription"].ToString();
783 item.NextPermissions = Convert.ToUInt32(reader["inventoryNextPermissions"]);
784 item.CurrentPermissions = Convert.ToUInt32(reader["inventoryCurrentPermissions"]);
785 item.InvType = Convert.ToInt32(reader["invType"].ToString());
786 item.CreatorId = reader["creatorID"].ToString();
787 item.BasePermissions = Convert.ToUInt32(reader["inventoryBasePermissions"]);
788 item.EveryOnePermissions = Convert.ToUInt32(reader["inventoryEveryOnePermissions"]);
789 item.GroupPermissions = Convert.ToUInt32(reader["inventoryGroupPermissions"]);
790 item.SalePrice = Convert.ToInt32(reader["salePrice"]);
791 item.SaleType = Convert.ToByte(reader["saleType"]);
792 item.CreationDate = Convert.ToInt32(reader["creationDate"]);
793 item.GroupID = DBGuid.FromDB(reader["groupID"]);
794 item.GroupOwned = Convert.ToBoolean(reader["groupOwned"]);
795 item.Flags = Convert.ToUInt32(reader["flags"]);
796
797 return item;
798 }
799 catch (SqlException e)
800 {
801 m_log.Error("[INVENTORY DB]: Error reading inventory item :" + e.Message);
802 }
803
804 return null;
805 }
806
807 /// <summary>
808 /// Delete a folder in inventory databasae
809 /// </summary>
810 /// <param name="folderID">the folder UUID</param>
811 /// <param name="connection">connection to database</param>
812 private void DeleteOneFolder(UUID folderID, SqlConnection connection)
813 {
814 try
815 {
816 using (SqlCommand command = new SqlCommand("DELETE FROM inventoryfolders WHERE folderID=@folderID and type=-1", connection))
817 {
818 command.Parameters.Add(database.CreateParameter("folderID", folderID));
819
820 command.ExecuteNonQuery();
821 }
822 }
823 catch (SqlException e)
824 {
825 m_log.Error("[INVENTORY DB]: Error deleting folder :" + e.Message);
826 }
827 }
828
829 #endregion
830 }
831}
diff --git a/OpenSim/Data/MSSQL/MSSQLManager.cs b/OpenSim/Data/MSSQL/MSSQLManager.cs
deleted file mode 100644
index 9a0015c..0000000
--- a/OpenSim/Data/MSSQL/MSSQLManager.cs
+++ /dev/null
@@ -1,219 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Data;
31using System.Data.SqlClient;
32using System.IO;
33using System.Reflection;
34using log4net;
35using OpenMetaverse;
36
37namespace OpenSim.Data.MSSQL
38{
39 /// <summary>
40 /// A management class for the MS SQL Storage Engine
41 /// </summary>
42 public class MSSQLManager
43 {
44// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45
46 /// <summary>
47 /// Connection string for ADO.net
48 /// </summary>
49 private readonly string connectionString;
50
51 /// <summary>
52 /// Initialize the manager and set the connectionstring
53 /// </summary>
54 /// <param name="connection"></param>
55 public MSSQLManager(string connection)
56 {
57 connectionString = connection;
58 }
59
60 /// <summary>
61 /// Type conversion to a SQLDbType functions
62 /// </summary>
63 /// <param name="type"></param>
64 /// <returns></returns>
65 internal SqlDbType DbtypeFromType(Type type)
66 {
67 if (type == typeof(string))
68 {
69 return SqlDbType.VarChar;
70 }
71 if (type == typeof(double))
72 {
73 return SqlDbType.Float;
74 }
75 if (type == typeof(Single))
76 {
77 return SqlDbType.Float;
78 }
79 if (type == typeof(int))
80 {
81 return SqlDbType.Int;
82 }
83 if (type == typeof(bool))
84 {
85 return SqlDbType.Bit;
86 }
87 if (type == typeof(UUID))
88 {
89 return SqlDbType.UniqueIdentifier;
90 }
91 if (type == typeof(sbyte))
92 {
93 return SqlDbType.Int;
94 }
95 if (type == typeof(Byte[]))
96 {
97 return SqlDbType.Image;
98 }
99 if (type == typeof(uint) || type == typeof(ushort))
100 {
101 return SqlDbType.Int;
102 }
103 if (type == typeof(ulong))
104 {
105 return SqlDbType.BigInt;
106 }
107 if (type == typeof(DateTime))
108 {
109 return SqlDbType.DateTime;
110 }
111
112 return SqlDbType.VarChar;
113 }
114
115 /// <summary>
116 /// Creates value for parameter.
117 /// </summary>
118 /// <param name="value">The value.</param>
119 /// <returns></returns>
120 private static object CreateParameterValue(object value)
121 {
122 Type valueType = value.GetType();
123
124 if (valueType == typeof(UUID)) //TODO check if this works
125 {
126 return ((UUID) value).Guid;
127 }
128 if (valueType == typeof(UUID))
129 {
130 return ((UUID)value).Guid;
131 }
132 if (valueType == typeof(bool))
133 {
134 return (bool)value ? 1 : 0;
135 }
136 if (valueType == typeof(Byte[]))
137 {
138 return value;
139 }
140 if (valueType == typeof(int))
141 {
142 return value;
143 }
144 return value;
145 }
146
147 /// <summary>
148 /// Create a parameter for a command
149 /// </summary>
150 /// <param name="parameterName">Name of the parameter.</param>
151 /// <param name="parameterObject">parameter object.</param>
152 /// <returns></returns>
153 internal SqlParameter CreateParameter(string parameterName, object parameterObject)
154 {
155 return CreateParameter(parameterName, parameterObject, false);
156 }
157
158 /// <summary>
159 /// Creates the parameter for a command.
160 /// </summary>
161 /// <param name="parameterName">Name of the parameter.</param>
162 /// <param name="parameterObject">parameter object.</param>
163 /// <param name="parameterOut">if set to <c>true</c> parameter is a output parameter</param>
164 /// <returns></returns>
165 internal SqlParameter CreateParameter(string parameterName, object parameterObject, bool parameterOut)
166 {
167 //Tweak so we dont always have to add @ sign
168 if (!parameterName.StartsWith("@")) parameterName = "@" + parameterName;
169
170 //HACK if object is null, it is turned into a string, there are no nullable type till now
171 if (parameterObject == null) parameterObject = "";
172
173 SqlParameter parameter = new SqlParameter(parameterName, DbtypeFromType(parameterObject.GetType()));
174
175 if (parameterOut)
176 {
177 parameter.Direction = ParameterDirection.Output;
178 }
179 else
180 {
181 parameter.Direction = ParameterDirection.Input;
182 parameter.Value = CreateParameterValue(parameterObject);
183 }
184
185 return parameter;
186 }
187
188 /// <summary>
189 /// Checks if we need to do some migrations to the database
190 /// </summary>
191 /// <param name="migrationStore">migrationStore.</param>
192 public void CheckMigration(string migrationStore)
193 {
194 using (SqlConnection connection = new SqlConnection(connectionString))
195 {
196 connection.Open();
197 Assembly assem = GetType().Assembly;
198 MSSQLMigration migration = new MSSQLMigration(connection, assem, migrationStore);
199
200 migration.Update();
201 }
202 }
203
204 /// <summary>
205 /// Returns the version of this DB provider
206 /// </summary>
207 /// <returns>A string containing the DB provider</returns>
208 public string getVersion()
209 {
210 Module module = GetType().Module;
211 // string dllName = module.Assembly.ManifestModule.Name;
212 Version dllVersion = module.Assembly.GetName().Version;
213
214 return
215 string.Format("{0}.{1}.{2}.{3}", dllVersion.Major, dllVersion.Minor, dllVersion.Build,
216 dllVersion.Revision);
217 }
218 }
219}
diff --git a/OpenSim/Data/MSSQL/MSSQLMigration.cs b/OpenSim/Data/MSSQL/MSSQLMigration.cs
deleted file mode 100644
index c2fecef..0000000
--- a/OpenSim/Data/MSSQL/MSSQLMigration.cs
+++ /dev/null
@@ -1,99 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Data;
30using System.Data.Common;
31using System.Reflection;
32using System.Data.SqlClient;
33
34namespace OpenSim.Data.MSSQL
35{
36 public class MSSQLMigration : Migration
37 {
38 public MSSQLMigration(DbConnection conn, Assembly assem, string type)
39 : base(conn, assem, type)
40 {
41 }
42
43 public MSSQLMigration(DbConnection conn, Assembly assem, string subtype, string type)
44 : base(conn, assem, subtype, type)
45 {
46 }
47
48 protected override int FindVersion(DbConnection conn, string type)
49 {
50 int version = 0;
51 using (DbCommand cmd = conn.CreateCommand())
52 {
53 try
54 {
55 cmd.CommandText = "select top 1 version from migrations where name = '" + type + "' order by version desc"; //Must be
56 using (IDataReader reader = cmd.ExecuteReader())
57 {
58 if (reader.Read())
59 {
60 version = Convert.ToInt32(reader["version"]);
61 }
62 reader.Close();
63 }
64 }
65 catch
66 {
67 // Return -1 to indicate table does not exist
68 return -1;
69 }
70 }
71 return version;
72 }
73
74 protected override void ExecuteScript(DbConnection conn, string[] script)
75 {
76 if (!(conn is SqlConnection))
77 {
78 base.ExecuteScript(conn, script);
79 return;
80 }
81
82 foreach (string sql in script)
83 {
84 try
85 {
86 using (SqlCommand cmd = new SqlCommand(sql, (SqlConnection)conn))
87 {
88 cmd.ExecuteNonQuery();
89 }
90 }
91 catch (Exception)
92 {
93 throw new Exception(sql);
94
95 }
96 }
97 }
98 }
99}
diff --git a/OpenSim/Data/MSSQL/MSSQLPresenceData.cs b/OpenSim/Data/MSSQL/MSSQLPresenceData.cs
deleted file mode 100644
index 0c71e79..0000000
--- a/OpenSim/Data/MSSQL/MSSQLPresenceData.cs
+++ /dev/null
@@ -1,117 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Data;
31using System.Reflection;
32using System.Threading;
33using log4net;
34using OpenMetaverse;
35using OpenSim.Framework;
36using System.Data.SqlClient;
37
38namespace OpenSim.Data.MSSQL
39{
40 /// <summary>
41 /// A MySQL Interface for the Presence Server
42 /// </summary>
43 public class MSSQLPresenceData : MSSQLGenericTableHandler<PresenceData>,
44 IPresenceData
45 {
46// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47
48 public MSSQLPresenceData(string connectionString, string realm) :
49 base(connectionString, realm, "Presence")
50 {
51 }
52
53 public PresenceData Get(UUID sessionID)
54 {
55 PresenceData[] ret = Get("SessionID",
56 sessionID.ToString());
57
58 if (ret.Length == 0)
59 return null;
60
61 return ret[0];
62 }
63
64 public void LogoutRegionAgents(UUID regionID)
65 {
66 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
67 using (SqlCommand cmd = new SqlCommand())
68 {
69
70 cmd.CommandText = String.Format("DELETE FROM {0} WHERE [RegionID]=@RegionID", m_Realm);
71
72 cmd.Parameters.Add(m_database.CreateParameter("@RegionID", regionID.ToString()));
73 cmd.Connection = conn;
74 conn.Open();
75 cmd.ExecuteNonQuery();
76 }
77 }
78
79 public bool ReportAgent(UUID sessionID, UUID regionID)
80 {
81 PresenceData[] pd = Get("SessionID", sessionID.ToString());
82 if (pd.Length == 0)
83 return false;
84
85 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
86 using (SqlCommand cmd = new SqlCommand())
87 {
88
89 cmd.CommandText = String.Format(@"UPDATE {0} SET
90 [RegionID] = @RegionID
91 WHERE [SessionID] = @SessionID", m_Realm);
92
93 cmd.Parameters.Add(m_database.CreateParameter("@SessionID", sessionID.ToString()));
94 cmd.Parameters.Add(m_database.CreateParameter("@RegionID", regionID.ToString()));
95 cmd.Connection = conn;
96 conn.Open();
97 if (cmd.ExecuteNonQuery() == 0)
98 return false;
99 }
100 return true;
101 }
102
103 public bool VerifyAgent(UUID agentId, UUID secureSessionID)
104 {
105 PresenceData[] ret = Get("SecureSessionID",
106 secureSessionID.ToString());
107
108 if (ret.Length == 0)
109 return false;
110
111 if(ret[0].UserID != agentId.ToString())
112 return false;
113
114 return true;
115 }
116 }
117}
diff --git a/OpenSim/Data/MSSQL/MSSQLRegionData.cs b/OpenSim/Data/MSSQL/MSSQLRegionData.cs
deleted file mode 100644
index c0589df..0000000
--- a/OpenSim/Data/MSSQL/MSSQLRegionData.cs
+++ /dev/null
@@ -1,352 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ''AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Data;
31using System.Data.SqlClient;
32using System.Drawing;
33using System.IO;
34using System.Reflection;
35using log4net;
36using OpenMetaverse;
37using OpenSim.Framework;
38using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes;
40using RegionFlags = OpenSim.Framework.RegionFlags;
41
42namespace OpenSim.Data.MSSQL
43{
44 /// <summary>
45 /// A MSSQL Interface for the Region Server.
46 /// </summary>
47 public class MSSQLRegionData : IRegionData
48 {
49 private string m_Realm;
50 private List<string> m_ColumnNames = null;
51 private string m_ConnectionString;
52 private MSSQLManager m_database;
53 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
54
55 public MSSQLRegionData(string connectionString, string realm)
56 {
57 m_Realm = realm;
58 m_ConnectionString = connectionString;
59 m_database = new MSSQLManager(connectionString);
60
61 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
62 {
63 conn.Open();
64 Migration m = new Migration(conn, GetType().Assembly, "GridStore");
65 m.Update();
66 }
67 }
68
69 public List<RegionData> Get(string regionName, UUID scopeID)
70 {
71 string sql = "select * from ["+m_Realm+"] where regionName like @regionName";
72 if (scopeID != UUID.Zero)
73 sql += " and ScopeID = @scopeID";
74 sql += " order by regionName";
75 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
76 using (SqlCommand cmd = new SqlCommand(sql, conn))
77 {
78 cmd.Parameters.Add(m_database.CreateParameter("@regionName", regionName));
79 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID));
80 conn.Open();
81 return RunCommand(cmd);
82 }
83 }
84
85 public RegionData Get(int posX, int posY, UUID scopeID)
86 {
87 string sql = "select * from ["+m_Realm+"] where locX = @posX and locY = @posY";
88 if (scopeID != UUID.Zero)
89 sql += " and ScopeID = @scopeID";
90
91 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
92 using (SqlCommand cmd = new SqlCommand(sql, conn))
93 {
94 cmd.Parameters.Add(m_database.CreateParameter("@posX", posX.ToString()));
95 cmd.Parameters.Add(m_database.CreateParameter("@posY", posY.ToString()));
96 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID));
97 conn.Open();
98 List<RegionData> ret = RunCommand(cmd);
99 if (ret.Count == 0)
100 return null;
101
102 return ret[0];
103 }
104 }
105
106 public RegionData Get(UUID regionID, UUID scopeID)
107 {
108 string sql = "select * from ["+m_Realm+"] where uuid = @regionID";
109 if (scopeID != UUID.Zero)
110 sql += " and ScopeID = @scopeID";
111 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
112 using (SqlCommand cmd = new SqlCommand(sql, conn))
113 {
114 cmd.Parameters.Add(m_database.CreateParameter("@regionID", regionID));
115 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID));
116 conn.Open();
117 List<RegionData> ret = RunCommand(cmd);
118 if (ret.Count == 0)
119 return null;
120
121 return ret[0];
122 }
123 }
124
125 public List<RegionData> Get(int startX, int startY, int endX, int endY, UUID scopeID)
126 {
127 string sql = "select * from ["+m_Realm+"] where locX between @startX and @endX and locY between @startY and @endY";
128 if (scopeID != UUID.Zero)
129 sql += " and ScopeID = @scopeID";
130
131 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
132 using (SqlCommand cmd = new SqlCommand(sql, conn))
133 {
134 cmd.Parameters.Add(m_database.CreateParameter("@startX", startX));
135 cmd.Parameters.Add(m_database.CreateParameter("@startY", startY));
136 cmd.Parameters.Add(m_database.CreateParameter("@endX", endX));
137 cmd.Parameters.Add(m_database.CreateParameter("@endY", endY));
138 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID));
139 conn.Open();
140 return RunCommand(cmd);
141 }
142 }
143
144 public List<RegionData> RunCommand(SqlCommand cmd)
145 {
146 List<RegionData> retList = new List<RegionData>();
147
148 SqlDataReader result = cmd.ExecuteReader();
149
150 while (result.Read())
151 {
152 RegionData ret = new RegionData();
153 ret.Data = new Dictionary<string, object>();
154
155 UUID regionID;
156 UUID.TryParse(result["uuid"].ToString(), out regionID);
157 ret.RegionID = regionID;
158 UUID scope;
159 UUID.TryParse(result["ScopeID"].ToString(), out scope);
160 ret.ScopeID = scope;
161 ret.RegionName = result["regionName"].ToString();
162 ret.posX = Convert.ToInt32(result["locX"]);
163 ret.posY = Convert.ToInt32(result["locY"]);
164 ret.sizeX = Convert.ToInt32(result["sizeX"]);
165 ret.sizeY = Convert.ToInt32(result["sizeY"]);
166
167 if (m_ColumnNames == null)
168 {
169 m_ColumnNames = new List<string>();
170
171 DataTable schemaTable = result.GetSchemaTable();
172 foreach (DataRow row in schemaTable.Rows)
173 m_ColumnNames.Add(row["ColumnName"].ToString());
174 }
175
176 foreach (string s in m_ColumnNames)
177 {
178 if (s == "uuid")
179 continue;
180 if (s == "ScopeID")
181 continue;
182 if (s == "regionName")
183 continue;
184 if (s == "locX")
185 continue;
186 if (s == "locY")
187 continue;
188
189 ret.Data[s] = result[s].ToString();
190 }
191
192 retList.Add(ret);
193 }
194 return retList;
195 }
196
197 public bool Store(RegionData data)
198 {
199 if (data.Data.ContainsKey("uuid"))
200 data.Data.Remove("uuid");
201 if (data.Data.ContainsKey("ScopeID"))
202 data.Data.Remove("ScopeID");
203 if (data.Data.ContainsKey("regionName"))
204 data.Data.Remove("regionName");
205 if (data.Data.ContainsKey("posX"))
206 data.Data.Remove("posX");
207 if (data.Data.ContainsKey("posY"))
208 data.Data.Remove("posY");
209 if (data.Data.ContainsKey("sizeX"))
210 data.Data.Remove("sizeX");
211 if (data.Data.ContainsKey("sizeY"))
212 data.Data.Remove("sizeY");
213 if (data.Data.ContainsKey("locX"))
214 data.Data.Remove("locX");
215 if (data.Data.ContainsKey("locY"))
216 data.Data.Remove("locY");
217
218 string[] fields = new List<string>(data.Data.Keys).ToArray();
219
220 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
221 using (SqlCommand cmd = new SqlCommand())
222 {
223
224 string update = "update [" + m_Realm + "] set locX=@posX, locY=@posY, sizeX=@sizeX, sizeY=@sizeY ";
225
226 foreach (string field in fields)
227 {
228
229 update += ", ";
230 update += "[" + field + "] = @" + field;
231
232 cmd.Parameters.Add(m_database.CreateParameter("@" + field, data.Data[field]));
233 }
234
235 update += " where uuid = @regionID";
236
237 if (data.ScopeID != UUID.Zero)
238 update += " and ScopeID = @scopeID";
239
240 cmd.CommandText = update;
241 cmd.Connection = conn;
242 cmd.Parameters.Add(m_database.CreateParameter("@regionID", data.RegionID));
243 cmd.Parameters.Add(m_database.CreateParameter("@regionName", data.RegionName));
244 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", data.ScopeID));
245 cmd.Parameters.Add(m_database.CreateParameter("@posX", data.posX));
246 cmd.Parameters.Add(m_database.CreateParameter("@posY", data.posY));
247 cmd.Parameters.Add(m_database.CreateParameter("@sizeX", data.sizeX));
248 cmd.Parameters.Add(m_database.CreateParameter("@sizeY", data.sizeY));
249 conn.Open();
250 try
251 {
252 if (cmd.ExecuteNonQuery() < 1)
253 {
254 string insert = "insert into [" + m_Realm + "] ([uuid], [ScopeID], [locX], [locY], [sizeX], [sizeY], [regionName], [" +
255 String.Join("], [", fields) +
256 "]) values (@regionID, @scopeID, @posX, @posY, @sizeX, @sizeY, @regionName, @" + String.Join(", @", fields) + ")";
257
258 cmd.CommandText = insert;
259
260 try
261 {
262 if (cmd.ExecuteNonQuery() < 1)
263 {
264 return false;
265 }
266 }
267 catch (Exception ex)
268 {
269 m_log.Warn("[MSSQL Grid]: Error inserting into Regions table: " + ex.Message + ", INSERT sql: " + insert);
270 }
271 }
272 }
273 catch (Exception ex)
274 {
275 m_log.Warn("[MSSQL Grid]: Error updating Regions table: " + ex.Message + ", UPDATE sql: " + update);
276 }
277 }
278
279 return true;
280 }
281
282 public bool SetDataItem(UUID regionID, string item, string value)
283 {
284 string sql = "update [" + m_Realm +
285 "] set [" + item + "] = @" + item + " where uuid = @UUID";
286 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
287 using (SqlCommand cmd = new SqlCommand(sql, conn))
288 {
289 cmd.Parameters.Add(m_database.CreateParameter("@" + item, value));
290 cmd.Parameters.Add(m_database.CreateParameter("@UUID", regionID));
291 conn.Open();
292 if (cmd.ExecuteNonQuery() > 0)
293 return true;
294 }
295 return false;
296 }
297
298 public bool Delete(UUID regionID)
299 {
300 string sql = "delete from [" + m_Realm +
301 "] where uuid = @UUID";
302 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
303 using (SqlCommand cmd = new SqlCommand(sql, conn))
304 {
305 cmd.Parameters.Add(m_database.CreateParameter("@UUID", regionID));
306 conn.Open();
307 if (cmd.ExecuteNonQuery() > 0)
308 return true;
309 }
310 return false;
311 }
312
313 public List<RegionData> GetDefaultRegions(UUID scopeID)
314 {
315 return Get((int)RegionFlags.DefaultRegion, scopeID);
316 }
317
318 public List<RegionData> GetDefaultHypergridRegions(UUID scopeID)
319 {
320 return Get((int)RegionFlags.DefaultHGRegion, scopeID);
321 }
322
323 public List<RegionData> GetFallbackRegions(UUID scopeID, int x, int y)
324 {
325 List<RegionData> regions = Get((int)RegionFlags.FallbackRegion, scopeID);
326 RegionDataDistanceCompare distanceComparer = new RegionDataDistanceCompare(x, y);
327 regions.Sort(distanceComparer);
328
329 return regions;
330 }
331
332 public List<RegionData> GetHyperlinks(UUID scopeID)
333 {
334 return Get((int)RegionFlags.Hyperlink, scopeID);
335 }
336
337 private List<RegionData> Get(int regionFlags, UUID scopeID)
338 {
339 string sql = "SELECT * FROM [" + m_Realm + "] WHERE (flags & " + regionFlags.ToString() + ") <> 0";
340 if (scopeID != UUID.Zero)
341 sql += " AND ScopeID = @scopeID";
342
343 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
344 using (SqlCommand cmd = new SqlCommand(sql, conn))
345 {
346 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID));
347 conn.Open();
348 return RunCommand(cmd);
349 }
350 }
351 }
352}
diff --git a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs b/OpenSim/Data/MSSQL/MSSQLSimulationData.cs
deleted file mode 100644
index 1a5ecd6..0000000
--- a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs
+++ /dev/null
@@ -1,2242 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Data;
31using System.Data.SqlClient;
32using System.Drawing;
33using System.IO;
34using System.Reflection;
35using log4net;
36using OpenMetaverse;
37using OpenSim.Framework;
38using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes;
40
41namespace OpenSim.Data.MSSQL
42{
43 /// <summary>
44 /// A MSSQL Interface for the Region Server.
45 /// </summary>
46 public class MSSQLSimulationData : ISimulationDataStore
47 {
48 private const string _migrationStore = "RegionStore";
49
50 // private static FileSystemDataStore Instance = new FileSystemDataStore();
51 private static readonly ILog _Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
52 private static string LogHeader = "[REGION DB MSSQL]";
53
54 /// <summary>
55 /// The database manager
56 /// </summary>
57 private MSSQLManager _Database;
58 private string m_connectionString;
59 protected virtual Assembly Assembly
60 {
61 get { return GetType().Assembly; }
62 }
63
64 public MSSQLSimulationData()
65 {
66 }
67
68 public MSSQLSimulationData(string connectionString)
69 {
70 Initialise(connectionString);
71 }
72
73 /// <summary>
74 /// Initialises the region datastore
75 /// </summary>
76 /// <param name="connectionString">The connection string.</param>
77 public void Initialise(string connectionString)
78 {
79 m_connectionString = connectionString;
80 _Database = new MSSQLManager(connectionString);
81
82 using (SqlConnection conn = new SqlConnection(connectionString))
83 {
84 conn.Open();
85 //New Migration settings
86 Migration m = new Migration(conn, Assembly, "RegionStore");
87 m.Update();
88 }
89 }
90
91 /// <summary>
92 /// Dispose the database
93 /// </summary>
94 public void Dispose() { }
95
96 #region SceneObjectGroup region for loading and Store of the scene.
97
98 /// <summary>
99 /// Loads the objects present in the region.
100 /// </summary>
101 /// <param name="regionUUID">The region UUID.</param>
102 /// <returns></returns>
103 public List<SceneObjectGroup> LoadObjects(UUID regionUUID)
104 {
105 UUID lastGroupID = UUID.Zero;
106
107 Dictionary<UUID, SceneObjectPart> prims = new Dictionary<UUID, SceneObjectPart>();
108 Dictionary<UUID, SceneObjectGroup> objects = new Dictionary<UUID, SceneObjectGroup>();
109 SceneObjectGroup grp = null;
110
111 string sql = "SELECT *, " +
112 "sort = CASE WHEN prims.UUID = prims.SceneGroupID THEN 0 ELSE 1 END " +
113 "FROM prims " +
114 "LEFT JOIN primshapes ON prims.UUID = primshapes.UUID " +
115 "WHERE RegionUUID = @RegionUUID " +
116 "ORDER BY SceneGroupID asc, sort asc, LinkNumber asc";
117
118 using (SqlConnection conn = new SqlConnection(m_connectionString))
119 using (SqlCommand command = new SqlCommand(sql, conn))
120 {
121 command.Parameters.Add(_Database.CreateParameter("@regionUUID", regionUUID));
122 conn.Open();
123 using (SqlDataReader reader = command.ExecuteReader())
124 {
125 while (reader.Read())
126 {
127 SceneObjectPart sceneObjectPart = BuildPrim(reader);
128 if (reader["Shape"] is DBNull)
129 sceneObjectPart.Shape = PrimitiveBaseShape.Default;
130 else
131 sceneObjectPart.Shape = BuildShape(reader);
132
133 prims[sceneObjectPart.UUID] = sceneObjectPart;
134
135 UUID groupID = new UUID((Guid)reader["SceneGroupID"]);
136
137 if (groupID != lastGroupID) // New SOG
138 {
139 if (grp != null)
140 objects[grp.UUID] = grp;
141
142 lastGroupID = groupID;
143
144 // There sometimes exist OpenSim bugs that 'orphan groups' so that none of the prims are
145 // recorded as the root prim (for which the UUID must equal the persisted group UUID). In
146 // this case, force the UUID to be the same as the group UUID so that at least these can be
147 // deleted (we need to change the UUID so that any other prims in the linkset can also be
148 // deleted).
149 if (sceneObjectPart.UUID != groupID && groupID != UUID.Zero)
150 {
151 _Log.WarnFormat(
152 "[REGION DB]: Found root prim {0} {1} at {2} where group was actually {3}. Forcing UUID to group UUID",
153 sceneObjectPart.Name, sceneObjectPart.UUID, sceneObjectPart.GroupPosition, groupID);
154
155 sceneObjectPart.UUID = groupID;
156 }
157
158 grp = new SceneObjectGroup(sceneObjectPart);
159 }
160 else
161 {
162 // Black magic to preserve link numbers
163 // Why is this needed, fix this in AddPart method.
164 int link = sceneObjectPart.LinkNum;
165
166 grp.AddPart(sceneObjectPart);
167
168 if (link != 0)
169 sceneObjectPart.LinkNum = link;
170 }
171 }
172 }
173 }
174
175 if (grp != null)
176 objects[grp.UUID] = grp;
177
178 // Instead of attempting to LoadItems on every prim,
179 // most of which probably have no items... get a
180 // list from DB of all prims which have items and
181 // LoadItems only on those
182 List<SceneObjectPart> primsWithInventory = new List<SceneObjectPart>();
183 string qry = "select distinct primID from primitems";
184 using (SqlConnection conn = new SqlConnection(m_connectionString))
185 using (SqlCommand command = new SqlCommand(qry, conn))
186 {
187 conn.Open();
188 using (SqlDataReader itemReader = command.ExecuteReader())
189 {
190 while (itemReader.Read())
191 {
192 if (!(itemReader["primID"] is DBNull))
193 {
194 UUID primID = new UUID(itemReader["primID"].ToString());
195 if (prims.ContainsKey(primID))
196 {
197 primsWithInventory.Add(prims[primID]);
198 }
199 }
200 }
201 }
202 }
203
204 LoadItems(primsWithInventory);
205
206 _Log.DebugFormat("[REGION DB]: Loaded {0} objects using {1} prims", objects.Count, prims.Count);
207
208 return new List<SceneObjectGroup>(objects.Values);
209 }
210
211 /// <summary>
212 /// Load in the prim's persisted inventory.
213 /// </summary>
214 /// <param name="allPrims">all prims with inventory on a region</param>
215 private void LoadItems(List<SceneObjectPart> allPrimsWithInventory)
216 {
217 string sql = "SELECT * FROM primitems WHERE PrimID = @PrimID";
218 using (SqlConnection conn = new SqlConnection(m_connectionString))
219 using (SqlCommand command = new SqlCommand(sql, conn))
220 {
221 conn.Open();
222 foreach (SceneObjectPart objectPart in allPrimsWithInventory)
223 {
224 command.Parameters.Clear();
225 command.Parameters.Add(_Database.CreateParameter("@PrimID", objectPart.UUID));
226
227 List<TaskInventoryItem> inventory = new List<TaskInventoryItem>();
228
229 using (SqlDataReader reader = command.ExecuteReader())
230 {
231 while (reader.Read())
232 {
233 TaskInventoryItem item = BuildItem(reader);
234
235 item.ParentID = objectPart.UUID; // Values in database are
236 // often wrong
237 inventory.Add(item);
238 }
239 }
240
241 objectPart.Inventory.RestoreInventoryItems(inventory);
242 }
243 }
244 }
245
246 /// <summary>
247 /// Stores all object's details apart from inventory
248 /// </summary>
249 /// <param name="obj"></param>
250 /// <param name="regionUUID"></param>
251 public void StoreObject(SceneObjectGroup obj, UUID regionUUID)
252 {
253 uint flags = obj.RootPart.GetEffectiveObjectFlags();
254 // Eligibility check
255 //
256 if ((flags & (uint)PrimFlags.Temporary) != 0)
257 return;
258 if ((flags & (uint)PrimFlags.TemporaryOnRez) != 0)
259 return;
260
261 _Log.DebugFormat("[MSSQL]: Adding/Changing SceneObjectGroup: {0} to region: {1}, object has {2} prims.", obj.UUID, regionUUID, obj.Parts.Length);
262
263 using (SqlConnection conn = new SqlConnection(m_connectionString))
264 {
265 conn.Open();
266 SqlTransaction transaction = conn.BeginTransaction();
267
268 try
269 {
270 foreach (SceneObjectPart sceneObjectPart in obj.Parts)
271 {
272 //Update prim
273 using (SqlCommand sqlCommand = conn.CreateCommand())
274 {
275 sqlCommand.Transaction = transaction;
276 try
277 {
278 StoreSceneObjectPrim(sceneObjectPart, sqlCommand, obj.UUID, regionUUID);
279 }
280 catch (SqlException sqlEx)
281 {
282 _Log.ErrorFormat("[REGION DB]: Store SceneObjectPrim SQL error: {0} at line {1}", sqlEx.Message, sqlEx.LineNumber);
283 throw;
284 }
285 }
286
287 //Update primshapes
288 using (SqlCommand sqlCommand = conn.CreateCommand())
289 {
290 sqlCommand.Transaction = transaction;
291 try
292 {
293 StoreSceneObjectPrimShapes(sceneObjectPart, sqlCommand, obj.UUID, regionUUID);
294 }
295 catch (SqlException sqlEx)
296 {
297 _Log.ErrorFormat("[REGION DB]: Store SceneObjectPrimShapes SQL error: {0} at line {1}", sqlEx.Message, sqlEx.LineNumber);
298 throw;
299 }
300 }
301 }
302
303 transaction.Commit();
304 }
305 catch (Exception ex)
306 {
307 _Log.ErrorFormat("[REGION DB]: Store SceneObjectGroup error: {0}, Rolling back...", ex.Message);
308 try
309 {
310 transaction.Rollback();
311 }
312 catch (Exception ex2)
313 {
314 //Show error
315 _Log.InfoFormat("[REGION DB]: Rollback of SceneObjectGroup store transaction failed with error: {0}", ex2.Message);
316
317 }
318 }
319 }
320 }
321
322 /// <summary>
323 /// Stores the prim of the sceneobjectpart.
324 /// </summary>
325 /// <param name="sceneObjectPart">The sceneobjectpart or prim.</param>
326 /// <param name="sqlCommand">The SQL command with the transaction.</param>
327 /// <param name="sceneGroupID">The scenegroup UUID.</param>
328 /// <param name="regionUUID">The region UUID.</param>
329 private void StoreSceneObjectPrim(SceneObjectPart sceneObjectPart, SqlCommand sqlCommand, UUID sceneGroupID, UUID regionUUID)
330 {
331 //Big query to update or insert a new prim.
332 //Note for SQL Server 2008 this could be simplified
333 string queryPrims = @"
334IF EXISTS (SELECT UUID FROM prims WHERE UUID = @UUID)
335 BEGIN
336 UPDATE prims SET
337 CreationDate = @CreationDate, Name = @Name, Text = @Text, Description = @Description, SitName = @SitName,
338 TouchName = @TouchName, ObjectFlags = @ObjectFlags, OwnerMask = @OwnerMask, NextOwnerMask = @NextOwnerMask, GroupMask = @GroupMask,
339 EveryoneMask = @EveryoneMask, BaseMask = @BaseMask, PositionX = @PositionX, PositionY = @PositionY, PositionZ = @PositionZ,
340 GroupPositionX = @GroupPositionX, GroupPositionY = @GroupPositionY, GroupPositionZ = @GroupPositionZ, VelocityX = @VelocityX,
341 VelocityY = @VelocityY, VelocityZ = @VelocityZ, AngularVelocityX = @AngularVelocityX, AngularVelocityY = @AngularVelocityY,
342 AngularVelocityZ = @AngularVelocityZ, AccelerationX = @AccelerationX, AccelerationY = @AccelerationY,
343 AccelerationZ = @AccelerationZ, RotationX = @RotationX, RotationY = @RotationY, RotationZ = @RotationZ, RotationW = @RotationW,
344 SitTargetOffsetX = @SitTargetOffsetX, SitTargetOffsetY = @SitTargetOffsetY, SitTargetOffsetZ = @SitTargetOffsetZ,
345 SitTargetOrientW = @SitTargetOrientW, SitTargetOrientX = @SitTargetOrientX, SitTargetOrientY = @SitTargetOrientY,
346 SitTargetOrientZ = @SitTargetOrientZ, RegionUUID = @RegionUUID, CreatorID = @CreatorID, OwnerID = @OwnerID, GroupID = @GroupID,
347 LastOwnerID = @LastOwnerID, SceneGroupID = @SceneGroupID, PayPrice = @PayPrice, PayButton1 = @PayButton1, PayButton2 = @PayButton2,
348 PayButton3 = @PayButton3, PayButton4 = @PayButton4, LoopedSound = @LoopedSound, LoopedSoundGain = @LoopedSoundGain,
349 TextureAnimation = @TextureAnimation, OmegaX = @OmegaX, OmegaY = @OmegaY, OmegaZ = @OmegaZ, CameraEyeOffsetX = @CameraEyeOffsetX,
350 CameraEyeOffsetY = @CameraEyeOffsetY, CameraEyeOffsetZ = @CameraEyeOffsetZ, CameraAtOffsetX = @CameraAtOffsetX,
351 CameraAtOffsetY = @CameraAtOffsetY, CameraAtOffsetZ = @CameraAtOffsetZ, ForceMouselook = @ForceMouselook,
352 ScriptAccessPin = @ScriptAccessPin, AllowedDrop = @AllowedDrop, DieAtEdge = @DieAtEdge, SalePrice = @SalePrice,
353 SaleType = @SaleType, ColorR = @ColorR, ColorG = @ColorG, ColorB = @ColorB, ColorA = @ColorA, ParticleSystem = @ParticleSystem,
354 ClickAction = @ClickAction, Material = @Material, CollisionSound = @CollisionSound, CollisionSoundVolume = @CollisionSoundVolume, PassTouches = @PassTouches,
355 LinkNumber = @LinkNumber, MediaURL = @MediaURL, AttachedPosX = @AttachedPosX, AttachedPosY = @AttachedPosY, AttachedPosZ = @AttachedPosZ, DynAttrs = @DynAttrs,
356 PhysicsShapeType = @PhysicsShapeType, Density = @Density, GravityModifier = @GravityModifier, Friction = @Friction, Restitution = @Restitution
357 WHERE UUID = @UUID
358 END
359ELSE
360 BEGIN
361 INSERT INTO
362 prims (
363 UUID, CreationDate, Name, Text, Description, SitName, TouchName, ObjectFlags, OwnerMask, NextOwnerMask, GroupMask,
364 EveryoneMask, BaseMask, PositionX, PositionY, PositionZ, GroupPositionX, GroupPositionY, GroupPositionZ, VelocityX,
365 VelocityY, VelocityZ, AngularVelocityX, AngularVelocityY, AngularVelocityZ, AccelerationX, AccelerationY, AccelerationZ,
366 RotationX, RotationY, RotationZ, RotationW, SitTargetOffsetX, SitTargetOffsetY, SitTargetOffsetZ, SitTargetOrientW,
367 SitTargetOrientX, SitTargetOrientY, SitTargetOrientZ, RegionUUID, CreatorID, OwnerID, GroupID, LastOwnerID, SceneGroupID,
368 PayPrice, PayButton1, PayButton2, PayButton3, PayButton4, LoopedSound, LoopedSoundGain, TextureAnimation, OmegaX,
369 OmegaY, OmegaZ, CameraEyeOffsetX, CameraEyeOffsetY, CameraEyeOffsetZ, CameraAtOffsetX, CameraAtOffsetY, CameraAtOffsetZ,
370 ForceMouselook, ScriptAccessPin, AllowedDrop, DieAtEdge, SalePrice, SaleType, ColorR, ColorG, ColorB, ColorA,
371 ParticleSystem, ClickAction, Material, CollisionSound, CollisionSoundVolume, PassTouches, LinkNumber, MediaURL, AttachedPosX, AttachedPosY, AttachedPosZ, DynAttrs,
372 PhysicsShapeType, Density, GravityModifier, Friction, Restitution
373 ) VALUES (
374 @UUID, @CreationDate, @Name, @Text, @Description, @SitName, @TouchName, @ObjectFlags, @OwnerMask, @NextOwnerMask, @GroupMask,
375 @EveryoneMask, @BaseMask, @PositionX, @PositionY, @PositionZ, @GroupPositionX, @GroupPositionY, @GroupPositionZ, @VelocityX,
376 @VelocityY, @VelocityZ, @AngularVelocityX, @AngularVelocityY, @AngularVelocityZ, @AccelerationX, @AccelerationY, @AccelerationZ,
377 @RotationX, @RotationY, @RotationZ, @RotationW, @SitTargetOffsetX, @SitTargetOffsetY, @SitTargetOffsetZ, @SitTargetOrientW,
378 @SitTargetOrientX, @SitTargetOrientY, @SitTargetOrientZ, @RegionUUID, @CreatorID, @OwnerID, @GroupID, @LastOwnerID, @SceneGroupID,
379 @PayPrice, @PayButton1, @PayButton2, @PayButton3, @PayButton4, @LoopedSound, @LoopedSoundGain, @TextureAnimation, @OmegaX,
380 @OmegaY, @OmegaZ, @CameraEyeOffsetX, @CameraEyeOffsetY, @CameraEyeOffsetZ, @CameraAtOffsetX, @CameraAtOffsetY, @CameraAtOffsetZ,
381 @ForceMouselook, @ScriptAccessPin, @AllowedDrop, @DieAtEdge, @SalePrice, @SaleType, @ColorR, @ColorG, @ColorB, @ColorA,
382 @ParticleSystem, @ClickAction, @Material, @CollisionSound, @CollisionSoundVolume, @PassTouches, @LinkNumber, @MediaURL, @AttachedPosX, @AttachedPosY, @AttachedPosZ, @DynAttrs,
383 @PhysicsShapeType, @Density, @GravityModifier, @Friction, @Restitution
384 )
385 END";
386
387 //Set commandtext.
388 sqlCommand.CommandText = queryPrims;
389 //Add parameters
390 sqlCommand.Parameters.AddRange(CreatePrimParameters(sceneObjectPart, sceneGroupID, regionUUID));
391
392 //Execute the query. If it fails then error is trapped in calling function
393 sqlCommand.ExecuteNonQuery();
394 }
395
396 /// <summary>
397 /// Stores the scene object prim shapes.
398 /// </summary>
399 /// <param name="sceneObjectPart">The sceneobjectpart containing prim shape.</param>
400 /// <param name="sqlCommand">The SQL command with the transaction.</param>
401 /// <param name="sceneGroupID">The scenegroup UUID.</param>
402 /// <param name="regionUUID">The region UUID.</param>
403 private void StoreSceneObjectPrimShapes(SceneObjectPart sceneObjectPart, SqlCommand sqlCommand, UUID sceneGroupID, UUID regionUUID)
404 {
405 //Big query to or insert or update primshapes
406 //Note for SQL Server 2008 this can be simplified
407 string queryPrimShapes = @"
408IF EXISTS (SELECT UUID FROM primshapes WHERE UUID = @UUID)
409 BEGIN
410 UPDATE primshapes SET
411 Shape = @Shape, ScaleX = @ScaleX, ScaleY = @ScaleY, ScaleZ = @ScaleZ, PCode = @PCode, PathBegin = @PathBegin,
412 PathEnd = @PathEnd, PathScaleX = @PathScaleX, PathScaleY = @PathScaleY, PathShearX = @PathShearX, PathShearY = @PathShearY,
413 PathSkew = @PathSkew, PathCurve = @PathCurve, PathRadiusOffset = @PathRadiusOffset, PathRevolutions = @PathRevolutions,
414 PathTaperX = @PathTaperX, PathTaperY = @PathTaperY, PathTwist = @PathTwist, PathTwistBegin = @PathTwistBegin,
415 ProfileBegin = @ProfileBegin, ProfileEnd = @ProfileEnd, ProfileCurve = @ProfileCurve, ProfileHollow = @ProfileHollow,
416 Texture = @Texture, ExtraParams = @ExtraParams, State = @State, Media = @Media
417 WHERE UUID = @UUID
418 END
419ELSE
420 BEGIN
421 INSERT INTO
422 primshapes (
423 UUID, Shape, ScaleX, ScaleY, ScaleZ, PCode, PathBegin, PathEnd, PathScaleX, PathScaleY, PathShearX, PathShearY,
424 PathSkew, PathCurve, PathRadiusOffset, PathRevolutions, PathTaperX, PathTaperY, PathTwist, PathTwistBegin, ProfileBegin,
425 ProfileEnd, ProfileCurve, ProfileHollow, Texture, ExtraParams, State, Media
426 ) VALUES (
427 @UUID, @Shape, @ScaleX, @ScaleY, @ScaleZ, @PCode, @PathBegin, @PathEnd, @PathScaleX, @PathScaleY, @PathShearX, @PathShearY,
428 @PathSkew, @PathCurve, @PathRadiusOffset, @PathRevolutions, @PathTaperX, @PathTaperY, @PathTwist, @PathTwistBegin, @ProfileBegin,
429 @ProfileEnd, @ProfileCurve, @ProfileHollow, @Texture, @ExtraParams, @State, @Media
430 )
431 END";
432
433 //Set commandtext.
434 sqlCommand.CommandText = queryPrimShapes;
435
436 //Add parameters
437 sqlCommand.Parameters.AddRange(CreatePrimShapeParameters(sceneObjectPart, sceneGroupID, regionUUID));
438
439 //Execute the query. If it fails then error is trapped in calling function
440 sqlCommand.ExecuteNonQuery();
441
442 }
443
444 /// <summary>
445 /// Removes a object from the database.
446 /// Meaning removing it from tables Prims, PrimShapes and PrimItems
447 /// </summary>
448 /// <param name="objectID">id of scenegroup</param>
449 /// <param name="regionUUID">regionUUID (is this used anyway</param>
450 public void RemoveObject(UUID objectID, UUID regionUUID)
451 {
452 _Log.InfoFormat("[MSSQL]: Removing obj: {0} from region: {1}", objectID, regionUUID);
453
454 //Remove from prims and primsitem table
455 string sqlPrims = "DELETE FROM PRIMS WHERE SceneGroupID = @objectID";
456 string sqlPrimItems = "DELETE FROM PRIMITEMS WHERE primID in (SELECT UUID FROM PRIMS WHERE SceneGroupID = @objectID)";
457 string sqlPrimShapes = "DELETE FROM PRIMSHAPES WHERE uuid in (SELECT UUID FROM PRIMS WHERE SceneGroupID = @objectID)";
458
459 lock (_Database)
460 {
461 //Using the non transaction mode.
462 using (SqlConnection conn = new SqlConnection(m_connectionString))
463 using (SqlCommand cmd = new SqlCommand())
464 {
465 cmd.Connection = conn;
466 cmd.CommandText = sqlPrimShapes;
467 conn.Open();
468 cmd.Parameters.Add(_Database.CreateParameter("objectID", objectID));
469 cmd.ExecuteNonQuery();
470
471 cmd.CommandText = sqlPrimItems;
472 cmd.ExecuteNonQuery();
473
474 cmd.CommandText = sqlPrims;
475 cmd.ExecuteNonQuery();
476 }
477 }
478 }
479
480 /// <summary>
481 /// Store the inventory of a prim. Warning deletes everything first and then adds all again.
482 /// </summary>
483 /// <param name="primID"></param>
484 /// <param name="items"></param>
485 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
486 {
487 //_Log.InfoFormat("[REGION DB: Persisting Prim Inventory with prim ID {0}", primID);
488
489 //Statement from MySQL section!
490 // For now, we're just going to crudely remove all the previous inventory items
491 // no matter whether they have changed or not, and replace them with the current set.
492
493 //Delete everything from PrimID
494 //TODO add index on PrimID in DB, if not already exist
495
496 string sql = "DELETE PRIMITEMS WHERE primID = @primID";
497 using (SqlConnection conn = new SqlConnection(m_connectionString))
498 using (SqlCommand cmd = new SqlCommand(sql, conn))
499 {
500 cmd.Parameters.Add(_Database.CreateParameter("@primID", primID));
501 conn.Open();
502 cmd.ExecuteNonQuery();
503 }
504
505 sql =
506 @"INSERT INTO primitems (
507 itemID,primID,assetID,parentFolderID,invType,assetType,name,description,creationDate,creatorID,ownerID,lastOwnerID,groupID,
508 nextPermissions,currentPermissions,basePermissions,everyonePermissions,groupPermissions,flags)
509 VALUES (@itemID,@primID,@assetID,@parentFolderID,@invType,@assetType,@name,@description,@creationDate,@creatorID,@ownerID,
510 @lastOwnerID,@groupID,@nextPermissions,@currentPermissions,@basePermissions,@everyonePermissions,@groupPermissions,@flags)";
511
512 using (SqlConnection conn = new SqlConnection(m_connectionString))
513 using (SqlCommand cmd = new SqlCommand(sql, conn))
514 {
515 conn.Open();
516 foreach (TaskInventoryItem taskItem in items)
517 {
518 cmd.Parameters.AddRange(CreatePrimInventoryParameters(taskItem));
519 cmd.ExecuteNonQuery();
520 cmd.Parameters.Clear();
521 }
522 }
523 }
524
525 #endregion
526
527 /// <summary>
528 /// Loads the terrain map.
529 /// </summary>
530 /// <param name="regionID">regionID.</param>
531 /// <returns></returns>
532 public double[,] LoadTerrain(UUID regionID)
533 {
534 double[,] ret = null;
535 TerrainData terrData = LoadTerrain(regionID, (int)Constants.RegionSize, (int)Constants.RegionSize, (int)Constants.RegionHeight);
536 if (terrData != null)
537 ret = terrData.GetDoubles();
538 return ret;
539 }
540
541 // Returns 'null' if region not found
542 public TerrainData LoadTerrain(UUID regionID, int pSizeX, int pSizeY, int pSizeZ)
543 {
544 TerrainData terrData = null;
545
546 string sql = "select top 1 RegionUUID, Revision, Heightfield from terrain where RegionUUID = @RegionUUID order by Revision desc";
547
548 using (SqlConnection conn = new SqlConnection(m_connectionString))
549 {
550 using (SqlCommand cmd = new SqlCommand(sql, conn))
551 {
552 // MySqlParameter param = new MySqlParameter();
553 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", regionID));
554 conn.Open();
555 using (SqlDataReader reader = cmd.ExecuteReader())
556 {
557 int rev;
558 if (reader.Read())
559 {
560 rev = (int)reader["Revision"];
561 byte[] blob = (byte[])reader["Heightfield"];
562 terrData = TerrainData.CreateFromDatabaseBlobFactory(pSizeX, pSizeY, pSizeZ, rev, blob);
563 }
564 else
565 {
566 _Log.Info("[REGION DB]: No terrain found for region");
567 return null;
568 }
569 _Log.Info("[REGION DB]: Loaded terrain revision r" + rev);
570 }
571 }
572 }
573
574 return terrData;
575 }
576
577 // Legacy entry point for when terrain was always a 256x256 hieghtmap
578 public void StoreTerrain(double[,] ter, UUID regionID)
579 {
580 StoreTerrain(new HeightmapTerrainData(ter), regionID);
581 }
582
583 /// <summary>
584 /// Stores the terrain map to DB.
585 /// </summary>
586 /// <param name="terrain">terrain map data.</param>
587 /// <param name="regionID">regionID.</param>
588 public void StoreTerrain(TerrainData terrData, UUID regionID)
589 {
590 //Delete old terrain map
591 string sql = "delete from terrain where RegionUUID=@RegionUUID";
592 using (SqlConnection conn = new SqlConnection(m_connectionString))
593 using (SqlCommand cmd = new SqlCommand(sql, conn))
594 {
595 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", regionID));
596 conn.Open();
597 cmd.ExecuteNonQuery();
598 }
599
600 sql = "insert into terrain(RegionUUID, Revision, Heightfield) values(@RegionUUID, @Revision, @Heightfield)";
601
602 int terrainDBRevision;
603 Array terrainDBblob;
604 terrData.GetDatabaseBlob(out terrainDBRevision, out terrainDBblob);
605
606 using (SqlConnection conn = new SqlConnection(m_connectionString))
607 {
608 using (SqlCommand cmd = new SqlCommand(sql, conn))
609 {
610 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", regionID));
611 cmd.Parameters.Add(_Database.CreateParameter("@Revision", terrainDBRevision));
612 cmd.Parameters.Add(_Database.CreateParameter("@Heightfield", terrainDBblob));
613 conn.Open();
614 cmd.ExecuteNonQuery();
615 }
616 }
617
618 _Log.InfoFormat("{0} Stored terrain revision r={1}", LogHeader, terrainDBRevision);
619 }
620
621 /// <summary>
622 /// Loads all the land objects of a region.
623 /// </summary>
624 /// <param name="regionUUID">The region UUID.</param>
625 /// <returns></returns>
626 public List<LandData> LoadLandObjects(UUID regionUUID)
627 {
628 List<LandData> LandDataForRegion = new List<LandData>();
629
630 string sql = "select * from land where RegionUUID = @RegionUUID";
631
632 //Retrieve all land data from region
633 using (SqlConnection conn = new SqlConnection(m_connectionString))
634 using (SqlCommand cmd = new SqlCommand(sql, conn))
635 {
636 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", regionUUID));
637 conn.Open();
638 using (SqlDataReader readerLandData = cmd.ExecuteReader())
639 {
640 while (readerLandData.Read())
641 {
642 LandDataForRegion.Add(BuildLandData(readerLandData));
643 }
644 }
645 }
646
647 //Retrieve all accesslist data for all landdata
648 foreach (LandData LandData in LandDataForRegion)
649 {
650 sql = "select * from landaccesslist where LandUUID = @LandUUID";
651 using (SqlConnection conn = new SqlConnection(m_connectionString))
652 using (SqlCommand cmd = new SqlCommand(sql, conn))
653 {
654 cmd.Parameters.Add(_Database.CreateParameter("@LandUUID", LandData.GlobalID));
655 conn.Open();
656 using (SqlDataReader readerAccessList = cmd.ExecuteReader())
657 {
658 while (readerAccessList.Read())
659 {
660 LandData.ParcelAccessList.Add(BuildLandAccessData(readerAccessList));
661 }
662 }
663 }
664 }
665
666 //Return data
667 return LandDataForRegion;
668 }
669
670 /// <summary>
671 /// Stores land object with landaccess list.
672 /// </summary>
673 /// <param name="parcel">parcel data.</param>
674 public void StoreLandObject(ILandObject parcel)
675 {
676 //As this is only one record in land table I just delete all and then add a new record.
677 //As the delete landaccess is already in the mysql code
678
679 //Delete old values
680 RemoveLandObject(parcel.LandData.GlobalID);
681
682 //Insert new values
683 string sql = @"INSERT INTO [land]
684([UUID],[RegionUUID],[LocalLandID],[Bitmap],[Name],[Description],[OwnerUUID],[IsGroupOwned],[Area],[AuctionID],[Category],[ClaimDate],[ClaimPrice],[GroupUUID],[SalePrice],[LandStatus],[LandFlags],[LandingType],[MediaAutoScale],[MediaTextureUUID],[MediaURL],[MusicURL],[PassHours],[PassPrice],[SnapshotUUID],[UserLocationX],[UserLocationY],[UserLocationZ],[UserLookAtX],[UserLookAtY],[UserLookAtZ],[AuthbuyerID],[OtherCleanTime])
685VALUES
686(@UUID,@RegionUUID,@LocalLandID,@Bitmap,@Name,@Description,@OwnerUUID,@IsGroupOwned,@Area,@AuctionID,@Category,@ClaimDate,@ClaimPrice,@GroupUUID,@SalePrice,@LandStatus,@LandFlags,@LandingType,@MediaAutoScale,@MediaTextureUUID,@MediaURL,@MusicURL,@PassHours,@PassPrice,@SnapshotUUID,@UserLocationX,@UserLocationY,@UserLocationZ,@UserLookAtX,@UserLookAtY,@UserLookAtZ,@AuthbuyerID,@OtherCleanTime)";
687
688 using (SqlConnection conn = new SqlConnection(m_connectionString))
689 using (SqlCommand cmd = new SqlCommand(sql, conn))
690 {
691 cmd.Parameters.AddRange(CreateLandParameters(parcel.LandData, parcel.RegionUUID));
692 conn.Open();
693 cmd.ExecuteNonQuery();
694 }
695
696 sql = "INSERT INTO [landaccesslist] ([LandUUID],[AccessUUID],[Flags],[Expires]) VALUES (@LandUUID,@AccessUUID,@Flags,@Expires)";
697
698 using (SqlConnection conn = new SqlConnection(m_connectionString))
699 using (SqlCommand cmd = new SqlCommand(sql, conn))
700 {
701 conn.Open();
702 foreach (LandAccessEntry parcelAccessEntry in parcel.LandData.ParcelAccessList)
703 {
704 cmd.Parameters.AddRange(CreateLandAccessParameters(parcelAccessEntry, parcel.RegionUUID));
705
706 cmd.ExecuteNonQuery();
707 cmd.Parameters.Clear();
708 }
709 }
710 }
711
712 /// <summary>
713 /// Removes a land object from DB.
714 /// </summary>
715 /// <param name="globalID">UUID of landobject</param>
716 public void RemoveLandObject(UUID globalID)
717 {
718 string sql = "delete from land where UUID=@UUID";
719 using (SqlConnection conn = new SqlConnection(m_connectionString))
720 using (SqlCommand cmd = new SqlCommand(sql, conn))
721 {
722 cmd.Parameters.Add(_Database.CreateParameter("@UUID", globalID));
723 conn.Open();
724 cmd.ExecuteNonQuery();
725 }
726 sql = "delete from landaccesslist where LandUUID=@UUID";
727 using (SqlConnection conn = new SqlConnection(m_connectionString))
728 using (SqlCommand cmd = new SqlCommand(sql, conn))
729 {
730 cmd.Parameters.Add(_Database.CreateParameter("@UUID", globalID));
731 conn.Open();
732 cmd.ExecuteNonQuery();
733 }
734 }
735 public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
736 {
737 RegionLightShareData nWP = new RegionLightShareData();
738 nWP.OnSave += StoreRegionWindlightSettings;
739 string sql = "select * from [regionwindlight] where region_id = @regionID";
740 using (SqlConnection conn = new SqlConnection(m_connectionString))
741 using (SqlCommand cmd = new SqlCommand(sql, conn))
742 {
743 cmd.Parameters.Add(_Database.CreateParameter("@regionID", regionUUID));
744 conn.Open();
745 using (SqlDataReader result = cmd.ExecuteReader())
746 {
747 if (!result.Read())
748 {
749 //No result, so store our default windlight profile and return it
750 nWP.regionID = regionUUID;
751 StoreRegionWindlightSettings(nWP);
752 return nWP;
753 }
754 else
755 {
756 nWP.regionID = DBGuid.FromDB(result["region_id"]);
757 nWP.waterColor.X = Convert.ToSingle(result["water_color_r"]);
758 nWP.waterColor.Y = Convert.ToSingle(result["water_color_g"]);
759 nWP.waterColor.Z = Convert.ToSingle(result["water_color_b"]);
760 nWP.waterFogDensityExponent = Convert.ToSingle(result["water_fog_density_exponent"]);
761 nWP.underwaterFogModifier = Convert.ToSingle(result["underwater_fog_modifier"]);
762 nWP.reflectionWaveletScale.X = Convert.ToSingle(result["reflection_wavelet_scale_1"]);
763 nWP.reflectionWaveletScale.Y = Convert.ToSingle(result["reflection_wavelet_scale_2"]);
764 nWP.reflectionWaveletScale.Z = Convert.ToSingle(result["reflection_wavelet_scale_3"]);
765 nWP.fresnelScale = Convert.ToSingle(result["fresnel_scale"]);
766 nWP.fresnelOffset = Convert.ToSingle(result["fresnel_offset"]);
767 nWP.refractScaleAbove = Convert.ToSingle(result["refract_scale_above"]);
768 nWP.refractScaleBelow = Convert.ToSingle(result["refract_scale_below"]);
769 nWP.blurMultiplier = Convert.ToSingle(result["blur_multiplier"]);
770 nWP.bigWaveDirection.X = Convert.ToSingle(result["big_wave_direction_x"]);
771 nWP.bigWaveDirection.Y = Convert.ToSingle(result["big_wave_direction_y"]);
772 nWP.littleWaveDirection.X = Convert.ToSingle(result["little_wave_direction_x"]);
773 nWP.littleWaveDirection.Y = Convert.ToSingle(result["little_wave_direction_y"]);
774 UUID.TryParse(result["normal_map_texture"].ToString(), out nWP.normalMapTexture);
775 nWP.horizon.X = Convert.ToSingle(result["horizon_r"]);
776 nWP.horizon.Y = Convert.ToSingle(result["horizon_g"]);
777 nWP.horizon.Z = Convert.ToSingle(result["horizon_b"]);
778 nWP.horizon.W = Convert.ToSingle(result["horizon_i"]);
779 nWP.hazeHorizon = Convert.ToSingle(result["haze_horizon"]);
780 nWP.blueDensity.X = Convert.ToSingle(result["blue_density_r"]);
781 nWP.blueDensity.Y = Convert.ToSingle(result["blue_density_g"]);
782 nWP.blueDensity.Z = Convert.ToSingle(result["blue_density_b"]);
783 nWP.blueDensity.W = Convert.ToSingle(result["blue_density_i"]);
784 nWP.hazeDensity = Convert.ToSingle(result["haze_density"]);
785 nWP.densityMultiplier = Convert.ToSingle(result["density_multiplier"]);
786 nWP.distanceMultiplier = Convert.ToSingle(result["distance_multiplier"]);
787 nWP.maxAltitude = Convert.ToUInt16(result["max_altitude"]);
788 nWP.sunMoonColor.X = Convert.ToSingle(result["sun_moon_color_r"]);
789 nWP.sunMoonColor.Y = Convert.ToSingle(result["sun_moon_color_g"]);
790 nWP.sunMoonColor.Z = Convert.ToSingle(result["sun_moon_color_b"]);
791 nWP.sunMoonColor.W = Convert.ToSingle(result["sun_moon_color_i"]);
792 nWP.sunMoonPosition = Convert.ToSingle(result["sun_moon_position"]);
793 nWP.ambient.X = Convert.ToSingle(result["ambient_r"]);
794 nWP.ambient.Y = Convert.ToSingle(result["ambient_g"]);
795 nWP.ambient.Z = Convert.ToSingle(result["ambient_b"]);
796 nWP.ambient.W = Convert.ToSingle(result["ambient_i"]);
797 nWP.eastAngle = Convert.ToSingle(result["east_angle"]);
798 nWP.sunGlowFocus = Convert.ToSingle(result["sun_glow_focus"]);
799 nWP.sunGlowSize = Convert.ToSingle(result["sun_glow_size"]);
800 nWP.sceneGamma = Convert.ToSingle(result["scene_gamma"]);
801 nWP.starBrightness = Convert.ToSingle(result["star_brightness"]);
802 nWP.cloudColor.X = Convert.ToSingle(result["cloud_color_r"]);
803 nWP.cloudColor.Y = Convert.ToSingle(result["cloud_color_g"]);
804 nWP.cloudColor.Z = Convert.ToSingle(result["cloud_color_b"]);
805 nWP.cloudColor.W = Convert.ToSingle(result["cloud_color_i"]);
806 nWP.cloudXYDensity.X = Convert.ToSingle(result["cloud_x"]);
807 nWP.cloudXYDensity.Y = Convert.ToSingle(result["cloud_y"]);
808 nWP.cloudXYDensity.Z = Convert.ToSingle(result["cloud_density"]);
809 nWP.cloudCoverage = Convert.ToSingle(result["cloud_coverage"]);
810 nWP.cloudScale = Convert.ToSingle(result["cloud_scale"]);
811 nWP.cloudDetailXYDensity.X = Convert.ToSingle(result["cloud_detail_x"]);
812 nWP.cloudDetailXYDensity.Y = Convert.ToSingle(result["cloud_detail_y"]);
813 nWP.cloudDetailXYDensity.Z = Convert.ToSingle(result["cloud_detail_density"]);
814 nWP.cloudScrollX = Convert.ToSingle(result["cloud_scroll_x"]);
815 nWP.cloudScrollXLock = Convert.ToBoolean(result["cloud_scroll_x_lock"]);
816 nWP.cloudScrollY = Convert.ToSingle(result["cloud_scroll_y"]);
817 nWP.cloudScrollYLock = Convert.ToBoolean(result["cloud_scroll_y_lock"]);
818 nWP.drawClassicClouds = Convert.ToBoolean(result["draw_classic_clouds"]);
819 nWP.valid = true;
820 }
821 }
822 }
823 return nWP;
824 }
825
826 public void RemoveRegionWindlightSettings(UUID regionID)
827 {
828 string sql = "delete from [regionwindlight] where region_id = @region_id";
829 using (SqlConnection conn = new SqlConnection(m_connectionString))
830 using (SqlCommand cmd = new SqlCommand(sql, conn))
831 {
832 conn.Open();
833 cmd.Parameters.Add(_Database.CreateParameter("@region_id", regionID));
834 cmd.ExecuteNonQuery();
835 }
836 }
837
838 public void StoreRegionWindlightSettings(RegionLightShareData wl)
839 {
840 string sql = "select count (region_id) from regionwindlight where region_id = @region_id";
841 bool exists = false;
842 using (SqlConnection conn = new SqlConnection(m_connectionString))
843 {
844 conn.Open();
845 using (SqlCommand cmd = new SqlCommand(sql, conn))
846 {
847 cmd.Parameters.Add(_Database.CreateParameter("@region_id", wl.regionID));
848 exists = (int)cmd.ExecuteScalar() > 0;
849 }
850 }
851 if (exists)
852 {
853 RemoveRegionWindlightSettings(wl.regionID);
854 }
855
856 // sql insert
857 sql = @"INSERT INTO [regionwindlight]
858 ([region_id]
859 ,[water_color_r]
860 ,[water_color_g]
861 ,[water_color_b]
862 ,[water_fog_density_exponent]
863 ,[underwater_fog_modifier]
864 ,[reflection_wavelet_scale_1]
865 ,[reflection_wavelet_scale_2]
866 ,[reflection_wavelet_scale_3]
867 ,[fresnel_scale]
868 ,[fresnel_offset]
869 ,[refract_scale_above]
870 ,[refract_scale_below]
871 ,[blur_multiplier]
872 ,[big_wave_direction_x]
873 ,[big_wave_direction_y]
874 ,[little_wave_direction_x]
875 ,[little_wave_direction_y]
876 ,[normal_map_texture]
877 ,[horizon_r]
878 ,[horizon_g]
879 ,[horizon_b]
880 ,[horizon_i]
881 ,[haze_horizon]
882 ,[blue_density_r]
883 ,[blue_density_g]
884 ,[blue_density_b]
885 ,[blue_density_i]
886 ,[haze_density]
887 ,[density_multiplier]
888 ,[distance_multiplier]
889 ,[max_altitude]
890 ,[sun_moon_color_r]
891 ,[sun_moon_color_g]
892 ,[sun_moon_color_b]
893 ,[sun_moon_color_i]
894 ,[sun_moon_position]
895 ,[ambient_r]
896 ,[ambient_g]
897 ,[ambient_b]
898 ,[ambient_i]
899 ,[east_angle]
900 ,[sun_glow_focus]
901 ,[sun_glow_size]
902 ,[scene_gamma]
903 ,[star_brightness]
904 ,[cloud_color_r]
905 ,[cloud_color_g]
906 ,[cloud_color_b]
907 ,[cloud_color_i]
908 ,[cloud_x]
909 ,[cloud_y]
910 ,[cloud_density]
911 ,[cloud_coverage]
912 ,[cloud_scale]
913 ,[cloud_detail_x]
914 ,[cloud_detail_y]
915 ,[cloud_detail_density]
916 ,[cloud_scroll_x]
917 ,[cloud_scroll_x_lock]
918 ,[cloud_scroll_y]
919 ,[cloud_scroll_y_lock]
920 ,[draw_classic_clouds])
921 VALUES
922 (@region_id
923 ,@water_color_r
924 ,@water_color_g
925 ,@water_color_b
926 ,@water_fog_density_exponent
927 ,@underwater_fog_modifier
928 ,@reflection_wavelet_scale_1
929 ,@reflection_wavelet_scale_2
930 ,@reflection_wavelet_scale_3
931 ,@fresnel_scale
932 ,@fresnel_offset
933 ,@refract_scale_above
934 ,@refract_scale_below
935 ,@blur_multiplier
936 ,@big_wave_direction_x
937 ,@big_wave_direction_y
938 ,@little_wave_direction_x
939 ,@little_wave_direction_y
940 ,@normal_map_texture
941 ,@horizon_r
942 ,@horizon_g
943 ,@horizon_b
944 ,@horizon_i
945 ,@haze_horizon
946 ,@blue_density_r
947 ,@blue_density_g
948 ,@blue_density_b
949 ,@blue_density_i
950 ,@haze_density
951 ,@density_multiplier
952 ,@distance_multiplier
953 ,@max_altitude
954 ,@sun_moon_color_r
955 ,@sun_moon_color_g
956 ,@sun_moon_color_b
957 ,@sun_moon_color_i
958 ,@sun_moon_position
959 ,@ambient_r
960 ,@ambient_g
961 ,@ambient_b
962 ,@ambient_i
963 ,@east_angle
964 ,@sun_glow_focus
965 ,@sun_glow_size
966 ,@scene_gamma
967 ,@star_brightness
968 ,@cloud_color_r
969 ,@cloud_color_g
970 ,@cloud_color_b
971 ,@cloud_color_i
972 ,@cloud_x
973 ,@cloud_y
974 ,@cloud_density
975 ,@cloud_coverage
976 ,@cloud_scale
977 ,@cloud_detail_x
978 ,@cloud_detail_y
979 ,@cloud_detail_density
980 ,@cloud_scroll_x
981 ,@cloud_scroll_x_lock
982 ,@cloud_scroll_y
983 ,@cloud_scroll_y_lock
984 ,@draw_classic_clouds)";
985 using (SqlConnection conn = new SqlConnection(m_connectionString))
986 {
987 conn.Open();
988 using (SqlCommand cmd = new SqlCommand(sql, conn))
989 {
990 cmd.Parameters.Add(_Database.CreateParameter("region_id", wl.regionID));
991 cmd.Parameters.Add(_Database.CreateParameter("water_color_r", wl.waterColor.X));
992 cmd.Parameters.Add(_Database.CreateParameter("water_color_g", wl.waterColor.Y));
993 cmd.Parameters.Add(_Database.CreateParameter("water_color_b", wl.waterColor.Z));
994 cmd.Parameters.Add(_Database.CreateParameter("water_fog_density_exponent", wl.waterFogDensityExponent));
995 cmd.Parameters.Add(_Database.CreateParameter("underwater_fog_modifier", wl.underwaterFogModifier));
996 cmd.Parameters.Add(_Database.CreateParameter("reflection_wavelet_scale_1", wl.reflectionWaveletScale.X));
997 cmd.Parameters.Add(_Database.CreateParameter("reflection_wavelet_scale_2", wl.reflectionWaveletScale.Y));
998 cmd.Parameters.Add(_Database.CreateParameter("reflection_wavelet_scale_3", wl.reflectionWaveletScale.Z));
999 cmd.Parameters.Add(_Database.CreateParameter("fresnel_scale", wl.fresnelScale));
1000 cmd.Parameters.Add(_Database.CreateParameter("fresnel_offset", wl.fresnelOffset));
1001 cmd.Parameters.Add(_Database.CreateParameter("refract_scale_above", wl.refractScaleAbove));
1002 cmd.Parameters.Add(_Database.CreateParameter("refract_scale_below", wl.refractScaleBelow));
1003 cmd.Parameters.Add(_Database.CreateParameter("blur_multiplier", wl.blurMultiplier));
1004 cmd.Parameters.Add(_Database.CreateParameter("big_wave_direction_x", wl.bigWaveDirection.X));
1005 cmd.Parameters.Add(_Database.CreateParameter("big_wave_direction_y", wl.bigWaveDirection.Y));
1006 cmd.Parameters.Add(_Database.CreateParameter("little_wave_direction_x", wl.littleWaveDirection.X));
1007 cmd.Parameters.Add(_Database.CreateParameter("little_wave_direction_y", wl.littleWaveDirection.Y));
1008 cmd.Parameters.Add(_Database.CreateParameter("normal_map_texture", wl.normalMapTexture));
1009 cmd.Parameters.Add(_Database.CreateParameter("horizon_r", wl.horizon.X));
1010 cmd.Parameters.Add(_Database.CreateParameter("horizon_g", wl.horizon.Y));
1011 cmd.Parameters.Add(_Database.CreateParameter("horizon_b", wl.horizon.Z));
1012 cmd.Parameters.Add(_Database.CreateParameter("horizon_i", wl.horizon.W));
1013 cmd.Parameters.Add(_Database.CreateParameter("haze_horizon", wl.hazeHorizon));
1014 cmd.Parameters.Add(_Database.CreateParameter("blue_density_r", wl.blueDensity.X));
1015 cmd.Parameters.Add(_Database.CreateParameter("blue_density_g", wl.blueDensity.Y));
1016 cmd.Parameters.Add(_Database.CreateParameter("blue_density_b", wl.blueDensity.Z));
1017 cmd.Parameters.Add(_Database.CreateParameter("blue_density_i", wl.blueDensity.W));
1018 cmd.Parameters.Add(_Database.CreateParameter("haze_density", wl.hazeDensity));
1019 cmd.Parameters.Add(_Database.CreateParameter("density_multiplier", wl.densityMultiplier));
1020 cmd.Parameters.Add(_Database.CreateParameter("distance_multiplier", wl.distanceMultiplier));
1021 cmd.Parameters.Add(_Database.CreateParameter("max_altitude", wl.maxAltitude));
1022 cmd.Parameters.Add(_Database.CreateParameter("sun_moon_color_r", wl.sunMoonColor.X));
1023 cmd.Parameters.Add(_Database.CreateParameter("sun_moon_color_g", wl.sunMoonColor.Y));
1024 cmd.Parameters.Add(_Database.CreateParameter("sun_moon_color_b", wl.sunMoonColor.Z));
1025 cmd.Parameters.Add(_Database.CreateParameter("sun_moon_color_i", wl.sunMoonColor.W));
1026 cmd.Parameters.Add(_Database.CreateParameter("sun_moon_position", wl.sunMoonPosition));
1027 cmd.Parameters.Add(_Database.CreateParameter("ambient_r", wl.ambient.X));
1028 cmd.Parameters.Add(_Database.CreateParameter("ambient_g", wl.ambient.Y));
1029 cmd.Parameters.Add(_Database.CreateParameter("ambient_b", wl.ambient.Z));
1030 cmd.Parameters.Add(_Database.CreateParameter("ambient_i", wl.ambient.W));
1031 cmd.Parameters.Add(_Database.CreateParameter("east_angle", wl.eastAngle));
1032 cmd.Parameters.Add(_Database.CreateParameter("sun_glow_focus", wl.sunGlowFocus));
1033 cmd.Parameters.Add(_Database.CreateParameter("sun_glow_size", wl.sunGlowSize));
1034 cmd.Parameters.Add(_Database.CreateParameter("scene_gamma", wl.sceneGamma));
1035 cmd.Parameters.Add(_Database.CreateParameter("star_brightness", wl.starBrightness));
1036 cmd.Parameters.Add(_Database.CreateParameter("cloud_color_r", wl.cloudColor.X));
1037 cmd.Parameters.Add(_Database.CreateParameter("cloud_color_g", wl.cloudColor.Y));
1038 cmd.Parameters.Add(_Database.CreateParameter("cloud_color_b", wl.cloudColor.Z));
1039 cmd.Parameters.Add(_Database.CreateParameter("cloud_color_i", wl.cloudColor.W));
1040 cmd.Parameters.Add(_Database.CreateParameter("cloud_x", wl.cloudXYDensity.X));
1041 cmd.Parameters.Add(_Database.CreateParameter("cloud_y", wl.cloudXYDensity.Y));
1042 cmd.Parameters.Add(_Database.CreateParameter("cloud_density", wl.cloudXYDensity.Z));
1043 cmd.Parameters.Add(_Database.CreateParameter("cloud_coverage", wl.cloudCoverage));
1044 cmd.Parameters.Add(_Database.CreateParameter("cloud_scale", wl.cloudScale));
1045 cmd.Parameters.Add(_Database.CreateParameter("cloud_detail_x", wl.cloudDetailXYDensity.X));
1046 cmd.Parameters.Add(_Database.CreateParameter("cloud_detail_y", wl.cloudDetailXYDensity.Y));
1047 cmd.Parameters.Add(_Database.CreateParameter("cloud_detail_density", wl.cloudDetailXYDensity.Z));
1048 cmd.Parameters.Add(_Database.CreateParameter("cloud_scroll_x", wl.cloudScrollX));
1049 cmd.Parameters.Add(_Database.CreateParameter("cloud_scroll_x_lock", wl.cloudScrollXLock));
1050 cmd.Parameters.Add(_Database.CreateParameter("cloud_scroll_y", wl.cloudScrollY));
1051 cmd.Parameters.Add(_Database.CreateParameter("cloud_scroll_y_lock", wl.cloudScrollYLock));
1052 cmd.Parameters.Add(_Database.CreateParameter("draw_classic_clouds", wl.drawClassicClouds));
1053
1054 cmd.ExecuteNonQuery();
1055 }
1056 }
1057 #region update
1058 // }
1059 // else
1060 // {
1061 // // sql update
1062 // sql = @"UPDATE [OpenSim].[dbo].[regionwindlight]
1063 // SET [region_id] = @region_id
1064 // ,[water_color_r] = @water_color_r
1065 // ,[water_color_g] = @water_color_g
1066 // ,[water_color_b] = @water_color_b
1067 // ,[water_fog_density_exponent] = @water_fog_density_exponent
1068 // ,[underwater_fog_modifier] = @underwater_fog_modifier
1069 // ,[reflection_wavelet_scale_1] = @reflection_wavelet_scale_1
1070 // ,[reflection_wavelet_scale_2] = @reflection_wavelet_scale_2
1071 // ,[reflection_wavelet_scale_3] = @reflection_wavelet_scale_3
1072 // ,[fresnel_scale] = @fresnel_scale
1073 // ,[fresnel_offset] = @fresnel_offset
1074 // ,[refract_scale_above] = @refract_scale_above
1075 // ,[refract_scale_below] = @refract_scale_below
1076 // ,[blur_multiplier] = @blur_multiplier
1077 // ,[big_wave_direction_x] = @big_wave_direction_x
1078 // ,[big_wave_direction_y] = @big_wave_direction_y
1079 // ,[little_wave_direction_x] = @little_wave_direction_x
1080 // ,[little_wave_direction_y] = @little_wave_direction_y
1081 // ,[normal_map_texture] = @normal_map_texture
1082 // ,[horizon_r] = @horizon_r
1083 // ,[horizon_g] = @horizon_g
1084 // ,[horizon_b] = @horizon_b
1085 // ,[horizon_i] = @horizon_i
1086 // ,[haze_horizon] = @haze_horizon
1087 // ,[blue_density_r] = @blue_density_r
1088 // ,[blue_density_g] = @blue_density_g
1089 // ,[blue_density_b] = @blue_density_b
1090 // ,[blue_density_i] = @blue_density_i
1091 // ,[haze_density] = @haze_density
1092 // ,[density_multiplier] = @density_multiplier
1093 // ,[distance_multiplier] = @distance_multiplier
1094 // ,[max_altitude] = @max_altitude
1095 // ,[sun_moon_color_r] = @sun_moon_color_r
1096 // ,[sun_moon_color_g] = @sun_moon_color_g
1097 // ,[sun_moon_color_b] = @sun_moon_color_b
1098 // ,[sun_moon_color_i] = @sun_moon_color_i
1099 // ,[sun_moon_position] = @sun_moon_position
1100 // ,[ambient_r] = @ambient_r
1101 // ,[ambient_g] = @ambient_g
1102 // ,[ambient_b] = @ambient_b
1103 // ,[ambient_i] = @ambient_i
1104 // ,[east_angle] = @east_angle
1105 // ,[sun_glow_focus] = @sun_glow_focus
1106 // ,[sun_glow_size] = @sun_glow_size
1107 // ,[scene_gamma] = @scene_gamma
1108 // ,[star_brightness] = @star_brightness
1109 // ,[cloud_color_r] = @cloud_color_r
1110 // ,[cloud_color_g] = @cloud_color_g
1111 // ,[cloud_color_b] = @cloud_color_b
1112 // ,[cloud_color_i] = @cloud_color_i
1113 // ,[cloud_x] = @cloud_x
1114 // ,[cloud_y] = @cloud_y
1115 // ,[cloud_density] = @cloud_density
1116 // ,[cloud_coverage] = @cloud_coverage
1117 // ,[cloud_scale] = @cloud_scale
1118 // ,[cloud_detail_x] = @cloud_detail_x
1119 // ,[cloud_detail_y] = @cloud_detail_y
1120 // ,[cloud_detail_density] = @cloud_detail_density
1121 // ,[cloud_scroll_x] = @cloud_scroll_x
1122 // ,[cloud_scroll_x_lock] = @cloud_scroll_x_lock
1123 // ,[cloud_scroll_y] = @cloud_scroll_y
1124 // ,[cloud_scroll_y_lock] = @cloud_scroll_y_lock
1125 // ,[draw_classic_clouds] = @draw_classic_clouds
1126 // WHERE region_id = @region_id";
1127 // using (SqlConnection conn = new SqlConnection(m_connectionString))
1128 // {
1129 // conn.Open();
1130 // using (SqlCommand cmd = new SqlCommand(sql, conn))
1131 // {
1132 // cmd.Parameters.AddWithValue("region_id", wl.regionID);
1133 // cmd.Parameters.AddWithValue("water_color_r", wl.waterColor.X);
1134 // cmd.Parameters.AddWithValue("water_color_g", wl.waterColor.Y);
1135 // cmd.Parameters.AddWithValue("water_color_b", wl.waterColor.Z);
1136 // cmd.Parameters.AddWithValue("water_fog_density_exponent", wl.waterFogDensityExponent);
1137 // cmd.Parameters.AddWithValue("underwater_fog_modifier", wl.underwaterFogModifier);
1138 // cmd.Parameters.AddWithValue("reflection_wavelet_scale_1", wl.reflectionWaveletScale.X);
1139 // cmd.Parameters.AddWithValue("reflection_wavelet_scale_2", wl.reflectionWaveletScale.Y);
1140 // cmd.Parameters.AddWithValue("reflection_wavelet_scale_3", wl.reflectionWaveletScale.Z);
1141 // cmd.Parameters.AddWithValue("fresnel_scale", wl.fresnelScale);
1142 // cmd.Parameters.AddWithValue("fresnel_offset", wl.fresnelOffset);
1143 // cmd.Parameters.AddWithValue("refract_scale_above", wl.refractScaleAbove);
1144 // cmd.Parameters.AddWithValue("refract_scale_below", wl.refractScaleBelow);
1145 // cmd.Parameters.AddWithValue("blur_multiplier", wl.blurMultiplier);
1146 // cmd.Parameters.AddWithValue("big_wave_direction_x", wl.bigWaveDirection.X);
1147 // cmd.Parameters.AddWithValue("big_wave_direction_y", wl.bigWaveDirection.Y);
1148 // cmd.Parameters.AddWithValue("little_wave_direction_x", wl.littleWaveDirection.X);
1149 // cmd.Parameters.AddWithValue("little_wave_direction_y", wl.littleWaveDirection.Y);
1150 // cmd.Parameters.AddWithValue("normal_map_texture", wl.normalMapTexture);
1151 // cmd.Parameters.AddWithValue("horizon_r", wl.horizon.X);
1152 // cmd.Parameters.AddWithValue("horizon_g", wl.horizon.Y);
1153 // cmd.Parameters.AddWithValue("horizon_b", wl.horizon.Z);
1154 // cmd.Parameters.AddWithValue("horizon_i", wl.horizon.W);
1155 // cmd.Parameters.AddWithValue("haze_horizon", wl.hazeHorizon);
1156 // cmd.Parameters.AddWithValue("blue_density_r", wl.blueDensity.X);
1157 // cmd.Parameters.AddWithValue("blue_density_g", wl.blueDensity.Y);
1158 // cmd.Parameters.AddWithValue("blue_density_b", wl.blueDensity.Z);
1159 // cmd.Parameters.AddWithValue("blue_density_i", wl.blueDensity.W);
1160 // cmd.Parameters.AddWithValue("haze_density", wl.hazeDensity);
1161 // cmd.Parameters.AddWithValue("density_multiplier", wl.densityMultiplier);
1162 // cmd.Parameters.AddWithValue("distance_multiplier", wl.distanceMultiplier);
1163 // cmd.Parameters.AddWithValue("max_altitude", wl.maxAltitude);
1164 // cmd.Parameters.AddWithValue("sun_moon_color_r", wl.sunMoonColor.X);
1165 // cmd.Parameters.AddWithValue("sun_moon_color_g", wl.sunMoonColor.Y);
1166 // cmd.Parameters.AddWithValue("sun_moon_color_b", wl.sunMoonColor.Z);
1167 // cmd.Parameters.AddWithValue("sun_moon_color_i", wl.sunMoonColor.W);
1168 // cmd.Parameters.AddWithValue("sun_moon_position", wl.sunMoonPosition);
1169 // cmd.Parameters.AddWithValue("ambient_r", wl.ambient.X);
1170 // cmd.Parameters.AddWithValue("ambient_g", wl.ambient.Y);
1171 // cmd.Parameters.AddWithValue("ambient_b", wl.ambient.Z);
1172 // cmd.Parameters.AddWithValue("ambient_i", wl.ambient.W);
1173 // cmd.Parameters.AddWithValue("east_angle", wl.eastAngle);
1174 // cmd.Parameters.AddWithValue("sun_glow_focus", wl.sunGlowFocus);
1175 // cmd.Parameters.AddWithValue("sun_glow_size", wl.sunGlowSize);
1176 // cmd.Parameters.AddWithValue("scene_gamma", wl.sceneGamma);
1177 // cmd.Parameters.AddWithValue("star_brightness", wl.starBrightness);
1178 // cmd.Parameters.AddWithValue("cloud_color_r", wl.cloudColor.X);
1179 // cmd.Parameters.AddWithValue("cloud_color_g", wl.cloudColor.Y);
1180 // cmd.Parameters.AddWithValue("cloud_color_b", wl.cloudColor.Z);
1181 // cmd.Parameters.AddWithValue("cloud_color_i", wl.cloudColor.W);
1182 // cmd.Parameters.AddWithValue("cloud_x", wl.cloudXYDensity.X);
1183 // cmd.Parameters.AddWithValue("cloud_y", wl.cloudXYDensity.Y);
1184 // cmd.Parameters.AddWithValue("cloud_density", wl.cloudXYDensity.Z);
1185 // cmd.Parameters.AddWithValue("cloud_coverage", wl.cloudCoverage);
1186 // cmd.Parameters.AddWithValue("cloud_scale", wl.cloudScale);
1187 // cmd.Parameters.AddWithValue("cloud_detail_x", wl.cloudDetailXYDensity.X);
1188 // cmd.Parameters.AddWithValue("cloud_detail_y", wl.cloudDetailXYDensity.Y);
1189 // cmd.Parameters.AddWithValue("cloud_detail_density", wl.cloudDetailXYDensity.Z);
1190 // cmd.Parameters.AddWithValue("cloud_scroll_x", wl.cloudScrollX);
1191 // cmd.Parameters.AddWithValue("cloud_scroll_x_lock", wl.cloudScrollXLock);
1192 // cmd.Parameters.AddWithValue("cloud_scroll_y", wl.cloudScrollY);
1193 // cmd.Parameters.AddWithValue("cloud_scroll_y_lock", wl.cloudScrollYLock);
1194 // cmd.Parameters.AddWithValue("draw_classic_clouds", wl.drawClassicClouds);
1195
1196 // cmd.ExecuteNonQuery();
1197 // }
1198 // }
1199 // }
1200 #endregion
1201 }
1202
1203 #region Environment Settings
1204 public string LoadRegionEnvironmentSettings(UUID regionUUID)
1205 {
1206 string sql = "select * from [regionenvironment] where region_id = @region_id";
1207 using (SqlConnection conn = new SqlConnection(m_connectionString))
1208 using (SqlCommand cmd = new SqlCommand(sql, conn))
1209 {
1210 cmd.Parameters.Add(_Database.CreateParameter("@region_id", regionUUID));
1211 conn.Open();
1212 using (SqlDataReader result = cmd.ExecuteReader())
1213 {
1214 if (!result.Read())
1215 {
1216 return String.Empty;
1217 }
1218 else
1219 {
1220 return Convert.ToString(result["llsd_settings"]);
1221 }
1222 }
1223 }
1224 }
1225
1226 public void StoreRegionEnvironmentSettings(UUID regionUUID, string settings)
1227 {
1228 {
1229 string sql = "DELETE FROM [regionenvironment] WHERE region_id = @region_id";
1230 using (SqlConnection conn = new SqlConnection(m_connectionString))
1231
1232 using (SqlCommand cmd = new SqlCommand(sql, conn))
1233 {
1234 cmd.Parameters.Add(_Database.CreateParameter("@region_id", regionUUID));
1235 conn.Open();
1236 cmd.ExecuteNonQuery();
1237 }
1238
1239 sql = "INSERT INTO [regionenvironment] (region_id, llsd_settings) VALUES (@region_id, @llsd_settings)";
1240
1241 using (SqlConnection conn = new SqlConnection(m_connectionString))
1242
1243 using (SqlCommand cmd = new SqlCommand(sql, conn))
1244 {
1245 cmd.Parameters.Add(_Database.CreateParameter("@region_id", regionUUID));
1246 cmd.Parameters.Add(_Database.CreateParameter("@llsd_settings", settings));
1247
1248 conn.Open();
1249 cmd.ExecuteNonQuery();
1250 }
1251 }
1252 }
1253
1254 public void RemoveRegionEnvironmentSettings(UUID regionUUID)
1255 {
1256 string sql = "delete from [regionenvironment] where region_id = @region_id";
1257 using (SqlConnection conn = new SqlConnection(m_connectionString))
1258 using (SqlCommand cmd = new SqlCommand(sql, conn))
1259 {
1260 cmd.Parameters.Add(_Database.CreateParameter("@region_id", regionUUID));
1261
1262 conn.Open();
1263 cmd.ExecuteNonQuery();
1264 }
1265 }
1266 #endregion
1267
1268 /// <summary>
1269 /// Loads the settings of a region.
1270 /// </summary>
1271 /// <param name="regionUUID">The region UUID.</param>
1272 /// <returns></returns>
1273 public RegionSettings LoadRegionSettings(UUID regionUUID)
1274 {
1275 string sql = "select * from regionsettings where regionUUID = @regionUUID";
1276 RegionSettings regionSettings;
1277 using (SqlConnection conn = new SqlConnection(m_connectionString))
1278 using (SqlCommand cmd = new SqlCommand(sql, conn))
1279 {
1280 cmd.Parameters.Add(_Database.CreateParameter("@regionUUID", regionUUID));
1281 conn.Open();
1282 using (SqlDataReader reader = cmd.ExecuteReader())
1283 {
1284 if (reader.Read())
1285 {
1286 regionSettings = BuildRegionSettings(reader);
1287 regionSettings.OnSave += StoreRegionSettings;
1288
1289 return regionSettings;
1290 }
1291 }
1292 }
1293
1294 //If we reach this point then there are new region settings for that region
1295 regionSettings = new RegionSettings();
1296 regionSettings.RegionUUID = regionUUID;
1297 regionSettings.OnSave += StoreRegionSettings;
1298
1299 //Store new values
1300 StoreNewRegionSettings(regionSettings);
1301
1302 LoadSpawnPoints(regionSettings);
1303
1304 return regionSettings;
1305 }
1306
1307 /// <summary>
1308 /// Store region settings, need to check if the check is really necesary. If we can make something for creating new region.
1309 /// </summary>
1310 /// <param name="regionSettings">region settings.</param>
1311 public void StoreRegionSettings(RegionSettings regionSettings)
1312 {
1313 //Little check if regionUUID already exist in DB
1314 string regionUUID;
1315 string sql = "SELECT regionUUID FROM regionsettings WHERE regionUUID = @regionUUID";
1316 using (SqlConnection conn = new SqlConnection(m_connectionString))
1317 using (SqlCommand cmd = new SqlCommand(sql, conn))
1318 {
1319 cmd.Parameters.Add(_Database.CreateParameter("@regionUUID", regionSettings.RegionUUID));
1320 conn.Open();
1321 regionUUID = cmd.ExecuteScalar().ToString();
1322 }
1323
1324 if (string.IsNullOrEmpty(regionUUID))
1325 {
1326 StoreNewRegionSettings(regionSettings);
1327 }
1328 else
1329 {
1330 //This method only updates region settings!!! First call LoadRegionSettings to create new region settings in DB
1331 sql =
1332 @"UPDATE [regionsettings] SET [block_terraform] = @block_terraform ,[block_fly] = @block_fly ,[allow_damage] = @allow_damage
1333,[restrict_pushing] = @restrict_pushing ,[allow_land_resell] = @allow_land_resell ,[allow_land_join_divide] = @allow_land_join_divide
1334,[block_show_in_search] = @block_show_in_search ,[agent_limit] = @agent_limit ,[object_bonus] = @object_bonus ,[maturity] = @maturity
1335,[disable_scripts] = @disable_scripts ,[disable_collisions] = @disable_collisions ,[disable_physics] = @disable_physics
1336,[terrain_texture_1] = @terrain_texture_1 ,[terrain_texture_2] = @terrain_texture_2 ,[terrain_texture_3] = @terrain_texture_3
1337,[terrain_texture_4] = @terrain_texture_4 ,[elevation_1_nw] = @elevation_1_nw ,[elevation_2_nw] = @elevation_2_nw
1338,[elevation_1_ne] = @elevation_1_ne ,[elevation_2_ne] = @elevation_2_ne ,[elevation_1_se] = @elevation_1_se ,[elevation_2_se] = @elevation_2_se
1339,[elevation_1_sw] = @elevation_1_sw ,[elevation_2_sw] = @elevation_2_sw ,[water_height] = @water_height ,[terrain_raise_limit] = @terrain_raise_limit
1340,[terrain_lower_limit] = @terrain_lower_limit ,[use_estate_sun] = @use_estate_sun ,[fixed_sun] = @fixed_sun ,[sun_position] = @sun_position
1341,[covenant] = @covenant ,[covenant_datetime] = @covenant_datetime, [sunvectorx] = @sunvectorx, [sunvectory] = @sunvectory, [sunvectorz] = @sunvectorz, [Sandbox] = @Sandbox, [loaded_creation_datetime] = @loaded_creation_datetime, [loaded_creation_id] = @loaded_creation_id, [map_tile_id] = @TerrainImageID, [telehubobject] = @telehubobject, [parcel_tile_id] = @ParcelImageID
1342 WHERE [regionUUID] = @regionUUID";
1343
1344 using (SqlConnection conn = new SqlConnection(m_connectionString))
1345 using (SqlCommand cmd = new SqlCommand(sql, conn))
1346 {
1347 cmd.Parameters.AddRange(CreateRegionSettingParameters(regionSettings));
1348 conn.Open();
1349 cmd.ExecuteNonQuery();
1350 }
1351 }
1352 SaveSpawnPoints(regionSettings);
1353 }
1354
1355 public void Shutdown()
1356 {
1357 //Not used??
1358 }
1359
1360 #region Private Methods
1361
1362 /// <summary>
1363 /// Stores new regionsettings.
1364 /// </summary>
1365 /// <param name="regionSettings">The region settings.</param>
1366 private void StoreNewRegionSettings(RegionSettings regionSettings)
1367 {
1368 string sql = @"INSERT INTO [regionsettings]
1369 ([regionUUID],[block_terraform],[block_fly],[allow_damage],[restrict_pushing],[allow_land_resell],[allow_land_join_divide],
1370 [block_show_in_search],[agent_limit],[object_bonus],[maturity],[disable_scripts],[disable_collisions],[disable_physics],
1371 [terrain_texture_1],[terrain_texture_2],[terrain_texture_3],[terrain_texture_4],[elevation_1_nw],[elevation_2_nw],[elevation_1_ne],
1372 [elevation_2_ne],[elevation_1_se],[elevation_2_se],[elevation_1_sw],[elevation_2_sw],[water_height],[terrain_raise_limit],
1373 [terrain_lower_limit],[use_estate_sun],[fixed_sun],[sun_position],[covenant],[covenant_datetime],[sunvectorx], [sunvectory], [sunvectorz],[Sandbox], [loaded_creation_datetime], [loaded_creation_id]
1374 )
1375 VALUES
1376 (@regionUUID,@block_terraform,@block_fly,@allow_damage,@restrict_pushing,@allow_land_resell,@allow_land_join_divide,
1377 @block_show_in_search,@agent_limit,@object_bonus,@maturity,@disable_scripts,@disable_collisions,@disable_physics,
1378 @terrain_texture_1,@terrain_texture_2,@terrain_texture_3,@terrain_texture_4,@elevation_1_nw,@elevation_2_nw,@elevation_1_ne,
1379 @elevation_2_ne,@elevation_1_se,@elevation_2_se,@elevation_1_sw,@elevation_2_sw,@water_height,@terrain_raise_limit,
1380 @terrain_lower_limit,@use_estate_sun,@fixed_sun,@sun_position,@covenant, @covenant_datetime, @sunvectorx,@sunvectory, @sunvectorz, @Sandbox, @loaded_creation_datetime, @loaded_creation_id)";
1381
1382 using (SqlConnection conn = new SqlConnection(m_connectionString))
1383 using (SqlCommand cmd = new SqlCommand(sql, conn))
1384 {
1385 cmd.Parameters.AddRange(CreateRegionSettingParameters(regionSettings));
1386 conn.Open();
1387 cmd.ExecuteNonQuery();
1388 }
1389 }
1390
1391 #region Private DataRecord conversion methods
1392
1393 /// <summary>
1394 /// Builds the region settings from a datarecod.
1395 /// </summary>
1396 /// <param name="row">datarecord with regionsettings.</param>
1397 /// <returns></returns>
1398 private static RegionSettings BuildRegionSettings(IDataRecord row)
1399 {
1400 //TODO change this is some more generic code so we doesnt have to change it every time a new field is added?
1401 RegionSettings newSettings = new RegionSettings();
1402
1403 newSettings.RegionUUID = new UUID((Guid)row["regionUUID"]);
1404 newSettings.BlockTerraform = Convert.ToBoolean(row["block_terraform"]);
1405 newSettings.AllowDamage = Convert.ToBoolean(row["allow_damage"]);
1406 newSettings.BlockFly = Convert.ToBoolean(row["block_fly"]);
1407 newSettings.RestrictPushing = Convert.ToBoolean(row["restrict_pushing"]);
1408 newSettings.AllowLandResell = Convert.ToBoolean(row["allow_land_resell"]);
1409 newSettings.AllowLandJoinDivide = Convert.ToBoolean(row["allow_land_join_divide"]);
1410 newSettings.BlockShowInSearch = Convert.ToBoolean(row["block_show_in_search"]);
1411 newSettings.AgentLimit = Convert.ToInt32(row["agent_limit"]);
1412 newSettings.ObjectBonus = Convert.ToDouble(row["object_bonus"]);
1413 newSettings.Maturity = Convert.ToInt32(row["maturity"]);
1414 newSettings.DisableScripts = Convert.ToBoolean(row["disable_scripts"]);
1415 newSettings.DisableCollisions = Convert.ToBoolean(row["disable_collisions"]);
1416 newSettings.DisablePhysics = Convert.ToBoolean(row["disable_physics"]);
1417 newSettings.TerrainTexture1 = new UUID((Guid)row["terrain_texture_1"]);
1418 newSettings.TerrainTexture2 = new UUID((Guid)row["terrain_texture_2"]);
1419 newSettings.TerrainTexture3 = new UUID((Guid)row["terrain_texture_3"]);
1420 newSettings.TerrainTexture4 = new UUID((Guid)row["terrain_texture_4"]);
1421 newSettings.Elevation1NW = Convert.ToDouble(row["elevation_1_nw"]);
1422 newSettings.Elevation2NW = Convert.ToDouble(row["elevation_2_nw"]);
1423 newSettings.Elevation1NE = Convert.ToDouble(row["elevation_1_ne"]);
1424 newSettings.Elevation2NE = Convert.ToDouble(row["elevation_2_ne"]);
1425 newSettings.Elevation1SE = Convert.ToDouble(row["elevation_1_se"]);
1426 newSettings.Elevation2SE = Convert.ToDouble(row["elevation_2_se"]);
1427 newSettings.Elevation1SW = Convert.ToDouble(row["elevation_1_sw"]);
1428 newSettings.Elevation2SW = Convert.ToDouble(row["elevation_2_sw"]);
1429 newSettings.WaterHeight = Convert.ToDouble(row["water_height"]);
1430 newSettings.TerrainRaiseLimit = Convert.ToDouble(row["terrain_raise_limit"]);
1431 newSettings.TerrainLowerLimit = Convert.ToDouble(row["terrain_lower_limit"]);
1432 newSettings.UseEstateSun = Convert.ToBoolean(row["use_estate_sun"]);
1433 newSettings.Sandbox = Convert.ToBoolean(row["Sandbox"]);
1434 newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]);
1435 newSettings.SunPosition = Convert.ToDouble(row["sun_position"]);
1436 newSettings.SunVector = new Vector3(
1437 Convert.ToSingle(row["sunvectorx"]),
1438 Convert.ToSingle(row["sunvectory"]),
1439 Convert.ToSingle(row["sunvectorz"])
1440 );
1441 newSettings.Covenant = new UUID((Guid)row["covenant"]);
1442 newSettings.CovenantChangedDateTime = Convert.ToInt32(row["covenant_datetime"]);
1443 newSettings.LoadedCreationDateTime = Convert.ToInt32(row["loaded_creation_datetime"]);
1444
1445 if (row["loaded_creation_id"] is DBNull)
1446 newSettings.LoadedCreationID = "";
1447 else
1448 newSettings.LoadedCreationID = (String)row["loaded_creation_id"];
1449
1450 newSettings.TerrainImageID = new UUID((string)row["map_tile_ID"]);
1451 newSettings.ParcelImageID = new UUID((Guid)row["parcel_tile_ID"]);
1452 newSettings.TelehubObject = new UUID((Guid)row["TelehubObject"]);
1453
1454 return newSettings;
1455 }
1456
1457 /// <summary>
1458 /// Builds the land data from a datarecord.
1459 /// </summary>
1460 /// <param name="row">datarecord with land data</param>
1461 /// <returns></returns>
1462 private static LandData BuildLandData(IDataRecord row)
1463 {
1464 LandData newData = new LandData();
1465
1466 newData.GlobalID = new UUID((Guid)row["UUID"]);
1467 newData.LocalID = Convert.ToInt32(row["LocalLandID"]);
1468
1469 // Bitmap is a byte[512]
1470 newData.Bitmap = (Byte[])row["Bitmap"];
1471
1472 newData.Name = (string)row["Name"];
1473 newData.Description = (string)row["Description"];
1474 newData.OwnerID = new UUID((Guid)row["OwnerUUID"]);
1475 newData.IsGroupOwned = Convert.ToBoolean(row["IsGroupOwned"]);
1476 newData.Area = Convert.ToInt32(row["Area"]);
1477 newData.AuctionID = Convert.ToUInt32(row["AuctionID"]); //Unemplemented
1478 newData.Category = (ParcelCategory)Convert.ToInt32(row["Category"]);
1479 //Enum libsecondlife.Parcel.ParcelCategory
1480 newData.ClaimDate = Convert.ToInt32(row["ClaimDate"]);
1481 newData.ClaimPrice = Convert.ToInt32(row["ClaimPrice"]);
1482 newData.GroupID = new UUID((Guid)row["GroupUUID"]);
1483 newData.SalePrice = Convert.ToInt32(row["SalePrice"]);
1484 newData.Status = (ParcelStatus)Convert.ToInt32(row["LandStatus"]);
1485 //Enum. libsecondlife.Parcel.ParcelStatus
1486 newData.Flags = Convert.ToUInt32(row["LandFlags"]);
1487 newData.LandingType = Convert.ToByte(row["LandingType"]);
1488 newData.MediaAutoScale = Convert.ToByte(row["MediaAutoScale"]);
1489 newData.MediaID = new UUID((Guid)row["MediaTextureUUID"]);
1490 newData.MediaURL = (string)row["MediaURL"];
1491 newData.MusicURL = (string)row["MusicURL"];
1492 newData.PassHours = Convert.ToSingle(row["PassHours"]);
1493 newData.PassPrice = Convert.ToInt32(row["PassPrice"]);
1494
1495 // UUID authedbuyer;
1496 // UUID snapshotID;
1497 //
1498 // if (UUID.TryParse((string)row["AuthBuyerID"], out authedbuyer))
1499 // newData.AuthBuyerID = authedbuyer;
1500 //
1501 // if (UUID.TryParse((string)row["SnapshotUUID"], out snapshotID))
1502 // newData.SnapshotID = snapshotID;
1503 newData.AuthBuyerID = new UUID((Guid)row["AuthBuyerID"]);
1504 newData.SnapshotID = new UUID((Guid)row["SnapshotUUID"]);
1505
1506 newData.OtherCleanTime = Convert.ToInt32(row["OtherCleanTime"]);
1507
1508 try
1509 {
1510 newData.UserLocation =
1511 new Vector3(Convert.ToSingle(row["UserLocationX"]), Convert.ToSingle(row["UserLocationY"]),
1512 Convert.ToSingle(row["UserLocationZ"]));
1513 newData.UserLookAt =
1514 new Vector3(Convert.ToSingle(row["UserLookAtX"]), Convert.ToSingle(row["UserLookAtY"]),
1515 Convert.ToSingle(row["UserLookAtZ"]));
1516 }
1517 catch (InvalidCastException)
1518 {
1519 newData.UserLocation = Vector3.Zero;
1520 newData.UserLookAt = Vector3.Zero;
1521 _Log.ErrorFormat("[PARCEL]: unable to get parcel telehub settings for {1}", newData.Name);
1522 }
1523
1524 newData.ParcelAccessList = new List<LandAccessEntry>();
1525 newData.MediaDescription = (string)row["MediaDescription"];
1526 newData.MediaType = (string)row["MediaType"];
1527 newData.MediaWidth = Convert.ToInt32((((string)row["MediaSize"]).Split(','))[0]);
1528 newData.MediaHeight = Convert.ToInt32((((string)row["MediaSize"]).Split(','))[1]);
1529 newData.MediaLoop = Convert.ToBoolean(row["MediaLoop"]);
1530 newData.ObscureMusic = Convert.ToBoolean(row["ObscureMusic"]);
1531 newData.ObscureMedia = Convert.ToBoolean(row["ObscureMedia"]);
1532
1533 return newData;
1534 }
1535
1536 /// <summary>
1537 /// Builds the landaccess data from a data record.
1538 /// </summary>
1539 /// <param name="row">datarecord with landaccess data</param>
1540 /// <returns></returns>
1541 private static LandAccessEntry BuildLandAccessData(IDataRecord row)
1542 {
1543 LandAccessEntry entry = new LandAccessEntry();
1544 entry.AgentID = new UUID((Guid)row["AccessUUID"]);
1545 entry.Flags = (AccessList)Convert.ToInt32(row["Flags"]);
1546 entry.Expires = Convert.ToInt32(row["Expires"]);
1547 return entry;
1548 }
1549
1550 /// <summary>
1551 /// Builds the prim from a datarecord.
1552 /// </summary>
1553 /// <param name="primRow">datarecord</param>
1554 /// <returns></returns>
1555 private static SceneObjectPart BuildPrim(IDataRecord primRow)
1556 {
1557 SceneObjectPart prim = new SceneObjectPart();
1558
1559 prim.UUID = new UUID((Guid)primRow["UUID"]);
1560 // explicit conversion of integers is required, which sort
1561 // of sucks. No idea if there is a shortcut here or not.
1562 prim.CreationDate = Convert.ToInt32(primRow["CreationDate"]);
1563 prim.Name = (string)primRow["Name"];
1564 // various text fields
1565 prim.Text = (string)primRow["Text"];
1566 prim.Color = Color.FromArgb(Convert.ToInt32(primRow["ColorA"]),
1567 Convert.ToInt32(primRow["ColorR"]),
1568 Convert.ToInt32(primRow["ColorG"]),
1569 Convert.ToInt32(primRow["ColorB"]));
1570 prim.Description = (string)primRow["Description"];
1571 prim.SitName = (string)primRow["SitName"];
1572 prim.TouchName = (string)primRow["TouchName"];
1573 // permissions
1574 prim.Flags = (PrimFlags)Convert.ToUInt32(primRow["ObjectFlags"]);
1575 //prim.CreatorID = new UUID((Guid)primRow["CreatorID"]);
1576 prim.CreatorIdentification = (string)primRow["CreatorID"];
1577 prim.OwnerID = new UUID((Guid)primRow["OwnerID"]);
1578 prim.GroupID = new UUID((Guid)primRow["GroupID"]);
1579 prim.LastOwnerID = new UUID((Guid)primRow["LastOwnerID"]);
1580 prim.OwnerMask = Convert.ToUInt32(primRow["OwnerMask"]);
1581 prim.NextOwnerMask = Convert.ToUInt32(primRow["NextOwnerMask"]);
1582 prim.GroupMask = Convert.ToUInt32(primRow["GroupMask"]);
1583 prim.EveryoneMask = Convert.ToUInt32(primRow["EveryoneMask"]);
1584 prim.BaseMask = Convert.ToUInt32(primRow["BaseMask"]);
1585 // vectors
1586 prim.OffsetPosition = new Vector3(
1587 Convert.ToSingle(primRow["PositionX"]),
1588 Convert.ToSingle(primRow["PositionY"]),
1589 Convert.ToSingle(primRow["PositionZ"]));
1590
1591 prim.GroupPosition = new Vector3(
1592 Convert.ToSingle(primRow["GroupPositionX"]),
1593 Convert.ToSingle(primRow["GroupPositionY"]),
1594 Convert.ToSingle(primRow["GroupPositionZ"]));
1595
1596 prim.Velocity = new Vector3(
1597 Convert.ToSingle(primRow["VelocityX"]),
1598 Convert.ToSingle(primRow["VelocityY"]),
1599 Convert.ToSingle(primRow["VelocityZ"]));
1600
1601 prim.AngularVelocity = new Vector3(
1602 Convert.ToSingle(primRow["AngularVelocityX"]),
1603 Convert.ToSingle(primRow["AngularVelocityY"]),
1604 Convert.ToSingle(primRow["AngularVelocityZ"]));
1605
1606 prim.Acceleration = new Vector3(
1607 Convert.ToSingle(primRow["AccelerationX"]),
1608 Convert.ToSingle(primRow["AccelerationY"]),
1609 Convert.ToSingle(primRow["AccelerationZ"]));
1610
1611 // quaternions
1612 prim.RotationOffset = new Quaternion(
1613 Convert.ToSingle(primRow["RotationX"]),
1614 Convert.ToSingle(primRow["RotationY"]),
1615 Convert.ToSingle(primRow["RotationZ"]),
1616 Convert.ToSingle(primRow["RotationW"]));
1617
1618 prim.SitTargetPositionLL = new Vector3(
1619 Convert.ToSingle(primRow["SitTargetOffsetX"]),
1620 Convert.ToSingle(primRow["SitTargetOffsetY"]),
1621 Convert.ToSingle(primRow["SitTargetOffsetZ"]));
1622
1623 prim.SitTargetOrientationLL = new Quaternion(
1624 Convert.ToSingle(primRow["SitTargetOrientX"]),
1625 Convert.ToSingle(primRow["SitTargetOrientY"]),
1626 Convert.ToSingle(primRow["SitTargetOrientZ"]),
1627 Convert.ToSingle(primRow["SitTargetOrientW"]));
1628
1629 prim.PayPrice[0] = Convert.ToInt32(primRow["PayPrice"]);
1630 prim.PayPrice[1] = Convert.ToInt32(primRow["PayButton1"]);
1631 prim.PayPrice[2] = Convert.ToInt32(primRow["PayButton2"]);
1632 prim.PayPrice[3] = Convert.ToInt32(primRow["PayButton3"]);
1633 prim.PayPrice[4] = Convert.ToInt32(primRow["PayButton4"]);
1634
1635 prim.Sound = new UUID((Guid)primRow["LoopedSound"]);
1636 prim.SoundGain = Convert.ToSingle(primRow["LoopedSoundGain"]);
1637 prim.SoundFlags = 1; // If it's persisted at all, it's looped
1638
1639 if (!(primRow["TextureAnimation"] is DBNull))
1640 prim.TextureAnimation = (Byte[])primRow["TextureAnimation"];
1641 if (!(primRow["ParticleSystem"] is DBNull))
1642 prim.ParticleSystem = (Byte[])primRow["ParticleSystem"];
1643
1644 prim.AngularVelocity = new Vector3(
1645 Convert.ToSingle(primRow["OmegaX"]),
1646 Convert.ToSingle(primRow["OmegaY"]),
1647 Convert.ToSingle(primRow["OmegaZ"]));
1648
1649 prim.SetCameraEyeOffset(new Vector3(
1650 Convert.ToSingle(primRow["CameraEyeOffsetX"]),
1651 Convert.ToSingle(primRow["CameraEyeOffsetY"]),
1652 Convert.ToSingle(primRow["CameraEyeOffsetZ"])
1653 ));
1654
1655 prim.SetCameraAtOffset(new Vector3(
1656 Convert.ToSingle(primRow["CameraAtOffsetX"]),
1657 Convert.ToSingle(primRow["CameraAtOffsetY"]),
1658 Convert.ToSingle(primRow["CameraAtOffsetZ"])
1659 ));
1660
1661 if (Convert.ToInt16(primRow["ForceMouselook"]) != 0)
1662 prim.SetForceMouselook(true);
1663
1664 prim.ScriptAccessPin = Convert.ToInt32(primRow["ScriptAccessPin"]);
1665
1666 if (Convert.ToInt16(primRow["AllowedDrop"]) != 0)
1667 prim.AllowedDrop = true;
1668
1669 if (Convert.ToInt16(primRow["DieAtEdge"]) != 0)
1670 prim.DIE_AT_EDGE = true;
1671
1672 prim.SalePrice = Convert.ToInt32(primRow["SalePrice"]);
1673 prim.ObjectSaleType = Convert.ToByte(primRow["SaleType"]);
1674
1675 prim.Material = Convert.ToByte(primRow["Material"]);
1676
1677 if (!(primRow["ClickAction"] is DBNull))
1678 prim.ClickAction = Convert.ToByte(primRow["ClickAction"]);
1679
1680 prim.CollisionSound = new UUID((Guid)primRow["CollisionSound"]);
1681 prim.CollisionSoundVolume = Convert.ToSingle(primRow["CollisionSoundVolume"]);
1682 if (Convert.ToInt16(primRow["PassTouches"]) != 0)
1683 prim.PassTouches = true;
1684 prim.LinkNum = Convert.ToInt32(primRow["LinkNumber"]);
1685
1686 if (!(primRow["MediaURL"] is System.DBNull))
1687 prim.MediaUrl = (string)primRow["MediaURL"];
1688
1689 if (!(primRow["AttachedPosX"] is System.DBNull))
1690 prim.AttachedPos = new Vector3(
1691 Convert.ToSingle(primRow["AttachedPosX"]),
1692 Convert.ToSingle(primRow["AttachedPosY"]),
1693 Convert.ToSingle(primRow["AttachedPosZ"]));
1694
1695 if (!(primRow["DynAttrs"] is System.DBNull))
1696 prim.DynAttrs = DAMap.FromXml((string)primRow["DynAttrs"]);
1697 else
1698 prim.DynAttrs = new DAMap();
1699
1700 prim.PhysicsShapeType = Convert.ToByte(primRow["PhysicsShapeType"]);
1701 prim.Density = Convert.ToSingle(primRow["Density"]);
1702 prim.GravityModifier = Convert.ToSingle(primRow["GravityModifier"]);
1703 prim.Friction = Convert.ToSingle(primRow["Friction"]);
1704 prim.Restitution = Convert.ToSingle(primRow["Restitution"]);
1705
1706 return prim;
1707 }
1708
1709 /// <summary>
1710 /// Builds the prim shape from a datarecord.
1711 /// </summary>
1712 /// <param name="shapeRow">The row.</param>
1713 /// <returns></returns>
1714 private static PrimitiveBaseShape BuildShape(IDataRecord shapeRow)
1715 {
1716 PrimitiveBaseShape baseShape = new PrimitiveBaseShape();
1717
1718 baseShape.Scale = new Vector3(
1719 (float)Convert.ToDouble(shapeRow["ScaleX"]),
1720 (float)Convert.ToDouble(shapeRow["ScaleY"]),
1721 (float)Convert.ToDouble(shapeRow["ScaleZ"]));
1722
1723 // paths
1724 baseShape.PCode = Convert.ToByte(shapeRow["PCode"]);
1725 baseShape.PathBegin = Convert.ToUInt16(shapeRow["PathBegin"]);
1726 baseShape.PathEnd = Convert.ToUInt16(shapeRow["PathEnd"]);
1727 baseShape.PathScaleX = Convert.ToByte(shapeRow["PathScaleX"]);
1728 baseShape.PathScaleY = Convert.ToByte(shapeRow["PathScaleY"]);
1729 baseShape.PathShearX = Convert.ToByte(shapeRow["PathShearX"]);
1730 baseShape.PathShearY = Convert.ToByte(shapeRow["PathShearY"]);
1731 baseShape.PathSkew = Convert.ToSByte(shapeRow["PathSkew"]);
1732 baseShape.PathCurve = Convert.ToByte(shapeRow["PathCurve"]);
1733 baseShape.PathRadiusOffset = Convert.ToSByte(shapeRow["PathRadiusOffset"]);
1734 baseShape.PathRevolutions = Convert.ToByte(shapeRow["PathRevolutions"]);
1735 baseShape.PathTaperX = Convert.ToSByte(shapeRow["PathTaperX"]);
1736 baseShape.PathTaperY = Convert.ToSByte(shapeRow["PathTaperY"]);
1737 baseShape.PathTwist = Convert.ToSByte(shapeRow["PathTwist"]);
1738 baseShape.PathTwistBegin = Convert.ToSByte(shapeRow["PathTwistBegin"]);
1739 // profile
1740 baseShape.ProfileBegin = Convert.ToUInt16(shapeRow["ProfileBegin"]);
1741 baseShape.ProfileEnd = Convert.ToUInt16(shapeRow["ProfileEnd"]);
1742 baseShape.ProfileCurve = Convert.ToByte(shapeRow["ProfileCurve"]);
1743 baseShape.ProfileHollow = Convert.ToUInt16(shapeRow["ProfileHollow"]);
1744
1745 byte[] textureEntry = (byte[])shapeRow["Texture"];
1746 baseShape.TextureEntry = textureEntry;
1747
1748 baseShape.ExtraParams = (byte[])shapeRow["ExtraParams"];
1749
1750 try
1751 {
1752 baseShape.State = Convert.ToByte(shapeRow["State"]);
1753 }
1754 catch (InvalidCastException)
1755 {
1756 }
1757
1758 if (!(shapeRow["Media"] is System.DBNull))
1759 {
1760 baseShape.Media = PrimitiveBaseShape.MediaList.FromXml((string)shapeRow["Media"]);
1761 }
1762
1763 return baseShape;
1764 }
1765
1766 /// <summary>
1767 /// Build a prim inventory item from the persisted data.
1768 /// </summary>
1769 /// <param name="inventoryRow"></param>
1770 /// <returns></returns>
1771 private static TaskInventoryItem BuildItem(IDataRecord inventoryRow)
1772 {
1773 TaskInventoryItem taskItem = new TaskInventoryItem();
1774
1775 taskItem.ItemID = new UUID((Guid)inventoryRow["itemID"]);
1776 taskItem.ParentPartID = new UUID((Guid)inventoryRow["primID"]);
1777 taskItem.AssetID = new UUID((Guid)inventoryRow["assetID"]);
1778 taskItem.ParentID = new UUID((Guid)inventoryRow["parentFolderID"]);
1779
1780 taskItem.InvType = Convert.ToInt32(inventoryRow["invType"]);
1781 taskItem.Type = Convert.ToInt32(inventoryRow["assetType"]);
1782
1783 taskItem.Name = (string)inventoryRow["name"];
1784 taskItem.Description = (string)inventoryRow["description"];
1785 taskItem.CreationDate = Convert.ToUInt32(inventoryRow["creationDate"]);
1786 //taskItem.CreatorID = new UUID((Guid)inventoryRow["creatorID"]);
1787 taskItem.CreatorIdentification = (string)inventoryRow["creatorID"];
1788 taskItem.OwnerID = new UUID((Guid)inventoryRow["ownerID"]);
1789 taskItem.LastOwnerID = new UUID((Guid)inventoryRow["lastOwnerID"]);
1790 taskItem.GroupID = new UUID((Guid)inventoryRow["groupID"]);
1791
1792 taskItem.NextPermissions = Convert.ToUInt32(inventoryRow["nextPermissions"]);
1793 taskItem.CurrentPermissions = Convert.ToUInt32(inventoryRow["currentPermissions"]);
1794 taskItem.BasePermissions = Convert.ToUInt32(inventoryRow["basePermissions"]);
1795 taskItem.EveryonePermissions = Convert.ToUInt32(inventoryRow["everyonePermissions"]);
1796 taskItem.GroupPermissions = Convert.ToUInt32(inventoryRow["groupPermissions"]);
1797 taskItem.Flags = Convert.ToUInt32(inventoryRow["flags"]);
1798
1799 return taskItem;
1800 }
1801
1802 #endregion
1803
1804 #region Create parameters methods
1805
1806 /// <summary>
1807 /// Creates the prim inventory parameters.
1808 /// </summary>
1809 /// <param name="taskItem">item in inventory.</param>
1810 /// <returns></returns>
1811 private SqlParameter[] CreatePrimInventoryParameters(TaskInventoryItem taskItem)
1812 {
1813 List<SqlParameter> parameters = new List<SqlParameter>();
1814
1815 parameters.Add(_Database.CreateParameter("itemID", taskItem.ItemID));
1816 parameters.Add(_Database.CreateParameter("primID", taskItem.ParentPartID));
1817 parameters.Add(_Database.CreateParameter("assetID", taskItem.AssetID));
1818 parameters.Add(_Database.CreateParameter("parentFolderID", taskItem.ParentID));
1819 parameters.Add(_Database.CreateParameter("invType", taskItem.InvType));
1820 parameters.Add(_Database.CreateParameter("assetType", taskItem.Type));
1821
1822 parameters.Add(_Database.CreateParameter("name", taskItem.Name));
1823 parameters.Add(_Database.CreateParameter("description", taskItem.Description));
1824 parameters.Add(_Database.CreateParameter("creationDate", taskItem.CreationDate));
1825 parameters.Add(_Database.CreateParameter("creatorID", taskItem.CreatorID));
1826 parameters.Add(_Database.CreateParameter("ownerID", taskItem.OwnerID));
1827 parameters.Add(_Database.CreateParameter("lastOwnerID", taskItem.LastOwnerID));
1828 parameters.Add(_Database.CreateParameter("groupID", taskItem.GroupID));
1829 parameters.Add(_Database.CreateParameter("nextPermissions", taskItem.NextPermissions));
1830 parameters.Add(_Database.CreateParameter("currentPermissions", taskItem.CurrentPermissions));
1831 parameters.Add(_Database.CreateParameter("basePermissions", taskItem.BasePermissions));
1832 parameters.Add(_Database.CreateParameter("everyonePermissions", taskItem.EveryonePermissions));
1833 parameters.Add(_Database.CreateParameter("groupPermissions", taskItem.GroupPermissions));
1834 parameters.Add(_Database.CreateParameter("flags", taskItem.Flags));
1835
1836 return parameters.ToArray();
1837 }
1838
1839 /// <summary>
1840 /// Creates the region setting parameters.
1841 /// </summary>
1842 /// <param name="settings">regionsettings.</param>
1843 /// <returns></returns>
1844 private SqlParameter[] CreateRegionSettingParameters(RegionSettings settings)
1845 {
1846 List<SqlParameter> parameters = new List<SqlParameter>();
1847
1848 parameters.Add(_Database.CreateParameter("regionUUID", settings.RegionUUID));
1849 parameters.Add(_Database.CreateParameter("block_terraform", settings.BlockTerraform));
1850 parameters.Add(_Database.CreateParameter("block_fly", settings.BlockFly));
1851 parameters.Add(_Database.CreateParameter("allow_damage", settings.AllowDamage));
1852 parameters.Add(_Database.CreateParameter("restrict_pushing", settings.RestrictPushing));
1853 parameters.Add(_Database.CreateParameter("allow_land_resell", settings.AllowLandResell));
1854 parameters.Add(_Database.CreateParameter("allow_land_join_divide", settings.AllowLandJoinDivide));
1855 parameters.Add(_Database.CreateParameter("block_show_in_search", settings.BlockShowInSearch));
1856 parameters.Add(_Database.CreateParameter("agent_limit", settings.AgentLimit));
1857 parameters.Add(_Database.CreateParameter("object_bonus", settings.ObjectBonus));
1858 parameters.Add(_Database.CreateParameter("maturity", settings.Maturity));
1859 parameters.Add(_Database.CreateParameter("disable_scripts", settings.DisableScripts));
1860 parameters.Add(_Database.CreateParameter("disable_collisions", settings.DisableCollisions));
1861 parameters.Add(_Database.CreateParameter("disable_physics", settings.DisablePhysics));
1862 parameters.Add(_Database.CreateParameter("terrain_texture_1", settings.TerrainTexture1));
1863 parameters.Add(_Database.CreateParameter("terrain_texture_2", settings.TerrainTexture2));
1864 parameters.Add(_Database.CreateParameter("terrain_texture_3", settings.TerrainTexture3));
1865 parameters.Add(_Database.CreateParameter("terrain_texture_4", settings.TerrainTexture4));
1866 parameters.Add(_Database.CreateParameter("elevation_1_nw", settings.Elevation1NW));
1867 parameters.Add(_Database.CreateParameter("elevation_2_nw", settings.Elevation2NW));
1868 parameters.Add(_Database.CreateParameter("elevation_1_ne", settings.Elevation1NE));
1869 parameters.Add(_Database.CreateParameter("elevation_2_ne", settings.Elevation2NE));
1870 parameters.Add(_Database.CreateParameter("elevation_1_se", settings.Elevation1SE));
1871 parameters.Add(_Database.CreateParameter("elevation_2_se", settings.Elevation2SE));
1872 parameters.Add(_Database.CreateParameter("elevation_1_sw", settings.Elevation1SW));
1873 parameters.Add(_Database.CreateParameter("elevation_2_sw", settings.Elevation2SW));
1874 parameters.Add(_Database.CreateParameter("water_height", settings.WaterHeight));
1875 parameters.Add(_Database.CreateParameter("terrain_raise_limit", settings.TerrainRaiseLimit));
1876 parameters.Add(_Database.CreateParameter("terrain_lower_limit", settings.TerrainLowerLimit));
1877 parameters.Add(_Database.CreateParameter("use_estate_sun", settings.UseEstateSun));
1878 parameters.Add(_Database.CreateParameter("Sandbox", settings.Sandbox));
1879 parameters.Add(_Database.CreateParameter("fixed_sun", settings.FixedSun));
1880 parameters.Add(_Database.CreateParameter("sun_position", settings.SunPosition));
1881 parameters.Add(_Database.CreateParameter("sunvectorx", settings.SunVector.X));
1882 parameters.Add(_Database.CreateParameter("sunvectory", settings.SunVector.Y));
1883 parameters.Add(_Database.CreateParameter("sunvectorz", settings.SunVector.Z));
1884 parameters.Add(_Database.CreateParameter("covenant", settings.Covenant));
1885 parameters.Add(_Database.CreateParameter("covenant_datetime", settings.CovenantChangedDateTime));
1886 parameters.Add(_Database.CreateParameter("Loaded_Creation_DateTime", settings.LoadedCreationDateTime));
1887 parameters.Add(_Database.CreateParameter("Loaded_Creation_ID", settings.LoadedCreationID));
1888 parameters.Add(_Database.CreateParameter("TerrainImageID", settings.TerrainImageID));
1889 parameters.Add(_Database.CreateParameter("ParcelImageID", settings.ParcelImageID));
1890 parameters.Add(_Database.CreateParameter("TelehubObject", settings.TelehubObject));
1891
1892 return parameters.ToArray();
1893 }
1894
1895 /// <summary>
1896 /// Creates the land parameters.
1897 /// </summary>
1898 /// <param name="land">land parameters.</param>
1899 /// <param name="regionUUID">region UUID.</param>
1900 /// <returns></returns>
1901 private SqlParameter[] CreateLandParameters(LandData land, UUID regionUUID)
1902 {
1903 List<SqlParameter> parameters = new List<SqlParameter>();
1904
1905 parameters.Add(_Database.CreateParameter("UUID", land.GlobalID));
1906 parameters.Add(_Database.CreateParameter("RegionUUID", regionUUID));
1907 parameters.Add(_Database.CreateParameter("LocalLandID", land.LocalID));
1908
1909 // Bitmap is a byte[512]
1910 parameters.Add(_Database.CreateParameter("Bitmap", land.Bitmap));
1911
1912 parameters.Add(_Database.CreateParameter("Name", land.Name));
1913 parameters.Add(_Database.CreateParameter("Description", land.Description));
1914 parameters.Add(_Database.CreateParameter("OwnerUUID", land.OwnerID));
1915 parameters.Add(_Database.CreateParameter("IsGroupOwned", land.IsGroupOwned));
1916 parameters.Add(_Database.CreateParameter("Area", land.Area));
1917 parameters.Add(_Database.CreateParameter("AuctionID", land.AuctionID)); //Unemplemented
1918 parameters.Add(_Database.CreateParameter("Category", (int)land.Category)); //Enum libsecondlife.Parcel.ParcelCategory
1919 parameters.Add(_Database.CreateParameter("ClaimDate", land.ClaimDate));
1920 parameters.Add(_Database.CreateParameter("ClaimPrice", land.ClaimPrice));
1921 parameters.Add(_Database.CreateParameter("GroupUUID", land.GroupID));
1922 parameters.Add(_Database.CreateParameter("SalePrice", land.SalePrice));
1923 parameters.Add(_Database.CreateParameter("LandStatus", (int)land.Status)); //Enum. libsecondlife.Parcel.ParcelStatus
1924 parameters.Add(_Database.CreateParameter("LandFlags", land.Flags));
1925 parameters.Add(_Database.CreateParameter("LandingType", land.LandingType));
1926 parameters.Add(_Database.CreateParameter("MediaAutoScale", land.MediaAutoScale));
1927 parameters.Add(_Database.CreateParameter("MediaTextureUUID", land.MediaID));
1928 parameters.Add(_Database.CreateParameter("MediaURL", land.MediaURL));
1929 parameters.Add(_Database.CreateParameter("MusicURL", land.MusicURL));
1930 parameters.Add(_Database.CreateParameter("PassHours", land.PassHours));
1931 parameters.Add(_Database.CreateParameter("PassPrice", land.PassPrice));
1932 parameters.Add(_Database.CreateParameter("SnapshotUUID", land.SnapshotID));
1933 parameters.Add(_Database.CreateParameter("UserLocationX", land.UserLocation.X));
1934 parameters.Add(_Database.CreateParameter("UserLocationY", land.UserLocation.Y));
1935 parameters.Add(_Database.CreateParameter("UserLocationZ", land.UserLocation.Z));
1936 parameters.Add(_Database.CreateParameter("UserLookAtX", land.UserLookAt.X));
1937 parameters.Add(_Database.CreateParameter("UserLookAtY", land.UserLookAt.Y));
1938 parameters.Add(_Database.CreateParameter("UserLookAtZ", land.UserLookAt.Z));
1939 parameters.Add(_Database.CreateParameter("AuthBuyerID", land.AuthBuyerID));
1940 parameters.Add(_Database.CreateParameter("OtherCleanTime", land.OtherCleanTime));
1941
1942 return parameters.ToArray();
1943 }
1944
1945 /// <summary>
1946 /// Creates the land access parameters.
1947 /// </summary>
1948 /// <param name="parcelAccessEntry">parcel access entry.</param>
1949 /// <param name="parcelID">parcel ID.</param>
1950 /// <returns></returns>
1951 private SqlParameter[] CreateLandAccessParameters(LandAccessEntry parcelAccessEntry, UUID parcelID)
1952 {
1953 List<SqlParameter> parameters = new List<SqlParameter>();
1954
1955 parameters.Add(_Database.CreateParameter("LandUUID", parcelID));
1956 parameters.Add(_Database.CreateParameter("AccessUUID", parcelAccessEntry.AgentID));
1957 parameters.Add(_Database.CreateParameter("Flags", parcelAccessEntry.Flags));
1958 parameters.Add(_Database.CreateParameter("Expires", parcelAccessEntry.Expires));
1959
1960 return parameters.ToArray();
1961 }
1962
1963 /// <summary>
1964 /// Creates the prim parameters for storing in DB.
1965 /// </summary>
1966 /// <param name="prim">Basic data of SceneObjectpart prim.</param>
1967 /// <param name="sceneGroupID">The scenegroup ID.</param>
1968 /// <param name="regionUUID">The region ID.</param>
1969 /// <returns></returns>
1970 private SqlParameter[] CreatePrimParameters(SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID)
1971 {
1972 List<SqlParameter> parameters = new List<SqlParameter>();
1973
1974 parameters.Add(_Database.CreateParameter("UUID", prim.UUID));
1975 parameters.Add(_Database.CreateParameter("RegionUUID", regionUUID));
1976 parameters.Add(_Database.CreateParameter("CreationDate", prim.CreationDate));
1977 parameters.Add(_Database.CreateParameter("Name", prim.Name));
1978 parameters.Add(_Database.CreateParameter("SceneGroupID", sceneGroupID));
1979 // the UUID of the root part for this SceneObjectGroup
1980 // various text fields
1981 parameters.Add(_Database.CreateParameter("Text", prim.Text));
1982 parameters.Add(_Database.CreateParameter("ColorR", prim.Color.R));
1983 parameters.Add(_Database.CreateParameter("ColorG", prim.Color.G));
1984 parameters.Add(_Database.CreateParameter("ColorB", prim.Color.B));
1985 parameters.Add(_Database.CreateParameter("ColorA", prim.Color.A));
1986 parameters.Add(_Database.CreateParameter("Description", prim.Description));
1987 parameters.Add(_Database.CreateParameter("SitName", prim.SitName));
1988 parameters.Add(_Database.CreateParameter("TouchName", prim.TouchName));
1989 // permissions
1990 parameters.Add(_Database.CreateParameter("ObjectFlags", (uint)prim.Flags));
1991 parameters.Add(_Database.CreateParameter("CreatorID", prim.CreatorID));
1992 parameters.Add(_Database.CreateParameter("OwnerID", prim.OwnerID));
1993 parameters.Add(_Database.CreateParameter("GroupID", prim.GroupID));
1994 parameters.Add(_Database.CreateParameter("LastOwnerID", prim.LastOwnerID));
1995 parameters.Add(_Database.CreateParameter("OwnerMask", prim.OwnerMask));
1996 parameters.Add(_Database.CreateParameter("NextOwnerMask", prim.NextOwnerMask));
1997 parameters.Add(_Database.CreateParameter("GroupMask", prim.GroupMask));
1998 parameters.Add(_Database.CreateParameter("EveryoneMask", prim.EveryoneMask));
1999 parameters.Add(_Database.CreateParameter("BaseMask", prim.BaseMask));
2000 // vectors
2001 parameters.Add(_Database.CreateParameter("PositionX", prim.OffsetPosition.X));
2002 parameters.Add(_Database.CreateParameter("PositionY", prim.OffsetPosition.Y));
2003 parameters.Add(_Database.CreateParameter("PositionZ", prim.OffsetPosition.Z));
2004 parameters.Add(_Database.CreateParameter("GroupPositionX", prim.GroupPosition.X));
2005 parameters.Add(_Database.CreateParameter("GroupPositionY", prim.GroupPosition.Y));
2006 parameters.Add(_Database.CreateParameter("GroupPositionZ", prim.GroupPosition.Z));
2007 parameters.Add(_Database.CreateParameter("VelocityX", prim.Velocity.X));
2008 parameters.Add(_Database.CreateParameter("VelocityY", prim.Velocity.Y));
2009 parameters.Add(_Database.CreateParameter("VelocityZ", prim.Velocity.Z));
2010 parameters.Add(_Database.CreateParameter("AngularVelocityX", prim.AngularVelocity.X));
2011 parameters.Add(_Database.CreateParameter("AngularVelocityY", prim.AngularVelocity.Y));
2012 parameters.Add(_Database.CreateParameter("AngularVelocityZ", prim.AngularVelocity.Z));
2013 parameters.Add(_Database.CreateParameter("AccelerationX", prim.Acceleration.X));
2014 parameters.Add(_Database.CreateParameter("AccelerationY", prim.Acceleration.Y));
2015 parameters.Add(_Database.CreateParameter("AccelerationZ", prim.Acceleration.Z));
2016 // quaternions
2017 parameters.Add(_Database.CreateParameter("RotationX", prim.RotationOffset.X));
2018 parameters.Add(_Database.CreateParameter("RotationY", prim.RotationOffset.Y));
2019 parameters.Add(_Database.CreateParameter("RotationZ", prim.RotationOffset.Z));
2020 parameters.Add(_Database.CreateParameter("RotationW", prim.RotationOffset.W));
2021
2022 // Sit target
2023 Vector3 sitTargetPos = prim.SitTargetPositionLL;
2024 parameters.Add(_Database.CreateParameter("SitTargetOffsetX", sitTargetPos.X));
2025 parameters.Add(_Database.CreateParameter("SitTargetOffsetY", sitTargetPos.Y));
2026 parameters.Add(_Database.CreateParameter("SitTargetOffsetZ", sitTargetPos.Z));
2027
2028 Quaternion sitTargetOrient = prim.SitTargetOrientationLL;
2029 parameters.Add(_Database.CreateParameter("SitTargetOrientW", sitTargetOrient.W));
2030 parameters.Add(_Database.CreateParameter("SitTargetOrientX", sitTargetOrient.X));
2031 parameters.Add(_Database.CreateParameter("SitTargetOrientY", sitTargetOrient.Y));
2032 parameters.Add(_Database.CreateParameter("SitTargetOrientZ", sitTargetOrient.Z));
2033
2034 parameters.Add(_Database.CreateParameter("PayPrice", prim.PayPrice[0]));
2035 parameters.Add(_Database.CreateParameter("PayButton1", prim.PayPrice[1]));
2036 parameters.Add(_Database.CreateParameter("PayButton2", prim.PayPrice[2]));
2037 parameters.Add(_Database.CreateParameter("PayButton3", prim.PayPrice[3]));
2038 parameters.Add(_Database.CreateParameter("PayButton4", prim.PayPrice[4]));
2039
2040 if ((prim.SoundFlags & 1) != 0) // Looped
2041 {
2042 parameters.Add(_Database.CreateParameter("LoopedSound", prim.Sound));
2043 parameters.Add(_Database.CreateParameter("LoopedSoundGain", prim.SoundGain));
2044 }
2045 else
2046 {
2047 parameters.Add(_Database.CreateParameter("LoopedSound", UUID.Zero));
2048 parameters.Add(_Database.CreateParameter("LoopedSoundGain", 0.0f));
2049 }
2050
2051 parameters.Add(_Database.CreateParameter("TextureAnimation", prim.TextureAnimation));
2052 parameters.Add(_Database.CreateParameter("ParticleSystem", prim.ParticleSystem));
2053
2054 parameters.Add(_Database.CreateParameter("OmegaX", prim.AngularVelocity.X));
2055 parameters.Add(_Database.CreateParameter("OmegaY", prim.AngularVelocity.Y));
2056 parameters.Add(_Database.CreateParameter("OmegaZ", prim.AngularVelocity.Z));
2057
2058 parameters.Add(_Database.CreateParameter("CameraEyeOffsetX", prim.GetCameraEyeOffset().X));
2059 parameters.Add(_Database.CreateParameter("CameraEyeOffsetY", prim.GetCameraEyeOffset().Y));
2060 parameters.Add(_Database.CreateParameter("CameraEyeOffsetZ", prim.GetCameraEyeOffset().Z));
2061
2062 parameters.Add(_Database.CreateParameter("CameraAtOffsetX", prim.GetCameraAtOffset().X));
2063 parameters.Add(_Database.CreateParameter("CameraAtOffsetY", prim.GetCameraAtOffset().Y));
2064 parameters.Add(_Database.CreateParameter("CameraAtOffsetZ", prim.GetCameraAtOffset().Z));
2065
2066 if (prim.GetForceMouselook())
2067 parameters.Add(_Database.CreateParameter("ForceMouselook", 1));
2068 else
2069 parameters.Add(_Database.CreateParameter("ForceMouselook", 0));
2070
2071 parameters.Add(_Database.CreateParameter("ScriptAccessPin", prim.ScriptAccessPin));
2072
2073 if (prim.AllowedDrop)
2074 parameters.Add(_Database.CreateParameter("AllowedDrop", 1));
2075 else
2076 parameters.Add(_Database.CreateParameter("AllowedDrop", 0));
2077
2078 if (prim.DIE_AT_EDGE)
2079 parameters.Add(_Database.CreateParameter("DieAtEdge", 1));
2080 else
2081 parameters.Add(_Database.CreateParameter("DieAtEdge", 0));
2082
2083 parameters.Add(_Database.CreateParameter("SalePrice", prim.SalePrice));
2084 parameters.Add(_Database.CreateParameter("SaleType", prim.ObjectSaleType));
2085
2086 byte clickAction = prim.ClickAction;
2087 parameters.Add(_Database.CreateParameter("ClickAction", clickAction));
2088
2089 parameters.Add(_Database.CreateParameter("Material", prim.Material));
2090
2091 parameters.Add(_Database.CreateParameter("CollisionSound", prim.CollisionSound));
2092 parameters.Add(_Database.CreateParameter("CollisionSoundVolume", prim.CollisionSoundVolume));
2093 if (prim.PassTouches)
2094 parameters.Add(_Database.CreateParameter("PassTouches", 1));
2095 else
2096 parameters.Add(_Database.CreateParameter("PassTouches", 0));
2097 parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum));
2098 parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl));
2099 parameters.Add(_Database.CreateParameter("AttachedPosX", prim.AttachedPos.X));
2100 parameters.Add(_Database.CreateParameter("AttachedPosY", prim.AttachedPos.Y));
2101 parameters.Add(_Database.CreateParameter("AttachedPosZ", prim.AttachedPos.Z));
2102
2103 if (prim.DynAttrs.CountNamespaces > 0)
2104 parameters.Add(_Database.CreateParameter("DynAttrs", prim.DynAttrs.ToXml()));
2105 else
2106 parameters.Add(_Database.CreateParameter("DynAttrs", null));
2107
2108 parameters.Add(_Database.CreateParameter("PhysicsShapeType", prim.PhysicsShapeType));
2109 parameters.Add(_Database.CreateParameter("Density", (double)prim.Density));
2110 parameters.Add(_Database.CreateParameter("GravityModifier", (double)prim.GravityModifier));
2111 parameters.Add(_Database.CreateParameter("Friction", (double)prim.Friction));
2112 parameters.Add(_Database.CreateParameter("Restitution", (double)prim.Restitution));
2113
2114 return parameters.ToArray();
2115 }
2116
2117 /// <summary>
2118 /// Creates the primshape parameters for stroing in DB.
2119 /// </summary>
2120 /// <param name="prim">Basic data of SceneObjectpart prim.</param>
2121 /// <param name="sceneGroupID">The scene group ID.</param>
2122 /// <param name="regionUUID">The region UUID.</param>
2123 /// <returns></returns>
2124 private SqlParameter[] CreatePrimShapeParameters(SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID)
2125 {
2126 List<SqlParameter> parameters = new List<SqlParameter>();
2127
2128 PrimitiveBaseShape s = prim.Shape;
2129 parameters.Add(_Database.CreateParameter("UUID", prim.UUID));
2130 // shape is an enum
2131 parameters.Add(_Database.CreateParameter("Shape", 0));
2132 // vectors
2133 parameters.Add(_Database.CreateParameter("ScaleX", s.Scale.X));
2134 parameters.Add(_Database.CreateParameter("ScaleY", s.Scale.Y));
2135 parameters.Add(_Database.CreateParameter("ScaleZ", s.Scale.Z));
2136 // paths
2137 parameters.Add(_Database.CreateParameter("PCode", s.PCode));
2138 parameters.Add(_Database.CreateParameter("PathBegin", s.PathBegin));
2139 parameters.Add(_Database.CreateParameter("PathEnd", s.PathEnd));
2140 parameters.Add(_Database.CreateParameter("PathScaleX", s.PathScaleX));
2141 parameters.Add(_Database.CreateParameter("PathScaleY", s.PathScaleY));
2142 parameters.Add(_Database.CreateParameter("PathShearX", s.PathShearX));
2143 parameters.Add(_Database.CreateParameter("PathShearY", s.PathShearY));
2144 parameters.Add(_Database.CreateParameter("PathSkew", s.PathSkew));
2145 parameters.Add(_Database.CreateParameter("PathCurve", s.PathCurve));
2146 parameters.Add(_Database.CreateParameter("PathRadiusOffset", s.PathRadiusOffset));
2147 parameters.Add(_Database.CreateParameter("PathRevolutions", s.PathRevolutions));
2148 parameters.Add(_Database.CreateParameter("PathTaperX", s.PathTaperX));
2149 parameters.Add(_Database.CreateParameter("PathTaperY", s.PathTaperY));
2150 parameters.Add(_Database.CreateParameter("PathTwist", s.PathTwist));
2151 parameters.Add(_Database.CreateParameter("PathTwistBegin", s.PathTwistBegin));
2152 // profile
2153 parameters.Add(_Database.CreateParameter("ProfileBegin", s.ProfileBegin));
2154 parameters.Add(_Database.CreateParameter("ProfileEnd", s.ProfileEnd));
2155 parameters.Add(_Database.CreateParameter("ProfileCurve", s.ProfileCurve));
2156 parameters.Add(_Database.CreateParameter("ProfileHollow", s.ProfileHollow));
2157 parameters.Add(_Database.CreateParameter("Texture", s.TextureEntry));
2158 parameters.Add(_Database.CreateParameter("ExtraParams", s.ExtraParams));
2159 parameters.Add(_Database.CreateParameter("State", s.State));
2160
2161 if (null == s.Media)
2162 {
2163 parameters.Add(_Database.CreateParameter("Media", DBNull.Value));
2164 }
2165 else
2166 {
2167 parameters.Add(_Database.CreateParameter("Media", s.Media.ToXml()));
2168 }
2169
2170 return parameters.ToArray();
2171 }
2172
2173 #endregion
2174
2175 #endregion
2176
2177 private void LoadSpawnPoints(RegionSettings rs)
2178 {
2179 rs.ClearSpawnPoints();
2180
2181 string sql = "SELECT Yaw, Pitch, Distance FROM spawn_points WHERE RegionUUID = @RegionUUID";
2182 using (SqlConnection conn = new SqlConnection(m_connectionString))
2183 using (SqlCommand cmd = new SqlCommand(sql, conn))
2184 {
2185 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", rs.RegionUUID.ToString()));
2186 conn.Open();
2187 using (SqlDataReader reader = cmd.ExecuteReader())
2188 {
2189 if (reader.Read())
2190 {
2191 SpawnPoint sp = new SpawnPoint();
2192
2193 sp.Yaw = (float)reader["Yaw"];
2194 sp.Pitch = (float)reader["Pitch"];
2195 sp.Distance = (float)reader["Distance"];
2196
2197 rs.AddSpawnPoint(sp);
2198 }
2199 }
2200 }
2201 }
2202
2203 private void SaveSpawnPoints(RegionSettings rs)
2204 {
2205 string sql = "DELETE FROM spawn_points WHERE RegionUUID = @RegionUUID";
2206 using (SqlConnection conn = new SqlConnection(m_connectionString))
2207 using (SqlCommand cmd = new SqlCommand(sql, conn))
2208 {
2209 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", rs.RegionUUID));
2210 conn.Open();
2211 cmd.ExecuteNonQuery();
2212 }
2213 foreach (SpawnPoint p in rs.SpawnPoints())
2214 {
2215 sql = "INSERT INTO spawn_points (RegionUUID, Yaw, Pitch, Distance) VALUES (@RegionUUID, @Yaw, @Pitch, @Distance)";
2216 using (SqlConnection conn = new SqlConnection(m_connectionString))
2217 using (SqlCommand cmd = new SqlCommand(sql, conn))
2218 {
2219 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", rs.RegionUUID));
2220 cmd.Parameters.Add(_Database.CreateParameter("@Yaw", p.Yaw));
2221 cmd.Parameters.Add(_Database.CreateParameter("@Pitch", p.Pitch));
2222 cmd.Parameters.Add(_Database.CreateParameter("@Distance", p.Distance));
2223 conn.Open();
2224 cmd.ExecuteNonQuery();
2225 }
2226 }
2227 }
2228
2229 public void SaveExtra(UUID regionID, string name, string value)
2230 {
2231 }
2232
2233 public void RemoveExtra(UUID regionID, string name)
2234 {
2235 }
2236
2237 public Dictionary<string, string> GetExtra(UUID regionID)
2238 {
2239 return null;
2240 }
2241 }
2242}
diff --git a/OpenSim/Data/MSSQL/MSSQLUserAccountData.cs b/OpenSim/Data/MSSQL/MSSQLUserAccountData.cs
deleted file mode 100644
index 7feec91..0000000
--- a/OpenSim/Data/MSSQL/MSSQLUserAccountData.cs
+++ /dev/null
@@ -1,246 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ''AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using System.Data;
32using OpenMetaverse;
33using OpenSim.Framework;
34using System.Data.SqlClient;
35using System.Text;
36
37namespace OpenSim.Data.MSSQL
38{
39 public class MSSQLUserAccountData : MSSQLGenericTableHandler<UserAccountData>,IUserAccountData
40 {
41 public MSSQLUserAccountData(string connectionString, string realm) :
42 base(connectionString, realm, "UserAccount")
43 {
44 }
45 //private string m_Realm;
46 //private List<string> m_ColumnNames = null;
47 //private MSSQLManager m_database;
48
49 //public MSSQLUserAccountData(string connectionString, string realm)
50 //{
51 // m_Realm = realm;
52 // m_ConnectionString = connectionString;
53 // m_database = new MSSQLManager(connectionString);
54
55 // using (SqlConnection conn = new SqlConnection(m_ConnectionString))
56 // {
57 // conn.Open();
58 // Migration m = new Migration(conn, GetType().Assembly, "UserStore");
59 // m.Update();
60 // }
61 //}
62
63 //public List<UserAccountData> Query(UUID principalID, UUID scopeID, string query)
64 //{
65 // return null;
66 //}
67
68 //public UserAccountData Get(UUID principalID, UUID scopeID)
69 //{
70 // UserAccountData ret = new UserAccountData();
71 // ret.Data = new Dictionary<string, string>();
72
73 // string sql = string.Format("select * from {0} where UUID = @principalID", m_Realm);
74 // if (scopeID != UUID.Zero)
75 // sql += " and ScopeID = @scopeID";
76
77 // using (SqlConnection conn = new SqlConnection(m_ConnectionString))
78 // using (SqlCommand cmd = new SqlCommand(sql, conn))
79 // {
80 // cmd.Parameters.Add(m_database.CreateParameter("@principalID", principalID));
81 // cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID));
82
83 // conn.Open();
84 // using (SqlDataReader result = cmd.ExecuteReader())
85 // {
86 // if (result.Read())
87 // {
88 // ret.PrincipalID = principalID;
89 // UUID scope;
90 // UUID.TryParse(result["ScopeID"].ToString(), out scope);
91 // ret.ScopeID = scope;
92
93 // if (m_ColumnNames == null)
94 // {
95 // m_ColumnNames = new List<string>();
96
97 // DataTable schemaTable = result.GetSchemaTable();
98 // foreach (DataRow row in schemaTable.Rows)
99 // m_ColumnNames.Add(row["ColumnName"].ToString());
100 // }
101
102 // foreach (string s in m_ColumnNames)
103 // {
104 // if (s == "UUID")
105 // continue;
106 // if (s == "ScopeID")
107 // continue;
108
109 // ret.Data[s] = result[s].ToString();
110 // }
111 // return ret;
112 // }
113 // }
114 // }
115 // return null;
116 //}
117
118 //public bool Store(UserAccountData data)
119 //{
120 // if (data.Data.ContainsKey("UUID"))
121 // data.Data.Remove("UUID");
122 // if (data.Data.ContainsKey("ScopeID"))
123 // data.Data.Remove("ScopeID");
124
125 // string[] fields = new List<string>(data.Data.Keys).ToArray();
126
127 // using (SqlConnection conn = new SqlConnection(m_ConnectionString))
128 // using (SqlCommand cmd = new SqlCommand())
129 // {
130 // StringBuilder updateBuilder = new StringBuilder();
131 // updateBuilder.AppendFormat("update {0} set ", m_Realm);
132 // bool first = true;
133 // foreach (string field in fields)
134 // {
135 // if (!first)
136 // updateBuilder.Append(", ");
137 // updateBuilder.AppendFormat("{0} = @{0}", field);
138
139 // first = false;
140 // cmd.Parameters.Add(m_database.CreateParameter("@" + field, data.Data[field]));
141 // }
142
143 // updateBuilder.Append(" where UUID = @principalID");
144
145 // if (data.ScopeID != UUID.Zero)
146 // updateBuilder.Append(" and ScopeID = @scopeID");
147
148 // cmd.CommandText = updateBuilder.ToString();
149 // cmd.Connection = conn;
150 // cmd.Parameters.Add(m_database.CreateParameter("@principalID", data.PrincipalID));
151 // cmd.Parameters.Add(m_database.CreateParameter("@scopeID", data.ScopeID));
152 // conn.Open();
153
154 // if (cmd.ExecuteNonQuery() < 1)
155 // {
156 // StringBuilder insertBuilder = new StringBuilder();
157 // insertBuilder.AppendFormat("insert into {0} (UUID, ScopeID, ", m_Realm);
158 // insertBuilder.Append(String.Join(", ", fields));
159 // insertBuilder.Append(") values (@principalID, @scopeID, @");
160 // insertBuilder.Append(String.Join(", @", fields));
161 // insertBuilder.Append(")");
162
163 // cmd.CommandText = insertBuilder.ToString();
164
165 // if (cmd.ExecuteNonQuery() < 1)
166 // {
167 // return false;
168 // }
169 // }
170 // }
171 // return true;
172 //}
173
174 //public bool Store(UserAccountData data, UUID principalID, string token)
175 //{
176 // return false;
177 //}
178
179 //public bool SetDataItem(UUID principalID, string item, string value)
180 //{
181 // string sql = string.Format("update {0} set {1} = @{1} where UUID = @UUID", m_Realm, item);
182 // using (SqlConnection conn = new SqlConnection(m_ConnectionString))
183 // using (SqlCommand cmd = new SqlCommand(sql, conn))
184 // {
185 // cmd.Parameters.Add(m_database.CreateParameter("@" + item, value));
186 // cmd.Parameters.Add(m_database.CreateParameter("@UUID", principalID));
187
188 // conn.Open();
189
190 // if (cmd.ExecuteNonQuery() > 0)
191 // return true;
192 // }
193 // return false;
194 //}
195
196 //public UserAccountData[] Get(string[] keys, string[] vals)
197 //{
198 // return null;
199 //}
200
201 public UserAccountData[] GetUsers(UUID scopeID, string query)
202 {
203 string[] words = query.Split(new char[] { ' ' });
204
205 for (int i = 0; i < words.Length; i++)
206 {
207 if (words[i].Length < 3)
208 {
209 if (i != words.Length - 1)
210 Array.Copy(words, i + 1, words, i, words.Length - i - 1);
211 Array.Resize(ref words, words.Length - 1);
212 }
213 }
214
215 if (words.Length == 0)
216 return new UserAccountData[0];
217
218 if (words.Length > 2)
219 return new UserAccountData[0];
220
221 string sql = "";
222
223 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
224 using (SqlCommand cmd = new SqlCommand())
225 {
226 if (words.Length == 1)
227 {
228 sql = String.Format("select * from {0} where ([ScopeID]=@ScopeID or [ScopeID]='00000000-0000-0000-0000-000000000000') and ([FirstName] like @search or [LastName] like @search)", m_Realm);
229 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID));
230 cmd.Parameters.Add(m_database.CreateParameter("@search", "%" + words[0] + "%"));
231 }
232 else
233 {
234 sql = String.Format("select * from {0} where ([ScopeID]=@ScopeID or [ScopeID]='00000000-0000-0000-0000-000000000000') and ([FirstName] like @searchFirst or [LastName] like @searchLast)", m_Realm);
235 cmd.Parameters.Add(m_database.CreateParameter("@searchFirst", "%" + words[0] + "%"));
236 cmd.Parameters.Add(m_database.CreateParameter("@searchLast", "%" + words[1] + "%"));
237 cmd.Parameters.Add(m_database.CreateParameter("@ScopeID", scopeID.ToString()));
238 }
239 cmd.Connection = conn;
240 cmd.CommandText = sql;
241 conn.Open();
242 return DoQuery(cmd);
243 }
244 }
245 }
246}
diff --git a/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs b/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs
deleted file mode 100644
index bfef682..0000000
--- a/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs
+++ /dev/null
@@ -1,305 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ''AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using System.Data;
32using OpenMetaverse;
33using OpenSim.Framework;
34using System.Data.SqlClient;
35using System.Reflection;
36using System.Text;
37using log4net;
38
39namespace OpenSim.Data.MSSQL
40{
41 public class MSSQLXInventoryData : IXInventoryData
42 {
43// private static readonly ILog m_log = LogManager.GetLogger(
44// MethodBase.GetCurrentMethod().DeclaringType);
45
46 private MSSQLFolderHandler m_Folders;
47 private MSSQLItemHandler m_Items;
48
49 public MSSQLXInventoryData(string conn, string realm)
50 {
51 m_Folders = new MSSQLFolderHandler(
52 conn, "inventoryfolders", "InventoryStore");
53 m_Items = new MSSQLItemHandler(
54 conn, "inventoryitems", String.Empty);
55 }
56
57 public XInventoryFolder[] GetFolders(string[] fields, string[] vals)
58 {
59 return m_Folders.Get(fields, vals);
60 }
61
62 public XInventoryItem[] GetItems(string[] fields, string[] vals)
63 {
64 return m_Items.Get(fields, vals);
65 }
66
67 public bool StoreFolder(XInventoryFolder folder)
68 {
69 if (folder.folderName.Length > 64)
70 folder.folderName = folder.folderName.Substring(0, 64);
71 return m_Folders.Store(folder);
72 }
73
74 public bool StoreItem(XInventoryItem item)
75 {
76 if (item.inventoryName.Length > 64)
77 item.inventoryName = item.inventoryName.Substring(0, 64);
78 if (item.inventoryDescription.Length > 128)
79 item.inventoryDescription = item.inventoryDescription.Substring(0, 128);
80
81 return m_Items.Store(item);
82 }
83
84 public bool DeleteFolders(string field, string val)
85 {
86 return m_Folders.Delete(field, val);
87 }
88
89 public bool DeleteFolders(string[] fields, string[] vals)
90 {
91 return m_Folders.Delete(fields, vals);
92 }
93
94 public bool DeleteItems(string field, string val)
95 {
96 return m_Items.Delete(field, val);
97 }
98
99 public bool DeleteItems(string[] fields, string[] vals)
100 {
101 return m_Items.Delete(fields, vals);
102 }
103
104 public bool MoveItem(string id, string newParent)
105 {
106 return m_Items.MoveItem(id, newParent);
107 }
108
109 public bool MoveFolder(string id, string newParent)
110 {
111 return m_Folders.MoveFolder(id, newParent);
112 }
113
114 public XInventoryItem[] GetActiveGestures(UUID principalID)
115 {
116 return m_Items.GetActiveGestures(principalID);
117 }
118
119 public int GetAssetPermissions(UUID principalID, UUID assetID)
120 {
121 return m_Items.GetAssetPermissions(principalID, assetID);
122 }
123 }
124
125 public class MSSQLItemHandler : MSSQLInventoryHandler<XInventoryItem>
126 {
127 public MSSQLItemHandler(string c, string t, string m) :
128 base(c, t, m)
129 {
130 }
131
132 public bool MoveItem(string id, string newParent)
133 {
134 XInventoryItem[] retrievedItems = Get(new string[] { "inventoryID" }, new string[] { id });
135 if (retrievedItems.Length == 0)
136 return false;
137
138 UUID oldParent = retrievedItems[0].parentFolderID;
139
140 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
141 {
142 using (SqlCommand cmd = new SqlCommand())
143 {
144
145 cmd.CommandText = String.Format("update {0} set parentFolderID = @ParentFolderID where inventoryID = @InventoryID", m_Realm);
146 cmd.Parameters.Add(m_database.CreateParameter("@ParentFolderID", newParent));
147 cmd.Parameters.Add(m_database.CreateParameter("@InventoryID", id));
148 cmd.Connection = conn;
149 conn.Open();
150
151 if (cmd.ExecuteNonQuery() == 0)
152 return false;
153 }
154 }
155
156 IncrementFolderVersion(oldParent);
157 IncrementFolderVersion(newParent);
158
159 return true;
160 }
161
162 public XInventoryItem[] GetActiveGestures(UUID principalID)
163 {
164 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
165 {
166 using (SqlCommand cmd = new SqlCommand())
167 {
168 cmd.CommandText = String.Format("select * from inventoryitems where avatarId = @uuid and assetType = @type and flags = 1", m_Realm);
169
170 cmd.Parameters.Add(m_database.CreateParameter("@uuid", principalID.ToString()));
171 cmd.Parameters.Add(m_database.CreateParameter("@type", (int)AssetType.Gesture));
172 cmd.Connection = conn;
173 conn.Open();
174 return DoQuery(cmd);
175 }
176 }
177 }
178
179 public int GetAssetPermissions(UUID principalID, UUID assetID)
180 {
181 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
182 {
183 using (SqlCommand cmd = new SqlCommand())
184 {
185 cmd.CommandText = String.Format("select bit_or(inventoryCurrentPermissions) as inventoryCurrentPermissions from inventoryitems where avatarID = @PrincipalID and assetID = @AssetID group by assetID", m_Realm);
186 cmd.Parameters.Add(m_database.CreateParameter("@PrincipalID", principalID.ToString()));
187 cmd.Parameters.Add(m_database.CreateParameter("@AssetID", assetID.ToString()));
188 cmd.Connection = conn;
189 conn.Open();
190 using (SqlDataReader reader = cmd.ExecuteReader())
191 {
192
193 int perms = 0;
194
195 if (reader.Read())
196 {
197 perms = Convert.ToInt32(reader["inventoryCurrentPermissions"]);
198 }
199
200 return perms;
201 }
202
203 }
204 }
205 }
206
207 public override bool Store(XInventoryItem item)
208 {
209 if (!base.Store(item))
210 return false;
211
212 IncrementFolderVersion(item.parentFolderID);
213
214 return true;
215 }
216 }
217
218 public class MSSQLFolderHandler : MSSQLInventoryHandler<XInventoryFolder>
219 {
220 public MSSQLFolderHandler(string c, string t, string m) :
221 base(c, t, m)
222 {
223 }
224
225 public bool MoveFolder(string id, string newParentFolderID)
226 {
227 XInventoryFolder[] folders = Get(new string[] { "folderID" }, new string[] { id });
228
229 if (folders.Length == 0)
230 return false;
231
232 UUID oldParentFolderUUID = folders[0].parentFolderID;
233
234 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
235 {
236 using (SqlCommand cmd = new SqlCommand())
237 {
238
239 cmd.CommandText = String.Format("update {0} set parentFolderID = @ParentFolderID where folderID = @folderID", m_Realm);
240 cmd.Parameters.Add(m_database.CreateParameter("@ParentFolderID", newParentFolderID));
241 cmd.Parameters.Add(m_database.CreateParameter("@folderID", id));
242 cmd.Connection = conn;
243 conn.Open();
244
245 if (cmd.ExecuteNonQuery() == 0)
246 return false;
247 }
248 }
249
250 IncrementFolderVersion(oldParentFolderUUID);
251 IncrementFolderVersion(newParentFolderID);
252
253 return true;
254 }
255
256 public override bool Store(XInventoryFolder folder)
257 {
258 if (!base.Store(folder))
259 return false;
260
261 IncrementFolderVersion(folder.parentFolderID);
262
263 return true;
264 }
265 }
266
267 public class MSSQLInventoryHandler<T> : MSSQLGenericTableHandler<T> where T: class, new()
268 {
269 public MSSQLInventoryHandler(string c, string t, string m) : base(c, t, m) {}
270
271 protected bool IncrementFolderVersion(UUID folderID)
272 {
273 return IncrementFolderVersion(folderID.ToString());
274 }
275
276 protected bool IncrementFolderVersion(string folderID)
277 {
278// m_log.DebugFormat("[MYSQL ITEM HANDLER]: Incrementing version on folder {0}", folderID);
279// Util.PrintCallStack();
280
281 string sql = "update inventoryfolders set version=version+1 where folderID = @folderID";
282
283 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
284 {
285 using (SqlCommand cmd = new SqlCommand(sql, conn))
286 {
287 conn.Open();
288
289 cmd.Parameters.AddWithValue("@folderID", folderID);
290
291 try
292 {
293 cmd.ExecuteNonQuery();
294 }
295 catch (Exception)
296 {
297 return false;
298 }
299 }
300 }
301
302 return true;
303 }
304 }
305} \ No newline at end of file
diff --git a/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs b/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs
deleted file mode 100644
index ad1203b..0000000
--- a/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,65 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System.Reflection;
29using System.Runtime.InteropServices;
30
31// General information about an assembly is controlled through the following
32// set of attributes. Change these attribute values to modify the information
33// associated with an assembly.
34
35[assembly : AssemblyTitle("OpenSim.Data.MSSQL")]
36[assembly : AssemblyDescription("")]
37[assembly : AssemblyConfiguration("")]
38[assembly : AssemblyCompany("http://opensimulator.org")]
39[assembly : AssemblyProduct("OpenSim.Data.MSSQL")]
40[assembly : AssemblyCopyright("Copyright (c) OpenSimulator.org Developers 2007-2009")]
41[assembly : AssemblyTrademark("")]
42[assembly : AssemblyCulture("")]
43
44// Setting ComVisible to false makes the types in this assembly not visible
45// to COM components. If you need to access a type in this assembly from
46// COM, set the ComVisible attribute to true on that type.
47
48[assembly : ComVisible(false)]
49
50// The following GUID is for the ID of the typelib if this project is exposed to COM
51
52[assembly : Guid("0e1c1ca4-2cf2-4315-b0e7-432c02feea8a")]
53
54// Version information for an assembly consists of the following four values:
55//
56// Major Version
57// Minor Version
58// Build Number
59// Revision
60//
61// You can specify all the values or you can default the Revision and Build Numbers
62// by using the '*' as shown below:
63
64[assembly : AssemblyVersion("0.8.1.*")]
65
diff --git a/OpenSim/Data/MSSQL/Resources/AssetStore.migrations b/OpenSim/Data/MSSQL/Resources/AssetStore.migrations
deleted file mode 100644
index 8664ce9..0000000
--- a/OpenSim/Data/MSSQL/Resources/AssetStore.migrations
+++ /dev/null
@@ -1,106 +0,0 @@
1:VERSION 1
2
3CREATE TABLE [assets] (
4 [id] [varchar](36) NOT NULL,
5 [name] [varchar](64) NOT NULL,
6 [description] [varchar](64) NOT NULL,
7 [assetType] [tinyint] NOT NULL,
8 [local] [tinyint] NOT NULL,
9 [temporary] [tinyint] NOT NULL,
10 [data] [image] NOT NULL,
11PRIMARY KEY CLUSTERED
12(
13 [id] ASC
14)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
15) ON [PRIMARY]
16
17
18:VERSION 2
19
20BEGIN TRANSACTION
21
22CREATE TABLE Tmp_assets
23 (
24 id varchar(36) NOT NULL,
25 name varchar(64) NOT NULL,
26 description varchar(64) NOT NULL,
27 assetType tinyint NOT NULL,
28 local bit NOT NULL,
29 temporary bit NOT NULL,
30 data image NOT NULL
31 ) ON [PRIMARY]
32 TEXTIMAGE_ON [PRIMARY]
33
34IF EXISTS(SELECT * FROM assets)
35 EXEC('INSERT INTO Tmp_assets (id, name, description, assetType, local, temporary, data)
36 SELECT id, name, description, assetType, CONVERT(bit, local), CONVERT(bit, temporary), data FROM assets WITH (HOLDLOCK TABLOCKX)')
37
38DROP TABLE assets
39
40EXECUTE sp_rename N'Tmp_assets', N'assets', 'OBJECT'
41
42ALTER TABLE dbo.assets ADD CONSTRAINT
43 PK__assets__id PRIMARY KEY CLUSTERED
44 (
45 id
46 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
47
48COMMIT
49
50
51:VERSION 3
52
53BEGIN TRANSACTION
54
55ALTER TABLE assets add create_time integer default 0
56ALTER TABLE assets add access_time integer default 0
57
58COMMIT
59
60
61:VERSION 4
62
63BEGIN TRANSACTION
64
65CREATE TABLE dbo.Tmp_assets
66 (
67 id uniqueidentifier NOT NULL,
68 name varchar(64) NOT NULL,
69 description varchar(64) NOT NULL,
70 assetType tinyint NOT NULL,
71 local bit NOT NULL,
72 temporary bit NOT NULL,
73 data image NOT NULL,
74 create_time int NULL,
75 access_time int NULL
76 ) ON [PRIMARY]
77 TEXTIMAGE_ON [PRIMARY]
78
79IF EXISTS(SELECT * FROM dbo.assets)
80 EXEC('INSERT INTO dbo.Tmp_assets (id, name, description, assetType, local, temporary, data, create_time, access_time)
81 SELECT CONVERT(uniqueidentifier, id), name, description, assetType, local, temporary, data, create_time, access_time FROM dbo.assets WITH (HOLDLOCK TABLOCKX)')
82
83DROP TABLE assets
84
85EXECUTE sp_rename N'Tmp_assets', N'assets', 'OBJECT'
86
87ALTER TABLE dbo.assets ADD CONSTRAINT
88 PK__assets__id PRIMARY KEY CLUSTERED
89 (
90 id
91 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
92
93COMMIT
94
95
96:VERSION 5
97
98DELETE FROM assets WHERE id = 'dc4b9f0b-d008-45c6-96a4-01dd947ac621';
99
100:VERSION 6
101
102ALTER TABLE assets ADD asset_flags INTEGER NOT NULL DEFAULT 0;
103
104:VERSION 7
105
106alter table assets add creatorid varchar(36) not null default '';
diff --git a/OpenSim/Data/MSSQL/Resources/AuthStore.migrations b/OpenSim/Data/MSSQL/Resources/AuthStore.migrations
deleted file mode 100644
index eb91296..0000000
--- a/OpenSim/Data/MSSQL/Resources/AuthStore.migrations
+++ /dev/null
@@ -1,32 +0,0 @@
1:VERSION 1
2
3BEGIN TRANSACTION
4
5CREATE TABLE [auth] (
6 [uuid] [uniqueidentifier] NOT NULL default '00000000-0000-0000-0000-000000000000',
7 [passwordHash] [varchar](32) NOT NULL,
8 [passwordSalt] [varchar](32) NOT NULL,
9 [webLoginKey] [varchar](255) NOT NULL,
10 [accountType] VARCHAR(32) NOT NULL DEFAULT 'UserAccount',
11) ON [PRIMARY]
12
13CREATE TABLE [tokens] (
14 [uuid] [uniqueidentifier] NOT NULL default '00000000-0000-0000-0000-000000000000',
15 [token] [varchar](255) NOT NULL,
16 [validity] [datetime] NOT NULL )
17 ON [PRIMARY]
18
19COMMIT
20
21:VERSION 2
22
23BEGIN TRANSACTION
24
25IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[users]') AND type in (N'U'))
26 INSERT INTO auth (UUID, passwordHash, passwordSalt, webLoginKey, accountType) SELECT [UUID] AS UUID, [passwordHash] AS passwordHash, [passwordSalt] AS passwordSalt, [webLoginKey] AS webLoginKey, 'UserAccount' as [accountType] FROM users;
27
28COMMIT
29
30
31
32
diff --git a/OpenSim/Data/MSSQL/Resources/Avatar.migrations b/OpenSim/Data/MSSQL/Resources/Avatar.migrations
deleted file mode 100644
index 61f7b56..0000000
--- a/OpenSim/Data/MSSQL/Resources/Avatar.migrations
+++ /dev/null
@@ -1,64 +0,0 @@
1:VERSION 1
2
3BEGIN TRANSACTION
4
5CREATE TABLE [Avatars] (
6[PrincipalID] uniqueidentifier NOT NULL,
7[Name] varchar(32) NOT NULL,
8[Value] varchar(255) NOT NULL DEFAULT '',
9PRIMARY KEY CLUSTERED
10(
11 [PrincipalID] ASC, [Name] ASC
12)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
13) ON [PRIMARY]
14
15
16COMMIT
17
18:VERSION 2
19
20BEGIN TRANSACTION
21
22CREATE TABLE dbo.Tmp_Avatars
23 (
24 PrincipalID uniqueidentifier NOT NULL,
25 [Name] varchar(32) NOT NULL,
26 Value text NOT NULL DEFAULT '',
27 ) ON [PRIMARY]
28 TEXTIMAGE_ON [PRIMARY]
29
30IF EXISTS(SELECT * FROM dbo.Avatars)
31 EXEC('INSERT INTO dbo.Tmp_Avatars (PrincipalID, Name, Value)
32 SELECT PrincipalID, CONVERT(text, Name), Value FROM dbo.Avatars WITH (HOLDLOCK TABLOCKX)')
33
34DROP TABLE dbo.Avatars
35
36EXECUTE sp_rename N'dbo.Tmp_Avatars', N'Avatars', 'OBJECT'
37
38COMMIT
39
40:VERSION 3
41
42BEGIN TRANSACTION
43
44CREATE TABLE dbo.Tmp_Avatars
45 (
46 PrincipalID uniqueidentifier NOT NULL,
47 [Name] varchar(32) NOT NULL,
48 Value text NOT NULL DEFAULT '',
49 PRIMARY KEY CLUSTERED
50(
51 [PrincipalID] ASC, [Name] ASC
52)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
53) ON [PRIMARY]
54 TEXTIMAGE_ON [PRIMARY]
55
56IF EXISTS(SELECT * FROM dbo.Avatars)
57 EXEC('INSERT INTO dbo.Tmp_Avatars (PrincipalID, Name, Value)
58 SELECT PrincipalID, CONVERT(text, Name), Value FROM dbo.Avatars WITH (HOLDLOCK TABLOCKX)')
59
60DROP TABLE dbo.Avatars
61
62EXECUTE sp_rename N'dbo.Tmp_Avatars', N'Avatars', 'OBJECT'
63COMMIT
64
diff --git a/OpenSim/Data/MSSQL/Resources/EstateStore.migrations b/OpenSim/Data/MSSQL/Resources/EstateStore.migrations
deleted file mode 100644
index b5b1b18..0000000
--- a/OpenSim/Data/MSSQL/Resources/EstateStore.migrations
+++ /dev/null
@@ -1,342 +0,0 @@
1:VERSION 1
2
3BEGIN TRANSACTION
4
5CREATE TABLE [dbo].[estate_managers](
6 [EstateID] [int] NOT NULL,
7 [uuid] [varchar](36) NOT NULL,
8 CONSTRAINT [PK_estate_managers] PRIMARY KEY CLUSTERED
9(
10 [EstateID] ASC
11)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
12) ON [PRIMARY];
13
14CREATE TABLE [dbo].[estate_groups](
15 [EstateID] [int] NOT NULL,
16 [uuid] [varchar](36) NOT NULL,
17 CONSTRAINT [PK_estate_groups] PRIMARY KEY CLUSTERED
18(
19 [EstateID] ASC
20)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
21) ON [PRIMARY];
22
23
24CREATE TABLE [dbo].[estate_users](
25 [EstateID] [int] NOT NULL,
26 [uuid] [varchar](36) NOT NULL,
27 CONSTRAINT [PK_estate_users] PRIMARY KEY CLUSTERED
28(
29 [EstateID] ASC
30)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
31) ON [PRIMARY];
32
33
34CREATE TABLE [dbo].[estateban](
35 [EstateID] [int] NOT NULL,
36 [bannedUUID] [varchar](36) NOT NULL,
37 [bannedIp] [varchar](16) NOT NULL,
38 [bannedIpHostMask] [varchar](16) NOT NULL,
39 [bannedNameMask] [varchar](64) NULL DEFAULT (NULL),
40 CONSTRAINT [PK_estateban] PRIMARY KEY CLUSTERED
41(
42 [EstateID] ASC
43)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
44) ON [PRIMARY];
45
46CREATE TABLE [dbo].[estate_settings](
47 [EstateID] [int] IDENTITY(1,100) NOT NULL,
48 [EstateName] [varchar](64) NULL DEFAULT (NULL),
49 [AbuseEmailToEstateOwner] [bit] NOT NULL,
50 [DenyAnonymous] [bit] NOT NULL,
51 [ResetHomeOnTeleport] [bit] NOT NULL,
52 [FixedSun] [bit] NOT NULL,
53 [DenyTransacted] [bit] NOT NULL,
54 [BlockDwell] [bit] NOT NULL,
55 [DenyIdentified] [bit] NOT NULL,
56 [AllowVoice] [bit] NOT NULL,
57 [UseGlobalTime] [bit] NOT NULL,
58 [PricePerMeter] [int] NOT NULL,
59 [TaxFree] [bit] NOT NULL,
60 [AllowDirectTeleport] [bit] NOT NULL,
61 [RedirectGridX] [int] NOT NULL,
62 [RedirectGridY] [int] NOT NULL,
63 [ParentEstateID] [int] NOT NULL,
64 [SunPosition] [float] NOT NULL,
65 [EstateSkipScripts] [bit] NOT NULL,
66 [BillableFactor] [float] NOT NULL,
67 [PublicAccess] [bit] NOT NULL,
68 [AbuseEmail] [varchar](255) NOT NULL,
69 [EstateOwner] [varchar](36) NOT NULL,
70 [DenyMinors] [bit] NOT NULL,
71 CONSTRAINT [PK_estate_settings] PRIMARY KEY CLUSTERED
72(
73 [EstateID] ASC
74)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
75) ON [PRIMARY];
76
77
78CREATE TABLE [dbo].[estate_map](
79 [RegionID] [varchar](36) NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000'),
80 [EstateID] [int] NOT NULL,
81 CONSTRAINT [PK_estate_map] PRIMARY KEY CLUSTERED
82(
83 [RegionID] ASC
84)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
85) ON [PRIMARY];
86
87COMMIT
88
89:VERSION 2
90
91BEGIN TRANSACTION
92
93ALTER TABLE dbo.estate_managers DROP CONSTRAINT PK_estate_managers
94
95CREATE NONCLUSTERED INDEX IX_estate_managers ON dbo.estate_managers
96 (
97 EstateID
98 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
99
100ALTER TABLE dbo.estate_groups DROP CONSTRAINT PK_estate_groups
101
102CREATE NONCLUSTERED INDEX IX_estate_groups ON dbo.estate_groups
103 (
104 EstateID
105 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
106
107
108ALTER TABLE dbo.estate_users DROP CONSTRAINT PK_estate_users
109
110CREATE NONCLUSTERED INDEX IX_estate_users ON dbo.estate_users
111 (
112 EstateID
113 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
114
115COMMIT
116
117
118:VERSION 3
119
120BEGIN TRANSACTION
121
122CREATE TABLE dbo.Tmp_estateban
123 (
124 EstateID int NOT NULL,
125 bannedUUID varchar(36) NOT NULL,
126 bannedIp varchar(16) NULL,
127 bannedIpHostMask varchar(16) NULL,
128 bannedNameMask varchar(64) NULL
129 ) ON [PRIMARY]
130
131IF EXISTS(SELECT * FROM dbo.estateban)
132 EXEC('INSERT INTO dbo.Tmp_estateban (EstateID, bannedUUID, bannedIp, bannedIpHostMask, bannedNameMask)
133 SELECT EstateID, bannedUUID, bannedIp, bannedIpHostMask, bannedNameMask FROM dbo.estateban')
134
135DROP TABLE dbo.estateban
136
137EXECUTE sp_rename N'dbo.Tmp_estateban', N'estateban', 'OBJECT'
138
139CREATE NONCLUSTERED INDEX IX_estateban ON dbo.estateban
140 (
141 EstateID
142 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
143
144COMMIT
145
146
147:VERSION 4
148
149BEGIN TRANSACTION
150
151CREATE TABLE dbo.Tmp_estate_managers
152 (
153 EstateID int NOT NULL,
154 uuid uniqueidentifier NOT NULL
155 ) ON [PRIMARY]
156
157IF EXISTS(SELECT * FROM dbo.estate_managers)
158 EXEC('INSERT INTO dbo.Tmp_estate_managers (EstateID, uuid)
159 SELECT EstateID, CONVERT(uniqueidentifier, uuid) FROM dbo.estate_managers WITH (HOLDLOCK TABLOCKX)')
160
161DROP TABLE dbo.estate_managers
162
163EXECUTE sp_rename N'dbo.Tmp_estate_managers', N'estate_managers', 'OBJECT'
164
165CREATE NONCLUSTERED INDEX IX_estate_managers ON dbo.estate_managers
166 (
167 EstateID
168 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
169
170COMMIT
171
172
173:VERSION 5
174
175BEGIN TRANSACTION
176
177CREATE TABLE dbo.Tmp_estate_groups
178 (
179 EstateID int NOT NULL,
180 uuid uniqueidentifier NOT NULL
181 ) ON [PRIMARY]
182
183IF EXISTS(SELECT * FROM dbo.estate_groups)
184 EXEC('INSERT INTO dbo.Tmp_estate_groups (EstateID, uuid)
185 SELECT EstateID, CONVERT(uniqueidentifier, uuid) FROM dbo.estate_groups WITH (HOLDLOCK TABLOCKX)')
186
187DROP TABLE dbo.estate_groups
188
189EXECUTE sp_rename N'dbo.Tmp_estate_groups', N'estate_groups', 'OBJECT'
190
191CREATE NONCLUSTERED INDEX IX_estate_groups ON dbo.estate_groups
192 (
193 EstateID
194 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
195
196COMMIT
197
198
199:VERSION 6
200
201BEGIN TRANSACTION
202
203CREATE TABLE dbo.Tmp_estate_users
204 (
205 EstateID int NOT NULL,
206 uuid uniqueidentifier NOT NULL
207 ) ON [PRIMARY]
208
209IF EXISTS(SELECT * FROM dbo.estate_users)
210 EXEC('INSERT INTO dbo.Tmp_estate_users (EstateID, uuid)
211 SELECT EstateID, CONVERT(uniqueidentifier, uuid) FROM dbo.estate_users WITH (HOLDLOCK TABLOCKX)')
212
213DROP TABLE dbo.estate_users
214
215EXECUTE sp_rename N'dbo.Tmp_estate_users', N'estate_users', 'OBJECT'
216
217CREATE NONCLUSTERED INDEX IX_estate_users ON dbo.estate_users
218 (
219 EstateID
220 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
221
222COMMIT
223
224
225:VERSION 7
226
227BEGIN TRANSACTION
228
229CREATE TABLE dbo.Tmp_estateban
230 (
231 EstateID int NOT NULL,
232 bannedUUID uniqueidentifier NOT NULL,
233 bannedIp varchar(16) NULL,
234 bannedIpHostMask varchar(16) NULL,
235 bannedNameMask varchar(64) NULL
236 ) ON [PRIMARY]
237
238IF EXISTS(SELECT * FROM dbo.estateban)
239 EXEC('INSERT INTO dbo.Tmp_estateban (EstateID, bannedUUID, bannedIp, bannedIpHostMask, bannedNameMask)
240 SELECT EstateID, CONVERT(uniqueidentifier, bannedUUID), bannedIp, bannedIpHostMask, bannedNameMask FROM dbo.estateban WITH (HOLDLOCK TABLOCKX)')
241
242DROP TABLE dbo.estateban
243
244EXECUTE sp_rename N'dbo.Tmp_estateban', N'estateban', 'OBJECT'
245
246CREATE NONCLUSTERED INDEX IX_estateban ON dbo.estateban
247 (
248 EstateID
249 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
250
251COMMIT
252
253
254:VERSION 8
255
256BEGIN TRANSACTION
257
258CREATE TABLE dbo.Tmp_estate_settings
259 (
260 EstateID int NOT NULL IDENTITY (1, 100),
261 EstateName varchar(64) NULL DEFAULT (NULL),
262 AbuseEmailToEstateOwner bit NOT NULL,
263 DenyAnonymous bit NOT NULL,
264 ResetHomeOnTeleport bit NOT NULL,
265 FixedSun bit NOT NULL,
266 DenyTransacted bit NOT NULL,
267 BlockDwell bit NOT NULL,
268 DenyIdentified bit NOT NULL,
269 AllowVoice bit NOT NULL,
270 UseGlobalTime bit NOT NULL,
271 PricePerMeter int NOT NULL,
272 TaxFree bit NOT NULL,
273 AllowDirectTeleport bit NOT NULL,
274 RedirectGridX int NOT NULL,
275 RedirectGridY int NOT NULL,
276 ParentEstateID int NOT NULL,
277 SunPosition float(53) NOT NULL,
278 EstateSkipScripts bit NOT NULL,
279 BillableFactor float(53) NOT NULL,
280 PublicAccess bit NOT NULL,
281 AbuseEmail varchar(255) NOT NULL,
282 EstateOwner uniqueidentifier NOT NULL,
283 DenyMinors bit NOT NULL
284 ) ON [PRIMARY]
285
286SET IDENTITY_INSERT dbo.Tmp_estate_settings ON
287
288IF EXISTS(SELECT * FROM dbo.estate_settings)
289 EXEC('INSERT INTO dbo.Tmp_estate_settings (EstateID, EstateName, AbuseEmailToEstateOwner, DenyAnonymous, ResetHomeOnTeleport, FixedSun, DenyTransacted, BlockDwell, DenyIdentified, AllowVoice, UseGlobalTime, PricePerMeter, TaxFree, AllowDirectTeleport, RedirectGridX, RedirectGridY, ParentEstateID, SunPosition, EstateSkipScripts, BillableFactor, PublicAccess, AbuseEmail, EstateOwner, DenyMinors)
290 SELECT EstateID, EstateName, AbuseEmailToEstateOwner, DenyAnonymous, ResetHomeOnTeleport, FixedSun, DenyTransacted, BlockDwell, DenyIdentified, AllowVoice, UseGlobalTime, PricePerMeter, TaxFree, AllowDirectTeleport, RedirectGridX, RedirectGridY, ParentEstateID, SunPosition, EstateSkipScripts, BillableFactor, PublicAccess, AbuseEmail, CONVERT(uniqueidentifier, EstateOwner), DenyMinors FROM dbo.estate_settings WITH (HOLDLOCK TABLOCKX)')
291
292SET IDENTITY_INSERT dbo.Tmp_estate_settings OFF
293
294DROP TABLE dbo.estate_settings
295
296EXECUTE sp_rename N'dbo.Tmp_estate_settings', N'estate_settings', 'OBJECT'
297
298ALTER TABLE dbo.estate_settings ADD CONSTRAINT
299 PK_estate_settings PRIMARY KEY CLUSTERED
300 (
301 EstateID
302 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
303
304COMMIT
305
306
307:VERSION 9
308
309BEGIN TRANSACTION
310
311CREATE TABLE dbo.Tmp_estate_map
312 (
313 RegionID uniqueidentifier NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000'),
314 EstateID int NOT NULL
315 ) ON [PRIMARY]
316
317IF EXISTS(SELECT * FROM dbo.estate_map)
318 EXEC('INSERT INTO dbo.Tmp_estate_map (RegionID, EstateID)
319 SELECT CONVERT(uniqueidentifier, RegionID), EstateID FROM dbo.estate_map WITH (HOLDLOCK TABLOCKX)')
320
321DROP TABLE dbo.estate_map
322
323EXECUTE sp_rename N'dbo.Tmp_estate_map', N'estate_map', 'OBJECT'
324
325ALTER TABLE dbo.estate_map ADD CONSTRAINT
326 PK_estate_map PRIMARY KEY CLUSTERED
327 (
328 RegionID
329 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
330
331
332COMMIT
333
334:VERSION 10
335
336BEGIN transaction
337
338ALTER TABLE estate_settings ADD AllowLandmark tinyint NOT NULL default 1;
339ALTER TABLE estate_settings ADD AllowParcelChanges tinyint NOT NULL default 1;
340ALTER TABLE estate_settings ADD AllowSetHome tinyint NOT NULL default 1;
341
342COMMIT; \ No newline at end of file
diff --git a/OpenSim/Data/MSSQL/Resources/FriendsStore.migrations b/OpenSim/Data/MSSQL/Resources/FriendsStore.migrations
deleted file mode 100644
index cc94c4e..0000000
--- a/OpenSim/Data/MSSQL/Resources/FriendsStore.migrations
+++ /dev/null
@@ -1,50 +0,0 @@
1:VERSION 1
2
3BEGIN TRANSACTION
4
5CREATE TABLE [Friends] (
6[PrincipalID] uniqueidentifier NOT NULL,
7[Friend] varchar(255) NOT NULL,
8[Flags] char(16) NOT NULL DEFAULT '0',
9[Offered] varchar(32) NOT NULL DEFAULT 0)
10 ON [PRIMARY]
11
12COMMIT
13
14:VERSION 2
15
16BEGIN TRANSACTION
17
18IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[userfriends]') AND type in (N'U'))
19INSERT INTO Friends (PrincipalID, Friend, Flags, Offered)
20SELECT [ownerID], [friendID], [friendPerms], 0 FROM userfriends;
21
22COMMIT
23
24:VERSION 3
25
26BEGIN TRANSACTION
27
28CREATE TABLE [Tmp_Friends]
29 ([PrincipalID] varchar(255) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000',
30[Friend] varchar(255) NOT NULL,
31[Flags] char(16) NOT NULL DEFAULT '0',
32[Offered] varchar(32) NOT NULL DEFAULT 0)
33ON [PRIMARY]
34
35
36IF EXISTS(SELECT * FROM dbo.Friends)
37 EXEC('INSERT INTO dbo.Tmp_Friends (PrincipalID, Friend, Flags, Offered)
38 SELECT CONVERT(varchar(255),PrincipalID), Friend, Flags, Offered FROM dbo.Friends WITH (HOLDLOCK TABLOCKX)')
39
40DROP TABLE dbo.Friends
41
42EXECUTE sp_rename N'dbo.Tmp_Friends', N'Friends', 'OBJECT'
43
44ALTER TABLE dbo.Friends ADD
45 PRIMARY KEY CLUSTERED
46(
47 [PrincipalID] ASC, [Friend] ASC
48)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
49
50COMMIT \ No newline at end of file
diff --git a/OpenSim/Data/MSSQL/Resources/GridStore.migrations b/OpenSim/Data/MSSQL/Resources/GridStore.migrations
deleted file mode 100644
index de0cea7..0000000
--- a/OpenSim/Data/MSSQL/Resources/GridStore.migrations
+++ /dev/null
@@ -1,245 +0,0 @@
1:VERSION 1
2
3BEGIN TRANSACTION
4
5CREATE TABLE [dbo].[regions](
6 [regionHandle] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
7 [regionName] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
8 [uuid] [varchar](255) COLLATE Latin1_General_CI_AS NOT NULL,
9 [regionRecvKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
10 [regionSecret] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
11 [regionSendKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
12 [regionDataURI] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
13 [serverIP] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
14 [serverPort] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
15 [serverURI] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
16 [locX] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
17 [locY] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
18 [locZ] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
19 [eastOverrideHandle] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
20 [westOverrideHandle] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
21 [southOverrideHandle] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
22 [northOverrideHandle] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
23 [regionAssetURI] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
24 [regionAssetRecvKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
25 [regionAssetSendKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
26 [regionUserURI] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
27 [regionUserRecvKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
28 [regionUserSendKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
29 [regionMapTexture] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
30 [serverHttpPort] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
31 [serverRemotingPort] [varchar](255) COLLATE Latin1_General_CI_AS NULL,
32 [owner_uuid] [varchar](36) COLLATE Latin1_General_CI_AS NULL,
33PRIMARY KEY CLUSTERED
34(
35 [uuid] ASC
36)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
37) ON [PRIMARY]
38
39COMMIT
40
41
42:VERSION 2
43
44BEGIN TRANSACTION
45
46CREATE TABLE Tmp_regions
47 (
48 uuid varchar(36) COLLATE Latin1_General_CI_AS NOT NULL,
49 regionHandle bigint NULL,
50 regionName varchar(20) NULL,
51 regionRecvKey varchar(128) NULL,
52 regionSendKey varchar(128) NULL,
53 regionSecret varchar(128) NULL,
54 regionDataURI varchar(128) NULL,
55 serverIP varchar(64) NULL,
56 serverPort int NULL,
57 serverURI varchar(255) NULL,
58 locX int NULL,
59 locY int NULL,
60 locZ int NULL,
61 eastOverrideHandle bigint NULL,
62 westOverrideHandle bigint NULL,
63 southOverrideHandle bigint NULL,
64 northOverrideHandle bigint NULL,
65 regionAssetURI varchar(255) NULL,
66 regionAssetRecvKey varchar(128) NULL,
67 regionAssetSendKey varchar(128) NULL,
68 regionUserURI varchar(255) NULL,
69 regionUserRecvKey varchar(128) NULL,
70 regionUserSendKey varchar(128) NULL,
71 regionMapTexture varchar(36) NULL,
72 serverHttpPort int NULL,
73 serverRemotingPort int NULL,
74 owner_uuid varchar(36) NULL,
75 originUUID varchar(36) NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000')
76 ) ON [PRIMARY]
77
78IF EXISTS(SELECT * FROM regions)
79 EXEC('INSERT INTO Tmp_regions (uuid, regionHandle, regionName, regionRecvKey, regionSendKey, regionSecret, regionDataURI, serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey, regionMapTexture, serverHttpPort, serverRemotingPort, owner_uuid)
80 SELECT CONVERT(varchar(36), uuid), CONVERT(bigint, regionHandle), CONVERT(varchar(20), regionName), CONVERT(varchar(128), regionRecvKey), CONVERT(varchar(128), regionSendKey), CONVERT(varchar(128), regionSecret), CONVERT(varchar(128), regionDataURI), CONVERT(varchar(64), serverIP), CONVERT(int, serverPort), serverURI, CONVERT(int, locX), CONVERT(int, locY), CONVERT(int, locZ), CONVERT(bigint, eastOverrideHandle), CONVERT(bigint, westOverrideHandle), CONVERT(bigint, southOverrideHandle), CONVERT(bigint, northOverrideHandle), regionAssetURI, CONVERT(varchar(128), regionAssetRecvKey), CONVERT(varchar(128), regionAssetSendKey), regionUserURI, CONVERT(varchar(128), regionUserRecvKey), CONVERT(varchar(128), regionUserSendKey), CONVERT(varchar(36), regionMapTexture), CONVERT(int, serverHttpPort), CONVERT(int, serverRemotingPort), owner_uuid FROM regions')
81
82DROP TABLE regions
83
84EXECUTE sp_rename N'Tmp_regions', N'regions', 'OBJECT'
85
86ALTER TABLE regions ADD CONSTRAINT
87 PK__regions__uuid PRIMARY KEY CLUSTERED
88 (
89 uuid
90 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
91
92COMMIT
93
94:VERSION 3
95
96BEGIN TRANSACTION
97
98CREATE NONCLUSTERED INDEX IX_regions_name ON dbo.regions
99 (
100 regionName
101 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
102
103CREATE NONCLUSTERED INDEX IX_regions_handle ON dbo.regions
104 (
105 regionHandle
106 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
107
108
109CREATE NONCLUSTERED INDEX IX_regions_override ON dbo.regions
110 (
111 eastOverrideHandle,
112 westOverrideHandle,
113 southOverrideHandle,
114 northOverrideHandle
115 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
116
117COMMIT
118
119
120:VERSION 4
121
122/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/
123BEGIN TRANSACTION
124
125CREATE TABLE dbo.Tmp_regions
126 (
127 uuid uniqueidentifier NOT NULL,
128 regionHandle bigint NULL,
129 regionName varchar(20) NULL,
130 regionRecvKey varchar(128) NULL,
131 regionSendKey varchar(128) NULL,
132 regionSecret varchar(128) NULL,
133 regionDataURI varchar(128) NULL,
134 serverIP varchar(64) NULL,
135 serverPort int NULL,
136 serverURI varchar(255) NULL,
137 locX int NULL,
138 locY int NULL,
139 locZ int NULL,
140 eastOverrideHandle bigint NULL,
141 westOverrideHandle bigint NULL,
142 southOverrideHandle bigint NULL,
143 northOverrideHandle bigint NULL,
144 regionAssetURI varchar(255) NULL,
145 regionAssetRecvKey varchar(128) NULL,
146 regionAssetSendKey varchar(128) NULL,
147 regionUserURI varchar(255) NULL,
148 regionUserRecvKey varchar(128) NULL,
149 regionUserSendKey varchar(128) NULL,
150 regionMapTexture uniqueidentifier NULL,
151 serverHttpPort int NULL,
152 serverRemotingPort int NULL,
153 owner_uuid uniqueidentifier NOT NULL,
154 originUUID uniqueidentifier NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000')
155 ) ON [PRIMARY]
156
157IF EXISTS(SELECT * FROM dbo.regions)
158 EXEC('INSERT INTO dbo.Tmp_regions (uuid, regionHandle, regionName, regionRecvKey, regionSendKey, regionSecret, regionDataURI, serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey, regionMapTexture, serverHttpPort, serverRemotingPort, owner_uuid, originUUID)
159 SELECT CONVERT(uniqueidentifier, uuid), regionHandle, regionName, regionRecvKey, regionSendKey, regionSecret, regionDataURI, serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey, CONVERT(uniqueidentifier, regionMapTexture), serverHttpPort, serverRemotingPort, CONVERT(uniqueidentifier, owner_uuid), CONVERT(uniqueidentifier, originUUID) FROM dbo.regions WITH (HOLDLOCK TABLOCKX)')
160
161DROP TABLE dbo.regions
162
163EXECUTE sp_rename N'dbo.Tmp_regions', N'regions', 'OBJECT'
164
165ALTER TABLE dbo.regions ADD CONSTRAINT
166 PK__regions__uuid PRIMARY KEY CLUSTERED
167 (
168 uuid
169 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
170
171CREATE NONCLUSTERED INDEX IX_regions_name ON dbo.regions
172 (
173 regionName
174 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
175
176CREATE NONCLUSTERED INDEX IX_regions_handle ON dbo.regions
177 (
178 regionHandle
179 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
180
181CREATE NONCLUSTERED INDEX IX_regions_override ON dbo.regions
182 (
183 eastOverrideHandle,
184 westOverrideHandle,
185 southOverrideHandle,
186 northOverrideHandle
187 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
188
189COMMIT
190
191
192:VERSION 5
193
194BEGIN TRANSACTION
195
196ALTER TABLE regions ADD access int default 0;
197
198COMMIT
199
200
201:VERSION 6
202
203BEGIN TRANSACTION
204
205ALTER TABLE regions ADD scopeid uniqueidentifier default '00000000-0000-0000-0000-000000000000';
206ALTER TABLE regions ADD DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [owner_uuid];
207ALTER TABLE regions ADD sizeX integer not null default 0;
208ALTER TABLE regions ADD sizeY integer not null default 0;
209
210COMMIT
211
212
213:VERSION 7
214
215BEGIN TRANSACTION
216
217ALTER TABLE regions ADD [flags] integer NOT NULL DEFAULT 0;
218CREATE INDEX [flags] ON regions(flags);
219ALTER TABLE [regions] ADD [last_seen] integer NOT NULL DEFAULT 0;
220ALTER TABLE [regions] ADD [PrincipalID] uniqueidentifier NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000';
221ALTER TABLE [regions] ADD [Token] varchar(255) NOT NULL DEFAULT 0;
222
223COMMIT
224
225:VERSION 8
226
227BEGIN TRANSACTION
228ALTER TABLE regions ALTER COLUMN regionName VarChar(128)
229
230DROP INDEX IX_regions_name ON dbo.regions
231ALTER TABLE regions ALTER COLUMN regionName VarChar(128) null
232
233CREATE NONCLUSTERED INDEX IX_regions_name ON dbo.regions
234 (
235 regionName
236 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
237
238COMMIT
239
240:VERSION 9
241
242BEGIN TRANSACTION
243ALTER TABLE regions ADD parcelMapTexture uniqueidentifier NULL;
244
245COMMIT
diff --git a/OpenSim/Data/MSSQL/Resources/GridUserStore.migrations b/OpenSim/Data/MSSQL/Resources/GridUserStore.migrations
deleted file mode 100644
index ecd3f4d..0000000
--- a/OpenSim/Data/MSSQL/Resources/GridUserStore.migrations
+++ /dev/null
@@ -1,65 +0,0 @@
1:VERSION 1 # --------------------------
2
3BEGIN TRANSACTION
4
5CREATE TABLE "GridUser" (
6 "UserID" VARCHAR(255) NOT NULL,
7 "HomeRegionID" CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000',
8 "HomePosition" CHAR(64) NOT NULL DEFAULT '<0,0,0>',
9 "HomeLookAt" CHAR(64) NOT NULL DEFAULT '<0,0,0>',
10 "LastRegionID" CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000',
11 "LastPosition" CHAR(64) NOT NULL DEFAULT '<0,0,0>',
12 "LastLookAt" CHAR(64) NOT NULL DEFAULT '<0,0,0>',
13 "Online" CHAR(5) NOT NULL DEFAULT 'false',
14 "Login" CHAR(16) NOT NULL DEFAULT '0',
15 "Logout" CHAR(16) NOT NULL DEFAULT '0',
16 PRIMARY KEY ("UserID")
17)
18
19COMMIT
20
21:VERSION 2 # --------------------------
22
23BEGIN TRANSACTION
24
25CREATE TABLE [GridUser_tmp] (
26 [UserID] VARCHAR(255) NOT NULL,
27 [HomeRegionID] uniqueidentifier NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000',
28 [HomePosition] CHAR(64) NOT NULL DEFAULT '<0,0,0>',
29 [HomeLookAt] CHAR(64) NOT NULL DEFAULT '<0,0,0>',
30 [LastRegionID] uniqueidentifier NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000',
31 [LastPosition] CHAR(64) NOT NULL DEFAULT '<0,0,0>',
32 [LastLookAt] CHAR(64) NOT NULL DEFAULT '<0,0,0>',
33 [Online] CHAR(5) NOT NULL DEFAULT 'false',
34 [Login] CHAR(16) NOT NULL DEFAULT '0',
35 [Logout] CHAR(16) NOT NULL DEFAULT '0',
36
37 PRIMARY KEY CLUSTERED
38 (
39 [UserID] ASC
40 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
41 ) ON [PRIMARY]
42
43COMMIT
44
45IF EXISTS(SELECT * FROM dbo.GridUser)
46 EXEC('INSERT INTO dbo.GridUser_tmp ([UserID]
47 ,[HomeRegionID]
48 ,[HomePosition]
49 ,[HomeLookAt]
50 ,[LastRegionID]
51 ,[LastPosition]
52 ,[LastLookAt]
53 ,[Online]
54 ,[Login]
55 ,[Logout])
56 SELECT CONVERT(varchar(36), [HomeRegionID]), [HomePosition] ,[HomeLookAt] , CONVERT(varchar(36),[LastRegionID])
57 ,[LastPosition]
58 ,[LastLookAt]
59 ,[Online]
60 ,[Login]
61 ,[Logout] FROM dbo.GridUser WITH (HOLDLOCK TABLOCKX)')
62
63DROP TABLE dbo.GridUser
64
65EXECUTE sp_rename N'dbo.GridUser_tmp', N'GridUser', 'OBJECT' \ No newline at end of file
diff --git a/OpenSim/Data/MSSQL/Resources/InventoryStore.migrations b/OpenSim/Data/MSSQL/Resources/InventoryStore.migrations
deleted file mode 100644
index 4e43653..0000000
--- a/OpenSim/Data/MSSQL/Resources/InventoryStore.migrations
+++ /dev/null
@@ -1,279 +0,0 @@
1:VERSION 1
2
3BEGIN TRANSACTION
4
5CREATE TABLE [inventoryfolders] (
6 [folderID] [varchar](36) NOT NULL default '',
7 [agentID] [varchar](36) default NULL,
8 [parentFolderID] [varchar](36) default NULL,
9 [folderName] [varchar](64) default NULL,
10 [type] [smallint] NOT NULL default 0,
11 [version] [int] NOT NULL default 0,
12 PRIMARY KEY CLUSTERED
13(
14 [folderID] ASC
15)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
16) ON [PRIMARY]
17
18CREATE NONCLUSTERED INDEX [owner] ON [inventoryfolders]
19(
20 [agentID] ASC
21)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
22
23CREATE NONCLUSTERED INDEX [parent] ON [inventoryfolders]
24(
25 [parentFolderID] ASC
26)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
27
28
29CREATE TABLE [inventoryitems] (
30 [inventoryID] [varchar](36) NOT NULL default '',
31 [assetID] [varchar](36) default NULL,
32 [assetType] [int] default NULL,
33 [parentFolderID] [varchar](36) default NULL,
34 [avatarID] [varchar](36) default NULL,
35 [inventoryName] [varchar](64) default NULL,
36 [inventoryDescription] [varchar](128) default NULL,
37 [inventoryNextPermissions] [int] default NULL,
38 [inventoryCurrentPermissions] [int] default NULL,
39 [invType] [int] default NULL,
40 [creatorID] [varchar](36) default NULL,
41 [inventoryBasePermissions] [int] NOT NULL default 0,
42 [inventoryEveryOnePermissions] [int] NOT NULL default 0,
43 [salePrice] [int] default NULL,
44 [saleType] [tinyint] default NULL,
45 [creationDate] [int] default NULL,
46 [groupID] [varchar](36) default NULL,
47 [groupOwned] [bit] default NULL,
48 [flags] [int] default NULL,
49 PRIMARY KEY CLUSTERED
50(
51 [inventoryID] ASC
52)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
53) ON [PRIMARY]
54
55
56CREATE NONCLUSTERED INDEX [owner] ON [inventoryitems]
57(
58 [avatarID] ASC
59)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
60
61CREATE NONCLUSTERED INDEX [folder] ON [inventoryitems]
62(
63 [parentFolderID] ASC
64)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
65
66COMMIT
67
68
69:VERSION 2
70
71BEGIN TRANSACTION
72
73ALTER TABLE inventoryitems ADD inventoryGroupPermissions INTEGER NOT NULL default 0
74
75COMMIT
76
77:VERSION 3
78
79/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/
80BEGIN TRANSACTION
81
82CREATE TABLE dbo.Tmp_inventoryfolders
83 (
84 folderID uniqueidentifier NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000'),
85 agentID uniqueidentifier NULL DEFAULT (NULL),
86 parentFolderID uniqueidentifier NULL DEFAULT (NULL),
87 folderName varchar(64) NULL DEFAULT (NULL),
88 type smallint NOT NULL DEFAULT ((0)),
89 version int NOT NULL DEFAULT ((0))
90 ) ON [PRIMARY]
91
92IF EXISTS(SELECT * FROM dbo.inventoryfolders)
93 EXEC('INSERT INTO dbo.Tmp_inventoryfolders (folderID, agentID, parentFolderID, folderName, type, version)
94 SELECT CONVERT(uniqueidentifier, folderID), CONVERT(uniqueidentifier, agentID), CONVERT(uniqueidentifier, parentFolderID), folderName, type, version FROM dbo.inventoryfolders WITH (HOLDLOCK TABLOCKX)')
95
96DROP TABLE dbo.inventoryfolders
97
98EXECUTE sp_rename N'dbo.Tmp_inventoryfolders', N'inventoryfolders', 'OBJECT'
99
100ALTER TABLE dbo.inventoryfolders ADD CONSTRAINT
101 PK__inventor__C2FABFB3173876EA PRIMARY KEY CLUSTERED
102 (
103 folderID
104 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
105
106CREATE NONCLUSTERED INDEX owner ON dbo.inventoryfolders
107 (
108 agentID
109 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
110
111CREATE NONCLUSTERED INDEX parent ON dbo.inventoryfolders
112 (
113 parentFolderID
114 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
115
116COMMIT
117
118
119:VERSION 4
120
121BEGIN TRANSACTION
122
123CREATE TABLE dbo.Tmp_inventoryitems
124 (
125 inventoryID uniqueidentifier NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000'),
126 assetID uniqueidentifier NULL DEFAULT (NULL),
127 assetType int NULL DEFAULT (NULL),
128 parentFolderID uniqueidentifier NULL DEFAULT (NULL),
129 avatarID uniqueidentifier NULL DEFAULT (NULL),
130 inventoryName varchar(64) NULL DEFAULT (NULL),
131 inventoryDescription varchar(128) NULL DEFAULT (NULL),
132 inventoryNextPermissions int NULL DEFAULT (NULL),
133 inventoryCurrentPermissions int NULL DEFAULT (NULL),
134 invType int NULL DEFAULT (NULL),
135 creatorID uniqueidentifier NULL DEFAULT (NULL),
136 inventoryBasePermissions int NOT NULL DEFAULT ((0)),
137 inventoryEveryOnePermissions int NOT NULL DEFAULT ((0)),
138 salePrice int NULL DEFAULT (NULL),
139 saleType tinyint NULL DEFAULT (NULL),
140 creationDate int NULL DEFAULT (NULL),
141 groupID uniqueidentifier NULL DEFAULT (NULL),
142 groupOwned bit NULL DEFAULT (NULL),
143 flags int NULL DEFAULT (NULL),
144 inventoryGroupPermissions int NOT NULL DEFAULT ((0))
145 ) ON [PRIMARY]
146
147IF EXISTS(SELECT * FROM dbo.inventoryitems)
148 EXEC('INSERT INTO dbo.Tmp_inventoryitems (inventoryID, assetID, assetType, parentFolderID, avatarID, inventoryName, inventoryDescription, inventoryNextPermissions, inventoryCurrentPermissions, invType, creatorID, inventoryBasePermissions, inventoryEveryOnePermissions, salePrice, saleType, creationDate, groupID, groupOwned, flags, inventoryGroupPermissions)
149 SELECT CONVERT(uniqueidentifier, inventoryID), CONVERT(uniqueidentifier, assetID), assetType, CONVERT(uniqueidentifier, parentFolderID), CONVERT(uniqueidentifier, avatarID), inventoryName, inventoryDescription, inventoryNextPermissions, inventoryCurrentPermissions, invType, CONVERT(uniqueidentifier, creatorID), inventoryBasePermissions, inventoryEveryOnePermissions, salePrice, saleType, creationDate, CONVERT(uniqueidentifier, groupID), groupOwned, flags, inventoryGroupPermissions FROM dbo.inventoryitems WITH (HOLDLOCK TABLOCKX)')
150
151DROP TABLE dbo.inventoryitems
152
153EXECUTE sp_rename N'dbo.Tmp_inventoryitems', N'inventoryitems', 'OBJECT'
154
155ALTER TABLE dbo.inventoryitems ADD CONSTRAINT
156 PK__inventor__C4B7BC2220C1E124 PRIMARY KEY CLUSTERED
157 (
158 inventoryID
159 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
160
161
162CREATE NONCLUSTERED INDEX owner ON dbo.inventoryitems
163 (
164 avatarID
165 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
166
167CREATE NONCLUSTERED INDEX folder ON dbo.inventoryitems
168 (
169 parentFolderID
170 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
171
172COMMIT
173
174:VERSION 5
175
176# It would be totally crazy to have to recreate the whole table just to change one column type,
177# just because MS SQL treats each DEFAULT as a constraint object that must be dropped
178# before anything can be done to the column. Since all defaults here are unnamed, there is
179# no easy way to drop them! The hairy piece of code below removes all DEFAULT constraints
180# from InventoryItems.
181
182# SO: anything that's NULLable is by default NULL, so please don't declare DEFAULT(NULL),
183# they do nothing but prevent changes to the columns. If you really
184# need to have DEFAULTs or other constraints, give them names so they can be dropped when needed!
185
186BEGIN TRANSACTION
187DECLARE @nm varchar(80);
188DECLARE x CURSOR LOCAL FORWARD_ONLY READ_ONLY
189 FOR SELECT name FROM sys.default_constraints where parent_object_id = OBJECT_ID('inventoryitems');
190OPEN x;
191FETCH NEXT FROM x INTO @nm;
192WHILE @@FETCH_STATUS = 0
193BEGIN
194 EXEC('alter table inventoryitems drop ' + @nm);
195 FETCH NEXT FROM x INTO @nm;
196END
197CLOSE x
198DEALLOCATE x
199COMMIT
200
201# all DEFAULTs dropped!
202
203:GO
204
205BEGIN TRANSACTION
206
207# Restoring defaults:
208# NOTE: [inventoryID] does NOT need one: it's NOT NULL PK and a unique Guid must be provided every time anyway!
209
210alter table inventoryitems
211 add constraint def_baseperm default 0 for inventoryBasePermissions
212alter table inventoryitems
213 add constraint def_allperm default 0 for inventoryEveryOnePermissions
214alter table inventoryitems
215 add constraint def_grpperm default 0 for inventoryGroupPermissions
216
217COMMIT
218
219:VERSION 7
220
221BEGIN TRANSACTION
222
223# CreatorID goes back to VARCHAR(36) (???)
224
225exec sp_rename 'inventoryitems.CreatorID', 'cr_old', 'COLUMN'
226
227:GO
228
229alter table inventoryitems
230 add creatorID varchar(36) NULL
231
232:GO
233
234update inventoryitems set creatorID = CONVERT(VARCHAR(36), cr_old)
235
236alter table inventoryitems
237 drop column cr_old
238
239COMMIT
240
241:VERSION 8
242
243ALTER TABLE inventoryitems
244ADD CONSTRAINT DF_inventoryitems_creatorID
245DEFAULT '00000000-0000-0000-0000-000000000000' FOR creatorID
246
247:GO
248
249:VERSION 9
250
251BEGIN TRANSACTION
252
253# CreatorID goes up to VARCHAR(255)
254
255exec sp_rename 'inventoryitems.CreatorID', 'cr_old', 'COLUMN'
256
257:GO
258
259alter table inventoryitems
260 add creatorID varchar(255) NULL
261
262:GO
263
264update inventoryitems set creatorID = cr_old
265
266alter table inventoryitems
267drop CONSTRAINT DF_inventoryitems_creatorID
268:GO
269
270alter table inventoryitems
271 drop column cr_old
272 :GO
273COMMIT
274
275ALTER TABLE inventoryitems
276ADD CONSTRAINT DF_inventoryitems_creatorID
277DEFAULT '00000000-0000-0000-0000-000000000000' FOR creatorID
278
279:GO \ No newline at end of file
diff --git a/OpenSim/Data/MSSQL/Resources/LogStore.migrations b/OpenSim/Data/MSSQL/Resources/LogStore.migrations
deleted file mode 100644
index 1430d8d..0000000
--- a/OpenSim/Data/MSSQL/Resources/LogStore.migrations
+++ /dev/null
@@ -1,19 +0,0 @@
1:VERSION 1
2
3BEGIN TRANSACTION
4
5CREATE TABLE [logs] (
6 [logID] [int] NOT NULL,
7 [target] [varchar](36) default NULL,
8 [server] [varchar](64) default NULL,
9 [method] [varchar](64) default NULL,
10 [arguments] [varchar](255) default NULL,
11 [priority] [int] default NULL,
12 [message] [ntext],
13 PRIMARY KEY CLUSTERED
14(
15 [logID] ASC
16)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
17) ON [PRIMARY]
18
19COMMIT
diff --git a/OpenSim/Data/MSSQL/Resources/Presence.migrations b/OpenSim/Data/MSSQL/Resources/Presence.migrations
deleted file mode 100644
index f84275d..0000000
--- a/OpenSim/Data/MSSQL/Resources/Presence.migrations
+++ /dev/null
@@ -1,39 +0,0 @@
1:VERSION 1
2
3BEGIN TRANSACTION
4
5CREATE TABLE [Presence] (
6[UserID] varchar(255) NOT NULL,
7[RegionID] uniqueidentifier NOT NULL,
8[SessionID] uniqueidentifier NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000',
9[SecureSessionID] uniqueidentifier NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000',
10
11)
12 ON [PRIMARY]
13
14COMMIT
15
16:VERSION 2
17
18BEGIN TRANSACTION
19
20CREATE UNIQUE INDEX SessionID ON Presence(SessionID);
21CREATE INDEX UserID ON Presence(UserID);
22
23COMMIT
24
25:VERSION 2
26
27BEGIN TRANSACTION
28
29ALTER TABLE Presence ADD LastSeen DateTime;
30
31COMMIT
32
33:VERSION 3
34
35BEGIN TRANSACTION
36
37CREATE INDEX RegionID ON Presence(RegionID);
38
39COMMIT
diff --git a/OpenSim/Data/MSSQL/Resources/RegionStore.migrations b/OpenSim/Data/MSSQL/Resources/RegionStore.migrations
deleted file mode 100644
index 46b1988..0000000
--- a/OpenSim/Data/MSSQL/Resources/RegionStore.migrations
+++ /dev/null
@@ -1,1182 +0,0 @@
1:VERSION 1
2
3CREATE TABLE [dbo].[prims](
4 [UUID] [varchar](255) NOT NULL,
5 [RegionUUID] [varchar](255) NULL,
6 [ParentID] [int] NULL,
7 [CreationDate] [int] NULL,
8 [Name] [varchar](255) NULL,
9 [SceneGroupID] [varchar](255) NULL,
10 [Text] [varchar](255) NULL,
11 [Description] [varchar](255) NULL,
12 [SitName] [varchar](255) NULL,
13 [TouchName] [varchar](255) NULL,
14 [ObjectFlags] [int] NULL,
15 [CreatorID] [varchar](255) NULL,
16 [OwnerID] [varchar](255) NULL,
17 [GroupID] [varchar](255) NULL,
18 [LastOwnerID] [varchar](255) NULL,
19 [OwnerMask] [int] NULL,
20 [NextOwnerMask] [int] NULL,
21 [GroupMask] [int] NULL,
22 [EveryoneMask] [int] NULL,
23 [BaseMask] [int] NULL,
24 [PositionX] [float] NULL,
25 [PositionY] [float] NULL,
26 [PositionZ] [float] NULL,
27 [GroupPositionX] [float] NULL,
28 [GroupPositionY] [float] NULL,
29 [GroupPositionZ] [float] NULL,
30 [VelocityX] [float] NULL,
31 [VelocityY] [float] NULL,
32 [VelocityZ] [float] NULL,
33 [AngularVelocityX] [float] NULL,
34 [AngularVelocityY] [float] NULL,
35 [AngularVelocityZ] [float] NULL,
36 [AccelerationX] [float] NULL,
37 [AccelerationY] [float] NULL,
38 [AccelerationZ] [float] NULL,
39 [RotationX] [float] NULL,
40 [RotationY] [float] NULL,
41 [RotationZ] [float] NULL,
42 [RotationW] [float] NULL,
43 [SitTargetOffsetX] [float] NULL,
44 [SitTargetOffsetY] [float] NULL,
45 [SitTargetOffsetZ] [float] NULL,
46 [SitTargetOrientW] [float] NULL,
47 [SitTargetOrientX] [float] NULL,
48 [SitTargetOrientY] [float] NULL,
49 [SitTargetOrientZ] [float] NULL,
50PRIMARY KEY CLUSTERED
51(
52 [UUID] ASC
53)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
54) ON [PRIMARY]
55
56CREATE TABLE [dbo].[primshapes](
57 [UUID] [varchar](255) NOT NULL,
58 [Shape] [int] NULL,
59 [ScaleX] [float] NULL,
60 [ScaleY] [float] NULL,
61 [ScaleZ] [float] NULL,
62 [PCode] [int] NULL,
63 [PathBegin] [int] NULL,
64 [PathEnd] [int] NULL,
65 [PathScaleX] [int] NULL,
66 [PathScaleY] [int] NULL,
67 [PathShearX] [int] NULL,
68 [PathShearY] [int] NULL,
69 [PathSkew] [int] NULL,
70 [PathCurve] [int] NULL,
71 [PathRadiusOffset] [int] NULL,
72 [PathRevolutions] [int] NULL,
73 [PathTaperX] [int] NULL,
74 [PathTaperY] [int] NULL,
75 [PathTwist] [int] NULL,
76 [PathTwistBegin] [int] NULL,
77 [ProfileBegin] [int] NULL,
78 [ProfileEnd] [int] NULL,
79 [ProfileCurve] [int] NULL,
80 [ProfileHollow] [int] NULL,
81 [State] [int] NULL,
82 [Texture] [image] NULL,
83 [ExtraParams] [image] NULL,
84PRIMARY KEY CLUSTERED
85(
86 [UUID] ASC
87)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
88) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
89
90CREATE TABLE [dbo].[primitems](
91 [itemID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
92 [primID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
93 [assetID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
94 [parentFolderID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
95 [invType] [int] NULL,
96 [assetType] [int] NULL,
97 [name] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
98 [description] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
99 [creationDate] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
100 [creatorID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
101 [ownerID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
102 [lastOwnerID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
103 [groupID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
104 [nextPermissions] [int] NULL,
105 [currentPermissions] [int] NULL,
106 [basePermissions] [int] NULL,
107 [everyonePermissions] [int] NULL,
108 [groupPermissions] [int] NULL,
109PRIMARY KEY CLUSTERED
110(
111 [itemID] ASC
112)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
113) ON [PRIMARY]
114
115CREATE TABLE [dbo].[terrain](
116 [RegionUUID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
117 [Revision] [int] NULL,
118 [Heightfield] [image] NULL
119) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
120
121CREATE TABLE [dbo].[land](
122 [UUID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
123 [RegionUUID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
124 [LocalLandID] [int] NULL,
125 [Bitmap] [image] NULL,
126 [Name] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
127 [Description] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
128 [OwnerUUID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
129 [IsGroupOwned] [int] NULL,
130 [Area] [int] NULL,
131 [AuctionID] [int] NULL,
132 [Category] [int] NULL,
133 [ClaimDate] [int] NULL,
134 [ClaimPrice] [int] NULL,
135 [GroupUUID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
136 [SalePrice] [int] NULL,
137 [LandStatus] [int] NULL,
138 [LandFlags] [int] NULL,
139 [LandingType] [int] NULL,
140 [MediaAutoScale] [int] NULL,
141 [MediaTextureUUID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
142 [MediaURL] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
143 [MusicURL] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
144 [PassHours] [float] NULL,
145 [PassPrice] [int] NULL,
146 [SnapshotUUID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
147 [UserLocationX] [float] NULL,
148 [UserLocationY] [float] NULL,
149 [UserLocationZ] [float] NULL,
150 [UserLookAtX] [float] NULL,
151 [UserLookAtY] [float] NULL,
152 [UserLookAtZ] [float] NULL,
153PRIMARY KEY CLUSTERED
154(
155 [UUID] ASC
156)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
157) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
158
159CREATE TABLE [dbo].[landaccesslist](
160 [LandUUID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
161 [AccessUUID] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
162 [Flags] [int] NULL
163) ON [PRIMARY]
164
165:VERSION 2
166
167BEGIN TRANSACTION
168
169CREATE TABLE regionban (
170 [regionUUID] VARCHAR(36) NOT NULL,
171 [bannedUUID] VARCHAR(36) NOT NULL,
172 [bannedIp] VARCHAR(16) NOT NULL,
173 [bannedIpHostMask] VARCHAR(16) NOT NULL)
174
175create table [dbo].[regionsettings] (
176 [regionUUID] [varchar](36) not null,
177 [block_terraform] [bit] not null,
178 [block_fly] [bit] not null,
179 [allow_damage] [bit] not null,
180 [restrict_pushing] [bit] not null,
181 [allow_land_resell] [bit] not null,
182 [allow_land_join_divide] [bit] not null,
183 [block_show_in_search] [bit] not null,
184 [agent_limit] [int] not null,
185 [object_bonus] [float] not null,
186 [maturity] [int] not null,
187 [disable_scripts] [bit] not null,
188 [disable_collisions] [bit] not null,
189 [disable_physics] [bit] not null,
190 [terrain_texture_1] [varchar](36) not null,
191 [terrain_texture_2] [varchar](36) not null,
192 [terrain_texture_3] [varchar](36) not null,
193 [terrain_texture_4] [varchar](36) not null,
194 [elevation_1_nw] [float] not null,
195 [elevation_2_nw] [float] not null,
196 [elevation_1_ne] [float] not null,
197 [elevation_2_ne] [float] not null,
198 [elevation_1_se] [float] not null,
199 [elevation_2_se] [float] not null,
200 [elevation_1_sw] [float] not null,
201 [elevation_2_sw] [float] not null,
202 [water_height] [float] not null,
203 [terrain_raise_limit] [float] not null,
204 [terrain_lower_limit] [float] not null,
205 [use_estate_sun] [bit] not null,
206 [fixed_sun] [bit] not null,
207 [sun_position] [float] not null,
208 [covenant] [varchar](36) default NULL,
209 [Sandbox] [bit] NOT NULL,
210PRIMARY KEY CLUSTERED
211(
212 [regionUUID] ASC
213)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
214) ON [PRIMARY]
215
216COMMIT
217
218:VERSION 3
219
220BEGIN TRANSACTION
221
222CREATE TABLE dbo.Tmp_prims
223 (
224 UUID varchar(36) NOT NULL,
225 RegionUUID varchar(36) NULL,
226 ParentID int NULL,
227 CreationDate int NULL,
228 Name varchar(255) NULL,
229 SceneGroupID varchar(36) NULL,
230 Text varchar(255) NULL,
231 Description varchar(255) NULL,
232 SitName varchar(255) NULL,
233 TouchName varchar(255) NULL,
234 ObjectFlags int NULL,
235 CreatorID varchar(36) NULL,
236 OwnerID varchar(36) NULL,
237 GroupID varchar(36) NULL,
238 LastOwnerID varchar(36) NULL,
239 OwnerMask int NULL,
240 NextOwnerMask int NULL,
241 GroupMask int NULL,
242 EveryoneMask int NULL,
243 BaseMask int NULL,
244 PositionX float(53) NULL,
245 PositionY float(53) NULL,
246 PositionZ float(53) NULL,
247 GroupPositionX float(53) NULL,
248 GroupPositionY float(53) NULL,
249 GroupPositionZ float(53) NULL,
250 VelocityX float(53) NULL,
251 VelocityY float(53) NULL,
252 VelocityZ float(53) NULL,
253 AngularVelocityX float(53) NULL,
254 AngularVelocityY float(53) NULL,
255 AngularVelocityZ float(53) NULL,
256 AccelerationX float(53) NULL,
257 AccelerationY float(53) NULL,
258 AccelerationZ float(53) NULL,
259 RotationX float(53) NULL,
260 RotationY float(53) NULL,
261 RotationZ float(53) NULL,
262 RotationW float(53) NULL,
263 SitTargetOffsetX float(53) NULL,
264 SitTargetOffsetY float(53) NULL,
265 SitTargetOffsetZ float(53) NULL,
266 SitTargetOrientW float(53) NULL,
267 SitTargetOrientX float(53) NULL,
268 SitTargetOrientY float(53) NULL,
269 SitTargetOrientZ float(53) NULL
270 ) ON [PRIMARY]
271
272IF EXISTS(SELECT * FROM dbo.prims)
273 EXEC('INSERT INTO dbo.Tmp_prims (UUID, RegionUUID, ParentID, CreationDate, Name, SceneGroupID, Text, Description, SitName, TouchName, ObjectFlags, CreatorID, OwnerID, GroupID, LastOwnerID, OwnerMask, NextOwnerMask, GroupMask, EveryoneMask, BaseMask, PositionX, PositionY, PositionZ, GroupPositionX, GroupPositionY, GroupPositionZ, VelocityX, VelocityY, VelocityZ, AngularVelocityX, AngularVelocityY, AngularVelocityZ, AccelerationX, AccelerationY, AccelerationZ, RotationX, RotationY, RotationZ, RotationW, SitTargetOffsetX, SitTargetOffsetY, SitTargetOffsetZ, SitTargetOrientW, SitTargetOrientX, SitTargetOrientY, SitTargetOrientZ)
274 SELECT CONVERT(varchar(36), UUID), CONVERT(varchar(36), RegionUUID), ParentID, CreationDate, Name, CONVERT(varchar(36), SceneGroupID), Text, Description, SitName, TouchName, ObjectFlags, CONVERT(varchar(36), CreatorID), CONVERT(varchar(36), OwnerID), CONVERT(varchar(36), GroupID), CONVERT(varchar(36), LastOwnerID), OwnerMask, NextOwnerMask, GroupMask, EveryoneMask, BaseMask, PositionX, PositionY, PositionZ, GroupPositionX, GroupPositionY, GroupPositionZ, VelocityX, VelocityY, VelocityZ, AngularVelocityX, AngularVelocityY, AngularVelocityZ, AccelerationX, AccelerationY, AccelerationZ, RotationX, RotationY, RotationZ, RotationW, SitTargetOffsetX, SitTargetOffsetY, SitTargetOffsetZ, SitTargetOrientW, SitTargetOrientX, SitTargetOrientY, SitTargetOrientZ FROM dbo.prims WITH (HOLDLOCK TABLOCKX)')
275
276DROP TABLE dbo.prims
277
278EXECUTE sp_rename N'dbo.Tmp_prims', N'prims', 'OBJECT'
279
280ALTER TABLE dbo.prims ADD CONSTRAINT
281 PK__prims__10566F31 PRIMARY KEY CLUSTERED
282 (
283 UUID
284 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
285
286COMMIT
287
288:VERSION 4
289
290BEGIN TRANSACTION
291
292CREATE TABLE Tmp_primitems
293 (
294 itemID varchar(36) NOT NULL,
295 primID varchar(36) NULL,
296 assetID varchar(36) NULL,
297 parentFolderID varchar(36) NULL,
298 invType int NULL,
299 assetType int NULL,
300 name varchar(255) NULL,
301 description varchar(255) NULL,
302 creationDate varchar(255) NULL,
303 creatorID varchar(36) NULL,
304 ownerID varchar(36) NULL,
305 lastOwnerID varchar(36) NULL,
306 groupID varchar(36) NULL,
307 nextPermissions int NULL,
308 currentPermissions int NULL,
309 basePermissions int NULL,
310 everyonePermissions int NULL,
311 groupPermissions int NULL
312 ) ON [PRIMARY]
313
314IF EXISTS(SELECT * FROM primitems)
315 EXEC('INSERT INTO Tmp_primitems (itemID, primID, assetID, parentFolderID, invType, assetType, name, description, creationDate, creatorID, ownerID, lastOwnerID, groupID, nextPermissions, currentPermissions, basePermissions, everyonePermissions, groupPermissions)
316 SELECT CONVERT(varchar(36), itemID), CONVERT(varchar(36), primID), CONVERT(varchar(36), assetID), CONVERT(varchar(36), parentFolderID), invType, assetType, name, description, creationDate, CONVERT(varchar(36), creatorID), CONVERT(varchar(36), ownerID), CONVERT(varchar(36), lastOwnerID), CONVERT(varchar(36), groupID), nextPermissions, currentPermissions, basePermissions, everyonePermissions, groupPermissions')
317
318DROP TABLE primitems
319
320EXECUTE sp_rename N'Tmp_primitems', N'primitems', 'OBJECT'
321
322ALTER TABLE primitems ADD CONSTRAINT
323 PK__primitems__0A688BB1 PRIMARY KEY CLUSTERED
324 (
325 itemID
326 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
327
328
329COMMIT
330
331
332:VERSION 5
333
334BEGIN TRANSACTION
335
336CREATE TABLE Tmp_primshapes
337 (
338 UUID varchar(36) NOT NULL,
339 Shape int NULL,
340 ScaleX float(53) NULL,
341 ScaleY float(53) NULL,
342 ScaleZ float(53) NULL,
343 PCode int NULL,
344 PathBegin int NULL,
345 PathEnd int NULL,
346 PathScaleX int NULL,
347 PathScaleY int NULL,
348 PathShearX int NULL,
349 PathShearY int NULL,
350 PathSkew int NULL,
351 PathCurve int NULL,
352 PathRadiusOffset int NULL,
353 PathRevolutions int NULL,
354 PathTaperX int NULL,
355 PathTaperY int NULL,
356 PathTwist int NULL,
357 PathTwistBegin int NULL,
358 ProfileBegin int NULL,
359 ProfileEnd int NULL,
360 ProfileCurve int NULL,
361 ProfileHollow int NULL,
362 State int NULL,
363 Texture image NULL,
364 ExtraParams image NULL
365 ) ON [PRIMARY]
366 TEXTIMAGE_ON [PRIMARY]
367
368IF EXISTS(SELECT * FROM primshapes)
369 EXEC('INSERT INTO Tmp_primshapes (UUID, Shape, ScaleX, ScaleY, ScaleZ, PCode, PathBegin, PathEnd, PathScaleX, PathScaleY, PathShearX, PathShearY, PathSkew, PathCurve, PathRadiusOffset, PathRevolutions, PathTaperX, PathTaperY, PathTwist, PathTwistBegin, ProfileBegin, ProfileEnd, ProfileCurve, ProfileHollow, State, Texture, ExtraParams)
370 SELECT CONVERT(varchar(36), UUID), Shape, ScaleX, ScaleY, ScaleZ, PCode, PathBegin, PathEnd, PathScaleX, PathScaleY, PathShearX, PathShearY, PathSkew, PathCurve, PathRadiusOffset, PathRevolutions, PathTaperX, PathTaperY, PathTwist, PathTwistBegin, ProfileBegin, ProfileEnd, ProfileCurve, ProfileHollow, State, Texture, ExtraParams FROM primshapes WITH (HOLDLOCK TABLOCKX)')
371
372DROP TABLE primshapes
373
374EXECUTE sp_rename N'Tmp_primshapes', N'primshapes', 'OBJECT'
375
376ALTER TABLE primshapes ADD CONSTRAINT
377 PK__primshapes__0880433F PRIMARY KEY CLUSTERED
378 (
379 UUID
380 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
381
382COMMIT
383
384
385:VERSION 6
386
387BEGIN TRANSACTION
388
389ALTER TABLE prims ADD PayPrice int not null default 0
390ALTER TABLE prims ADD PayButton1 int not null default 0
391ALTER TABLE prims ADD PayButton2 int not null default 0
392ALTER TABLE prims ADD PayButton3 int not null default 0
393ALTER TABLE prims ADD PayButton4 int not null default 0
394ALTER TABLE prims ADD LoopedSound varchar(36) not null default '00000000-0000-0000-0000-000000000000';
395ALTER TABLE prims ADD LoopedSoundGain float not null default 0.0;
396ALTER TABLE prims ADD TextureAnimation image
397ALTER TABLE prims ADD OmegaX float not null default 0.0
398ALTER TABLE prims ADD OmegaY float not null default 0.0
399ALTER TABLE prims ADD OmegaZ float not null default 0.0
400ALTER TABLE prims ADD CameraEyeOffsetX float not null default 0.0
401ALTER TABLE prims ADD CameraEyeOffsetY float not null default 0.0
402ALTER TABLE prims ADD CameraEyeOffsetZ float not null default 0.0
403ALTER TABLE prims ADD CameraAtOffsetX float not null default 0.0
404ALTER TABLE prims ADD CameraAtOffsetY float not null default 0.0
405ALTER TABLE prims ADD CameraAtOffsetZ float not null default 0.0
406ALTER TABLE prims ADD ForceMouselook tinyint not null default 0
407ALTER TABLE prims ADD ScriptAccessPin int not null default 0
408ALTER TABLE prims ADD AllowedDrop tinyint not null default 0
409ALTER TABLE prims ADD DieAtEdge tinyint not null default 0
410ALTER TABLE prims ADD SalePrice int not null default 10
411ALTER TABLE prims ADD SaleType tinyint not null default 0
412
413ALTER TABLE primitems add flags integer not null default 0
414
415ALTER TABLE land ADD AuthbuyerID varchar(36) NOT NULL default '00000000-0000-0000-0000-000000000000'
416
417CREATE index prims_regionuuid on prims(RegionUUID)
418CREATE index prims_parentid on prims(ParentID)
419
420CREATE index primitems_primid on primitems(primID)
421
422COMMIT
423
424
425:VERSION 7
426
427BEGIN TRANSACTION
428
429ALTER TABLE prims ADD ColorR int not null default 0;
430ALTER TABLE prims ADD ColorG int not null default 0;
431ALTER TABLE prims ADD ColorB int not null default 0;
432ALTER TABLE prims ADD ColorA int not null default 0;
433ALTER TABLE prims ADD ParticleSystem IMAGE;
434ALTER TABLE prims ADD ClickAction tinyint NOT NULL default 0;
435
436COMMIT
437
438
439:VERSION 8
440
441BEGIN TRANSACTION
442
443ALTER TABLE land ADD OtherCleanTime integer NOT NULL default 0;
444ALTER TABLE land ADD Dwell integer NOT NULL default 0;
445
446COMMIT
447
448:VERSION 9
449
450BEGIN TRANSACTION
451
452ALTER TABLE prims ADD Material tinyint NOT NULL default 3
453
454COMMIT
455
456
457:VERSION 10
458
459BEGIN TRANSACTION
460
461ALTER TABLE regionsettings ADD sunvectorx float NOT NULL default 0;
462ALTER TABLE regionsettings ADD sunvectory float NOT NULL default 0;
463ALTER TABLE regionsettings ADD sunvectorz float NOT NULL default 0;
464
465COMMIT
466
467
468:VERSION 11
469
470BEGIN TRANSACTION
471
472ALTER TABLE prims ADD CollisionSound char(36) not null default '00000000-0000-0000-0000-000000000000'
473ALTER TABLE prims ADD CollisionSoundVolume float not null default 0.0
474
475COMMIT
476
477
478:VERSION 12
479
480BEGIN TRANSACTION
481
482ALTER TABLE prims ADD LinkNumber integer not null default 0
483
484COMMIT
485
486
487:VERSION 13
488
489BEGIN TRANSACTION
490
491CREATE TABLE dbo.Tmp_prims
492 (
493 UUID uniqueidentifier NOT NULL,
494 RegionUUID uniqueidentifier NULL,
495 ParentID int NULL,
496 CreationDate int NULL,
497 Name varchar(255) NULL,
498 SceneGroupID uniqueidentifier NULL,
499 Text varchar(255) NULL,
500 Description varchar(255) NULL,
501 SitName varchar(255) NULL,
502 TouchName varchar(255) NULL,
503 ObjectFlags int NULL,
504 CreatorID uniqueidentifier NULL,
505 OwnerID uniqueidentifier NULL,
506 GroupID uniqueidentifier NULL,
507 LastOwnerID uniqueidentifier NULL,
508 OwnerMask int NULL,
509 NextOwnerMask int NULL,
510 GroupMask int NULL,
511 EveryoneMask int NULL,
512 BaseMask int NULL,
513 PositionX float(53) NULL,
514 PositionY float(53) NULL,
515 PositionZ float(53) NULL,
516 GroupPositionX float(53) NULL,
517 GroupPositionY float(53) NULL,
518 GroupPositionZ float(53) NULL,
519 VelocityX float(53) NULL,
520 VelocityY float(53) NULL,
521 VelocityZ float(53) NULL,
522 AngularVelocityX float(53) NULL,
523 AngularVelocityY float(53) NULL,
524 AngularVelocityZ float(53) NULL,
525 AccelerationX float(53) NULL,
526 AccelerationY float(53) NULL,
527 AccelerationZ float(53) NULL,
528 RotationX float(53) NULL,
529 RotationY float(53) NULL,
530 RotationZ float(53) NULL,
531 RotationW float(53) NULL,
532 SitTargetOffsetX float(53) NULL,
533 SitTargetOffsetY float(53) NULL,
534 SitTargetOffsetZ float(53) NULL,
535 SitTargetOrientW float(53) NULL,
536 SitTargetOrientX float(53) NULL,
537 SitTargetOrientY float(53) NULL,
538 SitTargetOrientZ float(53) NULL,
539 PayPrice int NOT NULL DEFAULT ((0)),
540 PayButton1 int NOT NULL DEFAULT ((0)),
541 PayButton2 int NOT NULL DEFAULT ((0)),
542 PayButton3 int NOT NULL DEFAULT ((0)),
543 PayButton4 int NOT NULL DEFAULT ((0)),
544 LoopedSound uniqueidentifier NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000'),
545 LoopedSoundGain float(53) NOT NULL DEFAULT ((0.0)),
546 TextureAnimation image NULL,
547 OmegaX float(53) NOT NULL DEFAULT ((0.0)),
548 OmegaY float(53) NOT NULL DEFAULT ((0.0)),
549 OmegaZ float(53) NOT NULL DEFAULT ((0.0)),
550 CameraEyeOffsetX float(53) NOT NULL DEFAULT ((0.0)),
551 CameraEyeOffsetY float(53) NOT NULL DEFAULT ((0.0)),
552 CameraEyeOffsetZ float(53) NOT NULL DEFAULT ((0.0)),
553 CameraAtOffsetX float(53) NOT NULL DEFAULT ((0.0)),
554 CameraAtOffsetY float(53) NOT NULL DEFAULT ((0.0)),
555 CameraAtOffsetZ float(53) NOT NULL DEFAULT ((0.0)),
556 ForceMouselook tinyint NOT NULL DEFAULT ((0)),
557 ScriptAccessPin int NOT NULL DEFAULT ((0)),
558 AllowedDrop tinyint NOT NULL DEFAULT ((0)),
559 DieAtEdge tinyint NOT NULL DEFAULT ((0)),
560 SalePrice int NOT NULL DEFAULT ((10)),
561 SaleType tinyint NOT NULL DEFAULT ((0)),
562 ColorR int NOT NULL DEFAULT ((0)),
563 ColorG int NOT NULL DEFAULT ((0)),
564 ColorB int NOT NULL DEFAULT ((0)),
565 ColorA int NOT NULL DEFAULT ((0)),
566 ParticleSystem image NULL,
567 ClickAction tinyint NOT NULL DEFAULT ((0)),
568 Material tinyint NOT NULL DEFAULT ((3)),
569 CollisionSound uniqueidentifier NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000'),
570 CollisionSoundVolume float(53) NOT NULL DEFAULT ((0.0)),
571 LinkNumber int NOT NULL DEFAULT ((0))
572 ) ON [PRIMARY]
573 TEXTIMAGE_ON [PRIMARY]
574
575IF EXISTS(SELECT * FROM dbo.prims)
576 EXEC('INSERT INTO dbo.Tmp_prims (UUID, RegionUUID, ParentID, CreationDate, Name, SceneGroupID, Text, Description, SitName, TouchName, ObjectFlags, CreatorID, OwnerID, GroupID, LastOwnerID, OwnerMask, NextOwnerMask, GroupMask, EveryoneMask, BaseMask, PositionX, PositionY, PositionZ, GroupPositionX, GroupPositionY, GroupPositionZ, VelocityX, VelocityY, VelocityZ, AngularVelocityX, AngularVelocityY, AngularVelocityZ, AccelerationX, AccelerationY, AccelerationZ, RotationX, RotationY, RotationZ, RotationW, SitTargetOffsetX, SitTargetOffsetY, SitTargetOffsetZ, SitTargetOrientW, SitTargetOrientX, SitTargetOrientY, SitTargetOrientZ, PayPrice, PayButton1, PayButton2, PayButton3, PayButton4, LoopedSound, LoopedSoundGain, TextureAnimation, OmegaX, OmegaY, OmegaZ, CameraEyeOffsetX, CameraEyeOffsetY, CameraEyeOffsetZ, CameraAtOffsetX, CameraAtOffsetY, CameraAtOffsetZ, ForceMouselook, ScriptAccessPin, AllowedDrop, DieAtEdge, SalePrice, SaleType, ColorR, ColorG, ColorB, ColorA, ParticleSystem, ClickAction, Material, CollisionSound, CollisionSoundVolume, LinkNumber)
577 SELECT CONVERT(uniqueidentifier, UUID), CONVERT(uniqueidentifier, RegionUUID), ParentID, CreationDate, Name, CONVERT(uniqueidentifier, SceneGroupID), Text, Description, SitName, TouchName, ObjectFlags, CONVERT(uniqueidentifier, CreatorID), CONVERT(uniqueidentifier, OwnerID), CONVERT(uniqueidentifier, GroupID), CONVERT(uniqueidentifier, LastOwnerID), OwnerMask, NextOwnerMask, GroupMask, EveryoneMask, BaseMask, PositionX, PositionY, PositionZ, GroupPositionX, GroupPositionY, GroupPositionZ, VelocityX, VelocityY, VelocityZ, AngularVelocityX, AngularVelocityY, AngularVelocityZ, AccelerationX, AccelerationY, AccelerationZ, RotationX, RotationY, RotationZ, RotationW, SitTargetOffsetX, SitTargetOffsetY, SitTargetOffsetZ, SitTargetOrientW, SitTargetOrientX, SitTargetOrientY, SitTargetOrientZ, PayPrice, PayButton1, PayButton2, PayButton3, PayButton4, CONVERT(uniqueidentifier, LoopedSound), LoopedSoundGain, TextureAnimation, OmegaX, OmegaY, OmegaZ, CameraEyeOffsetX, CameraEyeOffsetY, CameraEyeOffsetZ, CameraAtOffsetX, CameraAtOffsetY, CameraAtOffsetZ, ForceMouselook, ScriptAccessPin, AllowedDrop, DieAtEdge, SalePrice, SaleType, ColorR, ColorG, ColorB, ColorA, ParticleSystem, ClickAction, Material, CONVERT(uniqueidentifier, CollisionSound), CollisionSoundVolume, LinkNumber FROM dbo.prims WITH (HOLDLOCK TABLOCKX)')
578
579DROP TABLE dbo.prims
580
581EXECUTE sp_rename N'dbo.Tmp_prims', N'prims', 'OBJECT'
582
583ALTER TABLE dbo.prims ADD CONSTRAINT
584 PK__prims__10566F31 PRIMARY KEY CLUSTERED
585 (
586 UUID
587 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
588
589
590CREATE NONCLUSTERED INDEX prims_regionuuid ON dbo.prims
591 (
592 RegionUUID
593 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
594
595CREATE NONCLUSTERED INDEX prims_parentid ON dbo.prims
596 (
597 ParentID
598 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
599
600COMMIT
601
602
603:VERSION 14
604
605BEGIN TRANSACTION
606
607CREATE TABLE dbo.Tmp_primshapes
608 (
609 UUID uniqueidentifier NOT NULL,
610 Shape int NULL,
611 ScaleX float(53) NULL,
612 ScaleY float(53) NULL,
613 ScaleZ float(53) NULL,
614 PCode int NULL,
615 PathBegin int NULL,
616 PathEnd int NULL,
617 PathScaleX int NULL,
618 PathScaleY int NULL,
619 PathShearX int NULL,
620 PathShearY int NULL,
621 PathSkew int NULL,
622 PathCurve int NULL,
623 PathRadiusOffset int NULL,
624 PathRevolutions int NULL,
625 PathTaperX int NULL,
626 PathTaperY int NULL,
627 PathTwist int NULL,
628 PathTwistBegin int NULL,
629 ProfileBegin int NULL,
630 ProfileEnd int NULL,
631 ProfileCurve int NULL,
632 ProfileHollow int NULL,
633 State int NULL,
634 Texture image NULL,
635 ExtraParams image NULL
636 ) ON [PRIMARY]
637 TEXTIMAGE_ON [PRIMARY]
638
639IF EXISTS(SELECT * FROM dbo.primshapes)
640 EXEC('INSERT INTO dbo.Tmp_primshapes (UUID, Shape, ScaleX, ScaleY, ScaleZ, PCode, PathBegin, PathEnd, PathScaleX, PathScaleY, PathShearX, PathShearY, PathSkew, PathCurve, PathRadiusOffset, PathRevolutions, PathTaperX, PathTaperY, PathTwist, PathTwistBegin, ProfileBegin, ProfileEnd, ProfileCurve, ProfileHollow, State, Texture, ExtraParams)
641 SELECT CONVERT(uniqueidentifier, UUID), Shape, ScaleX, ScaleY, ScaleZ, PCode, PathBegin, PathEnd, PathScaleX, PathScaleY, PathShearX, PathShearY, PathSkew, PathCurve, PathRadiusOffset, PathRevolutions, PathTaperX, PathTaperY, PathTwist, PathTwistBegin, ProfileBegin, ProfileEnd, ProfileCurve, ProfileHollow, State, Texture, ExtraParams FROM dbo.primshapes WITH (HOLDLOCK TABLOCKX)')
642
643DROP TABLE dbo.primshapes
644
645EXECUTE sp_rename N'dbo.Tmp_primshapes', N'primshapes', 'OBJECT'
646
647ALTER TABLE dbo.primshapes ADD CONSTRAINT
648 PK__primshapes__0880433F PRIMARY KEY CLUSTERED
649 (
650 UUID
651 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
652
653COMMIT
654
655
656:VERSION 15
657
658BEGIN TRANSACTION
659
660CREATE TABLE dbo.Tmp_primitems
661 (
662 itemID uniqueidentifier NOT NULL,
663 primID uniqueidentifier NULL,
664 assetID uniqueidentifier NULL,
665 parentFolderID uniqueidentifier NULL,
666 invType int NULL,
667 assetType int NULL,
668 name varchar(255) NULL,
669 description varchar(255) NULL,
670 creationDate varchar(255) NULL,
671 creatorID uniqueidentifier NULL,
672 ownerID uniqueidentifier NULL,
673 lastOwnerID uniqueidentifier NULL,
674 groupID uniqueidentifier NULL,
675 nextPermissions int NULL,
676 currentPermissions int NULL,
677 basePermissions int NULL,
678 everyonePermissions int NULL,
679 groupPermissions int NULL,
680 flags int NOT NULL DEFAULT ((0))
681 ) ON [PRIMARY]
682
683IF EXISTS(SELECT * FROM dbo.primitems)
684 EXEC('INSERT INTO dbo.Tmp_primitems (itemID, primID, assetID, parentFolderID, invType, assetType, name, description, creationDate, creatorID, ownerID, lastOwnerID, groupID, nextPermissions, currentPermissions, basePermissions, everyonePermissions, groupPermissions, flags)
685 SELECT CONVERT(uniqueidentifier, itemID), CONVERT(uniqueidentifier, primID), CONVERT(uniqueidentifier, assetID), CONVERT(uniqueidentifier, parentFolderID), invType, assetType, name, description, creationDate, CONVERT(uniqueidentifier, creatorID), CONVERT(uniqueidentifier, ownerID), CONVERT(uniqueidentifier, lastOwnerID), CONVERT(uniqueidentifier, groupID), nextPermissions, currentPermissions, basePermissions, everyonePermissions, groupPermissions, flags FROM dbo.primitems WITH (HOLDLOCK TABLOCKX)')
686
687DROP TABLE dbo.primitems
688
689EXECUTE sp_rename N'dbo.Tmp_primitems', N'primitems', 'OBJECT'
690
691ALTER TABLE dbo.primitems ADD CONSTRAINT
692 PK__primitems__0A688BB1 PRIMARY KEY CLUSTERED
693 (
694 itemID
695 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
696
697CREATE NONCLUSTERED INDEX primitems_primid ON dbo.primitems
698 (
699 primID
700 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
701
702COMMIT
703
704
705:VERSION 16
706
707
708BEGIN TRANSACTION
709
710CREATE TABLE dbo.Tmp_terrain
711 (
712 RegionUUID uniqueidentifier NULL,
713 Revision int NULL,
714 Heightfield image NULL
715 ) ON [PRIMARY]
716 TEXTIMAGE_ON [PRIMARY]
717
718IF EXISTS(SELECT * FROM dbo.terrain)
719 EXEC('INSERT INTO dbo.Tmp_terrain (RegionUUID, Revision, Heightfield)
720 SELECT CONVERT(uniqueidentifier, RegionUUID), Revision, Heightfield FROM dbo.terrain WITH (HOLDLOCK TABLOCKX)')
721
722DROP TABLE dbo.terrain
723
724EXECUTE sp_rename N'dbo.Tmp_terrain', N'terrain', 'OBJECT'
725
726COMMIT
727
728
729:VERSION 17
730
731BEGIN TRANSACTION
732
733CREATE TABLE dbo.Tmp_land
734 (
735 UUID uniqueidentifier NOT NULL,
736 RegionUUID uniqueidentifier NULL,
737 LocalLandID int NULL,
738 Bitmap image NULL,
739 Name varchar(255) NULL,
740 Description varchar(255) NULL,
741 OwnerUUID uniqueidentifier NULL,
742 IsGroupOwned int NULL,
743 Area int NULL,
744 AuctionID int NULL,
745 Category int NULL,
746 ClaimDate int NULL,
747 ClaimPrice int NULL,
748 GroupUUID uniqueidentifier NULL,
749 SalePrice int NULL,
750 LandStatus int NULL,
751 LandFlags int NULL,
752 LandingType int NULL,
753 MediaAutoScale int NULL,
754 MediaTextureUUID uniqueidentifier NULL,
755 MediaURL varchar(255) NULL,
756 MusicURL varchar(255) NULL,
757 PassHours float(53) NULL,
758 PassPrice int NULL,
759 SnapshotUUID uniqueidentifier NULL,
760 UserLocationX float(53) NULL,
761 UserLocationY float(53) NULL,
762 UserLocationZ float(53) NULL,
763 UserLookAtX float(53) NULL,
764 UserLookAtY float(53) NULL,
765 UserLookAtZ float(53) NULL,
766 AuthbuyerID uniqueidentifier NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000'),
767 OtherCleanTime int NOT NULL DEFAULT ((0)),
768 Dwell int NOT NULL DEFAULT ((0))
769 ) ON [PRIMARY]
770 TEXTIMAGE_ON [PRIMARY]
771
772IF EXISTS(SELECT * FROM dbo.land)
773 EXEC('INSERT INTO dbo.Tmp_land (UUID, RegionUUID, LocalLandID, Bitmap, Name, Description, OwnerUUID, IsGroupOwned, Area, AuctionID, Category, ClaimDate, ClaimPrice, GroupUUID, SalePrice, LandStatus, LandFlags, LandingType, MediaAutoScale, MediaTextureUUID, MediaURL, MusicURL, PassHours, PassPrice, SnapshotUUID, UserLocationX, UserLocationY, UserLocationZ, UserLookAtX, UserLookAtY, UserLookAtZ, AuthbuyerID, OtherCleanTime, Dwell)
774 SELECT CONVERT(uniqueidentifier, UUID), CONVERT(uniqueidentifier, RegionUUID), LocalLandID, Bitmap, Name, Description, CONVERT(uniqueidentifier, OwnerUUID), IsGroupOwned, Area, AuctionID, Category, ClaimDate, ClaimPrice, CONVERT(uniqueidentifier, GroupUUID), SalePrice, LandStatus, LandFlags, LandingType, MediaAutoScale, CONVERT(uniqueidentifier, MediaTextureUUID), MediaURL, MusicURL, PassHours, PassPrice, CONVERT(uniqueidentifier, SnapshotUUID), UserLocationX, UserLocationY, UserLocationZ, UserLookAtX, UserLookAtY, UserLookAtZ, CONVERT(uniqueidentifier, AuthbuyerID), OtherCleanTime, Dwell FROM dbo.land WITH (HOLDLOCK TABLOCKX)')
775
776DROP TABLE dbo.land
777
778EXECUTE sp_rename N'dbo.Tmp_land', N'land', 'OBJECT'
779
780ALTER TABLE dbo.land ADD CONSTRAINT
781 PK__land__65A475E71BFD2C07 PRIMARY KEY CLUSTERED
782 (
783 UUID
784 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
785
786COMMIT
787
788
789
790:VERSION 18
791
792BEGIN TRANSACTION
793
794CREATE TABLE dbo.Tmp_landaccesslist
795 (
796 LandUUID uniqueidentifier NULL,
797 AccessUUID uniqueidentifier NULL,
798 Flags int NULL
799 ) ON [PRIMARY]
800
801IF EXISTS(SELECT * FROM dbo.landaccesslist)
802 EXEC('INSERT INTO dbo.Tmp_landaccesslist (LandUUID, AccessUUID, Flags)
803 SELECT CONVERT(uniqueidentifier, LandUUID), CONVERT(uniqueidentifier, AccessUUID), Flags FROM dbo.landaccesslist WITH (HOLDLOCK TABLOCKX)')
804
805DROP TABLE dbo.landaccesslist
806
807EXECUTE sp_rename N'dbo.Tmp_landaccesslist', N'landaccesslist', 'OBJECT'
808
809COMMIT
810
811
812
813:VERSION 19
814
815BEGIN TRANSACTION
816
817CREATE TABLE dbo.Tmp_regionban
818 (
819 regionUUID uniqueidentifier NOT NULL,
820 bannedUUID uniqueidentifier NOT NULL,
821 bannedIp varchar(16) NOT NULL,
822 bannedIpHostMask varchar(16) NOT NULL
823 ) ON [PRIMARY]
824
825IF EXISTS(SELECT * FROM dbo.regionban)
826 EXEC('INSERT INTO dbo.Tmp_regionban (regionUUID, bannedUUID, bannedIp, bannedIpHostMask)
827 SELECT CONVERT(uniqueidentifier, regionUUID), CONVERT(uniqueidentifier, bannedUUID), bannedIp, bannedIpHostMask FROM dbo.regionban WITH (HOLDLOCK TABLOCKX)')
828
829DROP TABLE dbo.regionban
830
831EXECUTE sp_rename N'dbo.Tmp_regionban', N'regionban', 'OBJECT'
832
833COMMIT
834
835
836:VERSION 20
837
838BEGIN TRANSACTION
839
840CREATE TABLE dbo.Tmp_regionsettings
841 (
842 regionUUID uniqueidentifier NOT NULL,
843 block_terraform bit NOT NULL,
844 block_fly bit NOT NULL,
845 allow_damage bit NOT NULL,
846 restrict_pushing bit NOT NULL,
847 allow_land_resell bit NOT NULL,
848 allow_land_join_divide bit NOT NULL,
849 block_show_in_search bit NOT NULL,
850 agent_limit int NOT NULL,
851 object_bonus float(53) NOT NULL,
852 maturity int NOT NULL,
853 disable_scripts bit NOT NULL,
854 disable_collisions bit NOT NULL,
855 disable_physics bit NOT NULL,
856 terrain_texture_1 uniqueidentifier NOT NULL,
857 terrain_texture_2 uniqueidentifier NOT NULL,
858 terrain_texture_3 uniqueidentifier NOT NULL,
859 terrain_texture_4 uniqueidentifier NOT NULL,
860 elevation_1_nw float(53) NOT NULL,
861 elevation_2_nw float(53) NOT NULL,
862 elevation_1_ne float(53) NOT NULL,
863 elevation_2_ne float(53) NOT NULL,
864 elevation_1_se float(53) NOT NULL,
865 elevation_2_se float(53) NOT NULL,
866 elevation_1_sw float(53) NOT NULL,
867 elevation_2_sw float(53) NOT NULL,
868 water_height float(53) NOT NULL,
869 terrain_raise_limit float(53) NOT NULL,
870 terrain_lower_limit float(53) NOT NULL,
871 use_estate_sun bit NOT NULL,
872 fixed_sun bit NOT NULL,
873 sun_position float(53) NOT NULL,
874 covenant uniqueidentifier NULL DEFAULT (NULL),
875 Sandbox bit NOT NULL,
876 sunvectorx float(53) NOT NULL DEFAULT ((0)),
877 sunvectory float(53) NOT NULL DEFAULT ((0)),
878 sunvectorz float(53) NOT NULL DEFAULT ((0))
879 ) ON [PRIMARY]
880
881IF EXISTS(SELECT * FROM dbo.regionsettings)
882 EXEC('INSERT INTO dbo.Tmp_regionsettings (regionUUID, block_terraform, block_fly, allow_damage, restrict_pushing, allow_land_resell, allow_land_join_divide, block_show_in_search, agent_limit, object_bonus, maturity, disable_scripts, disable_collisions, disable_physics, terrain_texture_1, terrain_texture_2, terrain_texture_3, terrain_texture_4, elevation_1_nw, elevation_2_nw, elevation_1_ne, elevation_2_ne, elevation_1_se, elevation_2_se, elevation_1_sw, elevation_2_sw, water_height, terrain_raise_limit, terrain_lower_limit, use_estate_sun, fixed_sun, sun_position, covenant, Sandbox, sunvectorx, sunvectory, sunvectorz)
883 SELECT CONVERT(uniqueidentifier, regionUUID), block_terraform, block_fly, allow_damage, restrict_pushing, allow_land_resell, allow_land_join_divide, block_show_in_search, agent_limit, object_bonus, maturity, disable_scripts, disable_collisions, disable_physics, CONVERT(uniqueidentifier, terrain_texture_1), CONVERT(uniqueidentifier, terrain_texture_2), CONVERT(uniqueidentifier, terrain_texture_3), CONVERT(uniqueidentifier, terrain_texture_4), elevation_1_nw, elevation_2_nw, elevation_1_ne, elevation_2_ne, elevation_1_se, elevation_2_se, elevation_1_sw, elevation_2_sw, water_height, terrain_raise_limit, terrain_lower_limit, use_estate_sun, fixed_sun, sun_position, CONVERT(uniqueidentifier, covenant), Sandbox, sunvectorx, sunvectory, sunvectorz FROM dbo.regionsettings WITH (HOLDLOCK TABLOCKX)')
884
885DROP TABLE dbo.regionsettings
886
887EXECUTE sp_rename N'dbo.Tmp_regionsettings', N'regionsettings', 'OBJECT'
888
889ALTER TABLE dbo.regionsettings ADD CONSTRAINT
890 PK__regionse__5B35159D21B6055D PRIMARY KEY CLUSTERED
891 (
892 regionUUID
893 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
894
895COMMIT
896
897
898:VERSION 21
899
900BEGIN TRANSACTION
901
902ALTER TABLE prims ADD PassTouches bit not null default 0
903
904COMMIT
905
906
907:VERSION 22
908
909BEGIN TRANSACTION
910
911ALTER TABLE regionsettings ADD loaded_creation_date varchar(20)
912ALTER TABLE regionsettings ADD loaded_creation_time varchar(20)
913ALTER TABLE regionsettings ADD loaded_creation_id varchar(64)
914
915COMMIT
916
917:VERSION 23
918
919BEGIN TRANSACTION
920
921ALTER TABLE regionsettings DROP COLUMN loaded_creation_date
922ALTER TABLE regionsettings DROP COLUMN loaded_creation_time
923ALTER TABLE regionsettings ADD loaded_creation_datetime int NOT NULL default 0
924
925COMMIT
926
927:VERSION 24
928
929BEGIN TRANSACTION
930
931ALTER TABLE prims ADD MediaURL varchar(255)
932ALTER TABLE primshapes ADD Media TEXT NULL
933
934COMMIT
935
936:VERSION 25
937
938BEGIN TRANSACTION
939CREATE TABLE "regionwindlight" (
940 "region_id" varchar(36) NOT NULL DEFAULT '000000-0000-0000-0000-000000000000',
941 "water_color_r" [float] NOT NULL DEFAULT '4.000000',
942 "water_color_g" [float] NOT NULL DEFAULT '38.000000',
943 "water_color_b" [float] NOT NULL DEFAULT '64.000000',
944 "water_fog_density_exponent" [float] NOT NULL DEFAULT '4.0',
945 "underwater_fog_modifier" [float] NOT NULL DEFAULT '0.25',
946 "reflection_wavelet_scale_1" [float] NOT NULL DEFAULT '2.0',
947 "reflection_wavelet_scale_2" [float] NOT NULL DEFAULT '2.0',
948 "reflection_wavelet_scale_3" [float] NOT NULL DEFAULT '2.0',
949 "fresnel_scale" [float] NOT NULL DEFAULT '0.40',
950 "fresnel_offset" [float] NOT NULL DEFAULT '0.50',
951 "refract_scale_above" [float] NOT NULL DEFAULT '0.03',
952 "refract_scale_below" [float] NOT NULL DEFAULT '0.20',
953 "blur_multiplier" [float] NOT NULL DEFAULT '0.040',
954 "big_wave_direction_x" [float] NOT NULL DEFAULT '1.05',
955 "big_wave_direction_y" [float] NOT NULL DEFAULT '-0.42',
956 "little_wave_direction_x" [float] NOT NULL DEFAULT '1.11',
957 "little_wave_direction_y" [float] NOT NULL DEFAULT '-1.16',
958 "normal_map_texture" varchar(36) NOT NULL DEFAULT '822ded49-9a6c-f61c-cb89-6df54f42cdf4',
959 "horizon_r" [float] NOT NULL DEFAULT '0.25',
960 "horizon_g" [float] NOT NULL DEFAULT '0.25',
961 "horizon_b" [float] NOT NULL DEFAULT '0.32',
962 "horizon_i" [float] NOT NULL DEFAULT '0.32',
963 "haze_horizon" [float] NOT NULL DEFAULT '0.19',
964 "blue_density_r" [float] NOT NULL DEFAULT '0.12',
965 "blue_density_g" [float] NOT NULL DEFAULT '0.22',
966 "blue_density_b" [float] NOT NULL DEFAULT '0.38',
967 "blue_density_i" [float] NOT NULL DEFAULT '0.38',
968 "haze_density" [float] NOT NULL DEFAULT '0.70',
969 "density_multiplier" [float] NOT NULL DEFAULT '0.18',
970 "distance_multiplier" [float] NOT NULL DEFAULT '0.8',
971 "max_altitude" int NOT NULL DEFAULT '1605',
972 "sun_moon_color_r" [float] NOT NULL DEFAULT '0.24',
973 "sun_moon_color_g" [float] NOT NULL DEFAULT '0.26',
974 "sun_moon_color_b" [float] NOT NULL DEFAULT '0.30',
975 "sun_moon_color_i" [float] NOT NULL DEFAULT '0.30',
976 "sun_moon_position" [float] NOT NULL DEFAULT '0.317',
977 "ambient_r" [float] NOT NULL DEFAULT '0.35',
978 "ambient_g" [float] NOT NULL DEFAULT '0.35',
979 "ambient_b" [float] NOT NULL DEFAULT '0.35',
980 "ambient_i" [float] NOT NULL DEFAULT '0.35',
981 "east_angle" [float] NOT NULL DEFAULT '0.00',
982 "sun_glow_focus" [float] NOT NULL DEFAULT '0.10',
983 "sun_glow_size" [float] NOT NULL DEFAULT '1.75',
984 "scene_gamma" [float] NOT NULL DEFAULT '1.00',
985 "star_brightness" [float] NOT NULL DEFAULT '0.00',
986 "cloud_color_r" [float] NOT NULL DEFAULT '0.41',
987 "cloud_color_g" [float] NOT NULL DEFAULT '0.41',
988 "cloud_color_b" [float] NOT NULL DEFAULT '0.41',
989 "cloud_color_i" [float] NOT NULL DEFAULT '0.41',
990 "cloud_x" [float] NOT NULL DEFAULT '1.00',
991 "cloud_y" [float] NOT NULL DEFAULT '0.53',
992 "cloud_density" [float] NOT NULL DEFAULT '1.00',
993 "cloud_coverage" [float] NOT NULL DEFAULT '0.27',
994 "cloud_scale" [float] NOT NULL DEFAULT '0.42',
995 "cloud_detail_x" [float] NOT NULL DEFAULT '1.00',
996 "cloud_detail_y" [float] NOT NULL DEFAULT '0.53',
997 "cloud_detail_density" [float] NOT NULL DEFAULT '0.12',
998 "cloud_scroll_x" [float] NOT NULL DEFAULT '0.20',
999 "cloud_scroll_x_lock" tinyint NOT NULL DEFAULT '0',
1000 "cloud_scroll_y" [float] NOT NULL DEFAULT '0.01',
1001 "cloud_scroll_y_lock" tinyint NOT NULL DEFAULT '0',
1002 "draw_classic_clouds" tinyint NOT NULL DEFAULT '1',
1003 PRIMARY KEY ("region_id")
1004)
1005
1006COMMIT
1007
1008:VERSION 26
1009
1010BEGIN TRANSACTION
1011
1012ALTER TABLE regionsettings ADD map_tile_ID CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'
1013
1014COMMIT
1015
1016:VERSION 27 #---------------------
1017
1018BEGIN TRANSACTION
1019ALTER TABLE land ADD MediaType VARCHAR(32) NOT NULL DEFAULT 'none/none'
1020ALTER TABLE land ADD MediaDescription VARCHAR(255) NOT NULL DEFAULT ''
1021ALTER TABLE land ADD MediaSize VARCHAR(16) NOT NULL DEFAULT '0,0'
1022ALTER TABLE land ADD MediaLoop bit NOT NULL DEFAULT 0
1023ALTER TABLE land ADD ObscureMusic bit NOT NULL DEFAULT 0
1024ALTER TABLE land ADD ObscureMedia bit NOT NULL DEFAULT 0
1025COMMIT
1026
1027:VERSION 28 #---------------------
1028
1029BEGIN TRANSACTION
1030
1031ALTER TABLE prims
1032ADD CONSTRAINT DF_prims_CreatorID
1033DEFAULT '00000000-0000-0000-0000-000000000000'
1034FOR CreatorID
1035
1036ALTER TABLE prims ALTER COLUMN CreatorID uniqueidentifier NOT NULL
1037
1038ALTER TABLE primitems
1039ADD CONSTRAINT DF_primitems_CreatorID
1040DEFAULT '00000000-0000-0000-0000-000000000000'
1041FOR CreatorID
1042
1043ALTER TABLE primitems ALTER COLUMN CreatorID uniqueidentifier NOT NULL
1044
1045COMMIT
1046
1047:VERSION 29 #----------------- Region Covenant changed time
1048
1049BEGIN TRANSACTION
1050
1051ALTER TABLE regionsettings ADD covenant_datetime int NOT NULL default 0
1052
1053COMMIT
1054
1055:VERSION 30 #------------------Migrate creatorID storage to varchars instead of UUIDs for HG support
1056
1057BEGIN TRANSACTION
1058
1059EXECUTE sp_rename N'dbo.prims.creatorid', N'creatoridold', 'COLUMN'
1060EXECUTE sp_rename N'dbo.primitems.creatorid', N'creatoridold', 'COLUMN'
1061
1062COMMIT
1063
1064:VERSION 31 #---------------------
1065
1066BEGIN TRANSACTION
1067
1068ALTER TABLE prims ADD CreatorID varchar(255)
1069ALTER TABLE primitems ADD CreatorID varchar(255)
1070
1071COMMIT
1072
1073:VERSION 32 #---------------------
1074
1075BEGIN TRANSACTION
1076
1077UPDATE prims SET prims.CreatorID = CONVERT(varchar(255), creatoridold)
1078UPDATE primitems SET primitems.CreatorID = CONVERT(varchar(255), creatoridold)
1079
1080COMMIT
1081
1082:VERSION 33 #---------------------
1083
1084BEGIN TRANSACTION
1085
1086ALTER TABLE prims
1087ADD CONSTRAINT DF_prims_CreatorIDNew
1088DEFAULT '00000000-0000-0000-0000-000000000000'
1089FOR CreatorID
1090
1091ALTER TABLE prims ALTER COLUMN CreatorID varchar(255) NOT NULL
1092
1093ALTER TABLE primitems
1094ADD CONSTRAINT DF_primitems_CreatorIDNew
1095DEFAULT '00000000-0000-0000-0000-000000000000'
1096FOR CreatorID
1097
1098ALTER TABLE primitems ALTER COLUMN CreatorID varchar(255) NOT NULL
1099
1100COMMIT
1101
1102:VERSION 34 #--------------- Telehub support
1103
1104BEGIN TRANSACTION
1105
1106CREATE TABLE [dbo].[Spawn_Points](
1107 [RegionUUID] [uniqueidentifier] NOT NULL,
1108 [Yaw] [float] NOT NULL,
1109 [Pitch] [float] NOT NULL,
1110 [Distance] [float] NOT NULL,
1111 PRIMARY KEY CLUSTERED
1112 (
1113 [RegionUUID] ASC
1114 )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
1115) ON [PRIMARY]
1116
1117ALTER TABLE regionsettings ADD TelehubObject uniqueidentifier NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000';
1118
1119COMMIT
1120
1121:VERSION 35 #---------------- Parcels for sale
1122
1123BEGIN TRANSACTION
1124
1125ALTER TABLE regionsettings ADD parcel_tile_ID uniqueidentifier NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000';
1126
1127COMMIT
1128
1129:VERSION 36 #---------------- Timed bans/access
1130
1131BEGIN TRANSACTION
1132
1133ALTER TABLE landaccesslist ADD Expires integer NOT NULL DEFAULT 0;
1134
1135COMMIT
1136
1137:VERSION 37 #---------------- Environment Settings
1138
1139BEGIN TRANSACTION
1140
1141CREATE TABLE [dbo].[regionenvironment](
1142 [region_id] [uniqueidentifier] NOT NULL,
1143 [llsd_settings] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
1144 PRIMARY KEY CLUSTERED
1145(
1146 [region_id] ASC
1147)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
1148) ON [PRIMARY]
1149
1150COMMIT
1151
1152:VERSION 38 #---------------- Dynamic attributes
1153
1154BEGIN TRANSACTION
1155
1156ALTER TABLE prims ADD DynAttrs TEXT;
1157
1158COMMIT
1159
1160:VERSION 39 #---------------- Extra physics params
1161
1162BEGIN TRANSACTION
1163
1164ALTER TABLE prims ADD PhysicsShapeType tinyint NOT NULL default 0;
1165ALTER TABLE prims ADD Density float NOT NULL default 1000;
1166ALTER TABLE prims ADD GravityModifier float NOT NULL default 1;
1167ALTER TABLE prims ADD Friction float NOT NULL default 0.6;
1168ALTER TABLE prims ADD Restitution float NOT NULL default 0.5;
1169
1170COMMIT
1171
1172:VERSION 40 #---------------- Save Attachment info
1173
1174BEGIN TRANSACTION
1175
1176ALTER TABLE prims ADD AttachedPosX float(53) default 0.0;
1177ALTER TABLE prims ADD AttachedPosY float(53) default 0.0;
1178ALTER TABLE prims ADD AttachedPosZ float(53) default 0.0;
1179ALTER TABLE primshapes ADD LastAttachPoint int not null default 0;
1180
1181COMMIT
1182
diff --git a/OpenSim/Data/MSSQL/Resources/UserAccount.migrations b/OpenSim/Data/MSSQL/Resources/UserAccount.migrations
deleted file mode 100644
index a81704d..0000000
--- a/OpenSim/Data/MSSQL/Resources/UserAccount.migrations
+++ /dev/null
@@ -1,55 +0,0 @@
1:VERSION 1
2
3CREATE TABLE [UserAccounts] (
4 [PrincipalID] uniqueidentifier NOT NULL,
5 [ScopeID] uniqueidentifier NOT NULL,
6 [FirstName] [varchar](64) NOT NULL,
7 [LastName] [varchar](64) NOT NULL,
8 [Email] [varchar](64) NULL,
9 [ServiceURLs] [text] NULL,
10 [Created] [int] default NULL,
11
12 PRIMARY KEY CLUSTERED
13(
14 [PrincipalID] ASC
15)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
16) ON [PRIMARY]
17
18
19:VERSION 2
20
21BEGIN TRANSACTION
22IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[users]') AND type in (N'U'))
23INSERT INTO UserAccounts (PrincipalID, ScopeID, FirstName, LastName, Email, ServiceURLs, Created) SELECT [UUID] AS PrincipalID, '00000000-0000-0000-0000-000000000000' AS ScopeID,
24username AS FirstName,
25lastname AS LastName,
26email as Email, (
27'AssetServerURI=' +
28userAssetURI + ' InventoryServerURI=' + userInventoryURI + ' GatewayURI= HomeURI=') AS ServiceURLs,
29created as Created FROM users;
30
31
32COMMIT
33
34:VERSION 3
35
36BEGIN TRANSACTION
37
38CREATE UNIQUE INDEX PrincipalID ON UserAccounts(PrincipalID);
39CREATE INDEX Email ON UserAccounts(Email);
40CREATE INDEX FirstName ON UserAccounts(FirstName);
41CREATE INDEX LastName ON UserAccounts(LastName);
42CREATE INDEX Name ON UserAccounts(FirstName,LastName);
43
44COMMIT
45
46:VERSION 4
47
48BEGIN TRANSACTION
49
50ALTER TABLE UserAccounts ADD UserLevel integer NOT NULL DEFAULT 0;
51ALTER TABLE UserAccounts ADD UserFlags integer NOT NULL DEFAULT 0;
52ALTER TABLE UserAccounts ADD UserTitle varchar(64) NOT NULL DEFAULT '';
53
54COMMIT
55
diff --git a/OpenSim/Data/MSSQL/Resources/UserStore.migrations b/OpenSim/Data/MSSQL/Resources/UserStore.migrations
deleted file mode 100644
index 050c544..0000000
--- a/OpenSim/Data/MSSQL/Resources/UserStore.migrations
+++ /dev/null
@@ -1,421 +0,0 @@
1:VERSION 1
2
3CREATE TABLE [users] (
4 [UUID] [varchar](36) NOT NULL default '',
5 [username] [varchar](32) NOT NULL,
6 [lastname] [varchar](32) NOT NULL,
7 [passwordHash] [varchar](32) NOT NULL,
8 [passwordSalt] [varchar](32) NOT NULL,
9 [homeRegion] [bigint] default NULL,
10 [homeLocationX] [float] default NULL,
11 [homeLocationY] [float] default NULL,
12 [homeLocationZ] [float] default NULL,
13 [homeLookAtX] [float] default NULL,
14 [homeLookAtY] [float] default NULL,
15 [homeLookAtZ] [float] default NULL,
16 [created] [int] NOT NULL,
17 [lastLogin] [int] NOT NULL,
18 [userInventoryURI] [varchar](255) default NULL,
19 [userAssetURI] [varchar](255) default NULL,
20 [profileCanDoMask] [int] default NULL,
21 [profileWantDoMask] [int] default NULL,
22 [profileAboutText] [ntext],
23 [profileFirstText] [ntext],
24 [profileImage] [varchar](36) default NULL,
25 [profileFirstImage] [varchar](36) default NULL,
26 [webLoginKey] [varchar](36) default NULL,
27 PRIMARY KEY CLUSTERED
28(
29 [UUID] ASC
30)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
31) ON [PRIMARY]
32
33
34CREATE NONCLUSTERED INDEX [usernames] ON [users]
35(
36 [username] ASC,
37 [lastname] ASC
38)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
39
40
41CREATE TABLE [agents] (
42 [UUID] [varchar](36) NOT NULL,
43 [sessionID] [varchar](36) NOT NULL,
44 [secureSessionID] [varchar](36) NOT NULL,
45 [agentIP] [varchar](16) NOT NULL,
46 [agentPort] [int] NOT NULL,
47 [agentOnline] [tinyint] NOT NULL,
48 [loginTime] [int] NOT NULL,
49 [logoutTime] [int] NOT NULL,
50 [currentRegion] [varchar](36) NOT NULL,
51 [currentHandle] [bigint] NOT NULL,
52 [currentPos] [varchar](64) NOT NULL,
53 PRIMARY KEY CLUSTERED
54(
55 [UUID] ASC
56)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
57) ON [PRIMARY]
58
59
60CREATE NONCLUSTERED INDEX [session] ON [agents]
61(
62 [sessionID] ASC
63)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
64
65CREATE NONCLUSTERED INDEX [ssession] ON [agents]
66(
67 [secureSessionID] ASC
68)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
69
70
71CREATE TABLE [dbo].[userfriends](
72 [ownerID] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
73 [friendID] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
74 [friendPerms] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
75 [datetimestamp] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
76) ON [PRIMARY]
77
78CREATE TABLE [avatarappearance] (
79 [Owner] [varchar](36) NOT NULL,
80 [Serial] int NOT NULL,
81 [Visual_Params] [image] NOT NULL,
82 [Texture] [image] NOT NULL,
83 [Avatar_Height] float NOT NULL,
84 [Body_Item] [varchar](36) NOT NULL,
85 [Body_Asset] [varchar](36) NOT NULL,
86 [Skin_Item] [varchar](36) NOT NULL,
87 [Skin_Asset] [varchar](36) NOT NULL,
88 [Hair_Item] [varchar](36) NOT NULL,
89 [Hair_Asset] [varchar](36) NOT NULL,
90 [Eyes_Item] [varchar](36) NOT NULL,
91 [Eyes_Asset] [varchar](36) NOT NULL,
92 [Shirt_Item] [varchar](36) NOT NULL,
93 [Shirt_Asset] [varchar](36) NOT NULL,
94 [Pants_Item] [varchar](36) NOT NULL,
95 [Pants_Asset] [varchar](36) NOT NULL,
96 [Shoes_Item] [varchar](36) NOT NULL,
97 [Shoes_Asset] [varchar](36) NOT NULL,
98 [Socks_Item] [varchar](36) NOT NULL,
99 [Socks_Asset] [varchar](36) NOT NULL,
100 [Jacket_Item] [varchar](36) NOT NULL,
101 [Jacket_Asset] [varchar](36) NOT NULL,
102 [Gloves_Item] [varchar](36) NOT NULL,
103 [Gloves_Asset] [varchar](36) NOT NULL,
104 [Undershirt_Item] [varchar](36) NOT NULL,
105 [Undershirt_Asset] [varchar](36) NOT NULL,
106 [Underpants_Item] [varchar](36) NOT NULL,
107 [Underpants_Asset] [varchar](36) NOT NULL,
108 [Skirt_Item] [varchar](36) NOT NULL,
109 [Skirt_Asset] [varchar](36) NOT NULL,
110
111 PRIMARY KEY CLUSTERED (
112 [Owner]
113 ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
114) ON [PRIMARY]
115
116:VERSION 2
117
118BEGIN TRANSACTION
119
120ALTER TABLE users ADD homeRegionID varchar(36) NOT NULL default '00000000-0000-0000-0000-000000000000';
121ALTER TABLE users ADD userFlags int NOT NULL default 0;
122ALTER TABLE users ADD godLevel int NOT NULL default 0;
123ALTER TABLE users ADD customType varchar(32) not null default '';
124ALTER TABLE users ADD partner varchar(36) not null default '00000000-0000-0000-0000-000000000000';
125
126COMMIT
127
128
129:VERSION 3
130
131BEGIN TRANSACTION
132
133CREATE TABLE [avatarattachments] (
134 [UUID] varchar(36) NOT NULL
135 , [attachpoint] int NOT NULL
136 , [item] varchar(36) NOT NULL
137 , [asset] varchar(36) NOT NULL)
138
139CREATE NONCLUSTERED INDEX IX_avatarattachments ON dbo.avatarattachments
140 (
141 UUID
142 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
143
144
145COMMIT
146
147
148:VERSION 4
149
150BEGIN TRANSACTION
151
152CREATE TABLE Tmp_userfriends
153 (
154 ownerID varchar(36) NOT NULL,
155 friendID varchar(36) NOT NULL,
156 friendPerms int NOT NULL,
157 datetimestamp int NOT NULL
158 ) ON [PRIMARY]
159
160IF EXISTS(SELECT * FROM userfriends)
161 EXEC('INSERT INTO dbo.Tmp_userfriends (ownerID, friendID, friendPerms, datetimestamp)
162 SELECT CONVERT(varchar(36), ownerID), CONVERT(varchar(36), friendID), CONVERT(int, friendPerms), CONVERT(int, datetimestamp) FROM dbo.userfriends WITH (HOLDLOCK TABLOCKX)')
163
164DROP TABLE dbo.userfriends
165
166EXECUTE sp_rename N'Tmp_userfriends', N'userfriends', 'OBJECT'
167
168CREATE NONCLUSTERED INDEX IX_userfriends_ownerID ON userfriends
169 (
170 ownerID
171 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
172
173CREATE NONCLUSTERED INDEX IX_userfriends_friendID ON userfriends
174 (
175 friendID
176 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
177
178COMMIT
179
180
181:VERSION 5
182
183BEGIN TRANSACTION
184
185 ALTER TABLE users add email varchar(250);
186
187COMMIT
188
189
190:VERSION 6
191
192BEGIN TRANSACTION
193
194CREATE TABLE dbo.Tmp_users
195 (
196 UUID uniqueidentifier NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000'),
197 username varchar(32) NOT NULL,
198 lastname varchar(32) NOT NULL,
199 passwordHash varchar(32) NOT NULL,
200 passwordSalt varchar(32) NOT NULL,
201 homeRegion bigint NULL DEFAULT (NULL),
202 homeLocationX float(53) NULL DEFAULT (NULL),
203 homeLocationY float(53) NULL DEFAULT (NULL),
204 homeLocationZ float(53) NULL DEFAULT (NULL),
205 homeLookAtX float(53) NULL DEFAULT (NULL),
206 homeLookAtY float(53) NULL DEFAULT (NULL),
207 homeLookAtZ float(53) NULL DEFAULT (NULL),
208 created int NOT NULL,
209 lastLogin int NOT NULL,
210 userInventoryURI varchar(255) NULL DEFAULT (NULL),
211 userAssetURI varchar(255) NULL DEFAULT (NULL),
212 profileCanDoMask int NULL DEFAULT (NULL),
213 profileWantDoMask int NULL DEFAULT (NULL),
214 profileAboutText ntext NULL,
215 profileFirstText ntext NULL,
216 profileImage uniqueidentifier NULL DEFAULT (NULL),
217 profileFirstImage uniqueidentifier NULL DEFAULT (NULL),
218 webLoginKey uniqueidentifier NULL DEFAULT (NULL),
219 homeRegionID uniqueidentifier NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000'),
220 userFlags int NOT NULL DEFAULT ((0)),
221 godLevel int NOT NULL DEFAULT ((0)),
222 customType varchar(32) NOT NULL DEFAULT (''),
223 partner uniqueidentifier NOT NULL DEFAULT ('00000000-0000-0000-0000-000000000000'),
224 email varchar(250) NULL
225 ) ON [PRIMARY]
226 TEXTIMAGE_ON [PRIMARY]
227
228IF EXISTS(SELECT * FROM dbo.users)
229 EXEC('INSERT INTO dbo.Tmp_users (UUID, username, lastname, passwordHash, passwordSalt, homeRegion, homeLocationX, homeLocationY, homeLocationZ, homeLookAtX, homeLookAtY, homeLookAtZ, created, lastLogin, userInventoryURI, userAssetURI, profileCanDoMask, profileWantDoMask, profileAboutText, profileFirstText, profileImage, profileFirstImage, webLoginKey, homeRegionID, userFlags, godLevel, customType, partner, email)
230 SELECT CONVERT(uniqueidentifier, UUID), username, lastname, passwordHash, passwordSalt, homeRegion, homeLocationX, homeLocationY, homeLocationZ, homeLookAtX, homeLookAtY, homeLookAtZ, created, lastLogin, userInventoryURI, userAssetURI, profileCanDoMask, profileWantDoMask, profileAboutText, profileFirstText, CONVERT(uniqueidentifier, profileImage), CONVERT(uniqueidentifier, profileFirstImage), CONVERT(uniqueidentifier, webLoginKey), CONVERT(uniqueidentifier, homeRegionID), userFlags, godLevel, customType, CONVERT(uniqueidentifier, partner), email FROM dbo.users WITH (HOLDLOCK TABLOCKX)')
231
232DROP TABLE dbo.users
233
234EXECUTE sp_rename N'dbo.Tmp_users', N'users', 'OBJECT'
235
236ALTER TABLE dbo.users ADD CONSTRAINT
237 PK__users__65A475E737A5467C PRIMARY KEY CLUSTERED
238 (
239 UUID
240 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
241
242CREATE NONCLUSTERED INDEX usernames ON dbo.users
243 (
244 username,
245 lastname
246 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
247
248COMMIT
249
250
251:VERSION 7
252
253BEGIN TRANSACTION
254
255CREATE TABLE dbo.Tmp_agents
256 (
257 UUID uniqueidentifier NOT NULL,
258 sessionID uniqueidentifier NOT NULL,
259 secureSessionID uniqueidentifier NOT NULL,
260 agentIP varchar(16) NOT NULL,
261 agentPort int NOT NULL,
262 agentOnline tinyint NOT NULL,
263 loginTime int NOT NULL,
264 logoutTime int NOT NULL,
265 currentRegion uniqueidentifier NOT NULL,
266 currentHandle bigint NOT NULL,
267 currentPos varchar(64) NOT NULL
268 ) ON [PRIMARY]
269
270IF EXISTS(SELECT * FROM dbo.agents)
271 EXEC('INSERT INTO dbo.Tmp_agents (UUID, sessionID, secureSessionID, agentIP, agentPort, agentOnline, loginTime, logoutTime, currentRegion, currentHandle, currentPos)
272 SELECT CONVERT(uniqueidentifier, UUID), CONVERT(uniqueidentifier, sessionID), CONVERT(uniqueidentifier, secureSessionID), agentIP, agentPort, agentOnline, loginTime, logoutTime, CONVERT(uniqueidentifier, currentRegion), currentHandle, currentPos FROM dbo.agents WITH (HOLDLOCK TABLOCKX)')
273
274DROP TABLE dbo.agents
275
276EXECUTE sp_rename N'dbo.Tmp_agents', N'agents', 'OBJECT'
277
278ALTER TABLE dbo.agents ADD CONSTRAINT
279 PK__agents__65A475E749C3F6B7 PRIMARY KEY CLUSTERED
280 (
281 UUID
282 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
283
284CREATE NONCLUSTERED INDEX session ON dbo.agents
285 (
286 sessionID
287 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
288
289CREATE NONCLUSTERED INDEX ssession ON dbo.agents
290 (
291 secureSessionID
292 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
293
294COMMIT
295
296
297:VERSION 8
298
299BEGIN TRANSACTION
300
301CREATE TABLE dbo.Tmp_userfriends
302 (
303 ownerID uniqueidentifier NOT NULL,
304 friendID uniqueidentifier NOT NULL,
305 friendPerms int NOT NULL,
306 datetimestamp int NOT NULL
307 ) ON [PRIMARY]
308
309IF EXISTS(SELECT * FROM dbo.userfriends)
310 EXEC('INSERT INTO dbo.Tmp_userfriends (ownerID, friendID, friendPerms, datetimestamp)
311 SELECT CONVERT(uniqueidentifier, ownerID), CONVERT(uniqueidentifier, friendID), friendPerms, datetimestamp FROM dbo.userfriends WITH (HOLDLOCK TABLOCKX)')
312
313DROP TABLE dbo.userfriends
314
315EXECUTE sp_rename N'dbo.Tmp_userfriends', N'userfriends', 'OBJECT'
316
317CREATE NONCLUSTERED INDEX IX_userfriends_ownerID ON dbo.userfriends
318 (
319 ownerID
320 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
321
322CREATE NONCLUSTERED INDEX IX_userfriends_friendID ON dbo.userfriends
323 (
324 friendID
325 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
326
327COMMIT
328
329
330:VERSION 9
331
332BEGIN TRANSACTION
333
334CREATE TABLE dbo.Tmp_avatarappearance
335 (
336 Owner uniqueidentifier NOT NULL,
337 Serial int NOT NULL,
338 Visual_Params image NOT NULL,
339 Texture image NOT NULL,
340 Avatar_Height float(53) NOT NULL,
341 Body_Item uniqueidentifier NOT NULL,
342 Body_Asset uniqueidentifier NOT NULL,
343 Skin_Item uniqueidentifier NOT NULL,
344 Skin_Asset uniqueidentifier NOT NULL,
345 Hair_Item uniqueidentifier NOT NULL,
346 Hair_Asset uniqueidentifier NOT NULL,
347 Eyes_Item uniqueidentifier NOT NULL,
348 Eyes_Asset uniqueidentifier NOT NULL,
349 Shirt_Item uniqueidentifier NOT NULL,
350 Shirt_Asset uniqueidentifier NOT NULL,
351 Pants_Item uniqueidentifier NOT NULL,
352 Pants_Asset uniqueidentifier NOT NULL,
353 Shoes_Item uniqueidentifier NOT NULL,
354 Shoes_Asset uniqueidentifier NOT NULL,
355 Socks_Item uniqueidentifier NOT NULL,
356 Socks_Asset uniqueidentifier NOT NULL,
357 Jacket_Item uniqueidentifier NOT NULL,
358 Jacket_Asset uniqueidentifier NOT NULL,
359 Gloves_Item uniqueidentifier NOT NULL,
360 Gloves_Asset uniqueidentifier NOT NULL,
361 Undershirt_Item uniqueidentifier NOT NULL,
362 Undershirt_Asset uniqueidentifier NOT NULL,
363 Underpants_Item uniqueidentifier NOT NULL,
364 Underpants_Asset uniqueidentifier NOT NULL,
365 Skirt_Item uniqueidentifier NOT NULL,
366 Skirt_Asset uniqueidentifier NOT NULL
367 ) ON [PRIMARY]
368 TEXTIMAGE_ON [PRIMARY]
369
370IF EXISTS(SELECT * FROM dbo.avatarappearance)
371 EXEC('INSERT INTO dbo.Tmp_avatarappearance (Owner, Serial, Visual_Params, Texture, Avatar_Height, Body_Item, Body_Asset, Skin_Item, Skin_Asset, Hair_Item, Hair_Asset, Eyes_Item, Eyes_Asset, Shirt_Item, Shirt_Asset, Pants_Item, Pants_Asset, Shoes_Item, Shoes_Asset, Socks_Item, Socks_Asset, Jacket_Item, Jacket_Asset, Gloves_Item, Gloves_Asset, Undershirt_Item, Undershirt_Asset, Underpants_Item, Underpants_Asset, Skirt_Item, Skirt_Asset)
372 SELECT CONVERT(uniqueidentifier, Owner), Serial, Visual_Params, Texture, Avatar_Height, CONVERT(uniqueidentifier, Body_Item), CONVERT(uniqueidentifier, Body_Asset), CONVERT(uniqueidentifier, Skin_Item), CONVERT(uniqueidentifier, Skin_Asset), CONVERT(uniqueidentifier, Hair_Item), CONVERT(uniqueidentifier, Hair_Asset), CONVERT(uniqueidentifier, Eyes_Item), CONVERT(uniqueidentifier, Eyes_Asset), CONVERT(uniqueidentifier, Shirt_Item), CONVERT(uniqueidentifier, Shirt_Asset), CONVERT(uniqueidentifier, Pants_Item), CONVERT(uniqueidentifier, Pants_Asset), CONVERT(uniqueidentifier, Shoes_Item), CONVERT(uniqueidentifier, Shoes_Asset), CONVERT(uniqueidentifier, Socks_Item), CONVERT(uniqueidentifier, Socks_Asset), CONVERT(uniqueidentifier, Jacket_Item), CONVERT(uniqueidentifier, Jacket_Asset), CONVERT(uniqueidentifier, Gloves_Item), CONVERT(uniqueidentifier, Gloves_Asset), CONVERT(uniqueidentifier, Undershirt_Item), CONVERT(uniqueidentifier, Undershirt_Asset), CONVERT(uniqueidentifier, Underpants_Item), CONVERT(uniqueidentifier, Underpants_Asset), CONVERT(uniqueidentifier, Skirt_Item), CONVERT(uniqueidentifier, Skirt_Asset) FROM dbo.avatarappearance WITH (HOLDLOCK TABLOCKX)')
373
374DROP TABLE dbo.avatarappearance
375
376EXECUTE sp_rename N'dbo.Tmp_avatarappearance', N'avatarappearance', 'OBJECT'
377
378ALTER TABLE dbo.avatarappearance ADD CONSTRAINT
379 PK__avatarap__7DD115CC4E88ABD4 PRIMARY KEY CLUSTERED
380 (
381 Owner
382 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
383
384COMMIT
385
386
387:VERSION 10
388
389BEGIN TRANSACTION
390
391CREATE TABLE dbo.Tmp_avatarattachments
392 (
393 UUID uniqueidentifier NOT NULL,
394 attachpoint int NOT NULL,
395 item uniqueidentifier NOT NULL,
396 asset uniqueidentifier NOT NULL
397 ) ON [PRIMARY]
398
399IF EXISTS(SELECT * FROM dbo.avatarattachments)
400 EXEC('INSERT INTO dbo.Tmp_avatarattachments (UUID, attachpoint, item, asset)
401 SELECT CONVERT(uniqueidentifier, UUID), attachpoint, CONVERT(uniqueidentifier, item), CONVERT(uniqueidentifier, asset) FROM dbo.avatarattachments WITH (HOLDLOCK TABLOCKX)')
402
403DROP TABLE dbo.avatarattachments
404
405EXECUTE sp_rename N'dbo.Tmp_avatarattachments', N'avatarattachments', 'OBJECT'
406
407CREATE NONCLUSTERED INDEX IX_avatarattachments ON dbo.avatarattachments
408 (
409 UUID
410 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
411
412COMMIT
413
414
415:VERSION 11
416
417BEGIN TRANSACTION
418
419ALTER TABLE users ADD scopeID uniqueidentifier not null default '00000000-0000-0000-0000-000000000000'
420
421COMMIT
diff --git a/OpenSim/Data/Tests/AssetTests.cs b/OpenSim/Data/Tests/AssetTests.cs
index d778d1c..5d7b169 100644
--- a/OpenSim/Data/Tests/AssetTests.cs
+++ b/OpenSim/Data/Tests/AssetTests.cs
@@ -40,9 +40,6 @@ using log4net;
40using MySql.Data.MySqlClient; 40using MySql.Data.MySqlClient;
41using OpenSim.Data.MySQL; 41using OpenSim.Data.MySQL;
42 42
43using System.Data.SqlClient;
44using OpenSim.Data.MSSQL;
45
46using Mono.Data.Sqlite; 43using Mono.Data.Sqlite;
47using OpenSim.Data.SQLite; 44using OpenSim.Data.SQLite;
48 45
@@ -58,11 +55,6 @@ namespace OpenSim.Data.Tests
58 { 55 {
59 } 56 }
60 57
61 [TestFixture(Description = "Asset store tests (MS SQL Server)")]
62 public class MSSQLAssetTests : AssetTests<SqlConnection, MSSQLAssetData>
63 {
64 }
65
66 public class AssetTests<TConn, TAssetData> : BasicDataServiceTest<TConn, TAssetData> 58 public class AssetTests<TConn, TAssetData> : BasicDataServiceTest<TConn, TAssetData>
67 where TConn : DbConnection, new() 59 where TConn : DbConnection, new()
68 where TAssetData : AssetDataBase, new() 60 where TAssetData : AssetDataBase, new()
diff --git a/OpenSim/Data/Tests/EstateTests.cs b/OpenSim/Data/Tests/EstateTests.cs
index 3e47bcf..e2b2d12 100644
--- a/OpenSim/Data/Tests/EstateTests.cs
+++ b/OpenSim/Data/Tests/EstateTests.cs
@@ -41,9 +41,6 @@ using System.Data.Common;
41using MySql.Data.MySqlClient; 41using MySql.Data.MySqlClient;
42using OpenSim.Data.MySQL; 42using OpenSim.Data.MySQL;
43 43
44using System.Data.SqlClient;
45using OpenSim.Data.MSSQL;
46
47using Mono.Data.Sqlite; 44using Mono.Data.Sqlite;
48using OpenSim.Data.SQLite; 45using OpenSim.Data.SQLite;
49 46
@@ -59,11 +56,6 @@ namespace OpenSim.Data.Tests
59 { 56 {
60 } 57 }
61 58
62 [TestFixture(Description = "Estate store tests (MS SQL Server)")]
63 public class MSSQLEstateTests : EstateTests<SqlConnection, MSSQLEstateStore>
64 {
65 }
66
67 public class EstateTests<TConn, TEstateStore> : BasicDataServiceTest<TConn, TEstateStore> 59 public class EstateTests<TConn, TEstateStore> : BasicDataServiceTest<TConn, TEstateStore>
68 where TConn : DbConnection, new() 60 where TConn : DbConnection, new()
69 where TEstateStore : class, IEstateDataStore, new() 61 where TEstateStore : class, IEstateDataStore, new()
diff --git a/OpenSim/Data/Tests/InventoryTests.cs b/OpenSim/Data/Tests/InventoryTests.cs
index 5b6b61b..3edf89d 100644
--- a/OpenSim/Data/Tests/InventoryTests.cs
+++ b/OpenSim/Data/Tests/InventoryTests.cs
@@ -39,9 +39,6 @@ using System.Data.Common;
39using MySql.Data.MySqlClient; 39using MySql.Data.MySqlClient;
40using OpenSim.Data.MySQL; 40using OpenSim.Data.MySQL;
41 41
42using System.Data.SqlClient;
43using OpenSim.Data.MSSQL;
44
45using Mono.Data.Sqlite; 42using Mono.Data.Sqlite;
46using OpenSim.Data.SQLite; 43using OpenSim.Data.SQLite;
47 44
@@ -57,11 +54,6 @@ namespace OpenSim.Data.Tests
57 { 54 {
58 } 55 }
59 56
60 [TestFixture(Description = "Inventory store tests (MS SQL Server)")]
61 public class MSSQLInventoryTests : InventoryTests<SqlConnection, MSSQLInventoryData>
62 {
63 }
64
65 public class InventoryTests<TConn, TInvStore> : BasicDataServiceTest<TConn, TInvStore> 57 public class InventoryTests<TConn, TInvStore> : BasicDataServiceTest<TConn, TInvStore>
66 where TConn : DbConnection, new() 58 where TConn : DbConnection, new()
67 where TInvStore : class, IInventoryDataPlugin, new() 59 where TInvStore : class, IInventoryDataPlugin, new()
diff --git a/OpenSim/Data/Tests/RegionTests.cs b/OpenSim/Data/Tests/RegionTests.cs
index dbed8f6..8d4249a 100644
--- a/OpenSim/Data/Tests/RegionTests.cs
+++ b/OpenSim/Data/Tests/RegionTests.cs
@@ -44,9 +44,6 @@ using System.Data.Common;
44using MySql.Data.MySqlClient; 44using MySql.Data.MySqlClient;
45using OpenSim.Data.MySQL; 45using OpenSim.Data.MySQL;
46 46
47using System.Data.SqlClient;
48using OpenSim.Data.MSSQL;
49
50using Mono.Data.Sqlite; 47using Mono.Data.Sqlite;
51using OpenSim.Data.SQLite; 48using OpenSim.Data.SQLite;
52 49
@@ -62,11 +59,6 @@ namespace OpenSim.Data.Tests
62 { 59 {
63 } 60 }
64 61
65 [TestFixture(Description = "Region store tests (MS SQL Server)")]
66 public class MSSQLRegionTests : RegionTests<SqlConnection, MSSQLSimulationData>
67 {
68 }
69
70 public class RegionTests<TConn, TRegStore> : BasicDataServiceTest<TConn, TRegStore> 62 public class RegionTests<TConn, TRegStore> : BasicDataServiceTest<TConn, TRegStore>
71 where TConn : DbConnection, new() 63 where TConn : DbConnection, new()
72 where TRegStore : class, ISimulationDataStore, new() 64 where TRegStore : class, ISimulationDataStore, new()