Saxonite 1.2.11.5, BusinessMgr.

This commit is contained in:
Andy Howard
2024-06-13 14:30:50 +01:00
parent ba5801b4dc
commit 14102d5164
44 changed files with 645 additions and 411 deletions
@@ -118,7 +118,7 @@ namespace Sarand.Net.Standard.Dbas.Base
// Clear files from output firectory.
if (Directory.EnumerateFiles(config.OutputDirectory, "*", SearchOption.TopDirectoryOnly).Count() > 0)
{
SaLogger.Info(GetType().Name + ".Generate Deleting existing files in output folders.");
SaLogger.Info($"{SysUtil.Fn} Deleting existing files in output folders.");
DirectoryInfo di = new DirectoryInfo(config.OutputDirectory);
foreach (FileInfo file in di.EnumerateFiles())
file.Delete();
@@ -178,16 +178,18 @@ namespace Sarand.Net.Standard.Dbas.Base
/// <summary>Intercept column variable type name to replace double/float with decimal where required.</summary>
private static String GetColumnVariableTypeName(DbDfnColumn columnDfn, bool treatDoubleFormatAsDecimal)
{
String typeName = columnDfn.GetVariableTypeName();
if (treatDoubleFormatAsDecimal)
{
switch (columnDfn.DataType)
{
case DbColumnDataType.Single:
case DbColumnDataType.Double:
return "Decimal";
typeName = "Decimal";
break;
}
}
return columnDfn.GetVariableTypeName();
return typeName;
}
//-------------------------------------------------------------------
@@ -199,16 +201,18 @@ namespace Sarand.Net.Standard.Dbas.Base
/// <summary>Intercept column variable type to replace double/float with decimal where required.</summary>
private static String GetColumnVariableType(DbDfnColumn columnDfn, bool treatDoubleFormatAsDecimal)
{
String typeName = columnDfn.GetVariableType();
if (treatDoubleFormatAsDecimal)
{
switch (columnDfn.DataType)
{
case DbColumnDataType.Single:
case DbColumnDataType.Double:
return "Decimal";
typeName = "Decimal";
break;
}
}
return columnDfn.GetVariableType();
return typeName;
}
//-------------------------------------------------------------------
@@ -220,16 +224,29 @@ namespace Sarand.Net.Standard.Dbas.Base
/// <summary>Intercept column 'Get Field Suffix' to replace double/float with decimal where required.</summary>
private static String GetColumnGetFieldSuffix(DbDfnColumn columnDfn, bool treatDoubleFormatAsDecimal)
{
String suffix = columnDfn.GetGetFieldSuffix();
if (treatDoubleFormatAsDecimal)
{
switch (columnDfn.DataType)
{
case DbColumnDataType.Single:
case DbColumnDataType.Double:
return "Decimal";
suffix = "Decimal";
break;
}
}
return columnDfn.GetGetFieldSuffix();
return suffix;
}
//-------------------------------------------------------------------
private static List<string> nullableDataTypes = new List<string>() { "Boolean", "Byte", "Int16", "Int32", "Int64", "Single", "Double", "Decimal", "DateTime" };
/// <summary>
/// Determine whether column should be treated as nullable.
/// <para>- This behaviour is restricted to selected data types.</para>
/// </summary>
private bool TreatColumnAsNullable(DbDfnColumn columnDfn)
{
return (nullableDataTypes.ContainsCI(columnDfn.GetVariableTypeName()) && columnDfn.IsNullable);
}
//-------------------------------------------------------------------
@@ -589,7 +606,10 @@ namespace Sarand.Net.Standard.Dbas.Base
file.WriteLine(tab2 + "public class ColumnsData");
file.WriteLine(tab2 + "{");
foreach (var columnDfn in tableDfn.Columns)
file.WriteLine(tab3 + "public ColumnData" + GetColumnVariableTypeName(columnDfn) + " _" + columnDfn.Name + " { get; } = new ColumnData" + GetColumnVariableTypeName(columnDfn) + "(\"" + columnDfn.Name + "\"" + (columnDfn.IsIdentity ? ", true" : "") + ");");
{
String columnDataClassName = "ColumnData" + GetColumnVariableTypeName(columnDfn) + (TreatColumnAsNullable(columnDfn) ? "Nullable" : "");
file.WriteLine(tab3 + "public " + columnDataClassName + " _" + columnDfn.Name + " { get; } = new " + columnDataClassName + "(\"" + columnDfn.Name + "\"" + (columnDfn.IsIdentity ? ", true" : "") + ");");
}
file.WriteLine(tab2 + "}");
file.WriteLine(crlf + tab2 + "//-------------------------------------------------------------------");
file.WriteLine(tab2 + "// Data members.");
@@ -605,6 +625,10 @@ namespace Sarand.Net.Standard.Dbas.Base
file.WriteLine(tab2 + "{");
foreach (String columnName in primaryColumnNames) file.WriteLine(tab3 + "\"" + columnName + "\",");
file.WriteLine(tab2 + "};");
file.WriteLine(tab2 + "protected static List<String> fieldsNullable { get; } = new List<String>()");
file.WriteLine(tab2 + "{");
foreach (var columnDfn in tableDfn.Columns.FindAll(item => item.IsNullable)) file.WriteLine(tab3 + "\"" + columnDfn.Name + "\",");
file.WriteLine(tab2 + "};");
file.WriteLine(tab2 + "protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()");
file.WriteLine(tab2 + "{");
foreach (String columnName in columnsIgnoredOnUpdate) file.WriteLine(tab3 + "\"" + columnName + "\",");
@@ -644,7 +668,7 @@ namespace Sarand.Net.Standard.Dbas.Base
file.WriteLine(tab2 + "// Columns.");
file.WriteLine(tab2 + "public ColumnsData Cols { get; } = new ColumnsData();");
foreach (var columnDfn in tableDfn.Columns)
file.WriteLine(tab2 + "public " + GetColumnVariableType(columnDfn) + " _" + columnDfn.Name + " { get { return Cols._" + columnDfn.Name + ".Value; } set { Cols._" + columnDfn.Name + ".Value = value; } }");
file.WriteLine(tab2 + "public " + GetColumnVariableType(columnDfn) + (TreatColumnAsNullable(columnDfn) ? "?" : "") + " _" + columnDfn.Name + " { get { return Cols._" + columnDfn.Name + ".Value; } set { Cols._" + columnDfn.Name + ".Value = value; } }");
file.WriteLine(tab2 + "// Existing columns - confirmed on database if table exists.");
file.WriteLine(tab2 + "public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }");
file.WriteLine(tab2 + "public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }");
@@ -669,7 +693,7 @@ namespace Sarand.Net.Standard.Dbas.Base
file.WriteLine(tab2 + "public override void PopulateFrom (DbDataReader dbDataReader)");
file.WriteLine(tab2 + "{");
foreach (var columnDfn in tableDfn.Columns)
file.WriteLine(tab3 + "_" + columnDfn.Name + " = GetField" + GetColumnGetFieldSuffix(columnDfn) + "(dbDataReader, \"" + columnDfn.Name + "\", _" + columnDfn.Name + ");");
file.WriteLine(tab3 + "_" + columnDfn.Name + " = GetField" + GetColumnGetFieldSuffix(columnDfn) + (TreatColumnAsNullable(columnDfn) ? "Nullable" : "") + "(dbDataReader, \"" + columnDfn.Name + "\", _" + columnDfn.Name + ");");
file.WriteLine(tab2 + "}");
//-----------------------------------------------------------
@@ -698,11 +722,8 @@ namespace Sarand.Net.Standard.Dbas.Base
if (!String.IsNullOrEmpty(identityColumnName))
file.WriteLine(tab3 + "query += \"Output Inserted." + identityColumnName + " \";");
List<String> columnsValuesToInsertSql = new List<String>();
foreach (var columnDfn in tableDfn.Columns)
{
if (!columnDfn.IsIdentity)
columnsValuesToInsertSql.Add("@" + columnDfn.Name);
}
foreach (var columnDfn in tableDfn.Columns.Where(col => !col.IsIdentity))
columnsValuesToInsertSql.Add("@" + columnDfn.Name);
file.WriteLine(tab3 + "if (dbCommand is SqlCommand)");
file.WriteLine(tab4 + "query += \"VALUES (\" + columnNames.Concat(\",\", \"@\", \"\") + \") \";");
file.WriteLine(tab3 + "else query += \"VALUES (\" + " + (config.SarandCommonVersion == SarandCommonVersion.VS2019 ? "StringListUtil" : "StringList") + ".CreateList(\"?\", columnNames.Count).Concat(\",\") + \") \";");
@@ -712,11 +733,8 @@ namespace Sarand.Net.Standard.Dbas.Base
file.WriteLine(tab3 + "Log(GetType().Name + \".ExecuteInsertCommand\", dbCommand.CommandText);");
file.WriteLine(tab3 + "// Populate parameters.");
file.WriteLine(tab3 + "dbCommand.Parameters.Clear();");
foreach (var columnDfn in tableDfn.Columns)
{
if (!columnDfn.IsIdentity)
file.WriteLine(tab3 + "if (columnNames.ContainsCI(\"" + columnDfn.Name + "\")) AddCommandParameter(dbCommand, \"@" + columnDfn.Name + "\", _" + columnDfn.Name + ");");
}
foreach (var columnDfn in tableDfn.Columns.Where(col => !col.IsIdentity))
file.WriteLine(tab3 + "if (columnNames.ContainsCI(\"" + columnDfn.Name + "\")) AddCommandParameter(dbCommand, \"@" + columnDfn.Name + "\", _" + columnDfn.Name + ");");
file.WriteLine(tab3 + "// Execute insert command.");
file.WriteLine(tab3 + "bool commandSuccess = false;");
if (config.DbmsOutput == Dbms.SQL)