## GdaSqlStatement

GdaSqlStatement — SQL statement

## Stability Level

Stable, unless otherwise indicated

## Functions

GdaSqlStatement * | gda_sql_statement_new ()
GdaSqlStatement * | gda_sql_statement_copy ()
void | gda_sql_statement_free ()
gchar * | gda_sql_statement_serialize ()
const gchar * | gda_sql_statement_type_to_string ()
GdaSqlStatementType | gda_sql_statement_string_to_type ()
gboolean | gda_sql_statement_check_structure ()
gboolean | gda_sql_statement_check_validity ()
gboolean | gda_sql_statement_check_validity_m ()
void | gda_sql_statement_check_clean ()
gboolean | gda_sql_statement_normalize ()
#define | GDA_SQL_ANY_PART()
gboolean | (*GdaSqlForeachFunc) ()
gboolean | gda_sql_any_part_foreach ()
void | gda_sql_statement_unknown_take_expressions ()
void | gda_sql_statement_trans_take_mode ()
void | gda_sql_statement_trans_take_name ()
void | gda_sql_statement_trans_set_isol_level ()
void | gda_sql_statement_select_take_distinct ()
void | gda_sql_statement_select_take_expr_list ()
void | gda_sql_statement_select_take_from ()
void | gda_sql_statement_select_take_where_cond ()
void | gda_sql_statement_select_take_group_by ()
void | gda_sql_statement_select_take_having_cond ()
void | gda_sql_statement_select_take_order_by ()
void | gda_sql_statement_select_take_limits ()
void | gda_sql_statement_insert_take_table_name ()
void | gda_sql_statement_insert_take_on_conflict ()
void | gda_sql_statement_insert_take_fields_list ()
void | gda_sql_statement_insert_take_1_values_list ()
void | gda_sql_statement_insert_take_extra_values_list ()
void | gda_sql_statement_insert_take_select ()
void | gda_sql_statement_delete_take_table_name ()
void | gda_sql_statement_delete_take_condition ()
void | gda_sql_statement_update_take_table_name ()
void | gda_sql_statement_update_take_on_conflict ()
void | gda_sql_statement_update_take_condition ()
void | gda_sql_statement_update_take_set_value ()
void | gda_sql_statement_compound_set_type ()
void | gda_sql_statement_compound_take_stmt ()
GdaSqlExpr * | gda_sql_expr_new ()
void | gda_sql_expr_free ()
GdaSqlExpr * | gda_sql_expr_copy ()
gchar * | gda_sql_expr_serialize ()
void | gda_sql_expr_take_select ()
GdaSqlParamSpec * | gda_sql_param_spec_new ()
GdaSqlParamSpec * | gda_sql_param_spec_copy ()
void | gda_sql_param_spec_take_name ()
void | gda_sql_param_spec_take_type ()
void | gda_sql_param_spec_take_descr ()
void | gda_sql_param_spec_take_nullok ()
void | gda_sql_param_spec_free ()
gchar * | gda_sql_param_spec_serialize ()
GdaSqlField * | gda_sql_field_new ()
void | gda_sql_field_free ()
GdaSqlField * | gda_sql_field_copy ()
gchar * | gda_sql_field_serialize ()
void | gda_sql_field_take_name ()
GdaSqlTable * | gda_sql_table_new ()
void | gda_sql_table_free ()
GdaSqlTable * | gda_sql_table_copy ()
gchar * | gda_sql_table_serialize ()
void | gda_sql_table_take_name ()
GdaSqlFunction * | gda_sql_function_new ()
void | gda_sql_function_free ()
GdaSqlFunction * | gda_sql_function_copy ()
gchar * | gda_sql_function_serialize ()
void | gda_sql_function_take_name ()
void | gda_sql_function_take_args_list ()
GdaSqlOperation * | gda_sql_operation_new ()
void | gda_sql_operation_free ()
GdaSqlOperation * | gda_sql_operation_copy ()
gchar * | gda_sql_operation_serialize ()
const gchar * | gda_sql_operation_operator_to_string ()
GdaSqlOperatorType | gda_sql_operation_operator_from_string ()
GdaSqlCase * | gda_sql_case_new ()
void | gda_sql_case_free ()
GdaSqlCase * | gda_sql_case_copy ()
gchar * | gda_sql_case_serialize ()
GdaSqlSelectField * | gda_sql_select_field_new ()
void | gda_sql_select_field_free ()
GdaSqlSelectField * | gda_sql_select_field_copy ()
gchar * | gda_sql_select_field_serialize ()
void | gda_sql_select_field_take_star_value ()
void | gda_sql_select_field_take_expr ()
void | gda_sql_select_field_take_alias ()
GdaSqlSelectTarget * | gda_sql_select_target_new ()
void | gda_sql_select_target_free ()
GdaSqlSelectTarget * | gda_sql_select_target_copy ()
gchar * | gda_sql_select_target_serialize ()
void | gda_sql_select_target_take_table_name ()
void | gda_sql_select_target_take_select ()
void | gda_sql_select_target_take_alias ()
GdaSqlSelectJoin * | gda_sql_select_join_new ()
void | gda_sql_select_join_free ()
GdaSqlSelectJoin * | gda_sql_select_join_copy ()
gchar * | gda_sql_select_join_serialize ()
const gchar * | gda_sql_select_join_type_to_string ()
GdaSqlSelectFrom * | gda_sql_select_from_new ()
void | gda_sql_select_from_free ()
GdaSqlSelectFrom * | gda_sql_select_from_copy ()
gchar * | gda_sql_select_from_serialize ()
void | gda_sql_select_from_take_new_target ()
void | gda_sql_select_from_take_new_join ()
GdaSqlSelectOrder * | gda_sql_select_order_new ()
void | gda_sql_select_order_free ()
GdaSqlSelectOrder * | gda_sql_select_order_copy ()
gchar * | gda_sql_select_order_serialize ()
gchar * | gda_sql_value_stringify ()

## Types and Values

| GdaSqlStatement
enum | GdaSqlStatementType
struct | GdaSqlAnyPart
enum | GdaSqlAnyPartType
| GdaSqlStatementUnknown
| GdaSqlStatementTransaction
| GdaSqlStatementSelect
| GdaSqlStatementInsert
| GdaSqlStatementDelete
| GdaSqlStatementUpdate
| GdaSqlStatementCompound
enum | GdaSqlStatementCompoundType
struct | GdaSqlExpr
struct | GdaSqlParamSpec
struct | GdaSqlField
struct | GdaSqlTable
struct | GdaSqlFunction
struct | GdaSqlOperation
enum | GdaSqlOperatorType
struct | GdaSqlCase
struct | GdaSqlSelectField
struct | GdaSqlSelectTarget
struct | GdaSqlSelectJoin
enum | GdaSqlSelectJoinType
struct | GdaSqlSelectFrom
struct | GdaSqlSelectOrder

## Includes

    #include <libgda/sql-parser/gda-sql-statement.h>

## Description

Use the GdaSqlBuilder object to build GdaSqlStatement structures.

Every SQL statement can be decomposed in a GdaSqlStatement structure. This is not a GObject, but rather just a C structure which can be manipulated directly. The structure is a tree composed of several key structures which are show in the following diagram (even though it does not show, all structures "inherit" the GdaSqlAnyPart structure which holds some basic information).

Main parts of the GdaSqlStatement structure.

The samples/SqlParserConsole directory of Libgda's sources contains a small utility to display statements' structures as a graph (using the GraphViz language). It has been used to provide the examples in this section of the documentation.

## Functions

### gda_sql_statement_new ()

    GdaSqlStatement *
    gda_sql_statement_new (GdaSqlStatementType type);

Use this function to create a GdaSqlStatement of the specified `type` type.

#### Parameters

type | type of statement to create |

#### Returns

a new GdaSqlStatement

### gda_sql_statement_copy ()

    GdaSqlStatement *
    gda_sql_statement_copy (GdaSqlStatement *stmt);

Creates a copy of `stmt` .

#### Parameters

stmt | a GdaSqlStatement pointer |

#### Returns

a new GdaSqlStatement

### gda_sql_statement_free ()

    void
    gda_sql_statement_free (GdaSqlStatement *stmt);

Releases any memory associated to `stmt` .

#### Parameters

