IAnjutaSymbolQuery

IAnjutaSymbolQuery — Source code symbol query interface

Stability Level

Unstable, unless otherwise indicated

Synopsis

#include <libanjuta/interfaces/ianjuta-symbol-query.h>

#define             IANJUTA_SYMBOL_QUERY_ERROR
enum                IAnjutaSymbolQueryDb;
enum                IAnjutaSymbolQueryFileScope;
struct              IAnjutaSymbolQueryIface;
enum                IAnjutaSymbolQueryMode;
enum                IAnjutaSymbolQueryName;
void                ianjuta_symbol_query_cancel         (IAnjutaSymbolQuery *obj,
                                                         GError **err);
GQuark              ianjuta_symbol_query_error_quark    (void);
IAnjutaIterable *   ianjuta_symbol_query_search         (IAnjutaSymbolQuery *obj,
                                                         const gchar *pattern,
                                                         GError **err);
IAnjutaIterable *   ianjuta_symbol_query_search_all     (IAnjutaSymbolQuery *obj,
                                                         GError **err);
IAnjutaIterable *   ianjuta_symbol_query_search_class_parents
                                                        (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbol *symbol,
                                                         GError **err);
IAnjutaIterable *   ianjuta_symbol_query_search_file    (IAnjutaSymbolQuery *obj,
                                                         const gchar *pattern,
                                                         const GFile *file,
                                                         GError **err);
IAnjutaIterable *   ianjuta_symbol_query_search_id      (IAnjutaSymbolQuery *obj,
                                                         gint symbol_id,
                                                         GError **err);
IAnjutaIterable *   ianjuta_symbol_query_search_in_scope
                                                        (IAnjutaSymbolQuery *obj,
                                                         const gchar *pattern,
                                                         IAnjutaSymbol *scope,
                                                         GError **err);
IAnjutaIterable *   ianjuta_symbol_query_search_members (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbol *symbol,
                                                         GError **err);
IAnjutaIterable *   ianjuta_symbol_query_search_parent_scope
                                                        (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbol *symbol,
                                                         GError **err);
IAnjutaIterable *   ianjuta_symbol_query_search_parent_scope_file
                                                        (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbol *symbol,
                                                         const gchar *file_path,
                                                         GError **err);
IAnjutaIterable *   ianjuta_symbol_query_search_scope   (IAnjutaSymbolQuery *obj,
                                                         const gchar *file_path,
                                                         gint line,
                                                         GError **err);
void                ianjuta_symbol_query_set_fields     (IAnjutaSymbolQuery *obj,
                                                         gint n_fields,
                                                         IAnjutaSymbolField *fields,
                                                         GError **err);
void                ianjuta_symbol_query_set_file_scope (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbolQueryFileScope filescope_search,
                                                         GError **err);
void                ianjuta_symbol_query_set_filters    (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbolType filters,
                                                         gboolean includes_types,
                                                         GError **err);
void                ianjuta_symbol_query_set_group_by   (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbolField field,
                                                         GError **err);
void                ianjuta_symbol_query_set_limit      (IAnjutaSymbolQuery *obj,
                                                         gint limit,
                                                         GError **err);
void                ianjuta_symbol_query_set_mode       (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbolQueryMode mode,
                                                         GError **err);
void                ianjuta_symbol_query_set_offset     (IAnjutaSymbolQuery *obj,
                                                         gint offset,
                                                         GError **err);
void                ianjuta_symbol_query_set_order_by   (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbolField field,
                                                         GError **err);

Object Hierarchy

  GEnum
   +----IAnjutaSymbolQueryDb
  GEnum
   +----IAnjutaSymbolQueryFileScope
  GEnum
   +----IAnjutaSymbolQueryMode
  GEnum
   +----IAnjutaSymbolQueryName

Description

A query object will have this interface that allows to tweak various query parameters. Except for the IAnjutaSymbolQueryName and IAnjutaSymbolQueryDb parameters, everything else is changable post-creation.

Note that chaning a query parameter, except for limit and offset will result in re-preparing the query the next time it is executed, so it is not advisable to change it each time the query is executed. For such cases, create different queries with different parameters.

