2010-02-21 01:52:38 +00:00
/ *
* 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 OpenSimulator 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 ;
using System.Collections.Generic ;
using System.Data ;
using OpenMetaverse ;
using OpenSim.Framework ;
2010-09-23 05:21:08 +00:00
#if CSharpSqlite
using Community.CsharpSqlite.Sqlite ;
# else
using Mono.Data.Sqlite ;
# endif
2010-02-21 01:52:38 +00:00
namespace OpenSim.Data.SQLite
{
public class SQLiteUserAccountData : SQLiteGenericTableHandler < UserAccountData > , IUserAccountData
{
public SQLiteUserAccountData ( string connectionString , string realm )
: base ( connectionString , realm , "UserAccount" )
{
}
public UserAccountData [ ] GetUsers ( UUID scopeID , string query )
{
string [ ] words = query . Split ( new char [ ] { ' ' } ) ;
for ( int i = 0 ; i < words . Length ; i + + )
{
if ( words [ i ] . Length < 3 )
{
if ( i ! = words . Length - 1 )
Array . Copy ( words , i + 1 , words , i , words . Length - i - 1 ) ;
Array . Resize ( ref words , words . Length - 1 ) ;
}
}
if ( words . Length = = 0 )
return new UserAccountData [ 0 ] ;
if ( words . Length > 2 )
return new UserAccountData [ 0 ] ;
SqliteCommand cmd = new SqliteCommand ( ) ;
if ( words . Length = = 1 )
{
2010-08-15 19:08:37 +00:00
cmd . CommandText = String . Format ( "select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{2}%')" ,
2010-02-21 01:52:38 +00:00
m_Realm , scopeID . ToString ( ) , words [ 0 ] ) ;
}
else
{
cmd . CommandText = String . Format ( "select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{3}%')" ,
m_Realm , scopeID . ToString ( ) , words [ 0 ] , words [ 1 ] ) ;
}
return DoQuery ( cmd ) ;
}
}
}