Dancer-Plugin-Database icon indicating copy to clipboard operation
Dancer-Plugin-Database copied to clipboard

Wishlist: default config params

Open knutov opened this issue 13 years ago • 2 comments

part of the real config:

plugins:
  Database:
    handle_class: 'Dancer::Plugin::Database::KISS'
    driver:   'mysql'
    database: '...'
    host:     '...'
    port:      3306
    username: '...'
    password: '..'
    connection_check_threshold: 300
    dbi_params:
      RaiseError: 1
      AutoCommit: 1
      mysql_auto_reconnect: 1
      mysql_enable_utf8: 1
    on_connect_do: ["SET NAMES 'utf8'", "SET CHARACTER SET 'utf8'" ]
    log_queries: 1
    connections:
      one:
        handle_class: 'Dancer::Plugin::Database::KISS'
        driver:   'mysql'
        database: '...'
        host:     '...'
        port:      3306
        username: '...'
        password: '...'
        connection_check_threshold: 300
        dbi_params:
          RaiseError: 1
          AutoCommit: 1
          mysql_auto_reconnect: 1
          mysql_enable_utf8: 1
        on_connect_do: ["SET NAMES 'utf8'", "SET CHARACTER SET 'utf8'" ]
        log_queries: 1
      two:
        handle_class: 'Dancer::Plugin::Database::KISS'
        driver:   'mysql'
        database: '...'
        host:     '...'
        port:      3306
        username: '...'
        password: '...'
        connection_check_threshold: 300
        dbi_params:
          RaiseError: 1
          AutoCommit: 1
          mysql_auto_reconnect: 1
          mysql_enable_utf8: 1
        on_connect_do: ["SET NAMES 'utf8'", "SET CHARACTER SET 'utf8'" ]
        log_queries: 1
      three:
        handle_class: 'Dancer::Plugin::Database::KISS'
        driver:   'mysql'
        database: '...'
        host:     '...'
        port:      3306
        username: '...'
        password: '...'
        connection_check_threshold: 300
        dbi_params:
          RaiseError: 1
          AutoCommit: 1
          mysql_auto_reconnect: 1
          mysql_enable_utf8: 1
        on_connect_do: ["SET NAMES 'utf8'", "SET CHARACTER SET 'utf8'" ]
        log_queries: 1

Not good. Not readable. A lot of duplicated characters.

May be it's better to make default: section in config like this?

plugins:
  Database:
    database: '...'
    host:     '...'
    username: '...'
    password: '..'
    default:
      handle_class: 'Dancer::Plugin::Database::KISS'
      driver:   'mysql'
      port:      3306
      connection_check_threshold: 300
      dbi_params:
        RaiseError: 1
        AutoCommit: 1
        mysql_auto_reconnect: 1
        mysql_enable_utf8: 1
      on_connect_do: ["SET NAMES 'utf8'", "SET CHARACTER SET 'utf8'" ]
      log_queries: 1
    connections:
      one:
        database: '...'
        host:     '...'
        username: '...'
        password: '...'
      two:
        database: '...'
        host:     '...'
        username: '...'
        password: '...'
      three:
        database: '...'
        host:     '...'
        username: '...'
        password: '...'

knutov avatar Feb 11 '12 00:02 knutov

Sorry for the huge delay responding to this.

I agree this would be quite useful.

I could add a default section, or have the code that fetches settings for a connection by name first take the settings from the "default" connection, then override them with the specific details specified in the named connection's settings - that might perhaps lead to even more readable config, e.g.:

plugins:
  Database:
    handle_class: 'Dancer::Plugin::Database::KISS'
    driver:   'mysql'
    database: '...'
    host:     '...'
    port:      3306
    username: '...'
    password: '..'
    connection_check_threshold: 300
    dbi_params:
      RaiseError: 1
      AutoCommit: 1
      mysql_auto_reconnect: 1
      mysql_enable_utf8: 1
    on_connect_do: ["SET NAMES 'utf8'", "SET CHARACTER SET 'utf8'" ]
    log_queries: 1
    connections:
      one:
        host: '...'
        username: '...'
        password: '...'

In the example above, database() would give you a handle using all the default settings; what you'd get from database('one') would be a handle using exactly the same settings, except with the hostname, username & password overriden by the ones in that named connection's config.

The problem with this approach, though, is that it's a potentially surprising change of behaviour which could bite people already using the module, who don't expect settings declared for the default connection to be inherited.

So, given more thought, your suggestion of a defaults key in the config may be safer.

bigpresh avatar Sep 13 '12 11:09 bigpresh

Like both. Probably we can use the second and add some code to warn the users...

ambs avatar Aug 05 '13 20:08 ambs