@@ -454,52 +454,14 @@ func (conn *Connection) OpenWithContext(ctx context.Context) error {
454
454
}
455
455
}
456
456
457
- tracer .Print ("TCP Negotiation" )
458
- conn .tcpNego , err = newTCPNego (conn .session )
459
- if err != nil {
460
- return err
461
- }
462
- tracer .Print ("Server Charset: " , conn .tcpNego .ServerCharset )
463
- tracer .Print ("Server National Charset: " , conn .tcpNego .ServernCharset )
464
- // create string converter object
465
- conn .sStrConv = converters .NewStringConverter (conn .tcpNego .ServerCharset )
466
- if conn .sStrConv == nil {
467
- return fmt .Errorf ("the server use charset with id: %d which is not supported by the driver" , conn .tcpNego .ServerCharset )
468
- }
469
- conn .session .StrConv = conn .sStrConv
470
- conn .nStrConv = converters .NewStringConverter (conn .tcpNego .ServernCharset )
471
- if conn .nStrConv == nil {
472
- return fmt .Errorf ("the server use ncharset with id: %d which is not supported by the driver" , conn .tcpNego .ServernCharset )
473
- }
474
- conn .tcpNego .ServerFlags |= 2
475
- tracer .Print ("Data Type Negotiation" )
476
- conn .dataNego = buildTypeNego (conn .tcpNego , conn .session )
477
- err = conn .dataNego .write (conn .session )
457
+ err = conn .protocolNegotiation ()
478
458
if err != nil {
479
459
return err
480
460
}
481
- err = conn .dataNego . read ( conn . session )
461
+ err = conn .dataTypeNegotiation ( )
482
462
if err != nil {
483
463
return err
484
464
}
485
- conn .session .TTCVersion = conn .dataNego .CompileTimeCaps [7 ]
486
- conn .session .UseBigScn = conn .tcpNego .ServerCompileTimeCaps [7 ] >= 8
487
- if conn .tcpNego .ServerCompileTimeCaps [7 ] < conn .session .TTCVersion {
488
- conn .session .TTCVersion = conn .tcpNego .ServerCompileTimeCaps [7 ]
489
- }
490
- tracer .Print ("TTC Version: " , conn .session .TTCVersion )
491
- if len (conn .tcpNego .ServerRuntimeCaps ) > 6 && conn .tcpNego .ServerRuntimeCaps [6 ]& 4 == 4 {
492
- conn .maxLen .varchar = 0x7FFF
493
- conn .maxLen .nvarchar = 0x7FFF
494
- conn .maxLen .raw = 0x7FFF
495
- } else {
496
- conn .maxLen .varchar = 0xFA0
497
- conn .maxLen .nvarchar = 0xFA0
498
- conn .maxLen .raw = 0xFA0
499
- }
500
- //this.m_b32kTypeSupported = this.m_dtyNeg.m_b32kTypeSupported;
501
- //this.m_bSupportSessionStateOps = this.m_dtyNeg.m_bSupportSessionStateOps;
502
- //this.m_marshallingEngine.m_bServerUsingBigSCN = this.m_serverCompileTimeCapabilities[7] >= (byte) 8;
503
465
//if len(conn.connOption.UserID) > 0 && len(conn.conStr.password) > 0 {
504
466
//
505
467
//} else {
@@ -703,6 +665,19 @@ func (conn *Connection) doAuth() error {
703
665
return err
704
666
}
705
667
}
668
+ //case 27:
669
+ // this.ProcessImplicitResultSet(ref implicitRSList);
670
+ // continue;
671
+ case 28 :
672
+ err = conn .protocolNegotiation ()
673
+ if err != nil {
674
+ return err
675
+ }
676
+ err = conn .dataTypeNegotiation ()
677
+ if err != nil {
678
+
679
+ return err
680
+ }
706
681
default :
707
682
return errors .New (fmt .Sprintf ("message code error: received code %d" , msg ))
708
683
}
@@ -713,6 +688,63 @@ func (conn *Connection) doAuth() error {
713
688
return nil
714
689
}
715
690
691
+ func (conn * Connection ) dataTypeNegotiation () error {
692
+ tracer := conn .connOption .Tracer
693
+ var err error
694
+ tracer .Print ("Data Type Negotiation" )
695
+ conn .dataNego = buildTypeNego (conn .tcpNego , conn .session )
696
+ err = conn .dataNego .write (conn .session )
697
+ if err != nil {
698
+ return err
699
+ }
700
+ err = conn .dataNego .read (conn .session )
701
+ if err != nil {
702
+ return err
703
+ }
704
+ conn .session .TTCVersion = conn .dataNego .CompileTimeCaps [7 ]
705
+ conn .session .UseBigScn = conn .tcpNego .ServerCompileTimeCaps [7 ] >= 8
706
+ if conn .tcpNego .ServerCompileTimeCaps [7 ] < conn .session .TTCVersion {
707
+ conn .session .TTCVersion = conn .tcpNego .ServerCompileTimeCaps [7 ]
708
+ }
709
+ tracer .Print ("TTC Version: " , conn .session .TTCVersion )
710
+ if len (conn .tcpNego .ServerRuntimeCaps ) > 6 && conn .tcpNego .ServerRuntimeCaps [6 ]& 4 == 4 {
711
+ conn .maxLen .varchar = 0x7FFF
712
+ conn .maxLen .nvarchar = 0x7FFF
713
+ conn .maxLen .raw = 0x7FFF
714
+ } else {
715
+ conn .maxLen .varchar = 0xFA0
716
+ conn .maxLen .nvarchar = 0xFA0
717
+ conn .maxLen .raw = 0xFA0
718
+ }
719
+ return nil
720
+ //this.m_b32kTypeSupported = this.m_dtyNeg.m_b32kTypeSupported;
721
+ //this.m_bSupportSessionStateOps = this.m_dtyNeg.m_bSupportSessionStateOps;
722
+ //this.m_marshallingEngine.m_bServerUsingBigSCN = this.m_serverCompileTimeCapabilities[7] >= (byte) 8;
723
+ }
724
+ func (conn * Connection ) protocolNegotiation () error {
725
+ tracer := conn .connOption .Tracer
726
+ var err error
727
+ tracer .Print ("TCP Negotiation" )
728
+ conn .tcpNego , err = newTCPNego (conn .session )
729
+ if err != nil {
730
+ return err
731
+ }
732
+ tracer .Print ("Server Charset: " , conn .tcpNego .ServerCharset )
733
+ tracer .Print ("Server National Charset: " , conn .tcpNego .ServernCharset )
734
+ // create string converter object
735
+ conn .sStrConv = converters .NewStringConverter (conn .tcpNego .ServerCharset )
736
+ if conn .sStrConv == nil {
737
+ return fmt .Errorf ("the server use charset with id: %d which is not supported by the driver" , conn .tcpNego .ServerCharset )
738
+ }
739
+ conn .session .StrConv = conn .sStrConv
740
+ conn .nStrConv = converters .NewStringConverter (conn .tcpNego .ServernCharset )
741
+ if conn .nStrConv == nil {
742
+ return fmt .Errorf ("the server use ncharset with id: %d which is not supported by the driver" , conn .tcpNego .ServernCharset )
743
+ }
744
+ conn .tcpNego .ServerFlags |= 2
745
+ return nil
746
+ }
747
+
716
748
// loadNLSData get nls data for v2
717
749
func (conn * Connection ) loadNLSData () error {
718
750
_ , err := conn .session .GetInt (2 , true , true )
0 commit comments