Search::Query::Dialect - abstract base class for query language dialects


 my $query = Search::Query->parser->parse('foo');
 print $query;


Search::Query::Dialect is the base class from which all query dialects inherit.

A Dialect subclass must implement at least two methods:


Returns the serialized query tree.

stringify_clause( leaf )

Returns one clause of a serialized query tree.

See Search::Query::Dialect::Native for a working example.



Get/set flag.


Standard attribute accessor. Default value is undef.


DEPRECATED. Use BUILD() instead.


All subclasses must override this method. The default behavior is to croak.


Returns the query Dialect instance as a hashref structure, similar to that of Search::QueryParser.

walk( CODE )

Traverse a Dialect object, calling CODE on each Clause. The CODE reference should expect 4 arguments:

  • The Clause object.

  • The Dialect object.

  • The CODE reference.

  • The prefix ("+", "-", and "") for the Clause.

translate_to( dialect )

Translate from one Dialect to another. Returns an object blessed into the dialect class.

add_or_clause( clause )

Add clause as an "or" leaf to the Dialect object.

add_and_clause( clause )

Add clause as an "and" leaf to the Dialect object.

add_not_clause( clause )

Add clause as a "not" leaf to the Dialect object.

add_sub_clause( clause )

Add clause as a sub clause to the Dialect object. In this case, clause should also be a Dialect object.


Should return the name of the Field class associated with the Dialect. Default is 'Search::Query::Field'.


Returns the default field for this Dialect.

get_field( field_name )

Returns a Field object instance for field_name. The object will be an instance of field_class.

This is a shorthand wrapper around the method of the same name in the internal parser object.

preprocess( query_string )

Called by Parser in parse() before actually building the Dialect object from query_string.

This allows for any "cleaning up" or other munging of query_string to support the official Parser syntax.

The default just returns query_string untouched. Subclasses should return a parseable string.


Returns the Search::Query::Parser object that generated the Dialect object.


Peter Karman, <karman at>


Please report any bugs or feature requests to bug-search-query at, or through the web interface at I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.


You can find documentation for this module with the perldoc command.

    perldoc Search::Query

You can also look for information at:


Copyright 2010 Peter Karman.

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See for more information.