164 lines
7.7 KiB
C#
164 lines
7.7 KiB
C#
using Sarand.BusinessMgr.Net.Standard.Base.App;
|
|
using Sarand.Net.Standard.Base.CodeTypes;
|
|
using Sarand.Net.Standard.Base.Dbas;
|
|
using Sarand.Net.Standard.Base.ItemOptions;
|
|
using Sarand.Net.Standard.Base.Security;
|
|
using Sarand.Net.Standard.Base.Utils;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Sarand.BusinessMgr.Net.Standard.Base.Consoles
|
|
{
|
|
//=======================================================================
|
|
/// <summary>
|
|
/// Determine the correct length to use for text columns in the current database.
|
|
/// <br/>- Primarily determined by the relevant database definition.
|
|
/// <br/>- For selected columns, use the db schema length instead.
|
|
/// <br/>- Allows for certain column lengths to be adjusted in the database.
|
|
/// </summary>
|
|
public class SbmInstanceSchemaConsole
|
|
{
|
|
//-------------------------------------------------------------------
|
|
private readonly ISacsDatabase db;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Construction.
|
|
public SbmInstanceSchemaConsole(ISacsDatabase db)
|
|
{
|
|
this.db = db;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// BusMgr Column lengths - taking into account current database schema for selected columns.
|
|
public ulong GetColTextLen(SbmDbDfn.ColumnIdx column)
|
|
{
|
|
// Intercept columns that may have different lengths on the database.
|
|
if (db != null && BusMgrColumnLengths.ContainsKey(column))
|
|
{
|
|
if (BusMgrColumnLengths[column] == 0)
|
|
BusMgrColumnLengths[column] = GetDbColTextLen(column);
|
|
return BusMgrColumnLengths[column];
|
|
}
|
|
return SbmDbDfn.GetColTextLen(column);
|
|
}
|
|
// BusMgr columns that may differ in length on the db.
|
|
private readonly Dictionary<SbmDbDfn.ColumnIdx, ulong> BusMgrColumnLengths = new Dictionary<SbmDbDfn.ColumnIdx, ulong>()
|
|
{
|
|
{ SbmDbDfn.ColumnIdx.Address_Name, 0},
|
|
{ SbmDbDfn.ColumnIdx.Commodity_Code, 0},
|
|
{ SbmDbDfn.ColumnIdx.Commodity_DrawingNo, 0},
|
|
{ SbmDbDfn.ColumnIdx.Commodity_DescBrief, 0},
|
|
{ SbmDbDfn.ColumnIdx.Commodity_Notes, 0},
|
|
{ SbmDbDfn.ColumnIdx.CommoditySupplier_ProductCode, 0},
|
|
{ SbmDbDfn.ColumnIdx.PortfolioItem_Code, 0},
|
|
{ SbmDbDfn.ColumnIdx.Transaction_Notes, 0},
|
|
{ SbmDbDfn.ColumnIdx.Requirement_ProductCode, 0},
|
|
{ SbmDbDfn.ColumnIdx.Requirement_Notes, 0},
|
|
{ SbmDbDfn.ColumnIdx.Constituent_Notes, 0},
|
|
};
|
|
public ulong GetDbColTextLen(SbmDbDfn.ColumnIdx column)
|
|
{
|
|
// Get the column's length from the currently open database:
|
|
if (SbmDbDfn.GetColDataType(column) != DbColumnDataType.VarChar) return 0;
|
|
DbDfnTable dfnTable = db.GetTableDfn(SbmDbDfn.GetTableName(SbmDbDfn.GetTableForColumn(column), false));
|
|
ulong columnLength = (ulong)(dfnTable.Columns.Find(col => col.Name.EqualsCI(SbmDbDfn.GetColumnName(column, false)))?.Size ?? 0);
|
|
return (SbmDbDfn.MaxTextLen > 1 ? Math.Min(SbmDbDfn.MaxTextLen, columnLength) : columnLength);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Security Column lengths - taking into account current database schema for selected columns.
|
|
public ulong GetColTextLen(SaSecurityDbDfn.ColumnIdx column)
|
|
{
|
|
// Intercept columns that may have different lengths on the database.
|
|
if (db != null && SecurityColumnLengths.ContainsKey(column))
|
|
{
|
|
if (SecurityColumnLengths[column] == 0)
|
|
SecurityColumnLengths[column] = GetDbColTextLen(column);
|
|
return SecurityColumnLengths[column];
|
|
}
|
|
return SaSecurityDbDfn.GetColTextLen(column);
|
|
}
|
|
// Security columns that may differ in length on the db.
|
|
private readonly Dictionary<SaSecurityDbDfn.ColumnIdx, ulong> SecurityColumnLengths = new Dictionary<SaSecurityDbDfn.ColumnIdx, ulong>()
|
|
{
|
|
{ SaSecurityDbDfn.ColumnIdx.SaSecItem_Code, 0},
|
|
{ SaSecurityDbDfn.ColumnIdx.SaSecItem_Description, 0},
|
|
{ SaSecurityDbDfn.ColumnIdx.SaSecItem_EmailAddress, 0}
|
|
};
|
|
public ulong GetDbColTextLen(SaSecurityDbDfn.ColumnIdx column)
|
|
{
|
|
// Get the column's length from the currently open database:
|
|
if (SaSecurityDbDfn.GetColDataType(column) != DbColumnDataType.VarChar) return 0;
|
|
DbDfnTable dfnTable = db.GetTableDfn(SaSecurityDbDfn.GetTableName(SaSecurityDbDfn.GetTableForColumn(column), false));
|
|
ulong columnLength = (ulong)(dfnTable.Columns.Find(col => col.Name.EqualsCI(SaSecurityDbDfn.GetColumnName(column, false)))?.Size ?? 0);
|
|
return (SaSecurityDbDfn.MaxTextLen > 1 ? Math.Min(SaSecurityDbDfn.MaxTextLen, columnLength) : columnLength);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// CodeType Column lengths - taking into account current database schema for selected columns.
|
|
public ulong GetColTextLen(SaCodeTypeDbDfn.ColumnIdx column)
|
|
{
|
|
// Intercept columns that may have different lengths on the database.
|
|
if (db != null && CodeTypeColumnLengths.ContainsKey(column))
|
|
{
|
|
if (CodeTypeColumnLengths[column] == 0)
|
|
CodeTypeColumnLengths[column] = GetDbColTextLen(column);
|
|
return CodeTypeColumnLengths[column];
|
|
}
|
|
return SaCodeTypeDbDfn.GetColTextLen(column);
|
|
}
|
|
// CodeType columns that may differ in length on the db.
|
|
private readonly Dictionary<SaCodeTypeDbDfn.ColumnIdx, ulong> CodeTypeColumnLengths = new Dictionary<SaCodeTypeDbDfn.ColumnIdx, ulong>()
|
|
{
|
|
{ SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code, 0},
|
|
{ SaCodeTypeDbDfn.ColumnIdx.SaCode_Code, 0},
|
|
{ SaCodeTypeDbDfn.ColumnIdx.SaCode_Data, 0},
|
|
{ SaCodeTypeDbDfn.ColumnIdx.SaCode_Description, 0}
|
|
};
|
|
public ulong GetDbColTextLen(SaCodeTypeDbDfn.ColumnIdx column)
|
|
{
|
|
// Get the column's length from the currently open database:
|
|
if (SaCodeTypeDbDfn.GetColDataType(column) != DbColumnDataType.VarChar) return 0;
|
|
DbDfnTable dfnTable = db.GetTableDfn(SaCodeTypeDbDfn.GetTableName(SaCodeTypeDbDfn.GetTableForColumn(column), false));
|
|
ulong columnLength = (ulong)(dfnTable.Columns.Find(col => col.Name.EqualsCI(SaCodeTypeDbDfn.GetColumnName(column, false)))?.Size ?? 0);
|
|
return 0;// (SaCodeTypeDbDfn.MaxTextLen > 1 ? Math.Min(SaCodeTypeDbDfn.MaxTextLen, columnLength) : columnLength);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// ItemOption Column lengths - taking into account current database schema for selected columns.
|
|
public ulong GetColTextLen(SaItemOptionDbDfn.ColumnIdx column)
|
|
{
|
|
// Intercept columns that may have different lengths on the database.
|
|
if (db != null && ItemOptionColumnLengths.ContainsKey(column))
|
|
{
|
|
if (ItemOptionColumnLengths[column] == 0)
|
|
ItemOptionColumnLengths[column] = GetDbColTextLen(column);
|
|
return ItemOptionColumnLengths[column];
|
|
}
|
|
return SaItemOptionDbDfn.GetColTextLen(column);
|
|
}
|
|
// ItemOption columns that may differ in length on the db.
|
|
private readonly Dictionary<SaItemOptionDbDfn.ColumnIdx, ulong> ItemOptionColumnLengths = new Dictionary<SaItemOptionDbDfn.ColumnIdx, ulong>()
|
|
{
|
|
{ SaItemOptionDbDfn.ColumnIdx.SaItemOption_Name, 0},
|
|
{ SaItemOptionDbDfn.ColumnIdx.SaItemOption_Context, 0},
|
|
{ SaItemOptionDbDfn.ColumnIdx.SaItemOption_Value, 0},
|
|
{ SaItemOptionDbDfn.ColumnIdx.SaItemOption_Notes, 0}
|
|
};
|
|
public ulong GetDbColTextLen(SaItemOptionDbDfn.ColumnIdx column)
|
|
{
|
|
// Get the column's length from the currently open database:
|
|
if (SaItemOptionDbDfn.GetColDataType(column) != DbColumnDataType.VarChar) return 0;
|
|
DbDfnTable dfnTable = db.GetTableDfn(SaItemOptionDbDfn.GetTableName(SaItemOptionDbDfn.GetTableForColumn(column), false));
|
|
ulong columnLength = (ulong)(dfnTable.Columns.Find(col => col.Name.EqualsCI(SaItemOptionDbDfn.GetColumnName(column, false)))?.Size ?? 0);
|
|
return 0;// (SaItemOptionDbDfn.MaxTextLen > 1 ? Math.Min(SaItemOptionDbDfn.MaxTextLen, columnLength) : columnLength);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|