Update PGSQL groups handler to accept search queries from the viewer

Update PGSQL groups handler to accept search queries from the viewer.
Fixed malformed query strings.

Signed-off-by: Oren Hurvitz <orenh@kitely.com>
0.8.2-post-fixes
Geir Nøklebye 2015-07-25 20:35:25 +02:00 committed by Oren Hurvitz
parent 965f94e30f
commit a7fccbcf6f
3 changed files with 26 additions and 17 deletions

26
OpenSim/Data/PGSQL/PGSQLGroupsData.cs Normal file → Executable file
View File

@ -31,12 +31,13 @@ using System.Collections.Generic;
using System.Reflection; using System.Reflection;
using OpenSim.Framework; using OpenSim.Framework;
using OpenMetaverse; using OpenMetaverse;
using log4net;
using Npgsql; using Npgsql;
namespace OpenSim.Data.PGSQL namespace OpenSim.Data.PGSQL
{ {
public class PGSQLGroupsData : IGroupsData public class PGSQLGroupsData : IGroupsData
{ {
private PGSqlGroupsGroupsHandler m_Groups; private PGSqlGroupsGroupsHandler m_Groups;
private PGSqlGroupsMembershipHandler m_Membership; private PGSqlGroupsMembershipHandler m_Membership;
private PGSqlGroupsRolesHandler m_Roles; private PGSqlGroupsRolesHandler m_Roles;
@ -82,14 +83,17 @@ namespace OpenSim.Data.PGSQL
public GroupData[] RetrieveGroups(string pattern) public GroupData[] RetrieveGroups(string pattern)
{ {
if (string.IsNullOrEmpty(pattern)) // True for where clause if (string.IsNullOrEmpty(pattern)) // True for where clause
{ {
pattern = " true ORDER BY lower(\"Name\") LIMIT 100"; pattern = " 1 ORDER BY lower(\"Name\") LIMIT 100";
return m_Groups.Get(pattern); return m_Groups.Get(pattern);
} }
else else
{ {
pattern = " lower(\"Name\") LIKE lower('%:pattern%') ORDER BY lower(\"Name\") LIMIT 100"; pattern = " \"ShowInList\" = 1 AND lower(\"Name\") LIKE lower('%" + pattern + "%') ORDER BY lower(\"Name\") LIMIT 100";
return m_Groups.Get(pattern, new NpgsqlParameter("pattern", pattern)); return m_Groups.Get(pattern, new NpgsqlParameter("pattern", pattern));
} }
} }
@ -428,13 +432,11 @@ namespace OpenSim.Data.PGSQL
public void DeleteOld() public void DeleteOld()
{ {
uint now = (uint)Util.UnixTimeSinceEpoch();
using (NpgsqlCommand cmd = new NpgsqlCommand()) using (NpgsqlCommand cmd = new NpgsqlCommand())
{ {
cmd.CommandText = String.Format("delete from {0} where \"TMStamp\" < :tstamp", m_Realm); cmd.CommandText = String.Format("delete from {0} where \"TMStamp\" < CURRENT_DATE - INTERVAL '2 week'", m_Realm);
cmd.Parameters.AddWithValue("tstamp", now - 14 * 24 * 60 * 60); // > 2 weeks old
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
} }
@ -456,13 +458,11 @@ namespace OpenSim.Data.PGSQL
public void DeleteOld() public void DeleteOld()
{ {
uint now = (uint)Util.UnixTimeSinceEpoch();
using (NpgsqlCommand cmd = new NpgsqlCommand()) using (NpgsqlCommand cmd = new NpgsqlCommand())
{ {
cmd.CommandText = String.Format("delete from {0} where \"TMStamp\" < :tstamp", m_Realm); cmd.CommandText = String.Format("delete from {0} where \"TMStamp\" < CURRENT_DATE - INTERVAL '2 week'", m_Realm);
cmd.Parameters.AddWithValue("tstamp", now - 14 * 24 * 60 * 60); // > 2 weeks old
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
} }

9
OpenSim/Data/PGSQL/PGSQLPresenceData.cs Normal file → Executable file
View File

@ -66,7 +66,7 @@ namespace OpenSim.Data.PGSQL
using (NpgsqlCommand cmd = new NpgsqlCommand()) using (NpgsqlCommand cmd = new NpgsqlCommand())
{ {
cmd.CommandText = String.Format(@"DELETE FROM {0} WHERE ""RegionID""=:RegionID", m_Realm); cmd.CommandText = String.Format("DELETE FROM {0} WHERE \"RegionID\" = :regionID", m_Realm);
cmd.Parameters.Add(m_database.CreateParameter("RegionID", regionID)); cmd.Parameters.Add(m_database.CreateParameter("RegionID", regionID));
cmd.Connection = conn; cmd.Connection = conn;
@ -80,14 +80,15 @@ namespace OpenSim.Data.PGSQL
PresenceData[] pd = Get("SessionID", sessionID.ToString()); PresenceData[] pd = Get("SessionID", sessionID.ToString());
if (pd.Length == 0) if (pd.Length == 0)
return false; return false;
if (regionID == UUID.Zero)
return false;
using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString)) using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString))
using (NpgsqlCommand cmd = new NpgsqlCommand()) using (NpgsqlCommand cmd = new NpgsqlCommand())
{ {
cmd.CommandText = String.Format(@"UPDATE {0} SET cmd.CommandText = String.Format("UPDATE {0} SET \"RegionID\" = :regionID, \"LastSeen\" = now() WHERE \"SessionID\" = :sessionID", m_Realm);
""RegionID"" = :RegionID
WHERE ""SessionID"" = :SessionID", m_Realm);
cmd.Parameters.Add(m_database.CreateParameter("SessionID", sessionID)); cmd.Parameters.Add(m_database.CreateParameter("SessionID", sessionID));
cmd.Parameters.Add(m_database.CreateParameter("RegionID", regionID)); cmd.Parameters.Add(m_database.CreateParameter("RegionID", regionID));

8
OpenSim/Data/PGSQL/Resources/Presence.migrations Normal file → Executable file
View File

@ -28,3 +28,11 @@ BEGIN TRANSACTION;
ALTER TABLE Presence ADD "LastSeen" Timestamp; ALTER TABLE Presence ADD "LastSeen" Timestamp;
COMMIT; COMMIT;
:VERSION 3 # --------------------------
BEGIN;
CREATE INDEX RegionID ON Presence("RegionID");
COMMIT;