libgda r3094 - in trunk: . doc/C libgda libgda/sql-parser libgda/sqlite libgda/sqlite/virtual po providers providers/bdb providers/postgres providers/skel-implementation/capi providers/skel-implementation/models tests/meta-store tests/parser tests/providers



Author: vivien
Date: Fri Mar 21 21:07:20 2008
New Revision: 3094
URL: http://svn.gnome.org/viewvc/libgda?rev=3094&view=rev

Log:
2008-03-21  Vivien Malerba <malerba gnome-db org>

	* libgda/sqlite/gda-sqlite.h: correction for SQLite versions < 3.5 (for bug #523613)
	* providers/postgres/parser.y:
	* libgda/sql-parser/parser.y: allow identifiers to be enclosed in double quotes
	* tests/parser/testdata.xml:
	* libgda/sql-parser/gda-sql-parser.c: corrected a nasty bug while using a case statement
	* libgda/gda-data-model.c: removed debug info
	* libgda/information_schema.xml: added some descriptive fields
	* libgda/Makefile.am: added gda-statement-extra.h to list of headers
	* configure.in: remove non compiling providers from AC_OUTPUT, don't check anymore for
	LEX and YACC as they are not used anymore
	* tests/providers/*: don't fail if the providers have not been compiled (and are thus not found)
	* tests/meta-store/*: adaptations to the information schema changes
	* libgda/sql-parser/Makefile.am:
	* libgda/sql-parser/gen_def.c:
	* providers/prepare_provider_sources.sh:
	* providers/postgres/Makefile.am:
	* providers/skel-implementation/models/Makefile.am:
	* providers/skel-implementation/capi/Makefile.am: modifications to have "make distcheck" run
	* libgda/sql-parser/LemonPatch: keep the lemon.c modifications in a separate file
	* libgda/sql-parser/lemon.c: modified to be able to load the "lempar.c" file from a directory
	different than the current directory, and be able to write output files to the current
	directory
	* libgda/sqlite/virtual/libmain.c:
	* providers/postgres/gda-postgres-cursor-recordset.[ch]: removed unused files
	* libgda/gda-connection.c: removed unused private attribute


Added:
   trunk/libgda/sql-parser/LemonPatch
Removed:
   trunk/libgda/sqlite/virtual/libmain.c
   trunk/providers/postgres/gda-postgres-cursor-recordset.c
   trunk/providers/postgres/gda-postgres-cursor-recordset.h
Modified:
   trunk/ChangeLog
   trunk/configure.in
   trunk/doc/C/Makefile.am
   trunk/doc/C/gettingstarted.xml
   trunk/libgda/Makefile.am
   trunk/libgda/gda-connection.c
   trunk/libgda/gda-data-model.c
   trunk/libgda/information_schema.xml
   trunk/libgda/sql-parser/Makefile.am
   trunk/libgda/sql-parser/gda-sql-parser.c
   trunk/libgda/sql-parser/gen_def.c
   trunk/libgda/sql-parser/lemon.c
   trunk/libgda/sql-parser/parser.y
   trunk/libgda/sqlite/gda-sqlite.h
   trunk/po/POTFILES.in
   trunk/po/POTFILES.skip
   trunk/providers/bdb/Makefile.am
   trunk/providers/postgres/Makefile.am
   trunk/providers/postgres/gda-postgres-meta.c
   trunk/providers/postgres/parser.y
   trunk/providers/prepare_provider_sources.sh
   trunk/providers/skel-implementation/capi/Makefile.am
   trunk/providers/skel-implementation/models/Makefile.am
   trunk/tests/meta-store/Makefile.am
   trunk/tests/meta-store/common.c
   trunk/tests/meta-store/data_domains.csv
   trunk/tests/meta-store/data_domains_1.csv
   trunk/tests/parser/testdata.xml
   trunk/tests/providers/check_bdb.c
   trunk/tests/providers/check_firebird.c
   trunk/tests/providers/check_freetds.c
   trunk/tests/providers/check_ibmdb2.c
   trunk/tests/providers/check_ldap.c
   trunk/tests/providers/check_mdb.c
   trunk/tests/providers/check_msql.c
   trunk/tests/providers/check_mysql.c
   trunk/tests/providers/check_odbc.c
   trunk/tests/providers/check_oracle.c
   trunk/tests/providers/check_postgres.c
   trunk/tests/providers/check_sybase.c
   trunk/tests/providers/check_xbase.c

Modified: trunk/configure.in
==============================================================================
--- trunk/configure.in	(original)
+++ trunk/configure.in	Fri Mar 21 21:07:20 2008
@@ -96,8 +96,6 @@
 AC_STDC_HEADERS
 AC_ARG_PROGRAM
 AM_PROG_LIBTOOL
-AM_PROG_LEX
-AC_PROG_YACC
 AC_PROG_MAKE_SET
 
 dnl ******************************
@@ -1190,32 +1188,12 @@
 providers/Makefile
 providers/bdb/Makefile
 providers/bdb/libgda-bdb-4.0.pc
-providers/freetds/Makefile
-providers/freetds/libgda-freetds-4.0.pc
-providers/firebird/Makefile
-providers/firebird/libgda-firebird-4.0.pc
-providers/ibmdb2/Makefile
-providers/ibmdb2/libgda-ibmdb2-4.0.pc
-providers/ldap/Makefile
-providers/ldap/libgda-ldap-4.0.pc
 providers/mdb/Makefile
 providers/mdb/libgda-mdb-4.0.pc
-providers/mysql/Makefile
-providers/mysql/libgda-mysql-4.0.pc
-providers/msql/Makefile
-providers/msql/libgda-msql-4.0.pc
-providers/odbc/Makefile
-providers/odbc/libgda-odbc-4.0.pc
-providers/oracle/Makefile
-providers/oracle/libgda-oracle-4.0.pc
 providers/postgres/Makefile
 providers/postgres/libgda-postgres-4.0.pc
 providers/sqlite/Makefile
 providers/sqlite/libgda-sqlite-4.0.pc
-providers/sybase/Makefile
-providers/sybase/libgda-sybase-4.0.pc
-providers/xbase/Makefile
-providers/xbase/libgda-xbase-4.0.pc
 providers/skel-implementation/Makefile
 providers/skel-implementation/capi/Makefile
 providers/skel-implementation/capi/libgda-capi-4.0.pc
@@ -1250,19 +1228,19 @@
 echo "   Building Libxslt extension: `if test x$have_xslt != xno; then echo yes; else echo no; fi`"
 echo "   Compiled providers:"
 echo "      Berkeley DB = `if test x$bdbdir != x; then echo yes; else echo no; fi`"
-echo "      FireBird = `if test x$firebirddir != x; then echo yes; else echo no; fi`"
-echo "      FreeTDS = `if test x$freetdsdir != x; then echo yes; else echo no; fi`"
-echo "      IBM DB2 = `if test x$ibmdb2dir != x; then echo yes; else echo no; fi`"
+dnl echo "      FireBird = `if test x$firebirddir != x; then echo yes; else echo no; fi`"
+dnl echo "      FreeTDS = `if test x$freetdsdir != x; then echo yes; else echo no; fi`"
+dnl echo "      IBM DB2 = `if test x$ibmdb2dir != x; then echo yes; else echo no; fi`"
 echo "      MDB (MS Access) = `if test x$mdbdir != x; then echo yes; else echo no; fi`"
-echo "      MySQL = `if test x$mysqldir != x; then echo yes; else echo no; fi`"
-echo "      mSQL = `if test x$msqldir != x; then echo yes; else echo no; fi`"
-echo "      ODBC = `if test x$odbcdir != x; then echo yes; else echo no; fi`"
-echo "      Oracle = `if test x$oracledir != x; then echo yes; else echo no; fi`"
+dnl echo "      MySQL = `if test x$mysqldir != x; then echo yes; else echo no; fi`"
+dnl echo "      mSQL = `if test x$msqldir != x; then echo yes; else echo no; fi`"
+dnl echo "      ODBC = `if test x$odbcdir != x; then echo yes; else echo no; fi`"
+dnl echo "      Oracle = `if test x$oracledir != x; then echo yes; else echo no; fi`"
 echo "      PostgreSQL = `if test x$postgresdir != x; then echo yes; else echo no; fi`"
 echo "      SQLite = yes `if test x$have_sqlite = xyes; then echo '(from system installation)'; else echo '(embedded)'; fi`"
-echo "      Sybase = `if test x$sybasedir != x; then echo yes; else echo no; fi`"
-echo "      xBase (dBase, Clipper, FoxPro) = `if test x$xbasedir != x; then echo yes; else echo no; fi`"
-echo "      LDAP = `if test x$ldapdir != x; then echo yes; else echo no; fi`"
+dnl echo "      Sybase = `if test x$sybasedir != x; then echo yes; else echo no; fi`"
+dnl echo "      xBase (dBase, Clipper, FoxPro) = `if test x$xbasedir != x; then echo yes; else echo no; fi`"
+dnl echo "      LDAP = `if test x$ldapdir != x; then echo yes; else echo no; fi`"
 if test x"$br_cv_binreloc" != "xyes" -a x"$platform_win32" != "xyes"
 then
        echo "   Binreloc support is disabled: Libgda will not be relocatable. To enable binreloc support re-run with --enable-binreloc (see http://autopackage.org/docs/binreloc for more information)"

Modified: trunk/doc/C/Makefile.am
==============================================================================
--- trunk/doc/C/Makefile.am	(original)
+++ trunk/doc/C/Makefile.am	Fri Mar 21 21:07:20 2008
@@ -59,7 +59,7 @@
 # Other files to distribute
 EXTRA_DIST += examples/full_example.c installation.xml limitations.xml migration.xml migration2.xml \
 	server-operation.xml gettingstarted.xml virtual.xml virtual-notice.xml store-meta-type.xml \
-	DataModels.svg \
+	prov-writing.xml DataModels.svg \
 	architecture.svg parts.svg stmt-unknown.svg stmt-select.svg stmt-insert1.svg stmt-insert2.svg \
 	stmt-update.svg stmt-compound.svg information_schema.svg
 

Modified: trunk/doc/C/gettingstarted.xml
==============================================================================
--- trunk/doc/C/gettingstarted.xml	(original)
+++ trunk/doc/C/gettingstarted.xml	Fri Mar 21 21:07:20 2008
@@ -24,7 +24,8 @@
       
         /* open a connection */
 	g_print ("CONNECTING\n");
-	connection = gda_connection_open_from_dsn ("calvaris", NULL, NULL, GDA_CONNECTION_OPTIONS_READ_ONLY);
+	connection = gda_connection_open_from_dsn ("calvaris", NULL, 
+                                                   GDA_CONNECTION_OPTIONS_READ_ONLY, NULL);
 	g_print ("CONNECTED\n");
       
         /* use the connection */
@@ -71,7 +72,8 @@
       
         /* open a connection */
 	g_print ("CONNECTING\n");
-	connection = gda_connection_open_from_dsn ("calvaris", NULL, NULL, GDA_CONNECTION_OPTIONS_READ_ONLY);
+	connection = gda_connection_open_from_dsn ("calvaris", NULL, 
+                                                   GDA_CONNECTION_OPTIONS_READ_ONLY, NULL);
 	g_print ("CONNECTED\n");
       
         /* use the connection */

Modified: trunk/libgda/Makefile.am
==============================================================================
--- trunk/libgda/Makefile.am	(original)
+++ trunk/libgda/Makefile.am	Fri Mar 21 21:07:20 2008
@@ -64,6 +64,7 @@
 	gda-server-provider-extra.h \
 	gda-server-provider-private.h \
 	gda-statement.h \
+	gda-statement-extra.h \
 	gda-threader.h \
 	gda-transaction-status.h \
 	gda-transaction-status-private.h \
@@ -199,6 +200,7 @@
 dtd_DATA=$(DTD_FILES)
 EXTRA_DIST = \
 	$(DTD_FILES) \
+	$(xml_DATA) \
 	gda-marshal.list
 
 DISTCLEANFILES  = .deps/*.P

Modified: trunk/libgda/gda-connection.c
==============================================================================
--- trunk/libgda/gda-connection.c	(original)
+++ trunk/libgda/gda-connection.c	Fri Mar 21 21:07:20 2008
@@ -54,7 +54,6 @@
 
 	GdaMetaStore         *meta_store;
 	GList                *events_list;
-	GList                *recset_list;
 
 	GdaTransactionStatus *trans_status;
 	GHashTable           *prepared_stmts;
@@ -207,7 +206,6 @@
 	cnc->priv->auth_string = NULL;
 	cnc->priv->is_open = FALSE;
 	cnc->priv->events_list = NULL;
-	cnc->priv->recset_list = NULL;
 	cnc->priv->trans_status = NULL; /* no transaction yet */
 }
 