A query is signified by a name enumeration (IAnjutaSymbolQueryName) which practically determines the query type and its execution condition. Each query name is assigned to pre-defined query statement and can only be set during creation time. Then only its specific ianjuta_symbol_query_search_*() can be used to execute the query. These specific execution methods are provided to make it convenient to pass query parameters easily and to ensure all the needed parameters are given.

A query can run in different modes, defined by IAnjutaSymbolQueryMode, by default it is executed in synchrounous mode IANJUTA_SYMBOL_QUERY_MODE_SYNC and can be changed using ianjuta_symbol_query_set_mode(). IANJUTA_SYMBOL_QUERY_MODE_ASYNC runs it in asynchronous mode in a separate thread and can be canceled with ianjuta_symbol_query_cancel().

A query runs on a database, defined by IAnjutaSymbolQueryDb, and can be only selected at creatation time.

In addition, there are many other filters that can be set to the query to refine the query results. For example, ianjuta_symbol_query_set_fields() is used to set the needed symbol fields to retrieve, ianjuta_symbol_query_set_filters() is used to filter the results with symbol types, ianjuta_symbol_query_set_file_scope() limits the results to either public or private scope within the source file, ianjuta_symbol_query_set_group_by() is used to group the results on a given field, ianjuta_symbol_query_set_order_by is used to order the results on a given field.

ianjuta_symbol_query_set_limit() and ianjuta_symbol_query_set_offset() are used to change limit and offset of the resultset. Note again that these parameters do not require re-preparation of query, so can be safely used any time without performance hit.

Details

IANJUTA_SYMBOL_QUERY_ERROR

#define IANJUTA_SYMBOL_QUERY_ERROR ianjuta_symbol_query_error_quark()


enum IAnjutaSymbolQueryDb

typedef enum {
	IANJUTA_SYMBOL_QUERY_DB_PROJECT,
	IANJUTA_SYMBOL_QUERY_DB_SYSTEM
} IAnjutaSymbolQueryDb;

Sets the database to use for the query. System database is where all system library symbols are found. While project database is where currently open project's symbols are found.

IANJUTA_SYMBOL_QUERY_DB_PROJECT

Select project database.

IANJUTA_SYMBOL_QUERY_DB_SYSTEM

Select system database.

enum IAnjutaSymbolQueryFileScope

typedef enum {
	IANJUTA_SYMBOL_QUERY_SEARCH_FS_IGNORE,
	IANJUTA_SYMBOL_QUERY_SEARCH_FS_PUBLIC,
	IANJUTA_SYMBOL_QUERY_SEARCH_FS_PRIVATE
} IAnjutaSymbolQueryFileScope;

Defines file scope of symbols to query.

IANJUTA_SYMBOL_QUERY_SEARCH_FS_IGNORE

Ignore file scope

IANJUTA_SYMBOL_QUERY_SEARCH_FS_PUBLIC

Only public symbols visible to rest of project.

IANJUTA_SYMBOL_QUERY_SEARCH_FS_PRIVATE

Only private symbols visible inside a file.

struct IAnjutaSymbolQueryIface

struct IAnjutaSymbolQueryIface {
	GTypeInterface g_iface;
	
	/* Signal */
	void (*async_result) (IAnjutaSymbolQuery *obj, GObject* result);

