Skip to content

kazeburo/DBIx-Sunny

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status MetaCPAN Release

NAME

DBIx::Sunny - Simple DBI wrapper

SYNOPSIS

use DBIx::Sunny;

my $dbh = DBIx::Sunny->connect(...);

# or

use DBI;

my $dbh = DBI->connect(.., {
    RootClass => 'DBIx::Sunny',
    PrintError => 0,
    RaiseError => 1,
});

DESCRIPTION

DBIx::Sunny is a simple DBI wrapper. It provides better usability for you. This module based on Amon2::DBI. DBIx::Sunny supports only SQLite and MySQL.

FEATURES

  • Set AutoInactiveDestroy to true.

    DBIx::Sunny sets AutoInactiveDestroy as true.

  • [SQLite/MySQL/Pg] Auto encode/decode UTF-8

    DBIx::Sunny sets sqlite_unicode, mysql_enable_utf8 and pg_enable_utf8 automatically.

  • [SQLite] Performance tuning

    DBIx::Sunny sets sqlite_use_immediate_transaction to true, and executes these PRAGMA statements

      PRAGMA journal_mode = WAL
      PRAGMA synchronous = NORMAL
    
  • Nested transaction management.

    DBIx::Sunny supports nested transaction management based on RAII like DBIx::Class or DBIx::Skinny. It uses DBIx::TransactionManager internally.

  • Error Handling

    DBIx::Sunny sets RaiseError and ShowErrorStatement as true. DBIx::Sunny raises exception and shows current statement if your $dbh occurred exception.

  • SQL comment

    DBIx::Sunny adds file name and line number as SQL comment that invokes SQL statement.

  • Easy access to last_insert_id

    DBIx::Sunny's last_insert_id needs no arguments. It's shortcut for mysql_insertid or last_insert_rowid.

  • Auto expanding arrayref bind parameters

    select_(one|row|all) and query methods support auto-expanding arrayref bind parameters.

      $dbh->select_all('SELECT * FROM id IN (?)', [1 2 3])
      #SQL: 'SELECT * FROM id IN (?,?,?)'
      #@BIND: (1, 2, 3)
    
  • Named placeholder

    select_(one|row|all) and query methods support named placeholder.

      $dbh->select_all('SELECT * FROM users WHERE id IN (:ids) AND status = :status', {
          ids    => [1,2,3],
          status => 'active',
      });
      #SQL: 'SELECT * FROM users WHERE id IN (?,?,?) AND status = ?'
      #@BIND: (1, 2, 3, 'active')
    
  • Typed bind parameters

    DBIx::Sunny allows you to specify data types of bind parameters. If a bind parameter is SQL::Maker::SQLType object, its value is passed as its type, otherwise it is passed as default type (VARCHAR).

      use SQL::Maker::SQLType qw/sql_type/;
      use DBI qw/:sql_types/
    
      $dbh->query(
          'INSERT INTO bin_table (bin_col) VALUES (?)',
          sql_type(\"\xDE\xAD\xBE\xEF", SQL_BINARY)),
      );
    

ADDITIONAL METHODS

  • $col = $dbh->select_one($query, @bind);

    Shortcut for prepare, execute and fetchrow_arrayref->[0]

  • $row = $dbh->select_row($query, @bind);

    Shortcut for prepare, execute and fetchrow_hashref

  • $rows = $dbh->select_all($query, @bind);

    Shortcut for prepare, execute and selectall_arrayref(.., { Slice => {} }, ..)

  • $model = $dbh->select_row_as($model_class, $query, @bind);

    Shortcut for $model_class->new(%{ $dbh->select_row($query, @bind) });

  • $models = $dbh->select_all_as($model_class, $query, @bind);

    Shortcut for [ map { $model_class->new(%$_) } @{ $dbh->select_all($query, @bind) } ];

  • $dbh->query($query, @bind);

    Shortcut for prepare, execute.

AUTHOR

Masahiro Nagano <kazeburo KZBRKZBR@ gmail.com>

SEE ALSO

DBI, Amon2::DBI

LICENSE

Copyright (C) Masahiro Nagano

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages