aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Data.MySQL
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework/Data.MySQL')
-rw-r--r--OpenSim/Framework/Data.MySQL/MySQLAssetData.cs112
-rw-r--r--OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs133
-rw-r--r--OpenSim/Framework/Data.MySQL/MySQLManager.cs92
-rw-r--r--OpenSim/Framework/Data.MySQL/Resources/CreateAssetsTable.sql11
4 files changed, 252 insertions, 96 deletions
diff --git a/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs b/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs
new file mode 100644
index 0000000..70e04b6
--- /dev/null
+++ b/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs
@@ -0,0 +1,112 @@
1using System;
2using System.Collections.Generic;
3using MySql.Data.MySqlClient;
4
5using libsecondlife;
6using OpenSim.Framework.Console;
7using OpenSim.Framework.Interfaces;
8using OpenSim.Framework.Types;
9
10namespace OpenSim.Framework.Data.MySQL
11{
12 class MySQLAssetData : IAssetProvider
13 {
14 MySQLManager _dbConnection;
15 #region IAssetProvider Members
16
17 private void UpgradeAssetsTable(string oldVersion)
18 {
19 // null as the version, indicates that the table didn't exist
20 if (oldVersion == null)
21 {
22 MainLog.Instance.Notice("ASSETS", "Creating new database tables");
23 _dbConnection.ExecuteResourceSql("CreateAssetsTable.sql");
24 return;
25 }
26 }
27
28 /// <summary>
29 /// Ensure that the assets related tables exists and are at the latest version
30 /// </summary>
31 private void TestTables()
32 {
33
34 Dictionary<string, string> tableList = new Dictionary<string, string>();
35
36 tableList["assets"] = null;
37 _dbConnection.GetTableVersion(tableList);
38
39 UpgradeAssetsTable(tableList["assets"]);
40
41 }
42
43 public AssetBase FetchAsset(LLUUID uuid)
44 {
45 throw new Exception("The method or operation is not implemented.");
46 }
47
48 public void CreateAsset(AssetBase asset)
49 {
50 MySqlCommand cmd = new MySqlCommand("REPLACE INTO assets(id, name, description, assetType, invType, local, temporary, data)" +
51 "VALUES(?id, ?name, ?description, ?assetType, ?invType, ?local, ?temporary, ?data)", _dbConnection.Connection);
52 MySqlParameter p = cmd.Parameters.Add("?id", MySqlDbType.Binary, 16);
53 p.Value = asset.FullID.GetBytes();
54 cmd.Parameters.AddWithValue("?name", asset.Name);
55 cmd.Parameters.AddWithValue("?description", asset.Description);
56 cmd.Parameters.AddWithValue("?assetType", asset.Type);
57 cmd.Parameters.AddWithValue("?invType", asset.InvType);
58 cmd.Parameters.AddWithValue("?local", asset.Local);
59 cmd.Parameters.AddWithValue("?temporary", asset.Temporary);
60 cmd.Parameters.AddWithValue("?data", asset.Data);
61 cmd.ExecuteNonQuery();
62 }
63
64 public void UpdateAsset(AssetBase asset)
65 {
66 CreateAsset(asset);
67 }
68
69 public bool ExistsAsset(LLUUID uuid)
70 {
71 throw new Exception("The method or operation is not implemented.");
72 }
73
74 /// <summary>
75 /// All writes are immediately commited to the database, so this is a no-op
76 /// </summary>
77 public void CommitAssets()
78 {
79 }
80
81 #endregion
82
83 #region IPlugin Members
84
85 public void Initialise()
86 {
87 IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini");
88 string hostname = GridDataMySqlFile.ParseFileReadValue("hostname");
89 string database = GridDataMySqlFile.ParseFileReadValue("database");
90 string username = GridDataMySqlFile.ParseFileReadValue("username");
91 string password = GridDataMySqlFile.ParseFileReadValue("password");
92 string pooling = GridDataMySqlFile.ParseFileReadValue("pooling");
93 string port = GridDataMySqlFile.ParseFileReadValue("port");
94
95 _dbConnection = new MySQLManager(hostname, database, username, password, pooling, port);
96
97 TestTables();
98 }
99
100 public string Version
101 {
102 get { return _dbConnection.getVersion(); }
103 }
104
105 public string Name
106 {
107 get { return "MySQL Asset storage engine"; }
108 }
109
110 #endregion
111 }
112}
diff --git a/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs
index 804fd5f..6423f28 100644
--- a/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs
+++ b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs
@@ -28,7 +28,6 @@
28using System; 28using System;
29using System.IO; 29using System.IO;
30using System.Data; 30using System.Data;
31using System.Reflection;
32using System.Collections.Generic; 31using System.Collections.Generic;
33using libsecondlife; 32using libsecondlife;
34using OpenSim.Framework.Types; 33using OpenSim.Framework.Types;
@@ -65,41 +64,13 @@ namespace OpenSim.Framework.Data.MySQL
65 } 64 }
66 65
67 #region Test and initialization code 66 #region Test and initialization code
68 /// <summary>
69 /// Extract a named string resource from the embedded resources
70 /// </summary>
71 /// <param name="name">name of embedded resource</param>
72 /// <returns>string contained within the embedded resource</returns>
73 private string getResourceString(string name)
74 {
75 Assembly assem = this.GetType().Assembly;
76 string[] names = assem.GetManifestResourceNames();
77
78 foreach(string s in names)
79 if(s.EndsWith(name))
80 using (Stream resource = assem.GetManifestResourceStream(s))
81 {
82 using (StreamReader resourceReader = new StreamReader(resource))
83 {
84 string resourceString = resourceReader.ReadToEnd();
85 return resourceString;
86 }
87 }
88 throw new Exception(string.Format("Resource '{0}' was not found", name));
89 }
90 67
91 private void ExecuteResourceSql(MySqlConnection conn, string name) 68 private void UpgradeFoldersTable(string oldVersion)
92 {
93 MySqlCommand cmd = new MySqlCommand(getResourceString(name), conn);
94 cmd.ExecuteNonQuery();
95 }
96
97 private void UpgradeFoldersTable(MySqlConnection conn, string oldVersion)
98 { 69 {
99 // null as the version, indicates that the table didn't exist 70 // null as the version, indicates that the table didn't exist
100 if (oldVersion == null) 71 if (oldVersion == null)
101 { 72 {
102 ExecuteResourceSql(conn, "CreateFoldersTable.sql"); 73 database.ExecuteResourceSql("CreateFoldersTable.sql");
103 return; 74 return;
104 } 75 }
105 76
@@ -107,15 +78,15 @@ namespace OpenSim.Framework.Data.MySQL
107 if (oldVersion == "Rev. 2") 78 if (oldVersion == "Rev. 2")
108 return; 79 return;
109 80
110 ExecuteResourceSql(conn, "UpgradeFoldersTableToVersion2.sql"); 81 database.ExecuteResourceSql("UpgradeFoldersTableToVersion2.sql");
111 } 82 }
112 83
113 private void UpgradeItemsTable(MySqlConnection conn, string oldVersion) 84 private void UpgradeItemsTable(string oldVersion)
114 { 85 {
115 // null as the version, indicates that the table didn't exist 86 // null as the version, indicates that the table didn't exist
116 if (oldVersion == null) 87 if (oldVersion == null)
117 { 88 {
118 ExecuteResourceSql(conn, "CreateItemsTable.sql"); 89 database.ExecuteResourceSql("CreateItemsTable.sql");
119 return; 90 return;
120 } 91 }
121 92
@@ -123,7 +94,7 @@ namespace OpenSim.Framework.Data.MySQL
123 if (oldVersion == "Rev. 2") 94 if (oldVersion == "Rev. 2")
124 return; 95 return;
125 96
126 ExecuteResourceSql(conn, "UpgradeItemsTableToVersion2.sql"); 97 database.ExecuteResourceSql("UpgradeItemsTableToVersion2.sql");
127 } 98 }
128 99
129 private void TestTables(MySqlConnection conn) 100 private void TestTables(MySqlConnection conn)
@@ -134,25 +105,10 @@ namespace OpenSim.Framework.Data.MySQL
134 tableList["inventoryfolders"] = null; 105 tableList["inventoryfolders"] = null;
135 tableList["inventoryitems"] = null; 106 tableList["inventoryitems"] = null;
136 107
137 MySqlCommand tablesCmd = new MySqlCommand("SELECT TABLE_NAME, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='opensim'", conn); 108 database.GetTableVersion(tableList);
138 MySqlDataReader tables = tablesCmd.ExecuteReader();
139 while (tables.Read())
140 {
141 try
142 {
143 string tableName = (string)tables["TABLE_NAME"];
144 string comment = (string)tables["TABLE_COMMENT"];
145 tableList[tableName] = comment;
146 }
147 catch (Exception e)
148 {
149 MainLog.Instance.Error(e.ToString());
150 }
151 }
152 tables.Close();
153 109
154 UpgradeFoldersTable(conn, tableList["inventoryfolders"]); 110 UpgradeFoldersTable(tableList["inventoryfolders"]);
155 UpgradeItemsTable(conn, tableList["inventoryitems"]); 111 UpgradeItemsTable(tableList["inventoryitems"]);
156 } 112 }
157 #endregion 113 #endregion
158 114
@@ -179,12 +135,7 @@ namespace OpenSim.Framework.Data.MySQL
179 /// <returns>A string containing the DB provider</returns> 135 /// <returns>A string containing the DB provider</returns>
180 public string getVersion() 136 public string getVersion()
181 { 137 {
182 System.Reflection.Module module = this.GetType().Module; 138 return database.getVersion();
183 string dllName = module.Assembly.ManifestModule.Name;
184 Version dllVersion = module.Assembly.GetName().Version;
185
186
187 return string.Format("{0}.{1}.{2}.{3}", dllVersion.Major, dllVersion.Minor, dllVersion.Build, dllVersion.Revision);
188 } 139 }
189 140
190 /// <summary> 141 /// <summary>
@@ -201,7 +152,7 @@ namespace OpenSim.Framework.Data.MySQL
201 List<InventoryItemBase> items = new List<InventoryItemBase>(); 152 List<InventoryItemBase> items = new List<InventoryItemBase>();
202 153
203 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryitems WHERE parentFolderID = ?uuid", database.Connection); 154 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryitems WHERE parentFolderID = ?uuid", database.Connection);
204 result.Parameters.Add("?uuid", folderID.ToStringHyphenated()); 155 result.Parameters.AddWithValue("?uuid", folderID.ToStringHyphenated());
205 MySqlDataReader reader = result.ExecuteReader(); 156 MySqlDataReader reader = result.ExecuteReader();
206 157
207 while(reader.Read()) 158 while(reader.Read())
@@ -233,8 +184,8 @@ namespace OpenSim.Framework.Data.MySQL
233 lock (database) 184 lock (database)
234 { 185 {
235 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", database.Connection); 186 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", database.Connection);
236 result.Parameters.Add("?uuid", user.ToStringHyphenated()); 187 result.Parameters.AddWithValue("?uuid", user.ToStringHyphenated());
237 result.Parameters.Add("?zero", LLUUID.Zero.ToStringHyphenated()); 188 result.Parameters.AddWithValue("?zero", LLUUID.Zero.ToStringHyphenated());
238 MySqlDataReader reader = result.ExecuteReader(); 189 MySqlDataReader reader = result.ExecuteReader();
239 190
240 List<InventoryFolderBase> items = new List<InventoryFolderBase>(); 191 List<InventoryFolderBase> items = new List<InventoryFolderBase>();
@@ -267,13 +218,9 @@ namespace OpenSim.Framework.Data.MySQL
267 { 218 {
268 lock (database) 219 lock (database)
269 { 220 {
270 Dictionary<string, string> param = new Dictionary<string, string>();
271 param["?uuid"] = user.ToStringHyphenated();
272 param["?zero"] = LLUUID.Zero.ToStringHyphenated();
273
274 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", database.Connection); 221 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", database.Connection);
275 result.Parameters.Add("?uuid", user.ToStringHyphenated()); 222 result.Parameters.AddWithValue("?uuid", user.ToStringHyphenated());
276 result.Parameters.Add("?zero", LLUUID.Zero.ToStringHyphenated()); 223 result.Parameters.AddWithValue("?zero", LLUUID.Zero.ToStringHyphenated());
277 224
278 MySqlDataReader reader = result.ExecuteReader(); 225 MySqlDataReader reader = result.ExecuteReader();
279 226
@@ -308,7 +255,7 @@ namespace OpenSim.Framework.Data.MySQL
308 lock (database) 255 lock (database)
309 { 256 {
310 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = ?uuid", database.Connection); 257 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = ?uuid", database.Connection);
311 result.Parameters.Add("?uuid", parentID.ToStringHyphenated()); 258 result.Parameters.AddWithValue("?uuid", parentID.ToStringHyphenated());
312 MySqlDataReader reader = result.ExecuteReader(); 259 MySqlDataReader reader = result.ExecuteReader();
313 260
314 List<InventoryFolderBase> items = new List<InventoryFolderBase>(); 261 List<InventoryFolderBase> items = new List<InventoryFolderBase>();
@@ -378,7 +325,7 @@ namespace OpenSim.Framework.Data.MySQL
378 Dictionary<string, string> param = new Dictionary<string, string>(); 325 Dictionary<string, string> param = new Dictionary<string, string>();
379 326
380 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryitems WHERE inventoryID = ?uuid", database.Connection); 327 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryitems WHERE inventoryID = ?uuid", database.Connection);
381 result.Parameters.Add("?uuid", itemID.ToStringHyphenated()); 328 result.Parameters.AddWithValue("?uuid", itemID.ToStringHyphenated());
382 MySqlDataReader reader = result.ExecuteReader(); 329 MySqlDataReader reader = result.ExecuteReader();
383 330
384 InventoryItemBase item = null; 331 InventoryItemBase item = null;
@@ -438,7 +385,7 @@ namespace OpenSim.Framework.Data.MySQL
438 lock (database) 385 lock (database)
439 { 386 {
440 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", database.Connection); 387 MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", database.Connection);
441 result.Parameters.Add("?uuid", folderID.ToStringHyphenated()); 388 result.Parameters.AddWithValue("?uuid", folderID.ToStringHyphenated());
442 MySqlDataReader reader = result.ExecuteReader(); 389 MySqlDataReader reader = result.ExecuteReader();
443 390
444 reader.Read(); 391 reader.Read();
@@ -469,19 +416,19 @@ namespace OpenSim.Framework.Data.MySQL
469 try 416 try
470 { 417 {
471 MySqlCommand result = new MySqlCommand(sql, database.Connection); 418 MySqlCommand result = new MySqlCommand(sql, database.Connection);
472 result.Parameters.Add("?inventoryID", item.inventoryID.ToStringHyphenated()); 419 result.Parameters.AddWithValue("?inventoryID", item.inventoryID.ToStringHyphenated());
473 result.Parameters.Add("?assetID", item.assetID.ToStringHyphenated()); 420 result.Parameters.AddWithValue("?assetID", item.assetID.ToStringHyphenated());
474 result.Parameters.Add("?assetType", item.assetType.ToString()); 421 result.Parameters.AddWithValue("?assetType", item.assetType.ToString());
475 result.Parameters.Add("?parentFolderID", item.parentFolderID.ToStringHyphenated()); 422 result.Parameters.AddWithValue("?parentFolderID", item.parentFolderID.ToStringHyphenated());
476 result.Parameters.Add("?avatarID", item.avatarID.ToStringHyphenated()); 423 result.Parameters.AddWithValue("?avatarID", item.avatarID.ToStringHyphenated());
477 result.Parameters.Add("?inventoryName", item.inventoryName); 424 result.Parameters.AddWithValue("?inventoryName", item.inventoryName);
478 result.Parameters.Add("?inventoryDescription", item.inventoryDescription); 425 result.Parameters.AddWithValue("?inventoryDescription", item.inventoryDescription);
479 result.Parameters.Add("?inventoryNextPermissions", item.inventoryNextPermissions.ToString()); 426 result.Parameters.AddWithValue("?inventoryNextPermissions", item.inventoryNextPermissions.ToString());
480 result.Parameters.Add("?inventoryCurrentPermissions", item.inventoryCurrentPermissions.ToString()); 427 result.Parameters.AddWithValue("?inventoryCurrentPermissions", item.inventoryCurrentPermissions.ToString());
481 result.Parameters.Add("?invType", item.invType); 428 result.Parameters.AddWithValue("?invType", item.invType);
482 result.Parameters.Add("?creatorID", item.creatorsID.ToStringHyphenated()); 429 result.Parameters.AddWithValue("?creatorID", item.creatorsID.ToStringHyphenated());
483 result.Parameters.Add("?inventoryBasePermissions", item.inventoryBasePermissions); 430 result.Parameters.AddWithValue("?inventoryBasePermissions", item.inventoryBasePermissions);
484 result.Parameters.Add("?inventoryEveryOnePermissions", item.inventoryEveryOnePermissions); 431 result.Parameters.AddWithValue("?inventoryEveryOnePermissions", item.inventoryEveryOnePermissions);
485 result.ExecuteNonQuery(); 432 result.ExecuteNonQuery();
486 result.Dispose(); 433 result.Dispose();
487 } 434 }
@@ -509,7 +456,7 @@ namespace OpenSim.Framework.Data.MySQL
509 try 456 try
510 { 457 {
511 MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryitems WHERE inventoryID=?uuid", database.Connection); 458 MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryitems WHERE inventoryID=?uuid", database.Connection);
512 cmd.Parameters.Add("?uuid", itemID.ToStringHyphenated()); 459 cmd.Parameters.AddWithValue("?uuid", itemID.ToStringHyphenated());
513 cmd.ExecuteNonQuery(); 460 cmd.ExecuteNonQuery();
514 } 461 }
515 catch (MySqlException e) 462 catch (MySqlException e)
@@ -529,12 +476,12 @@ namespace OpenSim.Framework.Data.MySQL
529 sql += "(?folderID, ?agentID, ?parentFolderID, ?folderName, ?type, ?version)"; 476 sql += "(?folderID, ?agentID, ?parentFolderID, ?folderName, ?type, ?version)";
530 477
531 MySqlCommand cmd = new MySqlCommand(sql, database.Connection); 478 MySqlCommand cmd = new MySqlCommand(sql, database.Connection);
532 cmd.Parameters.Add("?folderID", folder.folderID.ToStringHyphenated()); 479 cmd.Parameters.AddWithValue("?folderID", folder.folderID.ToStringHyphenated());
533 cmd.Parameters.Add("?agentID", folder.agentID.ToStringHyphenated()); 480 cmd.Parameters.AddWithValue("?agentID", folder.agentID.ToStringHyphenated());
534 cmd.Parameters.Add("?parentFolderID", folder.parentID.ToStringHyphenated()); 481 cmd.Parameters.AddWithValue("?parentFolderID", folder.parentID.ToStringHyphenated());
535 cmd.Parameters.Add("?folderName", folder.name); 482 cmd.Parameters.AddWithValue("?folderName", folder.name);
536 cmd.Parameters.Add("?type", (short)folder.type); 483 cmd.Parameters.AddWithValue("?type", (short)folder.type);
537 cmd.Parameters.Add("?version", folder.version); 484 cmd.Parameters.AddWithValue("?version", folder.version);
538 485
539 try 486 try
540 { 487 {
@@ -590,7 +537,7 @@ namespace OpenSim.Framework.Data.MySQL
590 try 537 try
591 { 538 {
592 MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryfolders WHERE folderID=?uuid", database.Connection); 539 MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryfolders WHERE folderID=?uuid", database.Connection);
593 cmd.Parameters.Add("?uuid", folderID.ToStringHyphenated()); 540 cmd.Parameters.AddWithValue("?uuid", folderID.ToStringHyphenated());
594 cmd.ExecuteNonQuery(); 541 cmd.ExecuteNonQuery();
595 } 542 }
596 catch (MySqlException e) 543 catch (MySqlException e)
@@ -605,7 +552,7 @@ namespace OpenSim.Framework.Data.MySQL
605 try 552 try
606 { 553 {
607 MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryitems WHERE parentFolderID=?uuid", database.Connection); 554 MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryitems WHERE parentFolderID=?uuid", database.Connection);
608 cmd.Parameters.Add("?uuid", folderID.ToStringHyphenated()); 555 cmd.Parameters.AddWithValue("?uuid", folderID.ToStringHyphenated());
609 cmd.ExecuteNonQuery(); 556 cmd.ExecuteNonQuery();
610 } 557 }
611 catch (MySqlException e) 558 catch (MySqlException e)
diff --git a/OpenSim/Framework/Data.MySQL/MySQLManager.cs b/OpenSim/Framework/Data.MySQL/MySQLManager.cs
index ea174b2..d3f6976 100644
--- a/OpenSim/Framework/Data.MySQL/MySQLManager.cs
+++ b/OpenSim/Framework/Data.MySQL/MySQLManager.cs
@@ -26,10 +26,14 @@
26* 26*
27*/ 27*/
28using System; 28using System;
29using System.Collections.Generic; 29using System.IO;
30using System.Data; 30using System.Data;
31using System.Reflection;
32using System.Collections.Generic;
31using libsecondlife; 33using libsecondlife;
34
32using MySql.Data.MySqlClient; 35using MySql.Data.MySqlClient;
36
33using OpenSim.Framework.Types; 37using OpenSim.Framework.Types;
34using OpenSim.Framework.Console; 38using OpenSim.Framework.Console;
35 39
@@ -114,6 +118,88 @@ namespace OpenSim.Framework.Data.MySQL
114 } 118 }
115 119
116 /// <summary> 120 /// <summary>
121 /// Returns the version of this DB provider
122 /// </summary>
123 /// <returns>A string containing the DB provider</returns>
124 public string getVersion()
125 {
126 System.Reflection.Module module = this.GetType().Module;
127 string dllName = module.Assembly.ManifestModule.Name;
128 Version dllVersion = module.Assembly.GetName().Version;
129
130
131 return string.Format("{0}.{1}.{2}.{3}", dllVersion.Major, dllVersion.Minor, dllVersion.Build, dllVersion.Revision);
132 }
133
134
135 /// <summary>
136 /// Extract a named string resource from the embedded resources
137 /// </summary>
138 /// <param name="name">name of embedded resource</param>
139 /// <returns>string contained within the embedded resource</returns>
140 private string getResourceString(string name)
141 {
142 Assembly assem = this.GetType().Assembly;
143 string[] names = assem.GetManifestResourceNames();
144
145 foreach (string s in names)
146 if (s.EndsWith(name))
147 using (Stream resource = assem.GetManifestResourceStream(s))
148 {
149 using (StreamReader resourceReader = new StreamReader(resource))
150 {
151 string resourceString = resourceReader.ReadToEnd();
152 return resourceString;
153 }
154 }
155 throw new Exception(string.Format("Resource '{0}' was not found", name));
156 }
157
158 /// <summary>
159 /// Execute a SQL statement stored in a resource, as a string
160 /// </summary>
161 /// <param name="name"></param>
162 public void ExecuteResourceSql(string name)
163 {
164 MySqlCommand cmd = new MySqlCommand(getResourceString(name), dbcon);
165 cmd.ExecuteNonQuery();
166 }
167
168 /// <summary>
169 /// Given a list of tables, return the version of the tables, as seen in the database
170 /// </summary>
171 /// <param name="tableList"></param>
172 public void GetTableVersion(Dictionary<string, string> tableList)
173 {
174 lock (dbcon)
175 {
176 MySqlCommand tablesCmd = new MySqlCommand("SELECT TABLE_NAME, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=?dbname", dbcon);
177 tablesCmd.Parameters.AddWithValue("?dbname", dbcon.Database);
178 using (MySqlDataReader tables = tablesCmd.ExecuteReader())
179 {
180 while (tables.Read())
181 {
182 try
183 {
184 string tableName = (string)tables["TABLE_NAME"];
185 string comment = (string)tables["TABLE_COMMENT"];
186 if(tableList.ContainsKey(tableName))
187 tableList[tableName] = comment;
188 }
189 catch (Exception e)
190 {
191 MainLog.Instance.Error(e.ToString());
192 }
193 }
194 tables.Close();
195 }
196 }
197 }
198
199
200 // at some time this code should be cleaned up
201
202 /// <summary>
117 /// Runs a query with protection against SQL Injection by using parameterised input. 203 /// Runs a query with protection against SQL Injection by using parameterised input.
118 /// </summary> 204 /// </summary>
119 /// <param name="sql">The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y</param> 205 /// <param name="sql">The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y</param>
@@ -127,7 +213,7 @@ namespace OpenSim.Framework.Data.MySQL
127 dbcommand.CommandText = sql; 213 dbcommand.CommandText = sql;
128 foreach (KeyValuePair<string, string> param in parameters) 214 foreach (KeyValuePair<string, string> param in parameters)
129 { 215 {
130 dbcommand.Parameters.Add(param.Key, param.Value); 216 dbcommand.Parameters.AddWithValue(param.Key, param.Value);
131 } 217 }
132 218
133 return (IDbCommand)dbcommand; 219 return (IDbCommand)dbcommand;
@@ -161,7 +247,7 @@ namespace OpenSim.Framework.Data.MySQL
161 dbcommand.CommandText = sql; 247 dbcommand.CommandText = sql;
162 foreach (KeyValuePair<string, string> param in parameters) 248 foreach (KeyValuePair<string, string> param in parameters)
163 { 249 {
164 dbcommand.Parameters.Add(param.Key, param.Value); 250 dbcommand.Parameters.AddWithValue(param.Key, param.Value);
165 } 251 }
166 252
167 return (IDbCommand)dbcommand; 253 return (IDbCommand)dbcommand;
diff --git a/OpenSim/Framework/Data.MySQL/Resources/CreateAssetsTable.sql b/OpenSim/Framework/Data.MySQL/Resources/CreateAssetsTable.sql
new file mode 100644
index 0000000..049a3a2
--- /dev/null
+++ b/OpenSim/Framework/Data.MySQL/Resources/CreateAssetsTable.sql
@@ -0,0 +1,11 @@
1CREATE TABLE `assets` (
2 `id` binary(16) NOT NULL,
3 `name` varchar(64) NOT NULL,
4 `description` varchar(64) NOT NULL,
5 `assetType` smallint(5) unsigned NOT NULL,
6 `invType` smallint(5) unsigned NOT NULL,
7 `local` tinyint(1) NOT NULL,
8 `temporary` tinyint(1) NOT NULL,
9 `data` longblob NOT NULL,
10 PRIMARY KEY (`id`)
11) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Rev. 1'; \ No newline at end of file