[python-sybase] Error in ct_options

Marcos Sánchez Provencio rapto at arrakis.es
24 Jan 2003 12:32:48 +0100


First, thank you for the module in general and for the fast answer in
particular.

I suppose you meant 
-            if status != CS_SUCCEED:
-                self._raise_error(Error, 'ct_options')
+           self.auto_commit = (status != CS_SUCCEED)
                                         ^^^^^^

Well, now it connects alright, but I don't get auto-commit off, do I? I
do want standard dbapi behavior.

Would it be ok to just execute 
c.execute('set implicit_transactions on') on the connection?


El vie, 24-01-2003 a las 02:16, Dave Cole escribió: 
> > I am getting Sybase.Error: ct_options when connecting to MSSQL or
> > Sybase. If I comment out the CS_OPT_CHAINXACTS line, it seems to
> > work for simple selects. tsql from freetds, today's version works
> > fine, so I suppose my freetds.conf file is right. What is the next
> > place to look?
> 
> The CS_OPT_CHAINXACTS option is there to conform to the DB-API
> specification
> 
>         http://www.python.org/topics/database/DatabaseAPI-2.0.html
> 
>     Connection Objects
>       commit()
> 
>       Commit any pending transaction to the database. Note that if the
>       database supports an auto-commit feature, this must be initially
>       off. An interface method may be provided to turn it back on.
> 
>       Database modules that do not support transactions should
>       implement this method with void functionality.
> 
> I probably should silently ignore problems setting this option...
> 
> > I get the following when connecting to MSSQL2000:
> > 
> > marcos@cynar:~/sybase-0.36pre3$ python -c "import
> > Sybase;Sybase._ctx.debug = 1;Sybase.connect('cazalla','sa','xxx')"
> > ct_con_alloc(ctx0, &conn) -> CS_SUCCEED, conn0
> > ct_con_props(conn0, CS_SET, CS_USERNAME, "sa", CS_NULLTERM, NULL) ->
> > CS_SUCCEED
> > ct_con_props(conn0, CS_SET, CS_PASSWORD, "xxx", CS_NULLTERM, NULL) ->
> > CS_SUCCEED
> > servermsg_cb
> > servermsg_cb
> > ct_connect(conn0, "cazalla", CS_NULLTERM) -> CS_SUCCEED
> > ct_options(conn0, CS_SET, CS_OPT_CHAINXACTS, 1, CS_UNUSED, NULL) ->
> > CS_FAIL
> > ct_cancel(conn0, NULL, CS_CANCEL_ALL) -> CS_SUCCEED
> > Traceback (most recent call last):
> >   File "<string>", line 1, in ?
> >   File "Sybase.py", line 768, in connect
> >     strip, auto_commit, delay_connect, locking)
> >   File "Sybase.py", line 608, in __init__
> >     self.connect()
> >   File "Sybase.py", line 633, in connect
> >     self._raise_error(Error, 'ct_options')
> >   File "Sybase.py", line 621, in _raise_error
> >     raise exc(text)
> > Sybase.Error: ct_options
> > ct_con_props(conn0, CS_GET, CS_CON_STATUS, &value, CS_UNUSED, NULL) ->
> > CS_SUCCEED, CS_CONSTAT_CONNECTED
> > ct_close(conn0, CS_OPT_STATS_IO) -> CS_SUCCEED
> > ct_con_drop(conn0) -> CS_SUCCEED
> 
> Can you try this patch (to 0.36pre3) for me (contains changes for
> Valerie R. Coffman as well)?
> 
> - Dave
> 
> -- Sybase.py	23 Jan 2003 10:11:02 -0000	1.56
> +++ Sybase.py	24 Jan 2003 01:13:55 -0000
> 
> @@ -158,6 +158,8 @@
>          fmt.count = count
>          if fmt.datatype == CS_VARBINARY_TYPE:
>              fmt.datatype = CS_BINARY_TYPE
> +        if fmt.maxlngth > 65536:
> +            fmx.maxlength = 65536
>          status, buf = cmd.ct_bind(i + 1, fmt)
>          if status != CS_SUCCEED:
>              raise Error('ct_bind')
> @@ -629,8 +631,7 @@
>                  self._raise_error(Error, 'ct_connect')
>              self._is_connected = 1
>              status = conn.ct_options(CS_SET, CS_OPT_CHAINXACTS, not self.auto_commit)
> -            if status != CS_SUCCEED:
> -                self._raise_error(Error, 'ct_options')
> +	    self.auto_commit = (status != SUCCEED)
>          finally:
>              self._unlock()
>          if self.database:


-- 

Marcos Sánchez Provencio <rapto@arrakis.es>