	void (*cancel) (IAnjutaSymbolQuery *obj, GError **err);
	IAnjutaIterable* (*search) (IAnjutaSymbolQuery *obj, const gchar *pattern, GError **err);
	IAnjutaIterable* (*search_all) (IAnjutaSymbolQuery *obj, GError **err);
	IAnjutaIterable* (*search_class_parents) (IAnjutaSymbolQuery *obj, IAnjutaSymbol *symbol, GError **err);
	IAnjutaIterable* (*search_file) (IAnjutaSymbolQuery *obj, const gchar *pattern,  const GFile *file, GError **err);
	IAnjutaIterable* (*search_id) (IAnjutaSymbolQuery *obj, gint symbol_id, GError **err);
	IAnjutaIterable* (*search_in_scope) (IAnjutaSymbolQuery *obj, const gchar *pattern,  IAnjutaSymbol *scope, GError **err);
	IAnjutaIterable* (*search_members) (IAnjutaSymbolQuery *obj, IAnjutaSymbol *symbol, GError **err);
	IAnjutaIterable* (*search_parent_scope) (IAnjutaSymbolQuery *obj, IAnjutaSymbol *symbol, GError **err);
	IAnjutaIterable* (*search_parent_scope_file) (IAnjutaSymbolQuery *obj, IAnjutaSymbol *symbol,  const gchar *file_path, GError **err);
	IAnjutaIterable* (*search_scope) (IAnjutaSymbolQuery *obj, const gchar *file_path,  gint line, GError **err);
	void (*set_fields) (IAnjutaSymbolQuery *obj, gint n_fields,  IAnjutaSymbolField *fields, GError **err);
	void (*set_file_scope) (IAnjutaSymbolQuery *obj, IAnjutaSymbolQueryFileScope filescope_search, GError **err);
	void (*set_filters) (IAnjutaSymbolQuery *obj, IAnjutaSymbolType filters,  gboolean includes_types, GError **err);
	void (*set_group_by) (IAnjutaSymbolQuery *obj, IAnjutaSymbolField field, GError **err);
	void (*set_limit) (IAnjutaSymbolQuery *obj, gint limit, GError **err);
	void (*set_mode) (IAnjutaSymbolQuery *obj, IAnjutaSymbolQueryMode mode, GError **err);
	void (*set_offset) (IAnjutaSymbolQuery *obj, gint offset, GError **err);
	void (*set_order_by) (IAnjutaSymbolQuery *obj, IAnjutaSymbolField field, GError **err);
};


enum IAnjutaSymbolQueryMode

typedef enum {
	IANJUTA_SYMBOL_QUERY_MODE_SYNC,
	IANJUTA_SYMBOL_QUERY_MODE_ASYNC,
	IANJUTA_SYMBOL_QUERY_MODE_QUEUED
} IAnjutaSymbolQueryMode;

This parameter determines the mode of query execution. By default, IANJUTA_SYMBOL_QUERY_MODE_SYNC is selected.

IANJUTA_SYMBOL_QUERY_MODE_SYNC

Syncronous query. The result is immediately available as retrun value of search call.

IANJUTA_SYMBOL_QUERY_MODE_ASYNC

Asynchronous query. The search call return immediately and result delievered as a signal later. The actual query is done in a separate thread.

IANJUTA_SYMBOL_QUERY_MODE_QUEUED

If the database is busy scanning, then the query is performed later when database is ready. It returns NULL and result is delivered through async-result signal. Only query can stay queued, so calling search multiple times would result in only the last one being active.

enum IAnjutaSymbolQueryName

typedef enum {
	IANJUTA_SYMBOL_QUERY_SEARCH,
	IANJUTA_SYMBOL_QUERY_SEARCH_ALL,
	IANJUTA_SYMBOL_QUERY_SEARCH_FILE,
	IANJUTA_SYMBOL_QUERY_SEARCH_IN_SCOPE,
	IANJUTA_SYMBOL_QUERY_SEARCH_ID,
	IANJUTA_SYMBOL_QUERY_SEARCH_MEMBERS,
	IANJUTA_SYMBOL_QUERY_SEARCH_CLASS_PARENTS,
	IANJUTA_SYMBOL_QUERY_SEARCH_SCOPE,
	IANJUTA_SYMBOL_QUERY_SEARCH_PARENT_SCOPE,
	IANJUTA_SYMBOL_QUERY_SEARCH_PARENT_SCOPE_FILE
} IAnjutaSymbolQueryName;

Names of query that defined what kind of query it is.

IANJUTA_SYMBOL_QUERY_SEARCH

Query to perform basic substring search.

IANJUTA_SYMBOL_QUERY_SEARCH_ALL

Query to get all symbols

IANJUTA_SYMBOL_QUERY_SEARCH_FILE

Query to perform substring search in a file.

