Hi,

I have a patch for Glorp(DBX) PostgreSQL to support the newer bytea hex format 
(see file:///usr/local/pgsql/share/doc/html/datatype-binary.html#AEN5037). I 
can't write to the repository, so here it is:

PostgreSQLPlatform>>#convertSQLStringToByteArray: aString for: aType
        aString isNil ifTrue: [ ^ nil ].
        ^ (aString beginsWith: '\x')
                ifTrue: [ self convertHexSQLStringToByteArray: aString ]
                ifFalse: [ self convertEscapeSQLStringToByteArray: aString ]

PostgreSQLPlatform>>#convertEscapeSQLStringToByteArray: aString
        | aStream str | 
        aStream := (ByteArray new: aString size // 4) writeStream.
        str := aString readStream.
        [str atEnd] whileFalse: [ |nextChar|
                nextChar := str next.
                aStream nextPut: (nextChar = $\
                                                                ifTrue: [str 
peek = $\
                                                                                
        ifTrue: [str next asInteger]
                                                                                
        ifFalse: [Number readFrom: (str next: 3) base: 8]]
                                                                ifFalse: 
[nextChar asInteger])
        ].
        aStream close.
        ^aStream contents

PostgreSQLPlatform>>#convertHexSQLStringToByteArray: aString
        ^ ByteArray
                new: (aString size // 2) - 1
                streamContents: [ :out | | in |
                        (in := aString readStream) skip: 2.
                        [ in atEnd ] whileFalse: [ 
                                out nextPut: (Number readFrom: (in next: 2) 
base: 16) ] ]

#convertEscapeSQLStringToByteArray: is the old code, unmodified; 
#convertHexSQLStringToByteArray: is new.
This might be of use upstream as well, I don't really know.

If it would help, I could save this as an MC package somewhere.

Regards,

Sven


Reply via email to