Files
DP44/DataPRO/DbAPI/TestSetups/TestSetups.cs

1179 lines
58 KiB
C#
Raw Normal View History

2026-04-17 14:55:32 -04:00
using DbAPI.Connections;
using DbAPI.Errors;
using DbAPI.Logging;
using DTS.Common.Classes.Groups;
using DTS.Common.Classes.TestSetups;
using DTS.Common.Interface.Database;
using DTS.Common.Interface.Groups;
using DTS.Common.Interface.TestSetups;
using DTS.Common.Interface.TestSetups.TestSetupsList;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Linq;
namespace DbAPI.TestSetups
{
/// <summary>
/// Handles TestSetup functions
/// <inheritdoc cref="ITestSetups"/>
/// </summary>
internal class TestSetups : ITestSetups
{
/// <summary>
/// deletes matching test setup hardware record
/// at least one parameter (id/dasid/testsetupid) must be specified
/// </summary>
/// <param name="user">user making request</param>
/// <param name="connection">connection request is being made on</param>
/// <param name="Id">id of test setup hardware record (null for all)</param>
/// <param name="dasId">id of das (null for all)</param>
/// <param name="testSetupId">id of test setup (null for all)</param>
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
public ulong TestSetupHardwareDelete(IUserDbRecord user,
IConnectionDetails connection,
int? Id,
int? dasId,
int? testSetupId
)
{
if (null == Id && null == dasId && null == testSetupId)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestSetupHardwareDelete");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null == Id)
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
}
else { cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = (int)Id }); }
if (null == dasId)
{
cmd.Parameters.Add(new SqlParameter("@DASId", SqlDbType.Int) { Value = null });
}
else { cmd.Parameters.Add(new SqlParameter("@DASId", SqlDbType.Int) { Value = (int)dasId }); }
if (null == testSetupId)
{
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = null });
}
else { cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = (int)testSetupId }); }
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (null != errorNumber.Value && !DBNull.Value.Equals(errorNumber.Value))
{
if (0 != Convert.ToInt32(errorNumber.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupHardwareDelete - Error - {errorNumber.Value} - {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupHardwareDelete - Error {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// updates a test setup hardware record
/// </summary>
/// <param name="user">user committing update</param>
/// <param name="connection">connection update is being made on</param>
/// <param name="record">updated record</param>
/// <returns>0 on success, all other values are error codes</returns>
public ulong TestSetupHardwareUpdate(IUserDbRecord user,
IConnectionDetails connection,
ITestSetupHardwareRecord record)
{
if (null == record)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
SqlCommand cmd;
var ret = PrepareForDbAccess(user, connection, connection.ClientDbVersion,
"sp_TestSetupHardwareUpdate", out int storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@DASId", SqlDbType.Int) { Value = record.DASId });
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = record.TestSetupId });
cmd.Parameters.Add(new SqlParameter("@AddOrRemove", SqlDbType.Bit) { Value = record.AddDAS });
cmd.Parameters.Add(new SqlParameter("@SamplesPerSecond", SqlDbType.Float) { Value = record.SamplesPerSecond });
cmd.Parameters.Add(new SqlParameter("@IsClockMaster", SqlDbType.Bit) { Value = record.IsClockMaster });
cmd.Parameters.Add(new SqlParameter("@AntiAliasFilterRate", SqlDbType.Float) { Value = record.AntiAliasFilterRate });
if (storedProcedureVersionToUse >= DTS.Common.Constants.PTP_DOMAIN_ID_DB_VERSION)
{
cmd.Parameters.Add(new SqlParameter("@PTPDomainId", SqlDbType.Int) { Value = (int)record.PTPDomainId });
}
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (null != errorNumber.Value && !DBNull.Value.Equals(errorNumber.Value))
{
if (0 != Convert.ToInt32(errorNumber.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupHardwareUpdate - Error - {errorNumber.Value} - {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupHardwareUpdate - Error {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// inserts a new record
/// </summary>
/// <param name="user">user inserting record</param>
/// <param name="connection">connection being inserted on</param>
/// <param name="record">record being inserted</param>
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
public ulong TestSetupHardwareInsert(IUserDbRecord user,
IConnectionDetails connection,
ITestSetupHardwareRecord record)
{
if (null == record)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
SqlCommand cmd;
var ret = PrepareForDbAccess(user, connection, connection.ClientDbVersion,
"sp_TestSetupHardwareInsert", out int storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@DASId", SqlDbType.Int) { Value = record.DASId });
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = record.TestSetupId });
cmd.Parameters.Add(new SqlParameter("@AddOrRemove", SqlDbType.Bit) { Value = record.AddDAS });
cmd.Parameters.Add(new SqlParameter("@SamplesPerSecond", SqlDbType.Float) { Value = record.SamplesPerSecond });
cmd.Parameters.Add(new SqlParameter("@IsClockMaster", SqlDbType.Bit) { Value = record.IsClockMaster });
cmd.Parameters.Add(new SqlParameter("@AntiAliasFilterRate", SqlDbType.Float) { Value = record.AntiAliasFilterRate });
if (storedProcedureVersionToUse >= DTS.Common.Constants.PTP_DOMAIN_ID_DB_VERSION)
{
cmd.Parameters.Add(new SqlParameter("@PTPDomainId", SqlDbType.Int) { Value = (int)record.PTPDomainId });
}
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (null != errorNumber.Value && !DBNull.Value.Equals(errorNumber.Value))
{
if (0 != Convert.ToInt32(errorNumber.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupHardwareInsert - Error - {errorNumber.Value} - {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupHardwareInsert - Error {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// retrieves all hardware meta data associated with test
/// [sample rate, aaf, etc]
/// </summary>
/// <param name="user">user retrieving hardware</param>
/// <param name="connection">connecting hardware is retrieved on</param>
/// <param name="testSetupId">id of test setup (use null for all)</param>
/// <param name="records">all matching records</param>
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
public ulong TestSetupHardwareGet(IUserDbRecord user,
IConnectionDetails connection,
int clientDbVersion,
int? testSetupId,
out ITestSetupHardwareRecord[] records)
{
var storedProcedureVersionToUse = 0;
records = null;
SqlCommand cmd;
var ret = PrepareForDbAccess(user, connection, clientDbVersion,
"sp_TestSetupHardwareGet", out storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null == testSetupId)
{
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = null });
}
else { cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = (int)testSetupId }); }
var reader = cmd.ExecuteReader();
var list = new List<ITestSetupHardwareRecord>();
while (reader.Read())
{
list.Add(new TestSetupHardwareRecord(reader, storedProcedureVersionToUse));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupHardwareGet - Error {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// inserts a new group/test setup association into db
/// </summary>
/// <param name="user">user making request</param>
/// <param name="connection">connection request is being made on</param>
/// <param name="record">record to insert</param>
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
public ulong TestSetupGroupsInsert(IUserDbRecord user,
IConnectionDetails connection,
ITestSetupGroupRecord record)
{
if (null == record)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestSetupGroupsInsert");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = record.GroupId });
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = record.TestSetupId });
cmd.Parameters.Add(new SqlParameter("@DisplayOrder", SqlDbType.Int) { Value = record.DisplayOrder });
cmd.Parameters.Add(new SqlParameter("@Position", SqlDbType.VarChar, 1) { Value = record.Position });
cmd.Parameters.Add(new SqlParameter("@TestObjectType", SqlDbType.VarChar, 1) { Value = record.TestObjectType });
cmd.Parameters.Add(new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output });
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (null != errorNumber.Value && !DBNull.Value.Equals(errorNumber.Value))
{
if (0 != Convert.ToInt32(errorNumber.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups,
$"TestSetupsGroupsInsert Error - {errorNumber.Value} - {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupsGroupInsert Error - {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// updates a group/test setup association in db
/// </summary>
/// <param name="user">user making request</param>
/// <param name="connection">connection is being made on</param>
/// <param name="record">updated record</param>
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
public ulong TestSetupGroupsUpdate(IUserDbRecord user,
IConnectionDetails connection,
ITestSetupGroupRecord record)
{
if (null == record)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestSetupGroupsUpdate");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = record.GroupId });
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = record.TestSetupId });
cmd.Parameters.Add(new SqlParameter("@DisplayOrder", SqlDbType.Int) { Value = record.DisplayOrder });
cmd.Parameters.Add(new SqlParameter("@Position", SqlDbType.VarChar, 1) { Value = record.Position });
cmd.Parameters.Add(new SqlParameter("@TestObjectType", SqlDbType.VarChar, 1) { Value = record.TestObjectType });
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (null != errorNumber.Value && !DBNull.Value.Equals(errorNumber.Value))
{
if (0 != Convert.ToInt32(errorNumber.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups,
$"TestSetupsGroupsUpdate Error - {errorNumber.Value} - {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupsGroupInsert Error - {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// retrieves all group records matching search criteria
/// </summary>
/// <param name="user">user making request</param>
/// <param name="connection">connection request is being made on</param>
/// <param name="groupId">database id of group (use null for all)</param>
/// <param name="testSetupId">database id of test setup (use null for all)</param>
/// <param name="testSetupName">test setup name for test setup (use null for all)</param>
/// <param name="records">matching groups</param>
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
public ulong TestSetupGroupsGet(IUserDbRecord user,
IConnectionDetails connection,
int? groupId,
int? testSetupId,
string testSetupName,
out ITestSetupGroupRecord[] records
)
{
records = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestSetupGroupsGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null == groupId)
{
cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = null });
}
else { cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = (int)groupId }); }
if (null == testSetupId)
{
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = null });
}
else { cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = (int)testSetupId }); }
cmd.Parameters.Add(new SqlParameter("@TestSetupName", SqlDbType.NVarChar, 255) { Value = testSetupName });
var reader = cmd.ExecuteReader();
var list = new List<ITestSetupGroupRecord>();
while (reader.Read())
{
list.Add(new TestSetupGroupRecord(reader));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupsGroupsGet Error - {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// Commits a change to the IsDirty or IsComplete flags in the db for a test
/// </summary>
/// <param name="user">user committing change</param>
/// <param name="connection">connection change is being committed on</param>
/// <param name="name">name of test setup to modify</param>
/// <param name="dirty">whether to set dirty flag or not. Dirty flag indicates
/// whether the test setup has been checked for completeness and readiness to run</param>
/// <param name="complete">whether the test setup is ready to run or not</param>
/// <param name="error">errors associated with test, if any</param>
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
public ulong TestSetupsMarkIsDirtyIsComplete(IUserDbRecord user,
IConnectionDetails connection,
string name,
bool dirty,
bool complete,
string error)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestSetupsIsCompleteUpdate");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@TestSetupName", SqlDbType.NVarChar, 50) { Value = name });
cmd.Parameters.Add(new SqlParameter("@Dirty", SqlDbType.Bit) { Value = dirty });
cmd.Parameters.Add(new SqlParameter("@Complete", SqlDbType.Bit) { Value = complete });
cmd.Parameters.Add(new SqlParameter("@Error", SqlDbType.NVarChar, 255) { Value = error });
var errorNumberParam =
new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
var errorMessageParam =
new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
cmd.ExecuteNonQuery();
if (int.Parse(errorNumberParam.Value.ToString()) != 0)
{
var msg = Convert.ToString(errorMessageParam.Value);
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupsMarkIsDirtyIsComplete failed: {errorNumberParam.Value} - {msg}");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupsMarkIsDirtyIsComplete failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// deletes all test setups matching criteria
/// </summary>
/// <param name="user">user deleting test setups</param>
/// <param name="connection">connection tests are being deleted on</param>
/// <param name="date">date of oldest allowed test setup</param>
/// <returns>0 (ERROR_SUCCESS) on success. All other values are error codes.</returns>
public ulong TestSetupsDeleteByDate(IUserDbRecord user,
IConnectionDetails connection,
DateTime date)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestSetupsDeleteManyByDate");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@DeleteDateBefore", SqlDbType.DateTime) { Value = date });
var errorNumberParam =
new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
var errorMessageParam =
new SqlParameter("@errorMessage", SqlDbType.NVarChar, 4000)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
cmd.ExecuteNonQuery();
var errorNumber = int.Parse(errorNumberParam.Value.ToString());
if (errorNumber != 0)
{
var message = errorMessageParam.Value.ToString();
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupsDeleteByDate failed: {errorNumber} - {message}");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupsDeleteByDate failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// deletes all test setups and groups
/// </summary>
/// <param name="user">user requesting deletes</param>
/// <param name="connection">connection to delete on</param>
/// <returns>0 (ERROR_SUCCESS) on success. All other values are error codes</returns>
public ulong TestSetupsAndGroupsDeleteAll(IUserDbRecord user,
IConnectionDetails connection)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestSetupsAndGroupsDeleteAll");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
var errorMessageParam =
new SqlParameter("@ErrorMessage", SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
var errorSeverityParam =
new SqlParameter("@ErrorSeverity", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorSeverityParam);
var errorNumberParam =
new SqlParameter("@ErrorState", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
cmd.ExecuteNonQuery();
if (DBNull.Value != errorNumberParam.Value)
{
var error = int.Parse(errorNumberParam.Value.ToString());
if (error != 0)
{
var message = int.Parse(errorNumberParam.Value.ToString());
var state = int.Parse(errorNumberParam.Value.ToString());
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupsAndGroupsDeleteAll failed: {error} - {state} - {message}");
return ErrorCodes.ERROR_UNKNOWN;
}
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"TestSetupsAndGroupsDeleteAll failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// Deletes all test setups that match the search criteria
/// </summary>
/// <param name="user">user deleting test setups</param>
/// <param name="connection">connection to delete test setups on</param>
/// <param name="ids">ids of test setups to delete</param>
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
public ulong TestSetupsDeleteById(IUserDbRecord user,
IConnectionDetails connection,
int[] ids)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (null == ids || 0 == ids.Length)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestSetupsDeleteManyById");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@TestSetupIdList", SqlDbType.NVarChar) { Value = string.Join(",", ids) });
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (DBNull.Value.Equals(errorNumber.Value))
{
var error = int.Parse(errorNumber.Value.ToString());
if (error != 0)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"sp_TestSetupsDeleteById failed: {error} - {errorMessage.Value}");
}
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"sp_TestSetupsDeleteById failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// deletes all test setups that match the search criteria
/// </summary>
/// <param name="user">user deleting test setups</param>
/// <param name="connection">connection to delete test setups on</param>
/// <param name="names">names of test setups to delete</param>
/// <returns>0 (ERROR_SUCCESS) on success, all other values are errors</returns>
public ulong TestSetupsDeleteByName(IUserDbRecord user,
IConnectionDetails connection,
string[] names)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (null == names || 0 == names.Length)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestSetupsDeleteManyByName");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@TestSetupNameList", SqlDbType.NVarChar) { Value = string.Join(",", names) });
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (DBNull.Value.Equals(errorNumber.Value))
{
var error = int.Parse(errorNumber.Value.ToString());
if (error != 0)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"sp_TestSetupsDeleteByName failed: {error} - {errorMessage.Value}");
}
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"sp_TestSetupsDeleteByName failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
private ulong PrepareForDbAccess(IUserDbRecord user,
IConnectionDetails connection,
int clientDbVersion,
string storedProcedure,
out int storedProcedureVersionToUse,
out SqlCommand cmd)
{
storedProcedureVersionToUse = 0;
cmd = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = DbAPI.GetStoredProcedureToUse(connection, storedProcedure, clientDbVersion, out storedProcedureVersionToUse);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
ret = ConnectionManager.GetSqlCommand(connection, out cmd, storedProcedureVersionToUse == 0 ? storedProcedure : $"{storedProcedure}_{storedProcedureVersionToUse}");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
return ret;
}
/// <summary>
/// commits a test setup into the database
/// </summary>
/// <param name="user">user committing record</param>
/// <param name="connection">connection record is being committed on</param>
/// <param name="clientDbVersion">the db version of the calling client</param>
/// <param name="record">record being committed</param>
/// <returns>0 (ERROR_SUCCESS) on success, all other values are errors</returns>
public ulong TestSetupsUpdateInsert(IUserDbRecord user,
IConnectionDetails connection,
int clientDbVersion,
ref ITestSetupRecord record)
{
var storedProcedureVersionToUse = 0;
SqlCommand cmd;
var ret = PrepareForDbAccess(user, connection, clientDbVersion,
"sp_TestSetupsUpdateInsert", out storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
#region params
cmd.Parameters.Add(
new SqlParameter("@TestSetupName", SqlDbType.NVarChar, 50) { Value = record.Name });
cmd.Parameters.Add(
new SqlParameter("@SetupDescription", SqlDbType.NVarChar, 50) { Value = record.Description ?? "" });
cmd.Parameters.Add(
new SqlParameter("@AutomaticTestProgression", SqlDbType.Bit)
{
Value = record.AutomaticProgression
});
cmd.Parameters.Add(
new SqlParameter("@AutomaticProgressionDelayMS", SqlDbType.Int)
{
Value = record.AutomaticProgressionDelayMS
});
cmd.Parameters.Add(
new SqlParameter("@InvertTrigger", SqlDbType.Bit) { Value = record.InvertTriggerCompletion });
cmd.Parameters.Add(
new SqlParameter("@InvertStart", SqlDbType.Bit) { Value = record.InvertStartRecordCompletion });
if (storedProcedureVersionToUse >= DTS.Common.Constants.IgnoreShorted_DB_VERSION)
{
//Since we're not calling the older version (91) that doesn't have these parameters, include them
cmd.Parameters.Add(new SqlParameter("@IgnoreShortedStart", SqlDbType.Bit) { Value = record.IgnoreShortedStartCompletion });
cmd.Parameters.Add(new SqlParameter("@IgnoreShortedTrigger", SqlDbType.Bit) { Value = record.IgnoreShortedTriggerCompletion });
}
cmd.Parameters.Add(
new SqlParameter("@ViewDiagnostics", SqlDbType.Bit) { Value = record.ViewDiagnostics });
cmd.Parameters.Add(
new SqlParameter("@VerifyChannels", SqlDbType.Bit) { Value = record.VerifyChannels });
cmd.Parameters.Add(
new SqlParameter("@AutoVerifyChannels", SqlDbType.Bit) { Value = record.AutoVerifyChannels });
cmd.Parameters.Add(new SqlParameter("@VerifyChannelsDelayMS", SqlDbType.Int)
{
Value = Convert.ToInt32(record.AutoVerifyDelaySeconds * 1000)
});
cmd.Parameters.Add(
new SqlParameter("@RecordingMode", SqlDbType.SmallInt) { Value = record.RecordingMode });
cmd.Parameters.Add(
new SqlParameter("@SamplesPerSecond", SqlDbType.Float) { Value = record.SamplesPerSecondAggregate });
cmd.Parameters.Add(
new SqlParameter("@PreTriggerSeconds", SqlDbType.Float) { Value = record.PreTriggerSeconds });
cmd.Parameters.Add(
new SqlParameter("@PostTriggerSeconds", SqlDbType.Float) { Value = record.PostTriggerSeconds });
cmd.Parameters.Add(
new SqlParameter("@NumberOfEvents", SqlDbType.Int) { Value = record.NumberOfEvents });
cmd.Parameters.Add(
new SqlParameter("@StrictDiagnostics", SqlDbType.Bit)
{
Value = record.StrictDiagnostics ? 255 : 0
});
cmd.Parameters.Add(
new SqlParameter("@RequireConfirmationOnErrors", SqlDbType.Bit)
{
Value = record.RequireUserConfirmationOnErrors
});
cmd.Parameters.Add(
new SqlParameter("@ROIDownload", SqlDbType.Bit) { Value = record.DoROIDownload });
cmd.Parameters.Add(
new SqlParameter("@ViewROIDownload", SqlDbType.Bit) { Value = record.ViewROIDownload });
cmd.Parameters.Add(new SqlParameter("@DownloadAll", SqlDbType.Bit) { Value = record.DownloadAll });
cmd.Parameters.Add(
new SqlParameter("@ViewRealtime", SqlDbType.Bit) { Value = record.ViewRealtime });
cmd.Parameters.Add(
new SqlParameter("@RealtimePlotCount", SqlDbType.SmallInt)
{
Value = record.DefaultNumberRealtimeGraphs
});
if (storedProcedureVersionToUse < DTS.Common.Constants.ROITables_DB_VERSION)
{
//Since we're calling the older version (91) that has this parameter, include it
cmd.Parameters.Add(new SqlParameter("@RegionsOfInterest", SqlDbType.NVarChar, -1)
{
Value = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(
record.RegionsOfInterest)
});
}
cmd.Parameters.Add(new SqlParameter("@ROIStart", SqlDbType.Float) { Value = record.ROIStart });
cmd.Parameters.Add(new SqlParameter("@ROIEnd", SqlDbType.Float) { Value = record.ROIEnd });
cmd.Parameters.Add(
new SqlParameter("@ViewDownloadAll", SqlDbType.Bit) { Value = record.ViewDownloadAll });
cmd.Parameters.Add(new SqlParameter("@Export", SqlDbType.Bit) { Value = record.ViewExport });
cmd.Parameters.Add(
new SqlParameter("@ExportFormat", SqlDbType.BigInt)
{
Value = Convert.ToUInt64(record.ExportFormats)
});
cmd.Parameters.Add(new SqlParameter("@LabDetails", SqlDbType.NVarChar, 50)
{
Value = record.LabDetails ?? ""
});
cmd.Parameters.Add(
new SqlParameter("@UseLabDetails", SqlDbType.Bit) { Value = record.UseLabratoryDetails });
cmd.Parameters.Add(new SqlParameter("@CustomerDetails", SqlDbType.NVarChar, 50)
{
Value = record.CustomerDetails ?? ""
});
cmd.Parameters.Add(
new SqlParameter("@UseCustomerDetails", SqlDbType.Bit) { Value = record.UseCustomerDetails });
cmd.Parameters.Add(new SqlParameter("@ExtraProperties", SqlDbType.NVarChar, -1)
{
Value = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(
record.ExtraProperties.ToArray())
});
cmd.Parameters.Add(new SqlParameter("@AllowMissingSensors", SqlDbType.Bit) { Value = record.AllowMissingSensors });
cmd.Parameters.Add(new SqlParameter("@AllowSensorIdToBlankChannel", SqlDbType.Bit)
{
Value = record.AllowSensorIdToBlankChannel
});
cmd.Parameters.Add(new SqlParameter("@CalibrationBehavior", SqlDbType.SmallInt) { Value = (int)record.CalibrationBehavior });
cmd.Parameters.Add(new SqlParameter("@LocalOnly", SqlDbType.Bit) { Value = record.LocalOnly });
cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = record.LastModified });
cmd.Parameters.Add(new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar, 50) { Value = record.LastModifiedBy });
cmd.Parameters.Add(new SqlParameter("@TurnOffExcitation", SqlDbType.Bit) { Value = record.TurnOffExcitation });
cmd.Parameters.Add(new SqlParameter("@TriggerCheckRealtime", SqlDbType.Bit)
{
Value = record.TriggerCheckRealtime
});
cmd.Parameters.Add(new SqlParameter("@TriggerCheckStep", SqlDbType.Bit) { Value = record.TriggerCheckStep });
cmd.Parameters.Add(new SqlParameter("@PostTestDiagnostics", SqlDbType.Int)
{
Value = record.PostTestDiagnosticsLevel
});
cmd.Parameters.Add(new SqlParameter("@MeasureSquibResistancesStep", SqlDbType.Bit) { Value = record.MeasureSquibResistancesStep });
cmd.Parameters.Add(new SqlParameter("@ExportFolder", SqlDbType.NVarChar, 150)
{
Value = ""
});
cmd.Parameters.Add(
new SqlParameter("@DownloadFolder", SqlDbType.NVarChar, 150)
{
Value = ""
});
cmd.Parameters.Add(
new SqlParameter("@CommonStatusLine", SqlDbType.Bit) { Value = record.CommonStatusLine });
cmd.Parameters.Add(
new SqlParameter("@SameAsDownloadFolder", SqlDbType.Bit)
{
Value = record.SameAsDownloadFolder
});
cmd.Parameters.Add(new SqlParameter("@UploadData", SqlDbType.Bit) { Value = record.UploadData });
cmd.Parameters.Add(
new SqlParameter("@UploadDataFolder", SqlDbType.NVarChar, 150) { Value = record.UploadFolder ?? "" });
cmd.Parameters.Add(
new SqlParameter("@UploadExportsOnly", SqlDbType.Bit) { Value = record.UploadExportsOnly });
cmd.Parameters.Add(
new SqlParameter("@Settings", SqlDbType.NVarChar, 4000) { Value = record.Settings ?? "" });
cmd.Parameters.Add(
new SqlParameter("@WarnOnBatteryFail", SqlDbType.Bit) { Value = record.WarnOnFailedBattery });
cmd.Parameters.Add(new SqlParameter("@Dirty", SqlDbType.Bit) { Value = record.Dirty });
cmd.Parameters.Add(new SqlParameter("@Complete", SqlDbType.Bit) { Value = record.IsComplete });
cmd.Parameters.Add(
new SqlParameter("@Error", SqlDbType.NVarChar, 255) { Value = record.ErrorMessage });
cmd.Parameters.Add(new SqlParameter("@TestEngineerDetails", SqlDbType.NVarChar, 50)
{
Value = record.TestEngineerDetails ?? ""
});
cmd.Parameters.Add(
new SqlParameter("@UseTestEngineerDetails", SqlDbType.Bit)
{
Value = record.UseTestEngineerDetails
});
cmd.Parameters.Add(
new SqlParameter("@UserTags", SqlDbType.VarBinary) { Value = record.TagsBlobBytes });
cmd.Parameters.Add(new SqlParameter("@DoAutoArm", SqlDbType.Bit) { Value = record.DoAutoArm });
cmd.Parameters.Add(new SqlParameter("@DoStreaming", SqlDbType.Bit) { Value = record.DoStreaming });
if (DTS.Common.Constants.OnePPSOutProfiles.Contains(record.ClockSyncProfileMaster) && storedProcedureVersionToUse < DTS.Common.Constants.ONEPPS_OUT_DB_VERSION)
{
record.ClockSyncProfileMaster = DTS.Common.ClockSyncProfile.None;
}
cmd.Parameters.Add(new SqlParameter("@ClockSyncProfileMaster", SqlDbType.NVarChar, 50) { Value = record.ClockSyncProfileMaster.ToString() });
if (DTS.Common.Constants.OnePPSOutProfiles.Contains(record.ClockSyncProfileSlave) && storedProcedureVersionToUse < DTS.Common.Constants.ONEPPS_OUT_DB_VERSION)
{
record.ClockSyncProfileSlave = DTS.Common.ClockSyncProfile.None;
}
cmd.Parameters.Add(new SqlParameter("@ClockSyncProfileSlave", SqlDbType.NVarChar, 50) { Value = record.ClockSyncProfileSlave.ToString() });
cmd.Parameters.Add(
new SqlParameter("@CheckoutMode", SqlDbType.Bit) { Value = record.CheckoutMode });
cmd.Parameters.Add(
new SqlParameter("@ISFFile", SqlDbType.NVarChar, 4000) { Value = record.ISFFile ?? "" });
cmd.Parameters.Add(
new SqlParameter("@QuitTestWithoutWarning", SqlDbType.Bit)
{
Value = record.QuitTestWithoutWarning
});
cmd.Parameters.Add(
new SqlParameter("@NotAllChannelsRealTime", SqlDbType.Bit)
{
Value = record.NotAllChannelsRealTime
});
cmd.Parameters.Add(
new SqlParameter("@NotAllChannelsViewer", SqlDbType.Bit)
{
Value = record.NotAllChannelsViewer
});
cmd.Parameters.Add(
new SqlParameter("@SuppressMissingSensorsWarning", SqlDbType.Bit)
{
Value = record.SuppressMissingSensorsWarning
});
//If we got here without either maintaining or generating a new TestSetupUniqueId, generate one here
if (record.TestSetupUniqueId == null)
{
record.TestSetupUniqueId = Guid.NewGuid().ToString();
}
cmd.Parameters.Add(new SqlParameter("@TestSetupUniqueId", SqlDbType.NVarChar, 4000) { Value = record.TestSetupUniqueId });
cmd.Parameters.Add(
new SqlParameter("@TestSetup", SqlDbType.VarBinary) { Value = new byte[0] });
cmd.Parameters.Add(new SqlParameter("@WakeupAndTriggerOn", SqlDbType.Bit) { Value = record.WakeUpAndArmTriggerOn });
cmd.Parameters.Add(new SqlParameter("@WakeupTrigger", SqlDbType.SmallInt) { Value = (int)record.WakeUpTrigger });
cmd.Parameters.Add(new SqlParameter("@WakeUpMotionTimeout", SqlDbType.Int) { Value = record.WakeUpMotionTimeout });
cmd.Parameters.Add(new SqlParameter("@TimedIntervalFrequency", SqlDbType.Int) { Value = Convert.ToInt32(record.IntervalBetweenEventStartsMinutes) });
if (DateTime.MinValue.Equals(record.RTCScheduleStartDateTime))
{
cmd.Parameters.Add(new SqlParameter("@RTCScheduleStartDateTime", SqlDbType.DateTime) { Value = DBNull.Value });
}
else
{
cmd.Parameters.Add(new SqlParameter("@RTCScheduleStartDateTime", SqlDbType.DateTime) { Value = record.RTCScheduleStartDateTime });
}
cmd.Parameters.Add(new SqlParameter("@RTCScheduleDuration", SqlDbType.BigInt) { Value = record.RTCScheduleDuration.Ticks });
cmd.Parameters.Add(new SqlParameter("@StartWithEvent", SqlDbType.Bit) { Value = record.StartWithEvent });
if (storedProcedureVersionToUse >= DTS.Common.Constants.EnableRepeat_DB_VERSION)
{
//Since we're not calling the older version (91) that doesn't have this parameter, include it
cmd.Parameters.Add(new SqlParameter("@RepeatAutoArmOrStreaming", SqlDbType.Bit) { Value = record.DoEnableRepeat });
}
if (storedProcedureVersionToUse >= DTS.Common.Constants.ALIGNUDPTOPPS_DB_VERSION)
{
cmd.Parameters.Add(new SqlParameter("@AlignUDPToPPS", SqlDbType.Bit) { Value = record.AlignUDPToPPS });
}
var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
var errorNumberParam =
new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
var errorMessageParam =
new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
#endregion params
cmd.ExecuteNonQuery();
if (int.Parse(errorNumberParam.Value.ToString()) != 0)
{
throw new Exception((string)errorMessageParam.Value);
}
record.Id = int.Parse(newIdParam.Value.ToString());
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"sp_TestSetupsUpdateInsert failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
/// <summary>
/// Retrieves all test setups which match given search criteria
/// </summary>
/// <param name="user">user making query</param>
/// <param name="connection">connection over which query is to be made</param>
/// <param name="clientDbVersion">the db version of the calling client</param>
/// <param name="testSetupId">database id of test setup (can be null)</param>
/// <param name="testSetupName">name of test setup (can be null or empty)</param>
/// <param name="defaultROIEnd">ROI end period (used to populate older test setups that
/// are missing explicit ROI start/end periods for multiple events)</param>
/// <param name="defaultROIStart">ROI start period (used to populate older test setups
/// that are missing explicit ROI start/end periods for multiple events)</param>
/// <param name="defaultIgnoreShortedStart">whether or not to ignore a shorted start
/// since we may be using a Version 91 database that doesn't store this</param>
/// <param name="defaultIgnoreShortedTrigger">whether or not to ignore a shorted trigger
/// since we may be using a Version 91 database that doesn't store this</param>
/// <param name="records">matching records</param>
/// <param name="errors">any errors encountered while retrieving test setups</param>
/// <returns>0 (ERROR_SUCCESS) on success, all other values are errors</returns>
public ulong TestSetupsGet(IUserDbRecord user,
IConnectionDetails connection,
int clientDbVersion,
int? testSetupId,
string testSetupName,
double defaultROIStart,
double defaultROIEnd,
bool defaultIgnoreShortedStart,
bool defaultIgnoreShortedTrigger,
out ITestSetupRecord[] records,
out string[] errors)
{
errors = new string[0];
records = new ITestSetupRecord[0];
var storedProcedureVersionToUse = 0;
SqlCommand cmd;
var ret = PrepareForDbAccess(user, connection, clientDbVersion,
"sp_TestSetupsGet", out storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null == testSetupId)
{
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = null });
}
else
{
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = (int)testSetupId });
}
cmd.Parameters.Add(new SqlParameter("@TestSetupName", SqlDbType.NVarChar, 50) { Value = testSetupName });
var reader = cmd.ExecuteReader();
var list = new List<ITestSetupRecord>();
var lErrors = new List<string>();
while (reader.Read())
{
try
{
list.Add(new TestSetupRecord(reader, defaultROIStart, defaultROIEnd, defaultIgnoreShortedStart, defaultIgnoreShortedTrigger, storedProcedureVersionToUse, out var recordErrors));
if (null != recordErrors && recordErrors.Any())
{
lErrors.AddRange(recordErrors);
errors = lErrors.ToArray();
}
}
catch (Exception ex)
{
lErrors.Add($"{DTS.Common.Strings.Strings.FailedToReadTestSetup} - {ex.Message}");
errors = lErrors.ToArray();
}
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"sp_TestSetupsGet failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
}
}