IANJUTA_SYMBOL_QUERY_SEARCH_IN_SCOPE

Query to perform substring search in a scope.

IANJUTA_SYMBOL_QUERY_SEARCH_ID

Query to find the symbol of given ID.

IANJUTA_SYMBOL_QUERY_SEARCH_MEMBERS

Query to find members of a scope (eg. class).

IANJUTA_SYMBOL_QUERY_SEARCH_CLASS_PARENTS

Query to get parents of a class.

IANJUTA_SYMBOL_QUERY_SEARCH_SCOPE

Query to find scope name of a file position.

IANJUTA_SYMBOL_QUERY_SEARCH_PARENT_SCOPE

Query to get the parent scope of a symbol.

IANJUTA_SYMBOL_QUERY_SEARCH_PARENT_SCOPE_FILE

Query to get the parent scope of a symbol in the file.

ianjuta_symbol_query_cancel ()

void                ianjuta_symbol_query_cancel         (IAnjutaSymbolQuery *obj,
                                                         GError **err);


ianjuta_symbol_query_error_quark ()

GQuark              ianjuta_symbol_query_error_quark    (void);


ianjuta_symbol_query_search ()

IAnjutaIterable *   ianjuta_symbol_query_search         (IAnjutaSymbolQuery *obj,
                                                         const gchar *pattern,
                                                         GError **err);

Executes IANJUTA_SYMBOL_QUERY_SEARCH query.

obj :

Self

pattern :

Search pattern in compliance with SQL LIKE syntax

err :

Error propagation and reporting.

ianjuta_symbol_query_search_all ()

IAnjutaIterable *   ianjuta_symbol_query_search_all     (IAnjutaSymbolQuery *obj,
                                                         GError **err);

Executes IANJUTA_SYMBOL_QUERY_SEARCH_ALL query.

obj :

Self

err :

Error propagation and reporting.

ianjuta_symbol_query_search_class_parents ()

IAnjutaIterable *   ianjuta_symbol_query_search_class_parents
                                                        (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbol *symbol,
                                                         GError **err);

Executes IANJUTA_SYMBOL_QUERY_SEARCH_CLASS_PARENTS query.

obj :

Self

symbol :

The class symbol whose parents to get.

err :

Error propagation and reporting.

ianjuta_symbol_query_search_file ()

IAnjutaIterable *   ianjuta_symbol_query_search_file    (IAnjutaSymbolQuery *obj,
                                                         const gchar *pattern,
                                                         const GFile *file,
                                                         GError **err);

Executes IANJUTA_SYMBOL_QUERY_SEARCH_FILE query.

obj :

Self

pattern :

Search pattern in compliance with SQL LIKE syntax

file :

The file whose symbols are searched.

err :

Error propagation and reporting.

ianjuta_symbol_query_search_id ()

IAnjutaIterable *   ianjuta_symbol_query_search_id      (IAnjutaSymbolQuery *obj,
                                                         gint symbol_id,
                                                         GError **err);

Executes IANJUTA_SYMBOL_QUERY_SEARCH_ID query.

obj :

Self

err :

Error propagation and reporting.

ianjuta_symbol_query_search_in_scope ()

IAnjutaIterable *   ianjuta_symbol_query_search_in_scope
                                                        (IAnjutaSymbolQuery *obj,
                                                         const gchar *pattern,
                                                         IAnjutaSymbol *scope,
                                                         GError **err);

Executes IANJUTA_SYMBOL_QUERY_SEARCH_IN_SCOPE query.

obj :

Self

pattern :

Search pattern in compliance with SQL LIKE syntax

scope :

The scope inside which symbols are searched.

err :

Error propagation and reporting.

ianjuta_symbol_query_search_members ()

IAnjutaIterable *   ianjuta_symbol_query_search_members (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbol *symbol,
                                                         GError **err);

Executes IANJUTA_SYMBOL_QUERY_SEARCH_MEMBERS query.

obj :

Self

symbol :

The symbol whose members to get.

err :

Error propagation and reporting.

ianjuta_symbol_query_search_parent_scope ()

