[InlineData(100000)] //should run in ~ 900ms
        public async Task MappingPerformanceFunctions(int rows)
        {
            var data             = Helpers.CreateLargeTable(rows);
            var transformMapping = new TransformMapping();
            var columnMappings   = new List <TransformFunction>();

            for (var i = 0; i < data.FieldCount; i++)
            {
                var newTransformFunction = new TransformFunction(
                    new Func <object, object>((value) => value),
                    new TableColumn[] { new TableColumn(data.GetName(i)) },
                    new TableColumn(data.GetName(i)),
                    null);
                columnMappings.Add(newTransformFunction);
            }

            transformMapping.PassThroughColumns = false;
            transformMapping.Functions          = columnMappings;
            transformMapping.SetInTransform(data);

            var count = 0;

            while (await transformMapping.ReadAsync())
            {
                count++;
            }

            Assert.Equal(rows, count);

            output.WriteLine(transformMapping.PerformanceSummary());
        }
        [InlineData(100000)] //should run in ~ 250ms
        public async Task MappingPerformanceColumnPairs(int rows)
        {
            var data             = Helpers.CreateLargeTable(rows);
            var transformMapping = new TransformMapping();
            var columnMappings   = new List <ColumnPair>();

            for (var i = 0; i < data.FieldCount; i++)
            {
                columnMappings.Add(new ColumnPair(new TableColumn(data.GetName(i))));
            }

            transformMapping.PassThroughColumns = false;
            transformMapping.MapFields          = columnMappings;
            transformMapping.SetInTransform(data);

            var count = 0;

            while (await transformMapping.ReadAsync())
            {
                count++;
            }

            Assert.Equal(rows, count);

            output.WriteLine(transformMapping.PerformanceSummary());
        }
        [InlineData(100000)] //should run in ~ 250ms
        public async Task MappingPerformancePassthrough(int rows)
        {
            var data             = Helpers.CreateLargeTable(rows);
            var transformMapping = new TransformMapping
            {
                PassThroughColumns = true
            };

            transformMapping.SetInTransform(data);

            var count = 0;

            while (await transformMapping.ReadAsync())
            {
                count++;
            }

            Assert.Equal(rows, count);

            output.WriteLine(transformMapping.PerformanceSummary());
        }
        public async Task Mappings()
        {
            var Source           = Helpers.CreateSortedTestData();
            var transformMapping = new TransformMapping();

            var Mappings = new List <TransformFunction>();

            //Mappings.Add(new Function("CustomFunction", false, "test", "return StringColumn + number.ToString();", null, ETypeCode.String,
            //    new dexih.functions.Parameter[] {
            //        new dexih.functions.Parameter("StringColumn", ETypeCode.String, true, null, "StringColumn" ),
            //        new dexih.functions.Parameter("number", ETypeCode.Int32, false, 123)
            //    }, null));

            var transformFunction = new TransformFunction(
                new Func <string, int, string>((StringColumn, number) => StringColumn + number.ToString()),
                new TableColumn[] { new TableColumn("StringColumn"), new TableColumn("number", ETypeCode.Int32) },
                new TableColumn("CustomFunction"),
                null)
            {
                Inputs = new dexih.functions.Parameter[] {
                    new dexih.functions.Parameter("StringColumn", ETypeCode.String, true, null, new TableColumn("StringColumn")),
                    new dexih.functions.Parameter("number", ETypeCode.Int32, false, 123)
                }
            };

            Mappings.Add(transformFunction);

            transformFunction = Functions.GetFunction("dexih.functions.BuiltIn.MapFunctions", "Substring").GetTransformFunction();
            transformFunction.TargetColumn = new TableColumn("Substring");
            transformFunction.Inputs       = new dexih.functions.Parameter[] {
                new dexih.functions.Parameter("name", ETypeCode.String, true, null, new TableColumn("StringColumn")),
                new dexih.functions.Parameter("start", ETypeCode.Int32, false, 1),
                new dexih.functions.Parameter("start", ETypeCode.Int32, false, 3)
            };
            Mappings.Add(transformFunction);

            var MappingColumn = new List <ColumnPair>
            {
                new ColumnPair(new TableColumn("DateColumn", ETypeCode.DateTime), new TableColumn("DateColumn", ETypeCode.DateTime))
            };

            transformMapping = new TransformMapping(Source, false, MappingColumn, Mappings);

            Assert.Equal(3, transformMapping.FieldCount);

            var count = 0;

            while (await transformMapping.ReadAsync() == true)
            {
                count = count + 1;
                Assert.Equal("value" + count.ToString().PadLeft(2, '0') + "123", transformMapping["CustomFunction"]);
                Assert.Equal("alu", transformMapping["Substring"]);
                Assert.Equal((DateTime)Convert.ToDateTime("2015-01-" + count.ToString()), (DateTime)transformMapping["DateColumn"]);
            }
            Assert.Equal(10, count);

            //test the getschematable table function.
            //DataReaderAdapter SchemaTable = TransformMapping.GetSchemaTable();
            //Assert.Equal("DateColumn", SchemaTable.Rows[0]["ColumnName"]);
            //Assert.Equal("CustomFunction", SchemaTable.Rows[1]["ColumnName"]);
            //Assert.Equal("Substring", SchemaTable.Rows[2]["ColumnName"]);
        }