コード例 #1
0
        protected override object InternalVisit(AssignmentSetClause node)
        {
            Func <dynamic, dynamic, object> operation = null;

            switch (node.AssignmentKind)
            {
            case AssignmentKind.Equals:
                operation = new Func <dynamic, dynamic, object>((a, b) => b);
                break;

            case AssignmentKind.AddEquals:
                operation = new Func <dynamic, dynamic, object>((a, b) => a + b);
                break;

            case AssignmentKind.SubtractEquals:
                operation = new Func <dynamic, dynamic, object>((a, b) => a - b);
                break;

            case AssignmentKind.MultiplyEquals:
                operation = new Func <dynamic, dynamic, object>((a, b) => a * b);
                break;

            case AssignmentKind.DivideEquals:
                operation = new Func <dynamic, dynamic, object>((a, b) => a / b);
                break;

            case AssignmentKind.ModEquals:
                operation = new Func <dynamic, dynamic, object>((a, b) => a % b);
                break;

            //TODO: bitwise operations may not be equivalent to the Sql ones. We should check this out later.
            case AssignmentKind.BitwiseAndEquals:
                operation = new Func <dynamic, dynamic, object>((a, b) => a & b);
                break;

            case AssignmentKind.BitwiseOrEquals:
                operation = new Func <dynamic, dynamic, object>((a, b) => a | b);
                break;

            case AssignmentKind.BitwiseXorEquals:
                operation = new Func <dynamic, dynamic, object>((a, b) => a ^ b);
                break;

            default:
                //just in case they add something here in the future
                throw new NotImplementedException();
            }

            return(new Func <Environment, Action <Row> >((env) =>
            {
                string columnName = Visit <string>(node.Column);
                return new Action <Row>((row) =>
                {
                    object providedValue = EvaluateExpression <object>(node.NewValue, env);
                    row[columnName] = operation(row[columnName], providedValue);
                });
            }));
        }
コード例 #2
0
        public static AssignmentSetClause AssignmentSetClause(AssignmentKind kind, ColumnReferenceExpression column, ScalarExpression newValue)
        {
            var fragment = new AssignmentSetClause();

            fragment.AssignmentKind = kind;
            fragment.Column         = column;
            fragment.NewValue       = newValue;
            return(fragment);
        }
コード例 #3
0
        private UpdateMergeAction CreateUpdateSetActions(MergeActionClause clause)
        {
            var action = (clause.Action = new UpdateMergeAction()) as UpdateMergeAction;

            foreach (var col in _merge.Table.Columns)
            {
                var setClause = new AssignmentSetClause();
                setClause.AssignmentKind = AssignmentKind.Equals;

                var identifier = MultiPartIdentifierBuilder.Get(MergeIdentifierStrings.TargetName, col.Name.GetName());

                setClause.Column = new ColumnReferenceExpression();
                setClause.Column.MultiPartIdentifier = identifier;

                var newValue = (setClause.NewValue = new ColumnReferenceExpression()) as ColumnReferenceExpression;
                newValue.MultiPartIdentifier = MultiPartIdentifierBuilder.Get(MergeIdentifierStrings.SourceName, col.Name.GetName());

                action.SetClauses.Add(setClause);
            }
            return(action);
        }
コード例 #4
0
        public override void ExplicitVisit(AssignmentSetClause assignSetClause)
        {
            RbacSelectColumn column = new RbacSelectColumn();

            if (!string.IsNullOrEmpty(TableName))
            {
                column.Table.Name = TableName;
            }

            if (assignSetClause.Column.MultiPartIdentifier.Identifiers.Count == 1)
            {
                column.Name = assignSetClause.Column.MultiPartIdentifier.Identifiers[0].Value;
            }
            else if (assignSetClause.Column.MultiPartIdentifier.Identifiers.Count == 2)
            {
                column.Table.Alias = assignSetClause.Column.MultiPartIdentifier.Identifiers[0].Value;
                column.Name        = assignSetClause.Column.MultiPartIdentifier.Identifiers[1].Value;
            }

            Columns.Add(column);
        }
コード例 #5
0
ファイル: WSqlParser.cs プロジェクト: Coword/GraphView
        private WSetClause ParseAssignmentSetClause(AssignmentSetClause asSetClause)
        {
            var wasSetClause = new WAssignmentSetClause
            {
                AssignmentKind = asSetClause.AssignmentKind,
                FirstTokenIndex = asSetClause.FirstTokenIndex,
                LastTokenIndex = asSetClause.LastTokenIndex
            };

            if (asSetClause.Column != null)
            {
                var wexpr = new WColumnReferenceExpression
                {
                    MultiPartIdentifier = ParseMultiPartIdentifier(asSetClause.Column.MultiPartIdentifier),
                    ColumnType = asSetClause.Column.ColumnType,
                    FirstTokenIndex = asSetClause.Column.FirstTokenIndex,
                    LastTokenIndex = asSetClause.Column.LastTokenIndex
                };
                wasSetClause.Column = wexpr;
            }

            if (asSetClause.NewValue != null)
                wasSetClause.NewValue = ParseScalarExpression(asSetClause.NewValue);
            if (asSetClause.Variable != null)
                wasSetClause.Variable = asSetClause.Variable.Name;

            return wasSetClause;
        }
コード例 #6
0
ファイル: AllNodesVisitor.cs プロジェクト: yaakoviyun/sqlskim
 public override void Visit(AssignmentSetClause node) { this.action(node); }
コード例 #7
0
 public override void ExplicitVisit(AssignmentSetClause node)
 {
     base.ExplicitVisit(node);
     ReplaceExpression(node, n => n.NewValue);
 }
コード例 #8
0
 public override void ExplicitVisit(AssignmentSetClause fragment)
 {
     _fragments.Add(fragment);
 }
コード例 #9
0
ファイル: Merge.cs プロジェクト: japj/SSDT-DevPack
        private UpdateMergeAction CreateUpdateSetActions(MergeActionClause clause)
        {
            var action = (clause.Action = new UpdateMergeAction()) as UpdateMergeAction;
            foreach (var col in _merge.Table.Columns)
            {
                var setClause = new AssignmentSetClause();
                setClause.AssignmentKind = AssignmentKind.Equals;

                var identifier = MultiPartIdentifierBuilder.Get(MergeIdentifierStrings.TargetName, col.Name.GetName());

                setClause.Column = new ColumnReferenceExpression();
                setClause.Column.MultiPartIdentifier = identifier;

                var newValue = (setClause.NewValue = new ColumnReferenceExpression()) as ColumnReferenceExpression;
                newValue.MultiPartIdentifier = MultiPartIdentifierBuilder.Get(MergeIdentifierStrings.SourceName, col.Name.GetName());
                
                action.SetClauses.Add(setClause);
            }
            return action;
        }
コード例 #10
0
 //SET式。左側はテーブル名の宣言がなくてもいい。
 public override void ExplicitVisit(AssignmentSetClause node)
 {
     isLeftAssignmentSetClause = true;
     base.ExplicitVisit(node);
 }
コード例 #11
0
 public override void ExplicitVisit(AssignmentSetClause node)
 {
     base.ExplicitVisit(node);
 }