1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 
5 
6 
7 //------------------------------------------------------------------------------
8 
9 using System;
10 using System.Data.SqlTypes;
11 
12 namespace Microsoft.SqlServer.Server
13 {
14     // interface for strongly-typed value setters
15     internal interface ITypedSettersV3
16     {
17         // By value setters (data copy across the interface boundary implied)
18         //  All setters are valid for SqlDbType.Variant
19 
20         // SetVariantMetaData is used to set the precise type of data just before pushing
21         //  data into a variant type via one of the other setters. It
22         //  is only valid to set metadata with a SqlDbType that associated with the
23         //  data setter that will be called.
24         //  Since LOBs, Udt's and fixed-length types are not currently stored in a variant,
25         //  the following pairs are the only setters/sqldbtypes that need this call:
26         //      NVarChar/VarChar + SetString (needed only for non-global collation, i.e. SqlString)
27         //      Money/SmallMoney + SetInt64
SetVariantMetaData(SmiEventSink sink, int ordinal, SmiMetaData metaData)28         void SetVariantMetaData(SmiEventSink sink, int ordinal, SmiMetaData metaData);
29 
30         // Set value to null
31         //  valid for all types
SetDBNull(SmiEventSink sink, int ordinal)32         void SetDBNull(SmiEventSink sink, int ordinal);
33 
34         //  valid for SqlDbType.Bit
SetBoolean(SmiEventSink sink, int ordinal, Boolean value)35         void SetBoolean(SmiEventSink sink, int ordinal, Boolean value);
36 
37         //  valid for SqlDbType.TinyInt
SetByte(SmiEventSink sink, int ordinal, Byte value)38         void SetByte(SmiEventSink sink, int ordinal, Byte value);
39 
40         // Semantics for SetBytes are to modify existing value, not overwrite
41         //  Use in combination with SetLength to ensure overwriting when necessary
42         // valid for SqlDbTypes: Binary, VarBinary, Image, Udt, Xml
43         //      (VarBinary assumed for variants)
SetBytes(SmiEventSink sink, int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length)44         int SetBytes(SmiEventSink sink, int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length);
SetBytesLength(SmiEventSink sink, int ordinal, long length)45         void SetBytesLength(SmiEventSink sink, int ordinal, long length);
46 
47         // Semantics for SetChars are to modify existing value, not overwrite
48         //  Use in combination with SetLength to ensure overwriting when necessary
49         // valid for character types: Char, VarChar, Text, NChar, NVarChar, NText
50         //      (NVarChar and global clr collation assumed for variants)
SetChars(SmiEventSink sink, int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length)51         int SetChars(SmiEventSink sink, int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length);
SetCharsLength(SmiEventSink sink, int ordinal, long length)52         void SetCharsLength(SmiEventSink sink, int ordinal, long length);
53 
54         // valid for character types: Char, VarChar, Text, NChar, NVarChar, NText
SetString(SmiEventSink sink, int ordinal, string value, int offset, int length)55         void SetString(SmiEventSink sink, int ordinal, string value, int offset, int length);
56 
57         // valid for SqlDbType.SmallInt
SetInt16(SmiEventSink sink, int ordinal, Int16 value)58         void SetInt16(SmiEventSink sink, int ordinal, Int16 value);
59 
60         // valid for SqlDbType.Int
SetInt32(SmiEventSink sink, int ordinal, Int32 value)61         void SetInt32(SmiEventSink sink, int ordinal, Int32 value);
62 
63         // valid for SqlDbType.BigInt, SqlDbType.Money, SqlDbType.SmallMoney
SetInt64(SmiEventSink sink, int ordinal, Int64 value)64         void SetInt64(SmiEventSink sink, int ordinal, Int64 value);
65 
66         // valid for SqlDbType.Real
SetSingle(SmiEventSink sink, int ordinal, Single value)67         void SetSingle(SmiEventSink sink, int ordinal, Single value);
68 
69         // valid for SqlDbType.Float
SetDouble(SmiEventSink sink, int ordinal, Double value)70         void SetDouble(SmiEventSink sink, int ordinal, Double value);
71 
72         // valid for SqlDbType.Numeric (uses SqlDecimal since Decimal cannot hold full range)
SetSqlDecimal(SmiEventSink sink, int ordinal, SqlDecimal value)73         void SetSqlDecimal(SmiEventSink sink, int ordinal, SqlDecimal value);
74 
75         // valid for DateTime & SmallDateTime
SetDateTime(SmiEventSink sink, int ordinal, DateTime value)76         void SetDateTime(SmiEventSink sink, int ordinal, DateTime value);
77 
78         // valid for UniqueIdentifier
SetGuid(SmiEventSink sink, int ordinal, Guid value)79         void SetGuid(SmiEventSink sink, int ordinal, Guid value);
80     }
81 }
82 
83