---
name: "Text::Query::BuildSQL"
section: "3pm"
platform: "linux"
package: "libtext-querysql-perl"
version: "0.07-6"
release: "Debian 5.0 (Lenny)"
platforms: ["linux"]
url: "https://new.carta.tech/Text::Query::BuildSQL"
---

# Text::Query::BuildSQL(3pm)

Base class for SQL query builders

## NAME

Text::Query::BuildSQL - Base class for SQL query builders

## SYNOPSIS

```
    package Text::Query::BuildSQLsqldb;
```

```
    use Text::Query::BuildSQL;
```

```
    use vars qw(@ISA);
```

```
    @ISA = qw(Text::Query::BuildSQL);
```

## DESCRIPTION

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.

## SYNTAX TREE

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>
```

## METHODS

- 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.

## OPTIONS

- \-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.

## SEE ALSO

*Text::Query*(3) *Text::Query::Build*(3)

## AUTHORS

Loic Dachary (loic@senga.org)
