Files
Common-VS2019/SacsStandardDbas/Dbas/ItemData/SaItemDataMgr_Dbas.cs
T
2025-02-19 11:31:45 +00:00

580 lines
25 KiB
C#

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 ISacsDatabase 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.ItemIdsIncluded.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.ItemIdsIncluded.Add(itemId);
prmItemData.DataTypesIncluded.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.IdsIncluded.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.ItemIdsIncluded.Add(itemId);
prmItemData.DataTypesIncluded.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.IdsIncluded.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.ItemIdsIncluded.Add(itemId);
prmItemData.DataTypesIncluded.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)
{
SetErrorState(ErrorMessage.DatabaseQueryException);
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
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 OK;
}
//-------------------------------------------------------------------
// Update item.
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 item.
dbConnection.Open();
SaItemData_Db dbItemData = new SaItemData_Db(DbInfo);
dbItemData.PopulateFrom(dbCommand, aliasItemData, aliasItemData + ".Id=" + SysId.ToString(itemData.Id));
// Update item.
PopulateTo(dbItemData, itemData, dbUpdateInfo);
dbItemData.ExecuteUpdateCommand(dbCommand);
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return OK;
}
//-------------------------------------------------------------------
// Delete item.
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 item.
dbConnection.Open();
SaItemData_Db dbItemData = new SaItemData_Db(DbInfo);
dbItemData.PopulateFrom(dbCommand, aliasItemData, aliasItemData + ".Id=" + SysId.ToString(itemData.Id));
// Delete item.
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 OK;
}
public override bool ClearItemData(ItemId itemId, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!ItemId.IsValid(itemId)) return SetErrorState(ErrorMessage.ItemIdNotSpecified);
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 OK;
}
public override bool ClearItemData(ItemId itemId, String dataType, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!ItemId.IsValid(itemId)) return SetErrorState(ErrorMessage.ItemIdNotSpecified);
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 OK;
}
//-------------------------------------------------------------------
// 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.IdsIncluded.Concat(",");
if (!includedIds.IsEmpty())
filter.Add(colId + " IN (" + includedIds + ")");
String excludedIds = prm.IdsExcluded.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.ItemIdsIncluded)
{
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.DataTypesIncluded)
{
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)
{
ClearErrorState();
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)
{
SetErrorState(ErrorMessage.DatabaseQueryException);
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
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(SaItemData.Column.Id))
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_Id, aliasItemData));
if (columns.HasId(SaItemData.Column.ItemType) || columns.HasId(SaItemData.Column.ItemType_Desc))
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemType, aliasItemData));
if (columns.HasId(SaItemData.Column.ItemId))
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemId, aliasItemData));
if (columns.HasId(SaItemData.Column.DataType))
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_DataType, aliasItemData));
if (columns.HasId(SaItemData.Column.ItemData))
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemData, aliasItemData));
if (columns.HasId(SaItemData.Column.Notes))
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_Notes, aliasItemData));
if (columns.HasId(SaItemData.Column.Status) || columns.HasId(SaItemData.Column.Status_Desc) || columns.HasId(SaItemData.Column.Status_Ind))
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_Status, aliasItemData));
if (columns.HasId(SaItemData.Column.CreateOn_Date))
query.Columns.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_CreateOn, aliasItemData));
if (columns.HasId(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));
}
//-------------------------------------------------------------------
}
//=======================================================================
}