NAME
SQL::Easy - extremely easy access to sql data
VERSION
version 2.0.0
SYNOPSIS
Let image we have db 'blog' with one table:
CREATE TABLE `posts` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`dt` datetime NOT NULL,
`title` VARCHAR(255) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
insert INTO `posts` (`dt`, `title`) values
('1', '2010-07-14 18:30:31', 'Hello, World!'),
('2', '2010-08-02 17:13:35', 'use perl or die')
;
Then we we can do some things with SQL::Easy
use SQL::Easy;
my $se = SQL::Easy->new(
database => 'blog',
user => 'user',
password => 'secret',
host => '127.0.0.1', # default '127.0.0.1'
port => 3306, # default 3306
connection_check_threshold => 30, # default 30
);
# get scalar
my $posts_count = $se->get_one('select count(id) from posts');
# get list
my ($dt, $title) = $se->get_row(
'select dt, title from posts where id = ?',
1,
);
# get arrayref
my $posts = $se->get_data(
'select dt_post, title from posts order by id',
);
# We will get
# [
# {
# 'dt_post' => '2010-07-14 18:30:31',
# 'title' => 'Hello, World!'
# },
# {
# 'dt_post' => '2010-08-02 17:13:35',
# 'title' => 'use perl or die'
# }
# ];
my $post_id = $se->insert(
'insert into images ( dt_post, title ) values ( now(), ? )',
'My new idea',
);
# $post_id is the id of the new row in table
# Sometimes you don't need the any return value (when you delete or update
# rows), you only need to execute some sql. You can do it by
$se->execute(
'update posts set title = ? where id = ?',
'JAPH',
2,
);
If it passed more than 'connection_check_threshold' seconds between requests the module will check that db connection is alive and reconnect if it went away.
DESCRIPTION
On cpan there are a lot of ORMs. The problem is that sometimes ORM are too complex. You don't need ORM in a simple script with couple requests. ORM is sometimes difficult to use, you need to learn its syntax. From the other hand you already knows SQL language.
SQL::Easy give you easy access to data stored in databases using well known SQL language.
SQL::Easy version numbers uses Semantic Versioning standart. Please visit http://semver.org/ to find out all about this great thing.
METHODS
new
Get: 1) $class 2) $params - hashref with constraction information
Return: 1) object
my $se = SQL::Easy->new(
database => 'blog',
user => 'user',
password => 'secret',
host => '127.0.0.1', # default '127.0.0.1'
port => 3306, # default 3306
connection_check_threshold => 30, # default 30
);
Or, if you already have dbh:
my $se2 = SQL::Easy->new(
dbh => $dbh,
);
For example, if you are woring with Dancer::Plugin::Database you can use this command to create SQL::Easy object:
my $se3 = SQL::Easy->new(
dbh => database(),
);
This is one special parameter `cb_before_execute`. It should recieve callback. This callback is run just before the sql is executed. The callback recieves hash with keys 'sql' and 'bind_variables' that contains the values. The return value of this callback is returned.
my $se4 = SQL::Easy->new(
...
cb_before_execute => sub {
my (%params) = @_;
my $sql = delete $params{sql};
my $bind_variables = delete $params{bind_variables};
print $sql . "\n";
print join("\n", @{$bind_variables}) . "\n";
return '';
}
);
get_dbh
Get: 1) $self
Return: 1) $ with dbi handler
get_one
Get: 1) $self 2) $sql 3) @bind_variables
Return: 1) $ with the first value of request result
get_row
Get: 1) $self 2) $sql 3) @bind_variables
Return: 1) @ with first row in result table
get_col
Get: 1) $self 2) $sql 3) @bind_variables
Return: 1) @ with first column in result table
get_data
Get: 1) $self 2) $sql 3) @bind_variables
Return: 1) $ with array of hashes with the result of the query
Sample usage:
my $a = $se->get_data('select * from t1');
print scalar @{$a}; # quantity of returned rows
print $a->[0]{filename}; # element 'filename' in the first row
for(my $i = 0; $i <= $#{$a}; $i++) {
print $a->[$i]{filename}, "\n";
}
get_tsv_data
Get: 1) $self 2) $sql 3) @bind_variables
Return: 1) $ with tab separated db data
Sample usage:
print $se->get_tsv_data(
'select dt_post, title from posts order by id limit 2',
);
It will output the text below (with the tabs as separators).
dt_post title
2010-07-14 18:30:31 Hello, World!
2010-08-02 17:13:35 use perl or die
insert
Get: 1) $self 2) $sql 3) @bind_variables
Return: 1) $ with id of inserted record
Sub executes sql with bind variables and returns id of inseted record
execute
Get: 1) $self 2) $sql 3) @bind_variables
Return: -
Sub just executes sql that it recieves and returns nothing interesting
CONTRIBUTORS
Igor Sverdlov
SOURCE CODE
The source code for this module is hosted on GitHub https://github.com/bessarabov/SQL-Easy
BUGS
Please report any bugs or feature requests in GitHub Issues https://github.com/bessarabov/SQL-Easy
AUTHOR
Ivan Bessarabov <ivan@bessarabov.ru>
COPYRIGHT AND LICENSE
This software is copyright (c) 2010 by Ivan Bessarabov.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.