From 8c901e93474af5fcd17a7f37acd711622c5286e0 Mon Sep 17 00:00:00 2001
From: lbsa71
Date: Fri, 28 Mar 2008 14:54:20 +0000
Subject: * Introduced common abstract AssetDataBase implementing
IAssetProvider * changed the semantics of SQLiteBase to SQLiteUtils * Added
abstract placeholder files for the other db providers
---
OpenSim/Framework/Data.MSSQL/MSSQLAssetData.cs | 18 +-
OpenSim/Framework/Data.MySQL/MySQLAssetData.cs | 18 +-
OpenSim/Framework/Data.SQLite/SQLiteAssetData.cs | 36 +--
OpenSim/Framework/Data.SQLite/SQLiteBase.cs | 269 ---------------------
.../Framework/Data.SQLite/SQLiteInventoryStore.cs | 2 +-
OpenSim/Framework/Data.SQLite/SQLiteManager.cs | 2 +-
OpenSim/Framework/Data.SQLite/SQLiteUserData.cs | 2 +-
OpenSim/Framework/Data.SQLite/SQLiteUtils.cs | 269 +++++++++++++++++++++
OpenSim/Framework/Data/AssetDataBase.cs | 20 ++
OpenSim/Framework/Data/DataStoreBase.cs | 10 +
OpenSim/Framework/Data/GridDataBase.cs | 10 +
OpenSim/Framework/Data/InventoryDataBase.cs | 10 +
OpenSim/Framework/Data/UserDataBase.cs | 10 +
13 files changed, 368 insertions(+), 308 deletions(-)
delete mode 100644 OpenSim/Framework/Data.SQLite/SQLiteBase.cs
create mode 100644 OpenSim/Framework/Data.SQLite/SQLiteUtils.cs
create mode 100644 OpenSim/Framework/Data/AssetDataBase.cs
create mode 100644 OpenSim/Framework/Data/DataStoreBase.cs
create mode 100644 OpenSim/Framework/Data/GridDataBase.cs
create mode 100644 OpenSim/Framework/Data/InventoryDataBase.cs
create mode 100644 OpenSim/Framework/Data/UserDataBase.cs
(limited to 'OpenSim/Framework')
diff --git a/OpenSim/Framework/Data.MSSQL/MSSQLAssetData.cs b/OpenSim/Framework/Data.MSSQL/MSSQLAssetData.cs
index b8d57a7..059bb5e 100644
--- a/OpenSim/Framework/Data.MSSQL/MSSQLAssetData.cs
+++ b/OpenSim/Framework/Data.MSSQL/MSSQLAssetData.cs
@@ -34,7 +34,7 @@ using OpenSim.Framework.Console;
namespace OpenSim.Framework.Data.MSSQL
{
- internal class MSSQLAssetData : IAssetProvider
+ internal class MSSQLAssetData : AssetDataBase
{
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
@@ -66,7 +66,7 @@ namespace OpenSim.Framework.Data.MSSQL
UpgradeAssetsTable(tableList["assets"]);
}
- public AssetBase FetchAsset(LLUUID assetID)
+ override public AssetBase FetchAsset(LLUUID assetID)
{
AssetBase asset = null;
@@ -83,7 +83,7 @@ namespace OpenSim.Framework.Data.MSSQL
return asset;
}
- public void CreateAsset(AssetBase asset)
+ override public void CreateAsset(AssetBase asset)
{
if (ExistsAsset((LLUUID) asset.FullID))
{
@@ -129,7 +129,7 @@ namespace OpenSim.Framework.Data.MSSQL
}
- public void UpdateAsset(AssetBase asset)
+ override public void UpdateAsset(AssetBase asset)
{
SqlCommand command = new SqlCommand("UPDATE assets set id = @id, " +
"name = @name, " +
@@ -169,7 +169,7 @@ namespace OpenSim.Framework.Data.MSSQL
}
}
- public bool ExistsAsset(LLUUID uuid)
+ override public bool ExistsAsset(LLUUID uuid)
{
if (FetchAsset(uuid) != null)
{
@@ -181,7 +181,7 @@ namespace OpenSim.Framework.Data.MSSQL
///
/// All writes are immediately commited to the database, so this is a no-op
///
- public void CommitAssets()
+ override public void CommitAssets()
{
}
@@ -189,7 +189,7 @@ namespace OpenSim.Framework.Data.MSSQL
#region IPlugin Members
- public void Initialise()
+ override public void Initialise()
{
IniFile GridDataMySqlFile = new IniFile("mssql_connection.ini");
string settingDataSource = GridDataMySqlFile.ParseFileReadValue("data_source");
@@ -205,13 +205,13 @@ namespace OpenSim.Framework.Data.MSSQL
TestTables();
}
- public string Version
+ override public string Version
{
// get { return database.getVersion(); }
get { return database.getVersion(); }
}
- public string Name
+ override public string Name
{
get { return "MSSQL Asset storage engine"; }
}
diff --git a/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs b/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs
index b439582..79994ae 100644
--- a/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs
+++ b/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs
@@ -34,7 +34,7 @@ using OpenSim.Framework.Console;
namespace OpenSim.Framework.Data.MySQL
{
- internal class MySQLAssetData : IAssetProvider
+ internal class MySQLAssetData : AssetDataBase, IPlugin
{
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
@@ -66,7 +66,7 @@ namespace OpenSim.Framework.Data.MySQL
UpgradeAssetsTable(tableList["assets"]);
}
- public AssetBase FetchAsset(LLUUID assetID)
+ override public AssetBase FetchAsset(LLUUID assetID)
{
AssetBase asset = null;
lock (_dbConnection)
@@ -108,7 +108,7 @@ namespace OpenSim.Framework.Data.MySQL
return asset;
}
- public void CreateAsset(AssetBase asset)
+ override public void CreateAsset(AssetBase asset)
{
lock (_dbConnection)
{
@@ -147,12 +147,12 @@ namespace OpenSim.Framework.Data.MySQL
}
}
- public void UpdateAsset(AssetBase asset)
+ override public void UpdateAsset(AssetBase asset)
{
CreateAsset(asset);
}
- public bool ExistsAsset(LLUUID uuid)
+ override public bool ExistsAsset(LLUUID uuid)
{
throw new Exception("The method or operation is not implemented.");
}
@@ -160,7 +160,7 @@ namespace OpenSim.Framework.Data.MySQL
///
/// All writes are immediately commited to the database, so this is a no-op
///
- public void CommitAssets()
+ override public void CommitAssets()
{
}
@@ -168,7 +168,7 @@ namespace OpenSim.Framework.Data.MySQL
#region IPlugin Members
- public void Initialise()
+ override public void Initialise()
{
IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini");
string hostname = GridDataMySqlFile.ParseFileReadValue("hostname");
@@ -183,12 +183,12 @@ namespace OpenSim.Framework.Data.MySQL
TestTables();
}
- public string Version
+ override public string Version
{
get { return _dbConnection.getVersion(); }
}
- public string Name
+ override public string Name
{
get { return "MySQL Asset storage engine"; }
}
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteAssetData.cs b/OpenSim/Framework/Data.SQLite/SQLiteAssetData.cs
index 0703e54..afa73b1 100644
--- a/OpenSim/Framework/Data.SQLite/SQLiteAssetData.cs
+++ b/OpenSim/Framework/Data.SQLite/SQLiteAssetData.cs
@@ -37,7 +37,7 @@ namespace OpenSim.Framework.Data.SQLite
///
/// A User storage interface for the DB4o database system
///
- public class SQLiteAssetData : SQLiteBase, IAssetProvider
+ public class SQLiteAssetData : AssetDataBase
{
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
@@ -63,7 +63,7 @@ namespace OpenSim.Framework.Data.SQLite
return;
}
- public AssetBase FetchAsset(LLUUID uuid)
+ override public AssetBase FetchAsset(LLUUID uuid)
{
using (SqliteCommand cmd = new SqliteCommand(SelectAssetSQL, m_conn))
@@ -86,7 +86,7 @@ namespace OpenSim.Framework.Data.SQLite
}
}
- public void CreateAsset(AssetBase asset)
+ override public void CreateAsset(AssetBase asset)
{
m_log.Info("[SQLITE]: Creating Asset " + Util.ToRawUuidString(asset.FullID));
if (ExistsAsset(asset.FullID))
@@ -111,7 +111,7 @@ namespace OpenSim.Framework.Data.SQLite
}
}
- public void UpdateAsset(AssetBase asset)
+ override public void UpdateAsset(AssetBase asset)
{
LogAssetLoad(asset);
@@ -144,7 +144,7 @@ namespace OpenSim.Framework.Data.SQLite
asset.InvType, temporary, local, assetLength));
}
- public bool ExistsAsset(LLUUID uuid)
+ override public bool ExistsAsset(LLUUID uuid)
{
using (SqliteCommand cmd = new SqliteCommand(SelectAssetSQL, m_conn))
{
@@ -175,7 +175,7 @@ namespace OpenSim.Framework.Data.SQLite
}
}
- public void CommitAssets() // force a sync to the database
+ override public void CommitAssets() // force a sync to the database
{
m_log.Info("[SQLITE]: Attempting commit");
// lock (ds)
@@ -197,14 +197,14 @@ namespace OpenSim.Framework.Data.SQLite
{
DataTable assets = new DataTable("assets");
- createCol(assets, "UUID", typeof (String));
- createCol(assets, "Name", typeof (String));
- createCol(assets, "Description", typeof (String));
- createCol(assets, "Type", typeof (Int32));
- createCol(assets, "InvType", typeof (Int32));
- createCol(assets, "Local", typeof (Boolean));
- createCol(assets, "Temporary", typeof (Boolean));
- createCol(assets, "Data", typeof (Byte[]));
+ SQLiteUtil.createCol(assets, "UUID", typeof (String));
+ SQLiteUtil.createCol(assets, "Name", typeof (String));
+ SQLiteUtil.createCol(assets, "Description", typeof (String));
+ SQLiteUtil.createCol(assets, "Type", typeof (Int32));
+ SQLiteUtil.createCol(assets, "InvType", typeof (Int32));
+ SQLiteUtil.createCol(assets, "Local", typeof (Boolean));
+ SQLiteUtil.createCol(assets, "Temporary", typeof (Boolean));
+ SQLiteUtil.createCol(assets, "Data", typeof (Byte[]));
// Add in contraints
assets.PrimaryKey = new DataColumn[] {assets.Columns["UUID"]};
return assets;
@@ -248,7 +248,7 @@ namespace OpenSim.Framework.Data.SQLite
private void InitDB(SqliteConnection conn)
{
- string createAssets = defineTable(createAssetsTable());
+ string createAssets = SQLiteUtil.defineTable(createAssetsTable());
SqliteCommand pcmd = new SqliteCommand(createAssets, conn);
pcmd.ExecuteNonQuery();
}
@@ -272,7 +272,7 @@ namespace OpenSim.Framework.Data.SQLite
#region IPlugin interface
- public string Version
+ override public string Version
{
get
{
@@ -286,12 +286,12 @@ namespace OpenSim.Framework.Data.SQLite
}
}
- public void Initialise()
+ override public void Initialise()
{
Initialise("AssetStorage.db", "");
}
- public string Name
+ override public string Name
{
get { return "SQLite Asset storage engine"; }
}
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteBase.cs b/OpenSim/Framework/Data.SQLite/SQLiteBase.cs
deleted file mode 100644
index 8997faa..0000000
--- a/OpenSim/Framework/Data.SQLite/SQLiteBase.cs
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * 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.Data;
-using Mono.Data.SqliteClient;
-
-namespace OpenSim.Framework.Data.SQLite
-{
- ///
- /// A base class for methods needed by all SQLite database classes
- ///
- public class SQLiteBase
- {
- /***********************************************************************
- *
- * Database Definition Functions
- *
- * This should be db agnostic as we define them in ADO.NET terms
- *
- **********************************************************************/
-
- protected static void createCol(DataTable dt, string name, Type type)
- {
- DataColumn col = new DataColumn(name, type);
- dt.Columns.Add(col);
- }
-
- /***********************************************************************
- *
- * SQL Statement Creation Functions
- *
- * These functions create SQL statements for update, insert, and create.
- * They can probably be factored later to have a db independant
- * portion and a db specific portion
- *
- **********************************************************************/
-
- protected static SqliteCommand createInsertCommand(string table, DataTable dt)
- {
- /**
- * This is subtle enough to deserve some commentary.
- * Instead of doing *lots* and *lots of hardcoded strings
- * for database definitions we'll use the fact that
- * realistically all insert statements look like "insert
- * into A(b, c) values(:b, :c) on the parameterized query
- * front. If we just have a list of b, c, etc... we can
- * generate these strings instead of typing them out.
- */
- string[] cols = new string[dt.Columns.Count];
- for (int i = 0; i < dt.Columns.Count; i++)
- {
- DataColumn col = dt.Columns[i];
- cols[i] = col.ColumnName;
- }
-
- string sql = "insert into " + table + "(";
- sql += String.Join(", ", cols);
- // important, the first ':' needs to be here, the rest get added in the join
- sql += ") values (:";
- sql += String.Join(", :", cols);
- sql += ")";
- SqliteCommand cmd = new SqliteCommand(sql);
-
- // this provides the binding for all our parameters, so
- // much less code than it used to be
- foreach (DataColumn col in dt.Columns)
- {
- cmd.Parameters.Add(createSqliteParameter(col.ColumnName, col.DataType));
- }
- return cmd;
- }
-
- protected static SqliteCommand createUpdateCommand(string table, string pk, DataTable dt)
- {
- string sql = "update " + table + " set ";
- string subsql = String.Empty;
- foreach (DataColumn col in dt.Columns)
- {
- if (subsql.Length > 0)
- {
- // a map function would rock so much here
- subsql += ", ";
- }
- subsql += col.ColumnName + "= :" + col.ColumnName;
- }
- sql += subsql;
- sql += " where " + pk;
- SqliteCommand cmd = new SqliteCommand(sql);
-
- // this provides the binding for all our parameters, so
- // much less code than it used to be
-
- foreach (DataColumn col in dt.Columns)
- {
- cmd.Parameters.Add(createSqliteParameter(col.ColumnName, col.DataType));
- }
- return cmd;
- }
-
-
- protected static string defineTable(DataTable dt)
- {
- string sql = "create table " + dt.TableName + "(";
- string subsql = String.Empty;
- foreach (DataColumn col in dt.Columns)
- {
- if (subsql.Length > 0)
- {
- // a map function would rock so much here
- subsql += ",\n";
- }
- subsql += col.ColumnName + " " + sqliteType(col.DataType);
- if (dt.PrimaryKey.Length > 0)
- {
- if (col == dt.PrimaryKey[0])
- {
- subsql += " primary key";
- }
- }
- }
- sql += subsql;
- sql += ")";
- return sql;
- }
-
- /***********************************************************************
- *
- * Database Binding functions
- *
- * These will be db specific due to typing, and minor differences
- * in databases.
- *
- **********************************************************************/
-
- ///
- /// This is a convenience function that collapses 5 repetitive
- /// lines for defining SqliteParameters to 2 parameters:
- /// column name and database type.
- ///
- /// It assumes certain conventions like :param as the param
- /// name to replace in parametrized queries, and that source
- /// version is always current version, both of which are fine
- /// for us.
- ///
- ///a built sqlite parameter
- protected static SqliteParameter createSqliteParameter(string name, Type type)
- {
- SqliteParameter param = new SqliteParameter();
- param.ParameterName = ":" + name;
- param.DbType = dbtypeFromType(type);
- param.SourceColumn = name;
- param.SourceVersion = DataRowVersion.Current;
- return param;
- }
-
- /***********************************************************************
- *
- * Type conversion functions
- *
- **********************************************************************/
-
- protected static DbType dbtypeFromType(Type type)
- {
- if (type == typeof (String))
- {
- return DbType.String;
- }
- else if (type == typeof (Int32))
- {
- return DbType.Int32;
- }
- else if (type == typeof (UInt32))
- {
- return DbType.UInt32;
- }
- else if (type == typeof (Int64))
- {
- return DbType.Int64;
- }
- else if (type == typeof (UInt64))
- {
- return DbType.UInt64;
- }
- else if (type == typeof (Double))
- {
- return DbType.Double;
- }
- else if (type == typeof (Boolean))
- {
- return DbType.Boolean;
- }
- else if (type == typeof (Byte[]))
- {
- return DbType.Binary;
- }
- else
- {
- return DbType.String;
- }
- }
-
- // this is something we'll need to implement for each db
- // slightly differently.
- protected static string sqliteType(Type type)
- {
- if (type == typeof (String))
- {
- return "varchar(255)";
- }
- else if (type == typeof (Int32))
- {
- return "integer";
- }
- else if (type == typeof (UInt32))
- {
- return "integer";
- }
- else if (type == typeof (Int64))
- {
- return "varchar(255)";
- }
- else if (type == typeof (UInt64))
- {
- return "varchar(255)";
- }
- else if (type == typeof (Double))
- {
- return "float";
- }
- else if (type == typeof (Boolean))
- {
- return "integer";
- }
- else if (type == typeof (Byte[]))
- {
- return "blob";
- }
- else
- {
- return "string";
- }
- }
- }
-}
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs b/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs
index 97fdc96..14a3e1a 100644
--- a/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs
+++ b/OpenSim/Framework/Data.SQLite/SQLiteInventoryStore.cs
@@ -35,7 +35,7 @@ using OpenSim.Framework.Console;
namespace OpenSim.Framework.Data.SQLite
{
- public class SQLiteInventoryStore : SQLiteBase, IInventoryData
+ public class SQLiteInventoryStore : SQLiteUtil, IInventoryData
{
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteManager.cs b/OpenSim/Framework/Data.SQLite/SQLiteManager.cs
index bec0cd8..b383b0d 100644
--- a/OpenSim/Framework/Data.SQLite/SQLiteManager.cs
+++ b/OpenSim/Framework/Data.SQLite/SQLiteManager.cs
@@ -35,7 +35,7 @@ using OpenSim.Framework.Console;
namespace OpenSim.Framework.Data.SQLite
{
- internal class SQLiteManager : SQLiteBase
+ internal class SQLiteManager : SQLiteUtil
{
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteUserData.cs b/OpenSim/Framework/Data.SQLite/SQLiteUserData.cs
index 0b2df9d..4a582ac 100644
--- a/OpenSim/Framework/Data.SQLite/SQLiteUserData.cs
+++ b/OpenSim/Framework/Data.SQLite/SQLiteUserData.cs
@@ -37,7 +37,7 @@ namespace OpenSim.Framework.Data.SQLite
///
/// A User storage interface for the SQLite database system
///
- public class SQLiteUserData : SQLiteBase, IUserData
+ public class SQLiteUserData : SQLiteUtil, IUserData
{
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteUtils.cs b/OpenSim/Framework/Data.SQLite/SQLiteUtils.cs
new file mode 100644
index 0000000..1334e53
--- /dev/null
+++ b/OpenSim/Framework/Data.SQLite/SQLiteUtils.cs
@@ -0,0 +1,269 @@
+/*
+ * 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.Data;
+using Mono.Data.SqliteClient;
+
+namespace OpenSim.Framework.Data.SQLite
+{
+ ///
+ /// A base class for methods needed by all SQLite database classes
+ ///
+ public class SQLiteUtil
+ {
+ /***********************************************************************
+ *
+ * Database Definition Helper Functions
+ *
+ * This should be db agnostic as we define them in ADO.NET terms
+ *
+ **********************************************************************/
+
+ public static void createCol(DataTable dt, string name, Type type)
+ {
+ DataColumn col = new DataColumn(name, type);
+ dt.Columns.Add(col);
+ }
+
+ /***********************************************************************
+ *
+ * SQL Statement Creation Functions
+ *
+ * These functions create SQL statements for update, insert, and create.
+ * They can probably be factored later to have a db independant
+ * portion and a db specific portion
+ *
+ **********************************************************************/
+
+ public static SqliteCommand createInsertCommand(string table, DataTable dt)
+ {
+ /**
+ * This is subtle enough to deserve some commentary.
+ * Instead of doing *lots* and *lots of hardcoded strings
+ * for database definitions we'll use the fact that
+ * realistically all insert statements look like "insert
+ * into A(b, c) values(:b, :c) on the parameterized query
+ * front. If we just have a list of b, c, etc... we can
+ * generate these strings instead of typing them out.
+ */
+ string[] cols = new string[dt.Columns.Count];
+ for (int i = 0; i < dt.Columns.Count; i++)
+ {
+ DataColumn col = dt.Columns[i];
+ cols[i] = col.ColumnName;
+ }
+
+ string sql = "insert into " + table + "(";
+ sql += String.Join(", ", cols);
+ // important, the first ':' needs to be here, the rest get added in the join
+ sql += ") values (:";
+ sql += String.Join(", :", cols);
+ sql += ")";
+ SqliteCommand cmd = new SqliteCommand(sql);
+
+ // this provides the binding for all our parameters, so
+ // much less code than it used to be
+ foreach (DataColumn col in dt.Columns)
+ {
+ cmd.Parameters.Add(createSqliteParameter(col.ColumnName, col.DataType));
+ }
+ return cmd;
+ }
+
+ public static SqliteCommand createUpdateCommand(string table, string pk, DataTable dt)
+ {
+ string sql = "update " + table + " set ";
+ string subsql = String.Empty;
+ foreach (DataColumn col in dt.Columns)
+ {
+ if (subsql.Length > 0)
+ {
+ // a map function would rock so much here
+ subsql += ", ";
+ }
+ subsql += col.ColumnName + "= :" + col.ColumnName;
+ }
+ sql += subsql;
+ sql += " where " + pk;
+ SqliteCommand cmd = new SqliteCommand(sql);
+
+ // this provides the binding for all our parameters, so
+ // much less code than it used to be
+
+ foreach (DataColumn col in dt.Columns)
+ {
+ cmd.Parameters.Add(createSqliteParameter(col.ColumnName, col.DataType));
+ }
+ return cmd;
+ }
+
+
+ public static string defineTable(DataTable dt)
+ {
+ string sql = "create table " + dt.TableName + "(";
+ string subsql = String.Empty;
+ foreach (DataColumn col in dt.Columns)
+ {
+ if (subsql.Length > 0)
+ {
+ // a map function would rock so much here
+ subsql += ",\n";
+ }
+ subsql += col.ColumnName + " " + sqliteType(col.DataType);
+ if (dt.PrimaryKey.Length > 0)
+ {
+ if (col == dt.PrimaryKey[0])
+ {
+ subsql += " primary key";
+ }
+ }
+ }
+ sql += subsql;
+ sql += ")";
+ return sql;
+ }
+
+ /***********************************************************************
+ *
+ * Database Binding functions
+ *
+ * These will be db specific due to typing, and minor differences
+ * in databases.
+ *
+ **********************************************************************/
+
+ ///
+ /// This is a convenience function that collapses 5 repetitive
+ /// lines for defining SqliteParameters to 2 parameters:
+ /// column name and database type.
+ ///
+ /// It assumes certain conventions like :param as the param
+ /// name to replace in parametrized queries, and that source
+ /// version is always current version, both of which are fine
+ /// for us.
+ ///
+ ///a built sqlite parameter
+ public static SqliteParameter createSqliteParameter(string name, Type type)
+ {
+ SqliteParameter param = new SqliteParameter();
+ param.ParameterName = ":" + name;
+ param.DbType = dbtypeFromType(type);
+ param.SourceColumn = name;
+ param.SourceVersion = DataRowVersion.Current;
+ return param;
+ }
+
+ /***********************************************************************
+ *
+ * Type conversion functions
+ *
+ **********************************************************************/
+
+ public static DbType dbtypeFromType(Type type)
+ {
+ if (type == typeof (String))
+ {
+ return DbType.String;
+ }
+ else if (type == typeof (Int32))
+ {
+ return DbType.Int32;
+ }
+ else if (type == typeof (UInt32))
+ {
+ return DbType.UInt32;
+ }
+ else if (type == typeof (Int64))
+ {
+ return DbType.Int64;
+ }
+ else if (type == typeof (UInt64))
+ {
+ return DbType.UInt64;
+ }
+ else if (type == typeof (Double))
+ {
+ return DbType.Double;
+ }
+ else if (type == typeof (Boolean))
+ {
+ return DbType.Boolean;
+ }
+ else if (type == typeof (Byte[]))
+ {
+ return DbType.Binary;
+ }
+ else
+ {
+ return DbType.String;
+ }
+ }
+
+ // this is something we'll need to implement for each db
+ // slightly differently.
+ public static string sqliteType(Type type)
+ {
+ if (type == typeof (String))
+ {
+ return "varchar(255)";
+ }
+ else if (type == typeof (Int32))
+ {
+ return "integer";
+ }
+ else if (type == typeof (UInt32))
+ {
+ return "integer";
+ }
+ else if (type == typeof (Int64))
+ {
+ return "varchar(255)";
+ }
+ else if (type == typeof (UInt64))
+ {
+ return "varchar(255)";
+ }
+ else if (type == typeof (Double))
+ {
+ return "float";
+ }
+ else if (type == typeof (Boolean))
+ {
+ return "integer";
+ }
+ else if (type == typeof (Byte[]))
+ {
+ return "blob";
+ }
+ else
+ {
+ return "string";
+ }
+ }
+ }
+}
diff --git a/OpenSim/Framework/Data/AssetDataBase.cs b/OpenSim/Framework/Data/AssetDataBase.cs
new file mode 100644
index 0000000..2162358
--- /dev/null
+++ b/OpenSim/Framework/Data/AssetDataBase.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+
+namespace OpenSim.Framework.Data
+{
+ public abstract class AssetDataBase : IAssetProvider
+ {
+ public abstract AssetBase FetchAsset(LLUUID uuid);
+ public abstract void CreateAsset(AssetBase asset);
+ public abstract void UpdateAsset(AssetBase asset);
+ public abstract bool ExistsAsset(LLUUID uuid);
+ public abstract void CommitAssets();
+
+ public abstract string Version { get; }
+ public abstract string Name { get; }
+ public abstract void Initialise();
+ }
+}
diff --git a/OpenSim/Framework/Data/DataStoreBase.cs b/OpenSim/Framework/Data/DataStoreBase.cs
new file mode 100644
index 0000000..671d0f0
--- /dev/null
+++ b/OpenSim/Framework/Data/DataStoreBase.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Framework.Data
+{
+ public abstract class DataStoreBase
+ {
+ }
+}
diff --git a/OpenSim/Framework/Data/GridDataBase.cs b/OpenSim/Framework/Data/GridDataBase.cs
new file mode 100644
index 0000000..e7333b4
--- /dev/null
+++ b/OpenSim/Framework/Data/GridDataBase.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Framework.Data
+{
+ public abstract class GridDataBase
+ {
+ }
+}
diff --git a/OpenSim/Framework/Data/InventoryDataBase.cs b/OpenSim/Framework/Data/InventoryDataBase.cs
new file mode 100644
index 0000000..d88acff
--- /dev/null
+++ b/OpenSim/Framework/Data/InventoryDataBase.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Framework.Data
+{
+ public abstract class InventoryDataBase
+ {
+ }
+}
diff --git a/OpenSim/Framework/Data/UserDataBase.cs b/OpenSim/Framework/Data/UserDataBase.cs
new file mode 100644
index 0000000..a704ed4
--- /dev/null
+++ b/OpenSim/Framework/Data/UserDataBase.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Framework.Data
+{
+ public abstract class UserDataBase
+ {
+ }
+}
--
cgit v1.1