Example #1
0
 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);
 }
Example #2
0
 public JoinedSequentialSqlSet(SubPanelSequentialSqlSet set, JoinType type)
 {
     Set  = set;
     Type = type;
     SetAlias(set);
     InheritColumns(set);
 }
Example #3
0
 void SetAlias(SubPanelSequentialSqlSet set)
 {
     Alias = $"{Dialect.Alias.Sequence}{set.SubPanel.Index}";
 }
Example #4
0
 public JoinedSequentialSqlSet(SubPanelSequentialSqlSet set)
 {
     Set = set;
     SetAlias(set);
     InheritColumns(set);
 }
Example #5
0
        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);
            }
        }