kubo / ruby-oci8

Ruby-oci8 - Oracle interface for ruby
Other
169 stars 75 forks source link

Compilation fix for Windows ( and some small cleanups ) #212

Closed tomasjura closed 5 years ago

tomasjura commented 5 years ago

Hi, I was not able to compile the package on windows, there was a typo. Corrected in commit e56aca1

During the compilation there was some warnings. Corrected in commits 5caa3a0, 5aa6b66, d9980b2

Using fiddler for Win32 calls instead Win32API package. (commit b7beed1).

README.md file update so that the links on github page will be correctly displayed. commit 803793b and 5810488

kubo commented 5 years ago

Thanks!

Could you drop some commits by git rebase -i ... and push rewritten commit history forcedly by git push -f? https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#_changing_multiple

I was not able to compile the package on windows, there was a typo. Corrected in commit e56aca1

I accept this commit. 0f43bf7 broken compilation on Windows. I forgot to check it. Thanks.

During the compilation there was some warnings. Corrected in commits 5caa3a0, 5aa6b66, d9980b2

I accept 5aa6b66 and d9980b2.

What warning do you get without 5caa3a0? What compiler do you use? NORETURN has been set already in the following header file. https://github.com/kubo/ruby-oci8/blob/0f43bf7f113405d4d7d4593cb35807b2a9144c61/ext/oci8/oci8.h#L427-L431 As far as I remember, 5caa3a0 causes compilation error on some platforms. (old compiler? I forget what platforms they are.)

Using fiddler for Win32 calls instead Win32API package. (commit b7beed1).

I accept this. Thanks.

README.md file update so that the links on github page will be correctly displayed. commit 803793b and 5810488

I don't accept them. They make incorrect links in https://www.rubydoc.info/github/kubo/ruby-oci8.

tomasjura commented 5 years ago

Hi I did the rebase and some corrections.

The correct remediation for the commit 5caa3a0 ( NORETURN ) seems to be to add the function prototype to header fille - commit 2548130. (Used compiler is GCC version 7.4.0.) Actually the function oci8_do_raise seems not to be used anywhere.

zsh>grep 'oci8_do_raise\b' **/*.[ch]
ext/oci8/error.c:void oci8_do_raise(OCIError *errhp, sword status, OCIStmt *stmthp, const char *file, int line)
ext/oci8/oci8.h:#define oci8_raise(err, status, stmt) oci8_do_raise(err, status, stmt, __FILE__, __LINE__)
ext/oci8/oci8.h:NORETURN(void oci8_do_raise(OCIError *errhp, sword status, OCIStmt *stmthp, const char *file, int line));

I need to extend the ruby driver by XA transaction support ( OCITransStart, OCITransPrepare, OCITransForget, ...). Did you noticed the XA transaction support requirement any time before?

kubo commented 5 years ago

Thanks. It was merged.

I need to extend the ruby driver by XA transaction support ( OCITransStart, OCITransPrepare, OCITransForget, ...). Did you noticed the XA transaction support requirement any time before?

No. I have not used it and I had not been requested to support XA transaction.

kubo commented 5 years ago

@tomasjura Do you start extending the ruby driver? If no, I could do it next weekend. Well, I don't know real-world use cases about XA transaction. So it will be straight mapping from OCI functions to ruby methods.

tomasjura commented 5 years ago

I started to study the xa resource manager interface ( methods in xa_switch_t structure ) and their relation to OCITrans* methods. I'm on the beginning, the relation are not very clear to me. Especially the recovery after an (unexpected) machine/process restart. Let me check the other participants for the XA transaction ( https://github.com/reidmorrison/rubywmq ). When the feasibility study will be done, I will know if I can go in my project with ruby XA or have to use Java XA. To be continued...

kubo commented 5 years ago

I started to study the xa resource manager interface ( methods in xa_switch_t structure ) and their relation to OCITrans* methods.

I guess that they are similar but unrelated. OCITrans* functions looks available without XA.

I found an example using xa_switch_t in old document. It is documented as Oracle XA. In the document it is stated that "Oracle Call Interface applications that use the Oracle XA library must not call OCISessionBegin to log on to the resource manager."

On the other hand, examples about OCITransStart use OCISessionBegin, which could not be called with the Oracle XA library.

I won't support Oracle XA in ruby-oci8 because it will need many modifications. On the other hand supporting OCITrans* functions will be relatively easy.