Exemplo n.º 1
0
        public async Task Exec(IScenarioContext context)
        {
            bool isPostgres = context.Dialect == SqlDialect.PgSql;
            var  table      = new TableItAllColumnTypes(isPostgres);
            await context.Database.Statement(table.Script.DropAndCreate());

            var testData = GetTestData(isPostgres);

            await InsertDataInto(table, testData)
            .MapData(Mapping)
            .Exec(context.Database);

            var mapper = new Mapper(new MapperConfiguration(cfg =>
            {
                cfg.AddDataReaderMapping();
                var map = cfg.CreateMap <IDataRecord, AllColumnTypesDto>();

                map
                .ForMember(nameof(table.ColByteArraySmall), c => c.Ignore())
                .ForMember(nameof(table.ColByteArrayBig), c => c.Ignore())
                .ForMember(nameof(table.ColNullableByteArraySmall), c => c.Ignore())
                .ForMember(nameof(table.ColNullableByteArrayBig), c => c.Ignore())
                .ForMember(nameof(table.ColNullableFixedSizeByteArray), c => c.Ignore())
                .ForMember(nameof(table.ColFixedSizeByteArray), c => c.Ignore());

                if (isPostgres)
                {
                    map
                    .ForMember(nameof(table.ColByte), c => c.Ignore())
                    .ForMember(nameof(table.ColNullableByte), c => c.Ignore());
                }
                if (context.Dialect == SqlDialect.MySql)
                {
                    map
                    .ForMember(nameof(table.ColBoolean), c => c.MapFrom((r, dto) => r.GetBoolean(r.GetOrdinal(nameof(table.ColBoolean)))))
                    .ForMember(nameof(table.ColNullableBoolean), c => c.MapFrom((r, dto) => r.IsDBNull(r.GetOrdinal(nameof(table.ColNullableBoolean))) ? (bool?)null : r.GetBoolean(r.GetOrdinal(nameof(table.ColNullableBoolean)))))
                    .ForMember(nameof(table.ColGuid), c => c.MapFrom((r, dto) => r.GetGuid(r.GetOrdinal(nameof(table.ColGuid)))))
                    .ForMember(nameof(table.ColNullableGuid), c => c.MapFrom((r, dto) => r.IsDBNull(r.GetOrdinal(nameof(table.ColNullableGuid)))? (Guid?)null : r.GetGuid(r.GetOrdinal(nameof(table.ColNullableGuid)))));
                }
            }));

            var expr = Select(table.Columns)
                       .From(table).Done();

            context.WriteLine(PgSqlExporter.Default.ToSql(expr));

            var result = await expr
                         .QueryList(context.Database, r =>
            {
                var allColumnTypesDto = mapper.Map <IDataRecord, AllColumnTypesDto>(r);

                allColumnTypesDto.ColByteArrayBig               = StreamToByteArray(table.ColByteArrayBig.GetStream(r));
                allColumnTypesDto.ColByteArraySmall             = table.ColByteArraySmall.Read(r);
                allColumnTypesDto.ColNullableByteArrayBig       = table.ColNullableByteArrayBig.Read(r);
                allColumnTypesDto.ColNullableByteArraySmall     = table.ColNullableByteArraySmall.Read(r);
                allColumnTypesDto.ColFixedSizeByteArray         = table.ColFixedSizeByteArray.Read(r);
                allColumnTypesDto.ColNullableFixedSizeByteArray = table.ColNullableFixedSizeByteArray.Read(r);

                return(allColumnTypesDto);
            });
Exemplo n.º 2
0
        private async Task Insert(IScenarioContext context, string json, TableItAllColumnTypes table)
        {
            var doc = JsonDocument.Parse(json);

            var tableName = table.FullName.AsExprTableFullName().TableName.Name;

            foreach (var obj in doc.RootElement.EnumerateObject())
            {
                if (obj.Name != tableName)
                {
                    throw new Exception($"Unexpected property: {obj.Name}");
                }

                var rowsEnumerable = obj.Value.EnumerateArray()
                                     .Select(rowArray =>
                {
                    int colIndex = 0;
                    var row      = new ExprValue[table.Columns.Count];
                    foreach (var cell in rowArray.EnumerateArray())
                    {
                        row[colIndex] = table.Columns[colIndex]
                                        .FromString(cell.ValueKind == JsonValueKind.Null ? null : cell.GetString());
                        colIndex++;
                    }

                    return(row);
                });

                await SqQueryBuilder
                .IdentityInsertInto(table, table.Columns.Select(c => c.ColumnName).ToList())
                .Values(rowsEnumerable)
                .Exec(context.Database);
            }
        }
Exemplo n.º 3
0
        private static async Task <string> ReadAsJsonString(IScenarioContext context, TableItAllColumnTypes table)
        {
            using var ms = new MemoryStream();

            using Utf8JsonWriter writer = new Utf8JsonWriter(ms);

            writer.WriteStartObject();
            writer.WriteStartArray(table.FullName.AsExprTableFullName().TableName.Name);

            await SqQueryBuilder
            .Select(table.Columns)
            .From(table)
            .Query(context.Database,
                   r =>
            {
                writer.WriteStartArray();
                foreach (var column in table.Columns)
                {
                    var readAsString = column.ReadAsString(r);
                    writer.WriteStringValue(readAsString);
                }
                writer.WriteEndArray();
            });

            writer.WriteEndArray();
            writer.WriteEndObject();
            writer.Flush();

            var jsonString = Encoding.UTF8.GetString(ms.ToArray());

            return(jsonString);
        }