@@ -236,9 +234,6 @@
 	if (cnc->priv->events_list)
 		gda_connection_event_list_free (cnc->priv->events_list);
 
-	if (cnc->priv->recset_list)
-		g_list_foreach (cnc->priv->recset_list, (GFunc) g_object_unref, NULL);
-	
 	if (cnc->priv->trans_status) {
 		g_object_unref (cnc->priv->trans_status);
 		cnc->priv->trans_status = NULL;
@@ -409,9 +404,7 @@
  * provider (use gda_config_get_provider_info() to get it). Also one can use the "gda-sql-4.0 -L" command to 
  * list the possible named parameters.
  *
- * If a new #GdaConnection is created, then the caller will hold a reference on it.
- *
- * Returns: the opened connection if successful, %NULL if there was an error.
+ * Returns: a new #GdaConnection if connection opening was sucessfull or %NULL if there was an error.
  */
 GdaConnection *
 gda_connection_open_from_dsn (const gchar *dsn, const gchar *auth_string, 
@@ -496,8 +489,7 @@
  * and the real connection string will be extracted from that string (note that if @provider_name
  * is not %NULL then it will still be used as the provider ID).
  *
- * Returns: the opened connection if successful, %NULL if there is
- * an error.
+ * Returns: a new #GdaConnection if connection opening was sucessfull or %NULL if there was an error.
  */
 GdaConnection *
 gda_connection_open_from_string (const gchar *provider_name, const gchar *cnc_string, const gchar *auth_string,

Modified: trunk/libgda/gda-data-model.c
==============================================================================
--- trunk/libgda/gda-data-model.c	(original)
+++ trunk/libgda/gda-data-model.c	Fri Mar 21 21:07:20 2008
@@ -2088,7 +2088,7 @@
 		GdaColumn *gdacol;
 		GType coltype;
 
-#ifdef GDA_DEBUG
+#ifdef GDA_DEBUG_NO
 		{
 			GdaColumn *col = gda_data_model_describe_column (model, i);
 			g_print ("Model col %d has type %s\n", i, gda_g_type_to_string (gda_column_get_g_type (col)));

Modified: trunk/libgda/information_schema.xml
==============================================================================
--- trunk/libgda/information_schema.xml	(original)
+++ trunk/libgda/information_schema.xml	Fri Mar 21 21:07:20 2008
@@ -267,13 +267,14 @@
     <column name="trigger_catalog" pkey="TRUE"/>
     <column name="trigger_schema" pkey="TRUE"/>
     <column name="trigger_name" pkey="TRUE"/>
-    <column name="event_manipulation" pkey="TRUE"/>
-    <column name="event_object_catalog" pkey="TRUE"/>
-    <column name="event_object_schema" pkey="TRUE"/>
-    <column name="event_object_table" pkey="TRUE"/>
-    <column name="action_statement" nullok="TRUE"/>
-    <column name="action_orientation"/>
-    <column name="condition_timing"/>
+    <column name="event_manipulation" pkey="TRUE" descr="Event that fires the trigger (INSERT, UPDATE, or DELETE)"/>
+    <column name="event_object_catalog" pkey="TRUE" descr="Name of the database that contains the table that the trigger is defined on"/>
+    <column name="event_object_schema" pkey="TRUE" descr="Name of the schema that contains the table that the trigger is defined on"/>
+    <column name="event_object_table" pkey="TRUE" descr="Name of the table that the trigger is defined on"/>
+
+    <column name="action_statement" nullok="TRUE" descr="Statement that is executed by the trigger"/>
+    <column name="action_orientation" descr="Identifies whether the trigger fires once for each processed row or once for each statement (ROW or STATEMENT)"/>
+    <column name="condition_timing" descr="Time at which the trigger fires (BEFORE or AFTER)"/>
     <column name="trigger_comments" nullok="TRUE"/>
     <column name="trigger_short_name"/>
     <column name="trigger_full_name"/>

Added: trunk/libgda/sql-parser/LemonPatch
==============================================================================
--- (empty file)
+++ trunk/libgda/sql-parser/LemonPatch	Fri Mar 21 21:07:20 2008
@@ -0,0 +1,114 @@
+--- lemon.c
++++ lemon.c
+@@ -263,6 +263,8 @@
+   char *vardest;           /* Code for the default non-terminal destructor */
+   int  vardestln;          /* Line number for default non-term destructor code*/
+   char *filename;          /* Name of the input file */
++  char *base_filename;     /* Name of the input file, without the path part */
++  char *tmplname;          /* Name of the template file */
+   char *outname;           /* Name of the current output file */
+   char *tokenprefix;       /* A prefix added to token names in the .h file */
+   int nconflict;           /* Number of parsing conflicts */
+@@ -1393,6 +1395,7 @@
+   static int quiet = 0;
+   static int statistics = 0;
+   static int mhflag = 0;
++  static int local_out_dir = 0;
+   static struct s_options options[] = {
+     {OPT_FLAG, "b", (char*)&basisflag, "Print only the basis in report."},
+     {OPT_FLAG, "c", (char*)&compress, "Don't compress the action table."},
+@@ -1402,19 +1405,21 @@
+     {OPT_FLAG, "q", (char*)&quiet, "(Quiet) Don't print the report file."},
+     {OPT_FLAG, "s", (char*)&statistics,
+                                    "Print parser stats to standard output."},
++    {OPT_FLAG, "d", (char*)&local_out_dir, "Output files in the current directory."},
+     {OPT_FLAG, "x", (char*)&version, "Print the version number."},
+     {OPT_FLAG,0,0,0}
+   };
+   int i;
+   struct lemon lem;
++  char *def_tmpl_name = "lempar.c";
+ 
+   OptInit(argv,options,stderr);
+   if( version ){
+      printf("Lemon version 1.0\n");
+      exit(0); 
+   }
+-  if( OptNArgs()!=1 ){
+-    fprintf(stderr,"Exactly one filename argument is required.\n");
++  if( (OptNArgs() != 1) && (OptNArgs() != 2) ){
++    fprintf(stderr,"Usage: %s file.y [path to lempar.c file].\n", argv[0]);
+     exit(1);
+   }
+   memset(&lem, 0, sizeof(lem));
+@@ -1426,6 +1431,21 @@
+   State_init();
+   lem.argv0 = argv[0];
+   lem.filename = OptArg(0);
++  if (local_out_dir) {
++    char *ptr;
++    lem.base_filename = malloc (sizeof (char) * strlen (lem.filename) + 1);
++    memcpy (lem.base_filename, lem.filename, sizeof (char) * strlen (lem.filename) + 1);
++#ifdef __WIN32__
++    for (ptr = lem.base_filename + strlen (lem.filename) - 1; (ptr > lem.base_filename) && (*ptr != '\\'); ptr--);
++#else
++    for (ptr = lem.base_filename + strlen (lem.filename) - 1; (ptr > lem.base_filename) && (*ptr != '/'); ptr--);
++#endif
++    if (ptr > lem.base_filename)
++     lem.base_filename = ptr + 1;
++  }
++  else
++    lem.base_filename = OptArg(0);
++  lem.tmplname = (OptNArgs() == 2) ? OptArg(1) : def_tmpl_name;
+   lem.basisflag = basisflag;
+   Symbol_new("$");
+   lem.errsym = Symbol_new("error");
+@@ -2667,12 +2687,12 @@
+   char *name;
+   char *cp;
+ 
+-  name = malloc( strlen(lemp->filename) + strlen(suffix) + 5 );
++  name = malloc( strlen(lemp->base_filename) + strlen(suffix) + 5 );
+   if( name==0 ){
+     fprintf(stderr,"Can't allocate space for a filename.\n");
+     exit(1);
+   }
+-  strcpy(name,lemp->filename);
++  strcpy(name,lemp->base_filename);
+   cp = strrchr(name,'.');
+   if( cp ) *cp = 0;
+   strcat(name,suffix);
+@@ -3008,7 +3028,6 @@
+ PRIVATE FILE *tplt_open(lemp)
+ struct lemon *lemp;
+ {
+-  static char templatename[] = "lempar.c";
+   char buf[1000];
+   FILE *in;
+   char *tpltname;
+@@ -3022,20 +3041,20 @@
+   }
+   if( access(buf,004)==0 ){
+     tpltname = buf;
+-  }else if( access(templatename,004)==0 ){
+-    tpltname = templatename;
++  }else if( access(lemp->tmplname,004)==0 ){
++    tpltname = lemp->tmplname;
+   }else{
+-    tpltname = pathsearch(lemp->argv0,templatename,0);
++    tpltname = pathsearch(lemp->argv0,lemp->tmplname,0);
+   }
+   if( tpltname==0 ){
+     fprintf(stderr,"Can't find the parser driver template file \"%s\".\n",
+-    templatename);
++    lemp->tmplname);
+     lemp->errorcnt++;
+     return 0;
+   }
+   in = fopen(tpltname,"rb");
+   if( in==0 ){
+-    fprintf(stderr,"Can't open the template file \"%s\".\n",templatename);
++    fprintf(stderr,"Can't open the template file \"%s\".\n",lemp->tmplname);
+     lemp->errorcnt++;
+     return 0;
+   }

Modified: trunk/libgda/sql-parser/Makefile.am
==============================================================================
--- trunk/libgda/sql-parser/Makefile.am	(original)
+++ trunk/libgda/sql-parser/Makefile.am	Fri Mar 21 21:07:20 2008
@@ -7,16 +7,16 @@
         $(LIBGDA_CFLAGS)
 
 lemon$(EXEEXT_FOR_BUILD): lemon.c
-	$(CC_FOR_BUILD) -o lemon$(EXEEXT_FOR_BUILD) lemon.c
+	$(CC_FOR_BUILD) -o lemon$(EXEEXT_FOR_BUILD) $(srcdir)/lemon.c
 
 gen_def$(EXEEXT_FOR_BUILD): gen_def.c
-	 $(CC_FOR_BUILD) -o gen_def$(EXEEXT_FOR_BUILD) gen_def.c
+	 $(CC_FOR_BUILD) -o gen_def$(EXEEXT_FOR_BUILD) -DSRCDIR=\"$(srcdir)\" $(srcdir)/gen_def.c
 
 parser.c parser.h: parser.y lemon$(EXEEXT_FOR_BUILD)
-	- ./lemon$(EXEEXT_FOR_BUILD) parser.y
+	- ./lemon$(EXEEXT_FOR_BUILD) -q -d $(srcdir)/parser.y $(srcdir)/lempar.c
 
 delimiter.c delimiter.h: delimiter.y lemon$(EXEEXT_FOR_BUILD)
-	./lemon$(EXEEXT_FOR_BUILD) delimiter.y
+	./lemon$(EXEEXT_FOR_BUILD) -q -d $(srcdir)/delimiter.y $(srcdir)/lempar.c
 
 token_types.h: gen_def$(EXEEXT_FOR_BUILD) delimiter.h parser.h
 	./gen_def$(EXEEXT_FOR_BUILD) > token_types.h
@@ -63,7 +63,7 @@
         gda-statement-struct-unknown.c \
         gda-statement-struct-util.c
 
-EXTRA_DIST= parser.y delimiter.y lemon.c lempar.c gen_def.c
+EXTRA_DIST= parser.y delimiter.y lemon.c lempar.c gen_def.c parser_tokens.h
 
 CLEANFILES = parser.h parser.c parser.out delimiter.h delimiter.c delimiter.out token_types.h \
 	lemon$(EXEEXT_FOR_BUILD) gen_def$(EXEEXT_FOR_BUILD)

Modified: trunk/libgda/sql-parser/gda-sql-parser.c
==============================================================================
--- trunk/libgda/sql-parser/gda-sql-parser.c	(original)
+++ trunk/libgda/sql-parser/gda-sql-parser.c	Fri Mar 21 21:07:20 2008
@@ -988,8 +988,8 @@
 	GValue *retval = NULL;
 	gint consumed_chars = 1;
 
-	/* safe init */
-	parser->priv->context->token_type = L_ILLEGAL;
+	/* init to capture non treaded cases */
+	parser->priv->context->token_type = G_MININT;
 
 	if (!*z) {
 		parser->priv->context->token_type = L_END_OF_FILE;
@@ -1049,20 +1049,19 @@
 		if (parser->priv->mode != GDA_SQL_PARSER_MODE_DELIMIT) {
 			parser->priv->context->token_type = L_PLUS;
 			consumed_chars = 1;
-			break;
 		}
+		break;
 	case '*': 
 		if (z[1] == '/') {
 			parser->priv->context->token_type = L_RSBRACKET;
 			consumed_chars = 2;
 			parser->priv->context->in_param_spec = FALSE;
-			break;
 		}
 		else {
 			parser->priv->context->token_type = L_STAR;
 			consumed_chars = 1;
-			break;
 		}
+		break;
 	case '%':
 		if (parser->priv->mode != GDA_SQL_PARSER_MODE_DELIMIT) {
 			parser->priv->context->token_type = L_REM;
@@ -1074,7 +1073,6 @@
 			if (z[1] != '*' || z[2] == 0) {
 				parser->priv->context->token_type = L_SLASH;
 				consumed_chars = 1;
-				break;
 			}
 		}
 		else if (z[1] == '*') {
@@ -1082,25 +1080,28 @@
 			parser->priv->context->token_type = L_LSBRACKET;
 			consumed_chars = 2;
 			parser->priv->context->in_param_spec = TRUE;
-			break;
 		}
+		break;
 	case '=': 
 		if (parser->priv->mode != GDA_SQL_PARSER_MODE_DELIMIT) {
 			parser->priv->context->token_type = L_EQ;
 			consumed_chars = 1 + (z[1] == '=');
-			break;
 		}
+		break;
 	case '<': 
 		if ((c = z[1]) == '=') {
 			parser->priv->context->token_type = L_LEQ;
 			consumed_chars = 2;
-		} else if (c == '>') {
+		}
+		else if (c == '>') {
 			parser->priv->context->token_type = L_DIFF;
 			consumed_chars = 2;
-		} else if (c== '<') {
+		}
+		else if (c== '<') {
 			parser->priv->context->token_type = L_LSHIFT;
 			consumed_chars = 2;
-		} else {
+		}
+		else {
 			parser->priv->context->token_type = L_LT;
 			consumed_chars = 1;
 		}
@@ -1109,10 +1110,12 @@
 		if ((c = z[1]) == '=') {
 			parser->priv->context->token_type = L_GEQ;
 			consumed_chars = 2;
-		} else if (c == '>') {
+		}
+		else if (c == '>') {
 			parser->priv->context->token_type = L_RSHIFT;
 			consumed_chars = 2;
-		} else {
+		}
+		else {
 			parser->priv->context->token_type = L_GT;
 			consumed_chars = 1;
 		}
@@ -1133,8 +1136,8 @@
 					consumed_chars = 2;
 				}
 			}
-			break;
 		}
+		break;
 	case '|': 
 		if (parser->priv->mode != GDA_SQL_PARSER_MODE_DELIMIT) {
 			if (z[1] != '|') {
@@ -1144,13 +1147,12 @@
 				parser->priv->context->token_type = L_CONCAT;
 				consumed_chars = 2;
 			}
-			break;
 		}
 		else {
 			parser->priv->context->token_type = L_RAWSTRING;
 			consumed_chars = 1;
-			break;
 		}
+		break;
 	case ',': 
 		parser->priv->context->token_type = L_COMMA;
 		consumed_chars = 1;
@@ -1159,8 +1161,8 @@
 		if (parser->priv->mode != GDA_SQL_PARSER_MODE_DELIMIT) {
 			parser->priv->context->token_type = L_BITAND;
 			consumed_chars = 1;
-			break;
 		}
+		break;
 	case '~': 
 		if (parser->priv->mode != GDA_SQL_PARSER_MODE_DELIMIT) {
 			if (z[1] == '*') {
@@ -1174,8 +1176,8 @@
 					parser->priv->context->token_type = L_BITNOT;
 				consumed_chars = 1;
 			}
-			break;
 		}
+		break;
 	case '\'':
 	case '"': {
 		char delim = z[0];
@@ -1242,8 +1244,8 @@
 			parser->priv->context->token_type = L_SIMPLEPARAM;
 			retval = token_as_string (parser->priv->context->next_token_start + 1, i - 1);
 			consumed_chars = i;
-			break;
 		}
+		break;
 	case '#': {
 		if (z[1] == '#') {
 			for (i=2; (z[i]) && (IdChar (z[i]) || (z[i] == '+') || (z[i] == '-') || (z[i] == '.') || (z[i] == ':')) &&
@@ -1290,7 +1292,6 @@
 					}
 					i++;
 				}
-				break; /* case */
 			}
 		}
 		else if (parser->priv->flavour == GDA_SQL_PARSER_FLAVOUR_SQLITE) {
@@ -1298,21 +1299,19 @@
 			parser->priv->context->token_type = L_SIMPLEPARAM;
 			retval = token_as_string (parser->priv->context->next_token_start + 1, i - 1);
 			consumed_chars = i;
-			break;
 		}
+		break;
 	case '@':
 	case ':':
-		if (parser->priv->flavour == GDA_SQL_PARSER_FLAVOUR_SQLITE) {
+		if (z[1] == ':') {
+			parser->priv->context->token_type = L_PGCAST;
+			consumed_chars = 2;
+		}
+		else if (parser->priv->flavour == GDA_SQL_PARSER_FLAVOUR_SQLITE) {
 			for(i=1; isalnum(z[i]) || (z[i] == '_'); i++){}
 			parser->priv->context->token_type = L_SIMPLEPARAM;
 			retval = token_as_string (parser->priv->context->next_token_start + 1, i - 1);
 			consumed_chars = i;
-			break;
-		}
-		else if ((parser->priv->flavour == GDA_SQL_PARSER_FLAVOUR_POSTGRESQL) && (z[1] == ':')) {
-			parser->priv->context->token_type = L_PGCAST;
-			consumed_chars = 2;
-			break;
 		}
 		break;
 #ifndef SQLITE_OMIT_BLOB_LITERAL
@@ -1333,18 +1332,22 @@
 			}
 			if ( c ) i++;
 			consumed_chars = i;
-			break;
 		}
