void InheritColumns(SubPanelSequentialSqlSet set) { PersonId = new Column(set.PersonId, this); EncounterId = new Column(set.EncounterId, this); Date = new AutoAliasedColumn(set.Date, this); EventId = new EventIdColumn(set.EventId, this); }
public JoinedSequentialSqlSet(SubPanelSequentialSqlSet set, JoinType type) { Set = set; Type = type; SetAlias(set); InheritColumns(set); }
void SetAlias(SubPanelSequentialSqlSet set) { Alias = $"{Dialect.Alias.Sequence}{set.SubPanel.Index}"; }
public JoinedSequentialSqlSet(SubPanelSequentialSqlSet set) { Set = set; SetAlias(set); InheritColumns(set); }
JoinedSequentialSqlSet GetJoin(JoinedSequentialSqlSet prev, SubPanelSequentialSqlSet currSub) { /* * Get offset expressions. */ var seq = currSub.SubPanel.JoinSequence; var incrType = seq.DateIncrementType.ToString().ToUpper(); var backOffset = new Expression($"{Dialect.Syntax.DATEADD}({incrType}, -{seq.Increment}, {prev.Date})"); var forwOffset = new Expression($"{Dialect.Syntax.DATEADD}({incrType}, {seq.Increment}, {prev.Date})"); /* * Get Join. */ var type = currSub.SubPanel.IncludeSubPanel ? JoinType.Inner : JoinType.Left; var curr = new JoinedSequentialSqlSet(currSub, type); switch (seq.SequenceType) { /* * Same Encounter. */ case SequenceType.Encounter: curr.On = new[] { prev.EncounterId == curr.EncounterId }; return(curr); /* * Same Event. */ case SequenceType.Event: curr.On = new[] { prev.PersonId == curr.PersonId, prev.EventId == curr.EventId }; return(curr); /* * Plus/Minus a time increment. */ case SequenceType.PlusMinus: curr.On = new IEvaluatable[] { prev.PersonId == curr.PersonId, curr.Date == backOffset & forwOffset }; return(curr); /* * Within a following time increment. */ case SequenceType.WithinFollowing: curr.On = new IEvaluatable[] { prev.PersonId == curr.PersonId, curr.Date == prev.Date & forwOffset }; return(curr); /* * Anytime after. */ case SequenceType.AnytimeFollowing: curr.On = new IEvaluatable[] { prev.PersonId == curr.PersonId, curr.Date > prev.Date }; return(curr); default: return(null); } }