stmt | a GdaSqlStatement pointer |

### gda_sql_statement_serialize ()

    gchar *
    gda_sql_statement_serialize (GdaSqlStatement *stmt);

Creates a string representation of `stmt` .

#### Parameters

stmt | a GdaSqlStatement pointer |

#### Returns

a new string

### gda_sql_statement_type_to_string ()

    const gchar *
    gda_sql_statement_type_to_string (GdaSqlStatementType type);

Converts a GdaSqlStatementType to a string, see also `gda_sql_statement_string_to_type()`

#### Parameters

type | a GdaSqlStatementType value |

#### Returns

a constant string

### gda_sql_statement_string_to_type ()

    GdaSqlStatementType
    gda_sql_statement_string_to_type (const gchar *type);

Converts a string to a GdaSqlStatementType value, see also `gda_sql_statement_type_to_string()`

#### Parameters

type | a string representing a GdaSqlStatementType type |

#### Returns

a GdaSqlStatementType value

### gda_sql_statement_check_structure ()

    gboolean
    gda_sql_statement_check_structure (GdaSqlStatement *stmt,
                                       GError **error);

Checks for any error in `stmt` 's structure to make sure the statement is valid (for example a SELECT statement must at least return a column, a DELETE statement must specify which table is targeted).

#### Parameters

stmt | a GdaSqlStatement pointer |
error | a place to store errors, or `NULL` |

#### Returns

TRUE if no error occurred

### gda_sql_statement_check_validity ()

    gboolean
    gda_sql_statement_check_validity (GdaSqlStatement *stmt,
                                      GdaConnection *cnc,
                                      GError **error);

If `cnc` is not `NULL`, then checks that all the database objects referenced in the statement actually exist in the connection's database (for example the table being updated in a UPDATE statement must exist in the connection's database for the check to succeed). This method fills the `stmt` ->validity_meta_struct attribute.

If `cnc` is `NULL`, then remove any information from a previous call to this method stored in `stmt` . In this case, the `stmt` ->validity_meta_struct attribute is cleared.

Also note that some parts of `stmt` may be modified: for example leading and trailing spaces in aliases or objects names will be removed.

#### Parameters

stmt | a GdaSqlStatement pointer |
cnc | a GdaConnection object, or `NULL`. | [allow-none]
error | a place to store errors, or `NULL` |

#### Returns

TRUE if no error occurred

### gda_sql_statement_check_validity_m ()

    gboolean
    gda_sql_statement_check_validity_m (GdaSqlStatement *stmt,
                                        GdaMetaStruct *mstruct,
                                        GError **error);