-		/* Otherwise fall through to the next case */
+		break;
 	}
 #endif
-	default: 
+	default:
+		break;
+	}
+
+	if (parser->priv->context->token_type == G_MININT) {
+		/* now treat non treated cases */
 		if ((parser->priv->mode != GDA_SQL_PARSER_MODE_DELIMIT) && (! parser->priv->context->in_param_spec)) {
-			if (!IdChar (*z))
-				break;
-			for (i=1; IdChar (z[i]); i++){}
-			parser->priv->context->token_type = keywordCode (parser, (char*)z, i);
-			consumed_chars = i;
+			if (IdChar (*z)) {
+				for (i=1; IdChar (z[i]); i++){}
+				parser->priv->context->token_type = keywordCode (parser, (char*)z, i);
+				consumed_chars = i;
+			}
 		}
 		else {
 			if ((! parser->priv->context->in_param_spec) && IdChar (*z)) {
@@ -1355,47 +1358,52 @@
 				if (ttype != L_RAWSTRING) {
 					parser->priv->context->token_type = ttype;
 					consumed_chars = i;
-					break;
 				}
 			}
 
-			if (!strncmp (parser->priv->context->next_token_start, "name:", 5)) {
-				parser->priv->context->next_token_start += 5;
-				retval = getToken (parser);
-				parser->priv->context->token_type = L_PNAME;
-				consumed_chars = 0;
-			}
-			else if (!strncmp (parser->priv->context->next_token_start, "type:", 5)) {
-				parser->priv->context->next_token_start += 5;
-				retval = getToken (parser);
-				parser->priv->context->token_type = L_PTYPE;
-				consumed_chars = 0;
-			}
-			else if (!strncmp (parser->priv->context->next_token_start, "descr:", 6)) {
-				parser->priv->context->next_token_start += 6;
-				retval = getToken (parser);
-				parser->priv->context->token_type = L_PDESCR;
-				consumed_chars = 0;
-			}
-			else if (!strncmp (parser->priv->context->next_token_start, "nullok:", 7)) {
-				parser->priv->context->next_token_start += 7;
-				retval = getToken (parser);
-				parser->priv->context->token_type = L_PNULLOK;
-				consumed_chars = 0;
-			}
-			else {
-				for (i=1; z[i] && (! isspace (z[i])) && 
-					     (z[i] != parser->priv->context->delimiter) && (z[i] != '*') && 
-					     (z[i] != '\'') && (z[i] != '"'); i++){}
-				parser->priv->context->token_type = L_RAWSTRING;
-				consumed_chars = i;
+			if (parser->priv->context->token_type == G_MININT) {
+				if (!strncmp (parser->priv->context->next_token_start, "name:", 5)) {
+					parser->priv->context->next_token_start += 5;
+					retval = getToken (parser);
+					parser->priv->context->token_type = L_PNAME;
+					consumed_chars = 0;
+				}
+				else if (!strncmp (parser->priv->context->next_token_start, "type:", 5)) {
+					parser->priv->context->next_token_start += 5;
+					retval = getToken (parser);
+					parser->priv->context->token_type = L_PTYPE;
+					consumed_chars = 0;
+				}
+				else if (!strncmp (parser->priv->context->next_token_start, "descr:", 6)) {
+					parser->priv->context->next_token_start += 6;
+					retval = getToken (parser);
+					parser->priv->context->token_type = L_PDESCR;
+					consumed_chars = 0;
+				}
+				else if (!strncmp (parser->priv->context->next_token_start, "nullok:", 7)) {
+					parser->priv->context->next_token_start += 7;
+					retval = getToken (parser);
+					parser->priv->context->token_type = L_PNULLOK;
+					consumed_chars = 0;
+				}
+				else {
+					for (i=1; z[i] && (! isspace (z[i])) && 
+						     (z[i] != parser->priv->context->delimiter) && (z[i] != '*') && 
+						     (z[i] != '\'') && (z[i] != '"'); i++){}
+					parser->priv->context->token_type = L_RAWSTRING;
+					consumed_chars = i;
+				}
 			}
 		}
 	}
 
-	if (!retval)
-		retval = token_as_string (parser->priv->context->next_token_start, consumed_chars);
+	/* fallback for the token type */
+	if (parser->priv->context->token_type == G_MININT)
+		parser->priv->context->token_type = L_ILLEGAL;
 
+	if (!retval)
+		retval = token_as_string (parser->priv->context->next_token_start, consumed_chars)
+;
  tok_end:
 	parser->priv->context->last_token_start = parser->priv->context->next_token_start;
 	parser->priv->context->next_token_start += consumed_chars;

Modified: trunk/libgda/sql-parser/gen_def.c
==============================================================================
--- trunk/libgda/sql-parser/gen_def.c	(original)
+++ trunk/libgda/sql-parser/gen_def.c	Fri Mar 21 21:07:20 2008
@@ -63,11 +63,21 @@
 	FILE *fd_delim;
 	HashEntry *illegal_entry;
 	HashEntry *rawstring_entry;
+	char *file_imposed;
 
 	memset (entries, 0, sizeof (entries));
-	fd_imposed = fopen (IMPOSED_HEADER, "r");
+#ifdef SRCDIR
+  #ifdef __WIN32__
+	file_imposed = SRCDIR "\\" IMPOSED_HEADER;
+  #else
+	file_imposed = SRCDIR "/" IMPOSED_HEADER;
+  #endif
+#else
+	file_imposed = IMPOSED_HEADER;
+#endif
+	fd_imposed = fopen (file_imposed, "r");
 	if (!fd_imposed) {
-		printf ("Can't open '%s':%s\n", IMPOSED_HEADER, strerror (errno));
+		printf ("Can't open '%s':%s\n", file_imposed, strerror (errno));
 		return 1;
 	}
 	fd_parser = fopen (PARSER_HEADER, "r");

Modified: trunk/libgda/sql-parser/lemon.c
==============================================================================
--- trunk/libgda/sql-parser/lemon.c	(original)
+++ trunk/libgda/sql-parser/lemon.c	Fri Mar 21 21:07:20 2008
@@ -263,6 +263,8 @@
   char *vardest;           /* Code for the default non-terminal destructor */
   int  vardestln;          /* Line number for default non-term destructor code*/
   char *filename;          /* Name of the input file */
+  char *base_filename;     /* Name of the input file, without the path part */
+  char *tmplname;          /* Name of the template file */
   char *outname;           /* Name of the current output file */
   char *tokenprefix;       /* A prefix added to token names in the .h file */
   int nconflict;           /* Number of parsing conflicts */
@@ -1393,6 +1395,7 @@
   static int quiet = 0;
   static int statistics = 0;
   static int mhflag = 0;
+  static int local_out_dir = 0;
   static struct s_options options[] = {
     {OPT_FLAG, "b", (char*)&basisflag, "Print only the basis in report."},
     {OPT_FLAG, "c", (char*)&compress, "Don't compress the action table."},
@@ -1402,19 +1405,21 @@
     {OPT_FLAG, "q", (char*)&quiet, "(Quiet) Don't print the report file."},
     {OPT_FLAG, "s", (char*)&statistics,
                                    "Print parser stats to standard output."},
+    {OPT_FLAG, "d", (char*)&local_out_dir, "Output files in the current directory."},
     {OPT_FLAG, "x", (char*)&version, "Print the version number."},
     {OPT_FLAG,0,0,0}
   };
   int i;
   struct lemon lem;
+  char *def_tmpl_name = "lempar.c";
 
   OptInit(argv,options,stderr);
   if( version ){
      printf("Lemon version 1.0\n");
      exit(0); 
   }
-  if( OptNArgs()!=1 ){
-    fprintf(stderr,"Exactly one filename argument is required.\n");
+  if( (OptNArgs() != 1) && (OptNArgs() != 2) ){
+    fprintf(stderr,"Usage: %s file.y [path to lempar.c file].\n", argv[0]);
     exit(1);
   }
   memset(&lem, 0, sizeof(lem));
@@ -1426,6 +1431,21 @@
   State_init();
   lem.argv0 = argv[0];
   lem.filename = OptArg(0);
+  if (local_out_dir) {
+    char *ptr;
+    lem.base_filename = malloc (sizeof (char) * strlen (lem.filename) + 1);
+    memcpy (lem.base_filename, lem.filename, sizeof (char) * strlen (lem.filename) + 1);
+#ifdef __WIN32__
+    for (ptr = lem.base_filename + strlen (lem.filename) - 1; (ptr > lem.base_filename) && (*ptr != '\\'); ptr--);
+#else
+    for (ptr = lem.base_filename + strlen (lem.filename) - 1; (ptr > lem.base_filename) && (*ptr != '/'); ptr--);
+#endif
+    if (ptr > lem.base_filename)
+     lem.base_filename = ptr + 1;
+  }
+  else
+    lem.base_filename = OptArg(0);
+  lem.tmplname = (OptNArgs() == 2) ? OptArg(1) : def_tmpl_name;
   lem.basisflag = basisflag;
   Symbol_new("$");
   lem.errsym = Symbol_new("error");
@@ -2667,12 +2687,12 @@
   char *name;
   char *cp;
 
-  name = malloc( strlen(lemp->filename) + strlen(suffix) + 5 );
+  name = malloc( strlen(lemp->base_filename) + strlen(suffix) + 5 );
   if( name==0 ){
     fprintf(stderr,"Can't allocate space for a filename.\n");
     exit(1);
   }
-  strcpy(name,lemp->filename);
+  strcpy(name,lemp->base_filename);
   cp = strrchr(name,'.');
   if( cp ) *cp = 0;
   strcat(name,suffix);
@@ -3008,7 +3028,6 @@
 PRIVATE FILE *tplt_open(lemp)
 struct lemon *lemp;
 {
-  static char templatename[] = "lempar.c";
   char buf[1000];
   FILE *in;
   char *tpltname;
@@ -3022,20 +3041,20 @@
   }
   if( access(buf,004)==0 ){
     tpltname = buf;
-  }else if( access(templatename,004)==0 ){
-    tpltname = templatename;
+  }else if( access(lemp->tmplname,004)==0 ){
+    tpltname = lemp->tmplname;
   }else{
-    tpltname = pathsearch(lemp->argv0,templatename,0);
+    tpltname = pathsearch(lemp->argv0,lemp->tmplname,0);
   }
   if( tpltname==0 ){
     fprintf(stderr,"Can't find the parser driver template file \"%s\".\n",
-    templatename);
+    lemp->tmplname);
     lemp->errorcnt++;
     return 0;
   }
   in = fopen(tpltname,"rb");
   if( in==0 ){
-    fprintf(stderr,"Can't open the template file \"%s\".\n",templatename);
+    fprintf(stderr,"Can't open the template file \"%s\".\n",lemp->tmplname);
     lemp->errorcnt++;
     return 0;
   }

Modified: trunk/libgda/sql-parser/parser.y
==============================================================================
--- trunk/libgda/sql-parser/parser.y	(original)
+++ trunk/libgda/sql-parser/parser.y	Fri Mar 21 21:07:20 2008
@@ -957,7 +957,7 @@
 // Values: for all constants (G_TYPE_STRING GValue)
 value(V) ::= NULL. {V = NULL;}
 value(V) ::= STRING(S). {V = S;}
-value(V) ::= TEXTUAL(T). {V = T;}
+//value(V) ::= TEXTUAL(T). {V = T;}
 value(V) ::= INTEGER(I). {V = I;}
 value(V) ::= FLOAT(F). {V = F;}
 
@@ -987,6 +987,7 @@
 nm(A) ::= ID(X).       {A = X;}
 
 // Fully qualified name
+fullname(A) ::= TEXTUAL(X). {A = X;}
 fullname(A) ::= nm(X). {A = X;}
 fullname(A) ::= nm(S) DOT nm(X). {gchar *str;
 				  str = g_strdup_printf ("%s.%s", g_value_get_string (S), g_value_get_string (X));

Modified: trunk/libgda/sqlite/gda-sqlite.h
==============================================================================
--- trunk/libgda/sqlite/gda-sqlite.h	(original)
+++ trunk/libgda/sqlite/gda-sqlite.h	Fri Mar 21 21:07:20 2008
@@ -31,6 +31,9 @@
 
 #ifdef HAVE_SQLITE
 #include <sqlite3.h>
+  #if (SQLITE_VERSION_NUMBER < 3005000)
+  typedef sqlite_int64 sqlite3_int64;
+  #endif
 #else
 #include "sqlite-src/sqlite3.h"
 #endif
@@ -46,7 +49,6 @@
 	GdaDataModel *aggregates_model;
 } SqliteConnectionData;
 
-
 /* 
  * Utility functions
  */

Modified: trunk/po/POTFILES.in
==============================================================================
--- trunk/po/POTFILES.in	(original)
+++ trunk/po/POTFILES.in	Fri Mar 21 21:07:20 2008
@@ -1,4 +1,3 @@
-doc/C/prov-writing.xml
 libgda/gda-batch.c
 libgda/gda-config.c
 libgda/gda-connection.c
@@ -47,7 +46,6 @@
 libgda/sqlite/virtual/gda-virtual-provider.c
 libgda/sqlite/virtual/gda-vprovider-data-model.c
 libgda/sqlite/virtual/gda-vprovider-hub.c
-libgda/sqlite/virtual/libmain.c
 libgda/sql-parser/gda-sql-parser.c
 libgda/sql-parser/gda-statement-struct.c
 libgda/sql-parser/gda-statement-struct-compound.c
@@ -63,67 +61,10 @@
 providers/bdb/bdb_specs_dsn.xml.in
 providers/bdb/gda-bdb-provider.c
 providers/bdb/libmain.c
-providers/firebird/firebird_specs_dsn.xml.in
-providers/firebird/gda-firebird-blob-op.c
-providers/firebird/gda-firebird-provider.c
-providers/firebird/gda-firebird-recordset.c
-providers/firebird/libmain.c
-providers/freetds/freetds_specs_dsn.xml.in
-providers/freetds/gda-freetds-message.c
-providers/freetds/gda-freetds-provider.c
-providers/freetds/gda-freetds-recordset.c
-providers/freetds/gda-freetds-types.c
-providers/freetds/libmain.c
-providers/freetds/utils.c
-providers/ibmdb2/gda-ibmdb2-provider.c
-providers/ibmdb2/gda-ibmdb2-recordset.c
-providers/ibmdb2/gda-ibmdb2-types.c
-providers/ibmdb2/ibmdb2_specs_dsn.xml.in
-providers/ibmdb2/libmain.c
-providers/ibmdb2/utils.c
-providers/ldap/gda-ldap-provider.c
-providers/ldap/gda-ldap-recordset.c
-providers/ldap/ldap_specs_dsn.xml.in
-providers/ldap/libmain.c
 providers/mdb/gda-mdb-provider.c
 providers/mdb/libmain.c
 providers/mdb/mdb_specs_dsn.xml.in
-providers/msql/gda-msql-provider.c
-providers/msql/gda-msql-recordset.c
-providers/msql/libmain.c
-providers/msql/msql_specs_dsn.xml.in
-providers/mysql/gda-mysql-ddl.c
-providers/mysql/gda-mysql-provider.c
-providers/mysql/gda-mysql-recordset.c
-providers/mysql/libmain.c
-providers/mysql/mysql_specs_add_column.xml.in
-providers/mysql/mysql_specs_create_db.xml.in
-providers/mysql/mysql_specs_create_index.xml.in
-providers/mysql/mysql_specs_create_table.xml.in
-providers/mysql/mysql_specs_create_view.xml.in
-providers/mysql/mysql_specs_drop_column.xml.in
-providers/mysql/mysql_specs_drop_db.xml.in
-providers/mysql/mysql_specs_drop_index.xml.in
-providers/mysql/mysql_specs_drop_table.xml.in
-providers/mysql/mysql_specs_drop_view.xml.in
-providers/mysql/mysql_specs_dsn.xml.in
-providers/mysql/mysql_specs_rename_table.xml.in
-providers/odbc/gda-odbc-provider.c
-providers/odbc/gda-odbc-recordset.c
-providers/odbc/libmain.c
-providers/odbc/odbc_specs_dsn.xml.in
-providers/odbc/utils.c
-providers/oracle/gda-oracle-blob-op.c
-providers/oracle/gda-oracle-ddl.c
-providers/oracle/gda-oracle-provider.c
-providers/oracle/gda-oracle-recordset.c
-providers/oracle/libmain.c
-providers/oracle/oracle_specs_drop_index.xml.in
-providers/oracle/oracle_specs_drop_table.xml.in
-providers/oracle/oracle_specs_dsn.xml.in
-providers/oracle/utils.c
 providers/postgres/gda-postgres-blob-op.c
-providers/postgres/gda-postgres-cursor-recordset.c
 providers/postgres/gda-postgres-ddl.c
 providers/postgres/gda-postgres-handler-bin.c
 providers/postgres/gda-postgres-meta.c
@@ -156,15 +97,6 @@
 providers/sqlite/sqlite_specs_drop_view.xml.in
 providers/sqlite/sqlite_specs_dsn.xml.in
 providers/sqlite/sqlite_specs_rename_table.xml.in
-providers/sybase/gda-sybase-provider.c
-providers/sybase/gda-sybase-recordset.c
-providers/sybase/gda-sybase-types.c
-providers/sybase/libmain.c
-providers/sybase/sybase_specs_dsn.xml.in
-providers/sybase/utils.c
-providers/xbase/gda-xbase-provider.c
-providers/xbase/libmain.c
-providers/xbase/xbase_specs_dsn.xml.in
 testing/gda-test-blob.c
 testing/gda-test-connection.c
 tools/command-exec.c

Modified: trunk/po/POTFILES.skip
==============================================================================
--- trunk/po/POTFILES.skip	(original)
+++ trunk/po/POTFILES.skip	Fri Mar 21 21:07:20 2008
@@ -1,3 +1,6 @@
+doc/C/prov-writing.xml
+libgda/sqlite/sql-parser.c/lemon.c
+libgda/sqlite/sql-parser.c/lempar.c
 libgda/sqlite/sqlite-src/sqlite3.c
 providers/skel-implementation/capi/capi_specs_create_table.xml.in
 providers/skel-implementation/capi/capi_specs_dsn.xml.in

Modified: trunk/providers/bdb/Makefile.am
==============================================================================
--- trunk/providers/bdb/Makefile.am	(original)
+++ trunk/providers/bdb/Makefile.am	Fri Mar 21 21:07:20 2008
@@ -10,6 +10,7 @@
 	$(BDB_CFLAGS)
 
 libgda_bdb_la_SOURCES = \
+	gda-bdb.h \
 	gda-bdb-provider.c \
 	gda-bdb-provider.h \
 	libmain.c

Modified: trunk/providers/postgres/Makefile.am
==============================================================================
--- trunk/providers/postgres/Makefile.am	(original)
+++ trunk/providers/postgres/Makefile.am	Fri Mar 21 21:07:20 2008
@@ -9,10 +9,10 @@
 
 # parser generation
 parser.c parser.h: parser.y $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD)
