internal SmiSettersStream(SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData) { this._sink = sink; this._setters = setters; this._ordinal = ordinal; this._lengthWritten = 0L; this._metaData = metaData; }
internal SmiSettersStream( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData ) { Debug.Assert( null != sink ); Debug.Assert( null != setters ); Debug.Assert( 0 <= ordinal ); Debug.Assert( null != metaData ); _sink = sink; _setters = setters; _ordinal = ordinal; _lengthWritten = 0; _metaData = metaData; }
internal SmiSettersStream(SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData) { Debug.Assert(null != sink); Debug.Assert(null != setters); Debug.Assert(0 <= ordinal); Debug.Assert(null != metaData); _sink = sink; _setters = setters; _ordinal = ordinal; _lengthWritten = 0; _metaData = metaData; }
private static void SetSqlString_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, SqlString value, int offset, int length ) { if ( value.IsNull ) { setters.SetDBNull( sink, ordinal ); sink.ProcessMessagesAndThrow(); } else { if (SqlDbType.Variant == metaData.SqlDbType) { // Set up a NVarChar metadata with correct LCID/Collation metaData = new SmiMetaData( SqlDbType.NVarChar, SmiMetaData.MaxUnicodeCharacters, 0, 0, value.LCID, value.SqlCompareOptions, null); setters.SetVariantMetaData( sink, ordinal, metaData ); sink.ProcessMessagesAndThrow(); } SetString_Unchecked( sink, setters, ordinal, value.Value, offset, length ); } }
private static void SetSqlMoney_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, SqlMoney value ) { if ( value.IsNull ) { setters.SetDBNull( sink, ordinal ); } else { if ( SqlDbType.Variant == metaData.SqlDbType ) { setters.SetVariantMetaData( sink, ordinal, SmiMetaData.DefaultMoney ); sink.ProcessMessagesAndThrow(); } setters.SetInt64( sink, ordinal, value.ToSqlInternalRepresentation() ); } sink.ProcessMessagesAndThrow(); }
private static void SetSqlBinary_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SqlBinary value, int offset, int length ) { if ( value.IsNull ) { setters.SetDBNull( sink, ordinal ); } else { SetByteArray_Unchecked( sink, setters, ordinal, value.Value, offset, length ); } sink.ProcessMessagesAndThrow(); }
private static void SetDate_Unchecked(SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, DateTime value) { Debug.Assert(SqlDbType.Variant == metaData.SqlDbType, "Invalid type. This should be called only when the type is variant."); setters.SetVariantMetaData(sink, ordinal, SmiMetaData.DefaultDate); setters.SetDateTime(sink, ordinal, value); sink.ProcessMessagesAndThrow(); }
private static void SetDBNull_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal ) { setters.SetDBNull( sink, ordinal ); sink.ProcessMessagesAndThrow(); }
private static void SetCharArray_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, char[] buffer, int bufferOffset, int length ) { if ( length > 0 ) { setters.SetChars( sink, ordinal, 0, buffer, bufferOffset, length ); sink.ProcessMessagesAndThrow(); } setters.SetCharsLength( sink, ordinal, length ); sink.ProcessMessagesAndThrow(); }
private static void SetUdt_LengthChecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, object value ) { if ( ADP.IsNull( value ) ) { setters.SetDBNull( sink, ordinal ); sink.ProcessMessagesAndThrow(); } else { System.IO.Stream target = new SmiSettersStream( sink, setters, ordinal, metaData ); SerializationHelperSql9.Serialize( target, value ); } }
internal static void FillCompatibleITypedSettersFromRecord(SmiEventSink_Default sink, ITypedSettersV3 setters, SmiMetaData[] metaData, SqlDataRecord record, SmiDefaultFieldsProperty useDefaultValues) { for (int i = 0; i < metaData.Length; ++i) { if (null != useDefaultValues && useDefaultValues[i]) { continue; } if (record.IsDBNull(i)) { ValueUtilsSmi.SetDBNull_Unchecked(sink, setters, i); } else { switch (metaData[i].SqlDbType) { case SqlDbType.BigInt: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Int64 ) ); SetInt64_Unchecked( sink, setters, i, record.GetInt64(i) ); break; case SqlDbType.Binary: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) ); SetBytes_FromRecord( sink, setters, i, metaData[i], record, 0 ); break; case SqlDbType.Bit: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Boolean ) ); SetBoolean_Unchecked( sink, setters, i, record.GetBoolean(i) ); break; case SqlDbType.Char: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlChars ) ); SetChars_FromRecord( sink, setters, i, metaData[i], record, 0 ); break; case SqlDbType.DateTime: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.DateTime ) ); SetDateTime_Checked( sink, setters, i, metaData[i], record.GetDateTime(i) ); break; case SqlDbType.Decimal: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlDecimal ) ); SetSqlDecimal_Unchecked( sink, setters, i, record.GetSqlDecimal(i) ); break; case SqlDbType.Float: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Double ) ); SetDouble_Unchecked( sink, setters, i, record.GetDouble(i) ); break; case SqlDbType.Image: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) ); SetBytes_FromRecord( sink, setters, i, metaData[i], record, 0 ); break; case SqlDbType.Int: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Int32 ) ); SetInt32_Unchecked( sink, setters, i, record.GetInt32(i) ); break; case SqlDbType.Money: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlMoney ) ); SetSqlMoney_Unchecked( sink, setters, i, metaData[i], record.GetSqlMoney(i) ); break; case SqlDbType.NChar: case SqlDbType.NText: case SqlDbType.NVarChar: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlChars ) ); SetChars_FromRecord( sink, setters, i, metaData[i], record, 0 ); break; case SqlDbType.Real: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Single ) ); SetSingle_Unchecked( sink, setters, i, record.GetFloat(i) ); break; case SqlDbType.UniqueIdentifier: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Guid ) ); SetGuid_Unchecked( sink, setters, i, record.GetGuid(i) ); break; case SqlDbType.SmallDateTime: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.DateTime ) ); SetDateTime_Checked( sink, setters, i, metaData[i], record.GetDateTime(i) ); break; case SqlDbType.SmallInt: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Int16 ) ); SetInt16_Unchecked( sink, setters, i, record.GetInt16(i) ); break; case SqlDbType.SmallMoney: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlMoney ) ); SetSqlMoney_Checked( sink, setters, i, metaData[i], record.GetSqlMoney(i) ); break; case SqlDbType.Text: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlChars ) ); SetChars_FromRecord( sink, setters, i, metaData[i], record, 0 ); break; case SqlDbType.Timestamp: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) ); SetBytes_FromRecord( sink, setters, i, metaData[i], record, 0 ); break; case SqlDbType.TinyInt: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Byte ) ); SetByte_Unchecked( sink, setters, i, record.GetByte(i) ); break; case SqlDbType.VarBinary: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) ); SetBytes_FromRecord( sink, setters, i, metaData[i], record, 0 ); break; case SqlDbType.VarChar: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.String ) ); SetChars_FromRecord( sink, setters, i, metaData[i], record, 0 ); break; case SqlDbType.Xml: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlXml ) ); SetSqlXml_Unchecked( sink, setters, i, record.GetSqlXml(i) ); // perf improvement? break; case SqlDbType.Variant: object o = record.GetSqlValue(i); ExtendedClrTypeCode typeCode = MetaDataUtilsSmi.DetermineExtendedTypeCode( o ); SetCompatibleValue( sink, setters, i, metaData[i], o, typeCode, 0 ); break; case SqlDbType.Udt: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) ); SetBytes_FromRecord( sink, setters, i, metaData[i], record, 0 ); break; default: Debug.Assert( false, "unsupported DbType:" + metaData[i].SqlDbType.ToString() ); throw ADP.NotSupported(); } } } }
internal static void FillCompatibleITypedSettersFromRecord(SmiEventSink_Default sink, ITypedSettersV3 setters, SmiMetaData[] metaData, SqlDataRecord record) { FillCompatibleITypedSettersFromRecord(sink, setters, metaData, record, null); }
// Copy multiple fields from reader to ITypedSettersV3 // Assumes caller enforces that reader and setter metadata are compatible internal static void FillCompatibleITypedSettersFromReader( SmiEventSink_Default sink, ITypedSettersV3 setters, SmiMetaData[] metaData, SqlDataReader reader ) { for ( int i = 0; i < metaData.Length; i++ ) { if ( reader.IsDBNull(i) ) { ValueUtilsSmi.SetDBNull_Unchecked( sink, setters, i ); } else { switch ( metaData[i].SqlDbType ) { case SqlDbType.BigInt: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Int64 ) ); ValueUtilsSmi.SetInt64_Unchecked( sink, setters, i, reader.GetInt64(i) ); break; case SqlDbType.Binary: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) ); ValueUtilsSmi.SetSqlBytes_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0 ); break; case SqlDbType.Bit: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Boolean ) ); SetBoolean_Unchecked( sink, setters, i, reader.GetBoolean(i) ); break; case SqlDbType.Char: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlChars ) ); SetSqlChars_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlChars(i), 0 ); break; case SqlDbType.DateTime: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.DateTime ) ); SetDateTime_Checked( sink, setters, i, metaData[i], reader.GetDateTime(i) ); break; case SqlDbType.Decimal: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlDecimal ) ); SetSqlDecimal_Unchecked( sink, setters, i, reader.GetSqlDecimal(i) ); break; case SqlDbType.Float: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Double ) ); SetDouble_Unchecked( sink, setters, i, reader.GetDouble(i) ); break; case SqlDbType.Image: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) ); SetSqlBytes_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0 ); break; case SqlDbType.Int: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Int32 ) ); SetInt32_Unchecked( sink, setters, i, reader.GetInt32(i) ); break; case SqlDbType.Money: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlMoney ) ); SetSqlMoney_Unchecked( sink, setters, i, metaData[i], reader.GetSqlMoney(i) ); break; case SqlDbType.NChar: case SqlDbType.NText: case SqlDbType.NVarChar: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlChars ) ); SetSqlChars_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlChars(i), 0 ); break; case SqlDbType.Real: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Single ) ); SetSingle_Unchecked( sink, setters, i, reader.GetFloat(i) ); break; case SqlDbType.UniqueIdentifier: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Guid ) ); SetGuid_Unchecked( sink, setters, i, reader.GetGuid(i) ); break; case SqlDbType.SmallDateTime: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.DateTime ) ); SetDateTime_Checked( sink, setters, i, metaData[i], reader.GetDateTime(i) ); break; case SqlDbType.SmallInt: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Int16 ) ); SetInt16_Unchecked( sink, setters, i, reader.GetInt16(i) ); break; case SqlDbType.SmallMoney: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlMoney ) ); SetSqlMoney_Checked( sink, setters, i, metaData[i], reader.GetSqlMoney(i) ); break; case SqlDbType.Text: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlChars ) ); SetSqlChars_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlChars(i), 0 ); break; case SqlDbType.Timestamp: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) ); SetSqlBytes_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0 ); break; case SqlDbType.TinyInt: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Byte ) ); SetByte_Unchecked( sink, setters, i, reader.GetByte(i) ); break; case SqlDbType.VarBinary: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) ); SetSqlBytes_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0 ); break; case SqlDbType.VarChar: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.String ) ); SetSqlChars_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlChars(i), 0 ); break; case SqlDbType.Xml: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlXml ) ); SetSqlXml_Unchecked( sink, setters, i, reader.GetSqlXml(i) ); break; case SqlDbType.Variant: object o = reader.GetSqlValue(i); ExtendedClrTypeCode typeCode = MetaDataUtilsSmi.DetermineExtendedTypeCode( o ); SetCompatibleValue( sink, setters, i, metaData[i], o, typeCode, 0 ); break; case SqlDbType.Udt: Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) ); SetSqlBytes_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0 ); break; default: // In order for us to get here we would have to have an // invalid instance of SqlDbType, or one would have to add // new member to SqlDbType without adding a case in this // switch, hence the assert - it must be Debug.Assert( false, "unsupported DbType:" + metaData[i].SqlDbType.ToString() ); throw ADP.NotSupported(); } } } }
internal static void FillCompatibleITypedSettersFromRecord(SmiEventSink_Default sink, ITypedSettersV3 setters, SmiMetaData[] metaData, SqlDataRecord record, SmiDefaultFieldsProperty useDefaultValues) { for (int i = 0; i < metaData.Length; ++i) { if (null != useDefaultValues && useDefaultValues[i]) { continue; } if (record.IsDBNull(i)) { ValueUtilsSmi.SetDBNull_Unchecked(sink, setters, i); } else { switch (metaData[i].SqlDbType) { case SqlDbType.BigInt: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Int64)); SetInt64_Unchecked(sink, setters, i, record.GetInt64(i)); break; case SqlDbType.Binary: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlBytes)); SetBytes_FromRecord(sink, setters, i, metaData[i], record, 0); break; case SqlDbType.Bit: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Boolean)); SetBoolean_Unchecked(sink, setters, i, record.GetBoolean(i)); break; case SqlDbType.Char: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlChars)); SetChars_FromRecord(sink, setters, i, metaData[i], record, 0); break; case SqlDbType.DateTime: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.DateTime)); SetDateTime_Checked(sink, setters, i, metaData[i], record.GetDateTime(i)); break; case SqlDbType.Decimal: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlDecimal)); SetSqlDecimal_Unchecked(sink, setters, i, record.GetSqlDecimal(i)); break; case SqlDbType.Float: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Double)); SetDouble_Unchecked(sink, setters, i, record.GetDouble(i)); break; case SqlDbType.Image: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlBytes)); SetBytes_FromRecord(sink, setters, i, metaData[i], record, 0); break; case SqlDbType.Int: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Int32)); SetInt32_Unchecked(sink, setters, i, record.GetInt32(i)); break; case SqlDbType.Money: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlMoney)); SetSqlMoney_Unchecked(sink, setters, i, metaData[i], record.GetSqlMoney(i)); break; case SqlDbType.NChar: case SqlDbType.NText: case SqlDbType.NVarChar: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlChars)); SetChars_FromRecord(sink, setters, i, metaData[i], record, 0); break; case SqlDbType.Real: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Single)); SetSingle_Unchecked(sink, setters, i, record.GetFloat(i)); break; case SqlDbType.UniqueIdentifier: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Guid)); SetGuid_Unchecked(sink, setters, i, record.GetGuid(i)); break; case SqlDbType.SmallDateTime: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.DateTime)); SetDateTime_Checked(sink, setters, i, metaData[i], record.GetDateTime(i)); break; case SqlDbType.SmallInt: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Int16)); SetInt16_Unchecked(sink, setters, i, record.GetInt16(i)); break; case SqlDbType.SmallMoney: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlMoney)); SetSqlMoney_Checked(sink, setters, i, metaData[i], record.GetSqlMoney(i)); break; case SqlDbType.Text: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlChars)); SetChars_FromRecord(sink, setters, i, metaData[i], record, 0); break; case SqlDbType.Timestamp: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlBytes)); SetBytes_FromRecord(sink, setters, i, metaData[i], record, 0); break; case SqlDbType.TinyInt: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.Byte)); SetByte_Unchecked(sink, setters, i, record.GetByte(i)); break; case SqlDbType.VarBinary: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlBytes)); SetBytes_FromRecord(sink, setters, i, metaData[i], record, 0); break; case SqlDbType.VarChar: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.String)); SetChars_FromRecord(sink, setters, i, metaData[i], record, 0); break; case SqlDbType.Xml: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlXml)); SetSqlXml_Unchecked(sink, setters, i, record.GetSqlXml(i)); // perf improvement? break; case SqlDbType.Variant: object o = record.GetSqlValue(i); ExtendedClrTypeCode typeCode = MetaDataUtilsSmi.DetermineExtendedTypeCode(o); SetCompatibleValue(sink, setters, i, metaData[i], o, typeCode, 0); break; case SqlDbType.Udt: Debug.Assert(CanAccessSetterDirectly(metaData[i], ExtendedClrTypeCode.SqlBytes)); SetBytes_FromRecord(sink, setters, i, metaData[i], record, 0); break; default: Debug.Assert(false, "unsupported DbType:" + metaData[i].SqlDbType.ToString()); throw ADP.NotSupported(); } } } }
private static void SetXmlReader_Unchecked(SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, XmlReader xmlReader) { // set up writer XmlWriterSettings WriterSettings = new XmlWriterSettings(); WriterSettings.CloseOutput = false; // don't close the memory stream WriterSettings.ConformanceLevel = ConformanceLevel.Fragment; WriterSettings.Encoding = System.Text.Encoding.Unicode; WriterSettings.OmitXmlDeclaration = true; System.IO.Stream target = new SmiSettersStream(sink, setters, ordinal, SmiMetaData.DefaultXml); XmlWriter xmlWriter = XmlWriter.Create(target, WriterSettings); // now spool the data into the writer (WriteNode will call Read()) xmlReader.Read(); while (!xmlReader.EOF) { xmlWriter.WriteNode(xmlReader, true); } xmlWriter.Flush(); sink.ProcessMessagesAndThrow(); }
private static void SetDecimal_PossiblyMoney(SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, Decimal value) { if (SqlDbType.Decimal == metaData.SqlDbType || SqlDbType.Variant == metaData.SqlDbType) { SetDecimal_Unchecked( sink, setters, ordinal, value ); } else { Debug.Assert( SqlDbType.Money == metaData.SqlDbType || SqlDbType.SmallMoney == metaData.SqlDbType, "Unexpected sqldbtype=" + metaData.SqlDbType); SetSqlMoney_Checked( sink, setters, ordinal, metaData, new SqlMoney(value) ); } }
private static void SetTextReader_Unchecked(SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metadata, TextDataFeed feed) { long len = metadata.MaxLength; char[] buff = new char[constTextBufferSize]; int nWritten = 0; do { int nRead = 0; int readSize = constTextBufferSize; if (len > 0 && nWritten + readSize > len) { readSize = (int)(len - nWritten); } Debug.Assert(readSize >= 0); nRead = feed._source.Read(buff, 0, readSize); if (nRead == 0) { break; } setters.SetChars(sink, ordinal, nWritten, buff, 0, nRead); sink.ProcessMessagesAndThrow(); nWritten += nRead; } while (len <= 0 || nWritten < len); setters.SetCharsLength(sink, ordinal, nWritten); sink.ProcessMessagesAndThrow(); }
private static void SetSqlDateTime_Checked(SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, SqlDateTime value) { if (!value.IsNull) { VerifyDateTimeRange(metaData.SqlDbType, value.Value); } SetSqlDateTime_Unchecked(sink, setters, ordinal, value); }
private static int SetChars_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length ) { int result = setters.SetChars( sink, ordinal, fieldOffset, buffer, bufferOffset, length ); sink.ProcessMessagesAndThrow(); return result; }
private static void SetDate_Checked(SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, DateTime value) { VerifyDateTimeRange(metaData.SqlDbType, value); SetDate_Unchecked(sink, setters, ordinal, metaData, value); }
private static void SetDecimal_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, Decimal value ) { setters.SetSqlDecimal( sink, ordinal, new SqlDecimal( value ) ); sink.ProcessMessagesAndThrow(); }
private static void SetSqlMoney_Checked(SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, SqlMoney value) { if (!value.IsNull && SqlDbType.SmallMoney == metaData.SqlDbType) { decimal decimalValue = value.Value; if (TdsEnums.SQL_SMALL_MONEY_MIN > decimalValue || TdsEnums.SQL_SMALL_MONEY_MAX < decimalValue) { throw SQL.MoneyOverflow(decimalValue.ToString(CultureInfo.InvariantCulture)); } } SetSqlMoney_Unchecked(sink, setters, ordinal, metaData, value); }
private static void SetSingle_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, Single value ) { setters.SetSingle( sink, ordinal, value ); sink.ProcessMessagesAndThrow(); }
private static void SetCharArray_LengthChecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, char[] buffer, int offset ) { int length = CheckXetParameters( metaData.SqlDbType, metaData.MaxLength, NoLengthLimit /* actual */, 0, buffer.Length, offset, buffer.Length - offset ); Debug.Assert( length >= 0, "buffer.Length was invalid!" ); SetCharArray_Unchecked( sink, setters, ordinal, buffer, offset, length ); }
private static void SetSqlChars_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SqlChars value, int offset, int length ) { if ( value.IsNull ) { setters.SetDBNull( sink, ordinal ); sink.ProcessMessagesAndThrow(); } else { int chunkSize; if ( length > __maxCharChunkSize || length < 0 ) { chunkSize = __maxCharChunkSize; } else { chunkSize = checked( (int)length ); } char[] buffer = new char[ chunkSize ]; long charsRead; long charsWritten = 1; // prime value to get into write loop long currentOffset = offset; long lengthWritten = 0; while ( (length < 0 || lengthWritten < length) && 0 != ( charsRead = value.Read( currentOffset, buffer, 0, chunkSize ) ) && 0 != charsWritten ) { charsWritten = setters.SetChars( sink, ordinal, currentOffset, buffer, 0, checked( (int) charsRead ) ); sink.ProcessMessagesAndThrow(); checked{ currentOffset += charsWritten; } checked{ lengthWritten += charsWritten;} } // Make sure to trim any left-over data setters.SetCharsLength( sink, ordinal, currentOffset ); sink.ProcessMessagesAndThrow(); } }
private static void SetChars_FromRecord( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, SqlDataRecord record, int offset ) { int length = 0; // Deal with large values by sending bufferLength of NoLengthLimit // CheckXetParameters will ignore length checks in this case long bufferLength = record.GetChars(ordinal, 0, null, 0, 0); if ( bufferLength > Int32.MaxValue ) { bufferLength = NoLengthLimit; } length = CheckXetParameters( metaData.SqlDbType, metaData.MaxLength, NoLengthLimit /* actual */, 0, checked( (int) bufferLength ), offset, checked( (int) bufferLength - offset ) ); int chunkSize; if ( length > __maxCharChunkSize || length < 0 ) { if (MetaDataUtilsSmi.IsAnsiType(metaData.SqlDbType)) { chunkSize = __maxByteChunkSize; } else { chunkSize = __maxCharChunkSize; } } else { chunkSize = checked( (int)length ); } char[] buffer = new char[ chunkSize ]; long charsRead; long charsWritten = 1; // prime value to get into write loop long currentOffset = offset; long lengthWritten = 0; while ( (length < 0 || lengthWritten < length) && 0 != ( charsRead = record.GetChars( ordinal, currentOffset, buffer, 0, chunkSize ) ) && 0 != charsWritten ) { charsWritten = setters.SetChars( sink, ordinal, currentOffset, buffer, 0, checked( (int) charsRead ) ); sink.ProcessMessagesAndThrow(); checked{ currentOffset += charsWritten; } checked{ lengthWritten += charsWritten;} } // Make sure to trim any left-over data setters.SetCharsLength( sink, ordinal, currentOffset ); sink.ProcessMessagesAndThrow(); }
private static void SetSqlSingle_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SqlSingle value ) { if ( value.IsNull ) { setters.SetDBNull( sink, ordinal ); } else { setters.SetSingle( sink, ordinal, value.Value ); } sink.ProcessMessagesAndThrow(); }
private static void SetSqlChars_LengthChecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, SqlChars value, int offset ) { int length = 0; if ( !value.IsNull ) { // Deal with large values by sending bufferLength of NoLengthLimit // CheckXetParameters will ignore length checks in this case long bufferLength = value.Length; if ( bufferLength > Int32.MaxValue ) { bufferLength = NoLengthLimit; } length = CheckXetParameters( metaData.SqlDbType, metaData.MaxLength, NoLengthLimit /* actual */, 0, checked( (int) bufferLength ), offset, checked( (int) bufferLength - offset ) ); } SetSqlChars_Unchecked( sink, setters, ordinal, value, 0, length ); }
private static void SetSqlXml_Unchecked(SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SqlXml value) { if (value.IsNull) { setters.SetDBNull(sink, ordinal); sink.ProcessMessagesAndThrow(); } else { SetXmlReader_Unchecked(sink, setters, ordinal, value.CreateReader()); } }
private static void SetSqlString_LengthChecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, SqlString value, int offset ) { if ( value.IsNull ) { SetDBNull_Unchecked( sink, setters, ordinal ); } else { string stringValue = value.Value; int length = CheckXetParameters( metaData.SqlDbType, metaData.MaxLength, NoLengthLimit /* actual */, 0, stringValue.Length, offset, stringValue.Length - offset ); Debug.Assert( length >= 0, "value.Length was invalid!" ); SetSqlString_Unchecked( sink, setters, ordinal, metaData, value, offset, length ); } }
private static void SetString_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, String value, int offset, int length ) { setters.SetString( sink, ordinal, value, offset, length ); sink.ProcessMessagesAndThrow(); }
private static void SetString_LengthChecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData, string value, int offset ) { int length = CheckXetParameters( metaData.SqlDbType, metaData.MaxLength, NoLengthLimit /* actual */, 0, value.Length, offset, checked( value.Length - offset ) ); Debug.Assert( length >= 0, "value.Length was invalid!" ); SetString_Unchecked( sink, setters, ordinal, value, offset, length ); }