SqlAppQueryService
using System;
using System.Collections.Generic;
using System.Text;
using SharpErp.Framework.Data;
namespace SharpErp.Framework.Data
{
public class SqlAppQueryService : IDataQueryService, IServiceProvider
{
private Dictionary<string, string> appWhere = new Dictionary<string, string>();
private Dictionary<string, RecordParameterCollection> appParameters = new Dictionary<string, RecordParameterCollection>();
private bool initParas;
#region IDataFindService Members
public void AppendClause(IDataBlock dataBlock, string clause)
{
string currentClause = dataBlock.WhereClause;
if (!appWhere.ContainsKey(dataBlock.DataBlockName))
{
appWhere.Add(dataBlock.DataBlockName, dataBlock.WhereClause);
}
dataBlock.WhereClause = JoinClause(currentClause, clause);
}
public string JoinClause(string clause1, string clause2)
{
if (string.IsNullOrEmpty(clause1))
return clause2;
else if (string.IsNullOrEmpty(clause2))
return clause1;
else
return clause1 + " and (" + clause2 + ")";
}
public void QueryForeignKey(IDataBlock dataBlock, string dbField, string nonDbField, string tableNname, string idColumn, string nameColumn, string extraWhereClause)
{
throw new Exception("The method or operation is not implemented.");
}
/// <summary>
/// -- For folder support, when a -1=-1 or -2=-2 are in the WHERE,
/// -- the folder has already saved the clause, so reset to that.
/// -- If neither exists restore from the record group.
/// </summary>
/// <param name="dataBlock"></param>
public void Reset(IDataBlock dataBlock)
{
if (dataBlock == null || string.IsNullOrEmpty(dataBlock.WhereClause))
{
initParas = true;
return;
}
string clause = dataBlock.WhereClause;
int marker_pos = clause.IndexOf(" AND -2=-2");
if (marker_pos != -1)
{
clause = clause.Substring(0, marker_pos + 10);
dataBlock.WhereClause = clause;
}
else
{
marker_pos = clause.IndexOf(" AND -1=-1");
if (marker_pos != -1)
{
clause = clause.Substring(0, marker_pos + 10);
dataBlock.WhereClause = clause;
}
else
{
if (appWhere.ContainsKey(dataBlock.DataBlockName))
dataBlock.WhereClause = appWhere[dataBlock.DataBlockName];
else
appWhere.Add(dataBlock.DataBlockName, dataBlock.WhereClause);
}
}
if (initParas)
{
dataBlock.Parameters.Clear();
if (appParameters.ContainsKey(dataBlock.DataBlockName))
{
RecordParameterCollection paras = appParameters[dataBlock.DataBlockName];
if (paras != null)
{
foreach (RecordParameter para in paras)
{
dataBlock.Parameters.Add(para);
}
}
}
}
else
{
if (dataBlock.Parameters != null && dataBlock.Parameters.Count > 0)
{
RecordParameterCollection paras = new RecordParameterCollection();
paras.AddRange(dataBlock.Parameters);
appParameters.Add(dataBlock.DataBlockName, paras);
}
initParas = true;
}
}
#endregion
#region IServiceProvider Members
public object GetService(Type serviceType)
{
if (serviceType == typeof(IDataQueryService))
{
return this;
}
return null;
}
#endregion
}
}