Added DBGuids.cs (static func DBGuid.FromDB()
This DBMS-independent function to be used converting UUIDs from whatever format used in the DB (string/binary/Guid). This is mostly needed for MySQL, as in MSSQL they are always UNIQUEIDENTIFIERs and in SQLite always strings (but would look better if we use it there anyway).soprefactor
parent
df49756e7b
commit
a27d49b188
|
@ -0,0 +1,44 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using OpenMetaverse;
|
||||
|
||||
namespace OpenSim.Data
|
||||
{
|
||||
|
||||
public static class DBGuid
|
||||
{
|
||||
/// <summary>This function converts a value returned from the database in one of the
|
||||
/// supported formats into a UUID. This function is not actually DBMS-specific right
|
||||
/// now
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
public static UUID FromDB(object id)
|
||||
{
|
||||
if( (id == null) || (id == DBNull.Value))
|
||||
return UUID.Zero;
|
||||
|
||||
if (id.GetType() == typeof(Guid))
|
||||
return new UUID((Guid)id);
|
||||
|
||||
if (id.GetType() == typeof(byte[]))
|
||||
{
|
||||
if (((byte[])id).Length == 0)
|
||||
return UUID.Zero;
|
||||
else if (((byte[])id).Length == 36)
|
||||
return new UUID((byte[])id, 0);
|
||||
}
|
||||
else if (id.GetType() == typeof(string))
|
||||
{
|
||||
if (((string)id).Length == 0)
|
||||
return UUID.Zero;
|
||||
else if (((string)id).Length == 36)
|
||||
return new UUID((string)id);
|
||||
}
|
||||
|
||||
throw new Exception("Failed to convert db value to UUID: " + id.ToString());
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue