[libgda/LIBGDA_4.2] Backported GObject Introspection and documentation improvements and added new API to GdaSqlBuilder.
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda/LIBGDA_4.2] Backported GObject Introspection and documentation improvements and added new API to GdaSqlBuilder.
- Date: Fri, 14 Oct 2011 00:19:28 +0000 (UTC)
commit 3ed8d350ee92e7ae0db09a12201cea4fb0cb6238
Author: Daniel Espinosa <despinosa src gnome org>
Date: Thu Oct 13 19:16:26 2011 -0500
Backported GObject Introspection and documentation improvements and added new API to GdaSqlBuilder.
* Added annotations to make introspectable some important GdaSqlBuilder API
* Backported documentation to different sql-parser directory object.
* Added function: gda_sql_builder_compound_add_sub_select_from_builder
* Added function: gda_sql_builder_import_expression_from_builder
libgda/Makefile.am | 4 +-
libgda/gda-sql-builder.c | 63 +++++++++
libgda/gda-sql-builder.h | 3 +
libgda/handlers/gda-handler-time.c | 12 +-
libgda/sql-parser/gda-statement-struct-compound.h | 21 +++-
libgda/sql-parser/gda-statement-struct-decl.h | 49 +++++++
libgda/sql-parser/gda-statement-struct-parts.h | 139 ++++++++++++++++++++-
7 files changed, 280 insertions(+), 11 deletions(-)
---
diff --git a/libgda/Makefile.am b/libgda/Makefile.am
index 61760c6..15819a8 100644
--- a/libgda/Makefile.am
+++ b/libgda/Makefile.am
@@ -314,7 +314,9 @@ threadwrapper = \
sqlparser = \
sql-parser/gda-sql-parser.h \
sql-parser/gda-sql-parser.c \
- sql-parser/gda-statement-struct-decl.h
+ sql-parser/gda-statement-struct-decl.h \
+ sql-parser/gda-statement-struct-parts.h \
+ sql-parser/gda-statement-struct-compound.h
handlers = \
handlers/gda-handler-bin.h \
diff --git a/libgda/gda-sql-builder.c b/libgda/gda-sql-builder.c
index 3c06eb3..60069d7 100644
--- a/libgda/gda-sql-builder.c
+++ b/libgda/gda-sql-builder.c
@@ -1819,6 +1819,41 @@ gda_sql_builder_compound_add_sub_select (GdaSqlBuilder *builder, GdaSqlStatement
}
/**
+ * gda_sql_builder_compound_add_sub_select_from_builder:
+ * @builder: a #GdaSqlBuilder object
+ * @subselect: a #GdaSqlBuilder, which has to be a SELECT or compound SELECT. This will be copied.
+ *
+ * Add a sub select to a COMPOUND statement
+ *
+ * Since: 4.2
+ */
+void
+gda_sql_builder_compound_add_sub_select_from_builder (GdaSqlBuilder *builder, GdaSqlBuilder *subselect)
+{
+ GdaSqlStatementCompound *cstmt;
+ GdaSqlStatement *sqlst;
+ GdaSqlStatement *sub;
+
+ g_return_if_fail (GDA_IS_SQL_BUILDER (builder));
+ g_return_if_fail (builder->priv->main_stmt);
+ g_return_if_fail (GDA_IS_SQL_BUILDER (subselect));
+ g_return_if_fail (subselect->priv->main_stmt);
+ if (builder->priv->main_stmt->stmt_type != GDA_SQL_STATEMENT_COMPOUND) {
+ g_warning (_("Wrong statement type"));
+ return;
+ }
+ sqlst = gda_sql_builder_get_sql_statement(subselect);
+ g_return_if_fail (sqlst);
+ g_return_if_fail ((sqlst->stmt_type == GDA_SQL_STATEMENT_SELECT) ||
+ (sqlst->stmt_type == GDA_SQL_STATEMENT_COMPOUND));
+
+ cstmt = (GdaSqlStatementCompound*) builder->priv->main_stmt->contents;
+ sub = gda_sql_statement_copy (sqlst);
+
+ cstmt->stmt_list = g_slist_append (cstmt->stmt_list, sub);
+}
+
+/**
* gda_sql_builder_add_case: (skip)
* @builder: a #GdaSqlBuilder object
* @test_expr: the expression ID representing the test of the CASE, or %0
@@ -1993,3 +2028,31 @@ gda_sql_builder_import_expression (GdaSqlBuilder *builder, GdaSqlExpr *expr)
g_return_val_if_fail (GDA_SQL_ANY_PART (expr)->type == GDA_SQL_ANY_EXPR, 0);
return add_part (builder, (GdaSqlAnyPart *) gda_sql_expr_copy (expr));
}
+
+/**
+ * gda_sql_builder_import_expression_from_builder:
+ * @builder: a #GdaSqlBuilder object
+ * @query: a #GdaSqlBuilder object to get expression from
+ * @expr_id: a #GdaSqlBuilderId of the expression in @query
+ *
+ * Imports the an expression located in @query into @builder.
+ *
+ * Returns: the ID of the new expression, or %0 if there was an error
+ *
+ * Since: 4.2
+ */
+GdaSqlBuilderId
+gda_sql_builder_import_expression_from_builder (GdaSqlBuilder *builder, GdaSqlBuilder *query, daSqlBuilderId *expr_id)
+{
+ GdaSqlExpr *expr;
+
+ g_return_val_if_fail (GDA_IS_SQL_BUILDER (builder), 0);
+ g_return_val_if_fail (builder->priv->main_stmt, 0);
+ g_return_val_if_fail (GDA_IS_SQL_BUILDER (query), 0);
+ g_return_val_if_fail (query->priv->main_stmt, 0);
+ g_return_val_if_fail (expr_id, 0);
+
+ expr = gda_sql_builder_export_expression(query, expr_id);
+ g_return_val_if_fail (GDA_SQL_ANY_PART (expr)->type == GDA_SQL_ANY_EXPR, 0);
+ return add_part (builder, (GdaSqlAnyPart *) gda_sql_expr_copy (expr));
+}
diff --git a/libgda/gda-sql-builder.h b/libgda/gda-sql-builder.h
index f82330a..7e6169c 100644
--- a/libgda/gda-sql-builder.h
+++ b/libgda/gda-sql-builder.h
@@ -126,10 +126,13 @@ void gda_sql_builder_select_group_by (GdaSqlBuilder *builder, GdaSq
/* COMPOUND SELECT Statement API */
void gda_sql_builder_compound_set_type (GdaSqlBuilder *builder, GdaSqlStatementCompoundType compound_type);
void gda_sql_builder_compound_add_sub_select (GdaSqlBuilder *builder, GdaSqlStatement *sqlst);
+void gda_sql_builder_compound_add_sub_select_from_builder (GdaSqlBuilder *builder, GdaSqlBuilder *subselect);
+void gda_sql_builder_compound_add_sub_select_from_builder (GdaSqlBuilder *builder, GdaSqlBuilder *subselect);
/* import/Export API */
GdaSqlExpr *gda_sql_builder_export_expression (GdaSqlBuilder *builder, GdaSqlBuilderId id);
GdaSqlBuilderId gda_sql_builder_import_expression (GdaSqlBuilder *builder, GdaSqlExpr *expr);
+GdaSqlBuilderId gda_sql_builder_import_expression_from_builder (GdaSqlBuilder *builder, GdaSqlBuilder *query, daSqlBuilderId *expr_id);
G_END_DECLS
diff --git a/libgda/handlers/gda-handler-time.c b/libgda/handlers/gda-handler-time.c
index 5db014e..5694819 100644
--- a/libgda/handlers/gda-handler-time.c
+++ b/libgda/handlers/gda-handler-time.c
@@ -425,27 +425,27 @@ handler_compute_locale (GdaHandlerTime *hdl)
/**
* gda_handler_time_get_no_locale_str_from_value:
- * @hdl: a #GdaHandlerTime object
+ * @dh: a #GdaHandlerTime object
* @value: a #GValue value
*
* Returns: a new string representing @value without taking the current
* locale into account
*/
gchar *
-gda_handler_time_get_no_locale_str_from_value (GdaHandlerTime *hdl, const GValue *value)
+gda_handler_time_get_no_locale_str_from_value (GdaHandlerTime *dh, const GValue *value)
{
gchar *retval = NULL, *str;
GType type;
- g_return_val_if_fail (GDA_IS_HANDLER_TIME (hdl), NULL);
- g_return_val_if_fail (hdl->priv, NULL);
+ g_return_val_if_fail (GDA_IS_HANDLER_TIME (dh), NULL);
+ g_return_val_if_fail (dh->priv, NULL);
type = G_VALUE_TYPE (value);
if (type == G_TYPE_DATE) {
const GDate *date;
date = (GDate *) g_value_get_boxed (value);
- str = render_date_locale (date, hdl->priv->sql_locale);
+ str = render_date_locale (date, dh->priv->sql_locale);
if (!str)
retval = g_strdup ("NULL");
else
@@ -466,7 +466,7 @@ gda_handler_time_get_no_locale_str_from_value (GdaHandlerTime *hdl, const GValue
gdats = gda_value_get_timestamp ((GValue *) value);
vdate = g_date_new_dmy (gdats->day, gdats->month, gdats->year);
- str = render_date_locale (vdate, hdl->priv->sql_locale);
+ str = render_date_locale (vdate, dh->priv->sql_locale);
g_date_free (vdate);
if (str) {
diff --git a/libgda/sql-parser/gda-statement-struct-compound.h b/libgda/sql-parser/gda-statement-struct-compound.h
index c3661b7..845f659 100644
--- a/libgda/sql-parser/gda-statement-struct-compound.h
+++ b/libgda/sql-parser/gda-statement-struct-compound.h
@@ -31,6 +31,17 @@ G_BEGIN_DECLS
/*
* Kinds
*/
+/**
+ * GdaSqlStatementCompoundType:
+ * @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:
+ *
+ **/
+
typedef enum {
GDA_SQL_STATEMENT_COMPOUND_UNION,
GDA_SQL_STATEMENT_COMPOUND_UNION_ALL,
@@ -43,11 +54,19 @@ typedef enum {
/*
* Structure definition
*/
+/**
+ * GdaSqlStatementCompound: (skip)
+ * @any:
+ * @compound_type:
+ * @stmt_list:
+ *
+ **/
struct _GdaSqlStatementCompound {
GdaSqlAnyPart any;
GdaSqlStatementCompoundType compound_type;
GSList *stmt_list; /* list of SELECT or COMPOUND statements */
-
+
+ /*< private >*/
/* Padding for future expansion */
gpointer _gda_reserved1;
gpointer _gda_reserved2;
diff --git a/libgda/sql-parser/gda-statement-struct-decl.h b/libgda/sql-parser/gda-statement-struct-decl.h
index 3e26fd7..73b7920 100644
--- a/libgda/sql-parser/gda-statement-struct-decl.h
+++ b/libgda/sql-parser/gda-statement-struct-decl.h
@@ -33,25 +33,69 @@ G_BEGIN_DECLS
extern GQuark gda_sql_error_quark (void);
#define GDA_SQL_ERROR gda_sql_error_quark ()
+/*
+ * GdaSqlError: (skip)
+ *
+ **/
typedef enum {
GDA_SQL_STRUCTURE_CONTENTS_ERROR,
GDA_SQL_MALFORMED_IDENTIFIER_ERROR,
GDA_SQL_MISSING_IDENTIFIER_ERROR,
GDA_SQL_VALIDATION_ERROR
} GdaSqlError;
+/*
+ * GdaSqlErrorType: (skip)
+ *
+ **/
typedef GdaSqlError GdaSqlErrorType;
/*
* Struct declarations
*/
+/*
+ * GdaSqlAnyPart: (skip)
+ *
+ **/
typedef struct _GdaSqlAnyPart GdaSqlAnyPart;
+/*
+ * GdaSqlStatement: (skip)
+ *
+ **/
typedef struct _GdaSqlStatement GdaSqlStatement;
+/*
+ * GdaSqlStatementUnknown: (skip)
+ *
+ **/
typedef struct _GdaSqlStatementUnknown GdaSqlStatementUnknown;
+/*
+ * GdaSqlStatementTransaction: (skip)
+ *
+ **/
typedef struct _GdaSqlStatementTransaction GdaSqlStatementTransaction;
+/*
+ * GdaSqlStatementSelect: (skip)
+ *
+ **/
typedef struct _GdaSqlStatementSelect GdaSqlStatementSelect;
+/*
+ * GdaSqlStatementInsert: (skip)
+ *
+ **/
typedef struct _GdaSqlStatementInsert GdaSqlStatementInsert;
+/*
+ * GdaSqlStatementDelete: (skip)
+ *
+ **/
typedef struct _GdaSqlStatementDelete GdaSqlStatementDelete;
+/*
+ * GdaSqlStatementUpdate: (skip)
+ *
+ **/
typedef struct _GdaSqlStatementUpdate GdaSqlStatementUpdate;
+/*
+ * GdaSqlStatementCompound: (skip)
+ *
+ **/
typedef struct _GdaSqlStatementCompound GdaSqlStatementCompound;
/*
@@ -124,6 +168,7 @@ typedef enum {
* @GDA_SQL_ANY_SQL_SELECT_FROM: structure is a #GdaSqlSelectFrom
* @GDA_SQL_ANY_SQL_SELECT_ORDER: structure is a #GdaSqlSelectOrder
*
+ * Type of part.
*/
typedef enum {
/* complete statements */
@@ -159,6 +204,8 @@ typedef enum {
* @type: type of structure, as a #GdaSqlAnyPartType enum.
* @parent: pointer to the parent #GdaSqlAnyPart structure
*
+ * Base structure of which all structures (except #GdaSqlStatement) "inherit".
+ * its type and its parent in the structure hierarchy.
*/
struct _GdaSqlAnyPart {
GdaSqlAnyPartType type;
@@ -224,12 +271,14 @@ typedef struct {
/**
* GdaSqlStatementCheckValidityData: (skip)
*
+ * Validation against a dictionary
*/
typedef struct {
GdaConnection *cnc;
GdaMetaStore *store;
GdaMetaStruct *mstruct;
+ /*< private >*/
/* Padding for future expansion */
gpointer _gda_reserved1;
gpointer _gda_reserved2;
diff --git a/libgda/sql-parser/gda-statement-struct-parts.h b/libgda/sql-parser/gda-statement-struct-parts.h
index 38433c5..f03b9fe 100644
--- a/libgda/sql-parser/gda-statement-struct-parts.h
+++ b/libgda/sql-parser/gda-statement-struct-parts.h
@@ -31,23 +31,67 @@
G_BEGIN_DECLS
+/*
+ * GdaSqlExpr: (skip)
+ *
+ **/
typedef struct _GdaSqlExpr GdaSqlExpr;
+/*
+ * GdaSqlField: (skip)
+ *
+ **/
typedef struct _GdaSqlField GdaSqlField;
+/*
+ * GdaSqlTable: (skip)
+ *
+ **/
typedef struct _GdaSqlTable GdaSqlTable;
+/*
+ * GdaSqlFunction: (skip)
+ *
+ **/
typedef struct _GdaSqlFunction GdaSqlFunction;
+/*
+ * GdaSqlOperation: (skip)
+ *
+ **/
typedef struct _GdaSqlOperation GdaSqlOperation;
+/*
+ * GdaSqlCase: (skip)
+ *
+ **/
typedef struct _GdaSqlCase GdaSqlCase;
+/*
+ * GdaSqlSelectField: (skip)
+ *
+ **/
typedef struct _GdaSqlSelectField GdaSqlSelectField;
+/*
+ * GdaSqlSelectTarget: (skip)
+ *
+ **/
typedef struct _GdaSqlSelectTarget GdaSqlSelectTarget;
+/*
+ * GdaSqlSelectJoin: (skip)
+ *
+ **/
typedef struct _GdaSqlSelectJoin GdaSqlSelectJoin;
+/*
+ * GdaSqlSelectFrom: (skip)
+ *
+ **/
typedef struct _GdaSqlSelectFrom GdaSqlSelectFrom;
+/*
+ * GdaSqlSelectOrder: (skip)
+ *
+ **/
typedef struct _GdaSqlSelectOrder GdaSqlSelectOrder;
/*
* Any Expression
*/
/**
- * GdaSqlExpr:
+ * GdaSqlExpr: (skip)
* @any: inheritance structure
* @value: (allow-none): a #GValue, or %NULL. Please see specific note about this field.
* @param_spec: (allow-none): a #GdaSqlParamSpec, or %NULL if this is not a variable
@@ -107,6 +151,15 @@ void gda_sql_expr_take_select (GdaSqlExpr *expr, GdaSqlStatement
/*
* Any Table's field
*/
+/**
+ * GdaSqlField: (skip)
+ * any:
+ * @field_name:
+ * @validity_meta_table_column:
+ *
+ * This structure represents the name of a table's field.
+ **/
+
struct _GdaSqlField {
GdaSqlAnyPart any;
gchar *field_name;
@@ -131,6 +184,14 @@ void gda_sql_field_take_name (GdaSqlField *field, GValue *value
/*
* Any table
*/
+/**
+ * GdaSqlTable: (skip)
+ * @any:
+ * @table_name:
+ * @validity_meta_object:
+ *
+ * This structure represents the name of a table.
+ */
struct _GdaSqlTable
{
GdaSqlAnyPart any;
@@ -156,6 +217,14 @@ void gda_sql_table_take_name (GdaSqlTable *table, GValue *value
/*
* A function with any number of arguments
*/
+/**
+ * GdaSqlFunction: (skip)
+ * @any: inheritance structure
+ * @function_name: name of the function , in the form [[catalog.]schema.]functi
+ * @args_list: list of #GdaSqlExpr expressions, one for each argument
+ *
+ * This structure represents a function or an aggregate with zero or more argum
+ **/
struct _GdaSqlFunction {
GdaSqlAnyPart any;
gchar *function_name;
@@ -249,6 +318,14 @@ typedef enum {
GDA_SQL_OPERATOR_TYPE_ILIKE
} GdaSqlOperatorType;
+/**
+ * GdaSqlOperation: (skip)
+ * @any: inheritance structure
+ * @operator_type:
+ * @operands: (element-type Gda.SqlExpr): list of #GdaSqlExpr operands
+ *
+ * This structure represents an operation between one or more operands.
+ */
struct _GdaSqlOperation {
GdaSqlAnyPart any;
GdaSqlOperatorType operator_type;
@@ -270,6 +347,16 @@ GdaSqlOperatorType gda_sql_operation_operator_from_string (const gchar *op);
/*
* A CASE expression
*/
+/**
+ * GdaSqlCase: (skip)
+ * @any: inheritance structure
+ * @base_expr: expression to test
+ * @when_expr_list: list of #GdaSqlExpr, one for each WHEN clause
+ * @then_expr_list: list of #GdaSqlExpr, one for each THEN clause
+ * @else_expr: default expression for the CASE
+ *
+ * This structure represents a CASE WHEN... construct
+ **/
struct _GdaSqlCase
{
GdaSqlAnyPart any;
@@ -292,6 +379,21 @@ gchar *gda_sql_case_serialize (GdaSqlCase *sc);
/*
* Any expression in a SELECT ... before the FROM clause
*/
+/**
+ * GdaSqlSelectField: (skip)
+ * @any: inheritance structure
+ * @expr: expression
+ * @field_name: field name part of @expr if @expr represents a field
+ * @table_name: table name part of @expr if @expr represents a field
+ * @as: alias
+ * @validity_meta_object:
+ * @validity_meta_table_column:
+ *
+ * This structure represents a selected item in a SELECT statement (when execut
+ * will have one column per selected item). Note that the @table_name and
+ * @field_name field parts <emphasis>will be</emphasis> overwritten by &LIBGDA;
+ * set the value of @expr->value instead.
+ **/
struct _GdaSqlSelectField
{
GdaSqlAnyPart any;
@@ -323,6 +425,19 @@ void gda_sql_select_field_take_alias (GdaSqlSelectField *field
/*
* Any TARGET ... in a SELECT statement
*/
+/**
+ * GdaSqlSelectTarget: (skip)
+ * @any: inheritance structure
+ * @expr: expression
+ * @table_name: table name part of @expr if @expr represents a table
+ * @as: alias
+ * @validity_meta_object:
+ *
+ * This structure represents a target used to fetch data from in a SELECT state
+ * a sub select. Note that the @table_name
+ * part <emphasis>will be</emphasis> overwritten by &LIBGDA;,
+ * set the value of @expr->value instead.
+ */
struct _GdaSqlSelectTarget
{
GdaSqlAnyPart any;
@@ -352,6 +467,15 @@ void gda_sql_select_target_take_alias (GdaSqlSelectTarget *target
/*
* Any JOIN ... in a SELECT statement
*/
+/**
+ * GdaSqlSelectJoinType:
+ * @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:
+ */
typedef enum {
GDA_SQL_SELECT_JOIN_CROSS,
GDA_SQL_SELECT_JOIN_NATURAL,
@@ -362,7 +486,7 @@ typedef enum {
} GdaSqlSelectJoinType;
/**
- * GdaSqlSelectJoin:
+ * GdaSqlSelectJoin: (skip)
* @any: inheritance structure
* @type: type of join
* @position: represents a join between a target at (pos < @position) and the one at @position
@@ -397,7 +521,7 @@ const gchar *gda_sql_select_join_type_to_string (GdaSqlSelectJoinType type
* Any FROM ... in a SELECT statement
*/
/**
- * GdaSqlSelectFrom:
+ * GdaSqlSelectFrom: (skip)
* @any: inheritance structure
* @targets: (element-type Gda.SqlSelectTarget): list of #GdaSqlSelectTarget
* @joins: (element-type Gda.SqlSelectJoin): list of #GdaSqlSelectJoin
@@ -427,6 +551,15 @@ void gda_sql_select_from_take_new_join (GdaSqlSelectFrom *from, G
/*
* Any expression in a SELECT ... after the ORDER BY
*/
+/**
+ * GdaSqlSelectOrder: (skip)
+ * @any: inheritance structure
+ * @expr: expression to order on
+ * @asc: TRUE is ordering is ascending
+ * @collation_name: name of the collation to use for ordering
+ *
+ * This structure represents the ordering of a SELECT statement.
+ */
struct _GdaSqlSelectOrder
{
GdaSqlAnyPart any;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]