diff options
Diffstat (limited to 'OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs')
-rw-r--r-- | OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs | 51 |
1 files changed, 23 insertions, 28 deletions
diff --git a/OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs b/OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs index 826c6fc..5b24720 100644 --- a/OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs +++ b/OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs | |||
@@ -64,7 +64,7 @@ namespace OpenSim.Data.PGSQL | |||
64 | : base(connectionString) | 64 | : base(connectionString) |
65 | { | 65 | { |
66 | m_Realm = realm; | 66 | m_Realm = realm; |
67 | 67 | ||
68 | m_ConnectionString = connectionString; | 68 | m_ConnectionString = connectionString; |
69 | 69 | ||
70 | if (storeName != String.Empty) | 70 | if (storeName != String.Empty) |
@@ -104,7 +104,7 @@ namespace OpenSim.Data.PGSQL | |||
104 | m_FieldTypes = new Dictionary<string, string>(); | 104 | m_FieldTypes = new Dictionary<string, string>(); |
105 | 105 | ||
106 | string query = string.Format(@"select column_name,data_type | 106 | string query = string.Format(@"select column_name,data_type |
107 | from INFORMATION_SCHEMA.COLUMNS | 107 | from INFORMATION_SCHEMA.COLUMNS |
108 | where table_name = lower('{0}'); | 108 | where table_name = lower('{0}'); |
109 | 109 | ||
110 | ", m_Realm); | 110 | ", m_Realm); |
@@ -145,27 +145,22 @@ namespace OpenSim.Data.PGSQL | |||
145 | private List<string> GetConstraints() | 145 | private List<string> GetConstraints() |
146 | { | 146 | { |
147 | List<string> constraints = new List<string>(); | 147 | List<string> constraints = new List<string>(); |
148 | string query = string.Format(@"SELECT kcu.column_name | 148 | string query = string.Format(@"select |
149 | FROM information_schema.table_constraints tc | 149 | a.attname as column_name |
150 | LEFT JOIN information_schema.key_column_usage kcu | 150 | from |
151 | ON tc.constraint_catalog = kcu.constraint_catalog | 151 | pg_class t, |
152 | AND tc.constraint_schema = kcu.constraint_schema | 152 | pg_class i, |
153 | AND tc.constraint_name = kcu.constraint_name | 153 | pg_index ix, |
154 | 154 | pg_attribute a | |
155 | LEFT JOIN information_schema.referential_constraints rc | 155 | where |
156 | ON tc.constraint_catalog = rc.constraint_catalog | 156 | t.oid = ix.indrelid |
157 | AND tc.constraint_schema = rc.constraint_schema | 157 | and i.oid = ix.indexrelid |
158 | AND tc.constraint_name = rc.constraint_name | 158 | and a.attrelid = t.oid |
159 | 159 | and a.attnum = ANY(ix.indkey) | |
160 | LEFT JOIN information_schema.constraint_column_usage ccu | 160 | and t.relkind = 'r' |
161 | ON rc.unique_constraint_catalog = ccu.constraint_catalog | 161 | and ix.indisunique = true |
162 | AND rc.unique_constraint_schema = ccu.constraint_schema | 162 | and t.relname = lower('{0}') |
163 | AND rc.unique_constraint_name = ccu.constraint_name | 163 | ;", m_Realm); |
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 | 164 | ||
170 | using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString)) | 165 | using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString)) |
171 | using (NpgsqlCommand cmd = new NpgsqlCommand(query, conn)) | 166 | using (NpgsqlCommand cmd = new NpgsqlCommand(query, conn)) |
@@ -237,7 +232,7 @@ namespace OpenSim.Data.PGSQL | |||
237 | if (reader == null) | 232 | if (reader == null) |
238 | return new T[0]; | 233 | return new T[0]; |
239 | 234 | ||
240 | CheckColumnNames(reader); | 235 | CheckColumnNames(reader); |
241 | 236 | ||
242 | while (reader.Read()) | 237 | while (reader.Read()) |
243 | { | 238 | { |
@@ -344,7 +339,7 @@ namespace OpenSim.Data.PGSQL | |||
344 | names.Add(fi.Name); | 339 | names.Add(fi.Name); |
345 | values.Add(":" + fi.Name); | 340 | values.Add(":" + fi.Name); |
346 | // Temporarily return more information about what field is unexpectedly null for | 341 | // Temporarily return more information about what field is unexpectedly null for |
347 | // http://opensimulator.org/mantis/view.php?id=5403. This might be due to a bug in the | 342 | // http://opensimulator.org/mantis/view.php?id=5403. This might be due to a bug in the |
348 | // InventoryTransferModule or we may be required to substitute a DBNull here. | 343 | // InventoryTransferModule or we may be required to substitute a DBNull here. |
349 | if (fi.GetValue(row) == null) | 344 | if (fi.GetValue(row) == null) |
350 | throw new NullReferenceException( | 345 | throw new NullReferenceException( |
@@ -400,11 +395,11 @@ namespace OpenSim.Data.PGSQL | |||
400 | } | 395 | } |
401 | string where = String.Join(" AND ", terms.ToArray()); | 396 | string where = String.Join(" AND ", terms.ToArray()); |
402 | query.AppendFormat(" WHERE {0} ", where); | 397 | query.AppendFormat(" WHERE {0} ", where); |
403 | 398 | ||
404 | } | 399 | } |
405 | cmd.Connection = conn; | 400 | cmd.Connection = conn; |
406 | cmd.CommandText = query.ToString(); | 401 | cmd.CommandText = query.ToString(); |
407 | 402 | ||
408 | conn.Open(); | 403 | conn.Open(); |
409 | if (cmd.ExecuteNonQuery() > 0) | 404 | if (cmd.ExecuteNonQuery() > 0) |
410 | { | 405 | { |
@@ -421,7 +416,7 @@ namespace OpenSim.Data.PGSQL | |||
421 | query.Append("\") values (" + String.Join(",", values.ToArray()) + ")"); | 416 | query.Append("\") values (" + String.Join(",", values.ToArray()) + ")"); |
422 | cmd.Connection = conn; | 417 | cmd.Connection = conn; |
423 | cmd.CommandText = query.ToString(); | 418 | cmd.CommandText = query.ToString(); |
424 | 419 | ||
425 | // m_log.WarnFormat("[PGSQLGenericTable]: Inserting into {0} sql {1}", m_Realm, cmd.CommandText); | 420 | // m_log.WarnFormat("[PGSQLGenericTable]: Inserting into {0} sql {1}", m_Realm, cmd.CommandText); |
426 | 421 | ||
427 | if (conn.State != ConnectionState.Open) | 422 | if (conn.State != ConnectionState.Open) |