Text::Query::BuildSQL - Base class for SQL query builders
package Text::Query::BuildSQLsqldb;
use Text::Query::BuildSQL;
use vars qw(@ISA);
@ISA = qw(Text::Query::BuildSQL);
Defines all the "build_*"
functions to build a syntax tree. The tree nodes are [ operator scope
operand operand... ]. The
"build_final_expression" function
translate the syntax tree in a "where"
clause using the "resolve" method. If the
scope of the search is not specified (simple query or advanced query without
scope operator), the scope is set to the list of comma separated fields
provided by the "-fields_searched" option.
The resulting "where" clause is placed in
the "select" order provided with the
"-select" option, if any.
The string enclosed in single quotes must match exactly. The
<string> token stands for an arbitrary string. A description enclosed
in [something ...] means repeated 0 or N times.
expr: 'or' scope expr [expr ...]
'and' scope expr [expr ...]
'not' scope expr
'near' scope expr_literal expr_literal
'forbiden' scope expr_literal [expr_literal ...]
'mandatory' scope expr_literal [expr_literal ...]
'optional' scope expr_literal [expr_literal ...]
'literal' scope <string>
expr_literal: literal scope <string>
scope: <string>
- resolve([],
Q1)
- Returns a "where" clause string
corresponding to the "Q1" syntax
tree.
- sortplusminus([],
Q1)
- Translate the "mandatory" and
"forbiden" syntactic nodes to their
boolean equivalents. If it
"has_relevance" returns false and there
is at least one "mandatory" word, the
first "mandatory" word is added to the
list of "optional" words.
- has_relevance()
- Returns true if relevance ranking is possible, false if not. It is used by
the "sortplusminus" function. Returns
false by default.
If relevance ranking is not possible, the semantic of the
simple search is slighthly modified. When asking for
"+a b c" it shows all the documents
containing "a" and
("b" or
"c").
The normal behaviour is to return all the documents containing
"a" and to sort them to show first
those containing ("b" or
"c"). When relevance ranking is not
available the "b",
"c" search terms are therefore
useless. That is why we decided to change the semantic of the query if
no relevance ranking is available.
- -select STRING
- If provided the string returned by
"build_final_expression" substitutes the
"__WHERE__" tag with the
"where" string generated by the
"resolve" function. The substituted
string is the return value of the
"build_final_expression".
If not set the return value of the
"build_final_expression" is the result
of the "resolve" function.
- -fields_searched
FIELDS_LIST
- "FIELDS_LIST" is a list of comma
separated field names. It is used as the default scope if no scope is
provided in the query string. The
"build_final_expression" function will
"croak" if this option is not provided
and no scope operator were used.
Text::Query(3) Text::Query::Build(3)
Loic Dachary (loic@senga.org)