If `mstruct` is not `NULL`, then checks that all the database objects referenced in the statement i actually referenced in `mstruct` (for example the table being updated in a UPDATE statement must exist in the connection's database for the check to succeed). This method sets the `stmt` ->validity_meta_struct attribute to `mstruct` .

If `mstruct` is `NULL`, then remove any information from a previous call to this method stored in `stmt` . In this case, the `stmt` ->validity_meta_struct attribute is cleared.

Also note that some parts of `stmt` may be modified: for example leading and trailing spaces in aliases or objects names will be removed.

#### Parameters

stmt | a GdaSqlStatement pointer |
mstruct | a GdaMetaStruct object, or `NULL`. | [allow-none]
error | a place to store errors, or `NULL` |

#### Returns

TRUE if no error occurred

Since: 4.2

### gda_sql_statement_check_clean ()

    void
    gda_sql_statement_check_clean (GdaSqlStatement *stmt);

Cleans any data set by a previous call to `gda_sql_statement_check_validity()`.

#### Parameters

stmt | a pinter to a GdaSqlStatement structure |

### gda_sql_statement_normalize ()

    gboolean
    gda_sql_statement_normalize (GdaSqlStatement *stmt,
                                 GdaConnection *cnc,
                                 GError **error);

"Normalizes" (in place) some parts of `stmt` , which means `stmt` may be modified. At the moment any "*" field in a SELECT statement will be replaced by one GdaSqlSelectField structure for each field in the referenced table.

#### Parameters

stmt | a pointer to a GdaSqlStatement structure |
cnc | a GdaConnection object, or `NULL`. | [allow-none]
error | a place to store errors, or `NULL` |

#### Returns

TRUE if no error occurred

### GDA_SQL_ANY_PART()

    #define GDA_SQL_ANY_PART(x) ((GdaSqlAnyPart*)(x))

### GdaSqlForeachFunc ()

    gboolean
    (*GdaSqlForeachFunc) (GdaSqlAnyPart *part,
                          gpointer data,
                          GError **error);

Specifies the type of functions passed to `gda_sql_any_part_foreach()`.

[skip]

#### Parameters

part | the current GdaSqlAnyPart node |
data | user data passed to `gda_sql_any_part_foreach()`. |
error | pointer to a place to store errors |

#### Returns

FALSE if the `gda_sql_any_part_foreach()` should stop at this point and fail

### gda_sql_any_part_foreach ()

    gboolean
    gda_sql_any_part_foreach (GdaSqlAnyPart *node,
                              GdaSqlForeachFunc func,
                              gpointer data,
                              GError **error);

Calls a function for each element of a GdaSqlAnyPart node

#### Parameters

node | the stat node |
func | function to call for each sub node. | [scope call]
data | data to pass to `func` each time it is called. | [closure]
error | a place to store errors, or `NULL` (is also passed to `func` ) |

#### Returns

TRUE if `func` has been called for any sub node of `node` and always returned TRUE, or FALSE otherwise.

### gda_sql_statement_unknown_take_expressions ()

    void
    gda_sql_statement_unknown_take_expressions
                                   (GdaSqlStatement *stmt,
                                    GSList *expressions);

Sets `stmt` 's list of expressions

`expressions` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
expressions | a list of GdaSqlExpr pointers |

### gda_sql_statement_trans_take_mode ()

    void
    gda_sql_statement_trans_take_mode (GdaSqlStatement *stmt,
                                       GValue *value);

Sets the model of the transaction

`value` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
value | a G_TYPE_STRING value. | [transfer full]

### gda_sql_statement_trans_take_name ()

    void
    gda_sql_statement_trans_take_name (GdaSqlStatement *stmt,
                                       GValue *value);

Sets the name of the transaction

`value` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
value | a G_TYPE_STRING value. | [transfer full]

### gda_sql_statement_trans_set_isol_level ()

    void
    gda_sql_statement_trans_set_isol_level
                                   (GdaSqlStatement *stmt,
                                    GdaTransactionIsolation level);

### gda_sql_statement_select_take_distinct ()

    void
    gda_sql_statement_select_take_distinct
                                   (GdaSqlStatement *stmt,
                                    gboolean distinct,
                                    GdaSqlExpr *distinct_expr);

Sets the DISTINCT clause of `stmt` .

`distinct_expr` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
distinct | a TRUE/FALSE value |
distinct_expr | a GdaSqlExpr pointer representing what the DISTINCT is on, or `NULL`. | [allow-none]

### gda_sql_statement_select_take_expr_list ()

    void
    gda_sql_statement_select_take_expr_list
                                   (GdaSqlStatement *stmt,
                                    GSList *expr_list);

Sets list of expressions selected by `stmt`

`expr_list` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
expr_list | a list of GdaSqlSelectField pointers |

### gda_sql_statement_select_take_from ()

    void
    gda_sql_statement_select_take_from (GdaSqlStatement *stmt,
                                        GdaSqlSelectFrom *from);

Sets the FROM clause of `stmt`

`from` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
from | a GdaSqlSelectFrom pointer |

### gda_sql_statement_select_take_where_cond ()

    void
    gda_sql_statement_select_take_where_cond
                                   (GdaSqlStatement *stmt,
                                    GdaSqlExpr *expr);

Sets the WHERE clause of `stmt`

`expr` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
expr | a GdaSqlExpr pointer |

### gda_sql_statement_select_take_group_by ()

    void
    gda_sql_statement_select_take_group_by
                                   (GdaSqlStatement *stmt,
                                    GSList *group_by);

Sets the GROUP BY clause of `stmt`

`group_by` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
group_by | a list of GdaSqlExpr pointer |

### gda_sql_statement_select_take_having_cond ()

    void
    gda_sql_statement_select_take_having_cond
                                   (GdaSqlStatement *stmt,
                                    GdaSqlExpr *expr);

Sets the HAVING clause of `stmt`

`expr` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
expr | a GdaSqlExpr pointer |

### gda_sql_statement_select_take_order_by ()

    void
    gda_sql_statement_select_take_order_by
                                   (GdaSqlStatement *stmt,
                                    GSList *order_by);

Sets the ORDER BY clause of `stmt`

`order_by` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
order_by | a list of GdaSqlSelectOrder pointer |

### gda_sql_statement_select_take_limits ()

    void
    gda_sql_statement_select_take_limits (GdaSqlStatement *stmt,
                                          GdaSqlExpr *count,
                                          GdaSqlExpr *offset);

Sets the LIMIT clause of `stmt`

`count` and `offset` 's responsibility are transferred to `stmt` (which means `stmt` is then responsible for freeing them when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
count | a GdaSqlExpr pointer |
offset | a GdaSqlExpr pointer |

### gda_sql_statement_insert_take_table_name ()

    void
    gda_sql_statement_insert_take_table_name
                                   (GdaSqlStatement *stmt,
                                    GValue *value);

Sets the name of the table to insert into in `stmt` . `value` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
value | name of the table to insert into, as a G_TYPE_STRING GValue |

### gda_sql_statement_insert_take_on_conflict ()

    void
    gda_sql_statement_insert_take_on_conflict
                                   (GdaSqlStatement *stmt,
                                    GValue *value);

Sets the name of the resolution conflict algorithm used by `stmt` . `value` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
value | name of the resolution conflict algorithm, as a G_TYPE_STRING GValue |

### gda_sql_statement_insert_take_fields_list ()

    void
    gda_sql_statement_insert_take_fields_list
                                   (GdaSqlStatement *stmt,
                                    GSList *list);

Sets the list of fields for which values will be specified in `stmt` . `list` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
list | a list of GdaSqlField pointers |

### gda_sql_statement_insert_take_1_values_list ()

    void
    gda_sql_statement_insert_take_1_values_list
                                   (GdaSqlStatement *stmt,
                                    GSList *list);

Sets a list of list of values to be inserted by `stmt` . `list` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
list | a list of GSList of GdaSqlExpr pointers |

### gda_sql_statement_insert_take_extra_values_list ()

    void
    gda_sql_statement_insert_take_extra_values_list
                                   (GdaSqlStatement *stmt,
                                    GSList *list);

### gda_sql_statement_insert_take_select ()

    void
    gda_sql_statement_insert_take_select (GdaSqlStatement *stmt,
                                          GdaSqlStatement *select);

Specifies a SELECT statement, the values inserted will be the result set of `select` . `select` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
select | a SELECT or COMPOUND GdaSqlStatement pointer |

### gda_sql_statement_delete_take_table_name ()

    void
    gda_sql_statement_delete_take_table_name
                                   (GdaSqlStatement *stmt,
                                    GValue *value);

Sets the name of the table to delete from in `stmt` . `value` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
value | a table name as a G_TYPE_STRING GValue |

### gda_sql_statement_delete_take_condition ()

    void
    gda_sql_statement_delete_take_condition
                                   (GdaSqlStatement *stmt,
                                    GdaSqlExpr *cond);

Sets the WHERE condition of `stmt` . `cond` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
cond | the WHERE condition of the DELETE statement, as a GdaSqlExpr |

### gda_sql_statement_update_take_table_name ()

    void
    gda_sql_statement_update_take_table_name
                                   (GdaSqlStatement *stmt,
                                    GValue *value);

Sets the name of the table to delete from in `stmt` .

`value` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
value | a table name, as a G_TYPE_STRING GValue |

### gda_sql_statement_update_take_on_conflict ()

    void
    gda_sql_statement_update_take_on_conflict
                                   (GdaSqlStatement *stmt,
                                    GValue *value);

Sets the name of the resolution conflict algorithm used by `stmt` . `value` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
value | name of the resolution conflict algorithm, as a G_TYPE_STRING GValue |

### gda_sql_statement_update_take_condition ()

    void
    gda_sql_statement_update_take_condition
                                   (GdaSqlStatement *stmt,
                                    GdaSqlExpr *cond);

Sets the WHERE clause of `stmt`

`expr` 's ownership is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
cond | a GdaSqlExpr pointer |

### gda_sql_statement_update_take_set_value ()

    void
    gda_sql_statement_update_take_set_value
                                   (GdaSqlStatement *stmt,
                                    GValue *fname,
                                    GdaSqlExpr *expr);

Specifies that the field named `fname` will be updated with the expression `expr` .

`fname` and `expr` 's responsibility are transferred to `stmt` (which means `stmt` is then responsible for freeing them when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
fname | a field name, as a G_TYPE_STRING GValue |
expr | a GdaSqlExpr pointer |

### gda_sql_statement_compound_set_type ()

    void
    gda_sql_statement_compound_set_type (GdaSqlStatement *stmt,
                                         GdaSqlStatementCompoundType type);

Specifies `stmt` 's type of compound

#### Parameters

stmt | a GdaSqlStatement pointer |
type | a GdaSqlStatementCompoundType value |

### gda_sql_statement_compound_take_stmt ()

    void
    gda_sql_statement_compound_take_stmt (GdaSqlStatement *stmt,
                                          GdaSqlStatement *s);

Adds the `s` sub-statement to the `stmt` compound statement. `s` 's reference is transferred to `stmt` (which means `stmt` is then responsible for freeing it when no longer needed).

#### Parameters

stmt | a GdaSqlStatement pointer |
s | a GdaSqlStatement pointer |

### gda_sql_expr_new ()

    GdaSqlExpr *
    gda_sql_expr_new (GdaSqlAnyPart *parent);

Creates a new GdaSqlField structure, using `parent` as its parent part.

#### Parameters

parent | a GdaSqlStatementInsert, GdaSqlStatementUpdate, GdaSqlSelectField, GdaSqlSelectTarget, GdaSqlOperation |

#### Returns

a new GdaSqlField structure.

### gda_sql_expr_free ()

    void
    gda_sql_expr_free (GdaSqlExpr *expr);

Frees a GdaSqlExpr structure and its members.

#### Parameters

expr | a GdaSqlExpr to be freed. |

### gda_sql_expr_copy ()

    GdaSqlExpr *
    gda_sql_expr_copy (GdaSqlExpr *expr);

Creates a new GdaSqlExpr structure initiated with the values stored in `expr` .

#### Parameters

expr | a GdaSqlExpr |

#### Returns

a new GdaSqlExpr structure.

### gda_sql_expr_serialize ()

    gchar *
    gda_sql_expr_serialize (GdaSqlExpr *expr);

Creates a new string representation of the SQL expression. You need to free the returned string using `g_free()`;

#### Parameters

expr | a GdaSqlExpr structure |

#### Returns

a new string with the SQL expression or "null" in case `expr` is invalid.

### gda_sql_expr_take_select ()

    void
    gda_sql_expr_take_select (GdaSqlExpr *expr,
                              GdaSqlStatement *stmt);

Sets the expression's parent to the GdaSqlStatementSelect held by `stmt` . After calling this function `stmt` is freed.

#### Parameters

expr | a GdaSqlExpr structure |
stmt | a GdaSqlStatement holding the GdaSqlStatementSelect to take from |

### gda_sql_param_spec_new ()

    GdaSqlParamSpec *
    gda_sql_param_spec_new (GValue *simple_spec);

`value` must contain a string representing a variable, see the documentation associated to the GdaSqlParser object.

`value` is destroyed by this function.

#### Parameters

value | a G_TYPE_STRING GValue. | [transfer full]

#### Returns

a new GdaSqlParamSpec

### gda_sql_param_spec_copy ()

    GdaSqlParamSpec *
    gda_sql_param_spec_copy (GdaSqlParamSpec *pspec);

Creates a copy of `pspec` .

#### Parameters

pspec | GdaSqlParamSpec pointer |

#### Returns

a new GdaSqlParamSpec

### gda_sql_param_spec_take_name ()

    void
    gda_sql_param_spec_take_name (GdaSqlParamSpec *pspec,
                                  GValue *value);

Sets `pspec` 's name. `value` 's ownership is transferred to `pspec` (which means `pspec` is then responsible for freeing it when no longer needed).

#### Parameters

pspec | a GdaSqlParamSpec pointer |
value | a G_TYPE_STRING GValue. | [transfer full]

### gda_sql_param_spec_take_type ()

    void
    gda_sql_param_spec_take_type (GdaSqlParamSpec *pspec,
                                  GValue *value);

Sets `pspec` 's data type. `value` 's ownership is transferred to `pspec` (which means `pspec` is then responsible for freeing it when no longer needed).

`value` must represent a data type, as understood by `gda_g_type_from_string()`.

#### Parameters

pspec | a GdaSqlParamSpec pointer |
value | a G_TYPE_STRING GValue. | [transfer full]

### gda_sql_param_spec_take_descr ()

    void
    gda_sql_param_spec_take_descr (GdaSqlParamSpec *pspec,
                                   GValue *value);

Sets `pspec` 's description. `value` 's ownership is transferred to `pspec` (which means `pspec` is then responsible for freeing it when no longer needed).

#### Parameters

pspec | a GdaSqlParamSpec pointer |
value | a G_TYPE_STRING GValue. | [transfer full]

### gda_sql_param_spec_take_nullok ()

    void
    gda_sql_param_spec_take_nullok (GdaSqlParamSpec *pspec,
                                    GValue *value);

Sets `pspec` 's ability of being NULL. `value` 's ownership is transferred to `pspec` (which means `pspec` is then responsible for freeing it when no longer needed).

If `value` 's string starts by 't' or 'T' then `pspec` will be allowed to be `NULL`

#### Parameters

pspec | a GdaSqlParamSpec pointer |
value | a G_TYPE_STRING GValue. | [transfer full]

### gda_sql_param_spec_free ()

    void
    gda_sql_param_spec_free (GdaSqlParamSpec *pspec);

Destroys `pspec` .

#### Parameters

pspec | GdaSqlParamSpec pointer |

### gda_sql_param_spec_serialize ()

    gchar *
    gda_sql_param_spec_serialize (GdaSqlParamSpec *pspec);

Creates a new string representing `pspec` .

#### Parameters

pspec | a GdaSqlParamSpec pointer |

#### Returns

a new string.

### gda_sql_field_new ()

    GdaSqlField *
    gda_sql_field_new (GdaSqlAnyPart *parent);

Creates a new GdaSqlField structure, using `parent` as its parent part.

#### Parameters

parent | a GdaSqlStatementSelect, GdaSqlStatementInsert, GdaSqlStatementDelete, GdaSqlStatementUpdate |

#### Returns

a new GdaSqlField structure.

### gda_sql_field_free ()

    void
    gda_sql_field_free (GdaSqlField *field);

Frees a GdaSqlField structure and its members.

#### Parameters

field | a GdaSqlField to be freed. |

### gda_sql_field_copy ()

    GdaSqlField *
    gda_sql_field_copy (GdaSqlField *field);

Creates a new GdaSqlField structure initiated with the values stored in `field` .

#### Parameters

field | a GdaSqlAnyPart |

#### Returns

a new GdaSqlField structure.

### gda_sql_field_serialize ()

    gchar *
    gda_sql_field_serialize (GdaSqlField *field);

Creates a new string representing a field. You need to free the returned string using `g_free()`;

#### Parameters

field | a GdaSqlField structure |

#### Returns

a new string with the name of the field or "null" in case `field` is invalid.

### gda_sql_field_take_name ()

    void
    gda_sql_field_take_name (GdaSqlField *field,
                             GValue *value);

Sets the field's name using the string held by `value` . When call, `value` is freed using `gda_value_free()`.

#### Parameters

field | a GdaSqlField structure |
value | a GValue holding a string to take from |

### gda_sql_table_new ()

    GdaSqlTable *
    gda_sql_table_new (GdaSqlAnyPart *parent);

Creates a new GdaSqlTable structure, using `parent` as its parent part.

#### Parameters

parent | a GdaSqlStatementSelect, GdaSqlStatementInsert, GdaSqlStatementDelete, GdaSqlStatementUpdate |

#### Returns

a new GdaSqlTable structure.

### gda_sql_table_free ()

    void
    gda_sql_table_free (GdaSqlTable *table);

Frees a GdaSqlTable structure and its members.

#### Parameters

table | a GdaSqlTable structure to be freed |

### gda_sql_table_copy ()

    GdaSqlTable *
    gda_sql_table_copy (GdaSqlTable *table);

Creates a new GdaSqlTable structure initiated with the values stored in `table` .

#### Parameters

table | a GdaSqlTable structure to be copied |

#### Returns

a new GdaSqlTable structure.

### gda_sql_table_serialize ()

    gchar *
    gda_sql_table_serialize (GdaSqlTable *table);

Creates a new string representing a table. You need to free the returned string using `g_free()`;

#### Parameters

field | a GdaSqlTable structure |

#### Returns

a new string with the name of the field or "null" in case `table` is invalid.

### gda_sql_table_take_name ()

    void
    gda_sql_table_take_name (GdaSqlTable *table,
                             GValue *value);

Sets the table's name using the string held by `value` . When call, `value` is freed using `gda_value_free()`.

#### Parameters

field | a GdaSqlTable structure |
value | a GValue holding a string to take from |

### gda_sql_function_new ()

    GdaSqlFunction *
    gda_sql_function_new (GdaSqlAnyPart *parent);

Creates a new GdaSqlFunction structure initiated.

#### Parameters

parent | a GdaSqlAnyPart structure |

#### Returns

a new GdaSqlFunction structure.

### gda_sql_function_free ()

    void
    gda_sql_function_free (GdaSqlFunction *function);

Frees a GdaSqlFunction structure and its members.

#### Parameters

function | a GdaSqlFunction structure to be freed |

### gda_sql_function_copy ()

    GdaSqlFunction *
    gda_sql_function_copy (GdaSqlFunction *function);

Creates a new GdaSqlFunction structure initiated with the values stored in `function` .

#### Parameters

function | a GdaSqlFunction structure to be copied |

#### Returns

a new GdaSqlFunction structure.

### gda_sql_function_serialize ()

    gchar *
    gda_sql_function_serialize (GdaSqlFunction *function);

Creates a new string representing a function. You need to free the returned string using `g_free()`;

#### Parameters

function | a GdaSqlFunction structure |

#### Returns

a new string with the description of the function or "null" in case `function` is invalid.

### gda_sql_function_take_name ()

    void
    gda_sql_function_take_name (GdaSqlFunction *function,
                                GValue *value);

Sets the function's name using the string held by `value` . When call, `value` is freed using `gda_value_free()`.

#### Parameters

function | a GdaSqlFunction structure |
value | a GValue holding a string to take from |

### gda_sql_function_take_args_list ()

    void
    gda_sql_function_take_args_list (GdaSqlFunction *function,
                                     GSList *args);

Sets the function's arguments to point to `args` , then sets the list's data elements' parent to `function` .

#### Parameters

function | a GdaSqlFunction structure |
args | a GSList to take from |

### gda_sql_operation_new ()

    GdaSqlOperation *
    gda_sql_operation_new (GdaSqlAnyPart *parent);

Creates a new GdaSqlOperation structure and sets its parent to `parent` .

#### Parameters

parent | a GdaSqlAnyPart structure |

#### Returns

a new GdaSqlOperation structure.

### gda_sql_operation_free ()

    void
    gda_sql_operation_free (GdaSqlOperation *operation);

Frees a GdaSqlOperation structure and its members.

#### Parameters

operation | a GdaSqlOperation structure to be freed |

### gda_sql_operation_copy ()

    GdaSqlOperation *
    gda_sql_operation_copy (GdaSqlOperation *operation);

Creates a new GdaSqlOperation structure initiated with the values stored in `operation` .

#### Parameters

operation | a GdaSqlOperation structure to be copied |

#### Returns

a new GdaSqlOperation structure.

### gda_sql_operation_serialize ()

    gchar *
    gda_sql_operation_serialize (GdaSqlOperation *operation);

Creates a new string representing an operator. You need to free the returned string using `g_free()`;

#### Parameters

operation | a GdaSqlOperation structure |

#### Returns

a new string with the description of the operator or "null" in case `operation` is invalid.

### gda_sql_operation_operator_to_string ()

    const gchar *
    gda_sql_operation_operator_to_string (GdaSqlOperatorType op);

Returns a constant string representing a operator name. You don't need to free the returned string.

#### Parameters

op | a GdaSqlOperation structure |

#### Returns

a string with the operator's name or NULL in case `op` is invalid.

### gda_sql_operation_operator_from_string ()

    GdaSqlOperatorType
    gda_sql_operation_operator_from_string
                                   (const gchar *op);

Returns GdaSqlOperatorType that correspond with the string `op` .

#### Parameters

op | a GdaSqlOperation structure |

#### Returns

GdaSqlOperatorType

### gda_sql_case_new ()

    GdaSqlCase *
    gda_sql_case_new (GdaSqlAnyPart *parent);

Creates a new GdaSqlCase structure and sets its parent to `parent` .

#### Parameters

parent | a GdaSqlAnyPart structure |

#### Returns

a new GdaSqlCase structure.

### gda_sql_case_free ()

    void
    gda_sql_case_free (GdaSqlCase *sc);

Frees a GdaSqlCase structure and its members.

#### Parameters

sc | a GdaSqlCase structure to be freed |

### gda_sql_case_copy ()

    GdaSqlCase *
    gda_sql_case_copy (GdaSqlCase *sc);

Creates a new GdaSqlCase structure initiated with the values stored in `sc` .

#### Parameters

sc | a GdaSqlCase structure to be copied |

#### Returns

a new GdaSqlCase structure.

### gda_sql_case_serialize ()

    gchar *
    gda_sql_case_serialize (GdaSqlCase *sc);

Creates a new string representing a CASE clause. You need to free the returned string using `g_free()`;

#### Parameters

sc | a GdaSqlCase structure |

#### Returns

a new string with the description of the CASE clause or "null" in case `sc` is invalid.

### gda_sql_select_field_new ()

    GdaSqlSelectField *
    gda_sql_select_field_new (GdaSqlAnyPart *parent);

Creates a new GdaSqlSelectField structure and sets its parent to `parent` . A GdaSqlSelectField is any expression in SELECT statements before the FROM clause.

#### Parameters

parent | a GdaSqlStatementSelect structure |

#### Returns

a new GdaSqlSelectField structure.

### gda_sql_select_field_free ()

    void
    gda_sql_select_field_free (GdaSqlSelectField *field);

Frees a GdaSqlSelectField structure and its members.

#### Parameters

field | a GdaSqlSelectField structure to be freed |

### gda_sql_select_field_copy ()

    GdaSqlSelectField *
    gda_sql_select_field_copy (GdaSqlSelectField *field);

Creates a new GdaSqlSelectField structure initiated with the values stored in `field` .

#### Parameters

field | a GdaSqlSelectField structure to be copied |

#### Returns

a new GdaSqlSelectField structure.

### gda_sql_select_field_serialize ()

    gchar *
    gda_sql_select_field_serialize (GdaSqlSelectField *field);

Creates a new string representing an expression used as field in a SELECT statement before the FROM clause.

#### Parameters

field | a GdaSqlSelectField structure |

#### Returns

a new string with the description of the expression or "null" in case `field` is invalid.

### gda_sql_select_field_take_star_value ()

    void
    gda_sql_select_field_take_star_value (GdaSqlSelectField *field,
                                          GValue *value);

Sets the expression field's value in the GdaSqlSelectField structure to point to `value` ; after this `field` is the owner of `value` .

#### Parameters

field | a GdaSqlSelectField structure |
value | a GValue to take from |

### gda_sql_select_field_take_expr ()

    void
    gda_sql_select_field_take_expr (GdaSqlSelectField *field,
                                    GdaSqlExpr *expr);

Sets the expression field in the GdaSqlSelectField structure to point to `expr` and modify it to sets its parent to `field` .

#### Parameters

field | a GdaSqlSelectField structure |
expr | a GdaSqlExpr to take from |

### gda_sql_select_field_take_alias ()

    void
    gda_sql_select_field_take_alias (GdaSqlSelectField *field,
                                     GValue *alias);

Sets the 'as' field's string in the GdaSqlSelectField structure. `alias` is freed after call this function.

#### Parameters

field | a GdaSqlSelectField structure |
alias | a GValue to take from |

### gda_sql_select_target_new ()

    GdaSqlSelectTarget *
    gda_sql_select_target_new (GdaSqlAnyPart *parent);

Creates a new GdaSqlSelectTarget structure and sets its parent to `parent` . A GdaSqlSelectTarget is the table in a SELECT statement.

#### Parameters

parent | a GdaSqlSelectFrom |

#### Returns

a new GdaSqlSelectTarget structure.

### gda_sql_select_target_free ()

    void
    gda_sql_select_target_free (GdaSqlSelectTarget *target);

Frees a GdaSqlSelectTarget structure and its members.

#### Parameters

target | a GdaSqlSelectTarget structure to be freed |

### gda_sql_select_target_copy ()

    GdaSqlSelectTarget *
    gda_sql_select_target_copy (GdaSqlSelectTarget *target);

Creates a new GdaSqlSelectTarget structure initiated with the values stored in `target` .

#### Parameters

target | a GdaSqlSelectTarget structure to be copied |

#### Returns

a new GdaSqlSelectTarget structure.

### gda_sql_select_target_serialize ()

    gchar *
    gda_sql_select_target_serialize (GdaSqlSelectTarget *target);

Creates a new string representing a target used in a SELECT statement after the FROM clause.

#### Parameters

target | a GdaSqlSelectTarget structure |

#### Returns

a new string with the description of the expression or "null" in case `field` is invalid.

### gda_sql_select_target_take_table_name ()

    void
    gda_sql_select_target_take_table_name (GdaSqlSelectTarget *target,
                                           GValue *value);

Sets the target to be a SELECT subquery setting target's expression to use `stmt` ; after call this function the target owns `stmt` , then you must not free it.

#### Parameters

target | a GdaSqlSelectTarget structure |
stmt | a GValue to take from |

### gda_sql_select_target_take_select ()

    void
    gda_sql_select_target_take_select (GdaSqlSelectTarget *target,
                                       GdaSqlStatement *stmt);

### gda_sql_select_target_take_alias ()

    void
    gda_sql_select_target_take_alias (GdaSqlSelectTarget *target,
                                      GValue *alias);

### gda_sql_select_join_new ()

    GdaSqlSelectJoin *
    gda_sql_select_join_new (GdaSqlAnyPart *parent);

Creates a new GdaSqlSelectJoin structure and sets its parent to `parent` .

#### Parameters

parent | a GdaSqlSelectFrom |

#### Returns

a new GdaSqlSelectJoin structure

### gda_sql_select_join_free ()

    void
    gda_sql_select_join_free (GdaSqlSelectJoin *join);

Frees a GdaSqlSelectJoin structure and its members.

#### Parameters

join | a GdaSqlSelectJoin structure to be freed |

### gda_sql_select_join_copy ()

    GdaSqlSelectJoin *
    gda_sql_select_join_copy (GdaSqlSelectJoin *join);

Creates a new GdaSqlSelectJoin structure initiated with the values stored in `join` .

#### Parameters

join | a GdaSqlSelectJoin structure to be copied |

#### Returns

a new GdaSqlSelectJoin structure.

### gda_sql_select_join_serialize ()

    gchar *
    gda_sql_select_join_serialize (GdaSqlSelectJoin *join);

Creates a new string description of the join used in a SELECT statement.

#### Parameters

join | a GdaSqlSelectJoin structure |

#### Returns

a new string with the description of the join or "null" in case `join` is invalid.

### gda_sql_select_join_type_to_string ()

    const gchar *
    gda_sql_select_join_type_to_string (GdaSqlSelectJoinType type);

Creates a new string representing the join type.

#### Parameters

type | a GdaSqlSelectJoinType structure to be copied |

#### Returns

a string representing the Join type.

### gda_sql_select_from_new ()

    GdaSqlSelectFrom *
    gda_sql_select_from_new (GdaSqlAnyPart *parent);

Creates a new GdaSqlSelectFrom structure and sets its parent to `parent` .

#### Parameters

parent | a GdaSqlStatementSelect |

#### Returns

a new GdaSqlSelectFrom structure

### gda_sql_select_from_free ()

    void
    gda_sql_select_from_free (GdaSqlSelectFrom *from);

Frees a GdaSqlSelectFrom structure and its members.

#### Parameters

from | a GdaSqlSelectFrom structure to be freed |

### gda_sql_select_from_copy ()

    GdaSqlSelectFrom *
    gda_sql_select_from_copy (GdaSqlSelectFrom *from);

Creates a new GdaSqlSelectFrom structure initiated with the values stored in `from` .

#### Parameters

from | a GdaSqlSelectFrom structure to be copied |

#### Returns

a new GdaSqlSelectFrom structure.

### gda_sql_select_from_serialize ()

    gchar *
    gda_sql_select_from_serialize (GdaSqlSelectFrom *from);

Creates a new string description of the FROM clause used in a SELECT statement.

#### Parameters

from | a GdaSqlSelectFrom structure |

#### Returns

a new string with the description of the FROM or "null" in case `from` is invalid.

### gda_sql_select_from_take_new_target ()

    void
    gda_sql_select_from_take_new_target (GdaSqlSelectFrom *from,
                                         GdaSqlSelectTarget *target);

Append `target` to the targets in the FROM clause and set `target` 's parent to `from` ; after call this function `from` owns `target` then you must not free it.

#### Parameters

from | a GdaSqlSelectFrom structure |
target | a GdaSqlSelectTarget to take from |

### gda_sql_select_from_take_new_join ()

    void
    gda_sql_select_from_take_new_join (GdaSqlSelectFrom *from,
                                       GdaSqlSelectJoin *join);

Append `join` to the joins in the FROM clause and set `join` 's parent to `from` ; after call this function `from` owns `join` then you must not free it.

#### Parameters

from | a GdaSqlSelectFrom structure |
join | a GdaSqlSelectJoin to take from |

### gda_sql_select_order_new ()

    GdaSqlSelectOrder *
    gda_sql_select_order_new (GdaSqlAnyPart *parent);

Creates a new GdaSqlSelectOrder structure and sets its parent to `parent` .

#### Parameters

parent | a GdaSqlStatementSelect |

#### Returns

a new GdaSqlSelectOrder structure

### gda_sql_select_order_free ()

    void
    gda_sql_select_order_free (GdaSqlSelectOrder *order);

Frees a GdaSqlSelectOrder structure and its members.

#### Parameters

order | a GdaSqlSelectOrder structure to be freed |

### gda_sql_select_order_copy ()

    GdaSqlSelectOrder *
    gda_sql_select_order_copy (GdaSqlSelectOrder *order);

Creates a new GdaSqlSelectOrder structure initiated with the values stored in `order` .

#### Parameters

order | a GdaSqlSelectOrder structure to be copied |

#### Returns

a new GdaSqlSelectOrder structure.

### gda_sql_select_order_serialize ()

    gchar *
    gda_sql_select_order_serialize (GdaSqlSelectOrder *order);

Creates a new string description of the ORDER BY clause used in a SELECT statement.

#### Parameters

order | a GdaSqlSelectOrder structure |

#### Returns

a new string with the description of the ORDER BY or "null" in case `order` is invalid.

### gda_sql_value_stringify ()

    gchar *
    gda_sql_value_stringify (const GValue *value);

Simplified version of `gda_value_stringify()`.

#### Parameters

value | a GValue pointer |

#### Returns

a new string

## Types and Values

### GdaSqlStatement

    typedef struct {
    	gchar               *sql;
    	GdaSqlStatementType  stmt_type;
    	gpointer             contents; /* depends on stmt_type */
    	GdaMetaStruct       *validity_meta_struct; /* set when gda_sql_statement_check_validity() was last called */
    } GdaSqlStatement;

This structure is the top level structure encapsulating several type of statements.

#### Members

gchar *`sql`; |  |
GdaSqlStatementType `stmt_type`; | type of statement |
gpointer `contents`; | contents, cast it depending on `stmt_type` (for example to a GdaSqlStatementSelect). |
GdaMetaStruct *`validity_meta_struct`; |  |

### enum GdaSqlStatementType

Known types of statements

#### Members

GDA_SQL_STATEMENT_SELECT | a SELECT statement |
GDA_SQL_STATEMENT_INSERT | an INSERT statement |
GDA_SQL_STATEMENT_UPDATE | an UPDATE statement |
GDA_SQL_STATEMENT_DELETE | a DELETE statement |
GDA_SQL_STATEMENT_COMPOUND | a compound statement: multiple SELECT statements grouped together using an operator |
GDA_SQL_STATEMENT_BEGIN | start of transaction statement |
GDA_SQL_STATEMENT_ROLLBACK | transaction abort statement |
GDA_SQL_STATEMENT_COMMIT | transaction commit statement |
GDA_SQL_STATEMENT_SAVEPOINT | new savepoint definition statement |
GDA_SQL_STATEMENT_ROLLBACK_SAVEPOINT | return to savepoint statement |
GDA_SQL_STATEMENT_DELETE_SAVEPOINT | savepoint deletion statement |
GDA_SQL_STATEMENT_UNKNOWN | unknown statement, only identifies variables |
GDA_SQL_STATEMENT_NONE | not used |

### struct GdaSqlAnyPart

    struct GdaSqlAnyPart {
    	GdaSqlAnyPartType  type;
    	GdaSqlAnyPart     *parent;
    };

Base structure of which all structures (except GdaSqlStatement) "inherit". It identifies, for each structure, its type and its parent in the structure hierarchy.

#### Members

GdaSqlAnyPartType `type`; | type of structure, as a GdaSqlAnyPartType enum. |
GdaSqlAnyPart *`parent`; | pointer to the parent GdaSqlAnyPart structure |

### enum GdaSqlAnyPartType

Type of part.

#### Members

GDA_SQL_ANY_STMT_SELECT | structure is a GdaSqlStatementSelect |
GDA_SQL_ANY_STMT_INSERT | structure is a GdaSqlStatementInsert |
GDA_SQL_ANY_STMT_UPDATE | structure is a GdaSqlStatementUpdate |
GDA_SQL_ANY_STMT_DELETE | structure is a GdaSqlStatementDelete |
GDA_SQL_ANY_STMT_COMPOUND | structure is a GdaSqlStatementCompound |
GDA_SQL_ANY_STMT_BEGIN | structure is a GdaSqlStatementTransaction |
GDA_SQL_ANY_STMT_ROLLBACK | structure is a GdaSqlStatementTransaction |
GDA_SQL_ANY_STMT_COMMIT | structure is a GdaSqlStatementTransaction |
GDA_SQL_ANY_STMT_SAVEPOINT | structure is a GdaSqlStatementTransaction |
GDA_SQL_ANY_STMT_ROLLBACK_SAVEPOINT | structure is a GdaSqlStatementTransaction |
GDA_SQL_ANY_STMT_DELETE_SAVEPOINT | structure is a GdaSqlStatementTransaction |
GDA_SQL_ANY_STMT_UNKNOWN | structure is a GdaSqlStatementUnknown |
GDA_SQL_ANY_EXPR | structure is a GdaSqlExpr |
GDA_SQL_ANY_SQL_FIELD | structure is a GdaSqlField |
GDA_SQL_ANY_SQL_TABLE | structure is a GdaSqlTable |
GDA_SQL_ANY_SQL_FUNCTION | structure is a GdaSqlFunction |
GDA_SQL_ANY_SQL_OPERATION | structure is a GdaSqlOperation |
GDA_SQL_ANY_SQL_CASE | structure is a GdaSqlCase |
GDA_SQL_ANY_SQL_SELECT_FIELD | structure is a GdaSqlSelectField |
GDA_SQL_ANY_SQL_SELECT_TARGET | structure is a GdaSqlSelectTarget |
GDA_SQL_ANY_SQL_SELECT_JOIN | structure is a GdaSqlSelectJoin |
GDA_SQL_ANY_SQL_SELECT_FROM | structure is a GdaSqlSelectFrom |
GDA_SQL_ANY_SQL_SELECT_ORDER | structure is a GdaSqlSelectOrder |

### GdaSqlStatementUnknown

    typedef struct {
    	GdaSqlAnyPart  any;
    	GSList        *expressions;
    } GdaSqlStatementUnknown;

Represents any statement which type is not identified (any DDL statement or database specific dialect)

#### Members

GdaSqlAnyPart `any`; |  |
GSList *`expressions`; | a list of GdaSqlExpr pointers |

### GdaSqlStatementTransaction

    typedef struct {
    	GdaSqlAnyPart           any;
    	GdaTransactionIsolation isolation_level;
    	gchar                  *trans_mode; /* DEFERRED, IMMEDIATE, EXCLUSIVE, READ_WRITE, READ_ONLY */
    	gchar                  *trans_name;
    } GdaSqlStatementTransaction;

The statement is a transaction management related statement (BEGIN, ROLLBACK, etc). The GdaSqlStatementTransaction structure does not hold enough information to reconstruct the complete SQL statement (some information may be missing) - the aim of this structure is to identify a minimum set of information in the transaction statement. Note that the complete SQL which created the statement should be available in the GdaSqlStatement structure which encapsulates this structure.

#### Members

GdaSqlAnyPart `any`; | inheritance structure |
GdaTransactionIsolation `isolation_level`; | isolation level as a GdaTransactionIsolation |
gchar *`trans_mode`; | transaction mode (DEFERRED, IMMEDIATE, EXCLUSIVE, READ_WRITE, READ_ONLY) |
gchar *`trans_name`; | transaction name |

### GdaSqlStatementSelect

    typedef struct {
    	GdaSqlAnyPart     any;
    	gboolean          distinct;
    	GdaSqlExpr       *distinct_expr;

    	GSList           *expr_list;  /* list of GdaSqlSelectField pointers */
    	GdaSqlSelectFrom *from;

    	GdaSqlExpr       *where_cond; /* WHERE... */
    	GSList           *group_by; /* list of GdaSqlExpr pointers */
    	GdaSqlExpr       *having_cond; /* HAVING... */
    	GSList           *order_by;   /* list of GdaSqlSelectOrder pointers */

    	GdaSqlExpr       *limit_count;
    	GdaSqlExpr       *limit_offset;
    } GdaSqlStatementSelect;

### GdaSqlStatementInsert

    typedef struct {
    	GdaSqlAnyPart           any;
    	gchar                  *on_conflict; /* conflict resolution clause */
    	GdaSqlTable            *table;
    	GSList                 *fields_list; /* list of GdaSqlField structures */
    	GSList                 *values_list; /* list of list of GdaSqlExpr */
    	GdaSqlAnyPart          *select; /* SELECT OR COMPOUND statements: GdaSqlStatementSelect or GdaSqlStatementCompound */
    } GdaSqlStatementInsert;

The statement is an INSERT statement, any kind of INSERT statement can be represented using this structure (if this is not the case then report a bug).

Example of a GdaSqlStatement having a GdaSqlStatementInsert as its contents with 2 lists of values to insert.

Another example of a GdaSqlStatement having a GdaSqlStatementInsert as its contents, using a SELECT to express the values to insert.

#### Members

GdaSqlAnyPart `any`; | inheritance structure |
gchar *`on_conflict`; | conflict resolution clause if there is one (such as "OR REPLACE") |
GdaSqlTable *`table`; | name of the table to which data is inserted |
GSList *`fields_list`; | list of GdaSqlField fields which are valued for insertion |
GSList *`values_list`; | list of list of GdaSqlExpr expressions (this is a list of list, not a simple list) |
GdaSqlAnyPart *`select`; | a GdaSqlStatementSelect or GdaSqlStatementCompound structure representing the values to insert |

### GdaSqlStatementDelete

    typedef struct {
    	GdaSqlAnyPart any;
    	GdaSqlTable  *table;
    	GdaSqlExpr   *cond;
    } GdaSqlStatementDelete;

### GdaSqlStatementUpdate

    typedef struct {
    	GdaSqlAnyPart     any;
    	gchar            *on_conflict; /* conflict resolution clause */
    	GdaSqlTable      *table;
    	GSList           *fields_list; /* list of GdaSqlField pointers */
    	GSList           *expr_list;   /* list of GdaSqlExpr pointers */
    	GdaSqlExpr       *cond;
    } GdaSqlStatementUpdate;

### GdaSqlStatementCompound

    typedef struct {
    	GdaSqlAnyPart                any;
    	GdaSqlStatementCompoundType  compound_type;
    	GSList                      *stmt_list; /* list of SELECT or COMPOUND statements */
    } GdaSqlStatementCompound;

### enum GdaSqlStatementCompoundType

#### Members

GDA_SQL_STATEMENT_COMPOUND_UNION |  |
GDA_SQL_STATEMENT_COMPOUND_UNION_ALL |  |
GDA_SQL_STATEMENT_COMPOUND_INTERSECT |  |
GDA_SQL_STATEMENT_COMPOUND_INTERSECT_ALL |  |
GDA_SQL_STATEMENT_COMPOUND_EXCEPT |  |
GDA_SQL_STATEMENT_COMPOUND_EXCEPT_ALL |  |

### struct GdaSqlExpr

    struct GdaSqlExpr {
    	GdaSqlAnyPart    any;
    	GValue          *value;
    	GdaSqlParamSpec *param_spec;
    	GdaSqlFunction  *func;
    	GdaSqlOperation *cond;
    	GdaSqlAnyPart   *select; /* SELECT OR COMPOUND statements: GdaSqlStatementSelect or GdaSqlStatementCompound */
    	GdaSqlCase      *case_s;

    	gchar           *cast_as;

    	gboolean         value_is_ident;
    };

This structure contains any expression, either as a value (the `value` part is set), a variable (the `param_spec` is set), or as other types of expressions.

Note 1 about the `value` field: if the expression represents a string value in the SQL statement, the string itself must be represented as it would be in the actual SQL, ie. it should be escaped (accordingly to the escaping rules of the database which will use the SQL). For example a string representing the `'joe'` value should be

`"'joe'"` and not `"joe"`.

Note 2 about the `value` field: if the expression represents an SQL identifier (such as a table or field name), then the `value_is_ident` should be set to `TRUE`, and `value` should be a string which may contain double quotes around SQL identifiers which also are reserved keywords or which are case sensitive.

#### Members

GdaSqlAnyPart `any`; | inheritance structure |
GValue *`value`; | a GValue, or `NULL`. Please see specific note about this field. | [allow-none]
GdaSqlParamSpec *`param_spec`; | a GdaSqlParamSpec, or `NULL` if this is not a variable. | [allow-none]
GdaSqlFunction *`func`; | not `NULL` if expression is a function or aggregate. | [allow-none]
GdaSqlOperation *`cond`; | not `NULL` if expression is a condition or an operation. | [allow-none]
GdaSqlAnyPart *`select`; | not `NULL` if expression is a sub select statement (GdaSqlStatementSelect or GdaSqlStatementCompound). | [allow-none]
GdaSqlCase *`case_s`; | not `NULL` if expression is a CASE WHEN ... expression. | [allow-none]
gchar *`cast_as`; | not `NULL` if expression must be cast to another data type. | [allow-none]
gboolean `value_is_ident`; | Please see specific note about the `value` field |

### struct GdaSqlParamSpec

    struct GdaSqlParamSpec {
    	gchar    *name;
    	gchar    *descr;
    	gboolean  is_param;
    	gboolean  nullok;

    	GType     g_type;
    	gpointer  validity_meta_dict; /* to be replaced with a pointer to a structure representing a DBMS data type in GdaMetaStruct */

    	/* Padding for future expansion */
    	gpointer         _gda_reserved1;
    	gpointer         _gda_reserved2;
    };

### struct GdaSqlField

    struct GdaSqlField {
    	GdaSqlAnyPart       any;
    	gchar              *field_name;

    	/* validity check with a connection */
    	GdaMetaTableColumn *validity_meta_table_column;
    };

This structure represents the name of a table's field.

### struct GdaSqlTable

    struct GdaSqlTable {
    	GdaSqlAnyPart       any;
    	gchar              *table_name;

    	/* validity check with a connection */
    	GdaMetaDbObject    *validity_meta_object;
    };

This structure represents the name of a table.

### struct GdaSqlFunction

    struct GdaSqlFunction {
    	GdaSqlAnyPart       any;
    	gchar              *function_name;
    	GSList             *args_list;
    };

This structure represents a function or an aggregate with zero or more arguments.

#### Members

GdaSqlAnyPart `any`; | inheritance structure |
gchar *`function_name`; | name of the function , in the form [[catalog.]schema.]function_name |
GSList *`args_list`; | list of GdaSqlExpr expressions, one for each argument |

### struct GdaSqlOperation

    struct GdaSqlOperation {
    	GdaSqlAnyPart       any;
    	GdaSqlOperatorType  operator_type;
    	GSList             *operands;
    };

This structure represents an operation between one or more operands.

#### Members

GdaSqlAnyPart `any`; | inheritance structure |
GdaSqlOperatorType `operator_type`; |  |
GSList *`operands`; | list of GdaSqlExpr operands |

### enum GdaSqlOperatorType

#### Members

GDA_SQL_OPERATOR_TYPE_AND |  |
GDA_SQL_OPERATOR_TYPE_OR |  |
GDA_SQL_OPERATOR_TYPE_EQ |  |
GDA_SQL_OPERATOR_TYPE_IS |  |
GDA_SQL_OPERATOR_TYPE_LIKE |  |
GDA_SQL_OPERATOR_TYPE_BETWEEN |  |
GDA_SQL_OPERATOR_TYPE_GT |  |
GDA_SQL_OPERATOR_TYPE_LT |  |
GDA_SQL_OPERATOR_TYPE_GEQ |  |
GDA_SQL_OPERATOR_TYPE_LEQ |  |
GDA_SQL_OPERATOR_TYPE_DIFF |  |
GDA_SQL_OPERATOR_TYPE_REGEXP |  |
GDA_SQL_OPERATOR_TYPE_REGEXP_CI |  |
GDA_SQL_OPERATOR_TYPE_NOT_REGEXP |  |
GDA_SQL_OPERATOR_TYPE_NOT_REGEXP_CI |  |
GDA_SQL_OPERATOR_TYPE_SIMILAR |  |
GDA_SQL_OPERATOR_TYPE_ISNULL |  |
GDA_SQL_OPERATOR_TYPE_ISNOTNULL |  |
GDA_SQL_OPERATOR_TYPE_NOT |  |
GDA_SQL_OPERATOR_TYPE_IN |  |
GDA_SQL_OPERATOR_TYPE_NOTIN |  |
GDA_SQL_OPERATOR_TYPE_CONCAT |  |
GDA_SQL_OPERATOR_TYPE_PLUS |  |
GDA_SQL_OPERATOR_TYPE_MINUS |  |
GDA_SQL_OPERATOR_TYPE_STAR |  |
GDA_SQL_OPERATOR_TYPE_DIV |  |
GDA_SQL_OPERATOR_TYPE_REM |  |
GDA_SQL_OPERATOR_TYPE_BITAND |  |
GDA_SQL_OPERATOR_TYPE_BITOR |  |
GDA_SQL_OPERATOR_TYPE_BITNOT |  |
GDA_SQL_OPERATOR_TYPE_ILIKE |  |
GDA_SQL_OPERATOR_TYPE_NOTLIKE |  |
GDA_SQL_OPERATOR_TYPE_NOTILIKE |  |
GDA_SQL_OPERATOR_TYPE_GLOB |  |

### struct GdaSqlCase

    struct GdaSqlCase {
    	GdaSqlAnyPart    any;
    	GdaSqlExpr      *base_expr;
    	GSList          *when_expr_list;
    	GSList          *then_expr_list;
    	GdaSqlExpr      *else_expr;
    };

This structure represents a CASE WHEN... construct

#### Members

GdaSqlAnyPart `any`; | inheritance structure |
GdaSqlExpr *`base_expr`; | expression to test |
GSList *`when_expr_list`; | list of GdaSqlExpr, one for each WHEN clause |
GSList *`then_expr_list`; | list of GdaSqlExpr, one for each THEN clause |
GdaSqlExpr *`else_expr`; | default expression for the CASE |

### struct GdaSqlSelectField

    struct GdaSqlSelectField {
    	GdaSqlAnyPart       any;
    	GdaSqlExpr         *expr;
    	gchar              *field_name; /* may be NULL if expr does not refer to a table.field, can also be "*" */
    	gchar              *table_name; /* may be NULL if expr does not refer to a table.field */
    	gchar              *as;

    	/* validity check with a connection */
    	GdaMetaDbObject    *validity_meta_object;
    	GdaMetaTableColumn *validity_meta_table_column;
    };

This structure represents a selected item in a SELECT statement (when executed, the returned data set will have one column per selected item). Note that the `table_name` and `field_name` field parts will be overwritten by Libgda, set the value of `expr->value` instead.

#### Members

GdaSqlAnyPart `any`; | inheritance structure |
GdaSqlExpr *`expr`; | expression |
gchar *`field_name`; | field name part of `expr` if `expr` represents a field |
gchar *`table_name`; | table name part of `expr` if `expr` represents a field |
gchar *`as`; | alias |
GdaMetaDbObject *`validity_meta_object`; |  |
GdaMetaTableColumn *`validity_meta_table_column`; |  |

### struct GdaSqlSelectTarget

    struct GdaSqlSelectTarget {
    	GdaSqlAnyPart       any;
    	GdaSqlExpr         *expr;
    	gchar              *table_name; /* may be NULL if expr does not refer to a table */
    	gchar              *as;

    	/* validity check with a connection */
    	GdaMetaDbObject    *validity_meta_object;
    };

This structure represents a target used to fetch data from in a SELECT statement; it can represent a table or a sub select. Note that the `table_name` part will be overwritten by Libgda, set the value of `expr->value` instead.

#### Members

GdaSqlAnyPart `any`; | inheritance structure |
GdaSqlExpr *`expr`; | expression |
gchar *`table_name`; | table name part of `expr` if `expr` represents a table |
gchar *`as`; | alias |
GdaMetaDbObject *`validity_meta_object`; |  |

### struct GdaSqlSelectJoin

    struct GdaSqlSelectJoin {
    	GdaSqlAnyPart         any;
    	GdaSqlSelectJoinType  type;
    	gint                  position; /* between a target at (pos < @position) and the one @position */
    	GdaSqlExpr           *expr;
    	GSList               *use; /* list of GdaSqlField pointers */
    };

This structure represents a join between two targets in a SELECT statement.

#### Members

GdaSqlAnyPart `any`; | inheritance structure |
GdaSqlSelectJoinType `type`; | type of join |
gint `position`; | represents a join between a target at (pos < `position` ) and the one at `position` |
GdaSqlExpr *`expr`; | joining expression, or `NULL`. | [allow-none]
GSList *`use`; | list of GdaSqlField pointers to use when joining, or `NULL`. | [allow-none]

### enum GdaSqlSelectJoinType

#### Members

GDA_SQL_SELECT_JOIN_CROSS |  |
GDA_SQL_SELECT_JOIN_NATURAL |  |
GDA_SQL_SELECT_JOIN_INNER |  |
GDA_SQL_SELECT_JOIN_LEFT |  |
GDA_SQL_SELECT_JOIN_RIGHT |  |
GDA_SQL_SELECT_JOIN_FULL |  |

### struct GdaSqlSelectFrom

    struct GdaSqlSelectFrom {
    	GdaSqlAnyPart    any;
    	GSList          *targets;
    	GSList          *joins;
    };

This structure represents the FROM clause of a SELECT statement, it lists targets and joins

#### Members

GdaSqlAnyPart `any`; | inheritance structure |
GSList *`targets`; | list of GdaSqlSelectTarget. | [element-type Gda.SqlSelectTarget]
GSList *`joins`; | list of GdaSqlSelectJoin. | [element-type Gda.SqlSelectJoin]

### struct GdaSqlSelectOrder

    struct GdaSqlSelectOrder {
    	GdaSqlAnyPart    any;
    	GdaSqlExpr      *expr;
    	gboolean         asc;
    	gchar           *collation_name;
    };

This structure represents the ordering of a SELECT statement.

#### Members

GdaSqlAnyPart `any`; | inheritance structure |
GdaSqlExpr *`expr`; | expression to order on |
gboolean `asc`; | TRUE is ordering is ascending |
gchar *`collation_name`; | name of the collation to use for ordering |

## See Also

The GdaSqlBuilder object which features some easy to use API to build GdaSqlStatement structures or GdaStatement objects without having to worry about the details of GdaSqlStatement's contents.