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

Reply via email to