public bool TryAddTupleToOutputMatchingTableDefinitions(IntermediateTuple tuple, Output output, TableDefinition[] tableDefinitions)
        {
            var tableDefinition = tableDefinitions.FirstOrDefault(t => t.Name == tuple.Definition.Name);

            if (tableDefinition == null)
            {
                return(false);
            }

            var table = output.EnsureTable(tableDefinition);
            var row   = table.CreateRow(tuple.SourceLineNumbers);

            for (var i = 0; i < tuple.Fields.Length; ++i)
            {
                if (i < tableDefinition.Columns.Length)
                {
                    var column = tableDefinition.Columns[i];

                    switch (column.Type)
                    {
                    case ColumnType.Number:
                        row[i] = tuple.AsNumber(i);
                        break;

                    default:
                        row[i] = tuple.AsString(i);
                        break;
                    }
                }
            }

            return(true);
        }
示例#2
0
        private void AddTupleDefaultly(IntermediateTuple tuple, Output output)
        {
            if (!this.TableDefinitions.TryGet(tuple.Definition.Name, out var tableDefinition))
            {
                return;
            }

            var table = output.EnsureTable(tableDefinition);
            var row   = table.CreateRow(tuple.SourceLineNumbers);

            for (var i = 0; i < tuple.Fields.Length; ++i)
            {
                if (i < tableDefinition.Columns.Length)
                {
                    var column = tableDefinition.Columns[i];

                    switch (column.Type)
                    {
                    case ColumnType.Number:
                        row[i] = tuple.AsNumber(i);
                        break;

                    default:
                        row[i] = tuple.AsString(i);
                        break;
                    }
                }
            }
        }
示例#3
0
        public static IntermediateField Set(this IntermediateTuple tuple, int index, string value)
        {
            var definition = tuple.Definition.FieldDefinitions[index];

            var field = tuple.Fields[index].Set(definition, value);

            return(tuple.Fields[index] = field);
        }
示例#4
0
        public virtual bool TryAddTupleToOutput(IntermediateTuple tuple, Output output)
        {
            if (this.TableDefinitionsForTuples != null)
            {
                return(this.BackendHelper.TryAddTupleToOutputMatchingTableDefinitions(tuple, output, this.TableDefinitionsForTuples));
            }

            return(false);
        }
示例#5
0
 private void AddTupleFromExtension(IntermediateTuple tuple, Output output)
 {
     foreach (var extension in this.BackendExtensions)
     {
         if (extension.TryAddTupleToOutput(tuple, output))
         {
             break;
         }
     }
 }
示例#6
0
            public Item(IntermediateTuple row, string type, string id)
            {
                this.Row  = row;
                this.Type = type;
                this.Id   = id;

                this.Key = ItemCollection.CreateKeyFromTypeId(type, id);

                afterItems          = new ItemCollection();
                beforeItems         = new ItemCollection();
                flattenedAfterItems = false;
            }
        public static bool IsIdentical(this IntermediateTuple first, IntermediateTuple second)
        {
            var identical = (first.Definition.Type == second.Definition.Type &&
                             first.Definition.Name == second.Definition.Name &&
                             first.Definition.FieldDefinitions.Length == second.Definition.FieldDefinitions.Length);

            for (int i = 0; identical && i < first.Definition.FieldDefinitions.Length; ++i)
            {
                var firstField  = first[i];
                var secondField = second[i];

                identical = (firstField.AsString() == secondField.AsString());
            }

            return(identical);
        }
示例#8
0
        public override bool TryAddTupleToOutput(IntermediateTuple tuple, Output output)
        {
#if ALTERNATIVE_TO_USING_HELPER
            switch (tuple.Definition.Name)
            {
            case TupleDefinitions.ExampleName:
            {
                var table = output.EnsureTable(ExampleTableDefinitions.ExampleTable);
                var row   = table.CreateRow(tuple.SourceLineNumbers);
                row[0] = tuple[0].AsString();
                row[1] = tuple[1].AsString();
            }
                return(true);
            }

            return(false);
#else
            return(this.BackendHelper.TryAddTupleToOutputMatchingTableDefinitions(tuple, output, ExampleTableDefinitions.All));
#endif
        }
 /// <summary>
 /// Basic constructor for struct
 /// </summary>
 /// <param name="row">Row for the field.</param>
 /// <param name="field">Field needing further resolution.</param>
 public DelayedField(IntermediateTuple row, IntermediateField field)
 {
     this.Row   = row;
     this.Field = field;
 }
示例#10
0
 public static bool AsBool(this IntermediateTuple tuple, int index)
 {
     return(tuple?.Fields[index].AsBool() ?? false);
 }
示例#11
0
 public static string AsString(this IntermediateTuple tuple, int index)
 {
     return(tuple?.Fields[index].AsString());
 }
示例#12
0
 public static int?AsNullableNumber(this IntermediateTuple tuple, int index)
 {
     return(tuple?.Fields[index].AsNullableNumber());
 }
示例#13
0
 public static int AsNumber(this IntermediateTuple tuple, int index)
 {
     return(tuple?.Fields[index].AsNumber() ?? 0);
 }
示例#14
0
 public static bool?AsNullableBool(this IntermediateTuple tuple, int index)
 {
     return(tuple?.Fields[index].AsNullableBool());
 }
示例#15
0
 public override bool TryAddTupleToOutput(IntermediateTuple tuple, WindowsInstallerData output) => this.BackendHelper.TryAddTupleToOutputMatchingTableDefinitions(tuple, output, this.TableDefinitionsForTuples, true);