Thread: usage of option ByteaAsLongVarBinary?
Hi, first to say that I am quite new to the ODBC interface ... Now my question: I want the ODBC driver (Linux/unixODBC) to map an incoming SQL_LOGVARBINARY to BYTEA. Examining pgtypes.c I have seen that seems to be possible if the bytea_as_longvarbinary member of the connection structure is set. Now ... I am not sure how to set this. I have thought that this would be possible by setting "ByteaAsLongVarBinary=1" inside of the odbc.ini. But without luck. Once again I had a look at the sources - then I did not find any other way to set it than setting it via the specified Windows GUI. Since I do use Linux what is my way to set it? Do I have to go via the ODBC HDBC handle? Any examples for this? Thanks in advance! -- Heiko Nardmann (Dipl.-Ing. Technische Informatik) secunet Security Networks AG - Sicherheit in Netzwerken (www.secunet.de), Weidenauer Str. 223-225, D-57076 Siegen Tel. : +49 271 48950-13, Fax : +49 271 48950-50
Attachment
> am not sure how to set this. I have thought that this would be possible by > setting "ByteaAsLongVarBinary=1" inside of the odbc.ini. But without luck. Yes. This is the right way. Do you have it at the right place in odbc.ini? > Once again I had a look at the sources - then I did not find any other way to > set it than setting it via the specified Windows GUI. Since I do use Linux I see this way (function calls): PGAPI_DriverConnect dconn_get_connect_attributes dconn_get_attributes copyAttributes > what is my way to set it? Do I have to go via the ODBC HDBC handle? Any > examples for this? There is no such way. It could be useful to try enable the mylog output (Debug = 1 in odbc.ini). The mylog is placed in /tmp/mylog_*.log. BTW could you send us the odbc.ini to check it? Regards, Luf
Am Dienstag, 1. August 2006 12:05 schrieb Ludek Finstrle: > > am not sure how to set this. I have thought that this would be possible > > by setting "ByteaAsLongVarBinary=1" inside of the odbc.ini. But without > > luck. > > Yes. This is the right way. Do you have it at the right place in > odbc.ini? > Not sure about it; here my odbc.ini: [ODBC] Trace = 1 TraceFile = /tmp/unixodbc.trace.log debug=1 debugfile=/tmp/unixodbc.debug.log [test-db] Description = test-db driver=/usr/lib/unixODBC/libodbcpsql.so setup=/usr/lib/unixODBC/libodbcpsqlS.so trace=1 tracefile=/tmp/unixodbc.trace.log debug=1 debugfile=/tmp/unixodbc.debug.log commlog=1 database=test-db Servername=1.2.3.4 Port=5432 Username= ReadOnly=0 ByteaAsLongVarBinary=1 > > Once again I had a look at the sources - then I did not find any other > > way to set it than setting it via the specified Windows GUI. Since I do > > use Linux > > I see this way (function calls): > PGAPI_DriverConnect > dconn_get_connect_attributes > dconn_get_attributes > copyAttributes > So do I have to use SQLDriverConnect() instead of SQLConnect() to have PGAPI_DriverConnect() to be used? Thanks for your help. > > what is my way to set it? Do I have to go via the ODBC HDBC handle? Any > > examples for this? > > There is no such way. > > It could be useful to try enable the mylog output (Debug = 1 in odbc.ini). > The mylog is placed in /tmp/mylog_*.log. > > BTW could you send us the odbc.ini to check it? > > Regards, > > Luf -- Heiko Nardmann (Dipl.-Ing. Technische Informatik) secunet Security Networks AG - Sicherheit in Netzwerken (www.secunet.de), Weidenauer Str. 223-225, D-57076 Siegen Tel. : +49 271 48950-13, Fax : +49 271 48950-50
Attachment
Am Dienstag, 1. August 2006 09:16 schrieb Nardmann, Heiko: > Hi, > > first to say that I am quite new to the ODBC interface ... > > Now my question: > > I want the ODBC driver (Linux/unixODBC) to map an incoming SQL_LOGVARBINARY > to BYTEA. Examining pgtypes.c I have seen that seems to be possible if the > bytea_as_longvarbinary member of the connection structure is set. Now ... I > am not sure how to set this. I have thought that this would be possible by > setting "ByteaAsLongVarBinary=1" inside of the odbc.ini. But without luck. > Once again I had a look at the sources - then I did not find any other way > to set it than setting it via the specified Windows GUI. Since I do use > Linux what is my way to set it? Do I have to go via the ODBC HDBC handle? > Any examples for this? > > Thanks in advance! One additional question: I saw that bytea_as_longvarbinary is initialized to '-1' in connection.c inside of CC_conninfo_init(). Does that mean that by default this option is activated? -- Heiko Nardmann (Dipl.-Ing. Technische Informatik) secunet Security Networks AG - Sicherheit in Netzwerken (www.secunet.de), Weidenauer Str. 223-225, D-57076 Siegen Tel. : +49 271 48950-13, Fax : +49 271 48950-50
Attachment
Tue, Aug 01, 2006 at 12:33:43PM +0200, Nardmann, Heiko wrote: > Am Dienstag, 1. August 2006 12:05 schrieb Ludek Finstrle: > > > am not sure how to set this. I have thought that this would be possible > > > by setting "ByteaAsLongVarBinary=1" inside of the odbc.ini. But without > > > luck. > > > > Yes. This is the right way. Do you have it at the right place in > > odbc.ini? > > Not sure about it; here my odbc.ini: > > [ODBC] > Trace = 1 > TraceFile = /tmp/unixodbc.trace.log > debug=1 > debugfile=/tmp/unixodbc.debug.log > > [test-db] > Description = test-db > driver=/usr/lib/unixODBC/libodbcpsql.so > setup=/usr/lib/unixODBC/libodbcpsqlS.so > trace=1 > tracefile=/tmp/unixodbc.trace.log > debug=1 > debugfile=/tmp/unixodbc.debug.log debugfile isn't correct. trace is unixodbc option debug is psqlodbc optin. > commlog=1 > database=test-db > Servername=1.2.3.4 > Port=5432 > Username= > ReadOnly=0 > ByteaAsLongVarBinary=1 It seems ok. > > > Once again I had a look at the sources - then I did not find any other > > > way to set it than setting it via the specified Windows GUI. Since I do > > > use Linux > > > > I see this way (function calls): > > PGAPI_DriverConnect > > dconn_get_connect_attributes > > dconn_get_attributes > > copyAttributes > > > > So do I have to use SQLDriverConnect() instead of SQLConnect() to have > PGAPI_DriverConnect() to be used? No I see the way in PGAPI_Connect too: PGAPI_Connect getDSNinfo There is: if (ci->bytea_as_longvarbinary < 0 || overwrite) { SQLGetPrivateProfileString(DSN, INI_BYTEAASLONGVARBINARY, "", temp, sizeof(temp), ODBC_INI); if (temp[0]) ci->bytea_as_longvarbinary = atoi(temp); } How are you connecting? Please send us the row with SQLConnect and the DSN value. Something like: SQLConnect(hdbc,dsn,user,pass); dsn = 'mydsn'; or SQLConnect(hdbc,'mydsn',user,pass); Are you able to use gdb to trace down the getDSNinfo? Regards, Luf