From c52c68f314c67c76c7181a6d0828f476290fbd66 Mon Sep 17 00:00:00 2001
From: Sean Dague
Date: Wed, 2 Apr 2008 15:24:31 +0000
Subject: whole lot more moving
---
OpenSim/Data/MSSQL/MSSQLAssetData.cs | 221 +++++++++++++++++++++++++++++++++++
1 file changed, 221 insertions(+)
create mode 100644 OpenSim/Data/MSSQL/MSSQLAssetData.cs
(limited to 'OpenSim/Data/MSSQL/MSSQLAssetData.cs')
diff --git a/OpenSim/Data/MSSQL/MSSQLAssetData.cs b/OpenSim/Data/MSSQL/MSSQLAssetData.cs
new file mode 100644
index 0000000..059bb5e
--- /dev/null
+++ b/OpenSim/Data/MSSQL/MSSQLAssetData.cs
@@ -0,0 +1,221 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSim Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SqlClient;
+using libsecondlife;
+using OpenSim.Framework.Console;
+
+namespace OpenSim.Framework.Data.MSSQL
+{
+ internal class MSSQLAssetData : AssetDataBase
+ {
+ private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+
+ private MSSQLManager database;
+
+ #region IAssetProvider Members
+
+ private void UpgradeAssetsTable(string tableName)
+ {
+ // null as the version, indicates that the table didn't exist
+ if (tableName == null)
+ {
+ m_log.Info("[ASSETS]: Creating new database tables");
+ database.ExecuteResourceSql("CreateAssetsTable.sql");
+ return;
+ }
+ }
+
+ ///
+ /// Ensure that the assets related tables exists and are at the latest version
+ ///
+ private void TestTables()
+ {
+ Dictionary tableList = new Dictionary();
+
+ tableList["assets"] = null;
+ database.GetTableVersion(tableList);
+
+ UpgradeAssetsTable(tableList["assets"]);
+ }
+
+ override public AssetBase FetchAsset(LLUUID assetID)
+ {
+ AssetBase asset = null;
+
+ Dictionary param = new Dictionary();
+ param["id"] = assetID.ToString();
+
+ IDbCommand result = database.Query("SELECT * FROM assets WHERE id = @id", param);
+ IDataReader reader = result.ExecuteReader();
+
+ asset = database.getAssetRow(reader);
+ reader.Close();
+ result.Dispose();
+
+ return asset;
+ }
+
+ override public void CreateAsset(AssetBase asset)
+ {
+ if (ExistsAsset((LLUUID) asset.FullID))
+ {
+ return;
+ }
+
+
+ SqlCommand cmd =
+ new SqlCommand(
+ "INSERT INTO assets ([id], [name], [description], [assetType], [invType], [local], [temporary], [data])" +
+ " VALUES " +
+ "(@id, @name, @description, @assetType, @invType, @local, @temporary, @data)",
+ database.getConnection());
+
+ using (cmd)
+ {
+ //SqlParameter p = cmd.Parameters.Add("id", SqlDbType.NVarChar);
+ //p.Value = asset.FullID.ToString();
+ cmd.Parameters.AddWithValue("id", asset.FullID.ToString());
+ cmd.Parameters.AddWithValue("name", asset.Name);
+ cmd.Parameters.AddWithValue("description", asset.Description);
+ SqlParameter e = cmd.Parameters.Add("assetType", SqlDbType.TinyInt);
+ e.Value = asset.Type;
+ SqlParameter f = cmd.Parameters.Add("invType", SqlDbType.TinyInt);
+ f.Value = asset.InvType;
+ SqlParameter g = cmd.Parameters.Add("local", SqlDbType.TinyInt);
+ g.Value = asset.Local;
+ SqlParameter h = cmd.Parameters.Add("temporary", SqlDbType.TinyInt);
+ h.Value = asset.Temporary;
+ SqlParameter i = cmd.Parameters.Add("data", SqlDbType.Image);
+ i.Value = asset.Data;
+ try
+ {
+ cmd.ExecuteNonQuery();
+ }
+ catch (Exception)
+ {
+ throw;
+ }
+
+ cmd.Dispose();
+ }
+ }
+
+
+ override public void UpdateAsset(AssetBase asset)
+ {
+ SqlCommand command = new SqlCommand("UPDATE assets set id = @id, " +
+ "name = @name, " +
+ "description = @description," +
+ "assetType = @assetType," +
+ "invType = @invType," +
+ "local = @local," +
+ "temporary = @temporary," +
+ "data = @data where " +
+ "id = @keyId;", database.getConnection());
+ SqlParameter param1 = new SqlParameter("@id", asset.FullID.ToString());
+ SqlParameter param2 = new SqlParameter("@name", asset.Name);
+ SqlParameter param3 = new SqlParameter("@description", asset.Description);
+ SqlParameter param4 = new SqlParameter("@assetType", asset.Type);
+ SqlParameter param5 = new SqlParameter("@invType", asset.InvType);
+ SqlParameter param6 = new SqlParameter("@local", asset.Local);
+ SqlParameter param7 = new SqlParameter("@temporary", asset.Temporary);
+ SqlParameter param8 = new SqlParameter("@data", asset.Data);
+ SqlParameter param9 = new SqlParameter("@keyId", asset.FullID.ToString());
+ command.Parameters.Add(param1);
+ command.Parameters.Add(param2);
+ command.Parameters.Add(param3);
+ command.Parameters.Add(param4);
+ command.Parameters.Add(param5);
+ command.Parameters.Add(param6);
+ command.Parameters.Add(param7);
+ command.Parameters.Add(param8);
+ command.Parameters.Add(param9);
+
+ try
+ {
+ command.ExecuteNonQuery();
+ }
+ catch (Exception e)
+ {
+ m_log.Error(e.ToString());
+ }
+ }
+
+ override public bool ExistsAsset(LLUUID uuid)
+ {
+ if (FetchAsset(uuid) != null)
+ {
+ return true;
+ }
+ return false;
+ }
+
+ ///
+ /// All writes are immediately commited to the database, so this is a no-op
+ ///
+ override public void CommitAssets()
+ {
+ }
+
+ #endregion
+
+ #region IPlugin Members
+
+ override public void Initialise()
+ {
+ IniFile GridDataMySqlFile = new IniFile("mssql_connection.ini");
+ string settingDataSource = GridDataMySqlFile.ParseFileReadValue("data_source");
+ string settingInitialCatalog = GridDataMySqlFile.ParseFileReadValue("initial_catalog");
+ string settingPersistSecurityInfo = GridDataMySqlFile.ParseFileReadValue("persist_security_info");
+ string settingUserId = GridDataMySqlFile.ParseFileReadValue("user_id");
+ string settingPassword = GridDataMySqlFile.ParseFileReadValue("password");
+
+ database =
+ new MSSQLManager(settingDataSource, settingInitialCatalog, settingPersistSecurityInfo, settingUserId,
+ settingPassword);
+
+ TestTables();
+ }
+
+ override public string Version
+ {
+// get { return database.getVersion(); }
+ get { return database.getVersion(); }
+ }
+
+ override public string Name
+ {
+ get { return "MSSQL Asset storage engine"; }
+ }
+
+ #endregion
+ }
+}
--
cgit v1.1