/// <summary></summary> /// <param name="left"></param> /// <param name="type"></param> /// <param name="right"></param> /// <param name="onStatement"></param> public PpsJoinExpression(PpsExpressionPart left, PpsDataJoinType type, PpsExpressionPart right, PpsDataJoinStatement[] onStatement) { this.left = left ?? throw new ArgumentNullException(nameof(left)); this.type = type; this.right = right ?? throw new ArgumentNullException(nameof(right)); this.onStatement = onStatement ?? throw new ArgumentNullException(nameof(onStatement)); } // ctor
public PpsViewJoinDefinition(PpsViewDefinition view, string alias, PpsDataJoinType type) { this.view = view ?? throw new ArgumentNullException(nameof(view)); this.alias = alias ?? String.Empty; this.type = type; Key = new PpsDataJoinStatement[0]; } // ctor
} // func ParseJoinType /// <summary>Convert join type to string.</summary> /// <param name="type"></param> /// <returns></returns> public static string ConvertJoinType(PpsDataJoinType type) { switch (type) { case PpsDataJoinType.Left: return(">"); case PpsDataJoinType.Right: return("<"); case PpsDataJoinType.Inner: return("="); default: return(","); } } // func ConvertJoinType
} // func CreateSelector protected override PpsDataJoinStatement[] CreateOnStatement(PpsTableExpression left, PpsDataJoinType joinOp, PpsTableExpression right) => left.Table.LookupJoin(right.Table.Name)?.Statement;
} // ctor public override PpsDataSelector CreateJoinStatement(PpsDataSelector leftExpression, PpsDataJoinType type, PpsDataSelector rightExpression, PpsDataJoinStatement[] on) => leftExpression.ApplyJoin(rightExpression, type, on);
/// <summary>Visit join statement</summary> /// <param name="leftExpression"></param> /// <param name="type"></param> /// <param name="rightExpression"></param> /// <param name="on"></param> /// <returns></returns> public abstract TRESULT CreateJoinStatement(TRESULT leftExpression, PpsDataJoinType type, TRESULT rightExpression, PpsDataJoinStatement[] on);