The following references and ideas may be of use to people interested
in writing an SQL back end for Subversion.

* Glenn Thompson's pluggable FS document

A new filesystem implementation has to plug into Subversion alongside
the BDB one.  Currently, we have a framework allowing complete
reimplementations of the FS API to plug into Subversion alongside each
other, but it may (or may not) be more prudent to abstract the BDB
implementation at the table level so that the same code can use
multiple database implementations.

Glenn Thompson wrote a document about FS abstraction, located at
<http://www.cdrguys.com/subversion/>.  This document predates the FSFS
implementation, so it is a bit dated, but it is still highly relevant
to the hypothetical table-level abstraction described above.

The document posits two abstraction layers, the FSAP (filesystem
abstract provider) layer which abstracts at the API level, and the FSP
(filesystem provider) layer which abstracts at the table level.  The
FSP layer would only apply to libsvn_fs_base, which implements the BDB
back end.  The document's FSAP abstraction proposal was used as a
basis (though not as gospel) for the API-level abstraction we
currently have.

* Edmund Horner's prototype MySQL implementation

http://homepages.paradise.net.nz/~ejrh/subversion/mysql/ describes a
prototype implementation of a MySQL back end, also made before the
FSFS implementation.  There is a little more about this back end in
the mail thread at
http://www.contactor.se/~dast/svn/archive-2004-02/0470.shtml.