-	- $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD) parser.y
+	- $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD) -q -d $(srcdir)/parser.y $(top_srcdir)/libgda/sql-parser/lempar.c
 
 gen_def$(EXEEXT_FOR_BUILD): gen_def.c
-	$(CC_FOR_BUILD) -o gen_def$(EXEEXT_FOR_BUILD) -DIMPOSED_HEADER=\""$(top_builddir)/libgda/sql-parser/parser_tokens.h"\" gen_def.c
+	$(CC_FOR_BUILD) -o gen_def$(EXEEXT_FOR_BUILD) -DIMPOSED_HEADER=\""$(top_srcdir)/libgda/sql-parser/parser_tokens.h"\" $(srcdir)/gen_def.c
 
 postgres_token_types.h: gen_def$(EXEEXT_FOR_BUILD) parser.h
 	./gen_def$(EXEEXT_FOR_BUILD) > postgres_token_types.h
@@ -71,7 +71,7 @@
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libgda-postgres-4.0.pc
 
-EXTRA_DIST = $(xml_in_files) libgda-postgres-4.0.pc.in parser.y
+EXTRA_DIST = $(xml_in_files) libgda-postgres-4.0.pc.in parser.y gen_def.c
 DISTCLEANFILES = $(xml_DATA)
 
 CLEANFILES = parser.h parser.c parser.out postgres_token_types.h gen_def$(EXEEXT_FOR_BUILD)

Modified: trunk/providers/postgres/gda-postgres-meta.c
==============================================================================
--- trunk/providers/postgres/gda-postgres-meta.c	(original)
+++ trunk/providers/postgres/gda-postgres-meta.c	Fri Mar 21 21:07:20 2008
@@ -69,6 +69,8 @@
 	I_STMT_DOMAINS_CONSTRAINTS_ALL,
 	I_STMT_VIEWS_COLUMNS,
 	I_STMT_VIEWS_COLUMNS_ALL,
+	I_STMT_TRIGGERS,
+	I_STMT_TRIGGERS_ALL,
 } InternalStatementItem;
 
 
@@ -164,7 +166,13 @@
 	"SELECT view_catalog, view_schema, view_name, table_catalog, table_schema, table_name, column_name FROM information_schema.view_column_usage WHERE view_catalog = ##cat::string AND view_schema = ##schema::string AND view_name = ##name::string",
 
 	/* I_STMT_VIEWS_COLUMNS_ALL */
-	"SELECT view_catalog, view_schema, view_name, table_catalog, table_schema, table_name, column_name FROM information_schema.view_column_usage"
+	"SELECT view_catalog, view_schema, view_name, table_catalog, table_schema, table_name, column_name FROM information_schema.view_column_usage",
+
+	/* I_STMT_TRIGGERS */
+	"SELECT current_database()::information_schema.sql_identifier, n.nspname::information_schema.sql_identifier, t.tgname::information_schema.sql_identifier, em.text::information_schema.character_data, current_database()::information_schema.sql_identifier, n.nspname::information_schema.sql_identifier, c.relname::information_schema.sql_identifier, \"substring\"(pg_get_triggerdef(t.oid), \"position\"(\"substring\"(pg_get_triggerdef(t.oid), 48), 'EXECUTE PROCEDURE'::text) + 47)::information_schema.character_data AS action_statement, CASE WHEN (t.tgtype::integer & 1) = 1 THEN 'ROW'::text ELSE 'STATEMENT'::text END::information_schema.character_data AS action_orientation, CASE WHEN (t.tgtype::integer & 2) = 2 THEN 'BEFORE'::text ELSE 'AFTER'::text END::information_schema.character_data AS condition_timing, pg_catalog.obj_description(t.oid), t.tgname, t.tgname FROM pg_namespace n, pg_class c, pg_trigger t, (( SELECT 4, 'INSERT' UNION ALL SELECT 8, 'DELETE') UNION ALL SELECT 16, 'UPDA
 TE') em(num, text) WHERE n.oid = c.relnamespace AND c.oid = t.tgrelid AND (t.tgtype::integer & em.num) <> 0 AND NOT t.tgisconstraint AND NOT pg_is_other_temp_schema(n.oid) AND (pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'INSERT'::text) OR has_table_privilege(c.oid, 'UPDATE'::text) OR has_table_privilege(c.oid, 'DELETE'::text) OR has_table_privilege(c.oid, 'REFERENCES'::text) OR has_table_privilege(c.oid, 'TRIGGER'::text)) AND current_database() = ##cat::string AND n.nspname = ##schema::string AND c.relname = ##name::string",
+	
+	/* I_STMT_TRIGGERS_ALL */
+	"SELECT current_database()::information_schema.sql_identifier, n.nspname::information_schema.sql_identifier, t.tgname::information_schema.sql_identifier, em.text::information_schema.character_data, current_database()::information_schema.sql_identifier, n.nspname::information_schema.sql_identifier, c.relname::information_schema.sql_identifier, \"substring\"(pg_get_triggerdef(t.oid), \"position\"(\"substring\"(pg_get_triggerdef(t.oid), 48), 'EXECUTE PROCEDURE'::text) + 47)::information_schema.character_data AS action_statement, CASE WHEN (t.tgtype::integer & 1) = 1 THEN 'ROW'::text ELSE 'STATEMENT'::text END::information_schema.character_data AS action_orientation, CASE WHEN (t.tgtype::integer & 2) = 2 THEN 'BEFORE'::text ELSE 'AFTER'::text END::information_schema.character_data AS condition_timing, pg_catalog.obj_description(t.oid), t.tgname, t.tgname FROM pg_namespace n, pg_class c, pg_trigger t, (( SELECT 4, 'INSERT' UNION ALL SELECT 8, 'DELETE') UNION ALL SELECT 16, 'UPDA
 TE') em(num, text) WHERE n.oid = c.relnamespace AND c.oid = t.tgrelid AND (t.tgtype::integer & em.num) <> 0 AND NOT t.tgisconstraint AND NOT pg_is_other_temp_schema(n.oid) AND (pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'INSERT'::text) OR has_table_privilege(c.oid, 'UPDATE'::text) OR has_table_privilege(c.oid, 'DELETE'::text) OR has_table_privilege(c.oid, 'REFERENCES'::text) OR has_table_privilege(c.oid, 'TRIGGER'::text))"
 };
 
 /*
@@ -922,8 +930,17 @@
 _gda_postgres_meta__triggers (GdaServerProvider *prov, GdaConnection *cnc, 
 			      GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {
-	TO_IMPLEMENT;
-	return TRUE;
+	GdaDataModel *model;
+	gboolean retval;
+
+	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_TRIGGERS_ALL], NULL, 
+							 error);
+	if (!model)
+		return FALSE;
+	retval = gda_meta_store_modify_with_context (store, context, model, error);
+	g_object_unref (model);
+		
+	return retval;
 }
 
 gboolean
@@ -932,8 +949,21 @@
 			     const GValue *table_catalog, const GValue *table_schema, 
 			     const GValue *table_name)
 {
-	TO_IMPLEMENT;
-	return TRUE;
+	GdaDataModel *model;
+	gboolean retval = TRUE;
+
+	gda_holder_set_value (gda_set_get_holder (i_set, "cat"), table_catalog);
+	gda_holder_set_value (gda_set_get_holder (i_set, "schema"), table_schema);
+	gda_holder_set_value (gda_set_get_holder (i_set, "name"), table_name);
+
+	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_TABLES_CONSTRAINTS], i_set, 
+							 error);
+	if (!model)
+		return FALSE;
+	retval = gda_meta_store_modify_with_context (store, context, model, error);
+	g_object_unref (model);
+		
+	return retval;
 }
 
 gboolean

Modified: trunk/providers/postgres/parser.y
==============================================================================
--- trunk/providers/postgres/parser.y	(original)
+++ trunk/providers/postgres/parser.y	Fri Mar 21 21:07:20 2008
@@ -958,7 +958,7 @@
 // Values: for all constants (G_TYPE_STRING GValue)
 value(V) ::= NULL. {V = NULL;}
 value(V) ::= STRING(S). {V = S;}
-value(V) ::= TEXTUAL(T). {V = T;}
+//value(V) ::= TEXTUAL(T). {V = T;}
 value(V) ::= INTEGER(I). {V = I;}
 value(V) ::= FLOAT(F). {V = F;}
 
@@ -988,6 +988,7 @@
 nm(A) ::= ID(X).       {A = X;}
 
 // Fully qualified name
+fullname(A) ::= TEXTUAL(X). {A = X;}
 fullname(A) ::= nm(X). {A = X;}
 fullname(A) ::= nm(S) DOT nm(X). {gchar *str;
 				  str = g_strdup_printf ("%s.%s", g_value_get_string (S), g_value_get_string (X));

Modified: trunk/providers/prepare_provider_sources.sh
==============================================================================
--- trunk/providers/prepare_provider_sources.sh	(original)
+++ trunk/providers/prepare_provider_sources.sh	Fri Mar 21 21:07:20 2008
@@ -57,4 +57,4 @@
 #
 # adaptating Makefile.am files
 #
-cat Makefile.am | sed -e 's/^#xml_DATA/xml_DATA/' -e 's/^#provider_LTLIBRARIES/provider_LTLIBRARIES/' -e 's/^#pkgconfig_DATA/pkgconfig_DATA/' -e '/^noinst_/d' > Makefile.am.tmp && mv Makefile.am.tmp Makefile.am
+cat Makefile.am | sed -e 's/^#xml_DATA/xml_DATA/' -e 's/^#provider_LTLIBRARIES/provider_LTLIBRARIES/' -e 's/^#pkgconfig_DATA/pkgconfig_DATA/' -e '/^noinst_/d' -e 's/noinst_DATA/xml_DATA/' > Makefile.am.tmp && mv Makefile.am.tmp Makefile.am

Modified: trunk/providers/skel-implementation/capi/Makefile.am
==============================================================================
--- trunk/providers/skel-implementation/capi/Makefile.am	(original)
+++ trunk/providers/skel-implementation/capi/Makefile.am	Fri Mar 21 21:07:20 2008
@@ -13,10 +13,10 @@
 
 # parser generation
 parser.c parser.h: parser.y $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD)
-	- $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD) parser.y
+	- $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD) -q -d $(srcdir)/parser.y $(top_srcdir)/libgda/sql-parser/lempar.c
 
 gen_def$(EXEEXT_FOR_BUILD): gen_def.c
-	$(CC_FOR_BUILD) -o gen_def$(EXEEXT_FOR_BUILD) -DIMPOSED_HEADER=\""$(top_builddir)/libgda/sql-parser/parser_tokens.h"\" gen_def.c
+	$(CC_FOR_BUILD) -o gen_def$(EXEEXT_FOR_BUILD) -DIMPOSED_HEADER=\""$(top_srcdir)/libgda/sql-parser/parser_tokens.h"\" $(srcdir)/gen_def.c
 
 capi_token_types.h: gen_def$(EXEEXT_FOR_BUILD) parser.h
 	./gen_def$(EXEEXT_FOR_BUILD) > capi_token_types.h
@@ -32,6 +32,8 @@
 	gda-capi-parser.h \
 	gda-capi-provider.c \
 	gda-capi-provider.h \
+	gda-capi-pstmt.h \
+	gda-capi-pstmt.c \
 	gda-capi-meta.c \
 	gda-capi-meta.h \
 	gda-capi-recordset.c \
@@ -61,7 +63,7 @@
 #pkgconfig_DATA = libgda-capi-4.0.pc
 noinst_DATA += libgda-capi-4.0.pc
 
-EXTRA_DIST = $(xml_in_files) libgda-capi-4.0.pc.in parser.y
-DISTCLEANFILES = $(xml_DATA)
+EXTRA_DIST = $(xml_in_files) libgda-capi-4.0.pc.in parser.y gen_def.c
+DISTCLEANFILES = $(noinst_DATA)
 
 CLEANFILES = parser.h parser.c parser.out capi_token_types.h gen_def$(EXEEXT_FOR_BUILD)

Modified: trunk/providers/skel-implementation/models/Makefile.am
==============================================================================
--- trunk/providers/skel-implementation/models/Makefile.am	(original)
+++ trunk/providers/skel-implementation/models/Makefile.am	Fri Mar 21 21:07:20 2008
@@ -33,5 +33,5 @@
 noinst_DATA += libgda-models-4.0.pc
 
 EXTRA_DIST = $(xml_in_files) libgda-models-4.0.pc.in
-DISTCLEANFILES = $(xml_DATA)
+DISTCLEANFILES = $(noinst_DATA)
 

Modified: trunk/tests/meta-store/Makefile.am
==============================================================================
--- trunk/tests/meta-store/Makefile.am	(original)
+++ trunk/tests/meta-store/Makefile.am	Fri Mar 21 21:07:20 2008
@@ -5,8 +5,7 @@
 	$(LIBGDA_CFLAGS) \
 	-DROOT_DIR=\""$(top_srcdir)"\"
 
-TESTS = check_meta_store_memory check_meta_store_sqlite check_meta_store_postgresql check_meta_store_mysql
-check_PROGRAMS = check_meta_store_memory check_meta_store_sqlite check_meta_store_postgresql check_meta_store_mysql
+noinst_PROGRAMS = check_meta_store_memory check_meta_store_sqlite check_meta_store_postgresql check_meta_store_mysql
 
 common_sources = common.c common.h
 

Modified: trunk/tests/meta-store/common.c
==============================================================================
--- trunk/tests/meta-store/common.c	(original)
+++ trunk/tests/meta-store/common.c	Fri Mar 21 21:07:20 2008
@@ -273,6 +273,7 @@
 	};
 	gchar *view_names [] = {
 		"_all_types",
+		"_detailled_fk"
 	};
 	
 	GdaConnection *cnc = gda_meta_store_get_internal_connection (store);
@@ -450,7 +451,7 @@
 	TEST_HEADER;
 
 	/* insert 1st part of the domains */
