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); }); })); }
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); }
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); }
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); }
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; }
public override void Visit(AssignmentSetClause node) { this.action(node); }
public override void ExplicitVisit(AssignmentSetClause node) { base.ExplicitVisit(node); ReplaceExpression(node, n => n.NewValue); }
public override void ExplicitVisit(AssignmentSetClause fragment) { _fragments.Add(fragment); }
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; }
//SET式。左側はテーブル名の宣言がなくてもいい。 public override void ExplicitVisit(AssignmentSetClause node) { isLeftAssignmentSetClause = true; base.ExplicitVisit(node); }
public override void ExplicitVisit(AssignmentSetClause node) { base.ExplicitVisit(node); }