On Nov 26, 2013, at 9:32 AM, Gisle Aas <gi...@activestate.com> wrote:
> To me the value of database urls would be compatibility with other > implementations of this obvious idea. Some examples I found by quick > googling: > > http://docs.sqlalchemy.org/en/rel_0_9/core/engines.html#database-urls > http://docs.stackato.com/3.0/user/services/data-services.html#database-url > https://github.com/kennethreitz/dj-database-url > https://github.com/glenngillen/rails-database-url > http://www.jguru.com/faq/view.jsp?EID=690 > http://www.postgresql.org/docs/9.3/static/libpq-connect.html#LIBPQ-CONNSTRING > > It would be useful for somebody to survey these and then provide a perl > module that's compatible with the consensus among these. It would also be a > good place to document what the state of database urls currently is. Thanks for those links They are all very similar (except for the rails one, which lacks docs). And they are similar to what I've come up with, detailed here: https://github.com/theory/uri-db/blob/master/lib/URI/db.pm Basically, a database format is actually two URIs. The first is an opaque URI, "db:(.+)". The second URL is inside the "(.+)", and can take two forms: $engine://$user:$pass@$host:$port$dbname?$params $engine:$dbname?$params Some examples from the test suite: db: db:pg: db:pg://localhost db:pg://localhost:33 db:pg://foo:123/try?foo=1&foo=2&lol=yes db:sqlite: db:sqlite:foo.db db:sqlite:/path/foo.db db:sqlite:///path/foo.db db:cubrid://localhost:33/foo db:db2://localhost:33/foo db:firebird://localhost:33/foo db:informix:foo.db db:informix:foo.db?foo=1 db:ingres:foo.db db:ingres:foo.db?foo=1 db:interbase://localhost:33/foo db:maxdb://localhost:33/foo db:maxdb://localhost/foo db:monetdb://localhost:1222?foo=1 db:monetdb://localhost/lolz db:mysql://localhost:33/foo db:oracle://localhost:33/foo db:sqlserver://localhost:33/foo db:sybase://localhost:33/foo db:teradata://localhost db:teradata://localhost:33/foo?hi=1 db:unify:foo.db db:unify: db:unify:?foo=1&bar=2 db:vertica: db:vertica://localhost db:vertica://localhost:33 db:vertica://foo:123/try?foo=1&foo=2&lol=yes I think it’s pretty simple and familiar, and plan to put it (or something similar, based on this and other discussions) in Sqitch. Thoughts? David