-	import = common_load_csv_file ("data_domains.csv", 4, "gint", 5, "gint", 12, "gint", 13, "gint", 19, "boolean", -1);
+	import = common_load_csv_file ("data_domains.csv", 5, "gint", 6, "gint", 13, "gint", 14, "gint", 19, "boolean", -1);
 	common_declare_expected_insertions_from_model (TNAME, import);
 	TEST_MODIFY (store, TNAME, import, NULL, &error, NULL);
 	TEST_END (import);
@@ -460,7 +461,7 @@
 	g_value_set_string (v1 = gda_value_new (G_TYPE_STRING), "meta");
 	g_value_set_string (v2 = gda_value_new (G_TYPE_STRING), "information_schema");
 	g_value_set_string (v3 = gda_value_new (G_TYPE_STRING), "sql_identifier");
-	import = common_load_csv_file ("data_domains_1.csv", 4, "gint", 5, "gint", 12, "gint", 13, "gint", 19, "boolean", -1);
+	import = common_load_csv_file ("data_domains_1.csv", 5, "gint", 6, "gint", 13, "gint", 14, "gint", 19, "boolean", -1);
 	common_declare_expected_insertions_from_model (TNAME, import);
 	TEST_MODIFY (store, TNAME, import, 
 		     "domain_catalog=##dc::string AND domain_schema=##ds::string AND domain_name=##dn::string", &error, 

Modified: trunk/tests/meta-store/data_domains.csv
==============================================================================
--- trunk/tests/meta-store/data_domains.csv	(original)
+++ trunk/tests/meta-store/data_domains.csv	Fri Mar 21 21:07:20 2008
@@ -1,3 +1,3 @@
-"meta","information_schema","cardinal_number","pg_catalog.int4","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","32","0","NULL","NULL","NULL","information_schema.cardinal_number","information_schema.cardinal_number",FALSE,"postgres"
-"meta","information_schema","character_data","pg_catalog.varchar","NULL","1073741824","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","information_schema.character_data","information_schema.character_data",FALSE,"postgres"
-"meta","information_schema","time_stamp","pg_catalog.timestamptz","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","('now'::text)::timestamp(2) with time zone","NULL","NULL","information_schema.time_stamp","information_schema.time_stamp",FALSE,"postgres"
+"meta","information_schema","cardinal_number","pg_catalog.int4","gint","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","32","0","NULL","NULL","information_schema.cardinal_number","information_schema.cardinal_number",FALSE,"postgres"
+"meta","information_schema","character_data","pg_catalog.varchar","gchararray","NULL","1073741824","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","information_schema.character_data","information_schema.character_data",FALSE,"postgres"
+"meta","information_schema","time_stamp","pg_catalog.timestamptz","gchararray","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","('now'::text)::timestamp(2) with time zone","NULL","NULL","information_schema.time_stamp","information_schema.time_stamp",FALSE,"postgres"

Modified: trunk/tests/meta-store/data_domains_1.csv
==============================================================================
--- trunk/tests/meta-store/data_domains_1.csv	(original)
+++ trunk/tests/meta-store/data_domains_1.csv	Fri Mar 21 21:07:20 2008
@@ -1 +1 @@
-"meta","information_schema","sql_identifier","pg_catalog.varchar","NULL","1073741824","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","information_schema.sql_identifier","information_schema.sql_identifier",FALSE,"postgres"
+"meta","information_schema","sql_identifier","pg_catalog.varchar","gchararray", "NULL","1073741824","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","information_schema.sql_identifier","information_schema.sql_identifier",FALSE,"postgres"

Modified: trunk/tests/parser/testdata.xml
==============================================================================
--- trunk/tests/parser/testdata.xml	(original)
+++ trunk/tests/parser/testdata.xml	Fri Mar 21 21:07:20 2008
@@ -594,13 +594,13 @@
   <test id="2007">
     <sql>delete from s.my_table where ##id=f(4)</sql>
     <expected>{"statements":[{"statement":{"sql":"delete from s.my_table where ##id=f(4)","stmt_type":"DELETE","contents":{"table":"s.my_table","condition":{"operation":{"operator":"=","operand0":{"value":null,"param_spec":{"name":"id","descr":null,"type":null,"is_param":true,"nullok":false}},"operand1":{"func":{"function_name":"f","function_args":[{"value":"4"}]}}}}}}}]}</expected>
-    <expected mode="delim">{"statements":[{"statement":{"sql":"delete from s.my_table where ##id=f(4)","stmt_type":"UNKNOWN","contents":[{"value":"delete"},{"value":" "},{"value":"from"},{"value":" "},{"value":"s.my_table"},{"value":" "},{"value":"where"},{"value":" "},{"value":null,"param_spec":{"name":"id","descr":null,"type":null,"is_param":true,"nullok":false}},{"value":"="},{"value":"f(4)"}]}}]}</expected>
+    <expected mode="delim">{"statements":[{"statement":{"sql":"delete from s.my_table where ##id=f(4)","stmt_type":"UNKNOWN","contents":[{"value":"delete"},{"value":" "},{"value":"from"},{"value":" "},{"value":"s.my_table"},{"value":" "},{"value":"where"},{"value":" "},{"value":null,"param_spec":{"name":"id","descr":null,"type":null,"is_param":true,"nullok":false}},{"value":"=f(4)"}]}}]}</expected>
   </test>
 
   <test id="2008">
     <sql>delete from s.my_table where ##id=(f(4))</sql>
     <expected>{"statements":[{"statement":{"sql":"delete from s.my_table where ##id=(f(4))","stmt_type":"DELETE","contents":{"table":"s.my_table","condition":{"operation":{"operator":"=","operand0":{"value":null,"param_spec":{"name":"id","descr":null,"type":null,"is_param":true,"nullok":false}},"operand1":{"func":{"function_name":"f","function_args":[{"value":"4"}]}}}}}}}]}</expected>
-    <expected mode="delim">{"statements":[{"statement":{"sql":"delete from s.my_table where ##id=(f(4))","stmt_type":"UNKNOWN","contents":[{"value":"delete"},{"value":" "},{"value":"from"},{"value":" "},{"value":"s.my_table"},{"value":" "},{"value":"where"},{"value":" "},{"value":null,"param_spec":{"name":"id","descr":null,"type":null,"is_param":true,"nullok":false}},{"value":"="},{"value":"("},{"value":"f(4))"}]}}]}</expected>
+    <expected mode="delim">{"statements":[{"statement":{"sql":"delete from s.my_table where ##id=(f(4))","stmt_type":"UNKNOWN","contents":[{"value":"delete"},{"value":" "},{"value":"from"},{"value":" "},{"value":"s.my_table"},{"value":" "},{"value":"where"},{"value":" "},{"value":null,"param_spec":{"name":"id","descr":null,"type":null,"is_param":true,"nullok":false}},{"value":"=(f(4))"}]}}]}</expected>
   </test>
 
   <test id="2009">
@@ -630,13 +630,13 @@
   <test id="2013">
     <sql>delete from s.my_table where a is b and c != d and e similar to f</sql>
     <expected>{"statements":[{"statement":{"sql":"delete from s.my_table where a is b and c != d and e similar to f","stmt_type":"DELETE","contents":{"table":"s.my_table","condition":{"operation":{"operator":"AND","operand0":{"operation":{"operator":"IS","operand0":{"value":"a"},"operand1":{"value":"b"}}},"operand1":{"operation":{"operator":"!=","operand0":{"value":"c"},"operand1":{"value":"d"}}},"operand2":{"operation":{"operator":"SIMILAR TO","operand0":{"value":"e"},"operand1":{"value":"f"}}}}}}}}]}</expected>
-    <expected mode="delim">{"statements":[{"statement":{"sql":"delete from s.my_table where a is b and c != d and e similar to f","stmt_type":"UNKNOWN","contents":[{"value":"delete"},{"value":" "},{"value":"from"},{"value":" "},{"value":"s.my_table"},{"value":" "},{"value":"where"},{"value":" "},{"value":"a"},{"value":" "},{"value":"is"},{"value":" "},{"value":"b"},{"value":" "},{"value":"and"},{"value":" "},{"value":"c"},{"value":" "},{"value":"!"},{"value":"="},{"value":" "},{"value":"d"},{"value":" "},{"value":"and"},{"value":" "},{"value":"e"},{"value":" "},{"value":"similar to"},{"value":" "},{"value":"f"}]}}]}</expected>
+    <expected mode="delim">{"statements":[{"statement":{"sql":"delete from s.my_table where a is b and c != d and e similar to f","stmt_type":"UNKNOWN","contents":[{"value":"delete"},{"value":" "},{"value":"from"},{"value":" "},{"value":"s.my_table"},{"value":" "},{"value":"where"},{"value":" "},{"value":"a"},{"value":" "},{"value":"is"},{"value":" "},{"value":"b"},{"value":" "},{"value":"and"},{"value":" "},{"value":"c"},{"value":" "},{"value":"!="},{"value":" "},{"value":"d"},{"value":" "},{"value":"and"},{"value":" "},{"value":"e"},{"value":" "},{"value":"similar to"},{"value":" "},{"value":"f"}]}}]}</expected>
   </test>
 
   <test id="2014" provider="PostgreSQL">
     <sql>delete from s.my_table where a ~b and c~*d and e!~ f and g!~*h</sql>
     <expected>{"statements":[{"statement":{"sql":"delete from s.my_table where a ~b and c~*d and e!~ f and g!~*h","stmt_type":"DELETE","contents":{"table":"s.my_table","condition":{"operation":{"operator":"AND","operand0":{"operation":{"operator":"RE","operand0":{"value":"a"},"operand1":{"value":"b"}}},"operand1":{"operation":{"operator":"CI_RE","operand0":{"value":"c"},"operand1":{"value":"d"}}},"operand2":{"operation":{"operator":"!RE","operand0":{"value":"e"},"operand1":{"value":"f"}}},"operand3":{"operation":{"operator":"!CI_RE","operand0":{"value":"g"},"operand1":{"value":"h"}}}}}}}}]}</expected>
-    <expected mode="delim">{"statements":[{"statement":{"sql":"delete from s.my_table where a ~b and c~*d and e!~ f and g!~*h","stmt_type":"UNKNOWN","contents":[{"value":"delete"},{"value":" "},{"value":"from"},{"value":" "},{"value":"s.my_table"},{"value":" "},{"value":"where"},{"value":" "},{"value":"a"},{"value":" "},{"value":"~b and c~"},{"value":"*"},{"value":"d"},{"value":" "},{"value":"and"},{"value":" "},{"value":"e!~"},{"value":" "},{"value":"f"},{"value":" "},{"value":"and"},{"value":" "},{"value":"g!~"},{"value":"*"},{"value":"h"}]}}]}</expected>
+    <expected mode="delim">{"statements":[{"statement":{"sql":"delete from s.my_table where a ~b and c~*d and e!~ f and g!~*h","stmt_type":"UNKNOWN","contents":[{"value":"delete"},{"value":" "},{"value":"from"},{"value":" "},{"value":"s.my_table"},{"value":" "},{"value":"where"},{"value":" "},{"value":"a"},{"value":" "},{"value":"~b"},{"value":" "},{"value":"and"},{"value":" "},{"value":"c~"},{"value":"*"},{"value":"d"},{"value":" "},{"value":"and"},{"value":" "},{"value":"e!~"},{"value":" "},{"value":"f"},{"value":" "},{"value":"and"},{"value":" "},{"value":"g!~"},{"value":"*"},{"value":"h"}]}}]}</expected>
   </test>
 
   <test id="2015">

Modified: trunk/tests/providers/check_bdb.c
==============================================================================
--- trunk/tests/providers/check_bdb.c	(original)
+++ trunk/tests/providers/check_bdb.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_firebird.c
==============================================================================
--- trunk/tests/providers/check_firebird.c	(original)
+++ trunk/tests/providers/check_firebird.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_freetds.c
==============================================================================
--- trunk/tests/providers/check_freetds.c	(original)
+++ trunk/tests/providers/check_freetds.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_ibmdb2.c
==============================================================================
--- trunk/tests/providers/check_ibmdb2.c	(original)
+++ trunk/tests/providers/check_ibmdb2.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_ldap.c
==============================================================================
--- trunk/tests/providers/check_ldap.c	(original)
+++ trunk/tests/providers/check_ldap.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_mdb.c
==============================================================================
--- trunk/tests/providers/check_mdb.c	(original)
+++ trunk/tests/providers/check_mdb.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_msql.c
==============================================================================
--- trunk/tests/providers/check_msql.c	(original)
+++ trunk/tests/providers/check_msql.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_mysql.c
==============================================================================
--- trunk/tests/providers/check_mysql.c	(original)
+++ trunk/tests/providers/check_mysql.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_odbc.c
==============================================================================
--- trunk/tests/providers/check_odbc.c	(original)
+++ trunk/tests/providers/check_odbc.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_oracle.c
==============================================================================
--- trunk/tests/providers/check_oracle.c	(original)
+++ trunk/tests/providers/check_oracle.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_postgres.c
==============================================================================
--- trunk/tests/providers/check_postgres.c	(original)
+++ trunk/tests/providers/check_postgres.c	Fri Mar 21 21:07:20 2008
@@ -21,7 +21,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_sybase.c
==============================================================================
--- trunk/tests/providers/check_sybase.c	(original)
+++ trunk/tests/providers/check_sybase.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	

Modified: trunk/tests/providers/check_xbase.c
==============================================================================
--- trunk/tests/providers/check_xbase.c	(original)
+++ trunk/tests/providers/check_xbase.c	Fri Mar 21 21:07:20 2008
@@ -19,7 +19,7 @@
 	pinfo = gda_config_get_provider_info (PROVIDER);
 	if (!pinfo) {
 		g_warning ("Could not find provider information for %s", PROVIDER);
-		return EXIT_FAILURE;
+		return EXIT_SUCCESS;
 	}
 	g_print ("Provider now tested: %s\n", pinfo->id);
 	



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]