public Alarm[] GetCurrentAlarms(NpgsqlConnection connection, CriteriaType criteriaType, AlarmSampleId criteria, int maxCount) { var whereOp = new Or(new IsNull(DbStr.EndTime), new IsNull(DbStr.AcknowledgeTime)); return GetAlarms(connection, whereOp, criteriaType, criteria, maxCount); }
private Alarm[] GetAlarms( NpgsqlConnection connection, IWhereOp alarmsWhereOp, CriteriaType criteriaType, AlarmSampleId criteria, int maxCount) { IWhereOp whereOp; bool asc; switch (criteriaType) { case CriteriaType.DownFromInfinity: whereOp = null; asc = false; break; case CriteriaType.DownFrom: whereOp = new Or( new And(new Eq(DbStr.StartTime, criteria.StartTime.Ticks), new Lt(DbStr.AlarmId, criteria.AlarmId)), new Lt(DbStr.StartTime, criteria.StartTime.Ticks)); asc = false; break; case CriteriaType.DownFromOrEqual: whereOp = new Or( new And(new Eq(DbStr.StartTime, criteria.StartTime.Ticks), new Le(DbStr.AlarmId, criteria.AlarmId)), new Lt(DbStr.StartTime, criteria.StartTime.Ticks)); asc = false; break; case CriteriaType.UpFromInfinity: whereOp = null; asc = true; break; case CriteriaType.UpFrom: whereOp = new Or( new And(new Eq(DbStr.StartTime, criteria.StartTime.Ticks), new Gt(DbStr.AlarmId, criteria.AlarmId)), new Gt(DbStr.StartTime, criteria.StartTime.Ticks)); asc = true; break; case CriteriaType.UpFromOrEqual: whereOp = new Or( new And(new Eq(DbStr.StartTime, criteria.StartTime.Ticks), new Ge(DbStr.AlarmId, criteria.AlarmId)), new Gt(DbStr.StartTime, criteria.StartTime.Ticks)); asc = true; break; default: throw new NotSupportedException("CriteriaType " + criteriaType); } if (alarmsWhereOp != null) { whereOp = whereOp == null ? alarmsWhereOp : new And(whereOp, alarmsWhereOp); } var query = _npgQueryHelper.Select( _tableName, _columns, whereOp, new[] { DbStr.StartTime, DbStr.AlarmId }, asc, Math.Min(maxCount, MaxAlarmsToRetrieve)); var alarms = _npgHelper.ExecuteReader(connection, query, reader => new Alarm(reader.GetDateTimeFormTicks(0), reader.GetInt32(1)) { EndTime = reader.GetNullableDateTimeFormTicks(2), AcknowledgeTime = reader.GetNullableDateTimeFormTicks(3), UserId = reader.GetNullableInt64(4) }); return asc ? alarms.Reverse().ToArray() : alarms; }