The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

SQL::Entity::Index - Entity index abstraction.

SYNOPSIS

    use SQL::Entity::Index;

    my $index = SQL::Entity::Index->new(
        name    => 'idx_empno',
        columns => ['empno'],
        hint    => ' INDEX_ASC( emp empno ) '
    );

DESCRIPTION

    Represents index, that force resultset order by either generating ORDER BY sql fragment,
    or by adding hint sql fragement (Oracle, MySQL)


    my $entity = SQL::Entity->new(
        name                  => 'emp',
        primary_key           => ['empno'],
        unique_expression     => 'rowid',
        columns               => [
            sql_column(name => 'ename'),
            sql_column(name => 'empno'),
            sql_column(name => 'deptno')
        ],
        indexes => [
            sql_index(name => 'idx_emp_empno', columns => ['empno'], hint => 'INDEX_ASC(emp idx_emp_empno)'),
            sql_index(name => 'idx_emp_ename', columns => ['ename']),
        ],
        order_index => 'idx_emp_ename'
    );


    my ($sql, $bind_variables) = $query->query();
    will return
    SELECT emp.*
    FROM (
    SELECT /*+ INDEX_ASC(emp idx_emp_ename) */ ROWNUM AS the_rownum,
      emp.rowid AS the_rowid,
      emp.deptno,
      emp.ename,
      emp.empno
    FROM emp
    WHERE ROWNUM < ?) emp
    WHERE the_rownum >=

EXPORT

sql_index by 'all' tag.

ATTRIBUTES

name
order_by_cluase

order_by_cluase => 'empno desc, ename asc'

columns
hint

Cost base optymizer hitn (Oracle, MySQL)

#TODO add dybnamic hint based on condition objects

METHODS

sql_index

Creates a new instance of the SQL::Entity::Index

order_by_operand

Returns sql fragment operand to ORDER BY cluase

SEE ALSO

SQL::Entity SQL::Entity::Column

COPYRIGHT AND LICENSE

The SQL::Entity::Index module is free software. You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.

AUTHOR

Adrian Witas, adrian@webapp.strefa.pl