World: r3wp
[MySQL]
older newer | first last |
Pekr 9-Jan-2006 [505] | so, if you don't confirm there were changes in low-level protocol handling (reading, sending, flushing etc. code), then I can adapt the code to automatically distinguish for old/new auth scheme and respond accordingly. That could be some intermediate version for ppl to use ... |
Dockimbel 10-Jan-2006 [506] | My old MySQL code is inpired by mm_mysql driver (now obsolete). The driver source code in C# you're pointing too is inspired by later evolutions of the mm_mysql driver. |
Pekr 10-Jan-2006 [507x2] | so what is your opinion on the stack? |
I think, that with "my" latest version, I now only need to distinguish authentication mode ... and to call scramble-long accordingly .... | |
Dockimbel 10-Jan-2006 [509] | MySQL server protocol has changed since 4.1.0 (with a big evolution starting from 4.1.1) and is not compatible with the older protocol. Strangely, server v5 allow clients to connect with the older (pre-4.1) protocol providing the good flags...(that's odd). Need more investigation to see if the old driver can still be used reliably with v5. |
Pekr 10-Jan-2006 [510x3] | maybe better as a refinement of scramble itself ... |
that is what I wanted to ask - did it really change? | |
I thought there is v9 and v10 protocols, and that only change was for auth. scheme ... | |
Dockimbel 10-Jan-2006 [513x2] | From 4.1.1, there's a lot of changes in the protocol, mainly a lot of new fields. |
The protocol number hasn't been incremented, the server and client code in libmysql is messy... | |
Pekr 10-Jan-2006 [515x3] | so this is not accurate? http://www.redferni.uklinux.net/mysql/MySQL-Protocol.html |
it seems to me as proper description of all communication phases ... | |
well - so why it works so far for me? | |
Dockimbel 10-Jan-2006 [518] | yes it is, AFAICT. But it's protocol 4.1.1+, not the old one that is implemented in my driver. |
Pekr 10-Jan-2006 [519x3] | aha, so actually what I did is that I extended parser for greetings phase, and also updated some locals table, watching carefully where such items are used - so far so good ... |
I would be able to write it according to specs imo according to above protocol, but - I don't understand rebol port model, so :-( | |
and also - I would fire all old scrambler :-) but then old pre 4.11 users would be at ends :-) | |
Dockimbel 10-Jan-2006 [522] | The server has still the support code for all protocol versions. That's why the old code is working, but according to the flags, (especially protocol_41), it should have rejected your connection. That's why I found it odd that your code was working. Anyway, let try to use this to make it work with the older code. |
Pekr 10-Jan-2006 [523] | or do you think that checksum/secure could be used even for older mysql versions? I wonder if their scheme used sha1 in old days? |
Dockimbel 10-Jan-2006 [524] | no, it wasn't 'sha1, it was a "poor man" hashing method. |
Pekr 10-Jan-2006 [525] | I think I know why ... maybe :-) ..... simply put, I don't send protocol_41 back after the greetings phase ... |
Dockimbel 10-Jan-2006 [526] | Yes, I guess that's the trigger. |
Pekr 10-Jan-2006 [527x2] | hmm, I will try to change that here :-) |
latest version: http://www.rebol.cz/mysql/mysql-protocol-new.r | |
Dockimbel 10-Jan-2006 [529x2] | Ok, I'll make some changes to your code to make it work properly with 3.x and 4.1.x+ versions, then I'll launch my unit tests and see if it is ok. |
Your code doesn't deal with empty passwords, I'll fix that. | |
Pekr 10-Jan-2006 [531] | I know ... thanks ....!!! |
Dockimbel 10-Jan-2006 [532x4] | New My |
New MySQL driver version 1.0.0 supporting server v4.1.1+ : http://softinnov.org/tmp/mysql-protocol.r | |
This is a beta release, please report here any bugs. | |
This driver has not been tested with server version 3.x. | |
Dockimbel 11-Jan-2006 [536] | Softinnov.org was down for a couple of hours for server PSU replacement. The download link works now again. |
Coccinelle 12-Jan-2006 [537] | Dock, if you publish a new version of mysql-protocol.r, it's time to make the correction of the bug in the init function, the longlong conversion and in the data reading initialization. |
Pekr 12-Jan-2006 [538x3] | what bugs? |
have you any fixes? | |
what is wrong with init, longlong conversion and in data reading initialisation in particular? | |
Coccinelle 12-Jan-2006 [541] | The init function fails with this for eaxample : open join mysql://user:[password-:-my-:-super-:-server]/my-db? "select * from my-table" or something like that I don't remember |
Pekr 12-Jan-2006 [542x2] | I would expect that - why is your db query part of opening sequence? |
with read, it would make sense ... | |
Coccinelle 12-Jan-2006 [544] | Yes perhaps, it fails also with read |
Pekr 12-Jan-2006 [545] | I am of course for fixing all possible bugs, but just now simply everything seems to work, we are able to connect to new dbs, that was main point ... |
Coccinelle 12-Jan-2006 [546x3] | Here is the correction of the init function : ;------ Public interface ------ init: func [port [port!] spec /local scheme args][ ; either args: find spec #"?" [ ; removed ; spec: sys-copy/part spec args ; removed ; fast-query: dehex sys-copy next args ; removed ; ][ ; removed ; fast-query: none ; removed ; ] ; removed if url? spec [net-utils/url-parser/parse-url port spec] scheme: port/scheme port/url: spec if none? port/host [ net-error reform ["No network server for" scheme "is specified"] ] if none? port/port-id [ net-error reform ["No port address for" scheme "is specified"] ] either all [port/target args: find port/target #"?"] [ ; added port/target: sys-copy/part port/target args ; added fast-query: dehex sys-copy next args ; added ][ ; added fast-query: none ; added ] ; added if none? port/target [ net-error reform ["No database name for" scheme "is specified"] ] if none? port/user [port/user: make string! 0] if none? port/pass [port/pass: make string! 0] if port/pass = "?" [port/pass: ask/hide "Password: "] ] |
For the lonlong conversion, the conversion model is initialized to none. It should be initialized to integer like this : conv-model: [ decimal [to decimal!] tiny [to integer!] short [to integer!] long [to integer!] float [to decimal!] double none null none timestamp none ; longlong none ; Removed longlong [to integer!] ; Added int24 [to integer!] date [to date!] time [to time!] datetime [to date!] year [to integer!] newdate none enum none set none tiny-blob none medium-blob none long-blob none blob none var-string none string none ] | |
And the last bug is that the "byte" word is not initialized to none and this cause a problem but I don't remember the effect : ;------ Data reading ------ ; b0: b1: b2: b3: int: int24: long: string: field: len: none ; Removed b0: b1: b2: b3: int: int24: long: byte: string: field: len: none ; Added | |
Pekr 12-Jan-2006 [549x3] | nice - so, let's wait what Doc thinks about it .... |
the truth is, that I met with no problem so far using current scheme .... | |
but as I said - I am not sure, if ?query-here should work for other than 'read attempt .... 'open should imo only be provided with url plus target db, not query itself ... | |
Coccinelle 12-Jan-2006 [552x2] | I sent the bug and the correction to Doc some (many) month ago. |
Here is the exact bug caused by the initi function (the bug was already found in november 2003) >> db: open mysql://narg:?@host/bicycle ** Access Error: Cannot connect to narg ** Where: open-proto ** Near: db: open mysql://narg:?@host/bicycle | |
Dockimbel 12-Jan-2006 [554] | Fix #1 : Byte word added to local context. |
older newer | first last |