Just to update everyone. First, for those of you who keep bugging me, I haven’t yet heard back from Oracle regarding SibylNet. Regardless, I’m still hopeful that they will be OK with it and that I can pursue it openly. Second, I’ve been über busy writing a few open-source utilities for work including a Linux buffer cache profiler and primer, a specialized copy-on-write file versioning library based on I/O call library interpositioning, and completely rewriting our Playr utility (which is similar in function to Real Application Testing but for Postgres rather than Oracle). Regardless, while I’m waiting on Oracle, I’ve found myself becoming interested in writing a reference implementation of SQL/MED. SQL/MED, SQL Management of External Data, is part of the SQL:1999, SQL:2003, and SQL:2008 standards and defines a standard interface for accessing data external to the database.
For those of us who have used Oracle forever, we would easily relate to this concept using database linksand external tables. In fact, most database systems support similar functionality; SQL Server supportsLinked Servers, DB2 supports Federated Databases, MySQL has Pluggable Storage Engines, Postgres hasdblink and DBI-Link, and Farrago has a JDBC implementation. Though, while only two servers support the basic SQL syntax for SQL/MED (DB2 and Farrago), neither implement the SQL/MED Foreign Data Wrapper (FDW) interface API. DB2 does include a Wrapper Developer Kit, but it’s for C++ and Java, and does not comply with the FDW API.
Similar to SQL/CLI (ODBC), the FDW API consists of 87 function calls dedicated to interfacing with external data. As expected, the FDW API includes functions for fairly-routine tasks such as server connection and disconnection, SQL execution, and result fetching. However, the FDW API also includes calls for retrieving query plan information such as cardinality, degree, number of distinct rows, basic execution cost statistics, and supported predicates for pushdown.
Of course, there’s lots of other good Oracle stuff I have yet to put up here… I’m just searching for what to work on next :)