Exemple #1
0
        private static ExtractKeysResult ExtractKeys(ExprMerge merge, IExprAlias sourceAlias)
        {
            IExprAlias targetAlias = merge.TargetTable.Alias?.Alias ?? throw new SqExpressException("Target table should have an alias");

            var accSource = new List <ExprColumnName>();
            var accTarget = new List <ExprColumnName>();

            var eqs = merge.On.SyntaxTree().DescendantsAndSelf().OfType <ExprBooleanEq>();

            foreach (var exprBooleanEq in eqs)
            {
                if (exprBooleanEq.Left is ExprColumn left &&
                    exprBooleanEq.Right is ExprColumn right &&
                    left.Source is ExprTableAlias ta &&
                    right.Source is ExprTableAlias sa)
                {
                    if (sa.Alias.Equals(sourceAlias) && ta.Alias.Equals(targetAlias))
                    {
                        accTarget.Add(left.ColumnName);
                        accSource.Add(right.ColumnName);
                    }
                    else if (ta.Alias.Equals(sourceAlias) && sa.Alias.Equals(targetAlias))
                    {
                        accTarget.Add(right.ColumnName);
                        accSource.Add(left.ColumnName);
                    }
                }
            }

            return(new ExtractKeysResult(accTarget, accSource));
        }
Exemple #2
0
 public static ExprTableAlias WithAlias(this ExprTableAlias original, IExprAlias newAlias)
 => new ExprTableAlias(alias: newAlias);
 internal MergeDataBuilder(TTable table, IEnumerable <TItem> data, IExprAlias sourceTableAlias)
 {
     this._table            = table;
     this._data             = data;
     this._sourceTableAlias = new ExprTableAlias(sourceTableAlias);
 }
 public ExprTableAlias(IExprAlias alias)
 {
     this.Alias = alias;
 }
Exemple #5
0
 public static Alias From(IExprAlias exprAlias) => new Alias(false, null, exprAlias);