Add project files.
This commit is contained in:
@@ -0,0 +1,576 @@
|
||||
using Sarand.Net.Standard.Base.App;
|
||||
using Sarand.Net.Standard.Base.Core;
|
||||
using Sarand.Net.Standard.Base.Bus;
|
||||
using Sarand.Net.Standard.Base.Dbas;
|
||||
using Sarand.Net.Standard.Base.ItemData;
|
||||
using Sarand.Net.Standard.Dbas.Base;
|
||||
using Sarand.Net.Standard.Dbas.Data;
|
||||
using Sarand.Net.Standard.Dbas.ItemData.Internal;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Common;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Sarand.Net.Standard.Base.Utils;
|
||||
|
||||
namespace Sarand.Net.Standard.Dbas.ItemData
|
||||
{
|
||||
//=======================================================================
|
||||
internal class SaItemDataMgr_Dbas : SaItemDataMgr
|
||||
{
|
||||
//-------------------------------------------------------------------
|
||||
// Data members.
|
||||
private SaItemDataConsole_Dbas itemDataConsole = null;
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Static initialisation.
|
||||
static SaItemDataMgr_Dbas ()
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Construction.
|
||||
internal SaItemDataMgr_Dbas (SaItemDataConsole_Dbas itemDataConsole)
|
||||
{
|
||||
this.itemDataConsole = itemDataConsole;
|
||||
DbInfo = new DbDataItem.DatabaseInfo(itemDataConsole.Database);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Properties.
|
||||
public String TableName_ItemData { get { return SaItemDataDbDfn.GetTableName(SaItemDataDbDfn.TableIdx.SaItemData); } }
|
||||
internal SacsDatabase Database { get { return itemDataConsole.Database; } }
|
||||
private DbDataItem.DatabaseInfo DbInfo { get; }
|
||||
public override bool DatabaseIsValid { get { return (Database != null && Database.GetTableNames().Contains(TableName_ItemData)); } }
|
||||
public override bool CanUpdateDatabase { get { return DatabaseIsValid; } }
|
||||
|
||||
//*******************************************************************
|
||||
// I t e m D a t a
|
||||
//*******************************************************************
|
||||
// Utilities.
|
||||
public override bool ItemHasData (ItemId itemId, bool ignoreDeleted = true)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemId.IsValid(itemId)) return false;
|
||||
SaItemData.Params prmItemData = new SaItemData.Params();
|
||||
prmItemData.IncludedItemIds.Add(itemId);
|
||||
prmItemData.StatusCat = (ignoreDeleted ? SaItemData.StatusCat.NotDeleted : SaItemData.StatusCat.Any);
|
||||
return (GetItemDataCount(prmItemData) > 0);
|
||||
}
|
||||
public override bool ItemHasData (ItemId itemId, String dataType, bool ignoreDeleted = true)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemId.IsValid(itemId)) return false;
|
||||
if (StringUtil.IsEmpty(dataType)) return false;
|
||||
SaItemData.Params prmItemData = new SaItemData.Params();
|
||||
prmItemData.IncludedItemIds.Add(itemId);
|
||||
prmItemData.IncludedDataTypes.Add(dataType);
|
||||
prmItemData.StatusCat = (ignoreDeleted ? SaItemData.StatusCat.NotDeleted : SaItemData.StatusCat.Any);
|
||||
return (GetItemDataCount(prmItemData) > 0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Create Item.
|
||||
public override SaItemData CreateItemData (ItemId itemId)
|
||||
{
|
||||
ClearErrorState();
|
||||
return new SaItemData_Dbas(null, itemId, 0);
|
||||
}
|
||||
private SaItemData CreateItemData (SaItemData_Db dbItemData)
|
||||
{
|
||||
ClearErrorState();
|
||||
SaItemData itemData = new SaItemData_Dbas(null, new ItemId(dbItemData._ItemType, new SysId(dbItemData._ItemId)), (ushort)dbItemData._Flags);
|
||||
PopulateFrom(dbItemData, itemData);
|
||||
return itemData;
|
||||
}
|
||||
private SaItemData CreateItemData (DbDataReader dataReader)
|
||||
{
|
||||
SaItemData_Db dbItemData = new SaItemData_Db(DbInfo);
|
||||
dbItemData.PopulateFrom(dataReader);
|
||||
return CreateItemData(dbItemData);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Item exists.
|
||||
public override bool ItemDataExists (SysId id)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!SysId.IsValid(id)) return false;
|
||||
SaItemData.Params prmItemData = new SaItemData.Params();
|
||||
prmItemData.IncludedIds.Add(id);
|
||||
prmItemData.StatusCat = SaItemData.StatusCat.Any;
|
||||
return (GetItemDataCount(prmItemData) > 0);
|
||||
}
|
||||
public override bool ItemDataExists (ItemId itemId, String dataType, bool ignoreDeleted = true)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemId.IsValid(itemId)) return false;
|
||||
if (StringUtil.IsEmpty(dataType)) return false;
|
||||
SaItemData.Params prmItemData = new SaItemData.Params();
|
||||
prmItemData.IncludedItemIds.Add(itemId);
|
||||
prmItemData.IncludedDataTypes.Add(dataType);
|
||||
prmItemData.StatusCat = (ignoreDeleted ? SaItemData.StatusCat.NotDeleted : SaItemData.StatusCat.Any);
|
||||
return (GetItemDataCount(prmItemData) > 0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Get Item Data.
|
||||
public override SaItemData GetItemData (SysId id)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!SysId.IsValid(id)) return null;
|
||||
SaItemData.Params prmItemData = new SaItemData.Params();
|
||||
prmItemData.IncludedIds.Add(id);
|
||||
prmItemData.StatusCat = SaItemData.StatusCat.Any;
|
||||
return GetItemData(prmItemData);
|
||||
}
|
||||
public override SaItemData GetItemData (ItemId itemId, String dataType)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemId.IsValid(itemId)) return null;
|
||||
if (StringUtil.IsEmpty(dataType)) return null;
|
||||
SaItemData.Params prmItemData = new SaItemData.Params();
|
||||
prmItemData.IncludedItemIds.Add(itemId);
|
||||
prmItemData.IncludedDataTypes.Add(dataType);
|
||||
prmItemData.StatusCat = SaItemData.StatusCat.Any;
|
||||
return GetItemData(prmItemData);
|
||||
}
|
||||
public override SaItemData GetItemData (SaItemData.Params prmItemData)
|
||||
{
|
||||
return GetItemData(GetItemDataQueryFilter(prmItemData).Concat(" And ", "(", ")"));
|
||||
}
|
||||
private SaItemData GetItemData (String filter)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (GetItemDataCount(filter) != 1) return null;
|
||||
SaItemData itemData = null;
|
||||
// Query data.
|
||||
using (var dbConnection = Database.CreateConnection())
|
||||
using (var dbCommand = dbConnection.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
dbConnection.Open();
|
||||
SaItemData_Db dbItemData = new SaItemData_Db(DbInfo);
|
||||
dbItemData.PopulateFrom(dbCommand, aliasItemData, filter);
|
||||
itemData = CreateItemData(dbItemData);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
SaLogger.Warn(GetType().Name + ".GetItemData\n\tQuery: " + dbCommand.CommandText + "\n\t" + exc.GetType().Name + ": " + exc.Message);
|
||||
}
|
||||
}
|
||||
return itemData;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Validate ItemData.
|
||||
public override bool IsValidItemDataData (SaItemData.Data itemDataData, SaItemData.ErrField errField)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!base.IsValidItemDataData(itemDataData, errField)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Insert ItemData.
|
||||
public override bool InsertItemData (SaItemData itemData, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!IsValidItemData(itemData)) return false;
|
||||
if (SysId.IsValid(itemData.Id)) return SetErrorState(ErrorMessage.ValiditemId);
|
||||
using (var dbConnection = Database.CreateConnection())
|
||||
using (var dbCommand = dbConnection.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
dbConnection.Open();
|
||||
SaItemData_Db dbItemData = new SaItemData_Db(DbInfo);
|
||||
PopulateTo(dbItemData, itemData, dbUpdateInfo);
|
||||
if (SaItemData_Db.FieldsNonId.Contains("Id"))
|
||||
{
|
||||
// Generate next Id.
|
||||
dbItemData._Id = SysId.ToInt(Database.GetNextId("SaItemData", dbUpdateInfo));
|
||||
}
|
||||
dbItemData.ExecuteInsertCommand(dbCommand);
|
||||
itemData.Id = new SysId(dbItemData._Id);
|
||||
}
|
||||
catch (Exception exc) { SetErrorState(exc.Message); }
|
||||
}
|
||||
return !HasErrorState();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Update ItemData.
|
||||
public override bool UpdateItemData (SaItemData itemData, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!IsValidItemData(itemData)) return false;
|
||||
if (!SysId.IsValid(itemData.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
|
||||
using (var dbConnection = Database.CreateConnection())
|
||||
using (var dbCommand = dbConnection.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
// Retrieve itemData.
|
||||
dbConnection.Open();
|
||||
SaItemData_Db dbItemData = new SaItemData_Db(DbInfo);
|
||||
dbItemData.PopulateFrom(dbCommand, aliasItemData, aliasItemData + ".Id=" + SysId.ToString(itemData.Id));
|
||||
// Update properties.
|
||||
PopulateTo(dbItemData, itemData, dbUpdateInfo);
|
||||
dbItemData.ExecuteUpdateCommand(dbCommand);
|
||||
}
|
||||
catch (Exception exc) { SetErrorState(exc.Message); }
|
||||
}
|
||||
return !HasErrorState();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Delete ItemData.
|
||||
public override bool ItemDataCanBeDeleted (SaItemData itemData)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!base.ItemDataCanBeDeleted(itemData)) return false;
|
||||
return true;
|
||||
}
|
||||
public override bool DeleteItemData (SaItemData itemData, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemDataCanBeDeleted(itemData)) return false;
|
||||
using (var dbConnection = Database.CreateConnection())
|
||||
using (var dbCommand = dbConnection.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
// Retrieve itemData.
|
||||
dbConnection.Open();
|
||||
SaItemData_Db dbItemData = new SaItemData_Db(DbInfo);
|
||||
dbItemData.PopulateFrom(dbCommand, aliasItemData, aliasItemData + ".Id=" + SysId.ToString(itemData.Id));
|
||||
// Delete itemData.
|
||||
dbCommand.CommandType = System.Data.CommandType.Text;
|
||||
dbCommand.CommandText = "DELETE FROM " + SaItemDataDbDfn.GetTableName(SaItemDataDbDfn.TableIdx.SaItemData) + " WHERE Id=" + SysId.ToString(itemData.Id) + ";";
|
||||
dbCommand.ExecuteNonQuery();
|
||||
}
|
||||
catch (Exception exc) { SetErrorState(exc.Message); }
|
||||
}
|
||||
return !HasErrorState();
|
||||
}
|
||||
public override bool ClearItemData (ItemId itemId, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemId.IsValid(itemId)) return SetErrorState("Item Id must be specified");
|
||||
String colItemType = SaItemDataDbDfn.GetColumnName(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemType);
|
||||
String colItemId = SaItemDataDbDfn.GetColumnName(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemId);
|
||||
String query = "Delete From "+TableName_ItemData+" WHERE "+colItemType+"="+itemId.Type.ToString()+" AND "+colItemId+"="+SysId.ToString(itemId.Id);
|
||||
Database.ExecuteNonQuery(query);
|
||||
if (Database.HasErrorState())
|
||||
SetErrorState("Failed to clear Item Data - " + Database.ErrorStateMessage);
|
||||
return !HasErrorState();
|
||||
}
|
||||
public override bool ClearItemData (ItemId itemId, String dataType, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemId.IsValid(itemId)) return SetErrorState("Item Id must be specified");
|
||||
if (StringUtil.IsEmpty(dataType)) return SetErrorState("Data type must be specified");
|
||||
String colItemType = SaItemDataDbDfn.GetColumnName(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemType);
|
||||
String colItemId = SaItemDataDbDfn.GetColumnName(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemId);
|
||||
String colDataType = SaItemDataDbDfn.GetColumnName(SaItemDataDbDfn.ColumnIdx.SaItemData_DataType);
|
||||
String query = "Delete From " + TableName_ItemData + " WHERE " + colItemType + "=" + itemId.Type.ToString() + " AND " + colItemId + "=" + SysId.ToString(itemId.Id) + " AND " + colDataType + "='"+dataType+"';";
|
||||
Database.ExecuteNonQuery(query);
|
||||
if (Database.HasErrorState())
|
||||
SetErrorState("Failed to clear Item Data - " + Database.ErrorStateMessage);
|
||||
return !HasErrorState();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Copy data properties to and from database.
|
||||
private void PopulateTo (SaItemData_Db dbItemData, SaItemData itemData, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
dbItemData._ItemType = itemData.ItemId.Type;
|
||||
dbItemData._ItemId = SysId.ToInt(itemData.ItemId.Id);
|
||||
dbItemData._DataType = itemData.DataType;
|
||||
dbItemData._ItemData = itemData.ItemData;
|
||||
// Common properties.
|
||||
dbItemData._Notes = itemData.Notes;
|
||||
dbItemData._Status = SacsSystem.GetStatusCode(itemData.Status);
|
||||
dbItemData._Flags = (short)itemData.Flags;
|
||||
if (!SysId.IsValid(itemData.Id))
|
||||
{
|
||||
dbItemData._CreateOn = DateTime.Now;
|
||||
dbItemData._CreateBy = dbUpdateInfo.UserId.ToInt();
|
||||
dbItemData._CreateHost = dbUpdateInfo.Host;
|
||||
}
|
||||
dbItemData._UpdateOn = DateTime.Now;
|
||||
dbItemData._UpdateBy = dbUpdateInfo.UserId.ToInt();
|
||||
dbItemData._UpdateHost = dbUpdateInfo.Host;
|
||||
}
|
||||
private void PopulateFrom (SaItemData_Db dbItemData, SaItemData itemData)
|
||||
{
|
||||
//itemData.ItemId = new ItemId(dbItemData._ItemType, new SysId(dbItemData._ItemId));
|
||||
itemData.DataType = dbItemData._DataType;
|
||||
itemData.ItemData = dbItemData._ItemData;
|
||||
// Common properties.
|
||||
itemData.Notes = dbItemData._Notes;
|
||||
itemData.Status = SacsSystem.GetStatusForCode(dbItemData._Status);
|
||||
itemData.SetCreateStamp(dbItemData._CreateOn, new SysId(dbItemData._CreateBy), dbItemData._CreateHost);
|
||||
itemData.SetUpdateStamp(dbItemData._UpdateOn, new SysId(dbItemData._UpdateBy), dbItemData._UpdateHost);
|
||||
itemData.AcceptChanges();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// ItemData column definitions.
|
||||
private static readonly String aliasItemData = "aItmDat";
|
||||
private void SetItemDataColDfn
|
||||
(ColumnDfn col, String caption, int width, SaItemDataDbDfn.ColumnIdx dbCol,
|
||||
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
|
||||
String alias = "", String prefix = "")
|
||||
{
|
||||
if (String.IsNullOrEmpty(alias) && SaItemDataDbDfn.GetTableForColumn(dbCol) == SaItemDataDbDfn.TableIdx.SaItemData)
|
||||
alias = aliasItemData;
|
||||
col.Set(caption, width, (int)dbCol, prefix + SaItemDataDbDfn.GetColumnName(dbCol, false), SaItemDataDbDfn.GetColumnNameQual(dbCol, alias), dataType, align);
|
||||
}
|
||||
public override ColumnDfn GetItemDataColumnDfn (SaItemData.Column columnId, string caption = "", int width = 0)
|
||||
{
|
||||
ColumnDfn columnDfn = new ColumnDfn((int)columnId,caption,width);
|
||||
switch (columnId)
|
||||
{
|
||||
case SaItemData.Column.Pos:
|
||||
SetItemDataColDfn(columnDfn, "Pos", 45, SaItemDataDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
|
||||
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
|
||||
columnDfn.ReadOnly = true;
|
||||
columnDfn.Resizable = false;
|
||||
break;
|
||||
case SaItemData.Column.Id:
|
||||
SetItemDataColDfn(columnDfn, "Id", 60, SaItemDataDbDfn.ColumnIdx.SaItemData_Id, ColumnAlignment.Right, DataValue.DataType.Long);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaItemData.Column.ItemType:
|
||||
SetItemDataColDfn(columnDfn, "Item type", 80, SaItemDataDbDfn.ColumnIdx.SaItemData_ItemType, ColumnAlignment.Center, DataValue.DataType.Long);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaItemData.Column.ItemType_Desc:
|
||||
SetItemDataColDfn(columnDfn, "Item type", 100, SaItemDataDbDfn.ColumnIdx.SaItemData_ItemType);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaItemData.Column.DataType:
|
||||
SetItemDataColDfn(columnDfn, "Data type", 100, SaItemDataDbDfn.ColumnIdx.SaItemData_DataType);
|
||||
columnDfn.MaxLength = (int)SaItemDataDbDfn.GetColTextLen(SaItemDataDbDfn.ColumnIdx.SaItemData_DataType);
|
||||
break;
|
||||
case SaItemData.Column.ItemData:
|
||||
SetItemDataColDfn(columnDfn, "Data", 240, SaItemDataDbDfn.ColumnIdx.SaItemData_ItemData);
|
||||
columnDfn.MaxLength = (int)SaItemDataDbDfn.GetColTextLen(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemData);
|
||||
break;
|
||||
// Common properties.
|
||||
case SaItemData.Column.Notes:
|
||||
SetItemDataColDfn(columnDfn, "Notes", 240, SaItemDataDbDfn.ColumnIdx.SaItemData_Notes);
|
||||
columnDfn.MaxLength = (int)SaItemDataDbDfn.GetColTextLen(SaItemDataDbDfn.ColumnIdx.SaItemData_Notes);
|
||||
break;
|
||||
case SaItemData.Column.Status:
|
||||
SetItemDataColDfn(columnDfn, "Status", 80, SaItemDataDbDfn.ColumnIdx.SaItemData_Status, ColumnAlignment.Center);
|
||||
break;
|
||||
case SaItemData.Column.Status_Desc:
|
||||
SetItemDataColDfn(columnDfn, "Status", 90, SaItemDataDbDfn.ColumnIdx.SaItemData_Status, ColumnAlignment.Center);
|
||||
break;
|
||||
case SaItemData.Column.Status_Ind:
|
||||
SetItemDataColDfn(columnDfn, "Status", 80, SaItemDataDbDfn.ColumnIdx.SaItemData_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
|
||||
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
|
||||
break;
|
||||
case SaItemData.Column.CreateOn_Date:
|
||||
SetItemDataColDfn(columnDfn, "Created", 80, SaItemDataDbDfn.ColumnIdx.SaItemData_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaItemData.Column.UpdateOn_Date:
|
||||
SetItemDataColDfn(columnDfn, "Updated", 80, SaItemDataDbDfn.ColumnIdx.SaItemData_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
}
|
||||
if (!String.IsNullOrEmpty(caption))
|
||||
columnDfn.Caption = caption;
|
||||
if (width > 0)
|
||||
columnDfn.Width = width;
|
||||
return columnDfn;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// ItemData query filter.
|
||||
public override List<string> GetItemDataQueryFilter (SaItemData.Params prm)
|
||||
{
|
||||
List<String> filter = new List<String>();
|
||||
|
||||
// Item Data Id.
|
||||
String colId = SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_Id, aliasItemData);
|
||||
String includedIds = prm.IncludedIds.Concat(",");
|
||||
if (!includedIds.IsEmpty())
|
||||
filter.Add(colId + " IN (" + includedIds + ")");
|
||||
String excludedIds = prm.ExcludedIds.Concat(",");
|
||||
if (!excludedIds.IsEmpty())
|
||||
filter.Add(colId + " NOT IN (" + excludedIds + ")");
|
||||
|
||||
// Item Ids.
|
||||
List<String> filterItemId = new List<String>();
|
||||
String colItemType = SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemType, aliasItemData);
|
||||
String colItemId = SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemId, aliasItemData);
|
||||
foreach (ItemId itemId in prm.IncludedItemIds)
|
||||
{
|
||||
filterItemId.Add(colItemType + "=" + itemId.Type.ToString() + " And " + colItemId + "=" + SysId.ToString(itemId.Id));
|
||||
}
|
||||
if (filterItemId.Count > 0)
|
||||
filter.Add(filterItemId.Concat(" Or ", "(", ")"));
|
||||
|
||||
// Included Data Types.
|
||||
List<String> dataTypeFilter = new List<string>();
|
||||
String colDataType = SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_DataType, aliasItemData);
|
||||
foreach (String dataType in prm.IncludedDataTypes)
|
||||
{
|
||||
dataTypeFilter.Add(colDataType + "='" + DbQuery.FormatForCondition(dataType) + "'");
|
||||
}
|
||||
if (dataTypeFilter.Count > 0)
|
||||
filter.Add(dataTypeFilter.Concat(" Or ", "(", ")"));
|
||||
|
||||
// Status.
|
||||
String colStatus = SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_Status, aliasItemData);
|
||||
String statusCurrent = SacsSystem.GetStatusCode(SaStatus.Current);
|
||||
String statusDeleted = SacsSystem.GetStatusCode(SaStatus.Deleted);
|
||||
if (prm.StatusCat == SaItemData.StatusCat.CurrentOnly)
|
||||
filter.Add(colStatus + " In ('" + statusCurrent + "')");
|
||||
else if (prm.StatusCat == SaItemData.StatusCat.NotDeleted)
|
||||
filter.Add(colStatus + " Not In ('" + statusDeleted + "')");
|
||||
else if (prm.StatusCat == SaItemData.StatusCat.DeletedOnly)
|
||||
filter.Add(colStatus + " In ('" + statusDeleted + "')");
|
||||
|
||||
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
|
||||
return filter;
|
||||
}
|
||||
// ItemData sort columns.
|
||||
public List<String> GetItemDataSortColumns (SaItemData.Params prm)
|
||||
{
|
||||
// Sort sequence:
|
||||
List<String> sortColumnNames = new List<String>();
|
||||
foreach (var columnDfn in prm.SortColumns)
|
||||
{
|
||||
// Need to ensure correct alias used for ItemData columns in case of conflict.
|
||||
String sortCol = String.Empty;
|
||||
if (SaItemDataDbDfn.GetTableForColumn((SaItemDataDbDfn.ColumnIdx)columnDfn.DbColumn) == SaItemDataDbDfn.TableIdx.SaItemData)
|
||||
{
|
||||
sortCol = SaItemDataDbDfn.GetColumnNameQual((SaItemDataDbDfn.ColumnIdx)columnDfn.DbColumn, aliasItemData);
|
||||
}
|
||||
else
|
||||
{
|
||||
sortCol = columnDfn.DataName;
|
||||
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
|
||||
{
|
||||
sortCol = columnDfn.SortDataName;
|
||||
}
|
||||
}
|
||||
if (!sortCol.IsEmpty())
|
||||
{
|
||||
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
|
||||
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
|
||||
}
|
||||
}
|
||||
sortColumnNames.RemoveBlanks();
|
||||
if (sortColumnNames.IsEmpty())
|
||||
{
|
||||
// Default sort columns:
|
||||
sortColumnNames.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemType, aliasItemData) + " DESC");
|
||||
sortColumnNames.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemId, aliasItemData) + " DESC");
|
||||
sortColumnNames.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_DataType, aliasItemData) + " DESC");
|
||||
}
|
||||
return sortColumnNames;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// ItemData count.
|
||||
private long GetItemDataCount (String filter)
|
||||
{
|
||||
ClearErrorState();
|
||||
return Database.GetRowCount(SaItemDataDbDfn.GetTableName(SaItemDataDbDfn.TableIdx.SaItemData) + " As " + aliasItemData, filter);
|
||||
}
|
||||
public override long GetItemDataCount (SaItemData.Params prm)
|
||||
{
|
||||
ClearErrorState();
|
||||
return GetItemDataCount(GetItemDataQueryFilter(prm).Concat(" AND ", "(", ")"));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Item Data list.
|
||||
public override List<SaItemData> GetItemDataList (SaItemData.Params prm)
|
||||
{
|
||||
List<SaItemData> itemDatas = new List<SaItemData>();
|
||||
DbQuery qry = new DbQuery(Database.DbmsType);
|
||||
qry.Tables.Add(TableName_ItemData, aliasItemData);
|
||||
SaItemData_Db dbItemData = new SaItemData_Db(DbInfo);
|
||||
qry.Columns.AddRange(dbItemData.ExistingColumnNames);
|
||||
qry.Filters.AddRange(GetItemDataQueryFilter(prm));
|
||||
qry.OrderBy.AddRange(GetItemDataSortColumns(prm));
|
||||
// Query data.
|
||||
using (var dbConnection = Database.CreateConnection())
|
||||
using (var dbCommand = dbConnection.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
dbConnection.Open();
|
||||
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
|
||||
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
|
||||
{
|
||||
while (dbDataReader.Read())
|
||||
itemDatas.Add(CreateItemData(dbDataReader));
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
SaLogger.Warn(GetType().Name + ".GetItemDataList\n\tQuery: " + dbCommand.CommandText + "\n\t" + exc.GetType().Name + ": " + exc.Message);
|
||||
}
|
||||
}
|
||||
return itemDatas;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Item Data query.
|
||||
public override DbResultSet ExecuteItemDataQuery (List<ColumnDfn> columns, SaItemData.Params prm)
|
||||
{
|
||||
ClearErrorState();
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// Construct query.
|
||||
DbQuery query = new DbQuery(Database.DbmsType);
|
||||
query.Tables.Add(SaItemDataDbDfn.GetTableName(SaItemDataDbDfn.TableIdx.SaItemData), aliasItemData);
|
||||
|
||||
// Add columns as defined in query list.
|
||||
if (columns.HasId((int)SaItemData.Column.Id))
|
||||
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_Id, aliasItemData));
|
||||
if (columns.HasId((int)SaItemData.Column.ItemType) || columns.HasId((int)SaItemData.Column.ItemType_Desc))
|
||||
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemType, aliasItemData));
|
||||
if (columns.HasId((int)SaItemData.Column.ItemId))
|
||||
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemId, aliasItemData));
|
||||
if (columns.HasId((int)SaItemData.Column.DataType))
|
||||
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_DataType, aliasItemData));
|
||||
if (columns.HasId((int)SaItemData.Column.ItemData))
|
||||
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemData, aliasItemData));
|
||||
if (columns.HasId((int)SaItemData.Column.Notes))
|
||||
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_Notes, aliasItemData));
|
||||
if (columns.HasId((int)SaItemData.Column.Status) || columns.HasId((int)SaItemData.Column.Status_Desc) || columns.HasId((int)SaItemData.Column.Status_Ind))
|
||||
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_Status, aliasItemData));
|
||||
if (columns.HasId((int)SaItemData.Column.CreateOn_Date))
|
||||
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_CreateOn, aliasItemData));
|
||||
if (columns.HasId((int)SaItemData.Column.UpdateOn_Date))
|
||||
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_UpdateOn, aliasItemData));
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// Populate filter.
|
||||
query.Filters.AddRange(GetItemDataQueryFilter(prm));
|
||||
|
||||
// Configure sort sequence.
|
||||
foreach (String sortColumn in GetItemDataSortColumns(prm))
|
||||
query.OrderBy.Add(sortColumn);
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
//return new DbResultSet_DataTableReader(Database, query.BuildQuery(prm.ResultsPaging));
|
||||
return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
}
|
||||
//=======================================================================
|
||||
}
|
||||
Reference in New Issue
Block a user