protected override BoundRelation RewriteTableRelation(BoundTableRelation node) { var definedValues = RemoveUnusedSlots(node.DefinedValues, d => d.ValueSlot); node = node.Update(node.TableInstance, definedValues); return(base.RewriteTableRelation(node)); }
protected override BoundRelation RewriteTableRelation(BoundTableRelation node) { if (!node.DefinedValues.Any()) { return(node); } var factory = node.DefinedValues.First().ValueSlot.Factory; var original = node.TableInstance; var valueSlotMapping = original.ColumnInstances.ToDictionary(c => c.Column, c => _valueSlotMapping[c.ValueSlot]); var instanceName = factory.CreateNamed(original.Name, typeof(int)).Name; var instance = new TableInstanceSymbol(instanceName, original.Table, (t, c) => valueSlotMapping[c]); var columnMapping = instance.ColumnInstances.ToDictionary(c => c.Column); var definedValues = node.DefinedValues.Select(d => columnMapping[d.Column]).ToImmutableArray(); return(node.Update(instance, definedValues)); }