using System;
using System.Data;
using System.IO;
using System.Windows.Forms;
using System.Collections;
using System.Diagnostics;
using System.Globalization;
using System.Text;
using System.Threading;
using EXCommon;
//using EXAttribute;
using EXDb97;
//###2
namespace EPol
{
///-------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///-------------------------------------------------------------------------------------------------------------------------
public class CDbJoinOnSIndexWithBackupView : CDbJoinOnSIndexView
{
public CDbJoinOnSIndexWithBackupView(string sMasterPrefixe, CDbTreeTable oMasterTable,
string sSlavePrefixe, string sSlaveTableName)
: base(sMasterPrefixe, oMasterTable,
new CDbTableView(sSlavePrefixe, new CDbMemeArchiveTable(sSlaveTableName, oMasterTable.sDatabaseName)))
{
}
public CDbMemeArchiveTable oGetSlaveBackupTable
{
get
{
return (CDbMemeArchiveTable)(((CDbTableView)m_oSlaveView).oGetTable);
}
}
}
///-------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///-------------------------------------------------------------------------------------------------------------------------
public class CDbJoinOnSIndexView : CDbJoinView
{
public CDbJoinOnSIndexView(string sMasterPrefixe, string sMasterTableName,
string sSlavePrefixe, string sSlaveTableName, string sDatabaseName)
: base(new CDbTableView(sMasterPrefixe, new CDbTreeTable(sMasterTableName, sDatabaseName)),
new CDbTableView(sSlavePrefixe, new CDbSTable(sSlaveTableName, sDatabaseName)))
{
oGetMasterTable.vPutIndexColumnsTo(oGetSlaveTable);
vAddLinkIndex(sMasterPrefixe, MASTER_INDEX_FIELD, sSlavePrefixe, MASTER_INDEX_FIELD);
vAddLinkIndex(sMasterPrefixe, MASTER_SUB_INDEX_FIELD, sSlavePrefixe, MASTER_SUB_INDEX_FIELD);
}
public CDbJoinOnSIndexView(string sMasterPrefixe, CDbTreeTable oMasterTable,
string sSlavePrefixe, string sSlaveTableName)
: base(new CDbTableView(sMasterPrefixe, oMasterTable),
new CDbTableView(sSlavePrefixe, new CDbSTable(sSlaveTableName, oMasterTable.sDatabaseName)))
{
oGetMasterTable.vPutIndexColumnsTo(oGetSlaveTable);
vAddLinkIndex(sMasterPrefixe, MASTER_INDEX_FIELD, sSlavePrefixe, MASTER_INDEX_FIELD);
vAddLinkIndex(sMasterPrefixe, MASTER_SUB_INDEX_FIELD, sSlavePrefixe, MASTER_SUB_INDEX_FIELD);
}
public CDbJoinOnSIndexView(string sMasterPrefixe, CDbTreeTable oMasterTable,
string sSlavePrefixe, string sSlaveTableName, string sSlaveIndexFieldName, string sSlaveSubIndexFieldName)
: base(new CDbTableView(sMasterPrefixe, oMasterTable),
new CDbTableView(sSlavePrefixe, new CDbSTable(sSlaveTableName, oMasterTable.sDatabaseName)))
{
oGetMasterTable.vPutIndexColumnsTo(oGetSlaveTable);
vAddLinkIndex(sMasterPrefixe, MASTER_INDEX_FIELD, sSlavePrefixe, sSlaveIndexFieldName);
vAddLinkIndex(sMasterPrefixe, MASTER_SUB_INDEX_FIELD, sSlavePrefixe, sSlaveSubIndexFieldName);
}
protected CDbJoinOnSIndexView(string sMasterPrefixe, CDbSIndexTable oMasterTable,
CDbTableView oSlaveView)
: base(new CDbTableView(sMasterPrefixe, oMasterTable),
oSlaveView)
{
oGetMasterTable.vPutIndexColumnsTo(oSlaveView.oGetTable);
vAddLinkIndex(sMasterPrefixe, MASTER_INDEX_FIELD, oSlaveView.sqlPrefixe, MASTER_INDEX_FIELD);
vAddLinkIndex(sMasterPrefixe, MASTER_SUB_INDEX_FIELD, oSlaveView.sqlPrefixe, MASTER_SUB_INDEX_FIELD);
}
public virtual ec dAddAttribute(SIndex oMeme, P dAttributeType, object oValue)
{
ec dRC = ec.ST_SUCCEED;
try
{
oGetSlaveTable.vAddValue(oMeme);
if (dAttributeType == P.INTEGER_TYPE)
{
int dValue;
dValue = Convert.ToInt32(oValue);
oGetSlaveTable.vAddValue(dValue);
}
else if (dAttributeType == P.TITLE_AND_TEXT_ATTRIBUTE_TYPE)
{
STitleAndText oTitleAndText = (STitleAndText)oValue;
oGetSlaveTable.vAddValue(oTitleAndText.sTitle);
oGetSlaveTable.vAddValue(oTitleAndText.sText);
}
else
{
oGetSlaveTable.vAddValue(oValue.ToString());
}
dRC = oGetSlaveTable.dInsertIntoTable();
}
catch
{
EPAssert(false, "Not an integer = " + oValue.ToString());
return ec.ST_ATTRIBUTE_CONVERTION_ERROR_TOWARD_INTEGER;
}
return dRC == ec.ST_SUCCEED ? ec.ST_SUCCEED : ec.ST_ATTRIBUTE_CAN_NOT_INSERT_THE_ATTRIBUTE;
}
public CDbSTable oGetSlaveTable
{
get
{
return ((CDbTableView)m_oSlaveView).oGetTable;
}
}
public CDbTableView oGetMasterView
{
get
{
return (CDbTableView)m_oMasterView;
}
}
public CDbTableView oGetSlaveView
{
get
{
return (CDbTableView)m_oSlaveView;
}
}
public CDbTreeTable oGetMasterTable
{
get
{
return (CDbTreeTable)((CDbTableView)m_oMasterView).oGetTable;
}
}
public void vAddFilter(P dEntityClassFilter, string sFieldName)
{
oGetMasterTable.vAddFilter(dEntityClassFilter, sFieldName);
}
public virtual ec dUpdate(SIndex oIndex, string sFieldName, object oValue)
{
ec dRC = oGetSlaveTable.dUpdate(sFieldName, oValue.ToString(), sqlIsIndex(oIndex));
return dRC== ec.ST_SUCCEED ? ec.ST_SUCCEED : ec.ST_ATTRIBUTE_CAN_NOT_UPDATE_THE_ATTRIBUTE;
}
public void vResetDate(SIndex oIndex)
{
oGetMasterTable.dResetDate(sqlIsIndex(oIndex));
}
/*
public bool bAddNewValues(int dMemeIndex, params object[] oValueParameterArray)
{
SIndex oIndex;
oIndex.dIndex = dMemeIndex;
oIndex.dSubIndex = oGetSlaveTable.dGetMax(MASTER_SUB_INDEX_FIELD,
oGetSlaveTable.sFieldEqual(MASTER_INDEX_FIELD, oIndex.dIndex));
return bAddNewValues(oIndex.dIndex, oValueParameterArray);
}*/
public int dGetRecordCount()
{
this.bAddDisplayColumn(oGetMasterView.sqlPrefixe, MASTER_INDEX_FIELD);
this.bAddDisplayColumn(oGetMasterView.sqlPrefixe, MASTER_SUB_INDEX_FIELD);
int dCount;
dGetRecordCount(this.sqlCount(), out dCount);
// EPAssert(dCount >= 0, "Bad record count sql = " + this.sqlCount());
return dCount;
}
public ec dGetSelect(int dMaxItems, out SIndex[] oIndexArray)
{
ArrayList oOutputArray;
this.bAddDisplayColumn(oGetMasterView.sqlPrefixe, MASTER_INDEX_FIELD);
this.bAddDisplayColumn(oGetMasterView.sqlPrefixe, MASTER_SUB_INDEX_FIELD);
oIndexArray = null;
ec dRC;
dRC = base.dGetSelect( dMaxItems, out oOutputArray);
if (dRC == ec.ST_SUCCEED)
{
dRC = dConvert(oOutputArray, out oIndexArray);
}
return dRC;
}
public ec dGetSelect(SIndex oIndex, out ArrayList oOutputArray, string[] sOutputFieldMasterViewArray, string[] sOutputFieldSlaveViewArray)
{
vResetSelect();
if (sOutputFieldMasterViewArray != null)
{
for (int i = 0; i < sOutputFieldMasterViewArray.Length; i++)
{
bAddDisplayColumn(oGetMasterView.sqlPrefixe, sOutputFieldMasterViewArray[i]);
}
}
if (sOutputFieldSlaveViewArray != null)
{
for (int i = 0; i < sOutputFieldSlaveViewArray.Length; i++)
{
bAddDisplayColumn(oGetSlaveView.sqlPrefixe, sOutputFieldSlaveViewArray[i]);
}
}
this.bAddWhere(oGetMasterView.sqlPrefixe, oIndex);
return base.dGetSelect(out oOutputArray);
}
public string sqlIsIndex(SIndex oIndex)
{
return oGetMasterTable.sFieldEqual(MASTER_INDEX_FIELD, oIndex.dIndex) + AND + oGetMasterTable.sFieldEqual(MASTER_SUB_INDEX_FIELD,
oIndex.dSubIndex);
}
}
///-------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///-------------------------------------------------------------------------------------------------------------------------
public class CDbJoinView : CDb2JoinView
{
public CDbJoinView(CDbView oMasterView, CDbView oSlaveView)
: base(oMasterView, oSlaveView)
{
}
public override string sqlGetIndexJoin(string sPrefixe)
{
string sqlJoin = sPrefixe == null ? m_sqlIndexLink : sAddPrefixe(m_sqlIndexLink, sPrefixe, '_');
if (m_oMasterView.sqlGetIndexJoin(sPrefixe) != null)
{
if (sqlJoin != null) sqlJoin += AND;
sqlJoin += m_oMasterView.sqlGetIndexJoin(sPrefixe);
}
if (m_oSlaveView.sqlGetIndexJoin(sPrefixe) != null)
{
if (sqlJoin != null) sqlJoin += AND;
sqlJoin += m_oSlaveView.sqlGetIndexJoin(sPrefixe);
}
CTrace.i().vWriteLn(ENMessage.DbS," sqlJoin = " + sqlJoin);
return sqlJoin;
}
string m_sqlIndexLink;
public override bool bAddWhere(string sPrefixe, string sColumnName, ENSQLRelation enRelation, string sValue)
{
if (m_oMasterView.bAddWhere(sPrefixe, sColumnName, enRelation, sValue))
{
return true;
}
else if (m_oSlaveView.bAddWhere(sPrefixe, sColumnName, enRelation, sValue))
{
return true;
}
return false;
}
public override bool bAddWhere(string sPrefixe1, string sColumnName1, ENSQLRelation enRelation, string sPrefixe2, string sColumnName2)
{
if (m_oMasterView.bAddWhere( sPrefixe1, sColumnName1, enRelation, sPrefixe2, sColumnName2))
{
return true;
}
else if (m_oSlaveView.bAddWhere(sPrefixe1, sColumnName1, enRelation, sPrefixe2, sColumnName2))
{
return true;
}
return false;
}
public override bool bAddOrderBy(string sPrefixe, string sColumnName)
{
if (m_oMasterView.bAddOrderBy(sPrefixe, sColumnName))
{
return true;
}
else if (m_oSlaveView.bAddOrderBy(sPrefixe, sColumnName))
{
return true;
}
return false;
}
public override string sqlSelect(string sPrefixe, string sColumn, string sWhere)
{
string sSql= m_oMasterView.sqlSelect(sPrefixe, sColumn, sWhere);
if (sSql == null)
{
sSql = m_oSlaveView.sqlSelect(sPrefixe, sColumn, sWhere);
}
return sSql;
}
public override bool bAddWhere(string sPrefixe, string sSql)
{
bool bRet = m_oMasterView.bAddWhere(sPrefixe, sSql);
if (bRet)
{
bRet = m_oSlaveView.bAddWhere(sPrefixe, sSql);
}
return bRet;
}
public override bool bAddDisplayColumn(string sPrefixe, STRDisplayColumn sColumnName)
{
if (m_oMasterView.bAddDisplayColumn(sPrefixe, sColumnName))
{
return true;
}
else if (m_oSlaveView.bAddDisplayColumn(sPrefixe, sColumnName))
{
return true;
}
return false;
}
public override string sGetTypeOf(string sFieldName)
{
string sType = m_oMasterView.sGetTypeOf(sFieldName);
if ( sType != null)
{
return sType;
}
return m_oSlaveView.sGetTypeOf(sFieldName);
}
public override int dGetDisplayFieldCount
{
get
{
return m_oMasterView.dGetDisplayFieldCount + m_oSlaveView.dGetDisplayFieldCount;
}
}
public override STRDisplayColumn GetFieldName(int i)
{
if (i >= 0 && i < m_oMasterView.dGetDisplayFieldCount)
{
return m_oMasterView.GetFieldName(i);
}
else if (i >= m_oMasterView.dGetDisplayFieldCount && i < dGetDisplayFieldCount)
{
return m_oSlaveView.GetFieldName(i - m_oMasterView.dGetDisplayFieldCount);
}
else
{
return new STRDisplayColumn();
}
}
public override void vAddLinkIndex(string sMasterPrefixe, string sMasterFieldName, string sSlavePrefixe, string sSlaveFieldName)
{
if (m_sqlIndexLink != null)
{
m_sqlIndexLink += AND;
}
m_sqlIndexLink += sMasterPrefixe + "." + sMasterFieldName;
m_sqlIndexLink += "=";
m_sqlIndexLink += sSlavePrefixe + "." + sSlaveFieldName;
}
public override string sqlWhere
{
get
{
string sWhere = null;
if (m_oWhereArrayList.Count != 0)
{
sWhere += sqlConcat(m_oWhereArrayList, AND);
}
if (m_oMasterView.sqlWhere != null)
{
if (sWhere != null) sWhere += AND;
sWhere += m_oMasterView.sqlWhere;
}
if (m_oSlaveView.sqlWhere != null)
{
if (sWhere != null) sWhere += AND;
sWhere += m_oSlaveView.sqlWhere;
} return sWhere;
}
}
public override string sqlOrderBy
{
get
{
string sOrderBy = null;
if (m_oOrderByArrayList.Count != 0)
{
sOrderBy += sqlConcat(m_oOrderByArrayList, ", ");
}
return sOrderBy;
}
}
public override string sqlFrom
{
get
{
return m_oMasterView.sqlFrom + ", " + m_oSlaveView.sqlFrom;
}
}
public override string sqlReflexiveFrom
{
get
{
return m_oMasterView.sqlReflexiveFrom + ", " + m_oSlaveView.sqlReflexiveFrom;
}
}
public string sqlReflexive(string sFieldList)
{
string sSelect = "SELECT " + sFieldList +
" FROM " + sqlFrom + ", " + sqlReflexiveFrom + " where ";
CTrace.i().vWriteLn(ENMessage.DbS,"sSelect = " + sSelect);
if (sAddWhere() != null)
{
sSelect += sAddWhere();
}
if (sqlGetIndexJoin(REFLEXIVE_PREFIXE) != null)
{
sSelect += " and ";
sSelect += sqlGetIndexJoin(REFLEXIVE_PREFIXE);
}
CTrace.i().vWriteLn(ENMessage.DbS,"sSelect = " + sSelect);
return sSelect;
}
public ec dGetReflexiveSelect(out ArrayList oOutputArray)
{
return dGetSelect(sqlReflexive(sGetFieldList), out oOutputArray);
}
public string csDumpReflexiveTable()
{
return csDump(sqlReflexive("*"));
}
public bool bAddReflexiveWhere(string sPrefixe, string sColumnName, int dValue)
{
bAddWhere(sPrefixe, sColumnName, dValue);
return bAddWhere(REFLEXIVE_PREFIXE + "_" + sPrefixe, sColumnName, ENSQLRelation.neq, dValue);
}
}
///-------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///-------------------------------------------------------------------------------------------------------------------------
public abstract class CDb2JoinView : CDbView
{
public CDb2JoinView(CDbView oMasterView, CDbView oSlaveView)
: base(oMasterView.sDatabaseName)
{
m_oMasterView = oMasterView;
m_oSlaveView = oSlaveView;
}
protected CDbView m_oMasterView, m_oSlaveView;
public abstract void vAddLinkIndex(string sMasterPrefixe, string sMasterFieldName,
string sSlavePrefixe, string sSlaveFieldName);
public override void vCleanAllData()
{
m_oMasterView.vCleanAllData();
m_oSlaveView.vCleanAllData();
}
public override string sDatabaseName
{
get {
return m_oMasterView.sDatabaseName;
}
}
public override bool bIsTableExist()
{
return m_oSlaveView.bIsTableExist() && m_oMasterView.bIsTableExist();
}
public override void vResetSelect()
{
m_dColPos = 0;
m_oMasterView.vResetSelect();
m_oSlaveView.vResetSelect();
}
public override CDbView GetMasterView
{
get
{
return m_oMasterView;
}
}
public CDbView GetSlaveView
{
get
{
return m_oSlaveView;
}
}
public override string sGetMasterTableName
{
get
{
return m_oMasterView.sGetMasterTableName;
}
}
}
///-------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///-------------------------------------------------------------------------------------------------------------------------
public abstract class CDbMultiSlaveJoinView : CDbView
{
public CDbMultiSlaveJoinView(CDbView oMasterView, CDbTableViewArray oSlaveViewArray)
: base(oMasterView.sDatabaseName)
{
m_oMasterView = oMasterView;
m_oSlaveViewArray = oSlaveViewArray;
}
protected CDbView m_oMasterView;
protected CDbTableViewArray m_oSlaveViewArray;
public const string ALL_SLAVE_VIEW = "AllSlaveView";
public abstract void vAddLinkIndex(string sMasterPrefixe, string sMasterFieldName,
string sSlavePrefixe, string sSlaveFieldName);
public CDbTableViewArray GetSlaveArrayView
{
get
{
return m_oSlaveViewArray;
}
}
protected CDbView GetSlaveView(string sPrefixe)
{
return m_oSlaveViewArray.GetView(sPrefixe);
}
public int dSlaveViewCount
{
get
{
return m_oSlaveViewArray.Length;
}
}
public override void vCleanAllData()
{
m_oMasterView.vCleanAllData();
for (int i = 0; i < m_oSlaveViewArray.Length; i++)
{
m_oSlaveViewArray[i].vCleanAllData();
}
}
public override string sDatabaseName
{
get
{
return m_oMasterView.sDatabaseName;
}
}
public override bool bIsTableExist()
{
for (int i = 0; i < m_oSlaveViewArray.Length; i++)
{
if (m_oSlaveViewArray[i].bIsTableExist()== false) {
return false;
}
}
return m_oMasterView.bIsTableExist();
}
public override void vResetSelect()
{
m_dColPos = 0;
m_oMasterView.vResetSelect();
for (int i = 0; i < m_oSlaveViewArray.Length; i++)
{
m_oSlaveViewArray[i].vResetSelect();
}
}
public override CDbView GetMasterView
{
get
{
return m_oMasterView;
}
}
public CDbView GetSlaveView(int i)
{
return m_oSlaveViewArray[i];
}
public override string sGetMasterTableName
{
get
{
return m_oMasterView.sGetMasterTableName;
}
}
}
///-------------------------------------------------------------------------------------------------------------------------
public class CDbTableViewArray : CDbEPBase
{
public CDbTableViewArray(string sPrefixe, string sTableBase, int dTableCount, string sDatabaseName)
{
m_sPrefixe = sPrefixe;
m_oViewArrayList = new ArrayList();
for (int i = 0; i < dTableCount; i++)
{
m_oViewArrayList.Add(new CDbTableView(sGetPrefixe(i), new CDbSTable(sTableBase + i, sDatabaseName)));
}
}
public CDbTableViewArray(string sPrefixe, params CDbSTable[] oTableArray)
{
m_sPrefixe = sPrefixe;
m_oViewArrayList = new ArrayList();
for (int i = 0; i < oTableArray.Length; i++)
{
m_oViewArrayList.Add(new CDbTableView(sGetPrefixe(i), oTableArray[i]));
}
}
public string m_sPrefixe;
ArrayList m_oViewArrayList;
public int dGetNext(string sKeyColumn, string sWhere) {
int dNextMax=1;
for(int i=0; i < Length; i++ ) {
int dNext= GetTable(i).dGetNext(sKeyColumn, sWhere);
if (dNext > dNextMax)
{
dNextMax = dNext;
}
}
return dNextMax;
}
static public int dGetIndex(string sSlavePrefixe)
{
int dIndex = sSlavePrefixe.IndexOf('_');
if (dIndex <= 0)
{
return NOT_USED;
}
return Convert.ToInt32(sSlavePrefixe.Substring(dIndex + 1));
}
public string sGetPrefixe(int i)
{
return m_sPrefixe + "_" + i;
}
public CDbTableView GetView(string sSlavePrefixe)
{
int dSuffixeIndex = dGetIndex(sSlavePrefixe);
if (IsUsed(dSuffixeIndex))
{
return (CDbTableView)m_oViewArrayList[dSuffixeIndex];
}
return null;
}
public CDbSTable GetTable(string sSlavePrefixe)
{
CDbTableView oTableView= GetView( sSlavePrefixe);
if (oTableView != null) {
return oTableView.oGetTable;
}
return null;
}
public CDbSTable GetTable(int dSuffixeIndex)
{
CDbTableView oTableView= (CDbTableView)m_oViewArrayList[dSuffixeIndex];
if (oTableView != null) {
return oTableView.oGetTable;
}
return null;
}
public virtual void vAddColumn(string strFieldName, string strType, bool bPrimaryKey)
{
for (int i = 0; i < m_oViewArrayList.Count; i++)
{
GetTable(i).vAddColumn(strFieldName, strType, bPrimaryKey);
}
}
public CDbTableView this[int dIndex]
{
get
{
return (CDbTableView)m_oViewArrayList[dIndex];
}
}
public int Length
{
get
{
return m_oViewArrayList.Count;
}
}
}
///-------------------------------------------------------------------------------------------------------------------------
public class CDbMultiJoinView : CDbMultiSlaveJoinView
{
public CDbMultiJoinView(CDbView oMasterView, CDbTableViewArray oSlaveViewArray)
: base(oMasterView, oSlaveViewArray)
{
m_sqlIndexLink = new string[oSlaveViewArray.Length];
for (int i = 0; i < m_sqlIndexLink.Length; i++)
{
m_sqlIndexLink[i] = null;
}
}
string[] m_sqlIndexLink;
public override string sqlGetIndexJoin(string sPrefixe)
{
int dIdx = CDbTableViewArray.dGetIndex(sPrefixe);
string sqlJoin;
// sqlJoin= sAddPrefixe(m_sqlIndexLink[dIdx], sPrefixe, '_');
sqlJoin = m_sqlIndexLink[dIdx];
if (m_oMasterView.sqlGetIndexJoin(sPrefixe) != null)
{
if (sqlJoin != null) sqlJoin += AND;
sqlJoin += m_oMasterView.sqlGetIndexJoin(sPrefixe);
}
if (GetSlaveView(sPrefixe).sqlGetIndexJoin(sPrefixe) != null)
{
if (sqlJoin != null) sqlJoin += AND;
sqlJoin += GetSlaveView(sPrefixe).sqlGetIndexJoin(sPrefixe);
}
CTrace.i().vWriteLn(ENMessage.DbMultiJoin, " sqlJoin = " + sqlJoin);
return sqlJoin;
}
protected override string sAddWhere()
{
string sWhere = sqlWhere;
for (int i = 0; i < m_sqlIndexLink.Length; i++)
{
if (sqlGetIndexJoin(m_oSlaveViewArray.sGetPrefixe(i)) != null)
{
if (sWhere != null && sWhere.Length > 0) sWhere += AND;
sWhere += sqlGetIndexJoin(m_oSlaveViewArray.sGetPrefixe(i));
}
}
CTrace.i().vWriteLn(ENMessage.DbMultiSlaveView,"sAddWhere() sWhere = " + sWhere);
return sWhere;
}
public override bool bAddWhere(string sPrefixe, string sColumnName, ENSQLRelation enRelation, string sValue)
{
if (m_oMasterView.bAddWhere(sPrefixe, sColumnName, enRelation, sValue))
{
return true;
}
else
{
if (GetSlaveView(sPrefixe).bAddWhere(sPrefixe, sColumnName, enRelation, sValue))
{
return true;
}
}
return false;
}
public override bool bAddWhere(string sPrefixe, string sColumnName1, ENSQLRelation enRelation, string sPrefixe2, string sColumnName2)
{
if (m_oMasterView.bAddWhere(sPrefixe, sColumnName1, enRelation, sPrefixe2, sColumnName2))
{
return true;
}
else if (GetSlaveView(sPrefixe).bAddWhere(sPrefixe, sColumnName1, enRelation, sPrefixe2, sColumnName2))
{
return true;
}
return false;
}
public override bool bAddOrderBy(string sPrefixe, string sColumnName)
{
if (m_oMasterView.bAddOrderBy(sPrefixe, sColumnName))
{
return true;
}
else if (GetSlaveView(sPrefixe).bAddOrderBy(sPrefixe, sColumnName))
{
return true;
}
return false;
}
public override string sqlSelect(string sPrefixe, string sColumn, string sWhere)
{
string sSql = m_oMasterView.sqlSelect(sPrefixe, sColumn, sWhere);
if (sSql == null)
{
sSql = GetSlaveView(sPrefixe).sqlSelect(sPrefixe, sColumn, sWhere);
}
return sSql;
}
public override bool bAddWhere(string sPrefixe, string sSql)
{
bool bRet = m_oMasterView.bAddWhere(sPrefixe, sSql);
if (bRet)
{
bRet = GetSlaveView(sPrefixe).bAddWhere(sPrefixe, sSql);
}
return bRet;
}
public override bool bAddDisplayColumn(string sPrefixe, STRDisplayColumn sColumnName)
{
if (m_oMasterView.bAddDisplayColumn(sPrefixe, sColumnName))
{
return true;
}
else if (GetSlaveView(sPrefixe).bAddDisplayColumn(sPrefixe, sColumnName))
{
return true;
}
return false;
}
public override string sGetTypeOf(string sFieldName)
{
string sType = m_oMasterView.sGetTypeOf(sFieldName);
if (sType != null)
{
return sType;
}
for (int i = 0; i < dSlaveViewCount; i++)
{
sType = m_oSlaveViewArray[i].sGetTypeOf(sFieldName);
if (sType != null)
{
return sType;
}
}
return null;
}
public override int dGetDisplayFieldCount
{
get
{
int dCount = m_oMasterView.dGetDisplayFieldCount;
for (int i = 0; i < dSlaveViewCount; i++)
{
dCount += m_oSlaveViewArray[i].dGetDisplayFieldCount;
}
return dCount;
}
}
public override STRDisplayColumn GetFieldName(int i)
{
if (i >= 0 && i < m_oMasterView.dGetDisplayFieldCount)
{
return m_oMasterView.GetFieldName(i);
}
else if (i >= m_oMasterView.dGetDisplayFieldCount && i < dGetDisplayFieldCount)
{
int dFieldDisplayCount = m_oMasterView.dGetDisplayFieldCount;
for (int j = 0; j < dSlaveViewCount; j++)
{
if ((i - dFieldDisplayCount) > m_oSlaveViewArray[j].dGetDisplayFieldCount)
{
dFieldDisplayCount += m_oSlaveViewArray[j].dGetDisplayFieldCount;
}
else
{
return m_oSlaveViewArray[j].GetFieldName(i - dFieldDisplayCount);
}
}
return new STRDisplayColumn();
}
else
{
return new STRDisplayColumn();
}
}
public override void vAddLinkIndex(string sMasterPrefixe, string sMasterFieldName, string sSlavePrefixe, string sSlaveFieldName)
{
for (int i = 0; i < this.m_oSlaveViewArray.Length; i++)
{
if (m_sqlIndexLink[i] != null)
{
m_sqlIndexLink[i] += AND;
}
m_sqlIndexLink[i] += sMasterPrefixe + "." + sMasterFieldName;
m_sqlIndexLink[i] += "=";
m_sqlIndexLink[i] += m_oSlaveViewArray.sGetPrefixe(i) + "." + sSlaveFieldName;
}
}
public bool bAddWhere(string sPrefixe, CEntityArray iValueArray)
{
bool bRet = false;
if (iValueArray != null)
{
if (iValueArray.Length == 0) return true;
for (int i = 0; i < iValueArray.Length; i++)
{
bRet = bAddWhere(sPrefixe, iValueArray[i]);
}
}
return bRet;
}
public virtual bool bAddWhere(string sPrefixe, SEntity eValue)
{
if (eValue.bEqualTo(P.NONE))
{
return bAddWhere(sPrefixe, ENTITY_CLASS_INDEX_FIELD, ENSQLRelation.neq, eValue.dClass);
}
else if (eValue.bEqualTo(P.ALL))
{
return bAddWhere(sPrefixe, ENTITY_CLASS_INDEX_FIELD, ENSQLRelation.eq, eValue.dClass);
}
else
{
if (eValue.bIsType(P.P_TYPE))
{
if (eValue.bExact)
{
bAddWhere(sPrefixe, ENTITY_CLASS_INDEX_FIELD, ENSQLRelation.eq, eValue.dClass);
return bAddWhere(sPrefixe, ENTITY_INDEX_FIELD, ENSQLRelation.eq, eValue.sql);
}
else
{
string sSqlNotExist = sqlNotExist(sPrefixe, " 1 ", ENTITY_CLASS_INDEX_FIELD + " = " + eValue.dClass + AND + ENTITY_INDEX_FIELD
+ " <> " + eValue.sql);
return bAddWhere(sPrefixe,sSqlNotExist);
}
}
else if (eValue.bIsType(P.SINDEX_TYPE))
{
if (eValue.bExact)
{
bAddWhere(sPrefixe, ENTITY_CLASS_INDEX_FIELD, ENSQLRelation.eq, eValue.dClass);
return bAddWhere(sPrefixe, ENTITY_INDEX_FIELD, ENSQLRelation.eq, eValue.sql);
}
else
{
string sSqlNotExist = sqlNotExist(sPrefixe, " 1 ", ENTITY_CLASS_INDEX_FIELD + " = " + eValue.dClass + AND + "(" + INDEX_FIELD
+ " <> " + ((SIndex)eValue.Instance).dIndex
+ OR + SUB_INDEX_FIELD + " <> " + ((SIndex)eValue.Instance).dSubIndex + ") " );
return bAddWhere(sPrefixe,sSqlNotExist);
}
}
else {
CTrace.i().vWriteLn(ENMessage.Error, "bAddWhere type is not dealed " + eValue.Instance.ToString());
return false;
}
}
}
public override string sqlWhere
{
get
{
string sWhere = null;
if (m_oWhereArrayList.Count != 0)
{
sWhere += sqlConcat(m_oWhereArrayList, AND);
}
if (m_oMasterView.sqlWhere != null)
{
if (sWhere != null) sWhere += AND;
sWhere += m_oMasterView.sqlWhere;
}
for (int i = 0; i < dSlaveViewCount; i++)
{
if (m_oSlaveViewArray[i].sqlWhere != null)
{
if (sWhere != null) sWhere += AND;
sWhere += m_oSlaveViewArray[i].sqlWhere;
}
}
return sWhere;
}
}
public override string sqlOrderBy
{
get
{
string sOrderBy = null;
if (m_oOrderByArrayList.Count != 0)
{
sOrderBy += sqlConcat(m_oOrderByArrayList, ", ");
}
return sOrderBy;
}
}
public override string sqlFrom
{
get
{
string _sqlFrom = m_oMasterView.sqlFrom;
for (int i = 0; i < dSlaveViewCount; i++)
{
if (_sqlFrom != null) _sqlFrom += ", ";
_sqlFrom += m_oSlaveViewArray[i].sqlFrom;
}
return _sqlFrom;
}
}
public override string sqlReflexiveFrom
{
get
{
string _sqlFrom = m_oMasterView.sqlReflexiveFrom;
for (int i = 0; i < dSlaveViewCount; i++)
{
if (_sqlFrom != null) _sqlFrom += ", ";
_sqlFrom += m_oSlaveViewArray[i].sqlReflexiveFrom;
}
return _sqlFrom;
}
}
public string sqlReflexive(string sFieldList)
{
string sSelect = "SELECT " + sFieldList +
" FROM " + sqlFrom + ", " + sqlReflexiveFrom + " where ";
CTrace.i().vWriteLn(ENMessage.DbS, "sSelect = " + sSelect);
if (sAddWhere() != null)
{
sSelect += sAddWhere();
}
if (sqlGetIndexJoin(REFLEXIVE_PREFIXE) != null)
{
sSelect += " and ";
sSelect += sqlGetIndexJoin(REFLEXIVE_PREFIXE);
}
CTrace.i().vWriteLn(ENMessage.DbS, "sSelect = " + sSelect);
return sSelect;
}
public ec dGetReflexiveSelect(out ArrayList oOutputArray)
{
return dGetSelect(sqlReflexive(sGetFieldList), out oOutputArray);
}
public string csDumpReflexiveTable()
{
return csDump(sqlReflexive("*"));
}
public bool bAddReflexiveWhere(string sPrefixe, string sColumnName, int dValue)
{
bAddWhere(sPrefixe, sColumnName, dValue);
return bAddWhere(REFLEXIVE_PREFIXE + "_" + sPrefixe, sColumnName, ENSQLRelation.neq, dValue);
}
}
///----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///----------------------------------------------------------------------------------------------------------------------------------------------
public class CDbTableView : CDbView
{
public CDbTableView(string sPrefixe, CDbSTable oTable)
: base(oTable.sDatabaseName)
{
m_sPrefixe = sPrefixe;
m_oTable = oTable;
m_oFieldNameArrayList = new ArrayList();
}
public CDbSTable oGetTable
{
get
{
return m_oTable;
}
}
public override bool bIsTableExist()
{
return m_oTable.IsTableExist;
}
CDbSTable m_oTable;
string m_sPrefixe;
ArrayList m_oFieldNameArrayList;
public override void vResetSelect()
{
m_dColPos = 0;
m_oFieldNameArrayList.Clear();
m_oWhereArrayList.Clear();
m_oOrderByArrayList.Clear();
}
public override string sDatabaseName
{
get
{
return m_oTable.sDatabaseName;
}
}
public override int dGetDisplayFieldCount
{
get
{
return m_oFieldNameArrayList.Count;
}
}
public override STRDisplayColumn GetFieldName(int i)
{
return (STRDisplayColumn)m_oFieldNameArrayList[i];
}
public override string sqlFrom
{
get
{
return m_oTable.Name + " " + m_sPrefixe;
}
}
public override string sqlReflexiveFrom
{
get
{
return m_oTable.Name + " " + REFLEXIVE_PREFIXE + '_' + m_sPrefixe;
}
}
public string sqlPrefixe
{
get
{
return m_sPrefixe == "" ? null : m_sPrefixe;
}
}
public override string sGetMasterTableName
{
get
{
return m_oTable.Name;
}
}
public override string sqlWhere
{
get
{
if (m_oWhereArrayList.Count == 0) return null;
return sqlConcat(m_oWhereArrayList, AND);
}
}
public override string sqlOrderBy
{
get
{
if (m_oOrderByArrayList.Count == 0) return null;
return sqlConcat(m_oOrderByArrayList, ", ");
}
}
public override void vCleanAllData()
{
m_oTable.dDropTable();
}
public void vAddColumn(string strFieldName, string strType)
{
m_oTable.vAddColumn(strFieldName, strType, false);
}
public override string sqlSelect(string sPrefixe, string sColumn, string sWhere)
{
if (this.sqlPrefixe == sPrefixe)
{
return "select " + this.sqlPrefixe + "." + sColumn + " from " + this.sqlFrom + " where " + sWhere;
}
return null;
}
public override bool bAddDisplayColumn(string sPrefixe, STRDisplayColumn oColumnName)
{
if (this.sqlPrefixe == sPrefixe)
{
oColumnName.sColumnName = sAddPrefixe(oColumnName.sColumnName, sPrefixe, '.');
oColumnName.bIsReflexive = false;
m_oFieldNameArrayList.Add(oColumnName);
return true;
}
else if (REFLEXIVE_PREFIXE + '_' + this.sqlPrefixe == sPrefixe)
{
oColumnName.sColumnName = sAddPrefixe(oColumnName.sColumnName, sPrefixe, '.');
oColumnName.bIsReflexive = true;
m_oFieldNameArrayList.Add(oColumnName);
return true;
}
return false;
}
public override string sGetTypeOf(string sFieldName)
{
for(int i=0; i < m_oFieldNameArrayList.Count; i++) {
if (sFieldName == ((STRDisplayColumn)m_oFieldNameArrayList[i]).sColumnName)
{
return this.m_oTable. sGetTypeOf(((STRDisplayColumn)m_oFieldNameArrayList[i]).sColumnName);
}
}
return null;
}
/*
public override bool bAddDisplayDateColumn(string sPrefixe)
{
if (m_oTable.IsField(DATE_FIELD))
{
STRDisplayColumn oDisplayColumn = new STRDisplayColumn();
oDisplayColumn.sColumnName = DATE_FIELD;
oDisplayColumn.dColPos = m_dColPos;
m_dColPos++;
return bAddDisplayColumn(sPrefixe, oDisplayColumn);
}
return false;
}*/
public override bool bAddWhere(string sPrefixe, string sColumnName, ENSQLRelation enRelation, string sValue)
{
// EPAssert(sqlPrefixe() == sPrefixe, sPrefixe + " is bot correct for table " + NAME_FIELD);
if (sqlPrefixe == sPrefixe || REFLEXIVE_PREFIXE + '_' + sqlPrefixe == sPrefixe)
{
if (IsUsed(sValue))
{
if (enRelation == ENSQLRelation.like)
{
m_oWhereArrayList.Add(sPrefixe + '.' + sColumnName + " like%" + m_oTable.FormatValue(sColumnName, sValue) + '%');
}
/* else if (enRelation == ENSQLRelation.EqOrNotExist)
{
string sSqlNotExist = "select " + sPrefixe + "." + ENTITY_CLASS_INDEX_FIELD + this.sqlFrom + this.sqlGetIndexJoin + AND
+ GetSlaveTable.sFieldEqual(ENTITY_CLASS_INDEX_FIELD, (int)iValueArray.dClass);
string sSql = "not exists(" + sSqlNotExist + ") or (" + m_oTable.sFieldEqual(ENTITY_CLASS_INDEX_FIELD, (int)iValueArray.dClass)
+ AND + GetSlaveTable.sFieldEqual(ENTITY_INDEX_FIELD, (int)iValueArray.iInstance);
m_oWhereArrayList.Add(sPrefixe + '.' + sColumnName + " like%" + m_oTable.FormatValue(sColumnName, sValue) + '%');
}*/
else
{
m_oWhereArrayList.Add(sPrefixe + '.' + sColumnName + sGetRelation(enRelation) + m_oTable.FormatValue(sColumnName, sValue));
}
}
return true;
}
// CTrace.i().vWriteLn(ENMessage.DbS,"m_oWhereArrayList = " + m_oWhereArrayList.Count);
return false;
}
public override bool bAddWhere(string sPrefixe1, string sColumnName1, ENSQLRelation enRelation, string sPrefixe2, string sColumnName2)
{
// EPAssert(sqlPrefixe() == sPrefixe, sPrefixe + " is bot correct for table " + NAME_FIELD);
if (sqlPrefixe == sPrefixe1 || (REFLEXIVE_PREFIXE + '_' + sqlPrefixe == sPrefixe1) )
{
m_oWhereArrayList.Add(sPrefixe1 + "." + sColumnName1 + sGetRelation(enRelation) + sPrefixe2 + "." + sColumnName2);
}
return true;
}
public override bool bAddWhere(string sPrefixe, string sSql)
{
if (this.sqlPrefixe == sPrefixe)
{
CTrace.i().vWriteLn(ENMessage.DbView, " sSql=" + sSql);
m_oWhereArrayList.Add(sSql);
return true;
}
return false;
}
/*
public override bool bAddValueOrSetWhereCondition(string sPrefixe, string sColumn, string sValue)
{
string sSqlNotExist = GetSlaveTable.sFieldEqual(sColumn, sValue );
string sSqlExactSql = "(" + GetSlaveTable.sFieldEqual(ENTITY_CLASS_INDEX_FIELD, (int)iValueArray.dClass)
+ AND + GetSlaveTable.sFieldEqual(ENTITY_INDEX_FIELD, (int)iValueArray.iInstance);
return bAddWhere(" not exists(" + "select " + sPrefixe + "." + sColumn +
this.sqlFrom + " where " + GetSlaveTable.sFieldEqual(sColumn, sValue) + ") " + OR + sSqlExactSql);
}
public override bool bAddNotExistWhereCondition(string sPrefixe, string sColumn)
{
string sSqlNotExist = GetSlaveTable.sFieldEqual(ENTITY_CLASS_INDEX_FIELD, (int)iValueArray.dClass);
string sSql = " not exists(" + sSqlNotExist + ") ";
string sSqlExactSql = "(" + GetSlaveTable.sFieldEqual(ENTITY_CLASS_INDEX_FIELD, (int)iValueArray.dClass)
+ AND + GetSlaveTable.sFieldEqual(ENTITY_INDEX_FIELD, (int)iValueArray.iInstance);
return bAddWhere(" not exists(" + "select " + sPrefixe + "." + ENTITY_CLASS_INDEX_FIELD +
sSqlNotExist += this.sqlFrom + this.sqlGetIndexJoin(sPrefixe) + AND
+ sSqlNotExist + ") " + OR + sSqlExactSql);
}
public override bool bAddExistWhereCondition(string sPrefixe, string sColumn)
{
}*/
public override bool bAddOrderBy(string sPrefixe, string sColumnName)
{
// EPAssert(sqlPrefixe() == sPrefixe, sPrefixe + " is bot correct for table " + NAME_FIELD);
if (sqlPrefixe == sPrefixe || REFLEXIVE_PREFIXE + '_' + sqlPrefixe == sPrefixe)
{
m_oOrderByArrayList.Add(sPrefixe + "." + sColumnName);
return true;
}
// CTrace.i().vWriteLn(ENMessage.DbS,"m_oWhereArrayList = " + m_oWhereArrayList.Count);
return false;
}
}
///----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///----------------------------------------------------------------------------------------------------------------------------------------------
public abstract class CDbView : CDbConnectionBase
{
public CDbView(string sDatabaseName)
{
m_oWhereArrayList = new ArrayList();
m_oOrderByArrayList = new ArrayList();
m_dColPos = 0;
}
protected int m_dColPos;
protected ArrayList m_oWhereArrayList, m_oOrderByArrayList;
public abstract void vCleanAllData();
public bool bAddWhere(string sPrefixe, string sColumnName, int dValue)
{
return bAddWhere( sPrefixe, sColumnName, ENSQLRelation.eq, dValue);
}
public bool bAddWhereOrganisation(string sPrefixe, SIndex oOrganisationIndex)
{
bool bRet;
bRet = bAddWhere(sPrefixe, ORGANISATION_INDEX_FIELD, oOrganisationIndex.dIndex);
if (IsUsed(oOrganisationIndex))
{
bRet = bAddWhere(sPrefixe, ORGANISATION_SUB_INDEX_FIELD, oOrganisationIndex.dSubIndex);
}
return bRet;
}
public bool bAddWhere(string sPrefixe, string sColumnName, ENSQLRelation enRelation, int dValue)
{
return bAddWhere( sPrefixe, sColumnName, enRelation, dValue.ToString() );
}
/*
public bool bAddWhere(string sPrefixe, string sColumnName, ENSQLRelation enRelation, CEntityArray oEntityArray)
{
bool bRet = true;
for (int i = 0; i < oEntityArray.Length; i++)
{
if (IsUsed(oEntityArray[i]))
{
bRet = bAddWhere(sPrefixe, sColumnName, enRelation, oEntityArray[i].ToString());
}
}
return bRet;
}
*/
public bool bAddWhere(string sPrefixe, string sColumnName, ENSQLRelation enRelation, P dValue)
{
if (IsUsed(dValue))
{
return bAddWhere(sPrefixe, sColumnName, enRelation, ((int)dValue).ToString());
}
return true;
}
public abstract bool bIsTableExist();
public bool bAddWhere(string sPrefixe, string sColumnName, string sValue)
{
return bAddWhere( sPrefixe, sColumnName, ENSQLRelation.eq, sValue);
}
public abstract bool bAddWhere(string sPrefixe, string sColumnName, ENSQLRelation enRelation, string sValue);
public abstract bool bAddWhere(string sPrefixe1, string sColumnName1, ENSQLRelation enRelation, string sPrefixe2, string sColumnName2);
public abstract bool bAddOrderBy(string sPrefixe, string sColumnName);
public abstract string sqlOrderBy
{
get;
}
public abstract void vResetSelect();
public bool bAddWhere(string sPrefixe, string sColumnName, int[] dValueArray)
{
if (dValueArray.Length ==0) return true;
bool bRet=false;
for (int i = 0; i < dValueArray.Length; i++)
{
CTrace.i().vWriteLn(ENMessage.DbS,sPrefixe + "." + sColumnName + "=" + dValueArray[i]);
EPAssert(dValueArray[i] != NOT_USED, " Wrong values");
bRet = bAddWhere(sPrefixe, sColumnName, ENSQLRelation.eq, dValueArray[i]);
}
return bRet;
}
public abstract string sqlSelect(string sPrefixe, string sColumn, string sWhere);
public string sqlExist(string sPrefixe, string sColumn, string sWhere)
{
return " exists(" + sqlSelect(sPrefixe, sColumn, sWhere) + ") ";
}
public string sqlNotExist(string sPrefixe, string sColumn, string sWhere)
{
return " not exists(" + sqlSelect(sPrefixe, sColumn, sWhere) + ") ";
}
public abstract bool bAddWhere(string sPrefixe, string sWhere);
/* public abstract bool bAddNotExistWhereCondition(string sPrefixe, string sColumn);
public abstract bool bAddExistWhereCondition(string sPrefixe, string sColumn);
public abstract bool bAddValueOrSetWhereCondition(string sPrefixe, string sColumn, string sValue);
*/
/*
public bool bAddHeadWhere(string sPrefixe, CEntityArray oEntityArray)
{
bool bRet = bAddWhere(sPrefixe, LANGUAGE_FIELD, ENSQLRelation.eq, oEntityArray.Language);
bRet = bAddWhere(sPrefixe, META_CLASS_FIELD, ENSQLRelation.eq, oEntityArray.MetaClass);
bRet = bAddWhere(sPrefixe, CLASS_FIELD, ENSQLRelation.eq, oEntityArray.Class);
bRet = bAddWhere(sPrefixe, NAME_FIELD, ENSQLRelation.eq, oEntityArray.Name);
return bRet;
}*/
public bool bAddWhere(string sPrefixe, SIndex oIndex)
{
return bAddWhere(sPrefixe, ENSQLRelation.eq, oIndex);
}
public bool bAddWhere(string sPrefixe, ENSQLRelation enRelation, SIndex oIndex)
{
bAddWhere(sPrefixe, MASTER_INDEX_FIELD, enRelation, oIndex.dIndex);
return bAddWhere(sPrefixe, MASTER_SUB_INDEX_FIELD, enRelation, oIndex.dSubIndex);
}
public abstract string sqlWhere
{
get;
}
protected string sqlConcat(ArrayList oFieldNameArray, string sSeparation)
{
string sReturn = oFieldNameArray[0].ToString();
for (int i = 1; i < oFieldNameArray.Count; i++)
{
sReturn += sSeparation + oFieldNameArray[i].ToString();
}
return sReturn;
}
protected virtual string sAddWhere()
{
string sWhere = sqlWhere;
if (sqlGetIndexJoin(null) != null)
{
if (sWhere != null && sWhere.Length > 0) sWhere += AND;
sWhere += sqlGetIndexJoin(null);
}
// CTrace.i().vWriteLn(ENMessage.DbS,"sAddWhere() sWhere = " + sWhere);
return sWhere;
}
public virtual CDbView GetMasterView
{
get
{
return this;
}
}
public struct STRDisplayColumn
{
public string sColumnName;
public int dColPos;
public string sColumnNameWithPrefixe;
public bool bIsReflexive;
}
public bool bAddDisplayColumn(string sSuffix, string sColumnName)
{
STRDisplayColumn oDisplayColumn = new STRDisplayColumn();
oDisplayColumn.sColumnName = sColumnName;
oDisplayColumn.dColPos = m_dColPos;
m_dColPos++;
return bAddDisplayColumn(sSuffix, oDisplayColumn);
}
public bool bAddDisplayReflexiveColumn(string sSuffix, string sColumnName)
{
return bAddDisplayColumn(REFLEXIVE_PREFIXE + '_' + sSuffix, sColumnName);
}
public abstract string sGetTypeOf(string sFieldName);
public abstract bool bAddDisplayColumn(string sSuffix, STRDisplayColumn sColumnName);
public abstract string sqlFrom
{
get;
}
public abstract string sGetMasterTableName
{
get;
}
public virtual string sqlGetIndexJoin(string sPrefixe)
{
return null;
}
public abstract string sqlReflexiveFrom
{
get;
}
public abstract int dGetDisplayFieldCount
{
get;
}
public abstract STRDisplayColumn GetFieldName(int i);
public string sGetFieldNameFromPosition(int dCol)
{
for (int i = 0; i < dGetDisplayFieldCount; i++)
{
if (GetFieldName(i).dColPos == dCol)
{
return GetFieldName(i).sColumnName;
}
}
return null;
}
public string sGetFieldList
{
get
{
if (dGetDisplayFieldCount <= 0) return null;
string sFieldList = sGetFieldNameFromPosition(0);
for (int i = 1; i < dGetDisplayFieldCount; i++)
{
sFieldList += ", " + sGetFieldNameFromPosition(i);
}
return sFieldList;
}
}
public virtual string sql(string sFieldList)
{
string sSelect = "SELECT " + sFieldList + " FROM " + sqlFrom;
string sWhere = sAddWhere();
if (sWhere != null)
{
sSelect += " where " + sWhere;
}
string sOrderBy = sqlOrderBy;
if (sOrderBy != null)
{
sSelect += " order by " + sOrderBy;
}
return sSelect;
}
public string sql()
{
return sql(sGetFieldList);
}
public string sqlCount()
{
return sql("count(*)");
}
public ec dGetSelect(out ArrayList oOutputArray)
{
// CTrace.i().vWriteLn(ENMessage.DbS,"sql(sGetFieldList) = " + sql(sGetFieldList));
return dGetSelect(sql(sGetFieldList), out oOutputArray);
}
public ec dGetSelect(int dMaxRecord, out ArrayList oOutputArray)
{
// CTrace.i().vWriteLn(ENMessage.DbS,"sql(sGetFieldList) = " + sql(sGetFieldList));
if (IsUsed(dMaxRecord))
{
return dGetSelect(sql(" top " + dMaxRecord + ' ' + sGetFieldList), out oOutputArray);
}
else
{
return dGetSelect(sql(sGetFieldList), out oOutputArray);
}
}
protected ec dGetSelect( string sql, out ArrayList oOutputArray)
{
CDbConnection oConnection = GetConnection();
oConnection.Open();
CTrace.i().vWriteLn(ENMessage.DbS,sql);
if (oConnection.SelectCommand(sql) == false)
{
oOutputArray = null;
return ec.ST_DATABASE_SELECTION_ERROR;
}
oOutputArray = new ArrayList();
while (oConnection.Read())
{
object[] oValueArray = new object[dGetDisplayFieldCount];
oConnection.Reader.GetValues(oValueArray);
oOutputArray.Add(oValueArray);
}
oConnection.Close();
if (oOutputArray.Count == 0)
{
oOutputArray = null;
return ec.ST_SQL_THE_RETURN_ROW_SET_IS_EMPTY;
}
return ec.ST_SUCCEED;
}
protected object[] ReplaceWithType(string[] sFieldName, object[] oObjs)
{
object[] oObjectArray = new object[oObjs.Length];
for (int i = 0; i < oObjs.Length; i++)
{
if (this.sGetTypeOf(sFieldName[i]) == ENTITY_TYPE)
{
oObjectArray[i] = (P)oObjs[i];
}
else
{
oObjectArray[i] = oObjs[i];
}
}
return oObjectArray;
}
public ec dGetRecordCount(string sql, out int dCount)
{
dCount = 0;
CDbConnection oConnection = GetConnection();
oConnection.Open();
if (oConnection.SelectCommand(sql) == false)
{
return ec.ST_DATABASE_SELECTION_ERROR;
}
CTrace.i().vWriteLn(ENMessage.DbS,sql);
while (oConnection.Read())
{
dCount = oConnection.Reader.GetInt32(0);
}
oConnection.Close();
return ec.ST_SUCCEED;
}
public string csDumpTable()
{
return csDump(sql("*"));
}
public string csDump(string sql)
{
CDbConnection oConnection = GetConnection();
oConnection.Open();
CTrace.i().vWriteLn(ENMessage.DbS,"sql() = " + sql);
oConnection.SelectCommand(sql);
object[] oValues = new object[dGetDisplayFieldCount];
StringBuilder oReport = new StringBuilder();
while (oConnection.Read())
{
int dCount = oConnection.Reader.GetValues(oValues);
for (int i = 0; i < dCount; i++)
{
oReport.Append(oValues[i]);
oReport.Append(',');
}
oReport.Append('\n');
}
oConnection.Close();
return oReport.ToString();
}
}
///----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///----------------------------------------------------------------------------------------------------------------------------------------------
public abstract class CDbNestedSubQueryView : CDb2JoinView
{
public CDbNestedSubQueryView(CDbView oMasterView, CDbView oNestedView)
: base(oMasterView, oNestedView)
{
m_sqlMasterColumnSubQueryLink = m_sqlSlaveColumnSubQueryLink = null;
}
public override string sql(string sFieldList)
{
CTrace.i().vWriteLn(ENMessage.DbS,"Slave View = " + m_oSlaveView.sql(m_sqlSlaveColumnSubQueryLink));
string sSelect = "SELECT " + sFieldList + " FROM " + sqlFrom + " where ";
sSelect += " (" + m_sqlMasterColumnSubQueryLink + ") in ( " +
m_oSlaveView.sql(m_sqlSlaveColumnSubQueryLink) + ") ";
CTrace.i().vWriteLn(ENMessage.DbS,"sSelect = " + sSelect);
if (sAddWhere() != null)
{
sSelect += AND;
sSelect += sAddWhere();
}
CTrace.i().vWriteLn(ENMessage.DbS,"sSelect = " + sSelect);
return sSelect;
}
public override string sqlFrom
{
get
{
return m_oMasterView.sqlFrom;
}
}
string m_sqlMasterColumnSubQueryLink, m_sqlSlaveColumnSubQueryLink;
public override void vAddLinkIndex(string sMasterPrefixe, string sMasterFieldName, string sSlavePrefixe, string sSlaveFieldName)
{
if (m_sqlMasterColumnSubQueryLink != null)
{
m_sqlMasterColumnSubQueryLink += ", ";
}
m_sqlMasterColumnSubQueryLink += sMasterPrefixe + "." + sMasterFieldName;
if (m_sqlSlaveColumnSubQueryLink != null)
{
m_sqlSlaveColumnSubQueryLink += ", ";
}
m_sqlSlaveColumnSubQueryLink += sSlavePrefixe + "." + sSlaveFieldName;
}
public override bool bAddWhere(string sPrefixe, string sColumnName, ENSQLRelation enRelation, string sValue)
{
if (m_oMasterView.bAddWhere(sPrefixe, sColumnName, enRelation, sValue))
{
return true;
}
return false;
}
public override string sqlWhere
{
get
{
string sWhere = null;
if (m_oWhereArrayList.Count != 0)
{
sWhere += sqlConcat(m_oWhereArrayList, AND);
}
if (m_oMasterView.sqlWhere != null)
{
if (sWhere != null) sWhere += AND;
sWhere += m_oMasterView.sqlWhere;
}
return sWhere;
}
}
public override string sqlOrderBy
{
get
{
string sOrderBy = null;
if (m_oOrderByArrayList.Count != 0)
{
sOrderBy += sqlConcat(m_oOrderByArrayList, ",");
}
if (m_oMasterView.sqlOrderBy != null)
{
if (sOrderBy != null) sOrderBy += ", ";
sOrderBy += m_oMasterView.sqlOrderBy;
}
return sOrderBy;
}
}
public override bool bAddDisplayColumn(string sSuffix, STRDisplayColumn sColumnName)
{
if (m_oMasterView.bAddDisplayColumn(sSuffix, sColumnName))
{
return true;
}
else if (m_oSlaveView.bAddDisplayColumn(sSuffix, sColumnName))
{
return true;
}
return false;
}
public override int dGetDisplayFieldCount
{
get
{
return m_oMasterView.dGetDisplayFieldCount;
}
}
public override STRDisplayColumn GetFieldName(int i)
{
if (i >= 0 && i < m_oMasterView.dGetDisplayFieldCount)
{
return m_oMasterView.GetFieldName(i);
}
else
{
return new STRDisplayColumn();
}
}
public override string sqlGetIndexJoin(string sPrefixe)
{
string sqlJoin = null;
if (m_oMasterView.sqlGetIndexJoin(sPrefixe) != null)
{
if (sqlJoin != null) sqlJoin += AND;
sqlJoin += m_oMasterView.sqlGetIndexJoin(sPrefixe);
}
return sqlJoin;
}
}
///----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///----------------------------------------------------------------------------------------------------------------------------------------------
public class CDbReflexiveTable : CDbSTable
{
public CDbReflexiveTable(string strTableName, string strDatabaseName)
: base(strTableName, strDatabaseName)
{
}
public override void vAddColumn(string strFieldName, string strType, bool bPrimaryKey)
{
base.vAddColumn(strFieldName, strType, bPrimaryKey);
base.vAddColumn(REFLEXIVE + strFieldName, strType, bPrimaryKey);
}
public const string REFLEXIVE = "R";
public override ec dGetSelect(string strWhere, out ArrayList oOutputArray, params string[] sFieldNameArray)
{
ArrayList oOutputArray1, oOutputArray2;
ec dRC1 = base.dGetSelect(strWhere, out oOutputArray1, sFieldNameArray);
ec dRC2 = base.dGetSelect(sAddPrefixe(strWhere, REFLEXIVE, '_'), out oOutputArray2, sAddPrefixe(sFieldNameArray, REFLEXIVE,
'_'));
oOutputArray = new ArrayList(oOutputArray1.Count + oOutputArray2.Count);
oOutputArray.AddRange(oOutputArray1);
oOutputArray.AddRange(oOutputArray2);
return dRC1 == ec.ST_SUCCEED ? dRC2 : dRC1;
}
public override ec dGetRecordCount(string sWhere, out int dCount)
{
ec dRet = ec.ST_SUCCEED;
int dCount1; dRet = base.dGetRecordCount(sWhere, out dCount1);
if (dCount1 <= 0)
{
dCount = dCount1;
}
else
{
int dCount2; dRet= base.dGetRecordCount(sAddPrefixe(sWhere, REFLEXIVE, '_'), out dCount2);
if (dCount2 <= 0)
{
dCount = dCount2;
}
else
{
dCount = dCount1 + dCount2;
}
}
return dRet;
}
public override object GetValue(string strColumnValue, string strWhere)
{
if (!IsTableExist) return null;
object oReturn = base.GetValue(strColumnValue, strWhere);
if (oReturn == null || oReturn.ToString().Length == 0)
{
oReturn = base.GetValue(strColumnValue, sAddPrefixe(strWhere, REFLEXIVE, '_'));
}
return oReturn;
}
public void vAddValue(string sValue1, string sValue2)
{
base.vAddValue(sValue1);
base.vAddValue(sValue2);
}
public void vAddValue(int dValue1, int dValue2)
{
base.vAddValue(dValue1);
base.vAddValue(dValue2);
}
public override ec dDelete(string sWhere)
{
return dDelete(sWhere + " or " + sAddPrefixe(sWhere, REFLEXIVE, '_'));
}
}
///----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///----------------------------------------------------------------------------------------------------------------------------------------------
public class CDbSTable : CDbTable
{
public CDbSTable(string strTableName, string strDatabaseName)
: base(strTableName)
{
m_strDatabaseName = strDatabaseName;
m_oFieldMap = new ArrayList();
}
// ENBoolean m_ebIsTableExist
string m_strDatabaseName;
// protected virtual void vAddFirstColumns() { }
public override string sDatabaseName
{
get
{
return m_strDatabaseName;
}
}
public override bool SetName(string strTableName)
{
Clear();
m_strTableName = ConvertToTableName(strTableName);
// CTrace.i().vWriteLn(ENMessage.DbS,"SetName = " + strTableName + " " + m_bIsTableExist);
m_strWhereKey = null;
m_bValid = true;
m_ebIsTableExist = ENBoolean.Unknown;
return true;
}
public void vAddAutoIndexColumn(string strIndexColumn, string strNameColumn)
{
m_strIndexColumn = strIndexColumn;
m_strNameColumn = strNameColumn;
vAddColumn(strIndexColumn, "Auto", true);
vAddColumn(strNameColumn, "String 50", false);
}
/* public string sFieldEqual(string strField, string strValue)
{
return strField + " = " + FormatValue(strField, strValue);
}
*/
public int dFindIndex(string strName)
{
return this.GetInteger(m_strIndexColumn, this.sFieldEqual(m_strNameColumn, strName));
}
public override ec dCreateIndex()
{
ec dRC = base.dCreatePrimaryIndex();
if (m_strNameColumn != null)
{
dRC=dCreateIndex(2, m_strNameColumn);
}
return dRC;
}
public ec dResetDate(string sWhere)
{
int dDateIndex = IndexOf(DATE_FIELD);
if (dDateIndex >= 0)
{
return dUpdate(DATE_FIELD, DateTime.UtcNow.ToString(), sWhere);
}
return ec.ST_SQL_NO_DATE_FIELD;
}
string m_strIndexColumn, m_strNameColumn;
public int dGetNext(string sColumnName, string sWhere)
{
int dNewValue = dGetMax(sColumnName, sWhere);
if (IsNotUsed(dNewValue))
{
dNewValue = 1;
}
else
{
dNewValue++;
}
return dNewValue;
}
public bool bGetSelect(string strFieldName1, string strFieldName2, string strWhere, out int nValue1, out int nValue2)
{
CDbConnection oConnection = GetConnection();
oConnection.Open();
nValue1 = NOT_USED;
nValue2 = NOT_USED;
string strTableNameSelect = "SELECT " + strFieldName1 + "," + strFieldName2 + " FROM " + m_strTableName;
if (strWhere != null && strWhere.Length > 0)
{
strTableNameSelect += " where " + strWhere;
}
CDbConnectionManagement.Instance().ResetRetryCounter();
if (oConnection.SelectCommand(strTableNameSelect) == false)
{
return false;
}
CTrace.i().vWriteLn(ENMessage.DbS,strTableNameSelect);
if (oConnection.Read() == false)
{
CTrace.i().vWriteLn(ENMessage.sqlError, "\n###1There are nothing to read for the table symbol for the condition " + strWhere
+ "###\n");
}
else
{
nValue1 = oConnection.Reader.GetInt32(0);
nValue2 = oConnection.Reader.GetInt32(1);
}
oConnection.Close();
return true;
}
public string sFieldContains(string strField, CEntityArray oEntityArray)
{
string sqlResult = null;
for (int i = 0; i < oEntityArray.Length; i++)
{
if (i >= 1) sqlResult += AND;
sqlResult += sFieldContains(strField, oEntityArray[i]);
}
return sqlResult;
}
public string sFieldContains(string strField, SEntity oEntity)
{
return strField + " like %" + FormatValue(strField, oEntity.ToString() ) + '%';
}
public bool bGetSelect(string strFieldName1, string strFieldName2, string strFieldName3, string strWhere, out int dValue1,
out int dValue2,
out bool bValue3)
{
CDbConnection oConnection = GetConnection();
oConnection.Open();
dValue2 = dValue1 = NOT_USED;
bValue3 = false;
string strTableNameSelect = "SELECT " + strFieldName1 + "," + strFieldName2 + "," + strFieldName3 +
" FROM " + m_strTableName;
if (strWhere != null && strWhere.Length > 0)
{
strTableNameSelect += " where " + strWhere;
}
if (oConnection.SelectCommand(strTableNameSelect) == false)
{
return false;
}
CTrace.i().vWriteLn(ENMessage.DbS,strTableNameSelect);
if (oConnection.Read() == false)
{
CTrace.i().vWriteLn(ENMessage.sqlError, "\n###2There are nothing to read for the table symbol for the condition " + strWhere
+ "###\n");
}
else
{
dValue1 = oConnection.Reader.GetInt32(0);
dValue2 = oConnection.Reader.GetInt32(1);
bValue3 = oConnection.Reader.GetBoolean(2);
}
oConnection.Close();
return true;
}
public bool bGetSelect(string strFieldName1, string strFieldName2, string strWhere, out int nValue1, out string strValue2)
{
CDbConnection oConnection = GetConnection();
oConnection.Open();
nValue1 = NOT_USED;
strValue2 = null;
string strTableNameSelect = "SELECT " + strFieldName1 + "," + strFieldName2 + " FROM " + m_strTableName;
if (strWhere != null && strWhere.Length > 0)
{
strTableNameSelect += " where " + strWhere;
}
CDbConnectionManagement.Instance().ResetRetryCounter();
if (oConnection.SelectCommand(strTableNameSelect) == false)
{
return false;
}
CTrace.i().vWriteLn(ENMessage.DbS,strTableNameSelect);
if (oConnection.Read() == false)
{
CTrace.i().vWriteLn(ENMessage.sqlError, "\n###3There are nothing to read for the table symbol for the condition " + strWhere
+ "###\n");
}
else
{
nValue1 = oConnection.Reader.GetInt32(0);
strValue2 = oConnection.Reader.GetString(1);
}
oConnection.Close();
return true;
}
public virtual ec dGetSelect(string strWhere, out ArrayList oOutputArray, params string[] strFieldNameArray)
{
if (IsTableExist == false)
{
oOutputArray = null;
CTrace.i().vWriteLn(ENMessage.sqlWarning, this.m_strTableName + " does not exists");
return ec.ST_SQL_TABLE_NAME_UNKNOWN;
}
EPAssert(strFieldNameArray.Length >= 1, "should not be null");
if (strFieldNameArray.Length <= 0)
{
oOutputArray = null;
return ec.ST_BUG_INPUT_ARRAY_EMPTY;
}
string sFieldNameList = strFieldNameArray[0];
for (int i = 1; i < strFieldNameArray.Length; i++)
{
sFieldNameList += ", " + strFieldNameArray[i];
}
CDbConnection oConnection = GetConnection();
oConnection.Open();
oOutputArray = new ArrayList();
string strTableNameSelect = "SELECT " + sFieldNameList + " FROM " + m_strTableName;
if (strWhere != null && strWhere.Length > 0)
{
strTableNameSelect += " where " + strWhere;
}
CDbConnectionManagement.Instance().ResetRetryCounter();
if (oConnection.SelectCommand(strTableNameSelect) == false)
{
return ec.ST_DATABASE_SELECTION_ERROR;
}
CTrace.i().vWriteLn(ENMessage.sqlTrace, "SQL=" +strTableNameSelect);
while (oConnection.Read())
{
object[] oValueArray = new object[strFieldNameArray.Length];
oConnection.Reader.GetValues(oValueArray);
oOutputArray.Add(this.ReplaceWithType(strFieldNameArray, oValueArray));
CTrace.i().vWriteLn(ENMessage.sqlTrace, "Read=" + FromObjectToString(this.ReplaceWithType(strFieldNameArray, oValueArray))
);
}
oConnection.Close();
if (oOutputArray.Count == 0)
{
oOutputArray = null;
}
return ec.ST_SUCCEED;
}
public virtual ec dGetRecordCount(string sWhere, out int nCount)
{
nCount = 0;
if (IsTableExist == false) return ec.ST_SQL_TABLE_NAME_UNKNOWN;
CDbConnection oConnection = GetConnection();
string strTableNameSelect = "SELECT COUNT(*) FROM " + m_strTableName;
CTrace.i().vWriteLn(ENMessage.sqlTrace, "SQL = " + strTableNameSelect + "\n");
if (sWhere != null)
{
strTableNameSelect += " where " + sWhere;
}
oConnection.Open();
oConnection.SelectCommand(strTableNameSelect);
while (oConnection.Read())
{
nCount = oConnection.Reader.GetInt32(0);
}
oConnection.Close();
return ec.ST_SUCCEED;
}
public ec bGetSelect(string strFieldName1, string strFieldName2, string strFieldName3, string strDateField, string strWhere,
out int nValue1, out int nValue2, out int nValue3, out DateTime oDate)
{
CDbConnection oConnection = GetConnection();
oConnection.Open();
nValue1 = nValue2 = nValue3 = NOT_USED; oDate = NOT_USED_DATE;
string strTableNameSelect = "SELECT " + strFieldName1 + "," + strFieldName2 + "," + strFieldName3 + "," + strDateField + "
FROM " + m_strTableName;
if (strWhere != null && strWhere.Length > 0)
{
strTableNameSelect += " where " + strWhere;
}
CDbConnectionManagement.Instance().ResetRetryCounter();
if (oConnection.SelectCommand(strTableNameSelect) == false)
{
return ec.ST_SQL_SELECT_FAILED;
}
CTrace.i().vWriteLn(ENMessage.DbS,strTableNameSelect);
if (oConnection.Read() == false)
{
CTrace.i().vWriteLn(ENMessage.sqlError, "\n###4There are nothing to read for the table symbol for the condition " + strWhere
+ "###\n");
}
else
{
nValue1 = oConnection.Reader.GetInt32(0);
nValue2 = oConnection.Reader.GetInt32(1);
nValue3 = oConnection.Reader.GetInt32(2);
oDate = oConnection.Reader.GetDateTime(3);
}
oConnection.Close();
return ec.ST_SUCCEED;
}
public int dGetIntegerSum(string strFieldName1, string strFieldName2, string strWhere)
{
int nValue1 = 0, nValue2 = 0;
if (bGetSelect(strFieldName1, strFieldName2, strWhere, out nValue1, out nValue2))
{
return nValue1 + nValue2;
}
else
{
return NOT_USED;
}
}
/*
public bool bRollClickUp(string strNumberFieldName, string strPreviousNumberFieldName, string strNumberArchiveFieldName,
string strDateField, TimeSpan oTimeSpan, int nNameIndex)
{
int nClick, nPreviousClick, nArchiveClick;
DateTime oLastUpdatedDate;
if (bGetSelect(strNumberFieldName, strPreviousNumberFieldName, strNumberArchiveFieldName, strDateField, sFieldEqual(NAME_INDEX_FIELD,
nNameIndex),
out nClick, out nPreviousClick, out nArchiveClick, out oLastUpdatedDate))
{
if ((oLastUpdatedDate + oTimeSpan) > DateTime.UtcNow)
{
return false;
}
if (nClick != NOT_USED && nArchiveClick != NOT_USED)
{
nArchiveClick += nPreviousClick;
nPreviousClick = nClick; nClick = 0;
return this.Update(strNumberFieldName, strPreviousNumberFieldName, strNumberArchiveFieldName, strDateField, "", "0", nPreviousClick.ToString(),
nArchiveClick.ToString(), DateTime.UtcNow.ToString(),
"", sFieldEqual(NAME_INDEX_FIELD, nNameIndex));
}
}
return false;
}*/
public void vAddFilter(CCommandFactoryBase.P dEntityClassFilter, string sFieldName)
{
vAddColumn(sFieldName, INTEGER_TYPE, false);
SEntityToField oEntityToField;
oEntityToField.dEntityClass = dEntityClassFilter;
oEntityToField.dFieldIndex = FieldCount - 1;
}
public struct SEntityToField
{
public CCommandFactoryBase.P dEntityClass;
public int dFieldIndex;
}
ArrayList m_oFieldMap;
public int dGetFieldIndex(CCommandFactoryBase.P dEntityClass)
{
for(int i=0; i < m_oFieldMap.Count; i++) {
if ( ((SEntityToField)m_oFieldMap[i]).dEntityClass == dEntityClass) {
return ((SEntityToField)m_oFieldMap[i]).dFieldIndex;
}
}
return NOT_USED;
}
public string sFieldEqual(CCommandFactoryBase.P dEntityClass, CCommandFactoryBase.P dEntity)
{
int dFieldIndex = dGetFieldIndex(dEntityClass);
if (IsUsed(dFieldIndex))
{
return this.sFieldEqual(this.m_oFieldNameList[dFieldIndex].ToString(), dEntity);
}
return null;
}
public string sFieldEqual(string strField, CCommandFactoryBase.P dEntity)
{
return strField + " = " + FormatValue(strField, ((int)dEntity).ToString() );
}
public string sFieldEqual(string strField, char cChar)
{
return strField + " = " + FormatValue(strField, cChar.ToString());
}
public string FieldName(CCommandFactoryBase.P dEntityClass)
{
int dFieldIndex = dGetFieldIndex(dEntityClass);
if (IsUsed(dFieldIndex))
{
return (string)m_oFieldNameList[dFieldIndex];
}
return null;
}
public void vAddValue(SIndex oIndex)
{
vAddValue(oIndex.dIndex);
vAddValue(oIndex.dSubIndex);
}
public void vAddValue(SEntity oEntity)
{
vAddValue(oEntity.dClass);
vAddValue(oEntity.sql);
}
/* public string sql(CEntityArray oEntityArray)
{
string sSql = sFieldEqual(META_CLASS_FIELD, oEntityArray.MetaClass);
if (IsUsed(oEntityArray.Class))
{
sSql += AND + sFieldEqual(CLASS_FIELD, oEntityArray.Class);
}
if (IsUsed(oEntityArray.Name))
{
sSql += AND + sFieldEqual(NAME_FIELD, oEntityArray.Name);
}
if (IsUsed(oEntityArray.Language))
{
sSql += AND + sFieldEqual(LANGUAGE_FIELD, oEntityArray.Language);
}
return sSql;
}
*/
public object Retrieve(string strKey)
{
string strSqlWhere = strKey;
byte[] binValue = (byte[])GetValue(VALUE_FIELD, strSqlWhere);
if (binValue == null)
{
return null;
}
else
{
return Deserialize(binValue);
}
}
public string sqlIsOrganisation(SIndex oOrganisationIndex)
{
if (IsUsed(oOrganisationIndex.dSubIndex))
{
return sFieldEqual(ORGANISATION_INDEX_FIELD, oOrganisationIndex.dIndex) + AND +
sFieldEqual(ORGANISATION_SUB_INDEX_FIELD, oOrganisationIndex.dSubIndex);
}
else
{
return sFieldEqual(ORGANISATION_INDEX_FIELD, oOrganisationIndex.dIndex);
}
}
public string sqlIsMeme(SIndex oIndex)
{
if (IsUsed(oIndex.dSubIndex))
{
return sFieldEqual(MEME_INDEX_FIELD, oIndex.dIndex) + AND +
sFieldEqual(MEME_SUB_INDEX_FIELD, oIndex.dSubIndex);
}
else
{
return sFieldEqual(MEME_INDEX_FIELD, oIndex.dIndex);
}
}
public string sqlIsProfile(SIndex oIndex)
{
if (IsUsed(oIndex.dSubIndex))
{
return sFieldEqual(PROFILE_INDEX_FIELD, oIndex.dIndex) + AND +
sFieldEqual(PROFILE_SUB_INDEX_FIELD, oIndex.dSubIndex);
}
else
{
return sFieldEqual(PROFILE_INDEX_FIELD, oIndex.dIndex);
}
}
public string sqlIs(SIndex oIndex)
{
if (IsUsed(oIndex.dSubIndex))
{
return sFieldEqual(MASTER_INDEX_FIELD, oIndex.dIndex) + AND +
sFieldEqual(MASTER_SUB_INDEX_FIELD, oIndex.dSubIndex);
}
else
{
return sFieldEqual(MASTER_INDEX_FIELD, oIndex.dIndex);
}
}
}
///----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///----------------------------------------------------------------------------------------------------------------------------------------------
/*
public interface IReferenceTable: CDbEPBase
{
void vAddReference(SIndex oContaningDocument, SIndex oReferenceDocument, int dReferenceVersion);
void vRemoveReference(SIndex oContaningDocument, SIndex oReferenceDocument);
void vUpdateReference(SIndex oContaningDocument, SIndex oReferenceDocument, int dReferenceVersion);
}*/
public class CDbMemeArchiveTable : CDbArchiveTable
{
public CDbMemeArchiveTable(string strTableName, string strDatabaseName)
: base(strTableName, strDatabaseName)
{
m_oXRefTable = new CDbSTable(strTableName+VERSION_XREF, sDatabaseName);
m_oXRefTable.vAddColumn(MASTER_INDEX_FIELD, INTEGER_TYPE, true);
m_oXRefTable.vAddColumn(MASTER_SUB_INDEX_FIELD, INTEGER_TYPE, true);
m_oXRefTable.vAddColumn(VERSION_FIELD, INTEGER_TYPE, true);
m_oXRefTable.vAddColumn(REF_INDEX_FIELD, INTEGER_TYPE, false);
m_oXRefTable.vAddColumn(REF_SUB_INDEX_FIELD, INTEGER_TYPE, false);
if (m_oXRefTable.dCreateTable() == ec.ST_SUCCEED)
{
m_oXRefTable.dCreateIndexMultipleField(2, REF_INDEX_FIELD, REF_SUB_INDEX_FIELD);
}
}
CDbSTable m_oXRefTable;
public const string VERSION_XREF = ".xref",
REF_INDEX_FIELD = "[xref_index_field]", REF_SUB_INDEX_FIELD = "[xref_sub_index_field]";
public string sqlIsIndex(SIndex oIndex)
{
return sFieldEqual(MASTER_INDEX_FIELD, oIndex.dIndex) + AND + sFieldEqual(MASTER_SUB_INDEX_FIELD, oIndex.dSubIndex);
}
public string sqlIsIndex(SIndex oIndex, int dVersion)
{
if (IsUsed(dVersion))
{
return m_oXRefTable.sFieldEqual(MASTER_INDEX_FIELD, oIndex.dIndex) + AND + m_oXRefTable.sFieldEqual(MASTER_SUB_INDEX_FIELD,
oIndex.dSubIndex) +
AND + m_oXRefTable.sFieldEqual(VERSION_FIELD, dVersion);
}
else
{
return m_oXRefTable.sFieldEqual(MASTER_INDEX_FIELD, oIndex.dIndex) + AND + m_oXRefTable.sFieldEqual(MASTER_SUB_INDEX_FIELD,
oIndex.dSubIndex);
}
}
public string sqlIsXRefIndex(SIndex oIndex)
{
return m_oXRefTable.sFieldEqual(REF_INDEX_FIELD, oIndex.dIndex) + AND + m_oXRefTable.sFieldEqual(REF_SUB_INDEX_FIELD, oIndex.dSubIndex);
}
public ec dGetSelectLastVersion(SIndex oIndex, out ArrayList oOutputArray, params string[] strFieldNameArray)
{
return base.dGetSelectLastVersion(sqlIsIndex(oIndex), out oOutputArray, strFieldNameArray);
}
public ec dDeleteOldVersion(DateTime oLastVersion, SIndex oIndex)
{
return base.dDeleteOldVersion(oLastVersion, sqlIsIndex(oIndex));
}
public ec dGetSelectLastVersion(int dNumberOfVersion, SIndex oIndex, out ArrayList oOutputArray, params string[] strFieldNameArray)
{
return base.dGetSelectLastVersion(dNumberOfVersion, sqlIsIndex(oIndex), out oOutputArray, strFieldNameArray);
}
public ec dAddReference(SIndex oContainingDocument, SIndex oReferenceDocument, int dReferenceVersion)
{
m_oXRefTable.vAddValue(oReferenceDocument);
m_oXRefTable.vAddValue(dReferenceVersion);
m_oXRefTable.vAddValue(oContainingDocument);
return m_oXRefTable.dInsertIntoTable();
}
public ec dRemoveAllReferences(SIndex oContainingDocument)
{
return m_oXRefTable.dDelete(sqlIsXRefIndex(oContainingDocument));
}
public ec dRemoveReference(SIndex oContainingDocument, SIndex oReferenceDocument)
{
return m_oXRefTable.dDelete(sqlIsIndex(oReferenceDocument, NOT_USED) + AND + sqlIsXRefIndex(oContainingDocument));
}
public ec dUpdateReference(SIndex oContainingDocument, SIndex oReferenceDocument, int dReferenceVersion)
{
return m_oXRefTable.dUpdate(VERSION_FIELD, dReferenceVersion.ToString(), sqlIsIndex(oReferenceDocument, NOT_USED) + AND +
sqlIsXRefIndex(oContainingDocument));
}
}
///----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for DbMultiLanguageTable.
///
///----------------------------------------------------------------------------------------------------------------------------------------------
public class CDbArchiveTable : CDbSTable
{
public CDbArchiveTable(string strTableName, string strDatabaseName)
: base(strTableName, strDatabaseName)
{
m_oArchiveTable = new CDbSTable(m_strTableName + ARCHIVE, sDatabaseName);
m_oArchiveTable.vAddColumn(USED_DATE_FIELD, DATE_TYPE, true);
m_oArchiveTable.vAddColumn(VERSION_FIELD, INTEGER_TYPE, true);
}
CDbSTable m_oArchiveTable;
const string ARCHIVE = ".arch";
public override void vAddColumn(string strFieldName, string strType, bool bPrimaryKey)
{
base.vAddColumn(strFieldName, strType, bPrimaryKey);
m_oArchiveTable.vAddColumn(strFieldName, strType, bPrimaryKey);
}
public override ec dCreateIndex()
{
m_oArchiveTable.dCreateIndex();
return base.dCreateIndex();
}
public int dGetCurrentVersion(string strWhere)
{
return GetInteger(VERSION_FIELD, strWhere);
}
public ec dGetSelectLastVersion(string strWhere, out ArrayList oOutputArray, params string[] strFieldNameArray)
{
string sWhere = strWhere;
if (sWhere != null && sWhere.Length > 0)
{
sWhere += AND;
}
sWhere = VERSION_FIELD + "= max(" + VERSION_FIELD + ")";
return m_oArchiveTable.dGetSelect(sWhere, out oOutputArray, strFieldNameArray);
}
public ec dGetSelectLastVersion(int dNumberOfVersion, string strWhere, out ArrayList oOutputArray, params string[] strFieldNameArray)
{
int dVersion = dGetCurrentVersion(strWhere);
if (IsNotUsed(dVersion))
{
oOutputArray = null;
return ec.ST_ATTRIBUTE_CAN_NOT_FIND_THE_VERSION;
}
dVersion -= dNumberOfVersion;
if (dVersion < 0) dVersion = 0;
string sWhere = strWhere;
if (sWhere != null && sWhere.Length > 0)
{
sWhere += AND;
}
sWhere = VERSION_FIELD + ">=" + m_oArchiveTable.FormatDateValue(dVersion.ToString());
return m_oArchiveTable.dGetSelect(sWhere, out oOutputArray, strFieldNameArray);
}
public ec dDeleteOldVersion(DateTime oLastVersion, string strWhere)
{
string sWhere = strWhere;
if (sWhere != null && sWhere.Length > 0)
{
sWhere += AND;
}
sWhere = USED_DATE_FIELD + "<=" + m_oArchiveTable.FormatDateValue(oLastVersion.ToString());
return m_oArchiveTable.dDelete(sWhere);
}
public override ec dDelete(string sWhere)
{
base.dDelete(sWhere);
return m_oArchiveTable.dDelete(sWhere);
}
public override ec dUpdate(string strField, string strValue, string strWhere)
{
ec dRC = ec.ST_SUCCEED;
bool bRet = base.StartSelection();
if (bRet)
{
CDbRecordArray oArray;
bRet = base.NextRecord(out oArray);
if (oArray.bIsEqual(strField, strValue))
{
dRC = ec.ST_ATTRIBUTE_CAN_NOT_UPDATE_THE_ATTRIBUTE_WITH_SAME_VALUE;
}
else
{
m_oArchiveTable.vAddValue(DateTime.UtcNow);
m_oArchiveTable.vAddInsertValuesFrom(oArray.sGetAllField());
m_oArchiveTable.dInsertIntoTable();
oArray.bUpdate(strField, strValue);
base.vAddInsertValuesFrom(oArray.sGetAllField());
dRC = base.dInsertIntoTable();
}
}
return dRC;
}
public ec dGetSelectAllVersion(string strWhere, out ArrayList oOutputArray, params string[] strFieldNameArray)
{
return m_oArchiveTable.dGetSelect(strWhere, out oOutputArray, strFieldNameArray);
}
public override ec dInsertIntoTable()
{
string sInsertedValues = base.sInsertedValues;
CTrace.i().vWriteLn(ENMessage.DbS,"sInsertedValues = " + sInsertedValues);
ec dRC = base.dInsertIntoTable();
if (dRC == ec.ST_SQL_INSERT_RECORD_ALREADY_EXIST)
{
m_oArchiveTable.vAddValue(DateTime.UtcNow);
m_oArchiveTable.vAddInsertValuesFrom(sInsertedValues);
dRC = m_oArchiveTable.dInsertIntoTable();
base.dDeleteCurrent();
dRC = base.dInsertIntoTable();
}
return dRC;
}
public override ec dCreateTable()
{
m_oArchiveTable.dCreateTable();
return base.dCreateTable();
}
}
}
|