Skip to content

Commit

Permalink
PhasorServices and MetadataExportAdaper
Browse files Browse the repository at this point in the history
  • Loading branch information
collins-self committed Dec 23, 2024
1 parent a6bdea7 commit 220c77e
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ private DataSet AcquireMetadata()
DataSet metadata = new DataSet();

// Initialize active node ID
Guid nodeID = Guid.Parse(dbConnection.ExecuteScalar($"SELECT NodeID FROM IaonActionAdapter WHERE ID = {ID}").ToString());
Guid nodeID = Guid.Parse(dbConnection.ExecuteScalar("SELECT NodeID FROM IaonActionAdapter WHERE ID = {0}", ID).ToString());

// Copy key metadata tables
foreach (string tableExpression in MetadataTables.Split(';'))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,7 @@ private Action<DataSet> GetSynchronizeMetadataAction()

// Determine the active node ID - we cache this since this value won't change for the lifetime of this class
if (nodeID == Guid.Empty)
nodeID = Guid.Parse(command.ExecuteScalar($"SELECT NodeID FROM IaonActionAdapter WHERE ID = {(int)ID}", MetadataSynchronizationTimeout).ToString());
nodeID = Guid.Parse(command.ExecuteScalar("SELECT NodeID FROM IaonActionAdapter WHERE ID = {0}", (int)ID, MetadataSynchronizationTimeout).ToString());

// Determine the protocol record auto-inc ID value for the gateway transport protocol (GEP) - this value is also cached since it shouldn't change for the lifetime of this class
if (virtualProtocolID == 0)
Expand All @@ -462,19 +462,19 @@ private Action<DataSet> GetSynchronizeMetadataAction()
if (sourceID == null || sourceID == DBNull.Value)
{
// Get a historian ID, but exclude the STAT historian
object randomHistorianID = command.ExecuteScalar($"SELECT ID FROM Historian WHERE Acronym <> 'STAT'", MetadataSynchronizationTimeout);
object randomHistorianID = command.ExecuteScalar("SELECT ID FROM Historian WHERE Acronym <> 'STAT'", MetadataSynchronizationTimeout);
command.ExecuteNonQuery(insertParentDeviceSql, MetadataSynchronizationTimeout, database.Guid(nodeID), randomHistorianID, ParentDeviceAcronym, ParentDeviceAcronym, virtualProtocolID);
sourceID = command.ExecuteScalar(parentDeviceIDSql, MetadataSynchronizationTimeout, ParentDeviceAcronym);
}

int parentID = Convert.ToInt32(sourceID);

// Validate that the subscriber device is marked as a concentrator (we are about to associate children devices with it)
if (!command.ExecuteScalar($"SELECT IsConcentrator FROM Device WHERE ID = {parentID}", MetadataSynchronizationTimeout).ToString().ParseBoolean())
command.ExecuteNonQuery($"UPDATE Device SET IsConcentrator = 1 WHERE ID = {parentID}", MetadataSynchronizationTimeout);
if (!command.ExecuteScalar("SELECT IsConcentrator FROM Device WHERE ID = {0}", parentID, MetadataSynchronizationTimeout).ToString().ParseBoolean())
command.ExecuteNonQuery("UPDATE Device SET IsConcentrator = 1 WHERE ID = {0}", parentID, MetadataSynchronizationTimeout);

// Get any historian associated with the subscriber device
object historianID = command.ExecuteScalar($"SELECT HistorianID FROM Device WHERE ID = {parentID}", MetadataSynchronizationTimeout);
object historianID = command.ExecuteScalar("SELECT HistorianID FROM Device WHERE ID = {0}", parentID, MetadataSynchronizationTimeout);

