package OpenResty::SQL::Update; use strict; use warnings; use base 'OpenResty::SQL::Statement'; sub new { my $class = ref $_[0] ? ref shift : shift; bless { update => $_[0], set => [], where => [] }, $class; } sub update { $_[0]->{update} = $_[1]; $_[0] } sub set { my $self = shift; push @{ $self->{set} }, "$_[0] = $_[1]"; $self; } sub op { $_[0]->{op} = lc($_[1]); $_[0]; } sub generate { my $self = shift; my $sql; local $" = ', '; $sql .= "update $self->{update} set @{ $self->{set} }"; my @where = @{ $self->{where} }; my $op = $self->{op} || 'and'; my $where = join ' '.$op.' ', map { join(' ', @$_) } @where; if ($where) { $sql .= "\nwhere $where" } return $sql . ";\n"; } 1; __END__ =head1 NAME OpenResty::SQL::Update - SQL generator for update statements =head1 INHERITANCE OpenResty::SQL::Update ISA OpenResty::SQL::Statement =head1 SYNOPSIS use OpenResty::SQL::Update; my $update = OpenResty::SQL::Update->new; $update->update( 'models' ) ->set( 'abc' => '"howdy"' ); print $update->generate; # produces: # update models set abc = "howdy"; $update->where("table_name", '=', _Q('blah'))->set(foo => 'bar'); print "$update"; # produces: # update models # set abc = "howdy", foo = bar # where table_name = 'blah'; $update->where("Foo", '>', 'bar'); print "$update"; # produces: # update models # set abc = "howdy", foo = bar # where table_name = 'blah' and Foo > bar; $update->reset( qw ) ->set( 'foo' => 3 )->where(name => '"John"'); print "$update"; # produces: # update abc # set foo = 3 # where name = "John"; =head1 DESCRIPTION This class provides an OO interface for generating SQL update statements without the pain of concatenating plain SQL strings. =head1 METHODS =over =item C =item C =item C =item C $value)> =item C =item C =item C =back =head1 AUTHOR Agent Zhang (agentzh) C<< >> =head1 SEE ALSO L, L, L, L.