aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/MSSQL
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Data/MSSQL/MSSQLUserAccountData.cs246
-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.migrations334
-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.migrations31
-rw-r--r--OpenSim/Data/MSSQL/Resources/RegionStore.migrations1150
-rw-r--r--OpenSim/Data/MSSQL/Resources/UserAccount.migrations55
-rw-r--r--OpenSim/Data/MSSQL/Resources/UserStore.migrations421
-rw-r--r--OpenSim/Data/PGSQL/PGSQLAssetData.cs (renamed from OpenSim/Data/MSSQL/MSSQLAssetData.cs)137
-rw-r--r--OpenSim/Data/PGSQL/PGSQLAuthenticationData.cs (renamed from OpenSim/Data/MSSQL/MSSQLAuthenticationData.cs)119
-rw-r--r--OpenSim/Data/PGSQL/PGSQLAvatarData.cs (renamed from OpenSim/Data/MSSQL/MSSQLAvatarData.cs)23
-rw-r--r--OpenSim/Data/PGSQL/PGSQLEstateData.cs (renamed from OpenSim/Data/MSSQL/MSSQLEstateData.cs)197
-rw-r--r--OpenSim/Data/PGSQL/PGSQLFriendsData.cs (renamed from OpenSim/Data/MSSQL/MSSQLFriendsData.cs)61
-rw-r--r--OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs (renamed from OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs)253
-rw-r--r--OpenSim/Data/PGSQL/PGSQLGridUserData.cs (renamed from OpenSim/Data/MSSQL/MSSQLGridUserData.cs)16
-rw-r--r--OpenSim/Data/PGSQL/PGSQLInventoryData.cs (renamed from OpenSim/Data/MSSQL/MSSQLInventoryData.cs)212
-rw-r--r--OpenSim/Data/PGSQL/PGSQLManager.cs (renamed from OpenSim/Data/MSSQL/MSSQLManager.cs)185
-rw-r--r--OpenSim/Data/PGSQL/PGSQLMigration.cs (renamed from OpenSim/Data/MSSQL/MSSQLMigration.cs)23
-rwxr-xr-x[-rw-r--r--]OpenSim/Data/PGSQL/PGSQLPresenceData.cs (renamed from OpenSim/Data/MSSQL/MSSQLPresenceData.cs)39
-rw-r--r--OpenSim/Data/PGSQL/PGSQLRegionData.cs (renamed from OpenSim/Data/MSSQL/MSSQLRegionData.cs)193
-rw-r--r--OpenSim/Data/PGSQL/PGSQLSimulationData.cs (renamed from OpenSim/Data/MSSQL/MSSQLSimulationData.cs)960
-rw-r--r--OpenSim/Data/PGSQL/PGSQLXInventoryData.cs (renamed from OpenSim/Data/MSSQL/MSSQLXInventoryData.cs)117
-rw-r--r--OpenSim/Data/PGSQL/Properties/AssemblyInfo.cs (renamed from OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs)8
29 files changed, 1514 insertions, 4126 deletions
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/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 64b2d2b..0000000
--- a/OpenSim/Data/MSSQL/Resources/EstateStore.migrations
+++ /dev/null
@@ -1,334 +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
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 bcb6328..0000000
--- a/OpenSim/Data/MSSQL/Resources/Presence.migrations
+++ /dev/null
@@ -1,31 +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 \ No newline at end of file
diff --git a/OpenSim/Data/MSSQL/Resources/RegionStore.migrations b/OpenSim/Data/MSSQL/Resources/RegionStore.migrations
deleted file mode 100644
index 350e548..0000000
--- a/OpenSim/Data/MSSQL/Resources/RegionStore.migrations
+++ /dev/null
@@ -1,1150 +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
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/MSSQL/MSSQLAssetData.cs b/OpenSim/Data/PGSQL/PGSQLAssetData.cs
index c7488d8..5d8b0a2 100644
--- a/OpenSim/Data/MSSQL/MSSQLAssetData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLAssetData.cs
@@ -27,19 +27,20 @@
27 27
28using System; 28using System;
29using System.Data; 29using System.Data;
30using System.Data.SqlClient;
31using System.Reflection; 30using System.Reflection;
32using System.Collections.Generic; 31using System.Collections.Generic;
33using OpenMetaverse; 32using OpenMetaverse;
34using log4net; 33using log4net;
35using OpenSim.Framework; 34using OpenSim.Framework;
35using Npgsql;
36using NpgsqlTypes;
36 37
37namespace OpenSim.Data.MSSQL 38namespace OpenSim.Data.PGSQL
38{ 39{
39 /// <summary> 40 /// <summary>
40 /// A MSSQL Interface for the Asset server 41 /// A PGSQL Interface for the Asset server
41 /// </summary> 42 /// </summary>
42 public class MSSQLAssetData : AssetDataBase 43 public class PGSQLAssetData : AssetDataBase
43 { 44 {
44 private const string _migrationStore = "AssetStore"; 45 private const string _migrationStore = "AssetStore";
45 46
@@ -48,9 +49,14 @@ namespace OpenSim.Data.MSSQL
48 /// <summary> 49 /// <summary>
49 /// Database manager 50 /// Database manager
50 /// </summary> 51 /// </summary>
51 private MSSQLManager m_database; 52 private PGSQLManager m_database;
52 private string m_connectionString; 53 private string m_connectionString;
53 54
55 protected virtual Assembly Assembly
56 {
57 get { return GetType().Assembly; }
58 }
59
54 #region IPlugin Members 60 #region IPlugin Members
55 61
56 override public void Dispose() { } 62 override public void Dispose() { }
@@ -61,7 +67,7 @@ namespace OpenSim.Data.MSSQL
61 // [Obsolete("Cannot be default-initialized!")] 67 // [Obsolete("Cannot be default-initialized!")]
62 override public void Initialise() 68 override public void Initialise()
63 { 69 {
64 m_log.Info("[MSSQLAssetData]: " + Name + " cannot be default-initialized!"); 70 m_log.Info("[PGSQLAssetData]: " + Name + " cannot be default-initialized!");
65 throw new PluginNotInitialisedException(Name); 71 throw new PluginNotInitialisedException(Name);
66 } 72 }
67 73
@@ -76,7 +82,7 @@ namespace OpenSim.Data.MSSQL
76 { 82 {
77 m_ticksToEpoch = new System.DateTime(1970, 1, 1).Ticks; 83 m_ticksToEpoch = new System.DateTime(1970, 1, 1).Ticks;
78 84
79 m_database = new MSSQLManager(connectionString); 85 m_database = new PGSQLManager(connectionString);
80 m_connectionString = connectionString; 86 m_connectionString = connectionString;
81 87
82 //New migration to check for DB changes 88 //New migration to check for DB changes
@@ -96,7 +102,7 @@ namespace OpenSim.Data.MSSQL
96 /// </summary> 102 /// </summary>
97 override public string Name 103 override public string Name
98 { 104 {
99 get { return "MSSQL Asset storage engine"; } 105 get { return "PGSQL Asset storage engine"; }
100 } 106 }
101 107
102 #endregion 108 #endregion
@@ -110,13 +116,13 @@ namespace OpenSim.Data.MSSQL
110 /// <returns></returns> 116 /// <returns></returns>
111 override public AssetBase GetAsset(UUID assetID) 117 override public AssetBase GetAsset(UUID assetID)
112 { 118 {
113 string sql = "SELECT * FROM assets WHERE id = @id"; 119 string sql = "SELECT * FROM assets WHERE id = :id";
114 using (SqlConnection conn = new SqlConnection(m_connectionString)) 120 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
115 using (SqlCommand cmd = new SqlCommand(sql, conn)) 121 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
116 { 122 {
117 cmd.Parameters.Add(m_database.CreateParameter("id", assetID)); 123 cmd.Parameters.Add(m_database.CreateParameter("id", assetID));
118 conn.Open(); 124 conn.Open();
119 using (SqlDataReader reader = cmd.ExecuteReader()) 125 using (NpgsqlDataReader reader = cmd.ExecuteReader())
120 { 126 {
121 if (reader.Read()) 127 if (reader.Read())
122 { 128 {
@@ -147,34 +153,38 @@ namespace OpenSim.Data.MSSQL
147 { 153 {
148 154
149 string sql = 155 string sql =
150 @"IF EXISTS(SELECT * FROM assets WHERE id=@id) 156 @"UPDATE assets set name = :name, description = :description, " + "\"assetType\" " + @" = :assetType,
151 UPDATE assets set name = @name, description = @description, assetType = @assetType, 157 local = :local, temporary = :temporary, creatorid = :creatorid, data = :data
152 local = @local, temporary = @temporary, creatorid = @creatorid, data = @data 158 WHERE id=:id;
153 WHERE id=@id 159
154 ELSE 160 INSERT INTO assets
155 INSERT INTO assets 161 (id, name, description, " + "\"assetType\" " + @", local,
156 ([id], [name], [description], [assetType], [local], 162 temporary, create_time, access_time, creatorid, asset_flags, data)
157 [temporary], [create_time], [access_time], [creatorid], [asset_flags], [data]) 163 Select :id, :name, :description, :assetType, :local,
158 VALUES 164 :temporary, :create_time, :access_time, :creatorid, :asset_flags, :data
159 (@id, @name, @description, @assetType, @local, 165 Where not EXISTS(SELECT * FROM assets WHERE id=:id)
160 @temporary, @create_time, @access_time, @creatorid, @asset_flags, @data)"; 166 ";
161 167
162 string assetName = asset.Name; 168 string assetName = asset.Name;
163 if (asset.Name.Length > 64) 169 if (asset.Name.Length > AssetBase.MAX_ASSET_NAME)
164 { 170 {
165 assetName = asset.Name.Substring(0, 64); 171 assetName = asset.Name.Substring(0, AssetBase.MAX_ASSET_NAME);
166 m_log.Warn("[ASSET DB]: Name field truncated from " + asset.Name.Length + " to " + assetName.Length + " characters on add"); 172 m_log.WarnFormat(
173 "[ASSET DB]: Name '{0}' for asset {1} truncated from {2} to {3} characters on add",
174 asset.Name, asset.ID, asset.Name.Length, assetName.Length);
167 } 175 }
168 176
169 string assetDescription = asset.Description; 177 string assetDescription = asset.Description;
170 if (asset.Description.Length > 64) 178 if (asset.Description.Length > AssetBase.MAX_ASSET_DESC)
171 { 179 {
172 assetDescription = asset.Description.Substring(0, 64); 180 assetDescription = asset.Description.Substring(0, AssetBase.MAX_ASSET_DESC);
173 m_log.Warn("[ASSET DB]: Description field truncated from " + asset.Description.Length + " to " + assetDescription.Length + " characters on add"); 181 m_log.WarnFormat(
182 "[ASSET DB]: Description '{0}' for asset {1} truncated from {2} to {3} characters on add",
183 asset.Description, asset.ID, asset.Description.Length, assetDescription.Length);
174 } 184 }
175 185
176 using (SqlConnection conn = new SqlConnection(m_connectionString)) 186 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
177 using (SqlCommand command = new SqlCommand(sql, conn)) 187 using (NpgsqlCommand command = new NpgsqlCommand(sql, conn))
178 { 188 {
179 int now = (int)((System.DateTime.Now.Ticks - m_ticksToEpoch) / 10000000); 189 int now = (int)((System.DateTime.Now.Ticks - m_ticksToEpoch) / 10000000);
180 command.Parameters.Add(m_database.CreateParameter("id", asset.FullID)); 190 command.Parameters.Add(m_database.CreateParameter("id", asset.FullID));
@@ -195,7 +205,7 @@ namespace OpenSim.Data.MSSQL
195 } 205 }
196 catch(Exception e) 206 catch(Exception e)
197 { 207 {
198 m_log.Error("[ASSET DB]: Error storing item :" + e.Message); 208 m_log.Error("[ASSET DB]: Error storing item :" + e.Message + " sql "+sql);
199 } 209 }
200 } 210 }
201 } 211 }
@@ -204,11 +214,11 @@ namespace OpenSim.Data.MSSQL
204// Commented out since currently unused - this probably should be called in GetAsset() 214// Commented out since currently unused - this probably should be called in GetAsset()
205// private void UpdateAccessTime(AssetBase asset) 215// private void UpdateAccessTime(AssetBase asset)
206// { 216// {
207// using (AutoClosingSqlCommand cmd = m_database.Query("UPDATE assets SET access_time = @access_time WHERE id=@id")) 217// using (AutoClosingSqlCommand cmd = m_database.Query("UPDATE assets SET access_time = :access_time WHERE id=:id"))
208// { 218// {
209// int now = (int)((System.DateTime.Now.Ticks - m_ticksToEpoch) / 10000000); 219// int now = (int)((System.DateTime.Now.Ticks - m_ticksToEpoch) / 10000000);
210// cmd.Parameters.AddWithValue("@id", asset.FullID.ToString()); 220// cmd.Parameters.AddWithValue(":id", asset.FullID.ToString());
211// cmd.Parameters.AddWithValue("@access_time", now); 221// cmd.Parameters.AddWithValue(":access_time", now);
212// try 222// try
213// { 223// {
214// cmd.ExecuteNonQuery(); 224// cmd.ExecuteNonQuery();
@@ -221,17 +231,38 @@ namespace OpenSim.Data.MSSQL
221// } 231// }
222 232
223 /// <summary> 233 /// <summary>
224 /// Check if asset exist in m_database 234 /// Check if the assets exist in the database.
225 /// </summary> 235 /// </summary>
226 /// <param name="uuid"></param> 236 /// <param name="uuids">The assets' IDs</param>
227 /// <returns>true if exist.</returns> 237 /// <returns>For each asset: true if it exists, false otherwise</returns>
228 override public bool ExistsAsset(UUID uuid) 238 public override bool[] AssetsExist(UUID[] uuids)
229 { 239 {
230 if (GetAsset(uuid) != null) 240 if (uuids.Length == 0)
241 return new bool[0];
242
243 HashSet<UUID> exist = new HashSet<UUID>();
244
245 string ids = "'" + string.Join("','", uuids) + "'";
246 string sql = string.Format("SELECT id FROM assets WHERE id IN ({0})", ids);
247
248 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
249 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
231 { 250 {
232 return true; 251 conn.Open();
252 using (NpgsqlDataReader reader = cmd.ExecuteReader())
253 {
254 while (reader.Read())
255 {
256 UUID id = DBGuid.FromDB(reader["id"]);
257 exist.Add(id);
258 }
259 }
233 } 260 }
234 return false; 261
262 bool[] results = new bool[uuids.Length];
263 for (int i = 0; i < uuids.Length; i++)
264 results[i] = exist.Contains(uuids[i]);
265 return results;
235 } 266 }
236 267
237 /// <summary> 268 /// <summary>
@@ -245,23 +276,19 @@ namespace OpenSim.Data.MSSQL
245 public override List<AssetMetadata> FetchAssetMetadataSet(int start, int count) 276 public override List<AssetMetadata> FetchAssetMetadataSet(int start, int count)
246 { 277 {
247 List<AssetMetadata> retList = new List<AssetMetadata>(count); 278 List<AssetMetadata> retList = new List<AssetMetadata>(count);
248 string sql = @"WITH OrderedAssets AS 279 string sql = @" SELECT id, name, description, " + "\"assetType\"" + @", temporary, creatorid
249 ( 280 FROM assets
250 SELECT id, name, description, assetType, temporary, creatorid, 281 order by id
251 RowNumber = ROW_NUMBER() OVER (ORDER BY id) 282 limit :stop
252 FROM assets 283 offset :start;";
253 )
254 SELECT *
255 FROM OrderedAssets
256 WHERE RowNumber BETWEEN @start AND @stop;";
257 284
258 using (SqlConnection conn = new SqlConnection(m_connectionString)) 285 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
259 using (SqlCommand cmd = new SqlCommand(sql, conn)) 286 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
260 { 287 {
261 cmd.Parameters.Add(m_database.CreateParameter("start", start)); 288 cmd.Parameters.Add(m_database.CreateParameter("start", start));
262 cmd.Parameters.Add(m_database.CreateParameter("stop", start + count - 1)); 289 cmd.Parameters.Add(m_database.CreateParameter("stop", start + count - 1));
263 conn.Open(); 290 conn.Open();
264 using (SqlDataReader reader = cmd.ExecuteReader()) 291 using (NpgsqlDataReader reader = cmd.ExecuteReader())
265 { 292 {
266 while (reader.Read()) 293 while (reader.Read())
267 { 294 {
diff --git a/OpenSim/Data/MSSQL/MSSQLAuthenticationData.cs b/OpenSim/Data/PGSQL/PGSQLAuthenticationData.cs
index 1ae78c4..d174112 100644
--- a/OpenSim/Data/MSSQL/MSSQLAuthenticationData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLAuthenticationData.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -28,32 +28,38 @@
28using System; 28using System;
29using System.Collections; 29using System.Collections;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.Data;
32using OpenMetaverse; 31using OpenMetaverse;
33using OpenSim.Framework; 32using OpenSim.Framework;
34using System.Data.SqlClient;
35using System.Reflection; 33using System.Reflection;
36using System.Text; 34using System.Text;
35using System.Data;
36using Npgsql;
37using NpgsqlTypes;
37 38
38namespace OpenSim.Data.MSSQL 39namespace OpenSim.Data.PGSQL
39{ 40{
40 public class MSSQLAuthenticationData : IAuthenticationData 41 public class PGSQLAuthenticationData : IAuthenticationData
41 { 42 {
42 private string m_Realm; 43 private string m_Realm;
43 private List<string> m_ColumnNames = null; 44 private List<string> m_ColumnNames = null;
44 private int m_LastExpire = 0; 45 private int m_LastExpire = 0;
45 private string m_ConnectionString; 46 private string m_ConnectionString;
46 private MSSQLManager m_database; 47 private PGSQLManager m_database;
48
49 protected virtual Assembly Assembly
50 {
51 get { return GetType().Assembly; }
52 }
47 53
48 public MSSQLAuthenticationData(string connectionString, string realm) 54 public PGSQLAuthenticationData(string connectionString, string realm)
49 { 55 {
50 m_Realm = realm; 56 m_Realm = realm;
51 m_ConnectionString = connectionString; 57 m_ConnectionString = connectionString;
52 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 58 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
53 { 59 {
54 conn.Open(); 60 conn.Open();
55 Migration m = new Migration(conn, GetType().Assembly, "AuthStore"); 61 Migration m = new Migration(conn, GetType().Assembly, "AuthStore");
56 m_database = new MSSQLManager(m_ConnectionString); 62 m_database = new PGSQLManager(m_ConnectionString);
57 m.Update(); 63 m.Update();
58 } 64 }
59 } 65 }
@@ -63,14 +69,14 @@ namespace OpenSim.Data.MSSQL
63 AuthenticationData ret = new AuthenticationData(); 69 AuthenticationData ret = new AuthenticationData();
64 ret.Data = new Dictionary<string, object>(); 70 ret.Data = new Dictionary<string, object>();
65 71
66 string sql = string.Format("select * from {0} where UUID = @principalID", m_Realm); 72 string sql = string.Format("select * from {0} where uuid = :principalID", m_Realm);
67 73
68 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 74 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
69 using (SqlCommand cmd = new SqlCommand(sql, conn)) 75 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
70 { 76 {
71 cmd.Parameters.Add(m_database.CreateParameter("@principalID", principalID)); 77 cmd.Parameters.Add(m_database.CreateParameter("principalID", principalID));
72 conn.Open(); 78 conn.Open();
73 using (SqlDataReader result = cmd.ExecuteReader()) 79 using (NpgsqlDataReader result = cmd.ExecuteReader())
74 { 80 {
75 if (result.Read()) 81 if (result.Read())
76 { 82 {
@@ -87,7 +93,7 @@ namespace OpenSim.Data.MSSQL
87 93
88 foreach (string s in m_ColumnNames) 94 foreach (string s in m_ColumnNames)
89 { 95 {
90 if (s == "UUID") 96 if (s == "UUID"||s == "uuid")
91 continue; 97 continue;
92 98
93 ret.Data[s] = result[s].ToString(); 99 ret.Data[s] = result[s].ToString();
@@ -103,12 +109,31 @@ namespace OpenSim.Data.MSSQL
103 { 109 {
104 if (data.Data.ContainsKey("UUID")) 110 if (data.Data.ContainsKey("UUID"))
105 data.Data.Remove("UUID"); 111 data.Data.Remove("UUID");
112 if (data.Data.ContainsKey("uuid"))
113 data.Data.Remove("uuid");
114
115 /*
116 Dictionary<string, object> oAuth = new Dictionary<string, object>();
106 117
118 foreach (KeyValuePair<string, object> oDado in data.Data)
119 {
120 if (oDado.Key != oDado.Key.ToLower())
121 {
122 oAuth.Add(oDado.Key.ToLower(), oDado.Value);
123 }
124 }
125 foreach (KeyValuePair<string, object> oDado in data.Data)
126 {
127 if (!oAuth.ContainsKey(oDado.Key.ToLower())) {
128 oAuth.Add(oDado.Key.ToLower(), oDado.Value);
129 }
130 }
131 */
107 string[] fields = new List<string>(data.Data.Keys).ToArray(); 132 string[] fields = new List<string>(data.Data.Keys).ToArray();
108 StringBuilder updateBuilder = new StringBuilder(); 133 StringBuilder updateBuilder = new StringBuilder();
109 134
110 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 135 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
111 using (SqlCommand cmd = new SqlCommand()) 136 using (NpgsqlCommand cmd = new NpgsqlCommand())
112 { 137 {
113 updateBuilder.AppendFormat("update {0} set ", m_Realm); 138 updateBuilder.AppendFormat("update {0} set ", m_Realm);
114 139
@@ -117,27 +142,28 @@ namespace OpenSim.Data.MSSQL
117 { 142 {
118 if (!first) 143 if (!first)
119 updateBuilder.Append(", "); 144 updateBuilder.Append(", ");
120 updateBuilder.AppendFormat("{0} = @{0}",field); 145 updateBuilder.AppendFormat("\"{0}\" = :{0}",field);
121 146
122 first = false; 147 first = false;
123 cmd.Parameters.Add(m_database.CreateParameter("@" + field, data.Data[field])); 148
149 cmd.Parameters.Add(m_database.CreateParameter("" + field, data.Data[field]));
124 } 150 }
125 151
126 updateBuilder.Append(" where UUID = @principalID"); 152 updateBuilder.Append(" where uuid = :principalID");
127 153
128 cmd.CommandText = updateBuilder.ToString(); 154 cmd.CommandText = updateBuilder.ToString();
129 cmd.Connection = conn; 155 cmd.Connection = conn;
130 cmd.Parameters.Add(m_database.CreateParameter("@principalID", data.PrincipalID)); 156 cmd.Parameters.Add(m_database.CreateParameter("principalID", data.PrincipalID));
131 157
132 conn.Open(); 158 conn.Open();
133 if (cmd.ExecuteNonQuery() < 1) 159 if (cmd.ExecuteNonQuery() < 1)
134 { 160 {
135 StringBuilder insertBuilder = new StringBuilder(); 161 StringBuilder insertBuilder = new StringBuilder();
136 162
137 insertBuilder.AppendFormat("insert into {0} (UUID, ", m_Realm); 163 insertBuilder.AppendFormat("insert into {0} (uuid, \"", m_Realm);
138 insertBuilder.Append(String.Join(", ", fields)); 164 insertBuilder.Append(String.Join("\", \"", fields));
139 insertBuilder.Append(") values (@principalID, @"); 165 insertBuilder.Append("\") values (:principalID, :");
140 insertBuilder.Append(String.Join(", @", fields)); 166 insertBuilder.Append(String.Join(", :", fields));
141 insertBuilder.Append(")"); 167 insertBuilder.Append(")");
142 168
143 cmd.CommandText = insertBuilder.ToString(); 169 cmd.CommandText = insertBuilder.ToString();
@@ -153,11 +179,11 @@ namespace OpenSim.Data.MSSQL
153 179
154 public bool SetDataItem(UUID principalID, string item, string value) 180 public bool SetDataItem(UUID principalID, string item, string value)
155 { 181 {
156 string sql = string.Format("update {0} set {1} = @{1} where UUID = @UUID", m_Realm, item); 182 string sql = string.Format("update {0} set {1} = :{1} where uuid = :UUID", m_Realm, item);
157 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 183 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
158 using (SqlCommand cmd = new SqlCommand(sql, conn)) 184 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
159 { 185 {
160 cmd.Parameters.Add(m_database.CreateParameter("@" + item, value)); 186 cmd.Parameters.Add(m_database.CreateParameter("" + item, value));
161 conn.Open(); 187 conn.Open();
162 if (cmd.ExecuteNonQuery() > 0) 188 if (cmd.ExecuteNonQuery() > 0)
163 return true; 189 return true;
@@ -170,13 +196,13 @@ namespace OpenSim.Data.MSSQL
170 if (System.Environment.TickCount - m_LastExpire > 30000) 196 if (System.Environment.TickCount - m_LastExpire > 30000)
171 DoExpire(); 197 DoExpire();
172 198
173 string sql = "insert into tokens (UUID, token, validity) values (@principalID, @token, @lifetime)"; 199 string sql = "insert into tokens (uuid, token, validity) values (:principalID, :token, :lifetime)";
174 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 200 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
175 using (SqlCommand cmd = new SqlCommand(sql, conn)) 201 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
176 { 202 {
177 cmd.Parameters.Add(m_database.CreateParameter("@principalID", principalID)); 203 cmd.Parameters.Add(m_database.CreateParameter("principalID", principalID));
178 cmd.Parameters.Add(m_database.CreateParameter("@token", token)); 204 cmd.Parameters.Add(m_database.CreateParameter("token", token));
179 cmd.Parameters.Add(m_database.CreateParameter("@lifetime", DateTime.Now.AddMinutes(lifetime))); 205 cmd.Parameters.Add(m_database.CreateParameter("lifetime", DateTime.Now.AddMinutes(lifetime)));
180 conn.Open(); 206 conn.Open();
181 207
182 if (cmd.ExecuteNonQuery() > 0) 208 if (cmd.ExecuteNonQuery() > 0)
@@ -193,13 +219,14 @@ namespace OpenSim.Data.MSSQL
193 DoExpire(); 219 DoExpire();
194 220
195 DateTime validDate = DateTime.Now.AddMinutes(lifetime); 221 DateTime validDate = DateTime.Now.AddMinutes(lifetime);
196 string sql = "update tokens set validity = @validDate where UUID = @principalID and token = @token and validity > GetDate()"; 222 string sql = "update tokens set validity = :validDate where uuid = :principalID and token = :token and validity > (CURRENT_DATE + CURRENT_TIME)";
197 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 223
198 using (SqlCommand cmd = new SqlCommand(sql, conn)) 224 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
225 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
199 { 226 {
200 cmd.Parameters.Add(m_database.CreateParameter("@principalID", principalID)); 227 cmd.Parameters.Add(m_database.CreateParameter("principalID", principalID));
201 cmd.Parameters.Add(m_database.CreateParameter("@token", token)); 228 cmd.Parameters.Add(m_database.CreateParameter("token", token));
202 cmd.Parameters.Add(m_database.CreateParameter("@validDate", validDate)); 229 cmd.Parameters.Add(m_database.CreateParameter("validDate", validDate));
203 conn.Open(); 230 conn.Open();
204 231
205 if (cmd.ExecuteNonQuery() > 0) 232 if (cmd.ExecuteNonQuery() > 0)
@@ -213,12 +240,12 @@ namespace OpenSim.Data.MSSQL
213 private void DoExpire() 240 private void DoExpire()
214 { 241 {
215 DateTime currentDateTime = DateTime.Now; 242 DateTime currentDateTime = DateTime.Now;
216 string sql = "delete from tokens where validity < @currentDateTime"; 243 string sql = "delete from tokens where validity < :currentDateTime";
217 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 244 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
218 using (SqlCommand cmd = new SqlCommand(sql, conn)) 245 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
219 { 246 {
220 conn.Open(); 247 conn.Open();
221 cmd.Parameters.Add(m_database.CreateParameter("@currentDateTime", currentDateTime)); 248 cmd.Parameters.Add(m_database.CreateParameter("currentDateTime", currentDateTime));
222 cmd.ExecuteNonQuery(); 249 cmd.ExecuteNonQuery();
223 } 250 }
224 m_LastExpire = System.Environment.TickCount; 251 m_LastExpire = System.Environment.TickCount;
diff --git a/OpenSim/Data/MSSQL/MSSQLAvatarData.cs b/OpenSim/Data/PGSQL/PGSQLAvatarData.cs
index 301b424..d9c4905 100644
--- a/OpenSim/Data/MSSQL/MSSQLAvatarData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLAvatarData.cs
@@ -27,38 +27,39 @@
27 27
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Data;
31using System.Reflection; 30using System.Reflection;
32using System.Threading; 31using System.Threading;
33using log4net; 32using log4net;
34using OpenMetaverse; 33using OpenMetaverse;
35using OpenSim.Framework; 34using OpenSim.Framework;
36using System.Data.SqlClient; 35using Npgsql;
36using NpgsqlTypes;
37 37
38namespace OpenSim.Data.MSSQL 38
39namespace OpenSim.Data.PGSQL
39{ 40{
40 /// <summary> 41 /// <summary>
41 /// A MSSQL Interface for Avatar Storage 42 /// A PGSQL Interface for Avatar Storage
42 /// </summary> 43 /// </summary>
43 public class MSSQLAvatarData : MSSQLGenericTableHandler<AvatarBaseData>, 44 public class PGSQLAvatarData : PGSQLGenericTableHandler<AvatarBaseData>,
44 IAvatarData 45 IAvatarData
45 { 46 {
46// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 47// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47 48
48 public MSSQLAvatarData(string connectionString, string realm) : 49 public PGSQLAvatarData(string connectionString, string realm) :
49 base(connectionString, realm, "Avatar") 50 base(connectionString, realm, "Avatar")
50 { 51 {
51 } 52 }
52 53
53 public bool Delete(UUID principalID, string name) 54 public bool Delete(UUID principalID, string name)
54 { 55 {
55 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 56 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
56 using (SqlCommand cmd = new SqlCommand()) 57 using (NpgsqlCommand cmd = new NpgsqlCommand())
57 { 58 {
58 59
59 cmd.CommandText = String.Format("DELETE FROM {0} where [PrincipalID] = @PrincipalID and [Name] = @Name", m_Realm); 60 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("PrincipalID", principalID));
61 cmd.Parameters.Add(m_database.CreateParameter("@Name", name)); 62 cmd.Parameters.Add(m_database.CreateParameter("Name", name));
62 cmd.Connection = conn; 63 cmd.Connection = conn;
63 conn.Open(); 64 conn.Open();
64 if (cmd.ExecuteNonQuery() > 0) 65 if (cmd.ExecuteNonQuery() > 0)
diff --git a/OpenSim/Data/MSSQL/MSSQLEstateData.cs b/OpenSim/Data/PGSQL/PGSQLEstateData.cs
index 1faa249..b5ca235 100644
--- a/OpenSim/Data/MSSQL/MSSQLEstateData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLEstateData.cs
@@ -27,38 +27,44 @@
27 27
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Data;
31using System.Data.SqlClient;
32using System.Reflection; 30using System.Reflection;
33using log4net; 31using log4net;
34using OpenMetaverse; 32using OpenMetaverse;
35using OpenSim.Framework; 33using OpenSim.Framework;
36using OpenSim.Region.Framework.Interfaces; 34using OpenSim.Region.Framework.Interfaces;
35using System.Data;
36using Npgsql;
37using NpgsqlTypes;
37 38
38namespace OpenSim.Data.MSSQL 39namespace OpenSim.Data.PGSQL
39{ 40{
40 public class MSSQLEstateStore : IEstateDataStore 41 public class PGSQLEstateStore : IEstateDataStore
41 { 42 {
42 private const string _migrationStore = "EstateStore"; 43 private const string _migrationStore = "EstateStore";
43 44
44 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 45 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45 46
46 private MSSQLManager _Database; 47 private PGSQLManager _Database;
47 private string m_connectionString; 48 private string m_connectionString;
48 private FieldInfo[] _Fields; 49 private FieldInfo[] _Fields;
49 private Dictionary<string, FieldInfo> _FieldMap = new Dictionary<string, FieldInfo>(); 50 private Dictionary<string, FieldInfo> _FieldMap = new Dictionary<string, FieldInfo>();
50 51
51 #region Public methods 52 #region Public methods
52 53
53 public MSSQLEstateStore() 54 public PGSQLEstateStore()
54 { 55 {
55 } 56 }
56 57
57 public MSSQLEstateStore(string connectionString) 58 public PGSQLEstateStore(string connectionString)
58 { 59 {
59 Initialise(connectionString); 60 Initialise(connectionString);
60 } 61 }
61 62
63 protected virtual Assembly Assembly
64 {
65 get { return GetType().Assembly; }
66 }
67
62 /// <summary> 68 /// <summary>
63 /// Initialises the estatedata class. 69 /// Initialises the estatedata class.
64 /// </summary> 70 /// </summary>
@@ -68,11 +74,11 @@ namespace OpenSim.Data.MSSQL
68 if (!string.IsNullOrEmpty(connectionString)) 74 if (!string.IsNullOrEmpty(connectionString))
69 { 75 {
70 m_connectionString = connectionString; 76 m_connectionString = connectionString;
71 _Database = new MSSQLManager(connectionString); 77 _Database = new PGSQLManager(connectionString);
72 } 78 }
73 79
74 //Migration settings 80 //Migration settings
75 using (SqlConnection conn = new SqlConnection(m_connectionString)) 81 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
76 { 82 {
77 conn.Open(); 83 conn.Open();
78 Migration m = new Migration(conn, GetType().Assembly, "EstateStore"); 84 Migration m = new Migration(conn, GetType().Assembly, "EstateStore");
@@ -101,15 +107,17 @@ namespace OpenSim.Data.MSSQL
101 { 107 {
102 EstateSettings es = new EstateSettings(); 108 EstateSettings es = new EstateSettings();
103 109
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"; 110 string sql = "select estate_settings.\"" + String.Join("\",estate_settings.\"", FieldList) +
111 "\" from estate_map left join estate_settings on estate_map.\"EstateID\" = estate_settings.\"EstateID\" " +
112 " where estate_settings.\"EstateID\" is not null and \"RegionID\" = :RegionID";
105 113
106 bool insertEstate = false; 114 bool insertEstate = false;
107 using (SqlConnection conn = new SqlConnection(m_connectionString)) 115 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
108 using (SqlCommand cmd = new SqlCommand(sql, conn)) 116 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
109 { 117 {
110 cmd.Parameters.Add(_Database.CreateParameter("@RegionID", regionID)); 118 cmd.Parameters.Add(_Database.CreateParameter("RegionID", regionID));
111 conn.Open(); 119 conn.Open();
112 using (SqlDataReader reader = cmd.ExecuteReader()) 120 using (NpgsqlDataReader reader = cmd.ExecuteReader())
113 { 121 {
114 if (reader.Read()) 122 if (reader.Read())
115 { 123 {
@@ -119,11 +127,15 @@ namespace OpenSim.Data.MSSQL
119 object v = reader[name]; 127 object v = reader[name];
120 if (f.FieldType == typeof(bool)) 128 if (f.FieldType == typeof(bool))
121 { 129 {
122 f.SetValue(es, Convert.ToInt32(v) != 0); 130 f.SetValue(es, v);
123 } 131 }
124 else if (f.FieldType == typeof(UUID)) 132 else if (f.FieldType == typeof(UUID))
125 { 133 {
126 f.SetValue(es, new UUID((Guid)v)); // uuid); 134 UUID estUUID = UUID.Zero;
135
136 UUID.TryParse(v.ToString(), out estUUID);
137
138 f.SetValue(es, estUUID);
127 } 139 }
128 else if (f.FieldType == typeof(string)) 140 else if (f.FieldType == typeof(string))
129 { 141 {
@@ -187,25 +199,37 @@ namespace OpenSim.Data.MSSQL
187 199
188 names.Remove("EstateID"); 200 names.Remove("EstateID");
189 201
190 string sql = string.Format("insert into estate_settings ({0}) values ( @{1})", String.Join(",", names.ToArray()), String.Join(", @", names.ToArray())); 202 string sql = string.Format("insert into estate_settings (\"{0}\") values ( :{1} )", String.Join("\",\"", names.ToArray()), String.Join(", :", names.ToArray()));
191 203
192 //_Log.Debug("[DB ESTATE]: SQL: " + sql); 204 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
193 using (SqlConnection conn = new SqlConnection(m_connectionString)) 205 using (NpgsqlCommand insertCommand = new NpgsqlCommand(sql, conn))
194 using (SqlCommand insertCommand = new SqlCommand(sql, conn))
195 { 206 {
196 insertCommand.CommandText = sql + " SET @ID = SCOPE_IDENTITY()"; 207 insertCommand.CommandText = sql;
197 208
198 foreach (string name in names) 209 foreach (string name in names)
199 { 210 {
200 insertCommand.Parameters.Add(_Database.CreateParameter("@" + name, _FieldMap[name].GetValue(es))); 211 insertCommand.Parameters.Add(_Database.CreateParameter("" + name, _FieldMap[name].GetValue(es)));
201 } 212 }
202 SqlParameter idParameter = new SqlParameter("@ID", SqlDbType.Int); 213 //NpgsqlParameter idParameter = new NpgsqlParameter("ID", SqlDbType.Int);
203 idParameter.Direction = ParameterDirection.Output; 214 //idParameter.Direction = ParameterDirection.Output;
204 insertCommand.Parameters.Add(idParameter); 215 //insertCommand.Parameters.Add(idParameter);
205 conn.Open(); 216 conn.Open();
206 insertCommand.ExecuteNonQuery();
207 217
208 es.EstateID = Convert.ToUInt32(idParameter.Value); 218 es.EstateID = 100;
219
220 if (insertCommand.ExecuteNonQuery() > 0)
221 {
222 insertCommand.CommandText = "Select cast(lastval() as int) as ID ;";
223
224 using (NpgsqlDataReader result = insertCommand.ExecuteReader())
225 {
226 if (result.Read())
227 {
228 es.EstateID = (uint)result.GetInt32(0);
229 }
230 }
231 }
232
209 } 233 }
210 234
211 //TODO check if this is needed?? 235 //TODO check if this is needed??
@@ -225,20 +249,20 @@ namespace OpenSim.Data.MSSQL
225 string sql = string.Format("UPDATE estate_settings SET "); 249 string sql = string.Format("UPDATE estate_settings SET ");
226 foreach (string name in names) 250 foreach (string name in names)
227 { 251 {
228 sql += name + " = @" + name + ", "; 252 sql += "\"" + name + "\" = :" + name + ", ";
229 } 253 }
230 sql = sql.Remove(sql.LastIndexOf(",")); 254 sql = sql.Remove(sql.LastIndexOf(","));
231 sql += " WHERE EstateID = @EstateID"; 255 sql += " WHERE \"EstateID\" = :EstateID";
232 256
233 using (SqlConnection conn = new SqlConnection(m_connectionString)) 257 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
234 using (SqlCommand cmd = new SqlCommand(sql, conn)) 258 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
235 { 259 {
236 foreach (string name in names) 260 foreach (string name in names)
237 { 261 {
238 cmd.Parameters.Add(_Database.CreateParameter("@" + name, _FieldMap[name].GetValue(es))); 262 cmd.Parameters.Add(_Database.CreateParameter("" + name, _FieldMap[name].GetValue(es)));
239 } 263 }
240 264
241 cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID)); 265 cmd.Parameters.Add(_Database.CreateParameter("EstateID", es.EstateID));
242 conn.Open(); 266 conn.Open();
243 cmd.ExecuteNonQuery(); 267 cmd.ExecuteNonQuery();
244 } 268 }
@@ -262,16 +286,16 @@ namespace OpenSim.Data.MSSQL
262 { 286 {
263 es.ClearBans(); 287 es.ClearBans();
264 288
265 string sql = "select bannedUUID from estateban where EstateID = @EstateID"; 289 string sql = "select \"bannedUUID\" from estateban where \"EstateID\" = :EstateID";
266 290
267 using (SqlConnection conn = new SqlConnection(m_connectionString)) 291 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
268 using (SqlCommand cmd = new SqlCommand(sql, conn)) 292 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
269 { 293 {
270 SqlParameter idParameter = new SqlParameter("@EstateID", SqlDbType.Int); 294 NpgsqlParameter idParameter = new NpgsqlParameter("EstateID", DbType.Int32);
271 idParameter.Value = es.EstateID; 295 idParameter.Value = es.EstateID;
272 cmd.Parameters.Add(idParameter); 296 cmd.Parameters.Add(idParameter);
273 conn.Open(); 297 conn.Open();
274 using (SqlDataReader reader = cmd.ExecuteReader()) 298 using (NpgsqlDataReader reader = cmd.ExecuteReader())
275 { 299 {
276 while (reader.Read()) 300 while (reader.Read())
277 { 301 {
@@ -290,14 +314,14 @@ namespace OpenSim.Data.MSSQL
290 { 314 {
291 List<UUID> uuids = new List<UUID>(); 315 List<UUID> uuids = new List<UUID>();
292 316
293 string sql = string.Format("select uuid from {0} where EstateID = @EstateID", table); 317 string sql = string.Format("select uuid from {0} where \"EstateID\" = :EstateID", table);
294 318
295 using (SqlConnection conn = new SqlConnection(m_connectionString)) 319 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
296 using (SqlCommand cmd = new SqlCommand(sql, conn)) 320 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
297 { 321 {
298 cmd.Parameters.Add(_Database.CreateParameter("@EstateID", estateID)); 322 cmd.Parameters.Add(_Database.CreateParameter("EstateID", estateID));
299 conn.Open(); 323 conn.Open();
300 using (SqlDataReader reader = cmd.ExecuteReader()) 324 using (NpgsqlDataReader reader = cmd.ExecuteReader())
301 { 325 {
302 while (reader.Read()) 326 while (reader.Read())
303 { 327 {
@@ -312,21 +336,21 @@ namespace OpenSim.Data.MSSQL
312 private void SaveBanList(EstateSettings es) 336 private void SaveBanList(EstateSettings es)
313 { 337 {
314 //Delete first 338 //Delete first
315 using (SqlConnection conn = new SqlConnection(m_connectionString)) 339 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
316 { 340 {
317 conn.Open(); 341 conn.Open();
318 using (SqlCommand cmd = conn.CreateCommand()) 342 using (NpgsqlCommand cmd = conn.CreateCommand())
319 { 343 {
320 cmd.CommandText = "delete from estateban where EstateID = @EstateID"; 344 cmd.CommandText = "delete from estateban where \"EstateID\" = :EstateID";
321 cmd.Parameters.AddWithValue("@EstateID", (int)es.EstateID); 345 cmd.Parameters.AddWithValue("EstateID", (int)es.EstateID);
322 cmd.ExecuteNonQuery(); 346 cmd.ExecuteNonQuery();
323 347
324 //Insert after 348 //Insert after
325 cmd.CommandText = "insert into estateban (EstateID, bannedUUID,bannedIp, bannedIpHostMask, bannedNameMask) values ( @EstateID, @bannedUUID, '','','' )"; 349 cmd.CommandText = "insert into estateban (\"EstateID\", \"bannedUUID\",\"bannedIp\", \"bannedIpHostMask\", \"bannedNameMask\") values ( :EstateID, :bannedUUID, '','','' )";
326 cmd.Parameters.AddWithValue("@bannedUUID", Guid.Empty); 350 cmd.Parameters.AddWithValue("bannedUUID", Guid.Empty);
327 foreach (EstateBan b in es.EstateBans) 351 foreach (EstateBan b in es.EstateBans)
328 { 352 {
329 cmd.Parameters["@bannedUUID"].Value = b.BannedUserID.Guid; 353 cmd.Parameters["bannedUUID"].Value = b.BannedUserID.Guid;
330 cmd.ExecuteNonQuery(); 354 cmd.ExecuteNonQuery();
331 } 355 }
332 } 356 }
@@ -335,20 +359,20 @@ namespace OpenSim.Data.MSSQL
335 359
336 private void SaveUUIDList(uint estateID, string table, UUID[] data) 360 private void SaveUUIDList(uint estateID, string table, UUID[] data)
337 { 361 {
338 using (SqlConnection conn = new SqlConnection(m_connectionString)) 362 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
339 { 363 {
340 conn.Open(); 364 conn.Open();
341 using (SqlCommand cmd = conn.CreateCommand()) 365 using (NpgsqlCommand cmd = conn.CreateCommand())
342 { 366 {
343 cmd.Parameters.AddWithValue("@EstateID", (int)estateID); 367 cmd.Parameters.AddWithValue("EstateID", (int)estateID);
344 cmd.CommandText = string.Format("delete from {0} where EstateID = @EstateID", table); 368 cmd.CommandText = string.Format("delete from {0} where \"EstateID\" = :EstateID", table);
345 cmd.ExecuteNonQuery(); 369 cmd.ExecuteNonQuery();
346 370
347 cmd.CommandText = string.Format("insert into {0} (EstateID, uuid) values ( @EstateID, @uuid )", table); 371 cmd.CommandText = string.Format("insert into {0} (\"EstateID\", uuid) values ( :EstateID, :uuid )", table);
348 cmd.Parameters.AddWithValue("@uuid", Guid.Empty); 372 cmd.Parameters.AddWithValue("uuid", Guid.Empty);
349 foreach (UUID uuid in data) 373 foreach (UUID uuid in data)
350 { 374 {
351 cmd.Parameters["@uuid"].Value = uuid.Guid; //.ToString(); //TODO check if this works 375 cmd.Parameters["uuid"].Value = uuid.Guid; //.ToString(); //TODO check if this works
352 cmd.ExecuteNonQuery(); 376 cmd.ExecuteNonQuery();
353 } 377 }
354 } 378 }
@@ -358,14 +382,14 @@ namespace OpenSim.Data.MSSQL
358 public EstateSettings LoadEstateSettings(int estateID) 382 public EstateSettings LoadEstateSettings(int estateID)
359 { 383 {
360 EstateSettings es = new EstateSettings(); 384 EstateSettings es = new EstateSettings();
361 string sql = "select estate_settings." + String.Join(",estate_settings.", FieldList) + " from estate_settings where EstateID = @EstateID"; 385 string sql = "select estate_settings.\"" + String.Join("\",estate_settings.\"", FieldList) + "\" from estate_settings where \"EstateID\" = :EstateID";
362 using (SqlConnection conn = new SqlConnection(m_connectionString)) 386 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
363 { 387 {
364 conn.Open(); 388 conn.Open();
365 using (SqlCommand cmd = new SqlCommand(sql, conn)) 389 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
366 { 390 {
367 cmd.Parameters.AddWithValue("@EstateID", (int)estateID); 391 cmd.Parameters.AddWithValue("EstateID", (int)estateID);
368 using (SqlDataReader reader = cmd.ExecuteReader()) 392 using (NpgsqlDataReader reader = cmd.ExecuteReader())
369 { 393 {
370 if (reader.Read()) 394 if (reader.Read())
371 { 395 {
@@ -428,13 +452,13 @@ namespace OpenSim.Data.MSSQL
428 public List<int> GetEstates(string search) 452 public List<int> GetEstates(string search)
429 { 453 {
430 List<int> result = new List<int>(); 454 List<int> result = new List<int>();
431 string sql = "select estateID from estate_settings where EstateName = @EstateName"; 455 string sql = "select \"EstateID\" from estate_settings where lower(\"EstateName\") = lower(:EstateName)";
432 using (SqlConnection conn = new SqlConnection(m_connectionString)) 456 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
433 { 457 {
434 conn.Open(); 458 conn.Open();
435 using (SqlCommand cmd = new SqlCommand(sql, conn)) 459 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
436 { 460 {
437 cmd.Parameters.AddWithValue("@EstateName", search); 461 cmd.Parameters.AddWithValue("EstateName", search);
438 462
439 using (IDataReader reader = cmd.ExecuteReader()) 463 using (IDataReader reader = cmd.ExecuteReader())
440 { 464 {
@@ -453,11 +477,11 @@ namespace OpenSim.Data.MSSQL
453 public List<int> GetEstatesAll() 477 public List<int> GetEstatesAll()
454 { 478 {
455 List<int> result = new List<int>(); 479 List<int> result = new List<int>();
456 string sql = "select estateID from estate_settings"; 480 string sql = "select \"EstateID\" from estate_settings";
457 using (SqlConnection conn = new SqlConnection(m_connectionString)) 481 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
458 { 482 {
459 conn.Open(); 483 conn.Open();
460 using (SqlCommand cmd = new SqlCommand(sql, conn)) 484 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
461 { 485 {
462 using (IDataReader reader = cmd.ExecuteReader()) 486 using (IDataReader reader = cmd.ExecuteReader())
463 { 487 {
@@ -476,13 +500,13 @@ namespace OpenSim.Data.MSSQL
476 public List<int> GetEstatesByOwner(UUID ownerID) 500 public List<int> GetEstatesByOwner(UUID ownerID)
477 { 501 {
478 List<int> result = new List<int>(); 502 List<int> result = new List<int>();
479 string sql = "select estateID from estate_settings where EstateOwner = @EstateOwner"; 503 string sql = "select \"EstateID\" from estate_settings where \"EstateOwner\" = :EstateOwner";
480 using (SqlConnection conn = new SqlConnection(m_connectionString)) 504 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
481 { 505 {
482 conn.Open(); 506 conn.Open();
483 using (SqlCommand cmd = new SqlCommand(sql, conn)) 507 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
484 { 508 {
485 cmd.Parameters.AddWithValue("@EstateOwner", ownerID); 509 cmd.Parameters.AddWithValue("EstateOwner", ownerID);
486 510
487 using (IDataReader reader = cmd.ExecuteReader()) 511 using (IDataReader reader = cmd.ExecuteReader())
488 { 512 {
@@ -500,28 +524,29 @@ namespace OpenSim.Data.MSSQL
500 524
501 public bool LinkRegion(UUID regionID, int estateID) 525 public bool LinkRegion(UUID regionID, int estateID)
502 { 526 {
503 string deleteSQL = "delete from estate_map where RegionID = @RegionID"; 527 string deleteSQL = "delete from estate_map where \"RegionID\" = :RegionID";
504 string insertSQL = "insert into estate_map values (@RegionID, @EstateID)"; 528 string insertSQL = "insert into estate_map values (:RegionID, :EstateID)";
505 using (SqlConnection conn = new SqlConnection(m_connectionString)) 529 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
506 { 530 {
507 conn.Open(); 531 conn.Open();
508 SqlTransaction transaction = conn.BeginTransaction(); 532
533 NpgsqlTransaction transaction = conn.BeginTransaction();
509 534
510 try 535 try
511 { 536 {
512 using (SqlCommand cmd = new SqlCommand(deleteSQL, conn)) 537 using (NpgsqlCommand cmd = new NpgsqlCommand(deleteSQL, conn))
513 { 538 {
514 cmd.Transaction = transaction; 539 cmd.Transaction = transaction;
515 cmd.Parameters.AddWithValue("@RegionID", regionID.Guid); 540 cmd.Parameters.AddWithValue("RegionID", regionID.Guid);
516 541
517 cmd.ExecuteNonQuery(); 542 cmd.ExecuteNonQuery();
518 } 543 }
519 544
520 using (SqlCommand cmd = new SqlCommand(insertSQL, conn)) 545 using (NpgsqlCommand cmd = new NpgsqlCommand(insertSQL, conn))
521 { 546 {
522 cmd.Transaction = transaction; 547 cmd.Transaction = transaction;
523 cmd.Parameters.AddWithValue("@RegionID", regionID.Guid); 548 cmd.Parameters.AddWithValue("RegionID", regionID.Guid);
524 cmd.Parameters.AddWithValue("@EstateID", estateID); 549 cmd.Parameters.AddWithValue("EstateID", estateID);
525 550
526 int ret = cmd.ExecuteNonQuery(); 551 int ret = cmd.ExecuteNonQuery();
527 552
@@ -545,13 +570,13 @@ namespace OpenSim.Data.MSSQL
545 public List<UUID> GetRegions(int estateID) 570 public List<UUID> GetRegions(int estateID)
546 { 571 {
547 List<UUID> result = new List<UUID>(); 572 List<UUID> result = new List<UUID>();
548 string sql = "select RegionID from estate_map where EstateID = @EstateID"; 573 string sql = "select \"RegionID\" from estate_map where \"EstateID\" = :EstateID";
549 using (SqlConnection conn = new SqlConnection(m_connectionString)) 574 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
550 { 575 {
551 conn.Open(); 576 conn.Open();
552 using (SqlCommand cmd = new SqlCommand(sql, conn)) 577 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
553 { 578 {
554 cmd.Parameters.AddWithValue("@EstateID", estateID); 579 cmd.Parameters.AddWithValue("EstateID", estateID);
555 580
556 using (IDataReader reader = cmd.ExecuteReader()) 581 using (IDataReader reader = cmd.ExecuteReader())
557 { 582 {
diff --git a/OpenSim/Data/MSSQL/MSSQLFriendsData.cs b/OpenSim/Data/PGSQL/PGSQLFriendsData.cs
index fef6978..a841353 100644
--- a/OpenSim/Data/MSSQL/MSSQLFriendsData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLFriendsData.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -31,18 +31,18 @@ using System.Collections.Generic;
31using System.Data; 31using System.Data;
32using OpenMetaverse; 32using OpenMetaverse;
33using OpenSim.Framework; 33using OpenSim.Framework;
34using System.Data.SqlClient;
35using System.Reflection; 34using System.Reflection;
36using System.Text; 35using System.Text;
36using Npgsql;
37 37
38namespace OpenSim.Data.MSSQL 38namespace OpenSim.Data.PGSQL
39{ 39{
40 public class MSSQLFriendsData : MSSQLGenericTableHandler<FriendsData>, IFriendsData 40 public class PGSQLFriendsData : PGSQLGenericTableHandler<FriendsData>, IFriendsData
41 { 41 {
42 public MSSQLFriendsData(string connectionString, string realm) 42 public PGSQLFriendsData(string connectionString, string realm)
43 : base(connectionString, realm, "FriendsStore") 43 : base(connectionString, realm, "FriendsStore")
44 { 44 {
45 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 45 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
46 { 46 {
47 conn.Open(); 47 conn.Open();
48 Migration m = new Migration(conn, GetType().Assembly, "FriendsStore"); 48 Migration m = new Migration(conn, GetType().Assembly, "FriendsStore");
@@ -50,19 +50,27 @@ namespace OpenSim.Data.MSSQL
50 } 50 }
51 } 51 }
52 52
53 public bool Delete(UUID principalID, string friend) 53
54 public override bool Delete(string principalID, string friend)
54 { 55 {
55 return Delete(principalID.ToString(), friend); 56 UUID princUUID = UUID.Zero;
57
58 bool ret = UUID.TryParse(principalID, out princUUID);
59
60 if (ret)
61 return Delete(princUUID, friend);
62 else
63 return false;
56 } 64 }
57 65
58 public bool Delete(string principalID, string friend) 66 public bool Delete(UUID principalID, string friend)
59 { 67 {
60 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 68 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
61 using (SqlCommand cmd = new SqlCommand()) 69 using (NpgsqlCommand cmd = new NpgsqlCommand())
62 { 70 {
63 cmd.CommandText = String.Format("delete from {0} where PrincipalID = @PrincipalID and Friend = @Friend", m_Realm); 71 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())); 72 cmd.Parameters.Add(m_database.CreateParameter("PrincipalID", principalID.ToString()));
65 cmd.Parameters.Add(m_database.CreateParameter("@Friend", friend)); 73 cmd.Parameters.Add(m_database.CreateParameter("Friend", friend));
66 cmd.Connection = conn; 74 cmd.Connection = conn;
67 conn.Open(); 75 conn.Open();
68 cmd.ExecuteNonQuery(); 76 cmd.ExecuteNonQuery();
@@ -71,19 +79,28 @@ namespace OpenSim.Data.MSSQL
71 } 79 }
72 } 80 }
73 81
74 public FriendsData[] GetFriends(UUID principalID) 82 public FriendsData[] GetFriends(string principalID)
75 { 83 {
76 return GetFriends(principalID.ToString()); 84 UUID princUUID = UUID.Zero;
85
86 bool ret = UUID.TryParse(principalID, out princUUID);
87
88 if (ret)
89 return GetFriends(princUUID);
90 else
91 return new FriendsData[0];
77 } 92 }
78 93
79 public FriendsData[] GetFriends(string principalID) 94 public FriendsData[] GetFriends(UUID principalID)
80 { 95 {
81 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 96 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
82 using (SqlCommand cmd = new SqlCommand()) 97 using (NpgsqlCommand cmd = new NpgsqlCommand())
83 { 98 {
84 99
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); 100 cmd.CommandText = String.Format("select a.*,case when b.\"Flags\" is null then '-1' else b.\"Flags\" end as \"TheirFlags\" from {0} as a " +
86 cmd.Parameters.Add(m_database.CreateParameter("@PrincipalID", principalID.ToString())); 101 " left join {0} as b on a.\"PrincipalID\" = b.\"Friend\" and a.\"Friend\" = b.\"PrincipalID\" " +
102 " where a.\"PrincipalID\" = :PrincipalID", m_Realm);
103 cmd.Parameters.Add(m_database.CreateParameter("PrincipalID", principalID.ToString()));
87 cmd.Connection = conn; 104 cmd.Connection = conn;
88 conn.Open(); 105 conn.Open();
89 return DoQuery(cmd); 106 return DoQuery(cmd);
@@ -92,7 +109,7 @@ namespace OpenSim.Data.MSSQL
92 109
93 public FriendsData[] GetFriends(Guid principalID) 110 public FriendsData[] GetFriends(Guid principalID)
94 { 111 {
95 return GetFriends(principalID.ToString()); 112 return GetFriends(principalID);
96 } 113 }
97 114
98 } 115 }
diff --git a/OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs b/OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs
index 4145d95..826c6fc 100644
--- a/OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs
+++ b/OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs
@@ -30,30 +30,38 @@ using System.Collections.Generic;
30using System.Data; 30using System.Data;
31using System.Reflection; 31using System.Reflection;
32using log4net; 32using log4net;
33using System.Data.SqlClient;
34using OpenMetaverse; 33using OpenMetaverse;
35using OpenSim.Framework; 34using OpenSim.Framework;
36using OpenSim.Region.Framework.Interfaces; 35using OpenSim.Region.Framework.Interfaces;
37using System.Text; 36using System.Text;
37using Npgsql;
38 38
39namespace OpenSim.Data.MSSQL 39namespace OpenSim.Data.PGSQL
40{ 40{
41 public class MSSQLGenericTableHandler<T> where T : class, new() 41 public class PGSQLGenericTableHandler<T> : PGSqlFramework where T : class, new()
42 { 42 {
43// private static readonly ILog m_log = 43 private static readonly ILog m_log =
44// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 44 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45 45
46 protected string m_ConnectionString; 46 protected string m_ConnectionString;
47 protected MSSQLManager m_database; //used for parameter type translation 47 protected PGSQLManager m_database; //used for parameter type translation
48 protected Dictionary<string, FieldInfo> m_Fields = 48 protected Dictionary<string, FieldInfo> m_Fields =
49 new Dictionary<string, FieldInfo>(); 49 new Dictionary<string, FieldInfo>();
50 50
51 protected Dictionary<string, string> m_FieldTypes = new Dictionary<string, string>();
52
51 protected List<string> m_ColumnNames = null; 53 protected List<string> m_ColumnNames = null;
52 protected string m_Realm; 54 protected string m_Realm;
53 protected FieldInfo m_DataField = null; 55 protected FieldInfo m_DataField = null;
54 56
55 public MSSQLGenericTableHandler(string connectionString, 57 protected virtual Assembly Assembly
58 {
59 get { return GetType().Assembly; }
60 }
61
62 public PGSQLGenericTableHandler(string connectionString,
56 string realm, string storeName) 63 string realm, string storeName)
64 : base(connectionString)
57 { 65 {
58 m_Realm = realm; 66 m_Realm = realm;
59 67
@@ -61,7 +69,7 @@ namespace OpenSim.Data.MSSQL
61 69
62 if (storeName != String.Empty) 70 if (storeName != String.Empty)
63 { 71 {
64 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 72 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
65 { 73 {
66 conn.Open(); 74 conn.Open();
67 Migration m = new Migration(conn, GetType().Assembly, storeName); 75 Migration m = new Migration(conn, GetType().Assembly, storeName);
@@ -69,13 +77,15 @@ namespace OpenSim.Data.MSSQL
69 } 77 }
70 78
71 } 79 }
72 m_database = new MSSQLManager(m_ConnectionString); 80 m_database = new PGSQLManager(m_ConnectionString);
73 81
74 Type t = typeof(T); 82 Type t = typeof(T);
75 FieldInfo[] fields = t.GetFields(BindingFlags.Public | 83 FieldInfo[] fields = t.GetFields(BindingFlags.Public |
76 BindingFlags.Instance | 84 BindingFlags.Instance |
77 BindingFlags.DeclaredOnly); 85 BindingFlags.DeclaredOnly);
78 86
87 LoadFieldTypes();
88
79 if (fields.Length == 0) 89 if (fields.Length == 0)
80 return; 90 return;
81 91
@@ -89,7 +99,31 @@ namespace OpenSim.Data.MSSQL
89 99
90 } 100 }
91 101
92 private void CheckColumnNames(SqlDataReader reader) 102 private void LoadFieldTypes()
103 {
104 m_FieldTypes = new Dictionary<string, string>();
105
106 string query = string.Format(@"select column_name,data_type
107 from INFORMATION_SCHEMA.COLUMNS
108 where table_name = lower('{0}');
109
110 ", m_Realm);
111 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
112 using (NpgsqlCommand cmd = new NpgsqlCommand(query, conn))
113 {
114 conn.Open();
115 using (NpgsqlDataReader rdr = cmd.ExecuteReader())
116 {
117 while (rdr.Read())
118 {
119 // query produces 0 to many rows of single column, so always add the first item in each row
120 m_FieldTypes.Add((string)rdr[0], (string)rdr[1]);
121 }
122 }
123 }
124 }
125
126 private void CheckColumnNames(NpgsqlDataReader reader)
93 { 127 {
94 if (m_ColumnNames != null) 128 if (m_ColumnNames != null)
95 return; 129 return;
@@ -97,6 +131,7 @@ namespace OpenSim.Data.MSSQL
97 m_ColumnNames = new List<string>(); 131 m_ColumnNames = new List<string>();
98 132
99 DataTable schemaTable = reader.GetSchemaTable(); 133 DataTable schemaTable = reader.GetSchemaTable();
134
100 foreach (DataRow row in schemaTable.Rows) 135 foreach (DataRow row in schemaTable.Rows)
101 { 136 {
102 if (row["ColumnName"] != null && 137 if (row["ColumnName"] != null &&
@@ -106,21 +141,37 @@ namespace OpenSim.Data.MSSQL
106 } 141 }
107 } 142 }
108 143
144 // TODO GET CONSTRAINTS FROM POSTGRESQL
109 private List<string> GetConstraints() 145 private List<string> GetConstraints()
110 { 146 {
111 List<string> constraints = new List<string>(); 147 List<string> constraints = new List<string>();
112 string query = string.Format(@"SELECT 148 string query = string.Format(@"SELECT kcu.column_name
113 COL_NAME(ic.object_id,ic.column_id) AS column_name 149 FROM information_schema.table_constraints tc
114 FROM sys.indexes AS i 150 LEFT JOIN information_schema.key_column_usage kcu
115 INNER JOIN sys.index_columns AS ic 151 ON tc.constraint_catalog = kcu.constraint_catalog
116 ON i.object_id = ic.object_id AND i.index_id = ic.index_id 152 AND tc.constraint_schema = kcu.constraint_schema
117 WHERE i.is_primary_key = 1 153 AND tc.constraint_name = kcu.constraint_name
118 AND i.object_id = OBJECT_ID('{0}');", m_Realm); 154
119 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 155 LEFT JOIN information_schema.referential_constraints rc
120 using (SqlCommand cmd = new SqlCommand(query, conn)) 156 ON tc.constraint_catalog = rc.constraint_catalog
157 AND tc.constraint_schema = rc.constraint_schema
158 AND tc.constraint_name = rc.constraint_name
159
160 LEFT JOIN information_schema.constraint_column_usage ccu
161 ON rc.unique_constraint_catalog = ccu.constraint_catalog
162 AND rc.unique_constraint_schema = ccu.constraint_schema
163 AND rc.unique_constraint_name = ccu.constraint_name
164
165 where tc.table_name = lower('{0}')
166 and lower(tc.constraint_type) in ('primary key')
167 and kcu.column_name is not null
168 ;", m_Realm);
169
170 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
171 using (NpgsqlCommand cmd = new NpgsqlCommand(query, conn))
121 { 172 {
122 conn.Open(); 173 conn.Open();
123 using (SqlDataReader rdr = cmd.ExecuteReader()) 174 using (NpgsqlDataReader rdr = cmd.ExecuteReader())
124 { 175 {
125 while (rdr.Read()) 176 while (rdr.Read())
126 { 177 {
@@ -144,14 +195,18 @@ namespace OpenSim.Data.MSSQL
144 195
145 List<string> terms = new List<string>(); 196 List<string> terms = new List<string>();
146 197
147 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 198 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
148 using (SqlCommand cmd = new SqlCommand()) 199 using (NpgsqlCommand cmd = new NpgsqlCommand())
149 { 200 {
150 201
151 for (int i = 0; i < fields.Length; i++) 202 for (int i = 0; i < fields.Length; i++)
152 { 203 {
153 cmd.Parameters.Add(m_database.CreateParameter(fields[i], keys[i])); 204 if ( m_FieldTypes.ContainsKey(fields[i]) )
154 terms.Add("[" + fields[i] + "] = @" + fields[i]); 205 cmd.Parameters.Add(m_database.CreateParameter(fields[i], keys[i], m_FieldTypes[fields[i]]));
206 else
207 cmd.Parameters.Add(m_database.CreateParameter(fields[i], keys[i]));
208
209 terms.Add(" \"" + fields[i] + "\" = :" + fields[i]);
155 } 210 }
156 211
157 string where = String.Join(" AND ", terms.ToArray()); 212 string where = String.Join(" AND ", terms.ToArray());
@@ -166,10 +221,18 @@ namespace OpenSim.Data.MSSQL
166 } 221 }
167 } 222 }
168 223
169 protected T[] DoQuery(SqlCommand cmd) 224 protected T[] DoQuery(NpgsqlCommand cmd)
170 { 225 {
171 List<T> result = new List<T>(); 226 List<T> result = new List<T>();
172 using (SqlDataReader reader = cmd.ExecuteReader()) 227 if (cmd.Connection == null)
228 {
229 cmd.Connection = new NpgsqlConnection(m_connectionString);
230 }
231 if (cmd.Connection.State == ConnectionState.Closed)
232 {
233 cmd.Connection.Open();
234 }
235 using (NpgsqlDataReader reader = cmd.ExecuteReader())
173 { 236 {
174 if (reader == null) 237 if (reader == null)
175 return new T[0]; 238 return new T[0];
@@ -213,6 +276,7 @@ namespace OpenSim.Data.MSSQL
213 foreach (string col in m_ColumnNames) 276 foreach (string col in m_ColumnNames)
214 { 277 {
215 data[col] = reader[col].ToString(); 278 data[col] = reader[col].ToString();
279
216 if (data[col] == null) 280 if (data[col] == null)
217 data[col] = String.Empty; 281 data[col] = String.Empty;
218 } 282 }
@@ -228,16 +292,34 @@ namespace OpenSim.Data.MSSQL
228 292
229 public virtual T[] Get(string where) 293 public virtual T[] Get(string where)
230 { 294 {
231 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 295 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
232 using (SqlCommand cmd = new SqlCommand()) 296 using (NpgsqlCommand cmd = new NpgsqlCommand())
233 { 297 {
234 298
235 string query = String.Format("SELECT * FROM {0} WHERE {1}", 299 string query = String.Format("SELECT * FROM {0} WHERE {1}",
236 m_Realm, where); 300 m_Realm, where);
237 cmd.Connection = conn; 301 cmd.Connection = conn;
238 cmd.CommandText = query; 302 cmd.CommandText = query;
303 //m_log.WarnFormat("[PGSQLGenericTable]: SELECT {0} WHERE {1}", m_Realm, where);
239 304
240 //m_log.WarnFormat("[MSSQLGenericTable]: SELECT {0} WHERE {1}", m_Realm, where); 305 conn.Open();
306 return DoQuery(cmd);
307 }
308 }
309
310 public virtual T[] Get(string where, NpgsqlParameter parameter)
311 {
312 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
313 using (NpgsqlCommand cmd = new NpgsqlCommand())
314 {
315
316 string query = String.Format("SELECT * FROM {0} WHERE {1}",
317 m_Realm, where);
318 cmd.Connection = conn;
319 cmd.CommandText = query;
320 //m_log.WarnFormat("[PGSQLGenericTable]: SELECT {0} WHERE {1}", m_Realm, where);
321
322 cmd.Parameters.Add(parameter);
241 323
242 conn.Open(); 324 conn.Open();
243 return DoQuery(cmd); 325 return DoQuery(cmd);
@@ -249,8 +331,8 @@ namespace OpenSim.Data.MSSQL
249 List<string> constraintFields = GetConstraints(); 331 List<string> constraintFields = GetConstraints();
250 List<KeyValuePair<string, string>> constraints = new List<KeyValuePair<string, string>>(); 332 List<KeyValuePair<string, string>> constraints = new List<KeyValuePair<string, string>>();
251 333
252 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 334 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
253 using (SqlCommand cmd = new SqlCommand()) 335 using (NpgsqlCommand cmd = new NpgsqlCommand())
254 { 336 {
255 337
256 StringBuilder query = new StringBuilder(); 338 StringBuilder query = new StringBuilder();
@@ -260,21 +342,24 @@ namespace OpenSim.Data.MSSQL
260 foreach (FieldInfo fi in m_Fields.Values) 342 foreach (FieldInfo fi in m_Fields.Values)
261 { 343 {
262 names.Add(fi.Name); 344 names.Add(fi.Name);
263 values.Add("@" + fi.Name); 345 values.Add(":" + fi.Name);
264 // Temporarily return more information about what field is unexpectedly null for 346 // 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 347 // 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. 348 // InventoryTransferModule or we may be required to substitute a DBNull here.
267 if (fi.GetValue(row) == null) 349 if (fi.GetValue(row) == null)
268 throw new NullReferenceException( 350 throw new NullReferenceException(
269 string.Format( 351 string.Format(
270 "[MSSQL GENERIC TABLE HANDLER]: Trying to store field {0} for {1} which is unexpectedly null", 352 "[PGSQL GENERIC TABLE HANDLER]: Trying to store field {0} for {1} which is unexpectedly null",
271 fi.Name, row)); 353 fi.Name, row));
272 354
273 if (constraintFields.Count > 0 && constraintFields.Contains(fi.Name)) 355 if (constraintFields.Count > 0 && constraintFields.Contains(fi.Name))
274 { 356 {
275 constraints.Add(new KeyValuePair<string, string>(fi.Name, fi.GetValue(row).ToString())); 357 constraints.Add(new KeyValuePair<string, string>(fi.Name, fi.GetValue(row).ToString() ));
276 } 358 }
277 cmd.Parameters.Add(m_database.CreateParameter(fi.Name, fi.GetValue(row).ToString())); 359 if (m_FieldTypes.ContainsKey(fi.Name))
360 cmd.Parameters.Add(m_database.CreateParameter(fi.Name, fi.GetValue(row), m_FieldTypes[fi.Name]));
361 else
362 cmd.Parameters.Add(m_database.CreateParameter(fi.Name, fi.GetValue(row)));
278 } 363 }
279 364
280 if (m_DataField != null) 365 if (m_DataField != null)
@@ -289,8 +374,12 @@ namespace OpenSim.Data.MSSQL
289 constraints.Add(new KeyValuePair<string, string>(kvp.Key, kvp.Key)); 374 constraints.Add(new KeyValuePair<string, string>(kvp.Key, kvp.Key));
290 } 375 }
291 names.Add(kvp.Key); 376 names.Add(kvp.Key);
292 values.Add("@" + kvp.Key); 377 values.Add(":" + kvp.Key);
293 cmd.Parameters.Add(m_database.CreateParameter("@" + kvp.Key, kvp.Value)); 378
379 if (m_FieldTypes.ContainsKey(kvp.Key))
380 cmd.Parameters.Add(m_database.CreateParameter("" + kvp.Key, kvp.Value, m_FieldTypes[kvp.Key]));
381 else
382 cmd.Parameters.Add(m_database.CreateParameter("" + kvp.Key, kvp.Value));
294 } 383 }
295 384
296 } 385 }
@@ -299,15 +388,15 @@ namespace OpenSim.Data.MSSQL
299 int i = 0; 388 int i = 0;
300 for (i = 0; i < names.Count - 1; i++) 389 for (i = 0; i < names.Count - 1; i++)
301 { 390 {
302 query.AppendFormat("[{0}] = {1}, ", names[i], values[i]); 391 query.AppendFormat("\"{0}\" = {1}, ", names[i], values[i]);
303 } 392 }
304 query.AppendFormat("[{0}] = {1} ", names[i], values[i]); 393 query.AppendFormat("\"{0}\" = {1} ", names[i], values[i]);
305 if (constraints.Count > 0) 394 if (constraints.Count > 0)
306 { 395 {
307 List<string> terms = new List<string>(); 396 List<string> terms = new List<string>();
308 for (int j = 0; j < constraints.Count; j++) 397 for (int j = 0; j < constraints.Count; j++)
309 { 398 {
310 terms.Add(" [" + constraints[j].Key + "] = @" + constraints[j].Key); 399 terms.Add(String.Format(" \"{0}\" = :{0}", constraints[j].Key));
311 } 400 }
312 string where = String.Join(" AND ", terms.ToArray()); 401 string where = String.Join(" AND ", terms.ToArray());
313 query.AppendFormat(" WHERE {0} ", where); 402 query.AppendFormat(" WHERE {0} ", where);
@@ -319,7 +408,7 @@ namespace OpenSim.Data.MSSQL
319 conn.Open(); 408 conn.Open();
320 if (cmd.ExecuteNonQuery() > 0) 409 if (cmd.ExecuteNonQuery() > 0)
321 { 410 {
322 //m_log.WarnFormat("[MSSQLGenericTable]: Updating {0}", m_Realm); 411 //m_log.WarnFormat("[PGSQLGenericTable]: Updating {0}", m_Realm);
323 return true; 412 return true;
324 } 413 }
325 else 414 else
@@ -327,12 +416,14 @@ namespace OpenSim.Data.MSSQL
327 // assume record has not yet been inserted 416 // assume record has not yet been inserted
328 417
329 query = new StringBuilder(); 418 query = new StringBuilder();
330 query.AppendFormat("INSERT INTO {0} ([", m_Realm); 419 query.AppendFormat("INSERT INTO {0} (\"", m_Realm);
331 query.Append(String.Join("],[", names.ToArray())); 420 query.Append(String.Join("\",\"", names.ToArray()));
332 query.Append("]) values (" + String.Join(",", values.ToArray()) + ")"); 421 query.Append("\") values (" + String.Join(",", values.ToArray()) + ")");
333 cmd.Connection = conn; 422 cmd.Connection = conn;
334 cmd.CommandText = query.ToString(); 423 cmd.CommandText = query.ToString();
335 //m_log.WarnFormat("[MSSQLGenericTable]: Inserting into {0}", m_Realm); 424
425 // m_log.WarnFormat("[PGSQLGenericTable]: Inserting into {0} sql {1}", m_Realm, cmd.CommandText);
426
336 if (conn.State != ConnectionState.Open) 427 if (conn.State != ConnectionState.Open)
337 conn.Open(); 428 conn.Open();
338 if (cmd.ExecuteNonQuery() > 0) 429 if (cmd.ExecuteNonQuery() > 0)
@@ -355,13 +446,17 @@ namespace OpenSim.Data.MSSQL
355 446
356 List<string> terms = new List<string>(); 447 List<string> terms = new List<string>();
357 448
358 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 449 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
359 using (SqlCommand cmd = new SqlCommand()) 450 using (NpgsqlCommand cmd = new NpgsqlCommand())
360 { 451 {
361 for (int i = 0; i < fields.Length; i++) 452 for (int i = 0; i < fields.Length; i++)
362 { 453 {
363 cmd.Parameters.Add(m_database.CreateParameter(fields[i], keys[i])); 454 if (m_FieldTypes.ContainsKey(fields[i]))
364 terms.Add("[" + fields[i] + "] = @" + fields[i]); 455 cmd.Parameters.Add(m_database.CreateParameter(fields[i], keys[i], m_FieldTypes[fields[i]]));
456 else
457 cmd.Parameters.Add(m_database.CreateParameter(fields[i], keys[i]));
458
459 terms.Add(" \"" + fields[i] + "\" = :" + fields[i]);
365 } 460 }
366 461
367 string where = String.Join(" AND ", terms.ToArray()); 462 string where = String.Join(" AND ", terms.ToArray());
@@ -374,11 +469,69 @@ namespace OpenSim.Data.MSSQL
374 469
375 if (cmd.ExecuteNonQuery() > 0) 470 if (cmd.ExecuteNonQuery() > 0)
376 { 471 {
377 //m_log.Warn("[MSSQLGenericTable]: " + deleteCommand); 472 //m_log.Warn("[PGSQLGenericTable]: " + deleteCommand);
378 return true; 473 return true;
379 } 474 }
380 return false; 475 return false;
381 } 476 }
382 } 477 }
478 public long GetCount(string field, string key)
479 {
480 return GetCount(new string[] { field }, new string[] { key });
481 }
482
483 public long GetCount(string[] fields, string[] keys)
484 {
485 if (fields.Length != keys.Length)
486 return 0;
487
488 List<string> terms = new List<string>();
489
490 using (NpgsqlCommand cmd = new NpgsqlCommand())
491 {
492 for (int i = 0; i < fields.Length; i++)
493 {
494 cmd.Parameters.AddWithValue(fields[i], keys[i]);
495 terms.Add("\"" + fields[i] + "\" = :" + fields[i]);
496 }
497
498 string where = String.Join(" and ", terms.ToArray());
499
500 string query = String.Format("select count(*) from {0} where {1}",
501 m_Realm, where);
502
503 cmd.CommandText = query;
504
505 Object result = DoQueryScalar(cmd);
506
507 return Convert.ToInt64(result);
508 }
509 }
510
511 public long GetCount(string where)
512 {
513 using (NpgsqlCommand cmd = new NpgsqlCommand())
514 {
515 string query = String.Format("select count(*) from {0} where {1}",
516 m_Realm, where);
517
518 cmd.CommandText = query;
519
520 object result = DoQueryScalar(cmd);
521
522 return Convert.ToInt64(result);
523 }
524 }
525
526 public object DoQueryScalar(NpgsqlCommand cmd)
527 {
528 using (NpgsqlConnection dbcon = new NpgsqlConnection(m_ConnectionString))
529 {
530 dbcon.Open();
531 cmd.Connection = dbcon;
532
533 return cmd.ExecuteScalar();
534 }
535 }
383 } 536 }
384} 537}
diff --git a/OpenSim/Data/MSSQL/MSSQLGridUserData.cs b/OpenSim/Data/PGSQL/PGSQLGridUserData.cs
index 9e215f9..89319f3 100644
--- a/OpenSim/Data/MSSQL/MSSQLGridUserData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLGridUserData.cs
@@ -33,24 +33,23 @@ using System.Threading;
33using log4net; 33using log4net;
34using OpenMetaverse; 34using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
36using System.Data.SqlClient;
37 36
38namespace OpenSim.Data.MSSQL 37namespace OpenSim.Data.PGSQL
39{ 38{
40 /// <summary> 39 /// <summary>
41 /// A MSSQL Interface for Avatar Storage 40 /// A PGSQL Interface for Avatar Storage
42 /// </summary> 41 /// </summary>
43 public class MSSQLGridUserData : MSSQLGenericTableHandler<GridUserData>, 42 public class PGSQLGridUserData : PGSQLGenericTableHandler<GridUserData>,
44 IGridUserData 43 IGridUserData
45 { 44 {
46// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 45// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47 46
48 public MSSQLGridUserData(string connectionString, string realm) : 47 public PGSQLGridUserData(string connectionString, string realm) :
49 base(connectionString, realm, "GridUserStore") 48 base(connectionString, realm, "GridUserStore")
50 { 49 {
51 } 50 }
52 51
53 public GridUserData Get(string userID) 52 public new GridUserData Get(string userID)
54 { 53 {
55 GridUserData[] ret = Get("UserID", userID); 54 GridUserData[] ret = Get("UserID", userID);
56 55
@@ -60,5 +59,10 @@ namespace OpenSim.Data.MSSQL
60 return ret[0]; 59 return ret[0];
61 } 60 }
62 61
62 public GridUserData[] GetAll(string userID)
63 {
64 return base.Get(String.Format("\"UserID\" LIKE '{0}%'", userID));
65 }
66
63 } 67 }
64} 68}
diff --git a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs b/OpenSim/Data/PGSQL/PGSQLInventoryData.cs
index 961593f..c999433 100644
--- a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLInventoryData.cs
@@ -28,18 +28,18 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Data; 30using System.Data;
31using System.Data.SqlClient;
32using System.Reflection; 31using System.Reflection;
33using log4net; 32using log4net;
34using OpenMetaverse; 33using OpenMetaverse;
35using OpenSim.Framework; 34using OpenSim.Framework;
35using Npgsql;
36 36
37namespace OpenSim.Data.MSSQL 37namespace OpenSim.Data.PGSQL
38{ 38{
39 /// <summary> 39 /// <summary>
40 /// A MSSQL interface for the inventory server 40 /// A PGSQL interface for the inventory server
41 /// </summary> 41 /// </summary>
42 public class MSSQLInventoryData : IInventoryDataPlugin 42 public class PGSQLInventoryData : IInventoryDataPlugin
43 { 43 {
44 private const string _migrationStore = "InventoryStore"; 44 private const string _migrationStore = "InventoryStore";
45 45
@@ -48,7 +48,7 @@ namespace OpenSim.Data.MSSQL
48 /// <summary> 48 /// <summary>
49 /// The database manager 49 /// The database manager
50 /// </summary> 50 /// </summary>
51 private MSSQLManager database; 51 private PGSQLManager database;
52 private string m_connectionString; 52 private string m_connectionString;
53 53
54 #region IPlugin members 54 #region IPlugin members
@@ -56,19 +56,19 @@ namespace OpenSim.Data.MSSQL
56 [Obsolete("Cannot be default-initialized!")] 56 [Obsolete("Cannot be default-initialized!")]
57 public void Initialise() 57 public void Initialise()
58 { 58 {
59 m_log.Info("[MSSQLInventoryData]: " + Name + " cannot be default-initialized!"); 59 m_log.Info("[PGSQLInventoryData]: " + Name + " cannot be default-initialized!");
60 throw new PluginNotInitialisedException(Name); 60 throw new PluginNotInitialisedException(Name);
61 } 61 }
62 62
63 /// <summary> 63 /// <summary>
64 /// Loads and initialises the MSSQL inventory storage interface 64 /// Loads and initialises the PGSQL inventory storage interface
65 /// </summary> 65 /// </summary>
66 /// <param name="connectionString">connect string</param> 66 /// <param name="connectionString">connect string</param>
67 /// <remarks>use mssql_connection.ini</remarks> 67 /// <remarks>use PGSQL_connection.ini</remarks>
68 public void Initialise(string connectionString) 68 public void Initialise(string connectionString)
69 { 69 {
70 m_connectionString = connectionString; 70 m_connectionString = connectionString;
71 database = new MSSQLManager(connectionString); 71 database = new PGSQLManager(connectionString);
72 72
73 //New migrations check of store 73 //New migrations check of store
74 database.CheckMigration(_migrationStore); 74 database.CheckMigration(_migrationStore);
@@ -80,7 +80,7 @@ namespace OpenSim.Data.MSSQL
80 /// <returns>A string containing the name of the DB provider</returns> 80 /// <returns>A string containing the name of the DB provider</returns>
81 public string Name 81 public string Name
82 { 82 {
83 get { return "MSSQL Inventory Data Interface"; } 83 get { return "PGSQL Inventory Data Interface"; }
84 } 84 }
85 85
86 /// <summary> 86 /// <summary>
@@ -158,13 +158,13 @@ namespace OpenSim.Data.MSSQL
158 /// <returns>A folder class</returns> 158 /// <returns>A folder class</returns>
159 public InventoryFolderBase getInventoryFolder(UUID folderID) 159 public InventoryFolderBase getInventoryFolder(UUID folderID)
160 { 160 {
161 string sql = "SELECT * FROM inventoryfolders WHERE folderID = @folderID"; 161 string sql = "SELECT * FROM inventoryfolders WHERE \"folderID\" = :folderID";
162 using (SqlConnection conn = new SqlConnection(m_connectionString)) 162 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
163 using (SqlCommand cmd = new SqlCommand(sql, conn)) 163 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
164 { 164 {
165 cmd.Parameters.Add(database.CreateParameter("folderID", folderID)); 165 cmd.Parameters.Add(database.CreateParameter("folderID", folderID));
166 conn.Open(); 166 conn.Open();
167 using (SqlDataReader reader = cmd.ExecuteReader()) 167 using (NpgsqlDataReader reader = cmd.ExecuteReader())
168 { 168 {
169 if (reader.Read()) 169 if (reader.Read())
170 { 170 {
@@ -200,11 +200,11 @@ namespace OpenSim.Data.MSSQL
200 if (parentID == UUID.Zero) 200 if (parentID == UUID.Zero)
201 return folders; 201 return folders;
202 202
203 string sql = "SELECT * FROM inventoryfolders WHERE parentFolderID = @parentID"; 203 string sql = "SELECT * FROM inventoryfolders WHERE \"parentFolderID\" = :parentID";
204 using (SqlConnection conn = new SqlConnection(m_connectionString)) 204 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
205 using (SqlCommand cmd = new SqlCommand(sql, conn)) 205 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
206 { 206 {
207 cmd.Parameters.Add(database.CreateParameter("@parentID", parentID)); 207 cmd.Parameters.Add(database.CreateParameter("parentID", parentID));
208 conn.Open(); 208 conn.Open();
209 folders.AddRange(getInventoryFolders(cmd)); 209 folders.AddRange(getInventoryFolders(cmd));
210 210
@@ -228,8 +228,8 @@ namespace OpenSim.Data.MSSQL
228 /// <param name="folder">Folder to create</param> 228 /// <param name="folder">Folder to create</param>
229 public void addInventoryFolder(InventoryFolderBase folder) 229 public void addInventoryFolder(InventoryFolderBase folder)
230 { 230 {
231 string sql = @"INSERT INTO inventoryfolders ([folderID], [agentID], [parentFolderID], [folderName], [type], [version]) 231 string sql = "INSERT INTO inventoryfolders (\"folderID\", \"agentID\", \"parentFolderID\", \"folderName\", type, version) " +
232 VALUES (@folderID, @agentID, @parentFolderID, @folderName, @type, @version);"; 232 " VALUES (:folderID, :agentID, :parentFolderID, :folderName, :type, :version);";
233 233
234 string folderName = folder.Name; 234 string folderName = folder.Name;
235 if (folderName.Length > 64) 235 if (folderName.Length > 64)
@@ -237,8 +237,8 @@ namespace OpenSim.Data.MSSQL
237 folderName = folderName.Substring(0, 64); 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"); 238 m_log.Warn("[INVENTORY DB]: Name field truncated from " + folder.Name.Length.ToString() + " to " + folderName.Length + " characters on add");
239 } 239 }
240 using (SqlConnection conn = new SqlConnection(m_connectionString)) 240 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
241 using (SqlCommand cmd = new SqlCommand(sql, conn)) 241 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
242 { 242 {
243 cmd.Parameters.Add(database.CreateParameter("folderID", folder.ID)); 243 cmd.Parameters.Add(database.CreateParameter("folderID", folder.ID));
244 cmd.Parameters.Add(database.CreateParameter("agentID", folder.Owner)); 244 cmd.Parameters.Add(database.CreateParameter("agentID", folder.Owner));
@@ -264,12 +264,12 @@ namespace OpenSim.Data.MSSQL
264 /// <param name="folder">Folder to update</param> 264 /// <param name="folder">Folder to update</param>
265 public void updateInventoryFolder(InventoryFolderBase folder) 265 public void updateInventoryFolder(InventoryFolderBase folder)
266 { 266 {
267 string sql = @"UPDATE inventoryfolders SET agentID = @agentID, 267 string sql = @"UPDATE inventoryfolders SET ""agentID"" = :agentID,
268 parentFolderID = @parentFolderID, 268 ""parentFolderID"" = :parentFolderID,
269 folderName = @folderName, 269 ""folderName"" = :folderName,
270 type = @type, 270 type = :type,
271 version = @version 271 version = :version
272 WHERE folderID = @folderID"; 272 WHERE folderID = :folderID";
273 273
274 string folderName = folder.Name; 274 string folderName = folder.Name;
275 if (folderName.Length > 64) 275 if (folderName.Length > 64)
@@ -277,8 +277,8 @@ namespace OpenSim.Data.MSSQL
277 folderName = folderName.Substring(0, 64); 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"); 278 m_log.Warn("[INVENTORY DB]: Name field truncated from " + folder.Name.Length.ToString() + " to " + folderName.Length + " characters on update");
279 } 279 }
280 using (SqlConnection conn = new SqlConnection(m_connectionString)) 280 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
281 using (SqlCommand cmd = new SqlCommand(sql, conn)) 281 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
282 { 282 {
283 cmd.Parameters.Add(database.CreateParameter("folderID", folder.ID)); 283 cmd.Parameters.Add(database.CreateParameter("folderID", folder.ID));
284 cmd.Parameters.Add(database.CreateParameter("agentID", folder.Owner)); 284 cmd.Parameters.Add(database.CreateParameter("agentID", folder.Owner));
@@ -304,9 +304,9 @@ namespace OpenSim.Data.MSSQL
304 /// <param name="folder">Folder to update</param> 304 /// <param name="folder">Folder to update</param>
305 public void moveInventoryFolder(InventoryFolderBase folder) 305 public void moveInventoryFolder(InventoryFolderBase folder)
306 { 306 {
307 string sql = @"UPDATE inventoryfolders SET parentFolderID = @parentFolderID WHERE folderID = @folderID"; 307 string sql = @"UPDATE inventoryfolders SET ""parentFolderID"" = :parentFolderID WHERE ""folderID"" = :folderID";
308 using (SqlConnection conn = new SqlConnection(m_connectionString)) 308 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
309 using (SqlCommand cmd = new SqlCommand(sql, conn)) 309 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
310 { 310 {
311 cmd.Parameters.Add(database.CreateParameter("parentFolderID", folder.ParentID)); 311 cmd.Parameters.Add(database.CreateParameter("parentFolderID", folder.ParentID));
312 cmd.Parameters.Add(database.CreateParameter("folderID", folder.ID)); 312 cmd.Parameters.Add(database.CreateParameter("folderID", folder.ID));
@@ -328,13 +328,13 @@ namespace OpenSim.Data.MSSQL
328 /// <param name="folderID">Id of folder to delete</param> 328 /// <param name="folderID">Id of folder to delete</param>
329 public void deleteInventoryFolder(UUID folderID) 329 public void deleteInventoryFolder(UUID folderID)
330 { 330 {
331 string sql = "SELECT * FROM inventoryfolders WHERE parentFolderID = @parentID"; 331 string sql = @"SELECT * FROM inventoryfolders WHERE ""parentFolderID"" = :parentID";
332 332
333 using (SqlConnection conn = new SqlConnection(m_connectionString)) 333 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
334 using (SqlCommand cmd = new SqlCommand(sql, conn)) 334 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
335 { 335 {
336 List<InventoryFolderBase> subFolders; 336 List<InventoryFolderBase> subFolders;
337 cmd.Parameters.Add(database.CreateParameter("@parentID", UUID.Zero)); 337 cmd.Parameters.Add(database.CreateParameter("parentID", UUID.Zero));
338 conn.Open(); 338 conn.Open();
339 subFolders = getFolderHierarchy(folderID, cmd); 339 subFolders = getFolderHierarchy(folderID, cmd);
340 340
@@ -363,15 +363,15 @@ namespace OpenSim.Data.MSSQL
363 /// <returns>A list containing inventory items</returns> 363 /// <returns>A list containing inventory items</returns>
364 public List<InventoryItemBase> getInventoryInFolder(UUID folderID) 364 public List<InventoryItemBase> getInventoryInFolder(UUID folderID)
365 { 365 {
366 string sql = "SELECT * FROM inventoryitems WHERE parentFolderID = @parentFolderID"; 366 string sql = @"SELECT * FROM inventoryitems WHERE ""parentFolderID"" = :parentFolderID";
367 using (SqlConnection conn = new SqlConnection(m_connectionString)) 367 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
368 using (SqlCommand cmd = new SqlCommand(sql, conn)) 368 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
369 { 369 {
370 cmd.Parameters.Add(database.CreateParameter("parentFolderID", folderID)); 370 cmd.Parameters.Add(database.CreateParameter("parentFolderID", folderID));
371 conn.Open(); 371 conn.Open();
372 List<InventoryItemBase> items = new List<InventoryItemBase>(); 372 List<InventoryItemBase> items = new List<InventoryItemBase>();
373 373
374 using (SqlDataReader reader = cmd.ExecuteReader()) 374 using (NpgsqlDataReader reader = cmd.ExecuteReader())
375 { 375 {
376 while (reader.Read()) 376 while (reader.Read())
377 { 377 {
@@ -389,13 +389,13 @@ namespace OpenSim.Data.MSSQL
389 /// <returns>An inventory item</returns> 389 /// <returns>An inventory item</returns>
390 public InventoryItemBase getInventoryItem(UUID itemID) 390 public InventoryItemBase getInventoryItem(UUID itemID)
391 { 391 {
392 string sql = "SELECT * FROM inventoryitems WHERE inventoryID = @inventoryID"; 392 string sql = @"SELECT * FROM inventoryitems WHERE ""inventoryID"" = :inventoryID";
393 using (SqlConnection conn = new SqlConnection(m_connectionString)) 393 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
394 using (SqlCommand cmd = new SqlCommand(sql, conn)) 394 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
395 { 395 {
396 cmd.Parameters.Add(database.CreateParameter("inventoryID", itemID)); 396 cmd.Parameters.Add(database.CreateParameter("inventoryID", itemID));
397 conn.Open(); 397 conn.Open();
398 using (SqlDataReader reader = cmd.ExecuteReader()) 398 using (NpgsqlDataReader reader = cmd.ExecuteReader())
399 { 399 {
400 if (reader.Read()) 400 if (reader.Read())
401 { 401 {
@@ -421,15 +421,15 @@ namespace OpenSim.Data.MSSQL
421 } 421 }
422 422
423 string sql = @"INSERT INTO inventoryitems 423 string sql = @"INSERT INTO inventoryitems
424 ([inventoryID], [assetID], [assetType], [parentFolderID], [avatarID], [inventoryName], 424 (""inventoryID"", ""assetID"", ""assetType"", ""parentFolderID"", ""avatarID"", ""inventoryName"",
425 [inventoryDescription], [inventoryNextPermissions], [inventoryCurrentPermissions], 425 ""inventoryDescription"", ""inventoryNextPermissions"", ""inventoryCurrentPermissions"",
426 [invType], [creatorID], [inventoryBasePermissions], [inventoryEveryOnePermissions], [inventoryGroupPermissions], 426 ""invType"", ""creatorID"", ""inventoryBasePermissions"", ""inventoryEveryOnePermissions"", ""inventoryGroupPermissions"",
427 [salePrice], [saleType], [creationDate], [groupID], [groupOwned], [flags]) 427 ""salePrice"", ""SaleType"", ""creationDate"", ""groupID"", ""groupOwned"", flags)
428 VALUES 428 VALUES
429 (@inventoryID, @assetID, @assetType, @parentFolderID, @avatarID, @inventoryName, @inventoryDescription, 429 (:inventoryID, :assetID, :assetType, :parentFolderID, :avatarID, :inventoryName, :inventoryDescription,
430 @inventoryNextPermissions, @inventoryCurrentPermissions, @invType, @creatorID, 430 :inventoryNextPermissions, :inventoryCurrentPermissions, :invType, :creatorID,
431 @inventoryBasePermissions, @inventoryEveryOnePermissions, @inventoryGroupPermissions, @salePrice, @saleType, 431 :inventoryBasePermissions, :inventoryEveryOnePermissions, :inventoryGroupPermissions, :SalePrice, :SaleType,
432 @creationDate, @groupID, @groupOwned, @flags)"; 432 :creationDate, :groupID, :groupOwned, :flags)";
433 433
434 string itemName = item.Name; 434 string itemName = item.Name;
435 if (item.Name.Length > 64) 435 if (item.Name.Length > 64)
@@ -445,8 +445,8 @@ namespace OpenSim.Data.MSSQL
445 m_log.Warn("[INVENTORY DB]: Description field truncated from " + item.Description.Length.ToString() + " to " + itemDesc.Length.ToString() + " characters"); 445 m_log.Warn("[INVENTORY DB]: Description field truncated from " + item.Description.Length.ToString() + " to " + itemDesc.Length.ToString() + " characters");
446 } 446 }
447 447
448 using (SqlConnection conn = new SqlConnection(m_connectionString)) 448 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
449 using (SqlCommand command = new SqlCommand(sql, conn)) 449 using (NpgsqlCommand command = new NpgsqlCommand(sql, conn))
450 { 450 {
451 command.Parameters.Add(database.CreateParameter("inventoryID", item.ID)); 451 command.Parameters.Add(database.CreateParameter("inventoryID", item.ID));
452 command.Parameters.Add(database.CreateParameter("assetID", item.AssetID)); 452 command.Parameters.Add(database.CreateParameter("assetID", item.AssetID));
@@ -462,8 +462,8 @@ namespace OpenSim.Data.MSSQL
462 command.Parameters.Add(database.CreateParameter("inventoryBasePermissions", item.BasePermissions)); 462 command.Parameters.Add(database.CreateParameter("inventoryBasePermissions", item.BasePermissions));
463 command.Parameters.Add(database.CreateParameter("inventoryEveryOnePermissions", item.EveryOnePermissions)); 463 command.Parameters.Add(database.CreateParameter("inventoryEveryOnePermissions", item.EveryOnePermissions));
464 command.Parameters.Add(database.CreateParameter("inventoryGroupPermissions", item.GroupPermissions)); 464 command.Parameters.Add(database.CreateParameter("inventoryGroupPermissions", item.GroupPermissions));
465 command.Parameters.Add(database.CreateParameter("salePrice", item.SalePrice)); 465 command.Parameters.Add(database.CreateParameter("SalePrice", item.SalePrice));
466 command.Parameters.Add(database.CreateParameter("saleType", item.SaleType)); 466 command.Parameters.Add(database.CreateParameter("SaleType", item.SaleType));
467 command.Parameters.Add(database.CreateParameter("creationDate", item.CreationDate)); 467 command.Parameters.Add(database.CreateParameter("creationDate", item.CreationDate));
468 command.Parameters.Add(database.CreateParameter("groupID", item.GroupID)); 468 command.Parameters.Add(database.CreateParameter("groupID", item.GroupID));
469 command.Parameters.Add(database.CreateParameter("groupOwned", item.GroupOwned)); 469 command.Parameters.Add(database.CreateParameter("groupOwned", item.GroupOwned));
@@ -479,9 +479,9 @@ namespace OpenSim.Data.MSSQL
479 } 479 }
480 } 480 }
481 481
482 sql = "UPDATE inventoryfolders SET version = version + 1 WHERE folderID = @folderID"; 482 sql = @"UPDATE inventoryfolders SET version = version + 1 WHERE ""folderID"" = @folderID";
483 using (SqlConnection conn = new SqlConnection(m_connectionString)) 483 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
484 using (SqlCommand command = new SqlCommand(sql, conn)) 484 using (NpgsqlCommand command = new NpgsqlCommand(sql, conn))
485 { 485 {
486 command.Parameters.Add(database.CreateParameter("folderID", item.Folder.ToString())); 486 command.Parameters.Add(database.CreateParameter("folderID", item.Folder.ToString()));
487 conn.Open(); 487 conn.Open();
@@ -502,26 +502,26 @@ namespace OpenSim.Data.MSSQL
502 /// <param name="item">Inventory item to update</param> 502 /// <param name="item">Inventory item to update</param>
503 public void updateInventoryItem(InventoryItemBase item) 503 public void updateInventoryItem(InventoryItemBase item)
504 { 504 {
505 string sql = @"UPDATE inventoryitems SET assetID = @assetID, 505 string sql = @"UPDATE inventoryitems SET ""assetID"" = :assetID,
506 assetType = @assetType, 506 ""assetType"" = :assetType,
507 parentFolderID = @parentFolderID, 507 ""parentFolderID"" = :parentFolderID,
508 avatarID = @avatarID, 508 ""avatarID"" = :avatarID,
509 inventoryName = @inventoryName, 509 ""inventoryName"" = :inventoryName,
510 inventoryDescription = @inventoryDescription, 510 ""inventoryDescription"" = :inventoryDescription,
511 inventoryNextPermissions = @inventoryNextPermissions, 511 ""inventoryNextPermissions"" = :inventoryNextPermissions,
512 inventoryCurrentPermissions = @inventoryCurrentPermissions, 512 ""inventoryCurrentPermissions"" = :inventoryCurrentPermissions,
513 invType = @invType, 513 ""invType"" = :invType,
514 creatorID = @creatorID, 514 ""creatorID"" = :creatorID,
515 inventoryBasePermissions = @inventoryBasePermissions, 515 ""inventoryBasePermissions"" = :inventoryBasePermissions,
516 inventoryEveryOnePermissions = @inventoryEveryOnePermissions, 516 ""inventoryEveryOnePermissions"" = :inventoryEveryOnePermissions,
517 inventoryGroupPermissions = @inventoryGroupPermissions, 517 ""inventoryGroupPermissions"" = :inventoryGroupPermissions,
518 salePrice = @salePrice, 518 ""salePrice"" = :SalePrice,
519 saleType = @saleType, 519 ""saleType"" = :SaleType,
520 creationDate = @creationDate, 520 ""creationDate"" = :creationDate,
521 groupID = @groupID, 521 ""groupID"" = :groupID,
522 groupOwned = @groupOwned, 522 ""groupOwned"" = :groupOwned,
523 flags = @flags 523 flags = :flags
524 WHERE inventoryID = @inventoryID"; 524 WHERE ""inventoryID"" = :inventoryID";
525 525
526 string itemName = item.Name; 526 string itemName = item.Name;
527 if (item.Name.Length > 64) 527 if (item.Name.Length > 64)
@@ -537,8 +537,8 @@ namespace OpenSim.Data.MSSQL
537 m_log.Warn("[INVENTORY DB]: Description field truncated from " + item.Description.Length.ToString() + " to " + itemDesc.Length.ToString() + " characters on update"); 537 m_log.Warn("[INVENTORY DB]: Description field truncated from " + item.Description.Length.ToString() + " to " + itemDesc.Length.ToString() + " characters on update");
538 } 538 }
539 539
540 using (SqlConnection conn = new SqlConnection(m_connectionString)) 540 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
541 using (SqlCommand command = new SqlCommand(sql, conn)) 541 using (NpgsqlCommand command = new NpgsqlCommand(sql, conn))
542 { 542 {
543 command.Parameters.Add(database.CreateParameter("inventoryID", item.ID)); 543 command.Parameters.Add(database.CreateParameter("inventoryID", item.ID));
544 command.Parameters.Add(database.CreateParameter("assetID", item.AssetID)); 544 command.Parameters.Add(database.CreateParameter("assetID", item.AssetID));
@@ -554,8 +554,8 @@ namespace OpenSim.Data.MSSQL
554 command.Parameters.Add(database.CreateParameter("inventoryBasePermissions", item.BasePermissions)); 554 command.Parameters.Add(database.CreateParameter("inventoryBasePermissions", item.BasePermissions));
555 command.Parameters.Add(database.CreateParameter("inventoryEveryOnePermissions", item.EveryOnePermissions)); 555 command.Parameters.Add(database.CreateParameter("inventoryEveryOnePermissions", item.EveryOnePermissions));
556 command.Parameters.Add(database.CreateParameter("inventoryGroupPermissions", item.GroupPermissions)); 556 command.Parameters.Add(database.CreateParameter("inventoryGroupPermissions", item.GroupPermissions));
557 command.Parameters.Add(database.CreateParameter("salePrice", item.SalePrice)); 557 command.Parameters.Add(database.CreateParameter("SalePrice", item.SalePrice));
558 command.Parameters.Add(database.CreateParameter("saleType", item.SaleType)); 558 command.Parameters.Add(database.CreateParameter("SaleType", item.SaleType));
559 command.Parameters.Add(database.CreateParameter("creationDate", item.CreationDate)); 559 command.Parameters.Add(database.CreateParameter("creationDate", item.CreationDate));
560 command.Parameters.Add(database.CreateParameter("groupID", item.GroupID)); 560 command.Parameters.Add(database.CreateParameter("groupID", item.GroupID));
561 command.Parameters.Add(database.CreateParameter("groupOwned", item.GroupOwned)); 561 command.Parameters.Add(database.CreateParameter("groupOwned", item.GroupOwned));
@@ -580,9 +580,9 @@ namespace OpenSim.Data.MSSQL
580 /// <param name="itemID">the item UUID</param> 580 /// <param name="itemID">the item UUID</param>
581 public void deleteInventoryItem(UUID itemID) 581 public void deleteInventoryItem(UUID itemID)
582 { 582 {
583 string sql = "DELETE FROM inventoryitems WHERE inventoryID=@inventoryID"; 583 string sql = @"DELETE FROM inventoryitems WHERE ""inventoryID""=:inventoryID";
584 using (SqlConnection conn = new SqlConnection(m_connectionString)) 584 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
585 using (SqlCommand cmd = new SqlCommand(sql, conn)) 585 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
586 { 586 {
587 cmd.Parameters.Add(database.CreateParameter("inventoryID", itemID)); 587 cmd.Parameters.Add(database.CreateParameter("inventoryID", itemID));
588 try 588 try
@@ -616,14 +616,14 @@ namespace OpenSim.Data.MSSQL
616 /// </returns> 616 /// </returns>
617 public List<InventoryItemBase> fetchActiveGestures(UUID avatarID) 617 public List<InventoryItemBase> fetchActiveGestures(UUID avatarID)
618 { 618 {
619 string sql = "SELECT * FROM inventoryitems WHERE avatarId = @uuid AND assetType = @assetType and flags = 1"; 619 string sql = @"SELECT * FROM inventoryitems WHERE ""avatarID"" = :uuid AND ""assetType"" = :assetType and flags = 1";
620 using (SqlConnection conn = new SqlConnection(m_connectionString)) 620 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
621 using (SqlCommand cmd = new SqlCommand(sql, conn)) 621 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
622 { 622 {
623 cmd.Parameters.Add(database.CreateParameter("uuid", avatarID)); 623 cmd.Parameters.Add(database.CreateParameter("uuid", avatarID));
624 cmd.Parameters.Add(database.CreateParameter("assetType", (int)AssetType.Gesture)); 624 cmd.Parameters.Add(database.CreateParameter("assetType", (int)AssetType.Gesture));
625 conn.Open(); 625 conn.Open();
626 using (SqlDataReader reader = cmd.ExecuteReader()) 626 using (NpgsqlDataReader reader = cmd.ExecuteReader())
627 { 627 {
628 List<InventoryItemBase> gestureList = new List<InventoryItemBase>(); 628 List<InventoryItemBase> gestureList = new List<InventoryItemBase>();
629 while (reader.Read()) 629 while (reader.Read())
@@ -644,9 +644,9 @@ namespace OpenSim.Data.MSSQL
644 /// </summary> 644 /// </summary>
645 /// <param name="folderID">the item ID</param> 645 /// <param name="folderID">the item ID</param>
646 /// <param name="connection">connection to the database</param> 646 /// <param name="connection">connection to the database</param>
647 private void DeleteItemsInFolder(UUID folderID, SqlConnection connection) 647 private void DeleteItemsInFolder(UUID folderID, NpgsqlConnection connection)
648 { 648 {
649 using (SqlCommand command = new SqlCommand("DELETE FROM inventoryitems WHERE folderID=@folderID", connection)) 649 using (NpgsqlCommand command = new NpgsqlCommand(@"DELETE FROM inventoryitems WHERE ""folderID""=:folderID", connection))
650 { 650 {
651 command.Parameters.Add(database.CreateParameter("folderID", folderID)); 651 command.Parameters.Add(database.CreateParameter("folderID", folderID));
652 652
@@ -667,9 +667,9 @@ namespace OpenSim.Data.MSSQL
667 /// <param name="parentID">parent ID.</param> 667 /// <param name="parentID">parent ID.</param>
668 /// <param name="command">SQL command/connection to database</param> 668 /// <param name="command">SQL command/connection to database</param>
669 /// <returns></returns> 669 /// <returns></returns>
670 private static List<InventoryFolderBase> getFolderHierarchy(UUID parentID, SqlCommand command) 670 private static List<InventoryFolderBase> getFolderHierarchy(UUID parentID, NpgsqlCommand command)
671 { 671 {
672 command.Parameters["@parentID"].Value = parentID.Guid; //.ToString(); 672 command.Parameters["parentID"].Value = parentID.Guid; //.ToString();
673 673
674 List<InventoryFolderBase> folders = getInventoryFolders(command); 674 List<InventoryFolderBase> folders = getInventoryFolders(command);
675 675
@@ -698,9 +698,9 @@ namespace OpenSim.Data.MSSQL
698 /// <returns></returns> 698 /// <returns></returns>
699 private List<InventoryFolderBase> getInventoryFolders(UUID parentID, UUID user) 699 private List<InventoryFolderBase> getInventoryFolders(UUID parentID, UUID user)
700 { 700 {
701 string sql = "SELECT * FROM inventoryfolders WHERE parentFolderID = @parentID AND agentID LIKE @uuid"; 701 string sql = @"SELECT * FROM inventoryfolders WHERE ""parentFolderID"" = :parentID AND ""agentID"" = :uuid";
702 using (SqlConnection conn = new SqlConnection(m_connectionString)) 702 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
703 using (SqlCommand command = new SqlCommand(sql, conn)) 703 using (NpgsqlCommand command = new NpgsqlCommand(sql, conn))
704 { 704 {
705 if (user == UUID.Zero) 705 if (user == UUID.Zero)
706 { 706 {
@@ -721,9 +721,9 @@ namespace OpenSim.Data.MSSQL
721 /// </summary> 721 /// </summary>
722 /// <param name="command">SQLcommand.</param> 722 /// <param name="command">SQLcommand.</param>
723 /// <returns></returns> 723 /// <returns></returns>
724 private static List<InventoryFolderBase> getInventoryFolders(SqlCommand command) 724 private static List<InventoryFolderBase> getInventoryFolders(NpgsqlCommand command)
725 { 725 {
726 using (SqlDataReader reader = command.ExecuteReader()) 726 using (NpgsqlDataReader reader = command.ExecuteReader())
727 { 727 {
728 728
729 List<InventoryFolderBase> items = new List<InventoryFolderBase>(); 729 List<InventoryFolderBase> items = new List<InventoryFolderBase>();
@@ -738,9 +738,9 @@ namespace OpenSim.Data.MSSQL
738 /// <summary> 738 /// <summary>
739 /// Reads a list of inventory folders returned by a query. 739 /// Reads a list of inventory folders returned by a query.
740 /// </summary> 740 /// </summary>
741 /// <param name="reader">A MSSQL Data Reader</param> 741 /// <param name="reader">A PGSQL Data Reader</param>
742 /// <returns>A List containing inventory folders</returns> 742 /// <returns>A List containing inventory folders</returns>
743 protected static InventoryFolderBase readInventoryFolder(SqlDataReader reader) 743 protected static InventoryFolderBase readInventoryFolder(NpgsqlDataReader reader)
744 { 744 {
745 try 745 try
746 { 746 {
@@ -796,7 +796,7 @@ namespace OpenSim.Data.MSSQL
796 796
797 return item; 797 return item;
798 } 798 }
799 catch (SqlException e) 799 catch (NpgsqlException e)
800 { 800 {
801 m_log.Error("[INVENTORY DB]: Error reading inventory item :" + e.Message); 801 m_log.Error("[INVENTORY DB]: Error reading inventory item :" + e.Message);
802 } 802 }
@@ -809,18 +809,18 @@ namespace OpenSim.Data.MSSQL
809 /// </summary> 809 /// </summary>
810 /// <param name="folderID">the folder UUID</param> 810 /// <param name="folderID">the folder UUID</param>
811 /// <param name="connection">connection to database</param> 811 /// <param name="connection">connection to database</param>
812 private void DeleteOneFolder(UUID folderID, SqlConnection connection) 812 private void DeleteOneFolder(UUID folderID, NpgsqlConnection connection)
813 { 813 {
814 try 814 try
815 { 815 {
816 using (SqlCommand command = new SqlCommand("DELETE FROM inventoryfolders WHERE folderID=@folderID and type=-1", connection)) 816 using (NpgsqlCommand command = new NpgsqlCommand(@"DELETE FROM inventoryfolders WHERE ""folderID""=:folderID and type=-1", connection))
817 { 817 {
818 command.Parameters.Add(database.CreateParameter("folderID", folderID)); 818 command.Parameters.Add(database.CreateParameter("folderID", folderID));
819 819
820 command.ExecuteNonQuery(); 820 command.ExecuteNonQuery();
821 } 821 }
822 } 822 }
823 catch (SqlException e) 823 catch (NpgsqlException e)
824 { 824 {
825 m_log.Error("[INVENTORY DB]: Error deleting folder :" + e.Message); 825 m_log.Error("[INVENTORY DB]: Error deleting folder :" + e.Message);
826 } 826 }
diff --git a/OpenSim/Data/MSSQL/MSSQLManager.cs b/OpenSim/Data/PGSQL/PGSQLManager.cs
index 9a0015c..46f835a 100644
--- a/OpenSim/Data/MSSQL/MSSQLManager.cs
+++ b/OpenSim/Data/PGSQL/PGSQLManager.cs
@@ -28,18 +28,20 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Data; 30using System.Data;
31using System.Data.SqlClient;
32using System.IO; 31using System.IO;
33using System.Reflection; 32using System.Reflection;
33using OpenSim.Framework;
34using log4net; 34using log4net;
35using OpenMetaverse; 35using OpenMetaverse;
36using Npgsql;
37using NpgsqlTypes;
36 38
37namespace OpenSim.Data.MSSQL 39namespace OpenSim.Data.PGSQL
38{ 40{
39 /// <summary> 41 /// <summary>
40 /// A management class for the MS SQL Storage Engine 42 /// A management class for the MS SQL Storage Engine
41 /// </summary> 43 /// </summary>
42 public class MSSQLManager 44 public class PGSQLManager
43 { 45 {
44// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 46// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45 47
@@ -52,9 +54,37 @@ namespace OpenSim.Data.MSSQL
52 /// Initialize the manager and set the connectionstring 54 /// Initialize the manager and set the connectionstring
53 /// </summary> 55 /// </summary>
54 /// <param name="connection"></param> 56 /// <param name="connection"></param>
55 public MSSQLManager(string connection) 57 public PGSQLManager(string connection)
56 { 58 {
57 connectionString = connection; 59 connectionString = connection;
60 InitializeMonoSecurity();
61 }
62
63 public void InitializeMonoSecurity()
64 {
65 if (!Util.IsPlatformMono)
66 {
67 if (AppDomain.CurrentDomain.GetData("MonoSecurityPostgresAdded") == null)
68 {
69 AppDomain.CurrentDomain.SetData("MonoSecurityPostgresAdded", "true");
70
71 AppDomain currentDomain = AppDomain.CurrentDomain;
72 currentDomain.AssemblyResolve += new ResolveEventHandler(ResolveEventHandlerMonoSec);
73 }
74 }
75 }
76
77 private System.Reflection.Assembly ResolveEventHandlerMonoSec(object sender, ResolveEventArgs args)
78 {
79 Assembly MyAssembly = null;
80
81 if (args.Name.Substring(0, args.Name.IndexOf(",")) == "Mono.Security")
82 {
83 MyAssembly = Assembly.LoadFrom("lib/NET/Mono.Security.dll");
84 }
85
86 //Return the loaded assembly.
87 return MyAssembly;
58 } 88 }
59 89
60 /// <summary> 90 /// <summary>
@@ -62,54 +92,97 @@ namespace OpenSim.Data.MSSQL
62 /// </summary> 92 /// </summary>
63 /// <param name="type"></param> 93 /// <param name="type"></param>
64 /// <returns></returns> 94 /// <returns></returns>
65 internal SqlDbType DbtypeFromType(Type type) 95 internal NpgsqlDbType DbtypeFromType(Type type)
66 { 96 {
67 if (type == typeof(string)) 97 if (type == typeof(string))
68 { 98 {
69 return SqlDbType.VarChar; 99 return NpgsqlDbType.Varchar;
70 } 100 }
71 if (type == typeof(double)) 101 if (type == typeof(double))
72 { 102 {
73 return SqlDbType.Float; 103 return NpgsqlDbType.Double;
74 } 104 }
75 if (type == typeof(Single)) 105 if (type == typeof(Single))
76 { 106 {
77 return SqlDbType.Float; 107 return NpgsqlDbType.Double;
78 } 108 }
79 if (type == typeof(int)) 109 if (type == typeof(int))
80 { 110 {
81 return SqlDbType.Int; 111 return NpgsqlDbType.Integer;
82 } 112 }
83 if (type == typeof(bool)) 113 if (type == typeof(bool))
84 { 114 {
85 return SqlDbType.Bit; 115 return NpgsqlDbType.Boolean;
86 } 116 }
87 if (type == typeof(UUID)) 117 if (type == typeof(UUID))
88 { 118 {
89 return SqlDbType.UniqueIdentifier; 119 return NpgsqlDbType.Uuid;
120 }
121 if (type == typeof(byte))
122 {
123 return NpgsqlDbType.Smallint;
90 } 124 }
91 if (type == typeof(sbyte)) 125 if (type == typeof(sbyte))
92 { 126 {
93 return SqlDbType.Int; 127 return NpgsqlDbType.Integer;
94 } 128 }
95 if (type == typeof(Byte[])) 129 if (type == typeof(Byte[]))
96 { 130 {
97 return SqlDbType.Image; 131 return NpgsqlDbType.Bytea;
98 } 132 }
99 if (type == typeof(uint) || type == typeof(ushort)) 133 if (type == typeof(uint) || type == typeof(ushort))
100 { 134 {
101 return SqlDbType.Int; 135 return NpgsqlDbType.Integer;
102 } 136 }
103 if (type == typeof(ulong)) 137 if (type == typeof(ulong))
104 { 138 {
105 return SqlDbType.BigInt; 139 return NpgsqlDbType.Bigint;
106 } 140 }
107 if (type == typeof(DateTime)) 141 if (type == typeof(DateTime))
108 { 142 {
109 return SqlDbType.DateTime; 143 return NpgsqlDbType.Timestamp;
110 } 144 }
111 145
112 return SqlDbType.VarChar; 146 return NpgsqlDbType.Varchar;
147 }
148
149 internal NpgsqlDbType DbtypeFromString(Type type, string PGFieldType)
150 {
151 if (PGFieldType == "")
152 {
153 return DbtypeFromType(type);
154 }
155
156 if (PGFieldType == "character varying")
157 {
158 return NpgsqlDbType.Varchar;
159 }
160 if (PGFieldType == "double precision")
161 {
162 return NpgsqlDbType.Double;
163 }
164 if (PGFieldType == "integer")
165 {
166 return NpgsqlDbType.Integer;
167 }
168 if (PGFieldType == "smallint")
169 {
170 return NpgsqlDbType.Smallint;
171 }
172 if (PGFieldType == "boolean")
173 {
174 return NpgsqlDbType.Boolean;
175 }
176 if (PGFieldType == "uuid")
177 {
178 return NpgsqlDbType.Uuid;
179 }
180 if (PGFieldType == "bytea")
181 {
182 return NpgsqlDbType.Bytea;
183 }
184
185 return DbtypeFromType(type);
113 } 186 }
114 187
115 /// <summary> 188 /// <summary>
@@ -131,7 +204,7 @@ namespace OpenSim.Data.MSSQL
131 } 204 }
132 if (valueType == typeof(bool)) 205 if (valueType == typeof(bool))
133 { 206 {
134 return (bool)value ? 1 : 0; 207 return (bool)value;
135 } 208 }
136 if (valueType == typeof(Byte[])) 209 if (valueType == typeof(Byte[]))
137 { 210 {
@@ -145,12 +218,51 @@ namespace OpenSim.Data.MSSQL
145 } 218 }
146 219
147 /// <summary> 220 /// <summary>
221 /// Create value for parameter based on PGSQL Schema
222 /// </summary>
223 /// <param name="value"></param>
224 /// <param name="PGFieldType"></param>
225 /// <returns></returns>
226 internal static object CreateParameterValue(object value, string PGFieldType)
227 {
228 if (PGFieldType == "uuid")
229 {
230 UUID uidout;
231 UUID.TryParse(value.ToString(), out uidout);
232 return uidout;
233 }
234 if (PGFieldType == "integer")
235 {
236 int intout;
237 int.TryParse(value.ToString(), out intout);
238 return intout;
239 }
240 if (PGFieldType == "boolean")
241 {
242 return (value.ToString() == "true");
243 }
244 if (PGFieldType == "timestamp with time zone")
245 {
246 return (DateTime)value;
247 }
248 if (PGFieldType == "timestamp without time zone")
249 {
250 return (DateTime)value;
251 }
252 if (PGFieldType == "double precision")
253 {
254 return (Double)value;
255 }
256 return CreateParameterValue(value);
257 }
258
259 /// <summary>
148 /// Create a parameter for a command 260 /// Create a parameter for a command
149 /// </summary> 261 /// </summary>
150 /// <param name="parameterName">Name of the parameter.</param> 262 /// <param name="parameterName">Name of the parameter.</param>
151 /// <param name="parameterObject">parameter object.</param> 263 /// <param name="parameterObject">parameter object.</param>
152 /// <returns></returns> 264 /// <returns></returns>
153 internal SqlParameter CreateParameter(string parameterName, object parameterObject) 265 internal NpgsqlParameter CreateParameter(string parameterName, object parameterObject)
154 { 266 {
155 return CreateParameter(parameterName, parameterObject, false); 267 return CreateParameter(parameterName, parameterObject, false);
156 } 268 }
@@ -162,15 +274,15 @@ namespace OpenSim.Data.MSSQL
162 /// <param name="parameterObject">parameter object.</param> 274 /// <param name="parameterObject">parameter object.</param>
163 /// <param name="parameterOut">if set to <c>true</c> parameter is a output parameter</param> 275 /// <param name="parameterOut">if set to <c>true</c> parameter is a output parameter</param>
164 /// <returns></returns> 276 /// <returns></returns>
165 internal SqlParameter CreateParameter(string parameterName, object parameterObject, bool parameterOut) 277 internal NpgsqlParameter CreateParameter(string parameterName, object parameterObject, bool parameterOut)
166 { 278 {
167 //Tweak so we dont always have to add @ sign 279 //Tweak so we dont always have to add : sign
168 if (!parameterName.StartsWith("@")) parameterName = "@" + parameterName; 280 if (parameterName.StartsWith(":")) parameterName = parameterName.Replace(":","");
169 281
170 //HACK if object is null, it is turned into a string, there are no nullable type till now 282 //HACK if object is null, it is turned into a string, there are no nullable type till now
171 if (parameterObject == null) parameterObject = ""; 283 if (parameterObject == null) parameterObject = "";
172 284
173 SqlParameter parameter = new SqlParameter(parameterName, DbtypeFromType(parameterObject.GetType())); 285 NpgsqlParameter parameter = new NpgsqlParameter(parameterName, DbtypeFromType(parameterObject.GetType()));
174 286
175 if (parameterOut) 287 if (parameterOut)
176 { 288 {
@@ -186,16 +298,39 @@ namespace OpenSim.Data.MSSQL
186 } 298 }
187 299
188 /// <summary> 300 /// <summary>
301 /// Create a parameter with PGSQL schema type
302 /// </summary>
303 /// <param name="parameterName"></param>
304 /// <param name="parameterObject"></param>
305 /// <param name="PGFieldType"></param>
306 /// <returns></returns>
307 internal NpgsqlParameter CreateParameter(string parameterName, object parameterObject, string PGFieldType)
308 {
309 //Tweak so we dont always have to add : sign
310 if (parameterName.StartsWith(":")) parameterName = parameterName.Replace(":", "");
311
312 //HACK if object is null, it is turned into a string, there are no nullable type till now
313 if (parameterObject == null) parameterObject = "";
314
315 NpgsqlParameter parameter = new NpgsqlParameter(parameterName, DbtypeFromString(parameterObject.GetType(), PGFieldType));
316
317 parameter.Direction = ParameterDirection.Input;
318 parameter.Value = CreateParameterValue(parameterObject, PGFieldType);
319
320 return parameter;
321 }
322
323 /// <summary>
189 /// Checks if we need to do some migrations to the database 324 /// Checks if we need to do some migrations to the database
190 /// </summary> 325 /// </summary>
191 /// <param name="migrationStore">migrationStore.</param> 326 /// <param name="migrationStore">migrationStore.</param>
192 public void CheckMigration(string migrationStore) 327 public void CheckMigration(string migrationStore)
193 { 328 {
194 using (SqlConnection connection = new SqlConnection(connectionString)) 329 using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
195 { 330 {
196 connection.Open(); 331 connection.Open();
197 Assembly assem = GetType().Assembly; 332 Assembly assem = GetType().Assembly;
198 MSSQLMigration migration = new MSSQLMigration(connection, assem, migrationStore); 333 PGSQLMigration migration = new PGSQLMigration(connection, assem, migrationStore);
199 334
200 migration.Update(); 335 migration.Update();
201 } 336 }
diff --git a/OpenSim/Data/MSSQL/MSSQLMigration.cs b/OpenSim/Data/PGSQL/PGSQLMigration.cs
index c2fecef..709fde0 100644
--- a/OpenSim/Data/MSSQL/MSSQLMigration.cs
+++ b/OpenSim/Data/PGSQL/PGSQLMigration.cs
@@ -25,22 +25,22 @@
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using Npgsql;
28using System; 29using System;
29using System.Data; 30using System.Data;
30using System.Data.Common; 31using System.Data.Common;
31using System.Reflection; 32using System.Reflection;
32using System.Data.SqlClient;
33 33
34namespace OpenSim.Data.MSSQL 34namespace OpenSim.Data.PGSQL
35{ 35{
36 public class MSSQLMigration : Migration 36 public class PGSQLMigration : Migration
37 { 37 {
38 public MSSQLMigration(DbConnection conn, Assembly assem, string type) 38 public PGSQLMigration(NpgsqlConnection conn, Assembly assem, string type)
39 : base(conn, assem, type) 39 : base(conn, assem, type)
40 { 40 {
41 } 41 }
42 42
43 public MSSQLMigration(DbConnection conn, Assembly assem, string subtype, string type) 43 public PGSQLMigration(NpgsqlConnection conn, Assembly assem, string subtype, string type)
44 : base(conn, assem, subtype, type) 44 : base(conn, assem, subtype, type)
45 { 45 {
46 } 46 }
@@ -48,12 +48,15 @@ namespace OpenSim.Data.MSSQL
48 protected override int FindVersion(DbConnection conn, string type) 48 protected override int FindVersion(DbConnection conn, string type)
49 { 49 {
50 int version = 0; 50 int version = 0;
51 using (DbCommand cmd = conn.CreateCommand()) 51 NpgsqlConnection lcConn = (NpgsqlConnection)conn;
52
53 using (NpgsqlCommand cmd = lcConn.CreateCommand())
52 { 54 {
53 try 55 try
54 { 56 {
55 cmd.CommandText = "select top 1 version from migrations where name = '" + type + "' order by version desc"; //Must be 57 cmd.CommandText = "select version from migrations where name = '" + type + "' " +
56 using (IDataReader reader = cmd.ExecuteReader()) 58 " order by version desc limit 1"; //Must be
59 using (NpgsqlDataReader reader = cmd.ExecuteReader())
57 { 60 {
58 if (reader.Read()) 61 if (reader.Read())
59 { 62 {
@@ -73,7 +76,7 @@ namespace OpenSim.Data.MSSQL
73 76
74 protected override void ExecuteScript(DbConnection conn, string[] script) 77 protected override void ExecuteScript(DbConnection conn, string[] script)
75 { 78 {
76 if (!(conn is SqlConnection)) 79 if (!(conn is NpgsqlConnection))
77 { 80 {
78 base.ExecuteScript(conn, script); 81 base.ExecuteScript(conn, script);
79 return; 82 return;
@@ -83,7 +86,7 @@ namespace OpenSim.Data.MSSQL
83 { 86 {
84 try 87 try
85 { 88 {
86 using (SqlCommand cmd = new SqlCommand(sql, (SqlConnection)conn)) 89 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, (NpgsqlConnection)conn))
87 { 90 {
88 cmd.ExecuteNonQuery(); 91 cmd.ExecuteNonQuery();
89 } 92 }
diff --git a/OpenSim/Data/MSSQL/MSSQLPresenceData.cs b/OpenSim/Data/PGSQL/PGSQLPresenceData.cs
index 0c71e79..0376585 100644..100755
--- a/OpenSim/Data/MSSQL/MSSQLPresenceData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLPresenceData.cs
@@ -33,27 +33,26 @@ using System.Threading;
33using log4net; 33using log4net;
34using OpenMetaverse; 34using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
36using System.Data.SqlClient; 36using Npgsql;
37 37
38namespace OpenSim.Data.MSSQL 38namespace OpenSim.Data.PGSQL
39{ 39{
40 /// <summary> 40 /// <summary>
41 /// A MySQL Interface for the Presence Server 41 /// A PGSQL Interface for the Presence Server
42 /// </summary> 42 /// </summary>
43 public class MSSQLPresenceData : MSSQLGenericTableHandler<PresenceData>, 43 public class PGSQLPresenceData : PGSQLGenericTableHandler<PresenceData>,
44 IPresenceData 44 IPresenceData
45 { 45 {
46// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 46// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47 47
48 public MSSQLPresenceData(string connectionString, string realm) : 48 public PGSQLPresenceData(string connectionString, string realm) :
49 base(connectionString, realm, "Presence") 49 base(connectionString, realm, "Presence")
50 { 50 {
51 } 51 }
52 52
53 public PresenceData Get(UUID sessionID) 53 public PresenceData Get(UUID sessionID)
54 { 54 {
55 PresenceData[] ret = Get("SessionID", 55 PresenceData[] ret = Get("SessionID", sessionID.ToString());
56 sessionID.ToString());
57 56
58 if (ret.Length == 0) 57 if (ret.Length == 0)
59 return null; 58 return null;
@@ -63,13 +62,13 @@ namespace OpenSim.Data.MSSQL
63 62
64 public void LogoutRegionAgents(UUID regionID) 63 public void LogoutRegionAgents(UUID regionID)
65 { 64 {
66 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 65 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
67 using (SqlCommand cmd = new SqlCommand()) 66 using (NpgsqlCommand cmd = new NpgsqlCommand())
68 { 67 {
69 68
70 cmd.CommandText = String.Format("DELETE FROM {0} WHERE [RegionID]=@RegionID", m_Realm); 69 cmd.CommandText = String.Format("DELETE FROM {0} WHERE \"RegionID\" = :regionID", m_Realm);
71 70
72 cmd.Parameters.Add(m_database.CreateParameter("@RegionID", regionID.ToString())); 71 cmd.Parameters.Add(m_database.CreateParameter("RegionID", regionID));
73 cmd.Connection = conn; 72 cmd.Connection = conn;
74 conn.Open(); 73 conn.Open();
75 cmd.ExecuteNonQuery(); 74 cmd.ExecuteNonQuery();
@@ -81,17 +80,18 @@ namespace OpenSim.Data.MSSQL
81 PresenceData[] pd = Get("SessionID", sessionID.ToString()); 80 PresenceData[] pd = Get("SessionID", sessionID.ToString());
82 if (pd.Length == 0) 81 if (pd.Length == 0)
83 return false; 82 return false;
83
84 if (regionID == UUID.Zero)
85 return false;
84 86
85 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 87 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
86 using (SqlCommand cmd = new SqlCommand()) 88 using (NpgsqlCommand cmd = new NpgsqlCommand())
87 { 89 {
88 90
89 cmd.CommandText = String.Format(@"UPDATE {0} SET 91 cmd.CommandText = String.Format("UPDATE {0} SET \"RegionID\" = :regionID, \"LastSeen\" = now() WHERE \"SessionID\" = :sessionID", m_Realm);
90 [RegionID] = @RegionID
91 WHERE [SessionID] = @SessionID", m_Realm);
92 92
93 cmd.Parameters.Add(m_database.CreateParameter("@SessionID", sessionID.ToString())); 93 cmd.Parameters.Add(m_database.CreateParameter("SessionID", sessionID));
94 cmd.Parameters.Add(m_database.CreateParameter("@RegionID", regionID.ToString())); 94 cmd.Parameters.Add(m_database.CreateParameter("RegionID", regionID));
95 cmd.Connection = conn; 95 cmd.Connection = conn;
96 conn.Open(); 96 conn.Open();
97 if (cmd.ExecuteNonQuery() == 0) 97 if (cmd.ExecuteNonQuery() == 0)
@@ -102,8 +102,7 @@ namespace OpenSim.Data.MSSQL
102 102
103 public bool VerifyAgent(UUID agentId, UUID secureSessionID) 103 public bool VerifyAgent(UUID agentId, UUID secureSessionID)
104 { 104 {
105 PresenceData[] ret = Get("SecureSessionID", 105 PresenceData[] ret = Get("SecureSessionID", secureSessionID.ToString());
106 secureSessionID.ToString());
107 106
108 if (ret.Length == 0) 107 if (ret.Length == 0)
109 return false; 108 return false;
diff --git a/OpenSim/Data/MSSQL/MSSQLRegionData.cs b/OpenSim/Data/PGSQL/PGSQLRegionData.cs
index 0d89706..b3076f0 100644
--- a/OpenSim/Data/MSSQL/MSSQLRegionData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLRegionData.cs
@@ -28,7 +28,6 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Data; 30using System.Data;
31using System.Data.SqlClient;
32using System.Drawing; 31using System.Drawing;
33using System.IO; 32using System.IO;
34using System.Reflection; 33using System.Reflection;
@@ -38,45 +37,80 @@ using OpenSim.Framework;
38using OpenSim.Region.Framework.Interfaces; 37using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes; 38using OpenSim.Region.Framework.Scenes;
40using RegionFlags = OpenSim.Framework.RegionFlags; 39using RegionFlags = OpenSim.Framework.RegionFlags;
40using Npgsql;
41 41
42namespace OpenSim.Data.MSSQL 42namespace OpenSim.Data.PGSQL
43{ 43{
44 /// <summary> 44 /// <summary>
45 /// A MSSQL Interface for the Region Server. 45 /// A PGSQL Interface for the Region Server.
46 /// </summary> 46 /// </summary>
47 public class MSSQLRegionData : IRegionData 47 public class PGSQLRegionData : IRegionData
48 { 48 {
49 private string m_Realm; 49 private string m_Realm;
50 private List<string> m_ColumnNames = null; 50 private List<string> m_ColumnNames = null;
51 private string m_ConnectionString; 51 private string m_ConnectionString;
52 private MSSQLManager m_database; 52 private PGSQLManager m_database;
53 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 53 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
54 54
55 public MSSQLRegionData(string connectionString, string realm) 55 protected Dictionary<string, string> m_FieldTypes = new Dictionary<string, string>();
56
57 protected virtual Assembly Assembly
58 {
59 get { return GetType().Assembly; }
60 }
61
62 public PGSQLRegionData(string connectionString, string realm)
56 { 63 {
57 m_Realm = realm; 64 m_Realm = realm;
58 m_ConnectionString = connectionString; 65 m_ConnectionString = connectionString;
59 m_database = new MSSQLManager(connectionString); 66 m_database = new PGSQLManager(connectionString);
60 67
61 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 68 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
62 { 69 {
63 conn.Open(); 70 conn.Open();
64 Migration m = new Migration(conn, GetType().Assembly, "GridStore"); 71 Migration m = new Migration(conn, GetType().Assembly, "GridStore");
65 m.Update(); 72 m.Update();
66 } 73 }
74 LoadFieldTypes();
67 } 75 }
68 76
77 private void LoadFieldTypes()
78 {
79 m_FieldTypes = new Dictionary<string, string>();
80
81 string query = string.Format(@"select column_name,data_type
82 from INFORMATION_SCHEMA.COLUMNS
83 where table_name = lower('{0}');
84
85 ", m_Realm);
86 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
87 using (NpgsqlCommand cmd = new NpgsqlCommand(query, conn))
88 {
89 conn.Open();
90 using (NpgsqlDataReader rdr = cmd.ExecuteReader())
91 {
92 while (rdr.Read())
93 {
94 // query produces 0 to many rows of single column, so always add the first item in each row
95 m_FieldTypes.Add((string)rdr[0], (string)rdr[1]);
96 }
97 }
98 }
99 }
100
69 public List<RegionData> Get(string regionName, UUID scopeID) 101 public List<RegionData> Get(string regionName, UUID scopeID)
70 { 102 {
71 string sql = "select * from ["+m_Realm+"] where regionName like @regionName"; 103 string sql = "select * from "+m_Realm+" where lower(\"regionName\") like lower(:regionName) ";
72 if (scopeID != UUID.Zero) 104 if (scopeID != UUID.Zero)
73 sql += " and ScopeID = @scopeID"; 105 sql += " and \"ScopeID\" = :scopeID";
74 sql += " order by regionName"; 106 sql += " order by lower(\"regionName\")";
75 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 107
76 using (SqlCommand cmd = new SqlCommand(sql, conn)) 108 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
109 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
77 { 110 {
78 cmd.Parameters.Add(m_database.CreateParameter("@regionName", regionName)); 111 cmd.Parameters.Add(m_database.CreateParameter("regionName", regionName));
79 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID)); 112 if (scopeID != UUID.Zero)
113 cmd.Parameters.Add(m_database.CreateParameter("scopeID", scopeID));
80 conn.Open(); 114 conn.Open();
81 return RunCommand(cmd); 115 return RunCommand(cmd);
82 } 116 }
@@ -84,16 +118,17 @@ namespace OpenSim.Data.MSSQL
84 118
85 public RegionData Get(int posX, int posY, UUID scopeID) 119 public RegionData Get(int posX, int posY, UUID scopeID)
86 { 120 {
87 string sql = "select * from ["+m_Realm+"] where locX = @posX and locY = @posY"; 121 string sql = "select * from "+m_Realm+" where \"locX\" = :posX and \"locY\" = :posY";
88 if (scopeID != UUID.Zero) 122 if (scopeID != UUID.Zero)
89 sql += " and ScopeID = @scopeID"; 123 sql += " and \"ScopeID\" = :scopeID";
90 124
91 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 125 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
92 using (SqlCommand cmd = new SqlCommand(sql, conn)) 126 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
93 { 127 {
94 cmd.Parameters.Add(m_database.CreateParameter("@posX", posX.ToString())); 128 cmd.Parameters.Add(m_database.CreateParameter("posX", posX));
95 cmd.Parameters.Add(m_database.CreateParameter("@posY", posY.ToString())); 129 cmd.Parameters.Add(m_database.CreateParameter("posY", posY));
96 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID)); 130 if (scopeID != UUID.Zero)
131 cmd.Parameters.Add(m_database.CreateParameter("scopeID", scopeID));
97 conn.Open(); 132 conn.Open();
98 List<RegionData> ret = RunCommand(cmd); 133 List<RegionData> ret = RunCommand(cmd);
99 if (ret.Count == 0) 134 if (ret.Count == 0)
@@ -105,14 +140,15 @@ namespace OpenSim.Data.MSSQL
105 140
106 public RegionData Get(UUID regionID, UUID scopeID) 141 public RegionData Get(UUID regionID, UUID scopeID)
107 { 142 {
108 string sql = "select * from ["+m_Realm+"] where uuid = @regionID"; 143 string sql = "select * from "+m_Realm+" where uuid = :regionID";
109 if (scopeID != UUID.Zero) 144 if (scopeID != UUID.Zero)
110 sql += " and ScopeID = @scopeID"; 145 sql += " and \"ScopeID\" = :scopeID";
111 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 146 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
112 using (SqlCommand cmd = new SqlCommand(sql, conn)) 147 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
113 { 148 {
114 cmd.Parameters.Add(m_database.CreateParameter("@regionID", regionID)); 149 cmd.Parameters.Add(m_database.CreateParameter("regionID", regionID));
115 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID)); 150 if (scopeID != UUID.Zero)
151 cmd.Parameters.Add(m_database.CreateParameter("scopeID", scopeID));
116 conn.Open(); 152 conn.Open();
117 List<RegionData> ret = RunCommand(cmd); 153 List<RegionData> ret = RunCommand(cmd);
118 if (ret.Count == 0) 154 if (ret.Count == 0)
@@ -124,28 +160,28 @@ namespace OpenSim.Data.MSSQL
124 160
125 public List<RegionData> Get(int startX, int startY, int endX, int endY, UUID scopeID) 161 public List<RegionData> Get(int startX, int startY, int endX, int endY, UUID scopeID)
126 { 162 {
127 string sql = "select * from ["+m_Realm+"] where locX between @startX and @endX and locY between @startY and @endY"; 163 string sql = "select * from "+m_Realm+" where \"locX\" between :startX and :endX and \"locY\" between :startY and :endY";
128 if (scopeID != UUID.Zero) 164 if (scopeID != UUID.Zero)
129 sql += " and ScopeID = @scopeID"; 165 sql += " and \"ScopeID\" = :scopeID";
130 166
131 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 167 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
132 using (SqlCommand cmd = new SqlCommand(sql, conn)) 168 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
133 { 169 {
134 cmd.Parameters.Add(m_database.CreateParameter("@startX", startX)); 170 cmd.Parameters.Add(m_database.CreateParameter("startX", startX));
135 cmd.Parameters.Add(m_database.CreateParameter("@startY", startY)); 171 cmd.Parameters.Add(m_database.CreateParameter("startY", startY));
136 cmd.Parameters.Add(m_database.CreateParameter("@endX", endX)); 172 cmd.Parameters.Add(m_database.CreateParameter("endX", endX));
137 cmd.Parameters.Add(m_database.CreateParameter("@endY", endY)); 173 cmd.Parameters.Add(m_database.CreateParameter("endY", endY));
138 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID)); 174 cmd.Parameters.Add(m_database.CreateParameter("scopeID", scopeID));
139 conn.Open(); 175 conn.Open();
140 return RunCommand(cmd); 176 return RunCommand(cmd);
141 } 177 }
142 } 178 }
143 179
144 public List<RegionData> RunCommand(SqlCommand cmd) 180 public List<RegionData> RunCommand(NpgsqlCommand cmd)
145 { 181 {
146 List<RegionData> retList = new List<RegionData>(); 182 List<RegionData> retList = new List<RegionData>();
147 183
148 SqlDataReader result = cmd.ExecuteReader(); 184 NpgsqlDataReader result = cmd.ExecuteReader();
149 185
150 while (result.Read()) 186 while (result.Read())
151 { 187 {
@@ -217,43 +253,46 @@ namespace OpenSim.Data.MSSQL
217 253
218 string[] fields = new List<string>(data.Data.Keys).ToArray(); 254 string[] fields = new List<string>(data.Data.Keys).ToArray();
219 255
220 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 256 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
221 using (SqlCommand cmd = new SqlCommand()) 257 using (NpgsqlCommand cmd = new NpgsqlCommand())
222 { 258 {
223 259
224 string update = "update [" + m_Realm + "] set locX=@posX, locY=@posY, sizeX=@sizeX, sizeY=@sizeY "; 260 string update = "update " + m_Realm + " set \"locX\"=:posX, \"locY\"=:posY, \"sizeX\"=:sizeX, \"sizeY\"=:sizeY ";
225 261
226 foreach (string field in fields) 262 foreach (string field in fields)
227 { 263 {
228 264
229 update += ", "; 265 update += ", ";
230 update += "[" + field + "] = @" + field; 266 update += " \"" + field + "\" = :" + field;
231 267
232 cmd.Parameters.Add(m_database.CreateParameter("@" + field, data.Data[field])); 268 if (m_FieldTypes.ContainsKey(field))
269 cmd.Parameters.Add(m_database.CreateParameter(field, data.Data[field], m_FieldTypes[field]));
270 else
271 cmd.Parameters.Add(m_database.CreateParameter(field, data.Data[field]));
233 } 272 }
234 273
235 update += " where uuid = @regionID"; 274 update += " where uuid = :regionID";
236 275
237 if (data.ScopeID != UUID.Zero) 276 if (data.ScopeID != UUID.Zero)
238 update += " and ScopeID = @scopeID"; 277 update += " and \"ScopeID\" = :scopeID";
239 278
240 cmd.CommandText = update; 279 cmd.CommandText = update;
241 cmd.Connection = conn; 280 cmd.Connection = conn;
242 cmd.Parameters.Add(m_database.CreateParameter("@regionID", data.RegionID)); 281 cmd.Parameters.Add(m_database.CreateParameter("regionID", data.RegionID));
243 cmd.Parameters.Add(m_database.CreateParameter("@regionName", data.RegionName)); 282 cmd.Parameters.Add(m_database.CreateParameter("regionName", data.RegionName));
244 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", data.ScopeID)); 283 cmd.Parameters.Add(m_database.CreateParameter("scopeID", data.ScopeID));
245 cmd.Parameters.Add(m_database.CreateParameter("@posX", data.posX)); 284 cmd.Parameters.Add(m_database.CreateParameter("posX", data.posX));
246 cmd.Parameters.Add(m_database.CreateParameter("@posY", data.posY)); 285 cmd.Parameters.Add(m_database.CreateParameter("posY", data.posY));
247 cmd.Parameters.Add(m_database.CreateParameter("@sizeX", data.sizeX)); 286 cmd.Parameters.Add(m_database.CreateParameter("sizeX", data.sizeX));
248 cmd.Parameters.Add(m_database.CreateParameter("@sizeY", data.sizeY)); 287 cmd.Parameters.Add(m_database.CreateParameter("sizeY", data.sizeY));
249 conn.Open(); 288 conn.Open();
250 try 289 try
251 { 290 {
252 if (cmd.ExecuteNonQuery() < 1) 291 if (cmd.ExecuteNonQuery() < 1)
253 { 292 {
254 string insert = "insert into [" + m_Realm + "] ([uuid], [ScopeID], [locX], [locY], [sizeX], [sizeY], [regionName], [" + 293 string insert = "insert into " + m_Realm + " (uuid, \"ScopeID\", \"locX\", \"locY\", \"sizeX\", \"sizeY\", \"regionName\", \"" +
255 String.Join("], [", fields) + 294 String.Join("\", \"", fields) +
256 "]) values (@regionID, @scopeID, @posX, @posY, @sizeX, @sizeY, @regionName, @" + String.Join(", @", fields) + ")"; 295 "\") values (:regionID, :scopeID, :posX, :posY, :sizeX, :sizeY, :regionName, :" + String.Join(", :", fields) + ")";
257 296
258 cmd.CommandText = insert; 297 cmd.CommandText = insert;
259 298
@@ -266,13 +305,13 @@ namespace OpenSim.Data.MSSQL
266 } 305 }
267 catch (Exception ex) 306 catch (Exception ex)
268 { 307 {
269 m_log.Warn("[MSSQL Grid]: Error inserting into Regions table: " + ex.Message + ", INSERT sql: " + insert); 308 m_log.Warn("[PGSQL Grid]: Error inserting into Regions table: " + ex.Message + ", INSERT sql: " + insert);
270 } 309 }
271 } 310 }
272 } 311 }
273 catch (Exception ex) 312 catch (Exception ex)
274 { 313 {
275 m_log.Warn("[MSSQL Grid]: Error updating Regions table: " + ex.Message + ", UPDATE sql: " + update); 314 m_log.Warn("[PGSQL Grid]: Error updating Regions table: " + ex.Message + ", UPDATE sql: " + update);
276 } 315 }
277 } 316 }
278 317
@@ -281,13 +320,14 @@ namespace OpenSim.Data.MSSQL
281 320
282 public bool SetDataItem(UUID regionID, string item, string value) 321 public bool SetDataItem(UUID regionID, string item, string value)
283 { 322 {
284 string sql = "update [" + m_Realm + 323 string sql = "update " + m_Realm +
285 "] set [" + item + "] = @" + item + " where uuid = @UUID"; 324 " set \"" + item + "\" = :" + item + " where uuid = :UUID";
286 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 325
287 using (SqlCommand cmd = new SqlCommand(sql, conn)) 326 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
327 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
288 { 328 {
289 cmd.Parameters.Add(m_database.CreateParameter("@" + item, value)); 329 cmd.Parameters.Add(m_database.CreateParameter("" + item, value));
290 cmd.Parameters.Add(m_database.CreateParameter("@UUID", regionID)); 330 cmd.Parameters.Add(m_database.CreateParameter("UUID", regionID));
291 conn.Open(); 331 conn.Open();
292 if (cmd.ExecuteNonQuery() > 0) 332 if (cmd.ExecuteNonQuery() > 0)
293 return true; 333 return true;
@@ -297,12 +337,12 @@ namespace OpenSim.Data.MSSQL
297 337
298 public bool Delete(UUID regionID) 338 public bool Delete(UUID regionID)
299 { 339 {
300 string sql = "delete from [" + m_Realm + 340 string sql = "delete from " + m_Realm +
301 "] where uuid = @UUID"; 341 " where uuid = :UUID";
302 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 342 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
303 using (SqlCommand cmd = new SqlCommand(sql, conn)) 343 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
304 { 344 {
305 cmd.Parameters.Add(m_database.CreateParameter("@UUID", regionID)); 345 cmd.Parameters.Add(m_database.CreateParameter("UUID", regionID));
306 conn.Open(); 346 conn.Open();
307 if (cmd.ExecuteNonQuery() > 0) 347 if (cmd.ExecuteNonQuery() > 0)
308 return true; 348 return true;
@@ -315,6 +355,11 @@ namespace OpenSim.Data.MSSQL
315 return Get((int)RegionFlags.DefaultRegion, scopeID); 355 return Get((int)RegionFlags.DefaultRegion, scopeID);
316 } 356 }
317 357
358 public List<RegionData> GetDefaultHypergridRegions(UUID scopeID)
359 {
360 return Get((int)RegionFlags.DefaultHGRegion, scopeID);
361 }
362
318 public List<RegionData> GetFallbackRegions(UUID scopeID, int x, int y) 363 public List<RegionData> GetFallbackRegions(UUID scopeID, int x, int y)
319 { 364 {
320 List<RegionData> regions = Get((int)RegionFlags.FallbackRegion, scopeID); 365 List<RegionData> regions = Get((int)RegionFlags.FallbackRegion, scopeID);
@@ -331,14 +376,14 @@ namespace OpenSim.Data.MSSQL
331 376
332 private List<RegionData> Get(int regionFlags, UUID scopeID) 377 private List<RegionData> Get(int regionFlags, UUID scopeID)
333 { 378 {
334 string sql = "SELECT * FROM [" + m_Realm + "] WHERE (flags & " + regionFlags.ToString() + ") <> 0"; 379 string sql = "SELECT * FROM " + m_Realm + " WHERE (\"flags\" & " + regionFlags.ToString() + ") <> 0";
335 if (scopeID != UUID.Zero) 380 if (scopeID != UUID.Zero)
336 sql += " AND ScopeID = @scopeID"; 381 sql += " AND \"ScopeID\" = :scopeID";
337 382
338 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 383 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
339 using (SqlCommand cmd = new SqlCommand(sql, conn)) 384 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
340 { 385 {
341 cmd.Parameters.Add(m_database.CreateParameter("@scopeID", scopeID)); 386 cmd.Parameters.Add(m_database.CreateParameter("scopeID", scopeID));
342 conn.Open(); 387 conn.Open();
343 return RunCommand(cmd); 388 return RunCommand(cmd);
344 } 389 }
diff --git a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs
index 17f42e1..77d87d4 100644
--- a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs
@@ -28,7 +28,6 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Data; 30using System.Data;
31using System.Data.SqlClient;
32using System.Drawing; 31using System.Drawing;
33using System.IO; 32using System.IO;
34using System.Reflection; 33using System.Reflection;
@@ -37,15 +36,17 @@ using OpenMetaverse;
37using OpenSim.Framework; 36using OpenSim.Framework;
38using OpenSim.Region.Framework.Interfaces; 37using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes; 38using OpenSim.Region.Framework.Scenes;
39using Npgsql;
40 40
41namespace OpenSim.Data.MSSQL 41namespace OpenSim.Data.PGSQL
42{ 42{
43 /// <summary> 43 /// <summary>
44 /// A MSSQL Interface for the Region Server. 44 /// A PGSQL Interface for the Region Server.
45 /// </summary> 45 /// </summary>
46 public class MSSQLSimulationData : ISimulationDataStore 46 public class PGSQLSimulationData : ISimulationDataStore
47 { 47 {
48 private const string _migrationStore = "RegionStore"; 48 private const string _migrationStore = "RegionStore";
49 private const string LogHeader = "[REGION DB PGSQL]";
49 50
50 // private static FileSystemDataStore Instance = new FileSystemDataStore(); 51 // private static FileSystemDataStore Instance = new FileSystemDataStore();
51 private static readonly ILog _Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 52 private static readonly ILog _Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@@ -53,18 +54,18 @@ namespace OpenSim.Data.MSSQL
53 /// <summary> 54 /// <summary>
54 /// The database manager 55 /// The database manager
55 /// </summary> 56 /// </summary>
56 private MSSQLManager _Database; 57 private PGSQLManager _Database;
57 private string m_connectionString; 58 private string m_connectionString;
58 protected virtual Assembly Assembly 59 protected virtual Assembly Assembly
59 { 60 {
60 get { return GetType().Assembly; } 61 get { return GetType().Assembly; }
61 } 62 }
62 63
63 public MSSQLSimulationData() 64 public PGSQLSimulationData()
64 { 65 {
65 } 66 }
66 67
67 public MSSQLSimulationData(string connectionString) 68 public PGSQLSimulationData(string connectionString)
68 { 69 {
69 Initialise(connectionString); 70 Initialise(connectionString);
70 } 71 }
@@ -76,9 +77,9 @@ namespace OpenSim.Data.MSSQL
76 public void Initialise(string connectionString) 77 public void Initialise(string connectionString)
77 { 78 {
78 m_connectionString = connectionString; 79 m_connectionString = connectionString;
79 _Database = new MSSQLManager(connectionString); 80 _Database = new PGSQLManager(connectionString);
80 81
81 using (SqlConnection conn = new SqlConnection(connectionString)) 82 using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
82 { 83 {
83 conn.Open(); 84 conn.Open();
84 //New Migration settings 85 //New Migration settings
@@ -107,19 +108,19 @@ namespace OpenSim.Data.MSSQL
107 Dictionary<UUID, SceneObjectGroup> objects = new Dictionary<UUID, SceneObjectGroup>(); 108 Dictionary<UUID, SceneObjectGroup> objects = new Dictionary<UUID, SceneObjectGroup>();
108 SceneObjectGroup grp = null; 109 SceneObjectGroup grp = null;
109 110
110 string sql = "SELECT *, " + 111 string sql = @"SELECT *,
111 "sort = CASE WHEN prims.UUID = prims.SceneGroupID THEN 0 ELSE 1 END " + 112 CASE WHEN prims.""UUID"" = prims.""SceneGroupID"" THEN 0 ELSE 1 END as sort
112 "FROM prims " + 113 FROM prims
113 "LEFT JOIN primshapes ON prims.UUID = primshapes.UUID " + 114 LEFT JOIN primshapes ON prims.""UUID"" = primshapes.""UUID""
114 "WHERE RegionUUID = @RegionUUID " + 115 WHERE ""RegionUUID"" = :RegionUUID
115 "ORDER BY SceneGroupID asc, sort asc, LinkNumber asc"; 116 ORDER BY ""SceneGroupID"" asc, sort asc, ""LinkNumber"" asc";
116 117
117 using (SqlConnection conn = new SqlConnection(m_connectionString)) 118 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
118 using (SqlCommand command = new SqlCommand(sql, conn)) 119 using (NpgsqlCommand command = new NpgsqlCommand(sql, conn))
119 { 120 {
120 command.Parameters.Add(_Database.CreateParameter("@regionUUID", regionUUID)); 121 command.Parameters.Add(_Database.CreateParameter("regionUUID", regionUUID));
121 conn.Open(); 122 conn.Open();
122 using (SqlDataReader reader = command.ExecuteReader()) 123 using (NpgsqlDataReader reader = command.ExecuteReader())
123 { 124 {
124 while (reader.Read()) 125 while (reader.Read())
125 { 126 {
@@ -179,12 +180,12 @@ namespace OpenSim.Data.MSSQL
179 // list from DB of all prims which have items and 180 // list from DB of all prims which have items and
180 // LoadItems only on those 181 // LoadItems only on those
181 List<SceneObjectPart> primsWithInventory = new List<SceneObjectPart>(); 182 List<SceneObjectPart> primsWithInventory = new List<SceneObjectPart>();
182 string qry = "select distinct primID from primitems"; 183 string qry = "select distinct \"primID\" from primitems";
183 using (SqlConnection conn = new SqlConnection(m_connectionString)) 184 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
184 using (SqlCommand command = new SqlCommand(qry, conn)) 185 using (NpgsqlCommand command = new NpgsqlCommand(qry, conn))
185 { 186 {
186 conn.Open(); 187 conn.Open();
187 using (SqlDataReader itemReader = command.ExecuteReader()) 188 using (NpgsqlDataReader itemReader = command.ExecuteReader())
188 { 189 {
189 while (itemReader.Read()) 190 while (itemReader.Read())
190 { 191 {
@@ -213,19 +214,19 @@ namespace OpenSim.Data.MSSQL
213 /// <param name="allPrims">all prims with inventory on a region</param> 214 /// <param name="allPrims">all prims with inventory on a region</param>
214 private void LoadItems(List<SceneObjectPart> allPrimsWithInventory) 215 private void LoadItems(List<SceneObjectPart> allPrimsWithInventory)
215 { 216 {
216 string sql = "SELECT * FROM primitems WHERE PrimID = @PrimID"; 217 string sql = @"SELECT * FROM primitems WHERE ""primID"" = :PrimID";
217 using (SqlConnection conn = new SqlConnection(m_connectionString)) 218 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
218 using (SqlCommand command = new SqlCommand(sql, conn)) 219 using (NpgsqlCommand command = new NpgsqlCommand(sql, conn))
219 { 220 {
220 conn.Open(); 221 conn.Open();
221 foreach (SceneObjectPart objectPart in allPrimsWithInventory) 222 foreach (SceneObjectPart objectPart in allPrimsWithInventory)
222 { 223 {
223 command.Parameters.Clear(); 224 command.Parameters.Clear();
224 command.Parameters.Add(_Database.CreateParameter("@PrimID", objectPart.UUID)); 225 command.Parameters.Add(_Database.CreateParameter("PrimID", objectPart.UUID));
225 226
226 List<TaskInventoryItem> inventory = new List<TaskInventoryItem>(); 227 List<TaskInventoryItem> inventory = new List<TaskInventoryItem>();
227 228
228 using (SqlDataReader reader = command.ExecuteReader()) 229 using (NpgsqlDataReader reader = command.ExecuteReader())
229 { 230 {
230 while (reader.Read()) 231 while (reader.Read())
231 { 232 {
@@ -257,43 +258,43 @@ namespace OpenSim.Data.MSSQL
257 if ((flags & (uint)PrimFlags.TemporaryOnRez) != 0) 258 if ((flags & (uint)PrimFlags.TemporaryOnRez) != 0)
258 return; 259 return;
259 260
260 _Log.DebugFormat("[MSSQL]: Adding/Changing SceneObjectGroup: {0} to region: {1}, object has {2} prims.", obj.UUID, regionUUID, obj.Parts.Length); 261 //_Log.DebugFormat("[PGSQL]: Adding/Changing SceneObjectGroup: {0} to region: {1}, object has {2} prims.", obj.UUID, regionUUID, obj.Parts.Length);
261 262
262 using (SqlConnection conn = new SqlConnection(m_connectionString)) 263 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
263 { 264 {
264 conn.Open(); 265 conn.Open();
265 SqlTransaction transaction = conn.BeginTransaction(); 266 NpgsqlTransaction transaction = conn.BeginTransaction();
266 267
267 try 268 try
268 { 269 {
269 foreach (SceneObjectPart sceneObjectPart in obj.Parts) 270 foreach (SceneObjectPart sceneObjectPart in obj.Parts)
270 { 271 {
271 //Update prim 272 //Update prim
272 using (SqlCommand sqlCommand = conn.CreateCommand()) 273 using (NpgsqlCommand sqlCommand = conn.CreateCommand())
273 { 274 {
274 sqlCommand.Transaction = transaction; 275 sqlCommand.Transaction = transaction;
275 try 276 try
276 { 277 {
277 StoreSceneObjectPrim(sceneObjectPart, sqlCommand, obj.UUID, regionUUID); 278 StoreSceneObjectPrim(sceneObjectPart, sqlCommand, obj.UUID, regionUUID);
278 } 279 }
279 catch (SqlException sqlEx) 280 catch (NpgsqlException sqlEx)
280 { 281 {
281 _Log.ErrorFormat("[REGION DB]: Store SceneObjectPrim SQL error: {0} at line {1}", sqlEx.Message, sqlEx.LineNumber); 282 _Log.ErrorFormat("[REGION DB]: Store SceneObjectPrim SQL error: {0} at line {1}", sqlEx.Message, sqlEx.Line);
282 throw; 283 throw;
283 } 284 }
284 } 285 }
285 286
286 //Update primshapes 287 //Update primshapes
287 using (SqlCommand sqlCommand = conn.CreateCommand()) 288 using (NpgsqlCommand sqlCommand = conn.CreateCommand())
288 { 289 {
289 sqlCommand.Transaction = transaction; 290 sqlCommand.Transaction = transaction;
290 try 291 try
291 { 292 {
292 StoreSceneObjectPrimShapes(sceneObjectPart, sqlCommand, obj.UUID, regionUUID); 293 StoreSceneObjectPrimShapes(sceneObjectPart, sqlCommand, obj.UUID, regionUUID);
293 } 294 }
294 catch (SqlException sqlEx) 295 catch (NpgsqlException sqlEx)
295 { 296 {
296 _Log.ErrorFormat("[REGION DB]: Store SceneObjectPrimShapes SQL error: {0} at line {1}", sqlEx.Message, sqlEx.LineNumber); 297 _Log.ErrorFormat("[REGION DB]: Store SceneObjectPrimShapes SQL error: {0} at line {1}", sqlEx.Message, sqlEx.Line);
297 throw; 298 throw;
298 } 299 }
299 } 300 }
@@ -325,60 +326,59 @@ namespace OpenSim.Data.MSSQL
325 /// <param name="sqlCommand">The SQL command with the transaction.</param> 326 /// <param name="sqlCommand">The SQL command with the transaction.</param>
326 /// <param name="sceneGroupID">The scenegroup UUID.</param> 327 /// <param name="sceneGroupID">The scenegroup UUID.</param>
327 /// <param name="regionUUID">The region UUID.</param> 328 /// <param name="regionUUID">The region UUID.</param>
328 private void StoreSceneObjectPrim(SceneObjectPart sceneObjectPart, SqlCommand sqlCommand, UUID sceneGroupID, UUID regionUUID) 329 private void StoreSceneObjectPrim(SceneObjectPart sceneObjectPart, NpgsqlCommand sqlCommand, UUID sceneGroupID, UUID regionUUID)
329 { 330 {
330 //Big query to update or insert a new prim. 331 //Big query to update or insert a new prim.
331 //Note for SQL Server 2008 this could be simplified 332
332 string queryPrims = @" 333 string queryPrims = @"
333IF EXISTS (SELECT UUID FROM prims WHERE UUID = @UUID)
334 BEGIN
335 UPDATE prims SET 334 UPDATE prims SET
336 CreationDate = @CreationDate, Name = @Name, Text = @Text, Description = @Description, SitName = @SitName, 335 ""CreationDate"" = :CreationDate, ""Name"" = :Name, ""Text"" = :Text, ""Description"" = :Description, ""SitName"" = :SitName,
337 TouchName = @TouchName, ObjectFlags = @ObjectFlags, OwnerMask = @OwnerMask, NextOwnerMask = @NextOwnerMask, GroupMask = @GroupMask, 336 ""TouchName"" = :TouchName, ""ObjectFlags"" = :ObjectFlags, ""OwnerMask"" = :OwnerMask, ""NextOwnerMask"" = :NextOwnerMask, ""GroupMask"" = :GroupMask,
338 EveryoneMask = @EveryoneMask, BaseMask = @BaseMask, PositionX = @PositionX, PositionY = @PositionY, PositionZ = @PositionZ, 337 ""EveryoneMask"" = :EveryoneMask, ""BaseMask"" = :BaseMask, ""PositionX"" = :PositionX, ""PositionY"" = :PositionY, ""PositionZ"" = :PositionZ,
339 GroupPositionX = @GroupPositionX, GroupPositionY = @GroupPositionY, GroupPositionZ = @GroupPositionZ, VelocityX = @VelocityX, 338 ""GroupPositionX"" = :GroupPositionX, ""GroupPositionY"" = :GroupPositionY, ""GroupPositionZ"" = :GroupPositionZ, ""VelocityX"" = :VelocityX,
340 VelocityY = @VelocityY, VelocityZ = @VelocityZ, AngularVelocityX = @AngularVelocityX, AngularVelocityY = @AngularVelocityY, 339 ""VelocityY"" = :VelocityY, ""VelocityZ"" = :VelocityZ, ""AngularVelocityX"" = :AngularVelocityX, ""AngularVelocityY"" = :AngularVelocityY,
341 AngularVelocityZ = @AngularVelocityZ, AccelerationX = @AccelerationX, AccelerationY = @AccelerationY, 340 ""AngularVelocityZ"" = :AngularVelocityZ, ""AccelerationX"" = :AccelerationX, ""AccelerationY"" = :AccelerationY,
342 AccelerationZ = @AccelerationZ, RotationX = @RotationX, RotationY = @RotationY, RotationZ = @RotationZ, RotationW = @RotationW, 341 ""AccelerationZ"" = :AccelerationZ, ""RotationX"" = :RotationX, ""RotationY"" = :RotationY, ""RotationZ"" = :RotationZ, ""RotationW"" = :RotationW,
343 SitTargetOffsetX = @SitTargetOffsetX, SitTargetOffsetY = @SitTargetOffsetY, SitTargetOffsetZ = @SitTargetOffsetZ, 342 ""SitTargetOffsetX"" = :SitTargetOffsetX, ""SitTargetOffsetY"" = :SitTargetOffsetY, ""SitTargetOffsetZ"" = :SitTargetOffsetZ,
344 SitTargetOrientW = @SitTargetOrientW, SitTargetOrientX = @SitTargetOrientX, SitTargetOrientY = @SitTargetOrientY, 343 ""SitTargetOrientW"" = :SitTargetOrientW, ""SitTargetOrientX"" = :SitTargetOrientX, ""SitTargetOrientY"" = :SitTargetOrientY,
345 SitTargetOrientZ = @SitTargetOrientZ, RegionUUID = @RegionUUID, CreatorID = @CreatorID, OwnerID = @OwnerID, GroupID = @GroupID, 344 ""SitTargetOrientZ"" = :SitTargetOrientZ, ""RegionUUID"" = :RegionUUID, ""CreatorID"" = :CreatorID, ""OwnerID"" = :OwnerID, ""GroupID"" = :GroupID,
346 LastOwnerID = @LastOwnerID, SceneGroupID = @SceneGroupID, PayPrice = @PayPrice, PayButton1 = @PayButton1, PayButton2 = @PayButton2, 345 ""LastOwnerID"" = :LastOwnerID, ""SceneGroupID"" = :SceneGroupID, ""PayPrice"" = :PayPrice, ""PayButton1"" = :PayButton1, ""PayButton2"" = :PayButton2,
347 PayButton3 = @PayButton3, PayButton4 = @PayButton4, LoopedSound = @LoopedSound, LoopedSoundGain = @LoopedSoundGain, 346 ""PayButton3"" = :PayButton3, ""PayButton4"" = :PayButton4, ""LoopedSound"" = :LoopedSound, ""LoopedSoundGain"" = :LoopedSoundGain,
348 TextureAnimation = @TextureAnimation, OmegaX = @OmegaX, OmegaY = @OmegaY, OmegaZ = @OmegaZ, CameraEyeOffsetX = @CameraEyeOffsetX, 347 ""TextureAnimation"" = :TextureAnimation, ""OmegaX"" = :OmegaX, ""OmegaY"" = :OmegaY, ""OmegaZ"" = :OmegaZ, ""CameraEyeOffsetX"" = :CameraEyeOffsetX,
349 CameraEyeOffsetY = @CameraEyeOffsetY, CameraEyeOffsetZ = @CameraEyeOffsetZ, CameraAtOffsetX = @CameraAtOffsetX, 348 ""CameraEyeOffsetY"" = :CameraEyeOffsetY, ""CameraEyeOffsetZ"" = :CameraEyeOffsetZ, ""CameraAtOffsetX"" = :CameraAtOffsetX,
350 CameraAtOffsetY = @CameraAtOffsetY, CameraAtOffsetZ = @CameraAtOffsetZ, ForceMouselook = @ForceMouselook, 349 ""CameraAtOffsetY"" = :CameraAtOffsetY, ""CameraAtOffsetZ"" = :CameraAtOffsetZ, ""ForceMouselook"" = :ForceMouselook,
351 ScriptAccessPin = @ScriptAccessPin, AllowedDrop = @AllowedDrop, DieAtEdge = @DieAtEdge, SalePrice = @SalePrice, 350 ""ScriptAccessPin"" = :ScriptAccessPin, ""AllowedDrop"" = :AllowedDrop, ""DieAtEdge"" = :DieAtEdge, ""SalePrice"" = :SalePrice,
352 SaleType = @SaleType, ColorR = @ColorR, ColorG = @ColorG, ColorB = @ColorB, ColorA = @ColorA, ParticleSystem = @ParticleSystem, 351 ""SaleType"" = :SaleType, ""ColorR"" = :ColorR, ""ColorG"" = :ColorG, ""ColorB"" = :ColorB, ""ColorA"" = :ColorA, ""ParticleSystem"" = :ParticleSystem,
353 ClickAction = @ClickAction, Material = @Material, CollisionSound = @CollisionSound, CollisionSoundVolume = @CollisionSoundVolume, PassTouches = @PassTouches, 352 ""ClickAction"" = :ClickAction, ""Material"" = :Material, ""CollisionSound"" = :CollisionSound, ""CollisionSoundVolume"" = :CollisionSoundVolume, ""PassTouches"" = :PassTouches,
354 LinkNumber = @LinkNumber, MediaURL = @MediaURL 353 ""LinkNumber"" = :LinkNumber, ""MediaURL"" = :MediaURL, ""DynAttrs"" = :DynAttrs,
355 WHERE UUID = @UUID 354 ""PhysicsShapeType"" = :PhysicsShapeType, ""Density"" = :Density, ""GravityModifier"" = :GravityModifier, ""Friction"" = :Friction, ""Restitution"" = :Restitution
356 END 355 WHERE ""UUID"" = :UUID ;
357ELSE 356
358 BEGIN
359 INSERT INTO 357 INSERT INTO
360 prims ( 358 prims (
361 UUID, CreationDate, Name, Text, Description, SitName, TouchName, ObjectFlags, OwnerMask, NextOwnerMask, GroupMask, 359 ""UUID"", ""CreationDate"", ""Name"", ""Text"", ""Description"", ""SitName"", ""TouchName"", ""ObjectFlags"", ""OwnerMask"", ""NextOwnerMask"", ""GroupMask"",
362 EveryoneMask, BaseMask, PositionX, PositionY, PositionZ, GroupPositionX, GroupPositionY, GroupPositionZ, VelocityX, 360 ""EveryoneMask"", ""BaseMask"", ""PositionX"", ""PositionY"", ""PositionZ"", ""GroupPositionX"", ""GroupPositionY"", ""GroupPositionZ"", ""VelocityX"",
363 VelocityY, VelocityZ, AngularVelocityX, AngularVelocityY, AngularVelocityZ, AccelerationX, AccelerationY, AccelerationZ, 361 ""VelocityY"", ""VelocityZ"", ""AngularVelocityX"", ""AngularVelocityY"", ""AngularVelocityZ"", ""AccelerationX"", ""AccelerationY"", ""AccelerationZ"",
364 RotationX, RotationY, RotationZ, RotationW, SitTargetOffsetX, SitTargetOffsetY, SitTargetOffsetZ, SitTargetOrientW, 362 ""RotationX"", ""RotationY"", ""RotationZ"", ""RotationW"", ""SitTargetOffsetX"", ""SitTargetOffsetY"", ""SitTargetOffsetZ"", ""SitTargetOrientW"",
365 SitTargetOrientX, SitTargetOrientY, SitTargetOrientZ, RegionUUID, CreatorID, OwnerID, GroupID, LastOwnerID, SceneGroupID, 363 ""SitTargetOrientX"", ""SitTargetOrientY"", ""SitTargetOrientZ"", ""RegionUUID"", ""CreatorID"", ""OwnerID"", ""GroupID"", ""LastOwnerID"", ""SceneGroupID"",
366 PayPrice, PayButton1, PayButton2, PayButton3, PayButton4, LoopedSound, LoopedSoundGain, TextureAnimation, OmegaX, 364 ""PayPrice"", ""PayButton1"", ""PayButton2"", ""PayButton3"", ""PayButton4"", ""LoopedSound"", ""LoopedSoundGain"", ""TextureAnimation"", ""OmegaX"",
367 OmegaY, OmegaZ, CameraEyeOffsetX, CameraEyeOffsetY, CameraEyeOffsetZ, CameraAtOffsetX, CameraAtOffsetY, CameraAtOffsetZ, 365 ""OmegaY"", ""OmegaZ"", ""CameraEyeOffsetX"", ""CameraEyeOffsetY"", ""CameraEyeOffsetZ"", ""CameraAtOffsetX"", ""CameraAtOffsetY"", ""CameraAtOffsetZ"",
368 ForceMouselook, ScriptAccessPin, AllowedDrop, DieAtEdge, SalePrice, SaleType, ColorR, ColorG, ColorB, ColorA, 366 ""ForceMouselook"", ""ScriptAccessPin"", ""AllowedDrop"", ""DieAtEdge"", ""SalePrice"", ""SaleType"", ""ColorR"", ""ColorG"", ""ColorB"", ""ColorA"",
369 ParticleSystem, ClickAction, Material, CollisionSound, CollisionSoundVolume, PassTouches, LinkNumber, MediaURL 367 ""ParticleSystem"", ""ClickAction"", ""Material"", ""CollisionSound"", ""CollisionSoundVolume"", ""PassTouches"", ""LinkNumber"", ""MediaURL"", ""DynAttrs"",
370 ) VALUES ( 368 ""PhysicsShapeType"", ""Density"", ""GravityModifier"", ""Friction"", ""Restitution""
371 @UUID, @CreationDate, @Name, @Text, @Description, @SitName, @TouchName, @ObjectFlags, @OwnerMask, @NextOwnerMask, @GroupMask, 369 ) Select
372 @EveryoneMask, @BaseMask, @PositionX, @PositionY, @PositionZ, @GroupPositionX, @GroupPositionY, @GroupPositionZ, @VelocityX, 370 :UUID, :CreationDate, :Name, :Text, :Description, :SitName, :TouchName, :ObjectFlags, :OwnerMask, :NextOwnerMask, :GroupMask,
373 @VelocityY, @VelocityZ, @AngularVelocityX, @AngularVelocityY, @AngularVelocityZ, @AccelerationX, @AccelerationY, @AccelerationZ, 371 :EveryoneMask, :BaseMask, :PositionX, :PositionY, :PositionZ, :GroupPositionX, :GroupPositionY, :GroupPositionZ, :VelocityX,
374 @RotationX, @RotationY, @RotationZ, @RotationW, @SitTargetOffsetX, @SitTargetOffsetY, @SitTargetOffsetZ, @SitTargetOrientW, 372 :VelocityY, :VelocityZ, :AngularVelocityX, :AngularVelocityY, :AngularVelocityZ, :AccelerationX, :AccelerationY, :AccelerationZ,
375 @SitTargetOrientX, @SitTargetOrientY, @SitTargetOrientZ, @RegionUUID, @CreatorID, @OwnerID, @GroupID, @LastOwnerID, @SceneGroupID, 373 :RotationX, :RotationY, :RotationZ, :RotationW, :SitTargetOffsetX, :SitTargetOffsetY, :SitTargetOffsetZ, :SitTargetOrientW,
376 @PayPrice, @PayButton1, @PayButton2, @PayButton3, @PayButton4, @LoopedSound, @LoopedSoundGain, @TextureAnimation, @OmegaX, 374 :SitTargetOrientX, :SitTargetOrientY, :SitTargetOrientZ, :RegionUUID, :CreatorID, :OwnerID, :GroupID, :LastOwnerID, :SceneGroupID,
377 @OmegaY, @OmegaZ, @CameraEyeOffsetX, @CameraEyeOffsetY, @CameraEyeOffsetZ, @CameraAtOffsetX, @CameraAtOffsetY, @CameraAtOffsetZ, 375 :PayPrice, :PayButton1, :PayButton2, :PayButton3, :PayButton4, :LoopedSound, :LoopedSoundGain, :TextureAnimation, :OmegaX,
378 @ForceMouselook, @ScriptAccessPin, @AllowedDrop, @DieAtEdge, @SalePrice, @SaleType, @ColorR, @ColorG, @ColorB, @ColorA, 376 :OmegaY, :OmegaZ, :CameraEyeOffsetX, :CameraEyeOffsetY, :CameraEyeOffsetZ, :CameraAtOffsetX, :CameraAtOffsetY, :CameraAtOffsetZ,
379 @ParticleSystem, @ClickAction, @Material, @CollisionSound, @CollisionSoundVolume, @PassTouches, @LinkNumber, @MediaURL 377 :ForceMouselook, :ScriptAccessPin, :AllowedDrop, :DieAtEdge, :SalePrice, :SaleType, :ColorR, :ColorG, :ColorB, :ColorA,
380 ) 378 :ParticleSystem, :ClickAction, :Material, :CollisionSound, :CollisionSoundVolume, :PassTouches, :LinkNumber, :MediaURL, :DynAttrs,
381 END"; 379 :PhysicsShapeType, :Density, :GravityModifier, :Friction, :Restitution
380 where not EXISTS (SELECT ""UUID"" FROM prims WHERE ""UUID"" = :UUID);
381 ";
382 382
383 //Set commandtext. 383 //Set commandtext.
384 sqlCommand.CommandText = queryPrims; 384 sqlCommand.CommandText = queryPrims;
@@ -396,35 +396,32 @@ ELSE
396 /// <param name="sqlCommand">The SQL command with the transaction.</param> 396 /// <param name="sqlCommand">The SQL command with the transaction.</param>
397 /// <param name="sceneGroupID">The scenegroup UUID.</param> 397 /// <param name="sceneGroupID">The scenegroup UUID.</param>
398 /// <param name="regionUUID">The region UUID.</param> 398 /// <param name="regionUUID">The region UUID.</param>
399 private void StoreSceneObjectPrimShapes(SceneObjectPart sceneObjectPart, SqlCommand sqlCommand, UUID sceneGroupID, UUID regionUUID) 399 private void StoreSceneObjectPrimShapes(SceneObjectPart sceneObjectPart, NpgsqlCommand sqlCommand, UUID sceneGroupID, UUID regionUUID)
400 { 400 {
401 //Big query to or insert or update primshapes 401 //Big query to or insert or update primshapes
402 //Note for SQL Server 2008 this can be simplified 402
403 string queryPrimShapes = @" 403 string queryPrimShapes = @"
404IF EXISTS (SELECT UUID FROM primshapes WHERE UUID = @UUID)
405 BEGIN
406 UPDATE primshapes SET 404 UPDATE primshapes SET
407 Shape = @Shape, ScaleX = @ScaleX, ScaleY = @ScaleY, ScaleZ = @ScaleZ, PCode = @PCode, PathBegin = @PathBegin, 405 ""Shape"" = :Shape, ""ScaleX"" = :ScaleX, ""ScaleY"" = :ScaleY, ""ScaleZ"" = :ScaleZ, ""PCode"" = :PCode, ""PathBegin"" = :PathBegin,
408 PathEnd = @PathEnd, PathScaleX = @PathScaleX, PathScaleY = @PathScaleY, PathShearX = @PathShearX, PathShearY = @PathShearY, 406 ""PathEnd"" = :PathEnd, ""PathScaleX"" = :PathScaleX, ""PathScaleY"" = :PathScaleY, ""PathShearX"" = :PathShearX, ""PathShearY"" = :PathShearY,
409 PathSkew = @PathSkew, PathCurve = @PathCurve, PathRadiusOffset = @PathRadiusOffset, PathRevolutions = @PathRevolutions, 407 ""PathSkew"" = :PathSkew, ""PathCurve"" = :PathCurve, ""PathRadiusOffset"" = :PathRadiusOffset, ""PathRevolutions"" = :PathRevolutions,
410 PathTaperX = @PathTaperX, PathTaperY = @PathTaperY, PathTwist = @PathTwist, PathTwistBegin = @PathTwistBegin, 408 ""PathTaperX"" = :PathTaperX, ""PathTaperY"" = :PathTaperY, ""PathTwist"" = :PathTwist, ""PathTwistBegin"" = :PathTwistBegin,
411 ProfileBegin = @ProfileBegin, ProfileEnd = @ProfileEnd, ProfileCurve = @ProfileCurve, ProfileHollow = @ProfileHollow, 409 ""ProfileBegin"" = :ProfileBegin, ""ProfileEnd"" = :ProfileEnd, ""ProfileCurve"" = :ProfileCurve, ""ProfileHollow"" = :ProfileHollow,
412 Texture = @Texture, ExtraParams = @ExtraParams, State = @State, Media = @Media 410 ""Texture"" = :Texture, ""ExtraParams"" = :ExtraParams, ""State"" = :State, ""Media"" = :Media
413 WHERE UUID = @UUID 411 WHERE ""UUID"" = :UUID ;
414 END 412
415ELSE
416 BEGIN
417 INSERT INTO 413 INSERT INTO
418 primshapes ( 414 primshapes (
419 UUID, Shape, ScaleX, ScaleY, ScaleZ, PCode, PathBegin, PathEnd, PathScaleX, PathScaleY, PathShearX, PathShearY, 415 ""UUID"", ""Shape"", ""ScaleX"", ""ScaleY"", ""ScaleZ"", ""PCode"", ""PathBegin"", ""PathEnd"", ""PathScaleX"", ""PathScaleY"", ""PathShearX"", ""PathShearY"",
420 PathSkew, PathCurve, PathRadiusOffset, PathRevolutions, PathTaperX, PathTaperY, PathTwist, PathTwistBegin, ProfileBegin, 416 ""PathSkew"", ""PathCurve"", ""PathRadiusOffset"", ""PathRevolutions"", ""PathTaperX"", ""PathTaperY"", ""PathTwist"", ""PathTwistBegin"", ""ProfileBegin"",
421 ProfileEnd, ProfileCurve, ProfileHollow, Texture, ExtraParams, State, Media 417 ""ProfileEnd"", ""ProfileCurve"", ""ProfileHollow"", ""Texture"", ""ExtraParams"", ""State"", ""Media""
422 ) VALUES ( 418 )
423 @UUID, @Shape, @ScaleX, @ScaleY, @ScaleZ, @PCode, @PathBegin, @PathEnd, @PathScaleX, @PathScaleY, @PathShearX, @PathShearY, 419 Select
424 @PathSkew, @PathCurve, @PathRadiusOffset, @PathRevolutions, @PathTaperX, @PathTaperY, @PathTwist, @PathTwistBegin, @ProfileBegin, 420 :UUID, :Shape, :ScaleX, :ScaleY, :ScaleZ, :PCode, :PathBegin, :PathEnd, :PathScaleX, :PathScaleY, :PathShearX, :PathShearY,
425 @ProfileEnd, @ProfileCurve, @ProfileHollow, @Texture, @ExtraParams, @State, @Media 421 :PathSkew, :PathCurve, :PathRadiusOffset, :PathRevolutions, :PathTaperX, :PathTaperY, :PathTwist, :PathTwistBegin, :ProfileBegin,
426 ) 422 :ProfileEnd, :ProfileCurve, :ProfileHollow, :Texture, :ExtraParams, :State, :Media
427 END"; 423 where not EXISTS (SELECT ""UUID"" FROM primshapes WHERE ""UUID"" = :UUID);
424 ";
428 425
429 //Set commandtext. 426 //Set commandtext.
430 sqlCommand.CommandText = queryPrimShapes; 427 sqlCommand.CommandText = queryPrimShapes;
@@ -445,18 +442,18 @@ ELSE
445 /// <param name="regionUUID">regionUUID (is this used anyway</param> 442 /// <param name="regionUUID">regionUUID (is this used anyway</param>
446 public void RemoveObject(UUID objectID, UUID regionUUID) 443 public void RemoveObject(UUID objectID, UUID regionUUID)
447 { 444 {
448 _Log.InfoFormat("[MSSQL]: Removing obj: {0} from region: {1}", objectID, regionUUID); 445 //_Log.InfoFormat("[PGSQL]: Removing obj: {0} from region: {1}", objectID, regionUUID);
449 446
450 //Remove from prims and primsitem table 447 //Remove from prims and primsitem table
451 string sqlPrims = "DELETE FROM PRIMS WHERE SceneGroupID = @objectID"; 448 string sqlPrims = @"DELETE FROM PRIMS WHERE ""SceneGroupID"" = :objectID";
452 string sqlPrimItems = "DELETE FROM PRIMITEMS WHERE primID in (SELECT UUID FROM PRIMS WHERE SceneGroupID = @objectID)"; 449 string sqlPrimItems = @"DELETE FROM PRIMITEMS WHERE ""primID"" in (SELECT ""UUID"" FROM PRIMS WHERE ""SceneGroupID"" = :objectID)";
453 string sqlPrimShapes = "DELETE FROM PRIMSHAPES WHERE uuid in (SELECT UUID FROM PRIMS WHERE SceneGroupID = @objectID)"; 450 string sqlPrimShapes = @"DELETE FROM PRIMSHAPES WHERE ""UUID"" in (SELECT ""UUID"" FROM PRIMS WHERE ""SceneGroupID"" = :objectID)";
454 451
455 lock (_Database) 452 lock (_Database)
456 { 453 {
457 //Using the non transaction mode. 454 //Using the non transaction mode.
458 using (SqlConnection conn = new SqlConnection(m_connectionString)) 455 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
459 using (SqlCommand cmd = new SqlCommand()) 456 using (NpgsqlCommand cmd = new NpgsqlCommand())
460 { 457 {
461 cmd.Connection = conn; 458 cmd.Connection = conn;
462 cmd.CommandText = sqlPrimShapes; 459 cmd.CommandText = sqlPrimShapes;
@@ -482,31 +479,31 @@ ELSE
482 { 479 {
483 //_Log.InfoFormat("[REGION DB: Persisting Prim Inventory with prim ID {0}", primID); 480 //_Log.InfoFormat("[REGION DB: Persisting Prim Inventory with prim ID {0}", primID);
484 481
485 //Statement from MySQL section! 482 //Statement from PGSQL section!
486 // For now, we're just going to crudely remove all the previous inventory items 483 // For now, we're just going to crudely remove all the previous inventory items
487 // no matter whether they have changed or not, and replace them with the current set. 484 // no matter whether they have changed or not, and replace them with the current set.
488 485
489 //Delete everything from PrimID 486 //Delete everything from PrimID
490 //TODO add index on PrimID in DB, if not already exist 487 //TODO add index on PrimID in DB, if not already exist
491 488
492 string sql = "DELETE PRIMITEMS WHERE primID = @primID"; 489 string sql = @"delete from primitems where ""primID"" = :primID";
493 using (SqlConnection conn = new SqlConnection(m_connectionString)) 490 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
494 using (SqlCommand cmd = new SqlCommand(sql, conn)) 491 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
495 { 492 {
496 cmd.Parameters.Add(_Database.CreateParameter("@primID", primID)); 493 cmd.Parameters.Add(_Database.CreateParameter("primID", primID));
497 conn.Open(); 494 conn.Open();
498 cmd.ExecuteNonQuery(); 495 cmd.ExecuteNonQuery();
499 } 496 }
500 497
501 sql = 498 sql =
502 @"INSERT INTO primitems ( 499 @"INSERT INTO primitems (
503 itemID,primID,assetID,parentFolderID,invType,assetType,name,description,creationDate,creatorID,ownerID,lastOwnerID,groupID, 500 ""itemID"",""primID"",""assetID"",""parentFolderID"",""invType"",""assetType"",""name"",""description"",""creationDate"",""creatorID"",""ownerID"",""lastOwnerID"",""groupID"",
504 nextPermissions,currentPermissions,basePermissions,everyonePermissions,groupPermissions,flags) 501 ""nextPermissions"",""currentPermissions"",""basePermissions"",""everyonePermissions"",""groupPermissions"",""flags"")
505 VALUES (@itemID,@primID,@assetID,@parentFolderID,@invType,@assetType,@name,@description,@creationDate,@creatorID,@ownerID, 502 VALUES (:itemID,:primID,:assetID,:parentFolderID,:invType,:assetType,:name,:description,:creationDate,:creatorID,:ownerID,
506 @lastOwnerID,@groupID,@nextPermissions,@currentPermissions,@basePermissions,@everyonePermissions,@groupPermissions,@flags)"; 503 :lastOwnerID,:groupID,:nextPermissions,:currentPermissions,:basePermissions,:everyonePermissions,:groupPermissions,:flags)";
507 504
508 using (SqlConnection conn = new SqlConnection(m_connectionString)) 505 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
509 using (SqlCommand cmd = new SqlCommand(sql, conn)) 506 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
510 { 507 {
511 conn.Open(); 508 conn.Open();
512 foreach (TaskInventoryItem taskItem in items) 509 foreach (TaskInventoryItem taskItem in items)
@@ -527,43 +524,54 @@ ELSE
527 /// <returns></returns> 524 /// <returns></returns>
528 public double[,] LoadTerrain(UUID regionID) 525 public double[,] LoadTerrain(UUID regionID)
529 { 526 {
530 double[,] terrain = new double[(int)Constants.RegionSize, (int)Constants.RegionSize]; 527 double[,] ret = null;
531 terrain.Initialize(); 528 TerrainData terrData = LoadTerrain(regionID, (int)Constants.RegionSize, (int)Constants.RegionSize, (int)Constants.RegionHeight);
529 if (terrData != null)
530 ret = terrData.GetDoubles();
531 return ret;
532 }
533
534 // Returns 'null' if region not found
535 public TerrainData LoadTerrain(UUID regionID, int pSizeX, int pSizeY, int pSizeZ)
536 {
537 TerrainData terrData = null;
532 538
533 string sql = "select top 1 RegionUUID, Revision, Heightfield from terrain where RegionUUID = @RegionUUID order by Revision desc"; 539 string sql = @"select ""RegionUUID"", ""Revision"", ""Heightfield"" from terrain
540 where ""RegionUUID"" = :RegionUUID order by ""Revision"" desc limit 1; ";
534 541
535 using (SqlConnection conn = new SqlConnection(m_connectionString)) 542 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
536 using (SqlCommand cmd = new SqlCommand(sql, conn))
537 { 543 {
538 // MySqlParameter param = new MySqlParameter(); 544 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
539 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", regionID));
540 conn.Open();
541 using (SqlDataReader reader = cmd.ExecuteReader())
542 { 545 {
543 int rev; 546 // PGSqlParameter param = new PGSqlParameter();
544 if (reader.Read()) 547 cmd.Parameters.Add(_Database.CreateParameter("RegionUUID", regionID));
548 conn.Open();
549 using (NpgsqlDataReader reader = cmd.ExecuteReader())
545 { 550 {
546 MemoryStream str = new MemoryStream((byte[])reader["Heightfield"]); 551 int rev;
547 BinaryReader br = new BinaryReader(str); 552 if (reader.Read())
548 for (int x = 0; x < (int)Constants.RegionSize; x++)
549 { 553 {
550 for (int y = 0; y < (int)Constants.RegionSize; y++) 554 rev = Convert.ToInt32(reader["Revision"]);
551 { 555 byte[] blob = (byte[])reader["Heightfield"];
552 terrain[x, y] = br.ReadDouble(); 556 terrData = TerrainData.CreateFromDatabaseBlobFactory(pSizeX, pSizeY, pSizeZ, rev, blob);
553 }
554 } 557 }
555 rev = (int)reader["Revision"]; 558 else
556 } 559 {
557 else 560 _Log.Info("[REGION DB]: No terrain found for region");
558 { 561 return null;
559 _Log.Info("[REGION DB]: No terrain found for region"); 562 }
560 return null; 563 _Log.Info("[REGION DB]: Loaded terrain revision r" + rev);
561 } 564 }
562 _Log.Info("[REGION DB]: Loaded terrain revision r" + rev);
563 } 565 }
564 } 566 }
565 567
566 return terrain; 568 return terrData;
569 }
570
571 // Legacy entry point for when terrain was always a 256x256 heightmap
572 public void StoreTerrain(double[,] terrain, UUID regionID)
573 {
574 StoreTerrain(new HeightmapTerrainData(terrain), regionID);
567 } 575 }
568 576
569 /// <summary> 577 /// <summary>
@@ -571,33 +579,43 @@ ELSE
571 /// </summary> 579 /// </summary>
572 /// <param name="terrain">terrain map data.</param> 580 /// <param name="terrain">terrain map data.</param>
573 /// <param name="regionID">regionID.</param> 581 /// <param name="regionID">regionID.</param>
574 public void StoreTerrain(double[,] terrain, UUID regionID) 582 public void StoreTerrain(TerrainData terrData, UUID regionID)
575 { 583 {
576 int revision = Util.UnixTimeSinceEpoch();
577
578 //Delete old terrain map 584 //Delete old terrain map
579 string sql = "delete from terrain where RegionUUID=@RegionUUID"; 585 string sql = @"delete from terrain where ""RegionUUID""=:RegionUUID";
580 using (SqlConnection conn = new SqlConnection(m_connectionString)) 586 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
581 using (SqlCommand cmd = new SqlCommand(sql, conn))
582 { 587 {
583 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", regionID)); 588 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
584 conn.Open(); 589 {
585 cmd.ExecuteNonQuery(); 590 cmd.Parameters.Add(_Database.CreateParameter("RegionUUID", regionID));
591 conn.Open();
592 cmd.ExecuteNonQuery();
593
594 _Log.InfoFormat("{0} Deleted terrain revision id = {1}", LogHeader, regionID);
595 }
586 } 596 }
587 597
588 sql = "insert into terrain(RegionUUID, Revision, Heightfield) values(@RegionUUID, @Revision, @Heightfield)"; 598 int terrainDBRevision;
599 Array terrainDBblob;
600 terrData.GetDatabaseBlob(out terrainDBRevision, out terrainDBblob);
601
602 sql = @"insert into terrain(""RegionUUID"", ""Revision"", ""Heightfield"") values(:RegionUUID, :Revision, :Heightfield)";
589 603
590 using (SqlConnection conn = new SqlConnection(m_connectionString)) 604 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
591 using (SqlCommand cmd = new SqlCommand(sql, conn))
592 { 605 {
593 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", regionID)); 606 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
594 cmd.Parameters.Add(_Database.CreateParameter("@Revision", revision)); 607 {
595 cmd.Parameters.Add(_Database.CreateParameter("@Heightfield", serializeTerrain(terrain))); 608 cmd.Parameters.Add(_Database.CreateParameter("RegionUUID", regionID));
596 conn.Open(); 609 cmd.Parameters.Add(_Database.CreateParameter("Revision", terrainDBRevision));
597 cmd.ExecuteNonQuery(); 610 cmd.Parameters.Add(_Database.CreateParameter("Heightfield", terrainDBblob));
611 conn.Open();
612 cmd.ExecuteNonQuery();
613
614 _Log.InfoFormat("{0} Stored terrain id = {1}, terrainSize = <{2},{3}>",
615 LogHeader, regionID, terrData.SizeX, terrData.SizeY);
616 }
598 } 617 }
599 618
600 _Log.Info("[REGION DB]: Stored terrain revision r " + revision);
601 } 619 }
602 620
603 /// <summary> 621 /// <summary>
@@ -609,15 +627,15 @@ ELSE
609 { 627 {
610 List<LandData> LandDataForRegion = new List<LandData>(); 628 List<LandData> LandDataForRegion = new List<LandData>();
611 629
612 string sql = "select * from land where RegionUUID = @RegionUUID"; 630 string sql = @"select * from land where ""RegionUUID"" = :RegionUUID";
613 631
614 //Retrieve all land data from region 632 //Retrieve all land data from region
615 using (SqlConnection conn = new SqlConnection(m_connectionString)) 633 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
616 using (SqlCommand cmd = new SqlCommand(sql, conn)) 634 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
617 { 635 {
618 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", regionUUID)); 636 cmd.Parameters.Add(_Database.CreateParameter("RegionUUID", regionUUID));
619 conn.Open(); 637 conn.Open();
620 using (SqlDataReader readerLandData = cmd.ExecuteReader()) 638 using (NpgsqlDataReader readerLandData = cmd.ExecuteReader())
621 { 639 {
622 while (readerLandData.Read()) 640 while (readerLandData.Read())
623 { 641 {
@@ -629,13 +647,13 @@ ELSE
629 //Retrieve all accesslist data for all landdata 647 //Retrieve all accesslist data for all landdata
630 foreach (LandData LandData in LandDataForRegion) 648 foreach (LandData LandData in LandDataForRegion)
631 { 649 {
632 sql = "select * from landaccesslist where LandUUID = @LandUUID"; 650 sql = @"select * from landaccesslist where ""LandUUID"" = :LandUUID";
633 using (SqlConnection conn = new SqlConnection(m_connectionString)) 651 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
634 using (SqlCommand cmd = new SqlCommand(sql, conn)) 652 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
635 { 653 {
636 cmd.Parameters.Add(_Database.CreateParameter("@LandUUID", LandData.GlobalID)); 654 cmd.Parameters.Add(_Database.CreateParameter("LandUUID", LandData.GlobalID));
637 conn.Open(); 655 conn.Open();
638 using (SqlDataReader readerAccessList = cmd.ExecuteReader()) 656 using (NpgsqlDataReader readerAccessList = cmd.ExecuteReader())
639 { 657 {
640 while (readerAccessList.Read()) 658 while (readerAccessList.Read())
641 { 659 {
@@ -656,29 +674,33 @@ ELSE
656 public void StoreLandObject(ILandObject parcel) 674 public void StoreLandObject(ILandObject parcel)
657 { 675 {
658 //As this is only one record in land table I just delete all and then add a new record. 676 //As this is only one record in land table I just delete all and then add a new record.
659 //As the delete landaccess is already in the mysql code 677 //As the delete landaccess is already in the pgsql code
660 678
661 //Delete old values 679 //Delete old values
662 RemoveLandObject(parcel.LandData.GlobalID); 680 RemoveLandObject(parcel.LandData.GlobalID);
663 681
664 //Insert new values 682 //Insert new values
665 string sql = @"INSERT INTO [land] 683 string sql = @"INSERT INTO land
666([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]) 684 (""UUID"",""RegionUUID"",""LocalLandID"",""Bitmap"",""Name"",""Description"",""OwnerUUID"",""IsGroupOwned"",""Area"",""AuctionID"",""Category"",""ClaimDate"",""ClaimPrice"",
667VALUES 685 ""GroupUUID"",""SalePrice"",""LandStatus"",""LandFlags"",""LandingType"",""MediaAutoScale"",""MediaTextureUUID"",""MediaURL"",""MusicURL"",""PassHours"",""PassPrice"",
668(@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)"; 686 ""SnapshotUUID"",""UserLocationX"",""UserLocationY"",""UserLocationZ"",""UserLookAtX"",""UserLookAtY"",""UserLookAtZ"",""AuthbuyerID"",""OtherCleanTime"")
669 687 VALUES
670 using (SqlConnection conn = new SqlConnection(m_connectionString)) 688 (:UUID,:RegionUUID,:LocalLandID,:Bitmap,:Name,:Description,:OwnerUUID,:IsGroupOwned,:Area,:AuctionID,:Category,:ClaimDate,:ClaimPrice,
671 using (SqlCommand cmd = new SqlCommand(sql, conn)) 689 :GroupUUID,:SalePrice,:LandStatus,:LandFlags,:LandingType,:MediaAutoScale,:MediaTextureUUID,:MediaURL,:MusicURL,:PassHours,:PassPrice,
690 :SnapshotUUID,:UserLocationX,:UserLocationY,:UserLocationZ,:UserLookAtX,:UserLookAtY,:UserLookAtZ,:AuthbuyerID,:OtherCleanTime)";
691
692 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
693 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
672 { 694 {
673 cmd.Parameters.AddRange(CreateLandParameters(parcel.LandData, parcel.RegionUUID)); 695 cmd.Parameters.AddRange(CreateLandParameters(parcel.LandData, parcel.RegionUUID));
674 conn.Open(); 696 conn.Open();
675 cmd.ExecuteNonQuery(); 697 cmd.ExecuteNonQuery();
676 } 698 }
677 699
678 sql = "INSERT INTO [landaccesslist] ([LandUUID],[AccessUUID],[Flags],[Expires]) VALUES (@LandUUID,@AccessUUID,@Flags,@Expires)"; 700 sql = @"INSERT INTO landaccesslist (""LandUUID"",""AccessUUID"",""LandFlags"",""Expires"") VALUES (:LandUUID,:AccessUUID,:Flags,:Expires)";
679 701
680 using (SqlConnection conn = new SqlConnection(m_connectionString)) 702 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
681 using (SqlCommand cmd = new SqlCommand(sql, conn)) 703 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
682 { 704 {
683 conn.Open(); 705 conn.Open();
684 foreach (LandAccessEntry parcelAccessEntry in parcel.LandData.ParcelAccessList) 706 foreach (LandAccessEntry parcelAccessEntry in parcel.LandData.ParcelAccessList)
@@ -697,19 +719,19 @@ VALUES
697 /// <param name="globalID">UUID of landobject</param> 719 /// <param name="globalID">UUID of landobject</param>
698 public void RemoveLandObject(UUID globalID) 720 public void RemoveLandObject(UUID globalID)
699 { 721 {
700 string sql = "delete from land where UUID=@UUID"; 722 string sql = @"delete from land where ""UUID""=:UUID";
701 using (SqlConnection conn = new SqlConnection(m_connectionString)) 723 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
702 using (SqlCommand cmd = new SqlCommand(sql, conn)) 724 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
703 { 725 {
704 cmd.Parameters.Add(_Database.CreateParameter("@UUID", globalID)); 726 cmd.Parameters.Add(_Database.CreateParameter("UUID", globalID));
705 conn.Open(); 727 conn.Open();
706 cmd.ExecuteNonQuery(); 728 cmd.ExecuteNonQuery();
707 } 729 }
708 sql = "delete from landaccesslist where LandUUID=@UUID"; 730 sql = @"delete from landaccesslist where ""LandUUID""=:UUID";
709 using (SqlConnection conn = new SqlConnection(m_connectionString)) 731 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
710 using (SqlCommand cmd = new SqlCommand(sql, conn)) 732 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
711 { 733 {
712 cmd.Parameters.Add(_Database.CreateParameter("@UUID", globalID)); 734 cmd.Parameters.Add(_Database.CreateParameter("UUID", globalID));
713 conn.Open(); 735 conn.Open();
714 cmd.ExecuteNonQuery(); 736 cmd.ExecuteNonQuery();
715 } 737 }
@@ -718,13 +740,15 @@ VALUES
718 { 740 {
719 RegionLightShareData nWP = new RegionLightShareData(); 741 RegionLightShareData nWP = new RegionLightShareData();
720 nWP.OnSave += StoreRegionWindlightSettings; 742 nWP.OnSave += StoreRegionWindlightSettings;
721 string sql = "select * from [regionwindlight] where region_id = @regionID"; 743
722 using (SqlConnection conn = new SqlConnection(m_connectionString)) 744 string sql = @"select * from regionwindlight where ""region_id"" = :regionID";
723 using (SqlCommand cmd = new SqlCommand(sql, conn)) 745
746 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
747 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
724 { 748 {
725 cmd.Parameters.Add(_Database.CreateParameter("@regionID", regionUUID)); 749 cmd.Parameters.Add(_Database.CreateParameter("regionID", regionUUID.ToString() ));
726 conn.Open(); 750 conn.Open();
727 using (SqlDataReader result = cmd.ExecuteReader()) 751 using (NpgsqlDataReader result = cmd.ExecuteReader())
728 { 752 {
729 if (!result.Read()) 753 if (!result.Read())
730 { 754 {
@@ -807,27 +831,28 @@ VALUES
807 831
808 public void RemoveRegionWindlightSettings(UUID regionID) 832 public void RemoveRegionWindlightSettings(UUID regionID)
809 { 833 {
810 string sql = "delete from [regionwindlight] where region_id = @region_id"; 834 string sql = @"delete from regionwindlight where ""region_id"" = :region_id";
811 using (SqlConnection conn = new SqlConnection(m_connectionString)) 835 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
812 using (SqlCommand cmd = new SqlCommand(sql, conn)) 836 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
813 { 837 {
814 conn.Open(); 838 conn.Open();
815 cmd.Parameters.Add(_Database.CreateParameter("@region_id", regionID)); 839 cmd.Parameters.Add(_Database.CreateParameter("region_id", regionID.ToString()));
816 cmd.ExecuteNonQuery(); 840 cmd.ExecuteNonQuery();
817 } 841 }
818 } 842 }
819 843
820 public void StoreRegionWindlightSettings(RegionLightShareData wl) 844 public void StoreRegionWindlightSettings(RegionLightShareData wl)
821 { 845 {
822 string sql = "select count (region_id) from regionwindlight where region_id = @region_id"; 846 string sql = @"select region_id from regionwindlight where ""region_id"" = :region_id limit 1;";
823 bool exists = false; 847 bool exists = false;
824 using (SqlConnection conn = new SqlConnection(m_connectionString)) 848 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
825 { 849 {
826 conn.Open(); 850 conn.Open();
827 using (SqlCommand cmd = new SqlCommand(sql, conn)) 851 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
828 { 852 {
829 cmd.Parameters.Add(_Database.CreateParameter("@region_id", wl.regionID)); 853 cmd.Parameters.Add(_Database.CreateParameter("region_id", wl.regionID.ToString() ));
830 exists = (int)cmd.ExecuteScalar() > 0; 854 NpgsqlDataReader dr = cmd.ExecuteReader();
855 exists = dr.Read();
831 } 856 }
832 } 857 }
833 if (exists) 858 if (exists)
@@ -836,140 +861,141 @@ VALUES
836 } 861 }
837 862
838 // sql insert 863 // sql insert
839 sql = @"INSERT INTO [regionwindlight] 864 sql = @"INSERT INTO regionwindlight
840 ([region_id] 865 (region_id
841 ,[water_color_r] 866 ,water_color_r
842 ,[water_color_g] 867 ,water_color_g
843 ,[water_color_b] 868 ,water_color_b
844 ,[water_fog_density_exponent] 869 ,water_fog_density_exponent
845 ,[underwater_fog_modifier] 870 ,underwater_fog_modifier
846 ,[reflection_wavelet_scale_1] 871 ,reflection_wavelet_scale_1
847 ,[reflection_wavelet_scale_2] 872 ,reflection_wavelet_scale_2
848 ,[reflection_wavelet_scale_3] 873 ,reflection_wavelet_scale_3
849 ,[fresnel_scale] 874 ,fresnel_scale
850 ,[fresnel_offset] 875 ,fresnel_offset
851 ,[refract_scale_above] 876 ,refract_scale_above
852 ,[refract_scale_below] 877 ,refract_scale_below
853 ,[blur_multiplier] 878 ,blur_multiplier
854 ,[big_wave_direction_x] 879 ,big_wave_direction_x
855 ,[big_wave_direction_y] 880 ,big_wave_direction_y
856 ,[little_wave_direction_x] 881 ,little_wave_direction_x
857 ,[little_wave_direction_y] 882 ,little_wave_direction_y
858 ,[normal_map_texture] 883 ,normal_map_texture
859 ,[horizon_r] 884 ,horizon_r
860 ,[horizon_g] 885 ,horizon_g
861 ,[horizon_b] 886 ,horizon_b
862 ,[horizon_i] 887 ,horizon_i
863 ,[haze_horizon] 888 ,haze_horizon
864 ,[blue_density_r] 889 ,blue_density_r
865 ,[blue_density_g] 890 ,blue_density_g
866 ,[blue_density_b] 891 ,blue_density_b
867 ,[blue_density_i] 892 ,blue_density_i
868 ,[haze_density] 893 ,haze_density
869 ,[density_multiplier] 894 ,density_multiplier
870 ,[distance_multiplier] 895 ,distance_multiplier
871 ,[max_altitude] 896 ,max_altitude
872 ,[sun_moon_color_r] 897 ,sun_moon_color_r
873 ,[sun_moon_color_g] 898 ,sun_moon_color_g
874 ,[sun_moon_color_b] 899 ,sun_moon_color_b
875 ,[sun_moon_color_i] 900 ,sun_moon_color_i
876 ,[sun_moon_position] 901 ,sun_moon_position
877 ,[ambient_r] 902 ,ambient_r
878 ,[ambient_g] 903 ,ambient_g
879 ,[ambient_b] 904 ,ambient_b
880 ,[ambient_i] 905 ,ambient_i
881 ,[east_angle] 906 ,east_angle
882 ,[sun_glow_focus] 907 ,sun_glow_focus
883 ,[sun_glow_size] 908 ,sun_glow_size
884 ,[scene_gamma] 909 ,scene_gamma
885 ,[star_brightness] 910 ,star_brightness
886 ,[cloud_color_r] 911 ,cloud_color_r
887 ,[cloud_color_g] 912 ,cloud_color_g
888 ,[cloud_color_b] 913 ,cloud_color_b
889 ,[cloud_color_i] 914 ,cloud_color_i
890 ,[cloud_x] 915 ,cloud_x
891 ,[cloud_y] 916 ,cloud_y
892 ,[cloud_density] 917 ,cloud_density
893 ,[cloud_coverage] 918 ,cloud_coverage
894 ,[cloud_scale] 919 ,cloud_scale
895 ,[cloud_detail_x] 920 ,cloud_detail_x
896 ,[cloud_detail_y] 921 ,cloud_detail_y
897 ,[cloud_detail_density] 922 ,cloud_detail_density
898 ,[cloud_scroll_x] 923 ,cloud_scroll_x
899 ,[cloud_scroll_x_lock] 924 ,cloud_scroll_x_lock
900 ,[cloud_scroll_y] 925 ,cloud_scroll_y
901 ,[cloud_scroll_y_lock] 926 ,cloud_scroll_y_lock
902 ,[draw_classic_clouds]) 927 ,draw_classic_clouds)
903 VALUES 928 VALUES
904 (@region_id 929 (:region_id
905 ,@water_color_r 930 ,:water_color_r
906 ,@water_color_g 931 ,:water_color_g
907 ,@water_color_b 932 ,:water_color_b
908 ,@water_fog_density_exponent 933 ,:water_fog_density_exponent
909 ,@underwater_fog_modifier 934 ,:underwater_fog_modifier
910 ,@reflection_wavelet_scale_1 935 ,:reflection_wavelet_scale_1
911 ,@reflection_wavelet_scale_2 936 ,:reflection_wavelet_scale_2
912 ,@reflection_wavelet_scale_3 937 ,:reflection_wavelet_scale_3
913 ,@fresnel_scale 938 ,:fresnel_scale
914 ,@fresnel_offset 939 ,:fresnel_offset
915 ,@refract_scale_above 940 ,:refract_scale_above
916 ,@refract_scale_below 941 ,:refract_scale_below
917 ,@blur_multiplier 942 ,:blur_multiplier
918 ,@big_wave_direction_x 943 ,:big_wave_direction_x
919 ,@big_wave_direction_y 944 ,:big_wave_direction_y
920 ,@little_wave_direction_x 945 ,:little_wave_direction_x
921 ,@little_wave_direction_y 946 ,:little_wave_direction_y
922 ,@normal_map_texture 947 ,:normal_map_texture
923 ,@horizon_r 948 ,:horizon_r
924 ,@horizon_g 949 ,:horizon_g
925 ,@horizon_b 950 ,:horizon_b
926 ,@horizon_i 951 ,:horizon_i
927 ,@haze_horizon 952 ,:haze_horizon
928 ,@blue_density_r 953 ,:blue_density_r
929 ,@blue_density_g 954 ,:blue_density_g
930 ,@blue_density_b 955 ,:blue_density_b
931 ,@blue_density_i 956 ,:blue_density_i
932 ,@haze_density 957 ,:haze_density
933 ,@density_multiplier 958 ,:density_multiplier
934 ,@distance_multiplier 959 ,:distance_multiplier
935 ,@max_altitude 960 ,:max_altitude
936 ,@sun_moon_color_r 961 ,:sun_moon_color_r
937 ,@sun_moon_color_g 962 ,:sun_moon_color_g
938 ,@sun_moon_color_b 963 ,:sun_moon_color_b
939 ,@sun_moon_color_i 964 ,:sun_moon_color_i
940 ,@sun_moon_position 965 ,:sun_moon_position
941 ,@ambient_r 966 ,:ambient_r
942 ,@ambient_g 967 ,:ambient_g
943 ,@ambient_b 968 ,:ambient_b
944 ,@ambient_i 969 ,:ambient_i
945 ,@east_angle 970 ,:east_angle
946 ,@sun_glow_focus 971 ,:sun_glow_focus
947 ,@sun_glow_size 972 ,:sun_glow_size
948 ,@scene_gamma 973 ,:scene_gamma
949 ,@star_brightness 974 ,:star_brightness
950 ,@cloud_color_r 975 ,:cloud_color_r
951 ,@cloud_color_g 976 ,:cloud_color_g
952 ,@cloud_color_b 977 ,:cloud_color_b
953 ,@cloud_color_i 978 ,:cloud_color_i
954 ,@cloud_x 979 ,:cloud_x
955 ,@cloud_y 980 ,:cloud_y
956 ,@cloud_density 981 ,:cloud_density
957 ,@cloud_coverage 982 ,:cloud_coverage
958 ,@cloud_scale 983 ,:cloud_scale
959 ,@cloud_detail_x 984 ,:cloud_detail_x
960 ,@cloud_detail_y 985 ,:cloud_detail_y
961 ,@cloud_detail_density 986 ,:cloud_detail_density
962 ,@cloud_scroll_x 987 ,:cloud_scroll_x
963 ,@cloud_scroll_x_lock 988 ,:cloud_scroll_x_lock
964 ,@cloud_scroll_y 989 ,:cloud_scroll_y
965 ,@cloud_scroll_y_lock 990 ,:cloud_scroll_y_lock
966 ,@draw_classic_clouds)"; 991 ,:draw_classic_clouds);";
967 using (SqlConnection conn = new SqlConnection(m_connectionString)) 992
993 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
968 { 994 {
969 conn.Open(); 995 conn.Open();
970 using (SqlCommand cmd = new SqlCommand(sql, conn)) 996 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
971 { 997 {
972 cmd.Parameters.Add(_Database.CreateParameter("region_id", wl.regionID)); 998 cmd.Parameters.Add(_Database.CreateParameter("region_id", wl.regionID.ToString()));
973 cmd.Parameters.Add(_Database.CreateParameter("water_color_r", wl.waterColor.X)); 999 cmd.Parameters.Add(_Database.CreateParameter("water_color_r", wl.waterColor.X));
974 cmd.Parameters.Add(_Database.CreateParameter("water_color_g", wl.waterColor.Y)); 1000 cmd.Parameters.Add(_Database.CreateParameter("water_color_g", wl.waterColor.Y));
975 cmd.Parameters.Add(_Database.CreateParameter("water_color_b", wl.waterColor.Z)); 1001 cmd.Parameters.Add(_Database.CreateParameter("water_color_b", wl.waterColor.Z));
@@ -987,7 +1013,7 @@ VALUES
987 cmd.Parameters.Add(_Database.CreateParameter("big_wave_direction_y", wl.bigWaveDirection.Y)); 1013 cmd.Parameters.Add(_Database.CreateParameter("big_wave_direction_y", wl.bigWaveDirection.Y));
988 cmd.Parameters.Add(_Database.CreateParameter("little_wave_direction_x", wl.littleWaveDirection.X)); 1014 cmd.Parameters.Add(_Database.CreateParameter("little_wave_direction_x", wl.littleWaveDirection.X));
989 cmd.Parameters.Add(_Database.CreateParameter("little_wave_direction_y", wl.littleWaveDirection.Y)); 1015 cmd.Parameters.Add(_Database.CreateParameter("little_wave_direction_y", wl.littleWaveDirection.Y));
990 cmd.Parameters.Add(_Database.CreateParameter("normal_map_texture", wl.normalMapTexture)); 1016 cmd.Parameters.Add(_Database.CreateParameter("normal_map_texture", wl.normalMapTexture.ToString()));
991 cmd.Parameters.Add(_Database.CreateParameter("horizon_r", wl.horizon.X)); 1017 cmd.Parameters.Add(_Database.CreateParameter("horizon_r", wl.horizon.X));
992 cmd.Parameters.Add(_Database.CreateParameter("horizon_g", wl.horizon.Y)); 1018 cmd.Parameters.Add(_Database.CreateParameter("horizon_g", wl.horizon.Y));
993 cmd.Parameters.Add(_Database.CreateParameter("horizon_b", wl.horizon.Z)); 1019 cmd.Parameters.Add(_Database.CreateParameter("horizon_b", wl.horizon.Z));
@@ -1185,13 +1211,13 @@ VALUES
1185 #region Environment Settings 1211 #region Environment Settings
1186 public string LoadRegionEnvironmentSettings(UUID regionUUID) 1212 public string LoadRegionEnvironmentSettings(UUID regionUUID)
1187 { 1213 {
1188 string sql = "select * from [regionenvironment] where region_id = @region_id"; 1214 string sql = "select * from regionenvironment where region_id = :region_id";
1189 using (SqlConnection conn = new SqlConnection(m_connectionString)) 1215 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
1190 using (SqlCommand cmd = new SqlCommand(sql, conn)) 1216 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
1191 { 1217 {
1192 cmd.Parameters.Add(_Database.CreateParameter("@region_id", regionUUID)); 1218 cmd.Parameters.Add(_Database.CreateParameter("region_id", regionUUID));
1193 conn.Open(); 1219 conn.Open();
1194 using (SqlDataReader result = cmd.ExecuteReader()) 1220 using (NpgsqlDataReader result = cmd.ExecuteReader())
1195 { 1221 {
1196 if (!result.Read()) 1222 if (!result.Read())
1197 { 1223 {
@@ -1208,24 +1234,23 @@ VALUES
1208 public void StoreRegionEnvironmentSettings(UUID regionUUID, string settings) 1234 public void StoreRegionEnvironmentSettings(UUID regionUUID, string settings)
1209 { 1235 {
1210 { 1236 {
1211 string sql = "DELETE FROM [regionenvironment] WHERE region_id = @region_id"; 1237 string sql = "DELETE FROM regionenvironment WHERE region_id = :region_id ;";
1212 using (SqlConnection conn = new SqlConnection(m_connectionString)) 1238
1213 1239 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
1214 using (SqlCommand cmd = new SqlCommand(sql, conn)) 1240 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
1215 { 1241 {
1216 cmd.Parameters.Add(_Database.CreateParameter("@region_id", regionUUID)); 1242 cmd.Parameters.Add(_Database.CreateParameter("region_id", regionUUID));
1217 conn.Open(); 1243 conn.Open();
1218 cmd.ExecuteNonQuery(); 1244 cmd.ExecuteNonQuery();
1219 } 1245 }
1220 1246
1221 sql = "INSERT INTO [regionenvironment] (region_id, llsd_settings) VALUES (@region_id, @llsd_settings)"; 1247 sql = "INSERT INTO regionenvironment (region_id, llsd_settings) VALUES (:region_id, :llsd_settings) ;";
1222
1223 using (SqlConnection conn = new SqlConnection(m_connectionString))
1224 1248
1225 using (SqlCommand cmd = new SqlCommand(sql, conn)) 1249 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
1250 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
1226 { 1251 {
1227 cmd.Parameters.Add(_Database.CreateParameter("@region_id", regionUUID)); 1252 cmd.Parameters.Add(_Database.CreateParameter("region_id", regionUUID));
1228 cmd.Parameters.Add(_Database.CreateParameter("@llsd_settings", settings)); 1253 cmd.Parameters.Add(_Database.CreateParameter("llsd_settings", settings));
1229 1254
1230 conn.Open(); 1255 conn.Open();
1231 cmd.ExecuteNonQuery(); 1256 cmd.ExecuteNonQuery();
@@ -1235,11 +1260,11 @@ VALUES
1235 1260
1236 public void RemoveRegionEnvironmentSettings(UUID regionUUID) 1261 public void RemoveRegionEnvironmentSettings(UUID regionUUID)
1237 { 1262 {
1238 string sql = "delete from [regionenvironment] where region_id = @region_id"; 1263 string sql = "delete from regionenvironment where region_id = :region_id ;";
1239 using (SqlConnection conn = new SqlConnection(m_connectionString)) 1264 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
1240 using (SqlCommand cmd = new SqlCommand(sql, conn)) 1265 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
1241 { 1266 {
1242 cmd.Parameters.Add(_Database.CreateParameter("@region_id", regionUUID)); 1267 cmd.Parameters.Add(_Database.CreateParameter("region_id", regionUUID));
1243 1268
1244 conn.Open(); 1269 conn.Open();
1245 cmd.ExecuteNonQuery(); 1270 cmd.ExecuteNonQuery();
@@ -1254,14 +1279,14 @@ VALUES
1254 /// <returns></returns> 1279 /// <returns></returns>
1255 public RegionSettings LoadRegionSettings(UUID regionUUID) 1280 public RegionSettings LoadRegionSettings(UUID regionUUID)
1256 { 1281 {
1257 string sql = "select * from regionsettings where regionUUID = @regionUUID"; 1282 string sql = @"select * from regionsettings where ""regionUUID"" = :regionUUID";
1258 RegionSettings regionSettings; 1283 RegionSettings regionSettings;
1259 using (SqlConnection conn = new SqlConnection(m_connectionString)) 1284 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
1260 using (SqlCommand cmd = new SqlCommand(sql, conn)) 1285 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
1261 { 1286 {
1262 cmd.Parameters.Add(_Database.CreateParameter("@regionUUID", regionUUID)); 1287 cmd.Parameters.Add(_Database.CreateParameter("regionUUID", regionUUID));
1263 conn.Open(); 1288 conn.Open();
1264 using (SqlDataReader reader = cmd.ExecuteReader()) 1289 using (NpgsqlDataReader reader = cmd.ExecuteReader())
1265 { 1290 {
1266 if (reader.Read()) 1291 if (reader.Read())
1267 { 1292 {
@@ -1294,11 +1319,11 @@ VALUES
1294 { 1319 {
1295 //Little check if regionUUID already exist in DB 1320 //Little check if regionUUID already exist in DB
1296 string regionUUID; 1321 string regionUUID;
1297 string sql = "SELECT regionUUID FROM regionsettings WHERE regionUUID = @regionUUID"; 1322 string sql = @"SELECT ""regionUUID"" FROM regionsettings WHERE ""regionUUID"" = :regionUUID";
1298 using (SqlConnection conn = new SqlConnection(m_connectionString)) 1323 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
1299 using (SqlCommand cmd = new SqlCommand(sql, conn)) 1324 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
1300 { 1325 {
1301 cmd.Parameters.Add(_Database.CreateParameter("@regionUUID", regionSettings.RegionUUID)); 1326 cmd.Parameters.Add(_Database.CreateParameter("regionUUID", regionSettings.RegionUUID));
1302 conn.Open(); 1327 conn.Open();
1303 regionUUID = cmd.ExecuteScalar().ToString(); 1328 regionUUID = cmd.ExecuteScalar().ToString();
1304 } 1329 }
@@ -1311,20 +1336,22 @@ VALUES
1311 { 1336 {
1312 //This method only updates region settings!!! First call LoadRegionSettings to create new region settings in DB 1337 //This method only updates region settings!!! First call LoadRegionSettings to create new region settings in DB
1313 sql = 1338 sql =
1314 @"UPDATE [regionsettings] SET [block_terraform] = @block_terraform ,[block_fly] = @block_fly ,[allow_damage] = @allow_damage 1339 @"UPDATE regionsettings SET block_terraform = :block_terraform ,block_fly = :block_fly ,allow_damage = :allow_damage
1315,[restrict_pushing] = @restrict_pushing ,[allow_land_resell] = @allow_land_resell ,[allow_land_join_divide] = @allow_land_join_divide 1340,restrict_pushing = :restrict_pushing ,allow_land_resell = :allow_land_resell ,allow_land_join_divide = :allow_land_join_divide
1316,[block_show_in_search] = @block_show_in_search ,[agent_limit] = @agent_limit ,[object_bonus] = @object_bonus ,[maturity] = @maturity 1341,block_show_in_search = :block_show_in_search ,agent_limit = :agent_limit ,object_bonus = :object_bonus ,maturity = :maturity
1317,[disable_scripts] = @disable_scripts ,[disable_collisions] = @disable_collisions ,[disable_physics] = @disable_physics 1342,disable_scripts = :disable_scripts ,disable_collisions = :disable_collisions ,disable_physics = :disable_physics
1318,[terrain_texture_1] = @terrain_texture_1 ,[terrain_texture_2] = @terrain_texture_2 ,[terrain_texture_3] = @terrain_texture_3 1343,terrain_texture_1 = :terrain_texture_1 ,terrain_texture_2 = :terrain_texture_2 ,terrain_texture_3 = :terrain_texture_3
1319,[terrain_texture_4] = @terrain_texture_4 ,[elevation_1_nw] = @elevation_1_nw ,[elevation_2_nw] = @elevation_2_nw 1344,terrain_texture_4 = :terrain_texture_4 ,elevation_1_nw = :elevation_1_nw ,elevation_2_nw = :elevation_2_nw
1320,[elevation_1_ne] = @elevation_1_ne ,[elevation_2_ne] = @elevation_2_ne ,[elevation_1_se] = @elevation_1_se ,[elevation_2_se] = @elevation_2_se 1345,elevation_1_ne = :elevation_1_ne ,elevation_2_ne = :elevation_2_ne ,elevation_1_se = :elevation_1_se ,elevation_2_se = :elevation_2_se
1321,[elevation_1_sw] = @elevation_1_sw ,[elevation_2_sw] = @elevation_2_sw ,[water_height] = @water_height ,[terrain_raise_limit] = @terrain_raise_limit 1346,elevation_1_sw = :elevation_1_sw ,elevation_2_sw = :elevation_2_sw ,water_height = :water_height ,terrain_raise_limit = :terrain_raise_limit
1322,[terrain_lower_limit] = @terrain_lower_limit ,[use_estate_sun] = @use_estate_sun ,[fixed_sun] = @fixed_sun ,[sun_position] = @sun_position 1347,terrain_lower_limit = :terrain_lower_limit ,use_estate_sun = :use_estate_sun ,fixed_sun = :fixed_sun ,sun_position = :sun_position
1323,[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 1348,covenant = :covenant ,covenant_datetime = :covenant_datetime, sunvectorx = :sunvectorx, sunvectory = :sunvectory, sunvectorz = :sunvectorz,
1324 WHERE [regionUUID] = @regionUUID"; 1349""Sandbox"" = :Sandbox, loaded_creation_datetime = :loaded_creation_datetime, loaded_creation_id = :loaded_creation_id, ""map_tile_ID"" = :TerrainImageID,
1325 1350""TelehubObject"" = :telehubobject, ""parcel_tile_ID"" = :ParcelImageID
1326 using (SqlConnection conn = new SqlConnection(m_connectionString)) 1351 WHERE ""regionUUID"" = :regionUUID";
1327 using (SqlCommand cmd = new SqlCommand(sql, conn)) 1352
1353 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
1354 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
1328 { 1355 {
1329 cmd.Parameters.AddRange(CreateRegionSettingParameters(regionSettings)); 1356 cmd.Parameters.AddRange(CreateRegionSettingParameters(regionSettings));
1330 conn.Open(); 1357 conn.Open();
@@ -1342,51 +1369,29 @@ VALUES
1342 #region Private Methods 1369 #region Private Methods
1343 1370
1344 /// <summary> 1371 /// <summary>
1345 /// Serializes the terrain data for storage in DB.
1346 /// </summary>
1347 /// <param name="val">terrain data</param>
1348 /// <returns></returns>
1349 private static Array serializeTerrain(double[,] val)
1350 {
1351 MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) * sizeof(double));
1352 BinaryWriter bw = new BinaryWriter(str);
1353
1354 // TODO: COMPATIBILITY - Add byte-order conversions
1355 for (int x = 0; x < (int)Constants.RegionSize; x++)
1356 for (int y = 0; y < (int)Constants.RegionSize; y++)
1357 {
1358 double height = val[x, y];
1359 if (height == 0.0)
1360 height = double.Epsilon;
1361
1362 bw.Write(height);
1363 }
1364
1365 return str.ToArray();
1366 }
1367
1368 /// <summary>
1369 /// Stores new regionsettings. 1372 /// Stores new regionsettings.
1370 /// </summary> 1373 /// </summary>
1371 /// <param name="regionSettings">The region settings.</param> 1374 /// <param name="regionSettings">The region settings.</param>
1372 private void StoreNewRegionSettings(RegionSettings regionSettings) 1375 private void StoreNewRegionSettings(RegionSettings regionSettings)
1373 { 1376 {
1374 string sql = @"INSERT INTO [regionsettings] 1377 string sql = @"INSERT INTO regionsettings
1375 ([regionUUID],[block_terraform],[block_fly],[allow_damage],[restrict_pushing],[allow_land_resell],[allow_land_join_divide], 1378 (""regionUUID"",block_terraform,block_fly,allow_damage,restrict_pushing,allow_land_resell,allow_land_join_divide,
1376 [block_show_in_search],[agent_limit],[object_bonus],[maturity],[disable_scripts],[disable_collisions],[disable_physics], 1379 block_show_in_search,agent_limit,object_bonus,maturity,disable_scripts,disable_collisions,disable_physics,
1377 [terrain_texture_1],[terrain_texture_2],[terrain_texture_3],[terrain_texture_4],[elevation_1_nw],[elevation_2_nw],[elevation_1_ne], 1380 terrain_texture_1,terrain_texture_2,terrain_texture_3,terrain_texture_4,elevation_1_nw,elevation_2_nw,elevation_1_ne,
1378 [elevation_2_ne],[elevation_1_se],[elevation_2_se],[elevation_1_sw],[elevation_2_sw],[water_height],[terrain_raise_limit], 1381 elevation_2_ne,elevation_1_se,elevation_2_se,elevation_1_sw,elevation_2_sw,water_height,terrain_raise_limit,
1379 [terrain_lower_limit],[use_estate_sun],[fixed_sun],[sun_position],[covenant],[covenant_datetime],[sunvectorx], [sunvectory], [sunvectorz],[Sandbox], [loaded_creation_datetime], [loaded_creation_id] 1382 terrain_lower_limit,use_estate_sun,fixed_sun,sun_position,covenant,covenant_datetime,sunvectorx, sunvectory, sunvectorz,
1380 ) 1383 ""Sandbox"", loaded_creation_datetime, loaded_creation_id
1384 )
1381 VALUES 1385 VALUES
1382 (@regionUUID,@block_terraform,@block_fly,@allow_damage,@restrict_pushing,@allow_land_resell,@allow_land_join_divide, 1386 (:regionUUID,:block_terraform,:block_fly,:allow_damage,:restrict_pushing,:allow_land_resell,:allow_land_join_divide,
1383 @block_show_in_search,@agent_limit,@object_bonus,@maturity,@disable_scripts,@disable_collisions,@disable_physics, 1387 :block_show_in_search,:agent_limit,:object_bonus,:maturity,:disable_scripts,:disable_collisions,:disable_physics,
1384 @terrain_texture_1,@terrain_texture_2,@terrain_texture_3,@terrain_texture_4,@elevation_1_nw,@elevation_2_nw,@elevation_1_ne, 1388 :terrain_texture_1,:terrain_texture_2,:terrain_texture_3,:terrain_texture_4,:elevation_1_nw,:elevation_2_nw,:elevation_1_ne,
1385 @elevation_2_ne,@elevation_1_se,@elevation_2_se,@elevation_1_sw,@elevation_2_sw,@water_height,@terrain_raise_limit, 1389 :elevation_2_ne,:elevation_1_se,:elevation_2_se,:elevation_1_sw,:elevation_2_sw,:water_height,:terrain_raise_limit,
1386 @terrain_lower_limit,@use_estate_sun,@fixed_sun,@sun_position,@covenant, @covenant_datetime, @sunvectorx,@sunvectory, @sunvectorz, @Sandbox, @loaded_creation_datetime, @loaded_creation_id)"; 1390 :terrain_lower_limit,:use_estate_sun,:fixed_sun,:sun_position,:covenant, :covenant_datetime, :sunvectorx,:sunvectory,
1387 1391 :sunvectorz, :Sandbox, :loaded_creation_datetime, :loaded_creation_id )";
1388 using (SqlConnection conn = new SqlConnection(m_connectionString)) 1392
1389 using (SqlCommand cmd = new SqlCommand(sql, conn)) 1393 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
1394 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
1390 { 1395 {
1391 cmd.Parameters.AddRange(CreateRegionSettingParameters(regionSettings)); 1396 cmd.Parameters.AddRange(CreateRegionSettingParameters(regionSettings));
1392 conn.Open(); 1397 conn.Open();
@@ -1578,8 +1583,8 @@ VALUES
1578 prim.TouchName = (string)primRow["TouchName"]; 1583 prim.TouchName = (string)primRow["TouchName"];
1579 // permissions 1584 // permissions
1580 prim.Flags = (PrimFlags)Convert.ToUInt32(primRow["ObjectFlags"]); 1585 prim.Flags = (PrimFlags)Convert.ToUInt32(primRow["ObjectFlags"]);
1581 //prim.CreatorID = new UUID((Guid)primRow["CreatorID"]); 1586 //prim.creatorID = new UUID((Guid)primRow["creatorID"]);
1582 prim.CreatorIdentification = (string)primRow["CreatorID"]; 1587 prim.CreatorIdentification = (string)primRow["CreatorID"].ToString();
1583 prim.OwnerID = new UUID((Guid)primRow["OwnerID"]); 1588 prim.OwnerID = new UUID((Guid)primRow["OwnerID"]);
1584 prim.GroupID = new UUID((Guid)primRow["GroupID"]); 1589 prim.GroupID = new UUID((Guid)primRow["GroupID"]);
1585 prim.LastOwnerID = new UUID((Guid)primRow["LastOwnerID"]); 1590 prim.LastOwnerID = new UUID((Guid)primRow["LastOwnerID"]);
@@ -1685,13 +1690,23 @@ VALUES
1685 1690
1686 prim.CollisionSound = new UUID((Guid)primRow["CollisionSound"]); 1691 prim.CollisionSound = new UUID((Guid)primRow["CollisionSound"]);
1687 prim.CollisionSoundVolume = Convert.ToSingle(primRow["CollisionSoundVolume"]); 1692 prim.CollisionSoundVolume = Convert.ToSingle(primRow["CollisionSoundVolume"]);
1688 if (Convert.ToInt16(primRow["PassTouches"]) != 0) 1693
1689 prim.PassTouches = true; 1694 prim.PassTouches = (bool)primRow["PassTouches"];
1690 prim.LinkNum = Convert.ToInt32(primRow["LinkNumber"]);
1691 1695
1692 if (!(primRow["MediaURL"] is System.DBNull)) 1696 if (!(primRow["MediaURL"] is System.DBNull))
1693 prim.MediaUrl = (string)primRow["MediaURL"]; 1697 prim.MediaUrl = (string)primRow["MediaURL"];
1694 1698
1699 if (!(primRow["DynAttrs"] is System.DBNull) && (string)primRow["DynAttrs"] != "")
1700 prim.DynAttrs = DAMap.FromXml((string)primRow["DynAttrs"]);
1701 else
1702 prim.DynAttrs = new DAMap();
1703
1704 prim.PhysicsShapeType = Convert.ToByte(primRow["PhysicsShapeType"]);
1705 prim.Density = Convert.ToSingle(primRow["Density"]);
1706 prim.GravityModifier = Convert.ToSingle(primRow["GravityModifier"]);
1707 prim.Friction = Convert.ToSingle(primRow["Friction"]);
1708 prim.Restitution = Convert.ToSingle(primRow["Restitution"]);
1709
1695 return prim; 1710 return prim;
1696 } 1711 }
1697 1712
@@ -1749,7 +1764,6 @@ VALUES
1749 baseShape.Media = PrimitiveBaseShape.MediaList.FromXml((string)shapeRow["Media"]); 1764 baseShape.Media = PrimitiveBaseShape.MediaList.FromXml((string)shapeRow["Media"]);
1750 } 1765 }
1751 1766
1752
1753 return baseShape; 1767 return baseShape;
1754 } 1768 }
1755 1769
@@ -1773,8 +1787,8 @@ VALUES
1773 taskItem.Name = (string)inventoryRow["name"]; 1787 taskItem.Name = (string)inventoryRow["name"];
1774 taskItem.Description = (string)inventoryRow["description"]; 1788 taskItem.Description = (string)inventoryRow["description"];
1775 taskItem.CreationDate = Convert.ToUInt32(inventoryRow["creationDate"]); 1789 taskItem.CreationDate = Convert.ToUInt32(inventoryRow["creationDate"]);
1776 //taskItem.CreatorID = new UUID((Guid)inventoryRow["creatorID"]); 1790 //taskItem.creatorID = new UUID((Guid)inventoryRow["creatorID"]);
1777 taskItem.CreatorIdentification = (string)inventoryRow["creatorID"]; 1791 taskItem.CreatorIdentification = (string)inventoryRow["creatorID"].ToString();
1778 taskItem.OwnerID = new UUID((Guid)inventoryRow["ownerID"]); 1792 taskItem.OwnerID = new UUID((Guid)inventoryRow["ownerID"]);
1779 taskItem.LastOwnerID = new UUID((Guid)inventoryRow["lastOwnerID"]); 1793 taskItem.LastOwnerID = new UUID((Guid)inventoryRow["lastOwnerID"]);
1780 taskItem.GroupID = new UUID((Guid)inventoryRow["groupID"]); 1794 taskItem.GroupID = new UUID((Guid)inventoryRow["groupID"]);
@@ -1798,9 +1812,9 @@ VALUES
1798 /// </summary> 1812 /// </summary>
1799 /// <param name="taskItem">item in inventory.</param> 1813 /// <param name="taskItem">item in inventory.</param>
1800 /// <returns></returns> 1814 /// <returns></returns>
1801 private SqlParameter[] CreatePrimInventoryParameters(TaskInventoryItem taskItem) 1815 private NpgsqlParameter[] CreatePrimInventoryParameters(TaskInventoryItem taskItem)
1802 { 1816 {
1803 List<SqlParameter> parameters = new List<SqlParameter>(); 1817 List<NpgsqlParameter> parameters = new List<NpgsqlParameter>();
1804 1818
1805 parameters.Add(_Database.CreateParameter("itemID", taskItem.ItemID)); 1819 parameters.Add(_Database.CreateParameter("itemID", taskItem.ItemID));
1806 parameters.Add(_Database.CreateParameter("primID", taskItem.ParentPartID)); 1820 parameters.Add(_Database.CreateParameter("primID", taskItem.ParentPartID));
@@ -1831,9 +1845,9 @@ VALUES
1831 /// </summary> 1845 /// </summary>
1832 /// <param name="settings">regionsettings.</param> 1846 /// <param name="settings">regionsettings.</param>
1833 /// <returns></returns> 1847 /// <returns></returns>
1834 private SqlParameter[] CreateRegionSettingParameters(RegionSettings settings) 1848 private NpgsqlParameter[] CreateRegionSettingParameters(RegionSettings settings)
1835 { 1849 {
1836 List<SqlParameter> parameters = new List<SqlParameter>(); 1850 List<NpgsqlParameter> parameters = new List<NpgsqlParameter>();
1837 1851
1838 parameters.Add(_Database.CreateParameter("regionUUID", settings.RegionUUID)); 1852 parameters.Add(_Database.CreateParameter("regionUUID", settings.RegionUUID));
1839 parameters.Add(_Database.CreateParameter("block_terraform", settings.BlockTerraform)); 1853 parameters.Add(_Database.CreateParameter("block_terraform", settings.BlockTerraform));
@@ -1888,9 +1902,9 @@ VALUES
1888 /// <param name="land">land parameters.</param> 1902 /// <param name="land">land parameters.</param>
1889 /// <param name="regionUUID">region UUID.</param> 1903 /// <param name="regionUUID">region UUID.</param>
1890 /// <returns></returns> 1904 /// <returns></returns>
1891 private SqlParameter[] CreateLandParameters(LandData land, UUID regionUUID) 1905 private NpgsqlParameter[] CreateLandParameters(LandData land, UUID regionUUID)
1892 { 1906 {
1893 List<SqlParameter> parameters = new List<SqlParameter>(); 1907 List<NpgsqlParameter> parameters = new List<NpgsqlParameter>();
1894 1908
1895 parameters.Add(_Database.CreateParameter("UUID", land.GlobalID)); 1909 parameters.Add(_Database.CreateParameter("UUID", land.GlobalID));
1896 parameters.Add(_Database.CreateParameter("RegionUUID", regionUUID)); 1910 parameters.Add(_Database.CreateParameter("RegionUUID", regionUUID));
@@ -1912,8 +1926,8 @@ VALUES
1912 parameters.Add(_Database.CreateParameter("SalePrice", land.SalePrice)); 1926 parameters.Add(_Database.CreateParameter("SalePrice", land.SalePrice));
1913 parameters.Add(_Database.CreateParameter("LandStatus", (int)land.Status)); //Enum. libsecondlife.Parcel.ParcelStatus 1927 parameters.Add(_Database.CreateParameter("LandStatus", (int)land.Status)); //Enum. libsecondlife.Parcel.ParcelStatus
1914 parameters.Add(_Database.CreateParameter("LandFlags", land.Flags)); 1928 parameters.Add(_Database.CreateParameter("LandFlags", land.Flags));
1915 parameters.Add(_Database.CreateParameter("LandingType", land.LandingType)); 1929 parameters.Add(_Database.CreateParameter("LandingType", Convert.ToInt32( land.LandingType) ));
1916 parameters.Add(_Database.CreateParameter("MediaAutoScale", land.MediaAutoScale)); 1930 parameters.Add(_Database.CreateParameter("MediaAutoScale", Convert.ToInt32( land.MediaAutoScale )));
1917 parameters.Add(_Database.CreateParameter("MediaTextureUUID", land.MediaID)); 1931 parameters.Add(_Database.CreateParameter("MediaTextureUUID", land.MediaID));
1918 parameters.Add(_Database.CreateParameter("MediaURL", land.MediaURL)); 1932 parameters.Add(_Database.CreateParameter("MediaURL", land.MediaURL));
1919 parameters.Add(_Database.CreateParameter("MusicURL", land.MusicURL)); 1933 parameters.Add(_Database.CreateParameter("MusicURL", land.MusicURL));
@@ -1938,9 +1952,9 @@ VALUES
1938 /// <param name="parcelAccessEntry">parcel access entry.</param> 1952 /// <param name="parcelAccessEntry">parcel access entry.</param>
1939 /// <param name="parcelID">parcel ID.</param> 1953 /// <param name="parcelID">parcel ID.</param>
1940 /// <returns></returns> 1954 /// <returns></returns>
1941 private SqlParameter[] CreateLandAccessParameters(LandAccessEntry parcelAccessEntry, UUID parcelID) 1955 private NpgsqlParameter[] CreateLandAccessParameters(LandAccessEntry parcelAccessEntry, UUID parcelID)
1942 { 1956 {
1943 List<SqlParameter> parameters = new List<SqlParameter>(); 1957 List<NpgsqlParameter> parameters = new List<NpgsqlParameter>();
1944 1958
1945 parameters.Add(_Database.CreateParameter("LandUUID", parcelID)); 1959 parameters.Add(_Database.CreateParameter("LandUUID", parcelID));
1946 parameters.Add(_Database.CreateParameter("AccessUUID", parcelAccessEntry.AgentID)); 1960 parameters.Add(_Database.CreateParameter("AccessUUID", parcelAccessEntry.AgentID));
@@ -1957,9 +1971,9 @@ VALUES
1957 /// <param name="sceneGroupID">The scenegroup ID.</param> 1971 /// <param name="sceneGroupID">The scenegroup ID.</param>
1958 /// <param name="regionUUID">The region ID.</param> 1972 /// <param name="regionUUID">The region ID.</param>
1959 /// <returns></returns> 1973 /// <returns></returns>
1960 private SqlParameter[] CreatePrimParameters(SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID) 1974 private NpgsqlParameter[] CreatePrimParameters(SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID)
1961 { 1975 {
1962 List<SqlParameter> parameters = new List<SqlParameter>(); 1976 List<NpgsqlParameter> parameters = new List<NpgsqlParameter>();
1963 1977
1964 parameters.Add(_Database.CreateParameter("UUID", prim.UUID)); 1978 parameters.Add(_Database.CreateParameter("UUID", prim.UUID));
1965 parameters.Add(_Database.CreateParameter("RegionUUID", regionUUID)); 1979 parameters.Add(_Database.CreateParameter("RegionUUID", regionUUID));
@@ -2080,12 +2094,22 @@ VALUES
2080 2094
2081 parameters.Add(_Database.CreateParameter("CollisionSound", prim.CollisionSound)); 2095 parameters.Add(_Database.CreateParameter("CollisionSound", prim.CollisionSound));
2082 parameters.Add(_Database.CreateParameter("CollisionSoundVolume", prim.CollisionSoundVolume)); 2096 parameters.Add(_Database.CreateParameter("CollisionSoundVolume", prim.CollisionSoundVolume));
2083 if (prim.PassTouches) 2097
2084 parameters.Add(_Database.CreateParameter("PassTouches", 1)); 2098 parameters.Add(_Database.CreateParameter("PassTouches", prim.PassTouches));
2085 else 2099
2086 parameters.Add(_Database.CreateParameter("PassTouches", 0));
2087 parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum)); 2100 parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum));
2088 parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl)); 2101 parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl));
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));
2089 2113
2090 return parameters.ToArray(); 2114 return parameters.ToArray();
2091 } 2115 }
@@ -2097,9 +2121,9 @@ VALUES
2097 /// <param name="sceneGroupID">The scene group ID.</param> 2121 /// <param name="sceneGroupID">The scene group ID.</param>
2098 /// <param name="regionUUID">The region UUID.</param> 2122 /// <param name="regionUUID">The region UUID.</param>
2099 /// <returns></returns> 2123 /// <returns></returns>
2100 private SqlParameter[] CreatePrimShapeParameters(SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID) 2124 private NpgsqlParameter[] CreatePrimShapeParameters(SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID)
2101 { 2125 {
2102 List<SqlParameter> parameters = new List<SqlParameter>(); 2126 List<NpgsqlParameter> parameters = new List<NpgsqlParameter>();
2103 2127
2104 PrimitiveBaseShape s = prim.Shape; 2128 PrimitiveBaseShape s = prim.Shape;
2105 parameters.Add(_Database.CreateParameter("UUID", prim.UUID)); 2129 parameters.Add(_Database.CreateParameter("UUID", prim.UUID));
@@ -2143,7 +2167,6 @@ VALUES
2143 parameters.Add(_Database.CreateParameter("Media", s.Media.ToXml())); 2167 parameters.Add(_Database.CreateParameter("Media", s.Media.ToXml()));
2144 } 2168 }
2145 2169
2146
2147 return parameters.ToArray(); 2170 return parameters.ToArray();
2148 } 2171 }
2149 2172
@@ -2155,13 +2178,14 @@ VALUES
2155 { 2178 {
2156 rs.ClearSpawnPoints(); 2179 rs.ClearSpawnPoints();
2157 2180
2158 string sql = "SELECT Yaw, Pitch, Distance FROM spawn_points WHERE RegionUUID = @RegionUUID"; 2181 string sql = @"SELECT ""Yaw"", ""Pitch"", ""Distance"" FROM spawn_points WHERE ""RegionUUID"" = :RegionUUID";
2159 using (SqlConnection conn = new SqlConnection(m_connectionString)) 2182
2160 using (SqlCommand cmd = new SqlCommand(sql, conn)) 2183 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
2184 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
2161 { 2185 {
2162 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", rs.RegionUUID.ToString())); 2186 cmd.Parameters.Add(_Database.CreateParameter("RegionUUID", rs.RegionUUID));
2163 conn.Open(); 2187 conn.Open();
2164 using (SqlDataReader reader = cmd.ExecuteReader()) 2188 using (NpgsqlDataReader reader = cmd.ExecuteReader())
2165 { 2189 {
2166 if (reader.Read()) 2190 if (reader.Read())
2167 { 2191 {
@@ -2179,24 +2203,24 @@ VALUES
2179 2203
2180 private void SaveSpawnPoints(RegionSettings rs) 2204 private void SaveSpawnPoints(RegionSettings rs)
2181 { 2205 {
2182 string sql = "DELETE FROM spawn_points WHERE RegionUUID = @RegionUUID"; 2206 string sql = @"DELETE FROM spawn_points WHERE ""RegionUUID"" = :RegionUUID";
2183 using (SqlConnection conn = new SqlConnection(m_connectionString)) 2207 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
2184 using (SqlCommand cmd = new SqlCommand(sql, conn)) 2208 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
2185 { 2209 {
2186 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", rs.RegionUUID)); 2210 cmd.Parameters.Add(_Database.CreateParameter("RegionUUID", rs.RegionUUID));
2187 conn.Open(); 2211 conn.Open();
2188 cmd.ExecuteNonQuery(); 2212 cmd.ExecuteNonQuery();
2189 } 2213 }
2190 foreach (SpawnPoint p in rs.SpawnPoints()) 2214 foreach (SpawnPoint p in rs.SpawnPoints())
2191 { 2215 {
2192 sql = "INSERT INTO spawn_points (RegionUUID, Yaw, Pitch, Distance) VALUES (@RegionUUID, @Yaw, @Pitch, @Distance)"; 2216 sql = @"INSERT INTO spawn_points (""RegionUUID"", ""Yaw"", ""Pitch"", ""Distance"") VALUES (:RegionUUID, :Yaw, :Pitch, :Distance)";
2193 using (SqlConnection conn = new SqlConnection(m_connectionString)) 2217 using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
2194 using (SqlCommand cmd = new SqlCommand(sql, conn)) 2218 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
2195 { 2219 {
2196 cmd.Parameters.Add(_Database.CreateParameter("@RegionUUID", rs.RegionUUID)); 2220 cmd.Parameters.Add(_Database.CreateParameter("RegionUUID", rs.RegionUUID));
2197 cmd.Parameters.Add(_Database.CreateParameter("@Yaw", p.Yaw)); 2221 cmd.Parameters.Add(_Database.CreateParameter("Yaw", p.Yaw));
2198 cmd.Parameters.Add(_Database.CreateParameter("@Pitch", p.Pitch)); 2222 cmd.Parameters.Add(_Database.CreateParameter("Pitch", p.Pitch));
2199 cmd.Parameters.Add(_Database.CreateParameter("@Distance", p.Distance)); 2223 cmd.Parameters.Add(_Database.CreateParameter("Distance", p.Distance));
2200 conn.Open(); 2224 conn.Open();
2201 cmd.ExecuteNonQuery(); 2225 cmd.ExecuteNonQuery();
2202 } 2226 }
diff --git a/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs b/OpenSim/Data/PGSQL/PGSQLXInventoryData.cs
index 9164ffe..a22b882 100644
--- a/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLXInventoryData.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -31,29 +31,39 @@ using System.Collections.Generic;
31using System.Data; 31using System.Data;
32using OpenMetaverse; 32using OpenMetaverse;
33using OpenSim.Framework; 33using OpenSim.Framework;
34using System.Data.SqlClient;
35using System.Reflection; 34using System.Reflection;
36using System.Text; 35using System.Text;
37using log4net; 36using log4net;
37using Npgsql;
38using NpgsqlTypes;
38 39
39namespace OpenSim.Data.MSSQL 40namespace OpenSim.Data.PGSQL
40{ 41{
41 public class MSSQLXInventoryData : IXInventoryData 42 public class PGSQLXInventoryData : IXInventoryData
42 { 43 {
43// private static readonly ILog m_log = LogManager.GetLogger( 44// private static readonly ILog m_log = LogManager.GetLogger(
44// MethodBase.GetCurrentMethod().DeclaringType); 45// MethodBase.GetCurrentMethod().DeclaringType);
45 46
46 private MSSQLFolderHandler m_Folders; 47 private PGSQLFolderHandler m_Folders;
47 private MSSQLItemHandler m_Items; 48 private PGSQLItemHandler m_Items;
48 49
49 public MSSQLXInventoryData(string conn, string realm) 50 public PGSQLXInventoryData(string conn, string realm)
50 { 51 {
51 m_Folders = new MSSQLFolderHandler( 52 m_Folders = new PGSQLFolderHandler(
52 conn, "inventoryfolders", "InventoryStore"); 53 conn, "inventoryfolders", "InventoryStore");
53 m_Items = new MSSQLItemHandler( 54 m_Items = new PGSQLItemHandler(
54 conn, "inventoryitems", String.Empty); 55 conn, "inventoryitems", String.Empty);
55 } 56 }
56 57
58 public static UUID str2UUID(string strUUID)
59 {
60 UUID newUUID = UUID.Zero;
61
62 UUID.TryParse(strUUID, out newUUID);
63
64 return newUUID;
65 }
66
57 public XInventoryFolder[] GetFolders(string[] fields, string[] vals) 67 public XInventoryFolder[] GetFolders(string[] fields, string[] vals)
58 { 68 {
59 return m_Folders.Get(fields, vals); 69 return m_Folders.Get(fields, vals);
@@ -113,7 +123,7 @@ namespace OpenSim.Data.MSSQL
113 123
114 public XInventoryItem[] GetActiveGestures(UUID principalID) 124 public XInventoryItem[] GetActiveGestures(UUID principalID)
115 { 125 {
116 return m_Items.GetActiveGestures(principalID); 126 return m_Items.GetActiveGestures(principalID.ToString());
117 } 127 }
118 128
119 public int GetAssetPermissions(UUID principalID, UUID assetID) 129 public int GetAssetPermissions(UUID principalID, UUID assetID)
@@ -122,9 +132,9 @@ namespace OpenSim.Data.MSSQL
122 } 132 }
123 } 133 }
124 134
125 public class MSSQLItemHandler : MSSQLInventoryHandler<XInventoryItem> 135 public class PGSQLItemHandler : PGSQLInventoryHandler<XInventoryItem>
126 { 136 {
127 public MSSQLItemHandler(string c, string t, string m) : 137 public PGSQLItemHandler(string c, string t, string m) :
128 base(c, t, m) 138 base(c, t, m)
129 { 139 {
130 } 140 }
@@ -137,14 +147,13 @@ namespace OpenSim.Data.MSSQL
137 147
138 UUID oldParent = retrievedItems[0].parentFolderID; 148 UUID oldParent = retrievedItems[0].parentFolderID;
139 149
140 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 150 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
141 { 151 {
142 using (SqlCommand cmd = new SqlCommand()) 152 using (NpgsqlCommand cmd = new NpgsqlCommand())
143 { 153 {
144 154 cmd.CommandText = String.Format(@"update {0} set ""parentFolderID"" = :ParentFolderID where ""inventoryID"" = :InventoryID", m_Realm);
145 cmd.CommandText = String.Format("update {0} set parentFolderID = @ParentFolderID where inventoryID = @InventoryID", m_Realm); 155 cmd.Parameters.Add(m_database.CreateParameter("ParentFolderID", newParent));
146 cmd.Parameters.Add(m_database.CreateParameter("@ParentFolderID", newParent)); 156 cmd.Parameters.Add(m_database.CreateParameter("InventoryID", id ));
147 cmd.Parameters.Add(m_database.CreateParameter("@InventoryID", id));
148 cmd.Connection = conn; 157 cmd.Connection = conn;
149 conn.Open(); 158 conn.Open();
150 159
@@ -159,16 +168,19 @@ namespace OpenSim.Data.MSSQL
159 return true; 168 return true;
160 } 169 }
161 170
162 public XInventoryItem[] GetActiveGestures(UUID principalID) 171 public XInventoryItem[] GetActiveGestures(string principalID)
163 { 172 {
164 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 173 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
165 { 174 {
166 using (SqlCommand cmd = new SqlCommand()) 175 using (NpgsqlCommand cmd = new NpgsqlCommand())
167 { 176 {
168 cmd.CommandText = String.Format("select * from inventoryitems where avatarId = @uuid and assetType = @type and flags = 1", m_Realm); 177 cmd.CommandText = String.Format(@"select * from inventoryitems where ""avatarID"" = :uuid and ""assetType"" = :type and ""flags"" = 1", m_Realm);
178
179 UUID princID = UUID.Zero;
180 UUID.TryParse(principalID, out princID);
169 181
170 cmd.Parameters.Add(m_database.CreateParameter("@uuid", principalID.ToString())); 182 cmd.Parameters.Add(m_database.CreateParameter("uuid", principalID));
171 cmd.Parameters.Add(m_database.CreateParameter("@type", (int)AssetType.Gesture)); 183 cmd.Parameters.Add(m_database.CreateParameter("type", (int)AssetType.Gesture));
172 cmd.Connection = conn; 184 cmd.Connection = conn;
173 conn.Open(); 185 conn.Open();
174 return DoQuery(cmd); 186 return DoQuery(cmd);
@@ -178,16 +190,21 @@ namespace OpenSim.Data.MSSQL
178 190
179 public int GetAssetPermissions(UUID principalID, UUID assetID) 191 public int GetAssetPermissions(UUID principalID, UUID assetID)
180 { 192 {
181 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 193 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
182 { 194 {
183 using (SqlCommand cmd = new SqlCommand()) 195 using (NpgsqlCommand cmd = new NpgsqlCommand())
184 { 196 {
185 cmd.CommandText = String.Format("select bit_or(inventoryCurrentPermissions) as inventoryCurrentPermissions from inventoryitems where avatarID = @PrincipalID and assetID = @AssetID group by assetID", m_Realm); 197 cmd.CommandText = String.Format(@"select bit_or(""inventoryCurrentPermissions"") as ""inventoryCurrentPermissions""
186 cmd.Parameters.Add(m_database.CreateParameter("@PrincipalID", principalID.ToString())); 198 from inventoryitems
187 cmd.Parameters.Add(m_database.CreateParameter("@AssetID", assetID.ToString())); 199 where ""avatarID"" = :PrincipalID
200 and ""assetID"" = :AssetID
201 group by ""assetID"" ", m_Realm);
202
203 cmd.Parameters.Add(m_database.CreateParameter("PrincipalID", principalID));
204 cmd.Parameters.Add(m_database.CreateParameter("AssetID", assetID));
188 cmd.Connection = conn; 205 cmd.Connection = conn;
189 conn.Open(); 206 conn.Open();
190 using (SqlDataReader reader = cmd.ExecuteReader()) 207 using (NpgsqlDataReader reader = cmd.ExecuteReader())
191 { 208 {
192 209
193 int perms = 0; 210 int perms = 0;
@@ -215,9 +232,9 @@ namespace OpenSim.Data.MSSQL
215 } 232 }
216 } 233 }
217 234
218 public class MSSQLFolderHandler : MSSQLInventoryHandler<XInventoryFolder> 235 public class PGSQLFolderHandler : PGSQLInventoryHandler<XInventoryFolder>
219 { 236 {
220 public MSSQLFolderHandler(string c, string t, string m) : 237 public PGSQLFolderHandler(string c, string t, string m) :
221 base(c, t, m) 238 base(c, t, m)
222 { 239 {
223 } 240 }
@@ -231,14 +248,19 @@ namespace OpenSim.Data.MSSQL
231 248
232 UUID oldParentFolderUUID = folders[0].parentFolderID; 249 UUID oldParentFolderUUID = folders[0].parentFolderID;
233 250
234 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 251 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
235 { 252 {
236 using (SqlCommand cmd = new SqlCommand()) 253 using (NpgsqlCommand cmd = new NpgsqlCommand())
237 { 254 {
255 UUID foldID = UUID.Zero;
256 UUID.TryParse(id, out foldID);
257
258 UUID newPar = UUID.Zero;
259 UUID.TryParse(newParentFolderID, out newPar);
238 260
239 cmd.CommandText = String.Format("update {0} set parentFolderID = @ParentFolderID where folderID = @folderID", m_Realm); 261 cmd.CommandText = String.Format(@"update {0} set ""parentFolderID"" = :ParentFolderID where ""folderID"" = :folderID", m_Realm);
240 cmd.Parameters.Add(m_database.CreateParameter("@ParentFolderID", newParentFolderID)); 262 cmd.Parameters.Add(m_database.CreateParameter("ParentFolderID", newPar));
241 cmd.Parameters.Add(m_database.CreateParameter("@folderID", id)); 263 cmd.Parameters.Add(m_database.CreateParameter("folderID", foldID));
242 cmd.Connection = conn; 264 cmd.Connection = conn;
243 conn.Open(); 265 conn.Open();
244 266
@@ -264,9 +286,9 @@ namespace OpenSim.Data.MSSQL
264 } 286 }
265 } 287 }
266 288
267 public class MSSQLInventoryHandler<T> : MSSQLGenericTableHandler<T> where T: class, new() 289 public class PGSQLInventoryHandler<T> : PGSQLGenericTableHandler<T> where T: class, new()
268 { 290 {
269 public MSSQLInventoryHandler(string c, string t, string m) : base(c, t, m) {} 291 public PGSQLInventoryHandler(string c, string t, string m) : base(c, t, m) {}
270 292
271 protected bool IncrementFolderVersion(UUID folderID) 293 protected bool IncrementFolderVersion(UUID folderID)
272 { 294 {
@@ -275,18 +297,21 @@ namespace OpenSim.Data.MSSQL
275 297
276 protected bool IncrementFolderVersion(string folderID) 298 protected bool IncrementFolderVersion(string folderID)
277 { 299 {
278// m_log.DebugFormat("[MYSQL ITEM HANDLER]: Incrementing version on folder {0}", folderID); 300// m_log.DebugFormat("[PGSQL ITEM HANDLER]: Incrementing version on folder {0}", folderID);
279// Util.PrintCallStack(); 301// Util.PrintCallStack();
280 302
281 string sql = "update inventoryfolders set version=version+1 where folderID = ?folderID"; 303 string sql = @"update inventoryfolders set version=version+1 where ""folderID"" = :folderID";
282 304
283 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 305 using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
284 { 306 {
285 using (SqlCommand cmd = new SqlCommand(sql, conn)) 307 using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
286 { 308 {
309 UUID foldID = UUID.Zero;
310 UUID.TryParse(folderID, out foldID);
311
287 conn.Open(); 312 conn.Open();
288 313
289 cmd.Parameters.AddWithValue("@folderID", folderID); 314 cmd.Parameters.Add( m_database.CreateParameter("folderID", foldID) );
290 315
291 try 316 try
292 { 317 {
@@ -302,4 +327,4 @@ namespace OpenSim.Data.MSSQL
302 return true; 327 return true;
303 } 328 }
304 } 329 }
305} \ No newline at end of file 330}
diff --git a/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs b/OpenSim/Data/PGSQL/Properties/AssemblyInfo.cs
index 1a67e70..1e88b2c 100644
--- a/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs
+++ b/OpenSim/Data/PGSQL/Properties/AssemblyInfo.cs
@@ -32,11 +32,11 @@ using System.Runtime.InteropServices;
32// set of attributes. Change these attribute values to modify the information 32// set of attributes. Change these attribute values to modify the information
33// associated with an assembly. 33// associated with an assembly.
34 34
35[assembly : AssemblyTitle("OpenSim.Data.MSSQL")] 35[assembly : AssemblyTitle("OpenSim.Data.PGSQL")]
36[assembly : AssemblyDescription("")] 36[assembly : AssemblyDescription("")]
37[assembly : AssemblyConfiguration("")] 37[assembly : AssemblyConfiguration("")]
38[assembly : AssemblyCompany("http://opensimulator.org")] 38[assembly : AssemblyCompany("http://opensimulator.org")]
39[assembly : AssemblyProduct("OpenSim.Data.MSSQL")] 39[assembly : AssemblyProduct("OpenSim.Data.PGSQL")]
40[assembly : AssemblyCopyright("Copyright (c) OpenSimulator.org Developers 2007-2009")] 40[assembly : AssemblyCopyright("Copyright (c) OpenSimulator.org Developers 2007-2009")]
41[assembly : AssemblyTrademark("")] 41[assembly : AssemblyTrademark("")]
42[assembly : AssemblyCulture("")] 42[assembly : AssemblyCulture("")]
@@ -61,5 +61,5 @@ using System.Runtime.InteropServices;
61// You can specify all the values or you can default the Revision and Build Numbers 61// You can specify all the values or you can default the Revision and Build Numbers
62// by using the '*' as shown below: 62// by using the '*' as shown below:
63 63
64[assembly : AssemblyVersion("0.7.5.*")] 64[assembly : AssemblyVersion("0.8.2.*")]
65[assembly : AssemblyFileVersion("0.6.5.0")] 65