private void LookupDesc() { var lookup = Database.CreateStatement(Transaction); try { lookup.Prepare(GetArrayDesc()); lookup.Execute(0, EmptyDescriptorFiller.Instance); _descriptor = new ArrayDesc(); var values = lookup.Fetch(); if (values != null && values.Length > 0) { _descriptor.RelationName = _tableName; _descriptor.FieldName = _fieldName; _descriptor.DataType = values[0].GetByte(); _descriptor.Scale = values[1].GetInt16(); _descriptor.Length = values[2].GetInt16(); _descriptor.Dimensions = values[3].GetInt16(); _descriptor.Flags = 0; _rdbFieldName = (values[4].GetString()).Trim(); } else { throw new InvalidOperationException(); } } finally { lookup.Dispose2(); } }
private async ValueTask LookupDescAsync(CancellationToken cancellationToken = default) { var lookup = Database.CreateStatement(Transaction); try { await lookup.PrepareAsync(GetArrayDesc(), cancellationToken).ConfigureAwait(false); await lookup.ExecuteAsync(0, EmptyDescriptorFiller.Instance, cancellationToken).ConfigureAwait(false); _descriptor = new ArrayDesc(); var values = await lookup.FetchAsync(cancellationToken).ConfigureAwait(false); if (values != null && values.Length > 0) { _descriptor.RelationName = _tableName; _descriptor.FieldName = _fieldName; _descriptor.DataType = values[0].GetByte(); _descriptor.Scale = values[1].GetInt16(); _descriptor.Length = values[2].GetInt16(); _descriptor.Dimensions = values[3].GetInt16(); _descriptor.Flags = 0; _rdbFieldName = (await values[4].GetStringAsync(cancellationToken).ConfigureAwait(false)).Trim(); } else { throw new InvalidOperationException(); } } finally { await lookup.Dispose2Async(cancellationToken).ConfigureAwait(false); } }
public static IntPtr MarshalManagedToNative(ArrayDesc descriptor) { ArrayDescMarshal arrayDesc = new ArrayDescMarshal(); arrayDesc.DataType = descriptor.DataType; arrayDesc.Scale = (byte)descriptor.Scale; arrayDesc.Length = descriptor.Length; arrayDesc.FieldName = descriptor.FieldName; arrayDesc.RelationName = descriptor.RelationName; arrayDesc.Dimensions = descriptor.Dimensions; arrayDesc.Flags = descriptor.Flags; ArrayBoundMarshal[] arrayBounds = new ArrayBoundMarshal[descriptor.Bounds.Length]; for (int i = 0; i < descriptor.Dimensions; i++) { arrayBounds[i].LowerBound = (short)descriptor.Bounds[i].LowerBound; arrayBounds[i].UpperBound = (short)descriptor.Bounds[i].UpperBound; } return(MarshalManagedToNative(arrayDesc, arrayBounds)); }
private byte[] EncodeSlice(ArrayDesc desc, Array sourceArray, int length) { var writer = new BinaryWriter(new MemoryStream()); var charset = _db.Charset; var dbType = DbDataType.Array; var subType = (Descriptor.Scale < 0) ? 2 : 0; var type = 0; type = TypeHelper.GetSqlTypeFromBlrType(Descriptor.DataType); dbType = TypeHelper.GetDbDataTypeFromBlrType(Descriptor.DataType, subType, Descriptor.Scale); foreach (var source in sourceArray) { switch (dbType) { case DbDataType.Char: { var value = source != null ? (string)source : string.Empty; var buffer = charset.GetBytes(value); writer.Write(buffer); if (desc.Length > buffer.Length) { for (var j = buffer.Length; j < desc.Length; j++) { writer.Write((byte)32); } } } break; case DbDataType.VarChar: { var value = source != null ? (string)source : string.Empty; var buffer = charset.GetBytes(value); writer.Write(buffer); if (desc.Length > buffer.Length) { for (var j = buffer.Length; j < desc.Length; j++) { writer.Write((byte)0); } } writer.Write((short)0); } break; case DbDataType.SmallInt: writer.Write((short)source); break; case DbDataType.Integer: writer.Write((int)source); break; case DbDataType.BigInt: writer.Write((long)source); break; case DbDataType.Float: writer.Write((float)source); break; case DbDataType.Double: writer.Write((double)source); break; case DbDataType.Numeric: case DbDataType.Decimal: { var numeric = TypeEncoder.EncodeDecimal((decimal)source, desc.Scale, type); switch (type) { case IscCodes.SQL_SHORT: writer.Write((short)numeric); break; case IscCodes.SQL_LONG: writer.Write((int)numeric); break; case IscCodes.SQL_QUAD: case IscCodes.SQL_INT64: writer.Write((long)numeric); break; } } break; case DbDataType.Date: writer.Write(TypeEncoder.EncodeDate(Convert.ToDateTime(source, CultureInfo.CurrentCulture.DateTimeFormat))); break; case DbDataType.Time: writer.Write(TypeEncoder.EncodeTime((TimeSpan)source)); break; case DbDataType.TimeStamp: var dt = Convert.ToDateTime(source, CultureInfo.CurrentCulture.DateTimeFormat); writer.Write(TypeEncoder.EncodeDate(dt)); writer.Write(TypeEncoder.EncodeTime(TypeHelper.DateTimeToTimeSpan(dt))); break; default: throw TypeHelper.InvalidDataType((int)dbType); } } return(((MemoryStream)writer.BaseStream).ToArray()); }
/// <summary>Create an array from a header description. /// This is typically how data will be created when reading /// FITS data from a file where the header is read first. /// This creates an empty array.</summary> /// <param name="h">header to be used as a template.</param> /// <exception cref="FitsException"> FitsException if there was a problem with the header description.</exception> public ImageData(Header h) { dataDescription = ParseHeader(h); }
internal ImageDataTiler(ImageData enclosingInstance, RandomAccess o, long offset, ArrayDesc d) : base(o, offset, d.dims, d.type) { InitBlock(enclosingInstance); }
private byte[] EncodeSlice(ArrayDesc desc, Array sourceArray, int length) { BinaryWriter writer = new BinaryWriter(new MemoryStream()); Charset charset = this.db.Charset; DbDataType dbType = DbDataType.Array; int subType = (this.Descriptor.Scale < 0) ? 2 : 0; int type = 0; // Infer data types type = TypeHelper.GetFbType(this.Descriptor.DataType); dbType = TypeHelper.GetDbDataType(this.Descriptor.DataType, subType, this.Descriptor.Scale); foreach (object source in sourceArray) { switch (dbType) { case DbDataType.Char: { string value = source != null ? (string)source : string.Empty; byte[] buffer = charset.GetBytes(value); writer.Write(buffer); if (desc.Length > buffer.Length) { for (int j = buffer.Length; j < desc.Length; j++) { writer.Write((byte)32); } } } break; case DbDataType.VarChar: { string value = source != null ? (string)source : string.Empty; byte[] buffer = charset.GetBytes(value); writer.Write(buffer); if (desc.Length > buffer.Length) { for (int j = buffer.Length; j < desc.Length; j++) { writer.Write((byte)0); } } writer.Write((short)0); } break; case DbDataType.SmallInt: writer.Write((short)source); break; case DbDataType.Integer: writer.Write((int)source); break; case DbDataType.BigInt: writer.Write((long)source); break; case DbDataType.Float: writer.Write((float)source); break; case DbDataType.Double: writer.Write((double)source); break; case DbDataType.Numeric: case DbDataType.Decimal: { object numeric = TypeEncoder.EncodeDecimal((decimal)source, desc.Scale, type); switch (type) { case IscCodes.SQL_SHORT: writer.Write((short)numeric); break; case IscCodes.SQL_LONG: writer.Write((int)numeric); break; case IscCodes.SQL_QUAD: case IscCodes.SQL_INT64: writer.Write((long)numeric); break; } } break; case DbDataType.Date: writer.Write(TypeEncoder.EncodeDate(Convert.ToDateTime(source, CultureInfo.CurrentCulture.DateTimeFormat))); break; case DbDataType.Time: writer.Write(TypeEncoder.EncodeTime((TimeSpan)source)); break; case DbDataType.TimeStamp: var dt = Convert.ToDateTime(source, CultureInfo.CurrentCulture.DateTimeFormat); writer.Write(TypeEncoder.EncodeDate(dt)); writer.Write(TypeEncoder.EncodeTime(TypeHelper.DateTimeToTimeSpan(dt))); break; default: throw new NotSupportedException("Unknown data type"); } } return(((MemoryStream)writer.BaseStream).ToArray()); }
private byte[] GenerateSDL(ArrayDesc desc) { int n; int from; int to; int increment; int dimensions; ArrayBound tail; BinaryWriter sdl; dimensions = desc.Dimensions; if (dimensions > 16) { throw IscException.ForErrorCode(IscCodes.isc_invalid_dimension); } sdl = new BinaryWriter(new MemoryStream()); Stuff( sdl, 4, IscCodes.isc_sdl_version1, IscCodes.isc_sdl_struct, 1, desc.DataType); switch (desc.DataType) { case IscCodes.blr_short: case IscCodes.blr_long: case IscCodes.blr_int64: case IscCodes.blr_quad: StuffSdl(sdl, (byte)desc.Scale); break; case IscCodes.blr_text: case IscCodes.blr_cstring: case IscCodes.blr_varying: StuffWord(sdl, desc.Length); break; default: break; } StuffString(sdl, IscCodes.isc_sdl_relation, desc.RelationName); StuffString(sdl, IscCodes.isc_sdl_field, desc.FieldName); if ((desc.Flags & IscCodes.ARRAY_DESC_COLUMN_MAJOR) == IscCodes.ARRAY_DESC_COLUMN_MAJOR) { from = dimensions - 1; to = -1; increment = -1; } else { from = 0; to = dimensions; increment = 1; } for (n = from; n != to; n += increment) { tail = desc.Bounds[n]; if (tail.LowerBound == 1) { Stuff(sdl, 2, IscCodes.isc_sdl_do1, n); } else { Stuff(sdl, 2, IscCodes.isc_sdl_do2, n); StuffLiteral(sdl, tail.LowerBound); } StuffLiteral(sdl, tail.UpperBound); } Stuff(sdl, 5, IscCodes.isc_sdl_element, 1, IscCodes.isc_sdl_scalar, 0, dimensions); for (n = 0; n < dimensions; n++) { Stuff(sdl, 2, IscCodes.isc_sdl_variable, n); } StuffSdl(sdl, IscCodes.isc_sdl_eoc); return(((MemoryStream)sdl.BaseStream).ToArray()); }
public override ValueTask <ArrayBase> CreateArrayAsync(ArrayDesc descriptor, CancellationToken cancellationToken = default) { var array = new FesArray(descriptor); return(ValueTask2.FromResult <ArrayBase>(array)); }
public override ArrayBase CreateArray(ArrayDesc descriptor) { var array = new FesArray(descriptor); return(array); }
private async Task <byte[]> ReceiveSliceResponse(ArrayDesc desc, AsyncWrappingCommonArgs async) { try { var operation = await _database.ReadOperation(async).ConfigureAwait(false); if (operation == IscCodes.op_slice) { var isVariying = false; var elements = 0; var length = await _database.Xdr.ReadInt32(async).ConfigureAwait(false); length = await _database.Xdr.ReadInt32(async).ConfigureAwait(false); switch (desc.DataType) { case IscCodes.blr_text: case IscCodes.blr_text2: case IscCodes.blr_cstring: case IscCodes.blr_cstring2: elements = length / desc.Length; length += elements * ((4 - desc.Length) & 3); break; case IscCodes.blr_varying: case IscCodes.blr_varying2: elements = length / desc.Length; isVariying = true; break; case IscCodes.blr_short: length = length * desc.Length; break; } if (isVariying) { using (var ms = new MemoryStream()) { var xdr = new XdrReaderWriter(new DataProviderStreamWrapper(ms)); for (var i = 0; i < elements; i++) { var buffer = await _database.Xdr.ReadOpaque(await _database.Xdr.ReadInt32(async).ConfigureAwait(false), async).ConfigureAwait(false); await xdr.WriteBuffer(buffer, buffer.Length, async).ConfigureAwait(false); } await xdr.Flush(async).ConfigureAwait(false); return(ms.ToArray()); } } else { return(await _database.Xdr.ReadOpaque(length, async).ConfigureAwait(false)); } } else { await _database.ReadResponse(operation, async).ConfigureAwait(false); return(null); } } catch (IOException ex) { throw IscException.ForIOException(ex); } }
private byte[] ReceiveSliceResponse(ArrayDesc desc) { try { var operation = _database.ReadOperation(); if (operation == IscCodes.op_slice) { var isVariying = false; var elements = 0; var length = _database.Xdr.ReadInt32(); length = _database.Xdr.ReadInt32(); switch (desc.DataType) { case IscCodes.blr_text: case IscCodes.blr_text2: case IscCodes.blr_cstring: case IscCodes.blr_cstring2: elements = length / desc.Length; length += elements * ((4 - desc.Length) & 3); break; case IscCodes.blr_varying: case IscCodes.blr_varying2: elements = length / desc.Length; isVariying = true; break; case IscCodes.blr_short: length = length * desc.Length; break; } if (isVariying) { using (var ms = new MemoryStream()) { var xdr = new XdrReaderWriter(ms); for (var i = 0; i < elements; i++) { var buffer = _database.Xdr.ReadOpaque(_database.Xdr.ReadInt32()); xdr.WriteBuffer(buffer, buffer.Length); } xdr.Flush(); return(ms.ToArray()); } } else { return(_database.Xdr.ReadOpaque(length)); } } else { _database.ReadResponse(operation); return(null); } } catch (IOException ex) { throw IscException.ForErrorCode(IscCodes.isc_network_error, ex); } }
public override Task <ArrayBase> CreateArray(ArrayDesc descriptor, AsyncWrappingCommonArgs async) { var array = new FesArray(descriptor); return(Task.FromResult((ArrayBase)array)); }
private byte[] ReceiveSliceResponse(ArrayDesc desc) { try { int operation = this.db.ReadOperation(); if (operation == IscCodes.op_slice) { // Read slice length bool isVariying = false; int elements = 0; int length = this.db.Receive.ReadInt32(); length = this.db.Receive.ReadInt32(); switch (desc.DataType) { case IscCodes.blr_text: case IscCodes.blr_text2: case IscCodes.blr_cstring: case IscCodes.blr_cstring2: elements = length / desc.Length; length += elements * ((4 - desc.Length) & 3); break; case IscCodes.blr_varying: case IscCodes.blr_varying2: elements = length / desc.Length; isVariying = true; break; case IscCodes.blr_short: length = length * desc.Length; break; } if (isVariying) { XdrStream xdr = new XdrStream(); for (int i = 0; i < elements; i++) { byte[] buffer = this.db.Receive.ReadOpaque( this.db.Receive.ReadInt32()); xdr.WriteBuffer(buffer, buffer.Length); } return(xdr.ToArray()); } else { return(this.db.Receive.ReadOpaque(length)); } } else { this.db.SetOperation(operation); this.db.ReadGenericResponse(); return(null); } } catch (IOException) { throw new IscException(IscCodes.isc_net_read_err); } }
protected ArrayBase(ArrayDesc descriptor) { _tableName = descriptor.RelationName; _fieldName = descriptor.FieldName; _descriptor = descriptor; }
public FesArray(ArrayDesc descriptor) : base(descriptor) { _statusVector = new IntPtr[IscCodes.ISC_STATUS_LENGTH]; }
private byte[] ReceiveSliceResponse(ArrayDesc desc) { try { int operation = _database.ReadOperation(); if (operation == IscCodes.op_slice) { bool isVariying = false; int elements = 0; int length = _database.XdrStream.ReadInt32(); length = _database.XdrStream.ReadInt32(); switch (desc.DataType) { case IscCodes.blr_text: case IscCodes.blr_text2: case IscCodes.blr_cstring: case IscCodes.blr_cstring2: elements = length / desc.Length; length += elements * ((4 - desc.Length) & 3); break; case IscCodes.blr_varying: case IscCodes.blr_varying2: elements = length / desc.Length; isVariying = true; break; case IscCodes.blr_short: length = length * desc.Length; break; } if (isVariying) { using (XdrStream xdr = new XdrStream()) { for (int i = 0; i < elements; i++) { byte[] buffer = _database.XdrStream.ReadOpaque(_database.XdrStream.ReadInt32()); xdr.WriteBuffer(buffer, buffer.Length); } return(xdr.ToArray()); } } else { return(_database.XdrStream.ReadOpaque(length)); } } else { _database.SetOperation(operation); _database.ReadResponse(); return(null); } } catch (IOException ex) { throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex); } }
public abstract ArrayBase CreateArray(ArrayDesc descriptor);
public GdsArray(ArrayDesc descriptor) : base(descriptor) { }
public abstract ValueTask <ArrayBase> CreateArrayAsync(ArrayDesc descriptor, CancellationToken cancellationToken = default);
public ExtArray(ArrayDesc descriptor) : base(descriptor) { }
public override ArrayBase CreateArray(ArrayDesc descriptor) { return(new GdsArray(descriptor)); }
/// <summary>Create an array from a header description. /// This is typically how data will be created when reading /// FITS data from a file where the header is read first. /// This creates an empty array.</summary> /// <param name="h">header to be used as a template.</param> /// <exception cref="FitsException"> FitsException if there was a problem with the header description.</exception> public ImageData(Header h) { dataDescription = ParseHeader(h); }
internal ImageDataTiler(ImageData enclosingInstance, RandomAccess o, long offset, ArrayDesc d) : base(o, offset, d.dims, d.type) { InitBlock(enclosingInstance); }