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)
 {
     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;
        }
Beispiel #4
0
        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;
        }
Beispiel #5
0
 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 );
     }
 }
Beispiel #6
0
        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();
        }
Beispiel #7
0
 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();
 }
Beispiel #8
0
 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();
 }
Beispiel #9
0
 private static void SetDBNull_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal ) {
     setters.SetDBNull( sink, ordinal );
     sink.ProcessMessagesAndThrow();
 }
Beispiel #10
0
 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();
 }
Beispiel #11
0
 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 );
     }            
 }
Beispiel #12
0
 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();
             }
         }
     }
 }
Beispiel #13
0
 internal static void FillCompatibleITypedSettersFromRecord(SmiEventSink_Default sink, ITypedSettersV3 setters, SmiMetaData[] metaData, SqlDataRecord record) {
     FillCompatibleITypedSettersFromRecord(sink, setters, metaData, record, null);
 }
Beispiel #14
0
        // 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();
                    }
                }
            }
        }
Beispiel #16
0
        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();
        }
 internal static void FillCompatibleITypedSettersFromRecord(SmiEventSink_Default sink, ITypedSettersV3 setters, SmiMetaData[] metaData, SqlDataRecord record)
 {
     FillCompatibleITypedSettersFromRecord(sink, setters, metaData, record, null);
 }
Beispiel #18
0
 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) );
     }
 }
Beispiel #19
0
        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();
        }
Beispiel #20
0
 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);
 }
Beispiel #21
0
 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;
 }
Beispiel #22
0
 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);
 }
Beispiel #23
0
 private static void SetDecimal_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, Decimal value ) {
     setters.SetSqlDecimal( sink, ordinal, new SqlDecimal( value ) ); 
     sink.ProcessMessagesAndThrow();
 }
Beispiel #24
0
 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);
 }
Beispiel #25
0
 private static void SetSingle_Unchecked( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, Single value ) {
     setters.SetSingle( sink, ordinal, value ); 
     sink.ProcessMessagesAndThrow();
 }
Beispiel #26
0
 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 );
 }
Beispiel #27
0
        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();
            }
        }
Beispiel #28
0
        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();
        }
Beispiel #29
0
 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();
 }
Beispiel #30
0
 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 ); 
 }
Beispiel #31
0
 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());
     }
 }
Beispiel #32
0
 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 );
     }
 }
Beispiel #33
0
 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();
 }
Beispiel #34
0
 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 );
 }