internal static SqlBytes GetSqlBytes( SmiEventSink_Default sink, ITypedGettersV3 getters, int ordinal, SmiMetaData metaData, SmiContext context ) { SqlBytes result; if ( CanAccessGetterDirectly( metaData, ExtendedClrTypeCode.SqlBytes ) ) { if ( IsDBNull_Unchecked( sink, getters, ordinal ) ) { result = SqlBytes.Null; } else { long length = GetBytesLength_Unchecked( sink, getters, ordinal ); if ( 0 <= length && length < __maxByteChunkSize ) { byte[] byteBuffer = GetByteArray_Unchecked( sink, getters, ordinal ); result = new SqlBytes( byteBuffer ); } else { Stream s = new SmiGettersStream( sink, getters, ordinal, metaData ); s = CopyIntoNewSmiScratchStream( s, sink, context ); result = new SqlBytes( s ); } } } else { object obj = GetSqlValue( sink, getters, ordinal, metaData, null ); if (null == obj) { throw ADP.InvalidCast(); } SqlBinary binaryVal = (SqlBinary) obj; if ( binaryVal.IsNull ) { result = SqlBytes.Null; } else { result = new SqlBytes( binaryVal.Value ); } } return result; }
internal static SqlChars GetSqlChars( SmiEventSink_Default sink, ITypedGettersV3 getters, int ordinal, SmiMetaData metaData, SmiContext context ) { SqlChars result; if ( CanAccessGetterDirectly( metaData, ExtendedClrTypeCode.SqlChars ) ) { if ( IsDBNull_Unchecked( sink, getters, ordinal ) ) { result = SqlChars.Null; } else { long length = GetCharsLength_Unchecked( sink, getters, ordinal ); if ( length < __maxCharChunkSize || !InOutOfProcHelper.InProc) { char[] charBuffer = GetCharArray_Unchecked( sink, getters, ordinal ); result = new SqlChars( charBuffer ); } else { // InProc only Stream s = new SmiGettersStream( sink, getters, ordinal, metaData ); SqlStreamChars sc = CopyIntoNewSmiScratchStreamChars( s, sink, context ); result = new SqlChars( sc ); } } } else { SqlString stringValue; if (SqlDbType.Xml == metaData.SqlDbType) { SqlXml xmlValue = GetSqlXml_Unchecked( sink, getters, ordinal, null ); if (xmlValue.IsNull) { result = SqlChars.Null; } else { result = new SqlChars( xmlValue.Value.ToCharArray() ); } } else { object obj = GetSqlValue( sink, getters, ordinal, metaData, null ); if (null == obj) { throw ADP.InvalidCast(); } stringValue = (SqlString) obj; if ( stringValue.IsNull ) { result = SqlChars.Null; } else { result = new SqlChars( stringValue.Value.ToCharArray() ); } } } return result; }
// // Common utility code to get lengths correct for trimming // private static object GetUdt_LengthChecked( SmiEventSink_Default sink, ITypedGettersV3 getters, int ordinal, SmiMetaData metaData ) { object result; if (IsDBNull_Unchecked(sink, getters, ordinal)) { Type t = metaData.Type; Debug.Assert(t != null, "Unexpected null of udtType on GetUdt_LengthChecked!"); result = t.InvokeMember("Null", BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Static, null, null, new Object[]{}, CultureInfo.InvariantCulture); Debug.Assert(result != null); } else { // Note: do not need to copy getter stream, since it will not be used beyond // deserialization (valid lifetime of getters is limited). Stream s = new SmiGettersStream( sink, getters, ordinal, metaData ); result = SerializationHelperSql9.Deserialize( s, metaData.Type ); } return result; }
private static SqlXml GetSqlXml_Unchecked( SmiEventSink_Default sink, ITypedGettersV3 getters, int ordinal, SmiContext context ) { Debug.Assert( !IsDBNull_Unchecked( sink, getters, ordinal ) ); // allow context to be null so strongly-typed getters can use // this method without having to pass along the almost-never-used context as a parameter // Looking the context up like this will be slightly slower, but still correct behavior // since it's only used to get a scratch stream. if (null == context && InOutOfProcHelper.InProc) { context = SmiContextFactory.Instance.GetCurrentContext(); // In the future we need to push the context checking to a higher level } // Note: must make a copy of getter stream, since it will be used beyond // this method (valid lifetime of getters is limited). Stream s = new SmiGettersStream( sink, getters, ordinal, SmiMetaData.DefaultXml ); Stream copy = ValueUtilsSmi.CopyIntoNewSmiScratchStream( s, sink, context ); SqlXml result = new SqlXml( copy ); return result; }
private static SqlXml GetSqlXml_Unchecked(SmiEventSink_Default sink, ITypedGettersV3 getters, int ordinal) { Debug.Assert(!IsDBNull_Unchecked(sink, getters, ordinal)); // Note: must make a copy of getter stream, since it will be used beyond // this method (valid lifetime of getters is limited). Stream s = new SmiGettersStream(sink, getters, ordinal, SmiMetaData.DefaultXml); Stream copy = ValueUtilsSmi.CopyIntoNewSmiScratchStream(s, sink); SqlXml result = new SqlXml(copy); return result; }
private static object GetUdt_LengthChecked(SmiEventSink_Default sink, ITypedGettersV3 getters, int ordinal, SmiMetaData metaData) { if (IsDBNull_Unchecked(sink, getters, ordinal)) { return metaData.Type.InvokeMember("Null", BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Static, null, null, new object[0], CultureInfo.InvariantCulture); } Stream s = new SmiGettersStream(sink, getters, ordinal, metaData); return SerializationHelperSql9.Deserialize(s, metaData.Type); }
private static SqlXml GetSqlXml_Unchecked(SmiEventSink_Default sink, ITypedGettersV3 getters, int ordinal, SmiContext context) { if ((context == null) && InOutOfProcHelper.InProc) { context = SmiContextFactory.Instance.GetCurrentContext(); } Stream source = new SmiGettersStream(sink, getters, ordinal, SmiMetaData.DefaultXml); return new SqlXml(CopyIntoNewSmiScratchStream(source, sink, context)); }
internal static SqlChars GetSqlChars(SmiEventSink_Default sink, ITypedGettersV3 getters, int ordinal, SmiMetaData metaData, SmiContext context) { if (CanAccessGetterDirectly(metaData, ExtendedClrTypeCode.SqlChars)) { if (IsDBNull_Unchecked(sink, getters, ordinal)) { return SqlChars.Null; } if ((GetCharsLength_Unchecked(sink, getters, ordinal) < 0xfa0L) || !InOutOfProcHelper.InProc) { return new SqlChars(GetCharArray_Unchecked(sink, getters, ordinal)); } Stream source = new SmiGettersStream(sink, getters, ordinal, metaData); return new SqlChars(CopyIntoNewSmiScratchStreamChars(source, sink, context)); } if (SqlDbType.Xml == metaData.SqlDbType) { SqlXml xml = GetSqlXml_Unchecked(sink, getters, ordinal, null); if (xml.IsNull) { return SqlChars.Null; } return new SqlChars(xml.Value.ToCharArray()); } object obj2 = GetSqlValue(sink, getters, ordinal, metaData, null); if (obj2 == null) { throw ADP.InvalidCast(); } SqlString str = (SqlString) obj2; if (str.IsNull) { return SqlChars.Null; } return new SqlChars(str.Value.ToCharArray()); }
internal static SqlBytes GetSqlBytes(SmiEventSink_Default sink, ITypedGettersV3 getters, int ordinal, SmiMetaData metaData, SmiContext context) { if (CanAccessGetterDirectly(metaData, ExtendedClrTypeCode.SqlBytes)) { if (IsDBNull_Unchecked(sink, getters, ordinal)) { return SqlBytes.Null; } long num = GetBytesLength_Unchecked(sink, getters, ordinal); if ((0L <= num) && (num < 0x1f40L)) { return new SqlBytes(GetByteArray_Unchecked(sink, getters, ordinal)); } Stream source = new SmiGettersStream(sink, getters, ordinal, metaData); return new SqlBytes(CopyIntoNewSmiScratchStream(source, sink, context)); } object obj2 = GetSqlValue(sink, getters, ordinal, metaData, null); if (obj2 == null) { throw ADP.InvalidCast(); } SqlBinary binary = (SqlBinary) obj2; if (binary.IsNull) { return SqlBytes.Null; } return new SqlBytes(binary.Value); }