protected override void ReadMetadata( string providerManifestToken, DbProviderServices providerServices, DbDataReader reader) { base.ReadMetadata(providerManifestToken, providerServices, reader); int fieldCount = this.FieldCount; bool flag = false; DbSpatialDataReader spatialDataReader = (DbSpatialDataReader)null; if (fieldCount > 0) { spatialDataReader = providerServices.GetSpatialDataReader(reader, providerManifestToken); } if (spatialDataReader != null) { this._geographyColumns = new bool[fieldCount]; this._geometryColumns = new bool[fieldCount]; for (int ordinal = 0; ordinal < fieldCount; ++ordinal) { this._geographyColumns[ordinal] = spatialDataReader.IsGeographyColumn(ordinal); this._geometryColumns[ordinal] = spatialDataReader.IsGeometryColumn(ordinal); flag = flag || this._geographyColumns[ordinal] || this._geometryColumns[ordinal]; } } this._spatialDataReader = flag ? spatialDataReader : (DbSpatialDataReader)null; }
public DbSpatialDataReader GetSpatialDataReader(DbDataReader fromReader, string manifestToken) { try { DbSpatialDataReader spatialReader = GetDbSpatialDataReader(fromReader, manifestToken); if (spatialReader == null) { throw EntityUtil.ProviderIncompatible(Strings.ProviderDidNotReturnSpatialServices); } return(spatialReader); } catch (ProviderIncompatibleException) { throw; } catch (Exception e) { if (EntityUtil.IsCatchableExceptionType(e)) { throw EntityUtil.ProviderIncompatible(System.Data.Entity.Strings.ProviderDidNotReturnSpatialServices, e); } throw; } }
protected override void ReadMetadata(string providerManifestToken, DbProviderServices providerServices, DbDataReader reader) { base.ReadMetadata(providerManifestToken, providerServices, reader); var fieldCount = FieldCount; var hasSpatialColumns = false; DbSpatialDataReader spatialDataReader = null; if (fieldCount > 0) { // FieldCount == 0 indicates NullDataReader spatialDataReader = providerServices.GetSpatialDataReader(reader, providerManifestToken); } if (spatialDataReader != null) { _geographyColumns = new bool[fieldCount]; _geometryColumns = new bool[fieldCount]; for (var i = 0; i < fieldCount; i++) { _geographyColumns[i] = spatialDataReader.IsGeographyColumn(i); _geometryColumns[i] = spatialDataReader.IsGeometryColumn(i); hasSpatialColumns = hasSpatialColumns || _geographyColumns[i] || _geometryColumns[i]; Debug.Assert(!_geographyColumns[i] || !_geometryColumns[i]); } } _spatialDataReader = hasSpatialColumns ? spatialDataReader : null; }
public ReaderMetadata( int fieldCount, string[] dataTypeNames, Type[] types, string[] columnNames, bool hasSpatialColumn, DbSpatialDataReader spatialDataReader, bool[] geographyColumns, bool[] geometryColumns) { FieldCount = fieldCount; DataTypeNames = dataTypeNames; ColumnTypes = types; ColumnNames = columnNames; HasSpatialColumns = hasSpatialColumn; SpatialDataReader = spatialDataReader; GeographyColumns = geographyColumns; GeometryColumns = geometryColumns; }
internal static BufferedDataRecord Initialize( string providerManifestToken, DbProviderServices providerServices, DbDataReader reader, Type[] columnTypes, bool[] nullableColumns) { var record = new ShapedBufferedDataRecord(); record.ReadMetadata(providerManifestToken, providerServices, reader); DbSpatialDataReader spatialDataReader = null; if (columnTypes.Any(t => t == typeof(DbGeography) || t == typeof(DbGeometry))) { spatialDataReader = providerServices.GetSpatialDataReader(reader, providerManifestToken); } return(record.Initialize(reader, spatialDataReader, columnTypes, nullableColumns)); }
internal static Task <BufferedDataRecord> InitializeAsync( string providerManifestToken, DbProviderServices providerServices, DbDataReader reader, Type[] columnTypes, bool[] nullableColumns, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var record = new ShapedBufferedDataRecord(); record.ReadMetadata(providerManifestToken, providerServices, reader); DbSpatialDataReader spatialDataReader = null; if (columnTypes.Any(t => t == typeof(DbGeography) || t == typeof(DbGeometry))) { spatialDataReader = providerServices.GetSpatialDataReader(reader, providerManifestToken); } return(record.InitializeAsync(reader, spatialDataReader, columnTypes, nullableColumns, cancellationToken)); }
private static ReaderMetadata ReadMetadata(string providerManifestToken, DbProviderServices providerSerivces, DbDataReader reader) { var fieldCount = reader.FieldCount; var hasSpatialColumns = false; DbSpatialDataReader spatialDataReader = null; bool[] geographyColumns = null; bool[] geometryColumns = null; try { spatialDataReader = providerSerivces.GetSpatialDataReader(reader, providerManifestToken); geographyColumns = new bool[fieldCount]; geometryColumns = new bool[fieldCount]; } catch (ProviderIncompatibleException) { } var dataTypeNames = new string[fieldCount]; var columnTypes = new Type[fieldCount]; var columnNames = new string[fieldCount]; for (var i = 0; i < fieldCount; i++) { dataTypeNames[i] = reader.GetDataTypeName(i); columnTypes[i] = reader.GetFieldType(i); columnNames[i] = reader.GetName(i); if (spatialDataReader != null) { geographyColumns[i] = spatialDataReader.IsGeographyColumn(i); geometryColumns[i] = spatialDataReader.IsGeometryColumn(i); hasSpatialColumns = hasSpatialColumns || geographyColumns[i] || geometryColumns[i]; Debug.Assert(!geographyColumns[i] || !geometryColumns[i]); } } return(new ReaderMetadata( fieldCount, dataTypeNames, columnTypes, columnNames, hasSpatialColumns, spatialDataReader, geographyColumns, geometryColumns)); }
private BufferedDataRecord Initialize( DbDataReader reader, DbSpatialDataReader spatialDataReader, Type[] columnTypes, bool[] nullableColumns) { InitializeFields(columnTypes, nullableColumns); while (reader.Read()) { _currentRowNumber++; if (_rowCapacity == _currentRowNumber) { DoubleBufferCapacity(); } var columnCount = Math.Max(columnTypes.Length, nullableColumns.Length); for (var i = 0; i < columnCount; i++) { if (i < _columnTypeCases.Length) { switch (_columnTypeCases[i]) { case TypeCase.Bool: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadBool(reader, i); } } else { ReadBool(reader, i); } break; case TypeCase.Byte: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadByte(reader, i); } } else { ReadByte(reader, i); } break; case TypeCase.Char: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadChar(reader, i); } } else { ReadChar(reader, i); } break; case TypeCase.DateTime: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadDateTime(reader, i); } } else { ReadDateTime(reader, i); } break; case TypeCase.Decimal: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadDecimal(reader, i); } } else { ReadDecimal(reader, i); } break; case TypeCase.Double: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadDouble(reader, i); } } else { ReadDouble(reader, i); } break; case TypeCase.Float: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadFloat(reader, i); } } else { ReadFloat(reader, i); } break; case TypeCase.Guid: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadGuid(reader, i); } } else { ReadGuid(reader, i); } break; case TypeCase.Short: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadShort(reader, i); } } else { ReadShort(reader, i); } break; case TypeCase.Int: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadInt(reader, i); } } else { ReadInt(reader, i); } break; case TypeCase.Long: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadLong(reader, i); } } else { ReadLong(reader, i); } break; case TypeCase.DbGeography: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadGeography(spatialDataReader, i); } } else { ReadGeography(spatialDataReader, i); } break; case TypeCase.DbGeometry: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadGeometry(spatialDataReader, i); } } else { ReadGeometry(spatialDataReader, i); } break; case TypeCase.Empty: if (nullableColumns[i]) { _tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i); } break; default: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i))) { ReadObject(reader, i); } } else { ReadObject(reader, i); } break; } } else { if (nullableColumns[i]) { _tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = reader.IsDBNull(i); } } } } _bools = new BitArray(_tempBools); _tempBools = null; _nulls = new BitArray(_tempNulls); _tempNulls = null; _rowCount = _currentRowNumber + 1; _currentRowNumber = -1; return(this); }
private async Task ReadGeometryAsync( DbSpatialDataReader spatialReader, int ordinal, CancellationToken cancellationToken) { _objects[_currentRowNumber * _objectCount + _ordinalToIndexMap[ordinal]] = await spatialReader.GetGeometryAsync(ordinal, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); }
private void ReadGeometry(DbSpatialDataReader spatialReader, int ordinal) { _objects[_currentRowNumber * _objectCount + _ordinalToIndexMap[ordinal]] = spatialReader.GetGeometry(ordinal); }
private async Task <BufferedDataRecord> InitializeAsync( DbDataReader reader, DbSpatialDataReader spatialDataReader, Type[] columnTypes, bool[] nullableColumns, CancellationToken cancellationToken) { InitializeFields(columnTypes, nullableColumns); while (await reader.ReadAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false)) { cancellationToken.ThrowIfCancellationRequested(); _currentRowNumber++; if (_rowCapacity == _currentRowNumber) { DoubleBufferCapacity(); } var columnCount = columnTypes.Length > nullableColumns.Length ? columnTypes.Length : nullableColumns.Length; for (var i = 0; i < columnCount; i++) { if (i < _columnTypeCases.Length) { switch (_columnTypeCases[i]) { case TypeCase.Bool: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadBoolAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadBoolAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.Byte: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadByteAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadByteAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.Char: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadCharAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadCharAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.DateTime: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadDateTimeAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadDateTimeAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.Decimal: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadDecimalAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadDecimalAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.Double: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadDoubleAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadDoubleAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.Float: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadFloatAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadFloatAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.Guid: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadGuidAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadGuidAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.Short: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadShortAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadShortAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.Int: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadIntAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadIntAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.Long: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadLongAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadLongAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.DbGeography: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadGeographyAsync(spatialDataReader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadGeographyAsync(spatialDataReader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.DbGeometry: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadGeometryAsync(spatialDataReader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadGeometryAsync(spatialDataReader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; case TypeCase.Empty: if (nullableColumns[i]) { _tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; default: if (nullableColumns[i]) { if (!(_tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false))) { await ReadObjectAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } else { await ReadObjectAsync(reader, i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } break; } } else { if (nullableColumns[i]) { _tempNulls[_currentRowNumber * _nullCount + _nullOrdinalToIndexMap[i]] = await reader.IsDBNullAsync(i, cancellationToken).ConfigureAwait(continueOnCapturedContext: false); } } } } _bools = new BitArray(_tempBools); _tempBools = null; _nulls = new BitArray(_tempNulls); _tempNulls = null; _rowCount = _currentRowNumber + 1; _currentRowNumber = -1; return(this); }
private async Task ReadGeometryAsync( DbSpatialDataReader spatialReader, int ordinal, CancellationToken cancellationToken) { _objects[_currentRowNumber * _objectCount + _ordinalToIndexMap[ordinal]] = await spatialReader.GetGeometryAsync(ordinal, cancellationToken).WithCurrentCulture(); }