@@ -510,6 +510,7 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len)
510
510
char got_dsn = (ci -> dsn [0 ] != '\0' );
511
511
char encoded_conn_settings [LARGE_REGISTRY_LEN ];
512
512
UWORD hlen ;
513
+ BOOL abbrev = (len <= 400 );
513
514
514
515
/* fundamental info */
515
516
sprintf (connect_string , "%s=%s;DATABASE=%s;SERVER=%s;PORT=%s;UID=%s;PWD=%s" ,
@@ -524,8 +525,9 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len)
524
525
encode (ci -> conn_settings , encoded_conn_settings );
525
526
526
527
/* extra info */
527
- hlen = strlen (connect_string ),
528
- sprintf (& connect_string [hlen ],
528
+ hlen = strlen (connect_string );
529
+ if (!abbrev )
530
+ sprintf (& connect_string [hlen ],
529
531
";READONLY=%s;PROTOCOL=%s;FAKEOIDINDEX=%s;SHOWOIDCOLUMN=%s;ROWVERSIONING=%s;SHOWSYSTEMTABLES=%s;CONNSETTINGS=%s;FETCH=%d;SOCKET=%d;UNKNOWNSIZES=%d;MAXVARCHARSIZE=%d;MAXLONGVARCHARSIZE=%d;DEBUG=%d;COMMLOG=%d;OPTIMIZER=%d;KSQO=%d;USEDECLAREFETCH=%d;TEXTASLONGVARCHAR=%d;UNKNOWNSASLONGVARCHAR=%d;BOOLSASCHAR=%d;PARSE=%d;CANCELASFREESTMT=%d;EXTRASYSTABLEPREFIXES=%s" ,
530
532
ci -> onlyread ,
531
533
ci -> protocol ,
@@ -551,7 +553,7 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len)
551
553
ci -> drivers .cancel_as_freestmt ,
552
554
ci -> drivers .extra_systable_prefixes );
553
555
/* Abbrebiation is needed ? */
554
- if (strlen (connect_string ) >= len )
556
+ if (abbrev || strlen (connect_string ) >= len )
555
557
sprintf (& connect_string [hlen ],
556
558
";A0=%s;A1=%s;A2=%s;A3=%s;A4=%s;A5=%s;A6=%s;A7=%d;A8=%d;A9=%d;B0=%d;B1=%d;B2=%d;B3=%d;B4=%d;B5=%d;B6=%d;B7=%d;B8=%d;B9=%d;C0=%d;C1=%d;C2=%s" ,
557
559
ci -> onlyread ,
@@ -630,7 +632,10 @@ copyAttributes(ConnInfo *ci, const char *attribute, const char *value)
630
632
else if (stricmp (attribute , INI_DISALLOWPREMATURE ) == 0 || stricmp (attribute , "C3" ) == 0 )
631
633
{
632
634
ci -> disallow_premature = atoi (value );
633
- /* strcpy(ci->conn_settings, value); */
635
+ }
636
+ else if (stricmp (attribute , INI_UPDATABLECURSORS ) == 0 || stricmp (attribute , "C4" ) == 0 )
637
+ {
638
+ ci -> updatable_cursors = atoi (value );
634
639
}
635
640
636
641
mylog ("copyAttributes: DSN='%s',server='%s',dbase='%s',user='%s',passwd='%s',port='%s',onlyread='%s',protocol='%s',conn_settings='%s',disallow_premature=%d)\n" , ci -> dsn , ci -> server , ci -> database , ci -> username , ci -> password , ci -> port , ci -> onlyread , ci -> protocol , ci -> conn_settings , ci -> disallow_premature );
@@ -803,6 +808,12 @@ getDSNinfo(ConnInfo *ci, char overwrite)
803
808
ci -> disallow_premature = atoi (temp );
804
809
}
805
810
811
+ if (ci -> updatable_cursors == 0 || overwrite )
812
+ {
813
+ SQLGetPrivateProfileString (DSN , INI_UPDATABLECURSORS , "" , temp , sizeof (temp ), ODBC_INI );
814
+ ci -> updatable_cursors = atoi (temp );
815
+ }
816
+
806
817
/* Allow override of odbcinst.ini parameters here */
807
818
getCommonDefaults (DSN , ODBC_INI , ci );
808
819
@@ -916,6 +927,11 @@ writeDSNinfo(const ConnInfo *ci)
916
927
INI_DISALLOWPREMATURE ,
917
928
temp ,
918
929
ODBC_INI );
930
+ sprintf (temp , "%d" , ci -> updatable_cursors );
931
+ SQLWritePrivateProfileString (DSN ,
932
+ INI_UPDATABLECURSORS ,
933
+ temp ,
934
+ ODBC_INI );
919
935
}
920
936
921
937
0 commit comments