IAnjutaIterable *   ianjuta_symbol_query_search_parent_scope
                                                        (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbol *symbol,
                                                         GError **err);

Executes IANJUTA_SYMBOL_QUERY_SEARCH_PARENT_SCOPE query.

obj :

Self

symbol :

The symbol whose parent scope is to be found.

err :

Error propagation and reporting.

ianjuta_symbol_query_search_parent_scope_file ()

IAnjutaIterable *   ianjuta_symbol_query_search_parent_scope_file
                                                        (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbol *symbol,
                                                         const gchar *file_path,
                                                         GError **err);

Executes IANJUTA_SYMBOL_QUERY_SEARCH_PARENT_SCOPE_FILE query.

obj :

Self

symbol :

The symbol whose parent scope is to be found.

file_path :

The file where the parent scope is to be found.

err :

Error propagation and reporting.

ianjuta_symbol_query_search_scope ()

IAnjutaIterable *   ianjuta_symbol_query_search_scope   (IAnjutaSymbolQuery *obj,
                                                         const gchar *file_path,
                                                         gint line,
                                                         GError **err);

Executes IANJUTA_SYMBOL_QUERY_SEARCH_SCOPE query.

obj :

Self

file_path :

The file where the scope is.

line :

The line where the scope is.

err :

Error propagation and reporting.

ianjuta_symbol_query_set_fields ()

void                ianjuta_symbol_query_set_fields     (IAnjutaSymbolQuery *obj,
                                                         gint n_fields,
                                                         IAnjutaSymbolField *fields,
                                                         GError **err);

Sets the fields of Query.

obj :

Self

n_fields :

Then number of fields to retrieve.

fields :

The fields to retrieve in the query. The array length must be n_fields.

err :

Error propagation and reporting.

ianjuta_symbol_query_set_file_scope ()

void                ianjuta_symbol_query_set_file_scope (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbolQueryFileScope filescope_search,
                                                         GError **err);

Sets the filescope search of Query.

obj :

Self

filescope_search :

The filescope to search.

err :

Error propagation and reporting.

ianjuta_symbol_query_set_filters ()

void                ianjuta_symbol_query_set_filters    (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbolType filters,
                                                         gboolean includes_types,
                                                         GError **err);

Sets the bit mask of symbol type filters. if include_types is TRUE, symbols satisfying the given symbol types are selected, otherwise they are excluded.

obj :

Self

filters :

The mode of query.

err :

Error propagation and reporting.

ianjuta_symbol_query_set_group_by ()

void                ianjuta_symbol_query_set_group_by   (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbolField field,
                                                         GError **err);

Sets the field with which result of query is grouped. As a result there will be no duplicates of with this field.

obj :

Self

field :

The field to group results.

err :

Error propagation and reporting.

ianjuta_symbol_query_set_limit ()

void                ianjuta_symbol_query_set_limit      (IAnjutaSymbolQuery *obj,
                                                         gint limit,
                                                         GError **err);

Sets the limit of Query results. No more than limit results are returned.

obj :

Self

limit :

The limit of query.

err :

Error propagation and reporting.

ianjuta_symbol_query_set_mode ()

void                ianjuta_symbol_query_set_mode       (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbolQueryMode mode,
                                                         GError **err);

Sets the mode of Query.

obj :

Self

mode :

The mode of query.

err :

Error propagation and reporting.

ianjuta_symbol_query_set_offset ()

void                ianjuta_symbol_query_set_offset     (IAnjutaSymbolQuery *obj,
                                                         gint offset,
                                                         GError **err);

Sets the offset index of Query results.

obj :

Self

offset :

Offset of the resultset.

err :

Error propagation and reporting.

ianjuta_symbol_query_set_order_by ()

void                ianjuta_symbol_query_set_order_by   (IAnjutaSymbolQuery *obj,
                                                         IAnjutaSymbolField field,
                                                         GError **err);

Sets the field with which result of query is ordered.

obj :

Self

field :

The field to order the result.

err :

Error propagation and reporting.

See Also

IAnjutaSymbolManager, IAnjutaSymbol