Provided by: libsql-tiny-perl_0.04-2_all
NAME
SQL::Tiny - A very simple SQL-building library
VERSION
Version 0.04
SYNOPSIS
my ($sql,$binds) = sql_select( 'users', [ 'name', 'status' ], { status => [ 'Deleted', 'Inactive' ] }, { order_by => 'name' } ); my ($sql,$binds) = sql_select( 'users', [ 'COUNT(*)' ], { status => [ 'Deleted', 'Inactive' ] }, { group_by => 'status' } ); my ($sql,$binds) = sql_insert( 'users', { name => 'Dave', status => 'Active' } ); my ($sql,$binds) = sql_update( 'users', { status => 'Inactive' }, { password => undef } ); my ($sql,$binds) = sql_delete( 'users', { status => 'Inactive' } );
DOCUMENTATION
A very simple SQL-building library. It's not for all your SQL needs, only the very simple ones. It doesn't handle JOINs. It doesn't handle subselects. It's only for simple SQL. In my test suites, I have a lot of ad hoc SQL queries, and it drives me nuts to have so much SQL code lying around. SQL::Tiny is for generating SQL code for simple cases. I'd far rather have: my ($sql,$binds) = sql_insert( 'users', { name => 'Dave', salary => 50000, status => 'Active', dateadded => \'SYSDATE()', qty => \[ 'ROUND(?)', 14.5 ], } ); than hand-coding: my $sql = 'INSERT INTO users (name,salary,status,dateadded,qty) VALUES (:name,:status,:salary,SYSDATE(),ROUND(:qty))'; my $binds = { ':name' => 'Dave', ':salary' => 50000, ':status' => 'Active', ':dateadded' => \'SYSDATE()', ':qty' => 14.5, }; or even the positional: my $sql = 'INSERT INTO users (name,salary,status,dateadded,qty) VALUES (?,?,?,SYSDATE(),ROUND(?))'; my $binds = [ 'Dave', 50000, 'Active', 14.5 ]; The trade-off for that brevity of code is that SQL::Tiny has to make new SQL and binds from the input every time. You can't cache the SQL that comes back from SQL::Tiny because the placeholders could vary depending on what the input data is. Therefore, you don't want to use SQL::Tiny where speed is essential. The other trade-off is that SQL::Tiny handles only very simple code. It won't handle JOINs of any kind. SQL::Tiny isn't meant for all of your SQL needs, only the simple ones that you do over and over.
EXPORT
All subs can be exported, but none are by default. ":all" exports all subs.
SUBROUTINES/METHODS
sql_select( $table, \@columns, \%where [, \%other ] ) Creates simple SELECTs and binds. The %other can contain "group_by" and "order_by". Calling: my ($sql,$binds) = sql_select( 'users', [qw( userid name )], { status => 'X' ], { order_by => 'name' }, ); returns: $sql = 'SELECT userid,name FROM users WHERE status=? ORDER BY name'; $binds = [ 'X' ]; sql_insert( $table, \%values ) Creates simple INSERTs and binds. Calling: my ($sql,$binds) = sql_insert( 'users', { serialno => '12345', name => 'Dave', rank => 'Sergeant', height => undef, date_added => \'SYSDATE()', } ); returns: $sql = 'INSERT INTO users (date_added,height,name,rank,serialno) VALUES (SYSDATE(),NULL,?,?,?)'; $binds = [ 'Dave', 'Sergeant', 12345 ] sql_update( $table, \%values, \%where ) Creates simple UPDATE calls and binds. Calling: my ($sql,$binds) = sql_update( 'users', { status => 'X', lockdate => undef, }, { orderdate => \'SYSDATE()', }, ); returns: $sql = 'UPDATE users SET lockdate=NULL, status=? WHERE orderdate=SYSDATE()' $binds = [ 'X' ] sql_delete( $table, \%where ) Creates simple DELETE calls and binds. Calling: my ($sql,$binds) = sql_delete( 'users', { serialno => 12345, height => undef, date_added => \'SYSDATE()', status => [qw( X Y Z )], }, ); returns: $sql = 'DELETE FROM users WHERE date_added = SYSDATE() AND height IS NULL AND serialno = ? AND status IN (?,?,?)' $binds = [ 12345, 'X', 'Y', 'Z' ]
AUTHOR
Andy Lester, "<andy at petdance.com>"
BUGS
Please report any bugs or feature requests to <https://github.com/petdance/sql-tiny/issues>, or email me directly.
SUPPORT
You can find documentation for this module with the perldoc command. perldoc SQL::Tiny You can also look for information at: • MetaCPAN <https://metacpan.org/release/SQL-Tiny> • GitHub issue tracker <https://github.com/petdance/sql-tiny/issues>
ACKNOWLEDGEMENTS
Thanks to the following folks for their contributions: Mohammad S Anwar, Tim Heaney.
LICENSE AND COPYRIGHT
Copyright 2019 Andy Lester. This program is free software; you can redistribute it and/or modify it under the terms of the the Artistic License (2.0). You may obtain a copy of the full license at: <http://www.perlfoundation.org/artistic_license_2_0>