// Ascertain total number of actions required for all metadata synchronization so some level feed back can be provided on progress
initSyncProgress(metadata.Tables.Cast<DataTable>().Sum(dataTable => (long)dataTable.Rows.Count) + 3);
Expand Down
2 changes: 1 addition & 1 deletion Source/Libraries/Adapters/PIAdapters/PIOutputAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2475,7 +2475,7 @@ protected override void ExecuteMetadataRefresh()
{
// Attempt to look up last update time for record
database ??= new AdoDataConnection("systemSettings");
updateTime = Convert.ToDateTime(database.Connection.ExecuteScalar($"SELECT UpdatedOn FROM Measurement WHERE SignalID = '{signalID}'"));
updateTime = Convert.ToDateTime(database.Connection.ExecuteScalar("SELECT UpdatedOn FROM Measurement WHERE SignalID = '{0}'", signalID));
}
}
catch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1112,7 +1112,7 @@ private static void MeasurementDeviceAssociation(AdoDataConnection connection, s
}

// Make sure device acronym exists
if (connection.ExecuteScalar<int>($"SELECT COUNT(*) FROM Device WHERE NodeID={nodeIDQueryString} AND Acronym={{0}}", deviceAcronym) == 0)
if (connection.ExecuteScalar<int>("SELECT COUNT(*) FROM Device WHERE NodeID={0} AND Acronym={1}", nodeIDQueryString, deviceAcronym) == 0)
{
// Lookup virtual device protocol
if (connection.ExecuteScalar<int>("SELECT COUNT(*) FROM Protocol WHERE Acronym='VirtualInput'") == 0)
Expand All @@ -1132,7 +1132,7 @@ private static void MeasurementDeviceAssociation(AdoDataConnection connection, s
statusMessage($"Validating \"{deviceAcronym}\" virtual device measurement associations...");

// Get device ID
int deviceID = connection.ExecuteScalar<int>($"SELECT ID FROM Device WHERE NodeID={nodeIDQueryString} AND Acronym={{0}}", deviceAcronym);
int deviceID = connection.ExecuteScalar<int>("SELECT ID FROM Device WHERE NodeID={0} AND Acronym={1}", nodeIDQueryString, deviceAcronym);

// Get measurements that should be associated with device ID but are not currently
IEnumerable<DataRow> measurements = connection.RetrieveData("SELECT PointID FROM Measurement WHERE ({0}) AND (DeviceID IS NULL OR DeviceID <> {{1}})", lookupExpression, deviceID).AsEnumerable();
Expand Down Expand Up @@ -1296,7 +1296,7 @@ private static void PhasorDataSourceValidation(AdoDataConnection database, strin
statusMessage("Verifying statistics archive exists...");

// Validate that the statistics historian exists
if (Convert.ToInt32(database.Connection.ExecuteScalar($"SELECT COUNT(*) FROM Historian WHERE Acronym='STAT' AND NodeID={nodeIDQueryString}")) == 0)
if (Convert.ToInt32(database.Connection.ExecuteScalar("SELECT COUNT(*) FROM Historian WHERE Acronym='STAT' AND NodeID={0}", nodeIDQueryString)) == 0)
database.Connection.ExecuteNonQuery($"INSERT INTO Historian(NodeID, Acronym, Name, AssemblyName, TypeName, ConnectionString, IsLocal, Description, LoadOrder, Enabled) VALUES({nodeIDQueryString}, 'STAT', 'Statistics Archive', 'HistorianAdapters.dll', 'HistorianAdapters.LocalOutputAdapter', '', 1, 'Local historian used to archive system statistics', 9999, 1)");

// Make sure statistics path exists to hold historian files
Expand Down Expand Up @@ -1351,7 +1351,7 @@ private static void PhasorDataSourceValidation(AdoDataConnection database, strin
configFile.Save();

// Get the needed statistic related IDs
int statHistorianID = Convert.ToInt32(database.Connection.ExecuteScalar($"SELECT ID FROM Historian WHERE Acronym='STAT' AND NodeID={nodeIDQueryString}"));
int statHistorianID = Convert.ToInt32(database.Connection.ExecuteScalar("SELECT ID FROM Historian WHERE Acronym='STAT' AND NodeID={0}, nodeIDQueryString"));

// Load the defined system statistics
IEnumerable<DataRow> statistics = database.Connection.RetrieveData(database.AdapterType, "SELECT * FROM Statistic ORDER BY Source, SignalIndex").AsEnumerable();
Expand Down Expand Up @@ -1457,7 +1457,7 @@ private static void PhasorDataSourceValidation(AdoDataConnection database, strin
// Determine how many changes were made to devices and measurements -
// if no changes were made, we can skip the next few steps
if (trackedTables.Contains("Device") && trackedTables.Contains("Measurement"))
changes = Convert.ToUInt64(database.Connection.ExecuteScalar($"SELECT COUNT(*) FROM TrackedChange WHERE (TableName = 'Device' OR TableName = 'Measurement') AND ID > {trackingVersion}"));
changes = Convert.ToUInt64(database.Connection.ExecuteScalar("SELECT COUNT(*) FROM TrackedChange WHERE (TableName = 'Device' OR TableName = 'Measurement') AND ID > {0}", nodeIDQueryString));
else
changes = ulong.MaxValue;
}
Expand Down Expand Up @@ -1501,11 +1501,11 @@ private static void PhasorDataSourceValidation(AdoDataConnection database, strin
signalReference = SignalReference.ToString(acronym, SignalKind.Quality);

// See if quality flags measurement exists for device
if (Convert.ToInt32(database.Connection.ExecuteScalar($"SELECT COUNT(*) FROM Measurement WHERE SignalReference = '{signalReference}' AND DeviceID = {deviceID}")) == 0)
if (Convert.ToInt32(database.Connection.ExecuteScalar("SELECT COUNT(*) FROM Measurement WHERE SignalReference = '{0}' AND DeviceID = {1}", signalReference, deviceID)) == 0)
{
historianID = device.ConvertNullableField<int>("HistorianID");

company = (string)database.Connection.ExecuteScalar($"SELECT MapAcronym FROM Company WHERE ID = {device.ConvertNullableField<int>("CompanyID") ?? 0}");
company = (string)database.Connection.ExecuteScalar("SELECT MapAcronym FROM Company WHERE ID = {0}", device.ConvertNullableField<int>("CompanyID") ?? 0);

if (string.IsNullOrEmpty(company))
company = configFile.Settings["systemSettings"]["CompanyAcronym"].Value.TruncateRight(3);
Expand All @@ -1531,9 +1531,8 @@ private static void PhasorDataSourceValidation(AdoDataConnection database, strin
acronym = oldAcronym + "!PMU";
string oldSignalReference = SignalReference.ToString(oldAcronym, SignalKind.Statistic, signalIndex);
signalReference = SignalReference.ToString(acronym, SignalKind.Statistic, signalIndex);

// If the original format for device statistics is found in the database, update to new format
if (Convert.ToInt32(database.Connection.ExecuteScalar($"SELECT COUNT(*) FROM Measurement WHERE SignalReference='{oldSignalReference}' AND HistorianID={statHistorianID}")) > 0)
if (Convert.ToInt32(database.Connection.ExecuteScalar("SELECT COUNT(*) FROM Measurement WHERE SignalReference='{0}' AND HistorianID={1}", oldSignalReference, statHistorianID)) > 0)
database.Connection.ExecuteNonQuery($"UPDATE Measurement SET SignalReference='{signalReference}' WHERE SignalReference='{oldSignalReference}' AND HistorianID={statHistorianID}");
else if (!skipOptimization)
break;
Expand All @@ -1557,7 +1556,7 @@ private static void PhasorDataSourceValidation(AdoDataConnection database, strin
// To reduce time required to execute these steps, only first statistic is verified to exist
if (!skipOptimization && !firstStatisticExisted)
{
firstStatisticExisted = Convert.ToInt32(database.Connection.ExecuteScalar($"SELECT COUNT(*) FROM Measurement WHERE SignalReference='{signalReference}'")) > 0;
firstStatisticExisted = Convert.ToInt32(database.Connection.ExecuteScalar("SELECT COUNT(*) FROM Measurement WHERE SignalReference='{0}'", signalReference)) > 0;

// If the first extraneous input statistic doesn't exist, we assume no others do as well
if (!firstStatisticExisted)
Expand All @@ -1575,7 +1574,7 @@ private static void PhasorDataSourceValidation(AdoDataConnection database, strin
// Determine how many changes were made to output streams, devices, and measurements -
// if no changes were made, we can skip the next few steps
if (trackedTables.Contains("OutputStream") && trackedTables.Contains("OutputStreamDevice") && trackedTables.Contains("OutputStreamMeasurement") && trackedTables.Contains("Measurement"))
changes = Convert.ToUInt64(database.Connection.ExecuteScalar($"SELECT COUNT(*) FROM TrackedChange WHERE (TableName = 'OutputStream' OR TableName = 'OutputStreamDevice' OR TableName = 'OutputStreamMeasurement' OR TableName = 'Measurement') AND ID > {trackingVersion}"));
changes = Convert.ToUInt64(database.Connection.ExecuteScalar("SELECT COUNT(*) FROM TrackedChange WHERE (TableName = 'OutputStream' OR TableName = 'OutputStreamDevice' OR TableName = 'OutputStreamMeasurement' OR TableName = 'Measurement') AND ID > {0}", trackingVersion));
else
changes = ulong.MaxValue;
}
Expand Down Expand Up @@ -1657,7 +1656,7 @@ private static void PhasorDataSourceValidation(AdoDataConnection database, strin
continue;

int? vendorDeviceID = measurement.ConvertNullableField<int>("VendorDeviceID");
string vendor = vendorDeviceID.HasValue ? (string)database.Connection.ExecuteScalar("SELECT Acronym FROM Vendor WHERE ID = " + vendorDeviceID.Value) : null;
string vendor = vendorDeviceID.HasValue ? (string)database.Connection.ExecuteScalar("SELECT Acronym FROM Vendor WHERE ID = {0}", vendorDeviceID.Value) : null;
string signalAcronym = measurement.ConvertField<string>("SignalAcronym");

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public static void ValidateDatabaseDefinitions()
/// <param name="database">Database connection to use for checking the data operation</param>
/// <returns>True or false indicating whether the operation exists</returns>
private static bool DataOperationExists(AdoDataConnection database) =>
Convert.ToInt32(database.ExecuteScalar($"SELECT COUNT(*) FROM DataOperation WHERE TypeName='{typeof(PowerCalculationConfigurationValidation).FullName}' AND MethodName='ValidatePowerCalculationConfigurations'")) > 0;
Convert.ToInt32(database.ExecuteScalar("SELECT COUNT(*) FROM DataOperation WHERE TypeName='{0}' AND MethodName='ValidatePowerCalculationConfigurations'", typeof(PowerCalculationConfigurationValidation).FullName)) > 0;

/// <summary>
/// Creates a data operation to run the validations in this class.
Expand All @@ -71,7 +71,7 @@ private static void CreateDataOperation(AdoDataConnection database) =>
/// <param name="database">Database connection to use for checking the data operation</param>
/// <returns>True or false indicating whether the operation exists</returns>
private static bool AdapterInstanceExists(AdoDataConnection database) =>
Convert.ToInt32(database.ExecuteScalar($"SELECT COUNT(*) FROM CustomActionAdapter WHERE TypeName='{typeof(PowerMultiCalculatorAdapter).FullName}'")) > 0;
Convert.ToInt32(database.ExecuteScalar("SELECT COUNT(*) FROM CustomActionAdapter WHERE TypeName='{0}'", typeof(PowerMultiCalculatorAdapter).FullName)) > 0;

/// <summary>
/// Creates a data operation to run the validations in this class.
Expand Down

0 comments on commit 220c77e

Please sign in to comment.