@@ -22,6 +22,7 @@ import (
22
22
"github.com/SAP/go-hdb/driver/dial"
23
23
p "github.com/SAP/go-hdb/driver/internal/protocol"
24
24
"github.com/SAP/go-hdb/driver/internal/protocol/auth"
25
+ "github.com/SAP/go-hdb/driver/internal/protocol/encoding"
25
26
hdbreflect "github.com/SAP/go-hdb/driver/internal/reflect"
26
27
"github.com/SAP/go-hdb/driver/unicode/cesu8"
27
28
"golang.org/x/text/transform"
@@ -195,10 +196,10 @@ type conn struct {
195
196
196
197
serverOptions * p.ConnectOptions
197
198
hdbVersion * Version
198
- fieldTypeCtx * p.FieldTypeCtx
199
199
200
- pr * p.Reader
201
- pw * p.Writer
200
+ dec * encoding.Decoder
201
+ pr * p.Reader
202
+ pw * p.Writer
202
203
}
203
204
204
205
// isAuthError returns true in case of X509 certificate validation errrors or hdb authentication errors, else otherwise.
@@ -301,14 +302,18 @@ func newConn(ctx context.Context, host string, metrics *metrics, attrs *connAttr
301
302
302
303
protTrace := protTrace .Load ()
303
304
305
+ enc := encoding .NewEncoder (rw .Writer , attrs ._cesu8Encoder )
306
+ dec := encoding .NewDecoder (rw .Reader , attrs ._cesu8Decoder )
307
+
304
308
c := & conn {
305
309
attrs : attrs ,
306
310
collector : collector ,
307
311
dbConn : dbConn ,
308
312
sqlTrace : sqlTrace .Load (),
309
313
logger : logger ,
310
- pw : p .NewWriter (rw .Writer , protTrace , logger , attrs ._cesu8Encoder , attrs ._sessionVariables ), // write upstream
311
- pr : p .NewDBReader (rw .Reader , protTrace , logger , attrs ._cesu8Decoder ), // read downstream
314
+ dec : dec ,
315
+ pw : p .NewWriter (rw .Writer , enc , protTrace , logger , attrs ._cesu8Encoder , attrs ._sessionVariables ), // write upstream
316
+ pr : p .NewDBReader (dec , protTrace , logger ), // read downstream
312
317
sessionID : defaultSessionID ,
313
318
}
314
319
@@ -367,7 +372,8 @@ func (c *conn) initSession(ctx context.Context, attrs *connAttrs, authHnd *p.Aut
367
372
}
368
373
369
374
c .hdbVersion = parseVersion (c .versionString ())
370
- c .fieldTypeCtx = p .NewFieldTypeCtx (c .serverOptions .DataFormatVersion2OrZero (), attrs ._emptyDateAsNull )
375
+ c .dec .SetAlphanumDfv1 (c .serverOptions .DataFormatVersion2OrZero () == p .DfvLevel1 )
376
+ c .dec .SetEmptyDateAsNull (attrs ._emptyDateAsNull )
371
377
372
378
if attrs ._defaultSchema != "" {
373
379
if _ , err := c .ExecContext (ctx , strings .Join ([]string {setDefaultSchema , Identifier (attrs ._defaultSchema ).String ()}, " " ), nil ); err != nil {
@@ -812,7 +818,7 @@ func (c *conn) queryDirect(ctx context.Context, query string, commit bool) (driv
812
818
}
813
819
814
820
qr := & queryResult {conn : c }
815
- meta := & p.ResultMetadata {FieldTypeCtx : c . fieldTypeCtx }
821
+ meta := & p.ResultMetadata {}
816
822
resSet := & p.Resultset {}
817
823
818
824
if err := c .pr .IterateParts (ctx , func (kind p.PartKind , attrs p.PartAttributes , read func (part p.Part )) {
@@ -869,8 +875,8 @@ func (c *conn) prepare(ctx context.Context, query string) (*prepareResult, error
869
875
}
870
876
871
877
pr := & prepareResult {}
872
- resMeta := & p.ResultMetadata {FieldTypeCtx : c . fieldTypeCtx }
873
- prmMeta := & p.ParameterMetadata {FieldTypeCtx : c . fieldTypeCtx }
878
+ resMeta := & p.ResultMetadata {}
879
+ prmMeta := & p.ParameterMetadata {}
874
880
875
881
if err := c .pr .IterateParts (ctx , func (kind p.PartKind , attrs p.PartAttributes , read func (part p.Part )) {
876
882
switch kind {
@@ -986,7 +992,7 @@ func (c *conn) execCall(ctx context.Context, outputFields []*p.ParameterField) (
986
992
rows := & p.RowsAffected {}
987
993
var ids []p.LocatorID
988
994
outPrms := & p.OutputParameters {}
989
- meta := & p.ResultMetadata {FieldTypeCtx : c . fieldTypeCtx }
995
+ meta := & p.ResultMetadata {}
990
996
resSet := & p.Resultset {}
991
997
lobReply := & p.WriteLobReply {}
992
998
var numRow int64
0 commit comments