dburl.c sample output


[sql:][scheme[<+>dsn]]://[[user[:[password]]@][host][:port][/[database][/[[table[/[column[,column...]*]]]|sql]]]

^(?#
 Optional prefix 'sql:'
)(?:sql:)?(?#
 Scheme: mysql|pgsql
)([-.a-z0-9]*)(?:[+]([-.a-z0-9]*))?(?#
 Required: URL identifier
)://(?#
 User name + password
)(?:(?#
 Username
)([-a-z0-9_]+)(?#
 Password
)(?::([^@]*))?@)?(?#
 Hostname
)((?#
 localhost | example
)(?:[a-z0-9]+(?:-+[-a-z0-9]+)*)|(?#
 Domain name with dot: example.com
)(?:(?:[a-z0-9]+(?:-+[a-z0-9]+)*\.)?(?:[a-z0-9]+(?:-+[a-z0-9]+)*\.)+(?:[a-z]{2,7})\.?)|(?#
 IPv4 number
)(?:(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9][0-9]|[0-9]))?(?#
 Port number: 3306|5432
)(?::(\d{1,5}))?(?#
 DB, table, SQL
)(?:/(?:(?#
 Database: joe|mydb, default $USER
)(?:([_a-z0-9]+)?(?:/(?:(?#
 Table: mytable
)(?:([_a-z0-9]+)(?#
 Columns: id, name
)(?:/((?:[_a-z0-9]+)(?:,[_a-z0-9]+)*)?)?)|((?#
 SQL: SELECT id, name FROM mytable
)[^\h]+\h.+)?)?)?)?)?)?$

Input: 'pgsqls://example/'
        111111___5555555
#  0 [ 0 17]: pgsqls://example/
#  1 [ 0  6]: pgsqls
#  2 [-1 -1]: 
#  3 [-1 -1]: 
#  4 [-1 -1]: 
#  5 [ 9 16]: example
 1. scheme    : pgsqls
 2. dsn       : (null)
 3. user      : <user-name>
 4. password  : <none>
 5. host      : example
 6. port      : <scheme-default>
 7. database  : <user-name>
 8. table     : (null)
 9. coloumn   : (null)
10. sql       : (null)

Input: 'scheme+dsn://user:password@host:12345/database/SELECT * FROM mytable'
        111111_222___3333_44444444_5555_66666_77777777_000000000000000000000
#  0 [ 0 68]: scheme+dsn://user:password@host:12345/database/SELECT * FROM mytable
#  1 [ 0  6]: scheme
#  2 [ 7 10]: dsn
#  3 [13 17]: user
#  4 [18 26]: password
#  5 [27 31]: host
#  6 [32 37]: 12345
#  7 [38 46]: database
#  8 [-1 -1]: 
#  9 [-1 -1]: 
# 10 [47 68]: SELECT * FROM mytable
 1. scheme    : scheme
 2. dsn       : dsn
 3. user      : user
 4. password  : password
 5. host      : host
 6. port      : 12345
 7. database  : database
 8. table     : (null)
 9. coloumn   : (null)
10. sql       : SELECT * FROM mytable

Input: 'scheme+dsn://user:password@host:5432/database/foobar'
        111111_222___3333_44444444_5555_6666_77777777_888888
#  0 [ 0 52]: scheme+dsn://user:password@host:5432/database/foobar
#  1 [ 0  6]: scheme
#  2 [ 7 10]: dsn
#  3 [13 17]: user
#  4 [18 26]: password
#  5 [27 31]: host
#  6 [32 36]: 5432
#  7 [37 45]: database
#  8 [46 52]: foobar
 1. scheme    : scheme
 2. dsn       : dsn
 3. user      : user
 4. password  : password
 5. host      : host
 6. port      : 5432
 7. database  : database
 8. table     : foobar
 9. coloumn   : (null)
10. sql       : (null)

Input: 'scheme+dsn://user:password@1.2.3.4:5432/database/foo/barbar,quux'
        111111_222___3333_44444444_5555555_6666_77777777_888_99999999999
#  0 [ 0 64]: scheme+dsn://user:password@1.2.3.4:5432/database/foo/barbar,quux
#  1 [ 0  6]: scheme
#  2 [ 7 10]: dsn
#  3 [13 17]: user
#  4 [18 26]: password
#  5 [27 34]: 1.2.3.4
#  6 [35 39]: 5432
#  7 [40 48]: database
#  8 [49 52]: foo
#  9 [53 64]: barbar,quux
 1. scheme    : scheme
 2. dsn       : dsn
 3. user      : user
 4. password  : password
 5. host      : 1.2.3.4
 6. port      : 5432
 7. database  : database
 8. table     : foo
 9. coloumn   : barbar,quux
10. sql       : (null)

Input: 'mysql:///db_name/SELECT * FROM foo;'
        11111____7777777_000000000000000000
#  0 [ 0 35]: mysql:///db_name/SELECT * FROM foo;
#  1 [ 0  5]: mysql
#  2 [-1 -1]: 
#  3 [-1 -1]: 
#  4 [-1 -1]: 
#  5 [-1 -1]: 
#  6 [-1 -1]: 
#  7 [ 9 16]: db_name
#  8 [-1 -1]: 
#  9 [-1 -1]: 
# 10 [17 35]: SELECT * FROM foo;
 1. scheme    : mysql
 2. dsn       : (null)
 3. user      : <user-name>
 4. password  : <none>
 5. host      : localhost
 6. port      : <scheme-default>
 7. database  : db_name
 8. table     : (null)
 9. coloumn   : (null)
10. sql       : SELECT * FROM foo;

Input: 'mysql:////SELECT * FROM foo;'
        11111_____000000000000000000
#  0 [ 0 28]: mysql:////SELECT * FROM foo;
#  1 [ 0  5]: mysql
#  2 [-1 -1]: 
#  3 [-1 -1]: 
#  4 [-1 -1]: 
#  5 [-1 -1]: 
#  6 [-1 -1]: 
#  7 [-1 -1]: 
#  8 [-1 -1]: 
#  9 [-1 -1]: 
# 10 [10 28]: SELECT * FROM foo;
 1. scheme    : mysql
 2. dsn       : (null)
 3. user      : <user-name>
 4. password  : <none>
 5. host      : localhost
 6. port      : <scheme-default>
 7. database  : <user-name>
 8. table     : (null)
 9. coloumn   : (null)
10. sql       : SELECT * FROM foo;

Input: ':////SELECT * FROM foo;'
        _____000000000000000000
#  0 [ 0 23]: :////SELECT * FROM foo;
#  1 [ 0  0]: 
#  2 [-1 -1]: 
#  3 [-1 -1]: 
#  4 [-1 -1]: 
#  5 [-1 -1]: 
#  6 [-1 -1]: 
#  7 [-1 -1]: 
#  8 [-1 -1]: 
#  9 [-1 -1]: 
# 10 [ 5 23]: SELECT * FROM foo;
 1. scheme    : <one-scheme-found>
 2. dsn       : (null)
 3. user      : <user-name>
 4. password  : <none>
 5. host      : localhost
 6. port      : <scheme-default>
 7. database  : <user-name>
 8. table     : (null)
 9. coloumn   : (null)
10. sql       : SELECT * FROM foo;

ERROR parsing 'err://1:::/1/1/'