NAME

EntityModel::Query - handle SQL queries

VERSION

version 0.003

SYNOPSIS

 use EntityModel::Query;
 my $query = EntityModel::Query->new(
 	select	=> [qw(id name)]
	from	=> 'table',
	where	=> [ created => { '<' => '2010-01-01' } ],
	limit	=> 5
 );
 my ($sql, @bind) = $query->sqlAndParameters;
 my $sth = $dbh->prepare($sql);
 $sth->execute(@bind);

DESCRIPTION

Provides an abstraction layer for building SQL queries programmatically.

When generating the query, each of the components is called in turn to get an "inline SQL" arrayref. This is an arrayref consisting of SQL string fragments interspersed with refs for items such as EntityModel::Entity names, direct scalar values, or EntityModel::Field names.

As an example:

[ 'select * from ', EntityModel::Entity->new('table'), ' where ', EntityModel::Field->new('something'), ' = ', \3 ]

This can then be used by sqlAndParameters to generate:

'select * from "table" where "something" = ?', 3

or as a plain SQL string (perhaps for diagnostic purposes) from sqlString as:

'select * from "table" where "something" = 3'

METHODS

new

Construct a new EntityModel::Query. Most of the work is passed off to parseSpec.

type

Returns the type of the current query. The query object will be reblessed into an appropriate subclass depending on whether this is an insert, select, delete etc. A query that has not been reblessed is invalid.

parseSpec

Parse the specification we were given.

parse_base

Base method for parsing.

reclassify

Virtual method to allow subclass to perform any required updates after reblessing to an alternative class.

upgradeTo

Upgrade an existing EntityModel::Query object to a subclass.

parse_limit

Handle a 'limit' directive.

parse_group

parse_where

typeSQL

Proxy method for type, returns the SQL string representation for the current query type (such as 'select' or 'insert into').

fieldsSQL

Generate the SQL for fields.

fromSQL

SQL for the 'from' clause.

limitSQL

offsetSQL

orderSQL

groupSQL

havingSQL

whereSQL

joinSQL

keyword_order { qw{type fields from join where having group order offset limit};

inlineSQL

results

iterate

Calls the given method for each result returned from the current query.

dbh

SEE ALSO

AUTHOR

Tom Molesworth <cpan@entitymodel.com>

LICENSE

Licensed under the same terms as Perl itself.