Skip to content

How to Read This Book

Every function orafce_no_c ships was tested side-by-side against the real, compiled orafce C extension — installed in the same database, under a renamed schema, with every call asserted to match exactly. Out of roughly 150 converted functions across 10 packages, only a small number have any confirmed behavioral divergence at all, and every one of them is documented here in full, with the exact function, the exact difference, and the reasoning behind the decision — so you can judge for yourself whether it matters for your own use of orafce_no_c.

This book is split into two chapters, covering two genuinely different things:

Behavioral Differences from Real orafce — cases where orafce_no_c deliberately behaves differently than real orafce. These are mostly things that are structurally impossible without C (a custom GUC, a specific unreproducible bug) rather than ports that were done carelessly.

Confirmed Bugs Found in Real orafce — genuine bugs and surprising quirks discovered in real orafce itself while building and testing this project, regardless of whether orafce_no_c preserves them (for compatibility with code that may depend on the exact wrong-but-deterministic answer) or fixes them (when the original behavior was unsafe or had nothing legitimate to preserve). Where a bug is preserved, an explicit opt-in "fixed" alternative is usually offered alongside it — those are called out clearly.

A note on testing rigor

Two items came up during development that are neither of the above: an IMMUTABLE declaration copied from real orafce onto two of this port's own helper functions (in plvdate and plvsubst), which turned out to be unsafe for this port's specific implementation strategy (both perform real DDL as a side effect the first time they're called in a session) even though it's perfectly safe for real orafce's own C implementation. Both were caught via minimal reproductions during development and fixed (declared VOLATILE instead) before ever shipping — there is no version of orafce_no_c you could have installed where this was observably wrong. They're not a divergence from orafce's behavior, and not a bug in orafce itself, so they don't appear as catalog entries in either chapter — they're mentioned here only as evidence that behavior was actually tested, not assumed.

Continue to Behavioral Differences from Real orafce.