So I'm working a bit on this.....

> If base64 encoding within the bind_processor() can fix
> MS-SQL for now, I'd say that would be the approach for the time
> being.

turns out base64 encoding is problematic: it requires a corresponding decode
for the data retrieval, which makes it effectively useless for legacy
databases with extant values stored.

I think an out-only encoding as follows would be all that's needed for now:


class MSBinary(sqltypes.Binary):
    def bind_processor(self, dialect):
        def process(value):
            return '0x' + value.encode('hex')
        return process

...the issue is that the emitted value is getting quoted somewhere after the
type conversion:

     INSERT INTO binary_table VALUES(...., '0x6df02da', ...)

but MSSQL's parser can recognize the '0x' prefix and wants the value
unquoted:

     INSERT INTO binary_table VALUES(...., 0x6df02da, ...)

So how do I get the Dialect to drop the quoting behavior for the return from
bind_processor() ?



> I guess you've never gotten testtypes.py BinaryTest to run with MS-SQL?

Nope. I run so far only with pymssql, which has never had a chance of
passing with binary data.

> I would definitely want some test coverage in test/dialect/mssql.py for
this, I'm pretty shocked nobody has had this problem before.

If this works, the regular BinaryTest unit test should pass. There's a few
other basic tests in typetest.py that still fail for MSSQL. Someday in a
dream world where I have time to look at them and fix them, I will.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to