File: gda-statement-struct-unknown.c

package info (click to toggle)
libgda4 4.0.12-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 34,928 kB
  • ctags: 18,543
  • sloc: ansic: 187,884; sh: 10,317; xml: 7,903; yacc: 3,454; makefile: 1,974; java: 1,253; python: 896; sql: 321
file content (127 lines) | stat: -rw-r--r-- 3,893 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/* 
 * Copyright (C) 2007 - 2008 Vivien Malerba
 *
 * This Library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This Library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this Library; see the file COPYING.LIB.  If not,
 * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

#include <string.h>
#include <libgda/sql-parser/gda-statement-struct.h>
#include <libgda/sql-parser/gda-statement-struct-unknown.h>
#include <libgda/sql-parser/gda-statement-struct-parts.h>

static gpointer  gda_sql_statement_unknown_new (void);
static void      gda_sql_statement_unknown_free (gpointer stmt);
static gpointer  gda_sql_statement_unknown_copy (gpointer src);
static gchar    *gda_sql_statement_unknown_serialize (gpointer stmt);

GdaSqlStatementContentsInfo unknown_infos = {
	GDA_SQL_STATEMENT_UNKNOWN,
	"UNKNOWN",
	gda_sql_statement_unknown_new,
	gda_sql_statement_unknown_free,
	gda_sql_statement_unknown_copy,
	gda_sql_statement_unknown_serialize,
	NULL,
	NULL
};

GdaSqlStatementContentsInfo *
_gda_sql_statement_unknown_get_infos (void)
{
	return &unknown_infos;
}

static gpointer
gda_sql_statement_unknown_new (void)
{
	GdaSqlStatementUnknown *stmt;
	stmt = g_new0 (GdaSqlStatementUnknown, 1);
	GDA_SQL_ANY_PART (stmt)->type = GDA_SQL_ANY_STMT_UNKNOWN;
	return (gpointer) stmt;
}

static void
gda_sql_statement_unknown_free (gpointer stmt)
{
	GdaSqlStatementUnknown *unknown = (GdaSqlStatementUnknown *) stmt;
	g_slist_foreach (unknown->expressions, (GFunc) gda_sql_expr_free, NULL);
	g_slist_free (unknown->expressions);
	g_free (unknown);
}

static gpointer
gda_sql_statement_unknown_copy (gpointer src)
{
	GdaSqlStatementUnknown *dest;
	GSList *list;
	GdaSqlStatementUnknown *unknown = (GdaSqlStatementUnknown *) src;

	dest = gda_sql_statement_unknown_new ();
	for (list = unknown->expressions; list; list = list->next) {
		dest->expressions = g_slist_prepend (dest->expressions, 
						     gda_sql_expr_copy ((GdaSqlExpr*) list->data));
		gda_sql_any_part_set_parent (dest->expressions->data, dest);
	}
	dest->expressions = g_slist_reverse (dest->expressions);
	return dest;
}

static gchar *
gda_sql_statement_unknown_serialize (gpointer stmt)
{
	GString *string;
	gchar *str;
	GSList *list;
	GdaSqlStatementUnknown *unknown = (GdaSqlStatementUnknown *) stmt;

	g_return_val_if_fail (stmt, NULL);

	string = g_string_new ("\"contents\":[");
	for (list = unknown->expressions; list; list = list->next) {
		gchar *str;
		str = gda_sql_expr_serialize ((GdaSqlExpr*) list->data);
		if (list != unknown->expressions)
			g_string_append_c (string, ',');
		g_string_append (string, str);
		g_free (str);
	}
	g_string_append_c (string, ']');
	str = string->str;
	g_string_free (string, FALSE);
	return str;	
}

/**
 * gda_sql_statement_unknown_take_expressions
 * @stmt: a #GdaSqlStatement pointer
 * @expressions: a list of #GdaSqlExpr pointers
 *
 * Sets @stmt's list of expressions
 *
 * @expressions's 
 * responsability is transfered to
 * @stmt (which means @stmt is then responsible to freeing it when no longer needed).
 */
void
gda_sql_statement_unknown_take_expressions (GdaSqlStatement *stmt, GSList *expressions)
{
	GSList *l;
	GdaSqlStatementUnknown *unknown = (GdaSqlStatementUnknown *) stmt->contents;
	unknown->expressions = expressions;

	for (l = expressions; l; l = l->next)
		gda_sql_any_part_set_parent (l->data, unknown);
}