NAME
DBIx::MyParse::Item - Accessing the items from a DBIx::MyParse::Query
parse tree
SYNOPSIS
use DBIx::MyParse;
use DBIx::MyParse::Query;
use DBIx::MyParse::Item;
my $parser = DBIx::MyParse->new();
my $query = $parser->parse("SELECT field_name FROM table_name");
my $item_list = $query->getSelectItems();
my $first_item = $item_list->[0];
print $first_item->getType(); # Prints "FIELD_ITEM"
print $first_item->getFieldName() # Prints "field_name"
DESCRIPTION
MySQL uses a few dozen Item objects to store the various nodes possible in a parse tree. For the sake of simplicity, we only use a single object type in Perl to represent the same information.
METHODS
my $string = $item->getType();
-
This returns the type of the
Item
as a string, to facilitate dumping and debugging.if ($item_type eq 'FIELD_ITEM') { ... } # Correct if ($item_type == FIELD_ITEM) { ... } # Will not work
The possible values are listed in
enum Type
in sql/item.h in the MySQL source.enum Type {FIELD_ITEM, FUNC_ITEM, SUM_FUNC_ITEM, STRING_ITEM, INT_ITEM, REAL_ITEM, NULL_ITEM, VARBIN_ITEM, COPY_STR_ITEM, FIELD_AVG_ITEM, DEFAULT_VALUE_ITEM, PROC_ITEM,COND_ITEM, REF_ITEM, FIELD_STD_ITEM, FIELD_VARIANCE_ITEM, INSERT_VALUE_ITEM, SUBSELECT_ITEM, ROW_ITEM, CACHE_ITEM, TYPE_HOLDER, PARAM_ITEM };
From those, the following are explicitly supported:
FIELD_ITEM, FUNC_ITEM, SUM_FUNC_ITEM, STRING_ITEM, INT_ITEM, REAL_ITEM, NULL_ITEM, VARBIN_ITEM REF_ITEM, COND_ITEM, PARAM_ITEM
In addition, DBIx::MyParse defines its own
TABLE_ITEM
in case a table, rather than a field, is being referenced.REF_ITEM
is aFIELD_ITEM
that is used in aHAVING
clause.VARBIN_ITEM
is created when a Hex value is passed to MySQL (e.g. 0x5061756c).PARAM_ITEM
is a ?-style placeholder.my $string = $item->getFuncType();
-
if
$item->getType() eq "FUNC_ITEM"
, you can callgetFuncType()
to determine what type of function it is. For MySQL, all operators are also of typeFUNC_ITEM
.The possible values are again strings (see above) and are listed in sql/item_func.h under
enum Functype
enum Functype { UNKNOWN_FUNC,EQ_FUNC,EQUAL_FUNC,NE_FUNC,LT_FUNC,LE_FUNC, GE_FUNC,GT_FUNC,FT_FUNC, LIKE_FUNC,NOTLIKE_FUNC,ISNULL_FUNC,ISNOTNULL_FUNC, COND_AND_FUNC, COND_OR_FUNC, COND_XOR_FUNC, BETWEEN, IN_FUNC, INTERVAL_FUNC, ISNOTNULLTEST_FUNC, SP_EQUALS_FUNC, SP_DISJOINT_FUNC,SP_INTERSECTS_FUNC, SP_TOUCHES_FUNC,SP_CROSSES_FUNC,SP_WITHIN_FUNC, SP_CONTAINS_FUNC,SP_OVERLAPS_FUNC, SP_STARTPOINT,SP_ENDPOINT,SP_EXTERIORRING, SP_POINTN,SP_GEOMETRYN,SP_INTERIORRINGN, NOT_FUNC, NOT_ALL_FUNC, NOW_FUNC, VAR_VALUE_FUNC };
if
$item->getType() eq "SUM_FUNC_ITEM"
,$item->getFuncType()
can be any of the aggregate functions listed in enum Sumfunctype in sql/item_sum.h:enum Sumfunctype { COUNT_FUNC,COUNT_DISTINCT_FUNC,SUM_FUNC,AVG_FUNC,MIN_FUNC, MAX_FUNC,UNIQUE_USERS_FUNC,STD_FUNC,VARIANCE_FUNC,SUM_BIT_FUNC, UDF_SUM_FUNC,GROUP_CONCAT_FUNC };
For MySQL, all functions not specifically listed above are
UNKNOWN_FUNC
and you must callgetFuncName()
. my $string = $item->getFuncName();
-
Returns the name of the function called, such as "concat_ws", "md5", etc. If $item is not a function, but an operator, the symbol of the operator is returned, such as "+", "||", etc. The name of the function will be lowercase regardless of the orginal case in the SQL string.
my $item_array_ref = $item->getArguments();
-
Returns a reference to an array containing all the arguments to the function/operator. Each item from the array is an DBIx::MyParse::Item object, even if it is a simple string or a field name.
my $string = $item->getDatabaseName();
-
if $item is FIELD_ITEM, REF_ITEM or a TABLE_ITEM, getDatabaseName() returns the database the field belongs to, if it was explicitly specified. If it was not specified explicitly, such as was given previously with a "USE DATABASE" command, getDatabaseName() will return undef. This may change in the future if we incorporate some more of MySQL's logic
my $string = $item->getTableName();
-
Returns the name of the table for a FIELD_ITEM or TABLE_ITEM object. For FIELD_ITEM, the table name must be explicitly specified with "table_name.field_name" notation. Otherwise returns undef and does not attempt to guess the name of the table.
my $string = $item->getTableName();
-
Returns the name of the field for a FIELD_ITEM object.
my $string = $item->getValue();
-
Returns, as string, the value of STRING_ITEM, INT_ITEM, REAL_ITEM and VARBIN_ITEM objects.
my $string = $item->getOrderDir();
=itemmy $string = $item->getGroupDir();
-
For an
FIELD_ITEM
used inGROUP BY
orORDER BY
, those two identical functions return either the string"ASC"
or the string"DESC"
depending on the group/ordering direction. Default is"ASC"
and will be returned even if the query does not specify a direction explicitly. my $string = $item->getAlias();
-
Returns the name of the Item if provided with an AS clause, such as SELECT field AS alias.
my $item_ref = $item->getJoinCond()
-
For TABLE_ITEM Items, provides a reference to an DBIx::MyParse::Item object containing the condition under which the table in question will be joined to the preceding table ( the ON clause in SQL). The USING clause is automatically converted to an ON internally by MySQL.
my $string = $item->getJoinType();
-
Returns, as string, the type of join that will be used. Possible values are:
"JOIN_TYPE_LEFT" "JOIN_TYPE_RIGHT" "JOIN_TYPE_STRAIGHT"
Join type is
RIGHT OUTER
is currently not returned properly. This will be fixed in due time. my $string_array_ref = $item->getUseIndex();
-
Returns a reference to an array containing one string for each index mentioned in the
USE INDEX
clause for the table in question.This may change in the future to an array of
Item
objects, rather than simple strings, however at this time MySQL provides strings. my $string_array_ref = $item->getIgnoreIndex();
-
Returns a reference to an array containing one string for each index mentioned in an
IGNORE INDEX
clause for the table in question.This may change in the future to an array of
Item
objects, rather than simple strings, however at this time MySQL provides strings.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 189:
=over without closing =back