libgda r3135 - in trunk: . doc/C doc/C/tmpl libgda libgda/sqlite providers/mysql providers/postgres providers/skel-implementation/capi tools



Author: vivien
Date: Wed Apr  9 20:49:07 2008
New Revision: 3135
URL: http://svn.gnome.org/viewvc/libgda?rev=3135&view=rev

Log:
2008-04-09  Vivien Malerba <malerba gnome-db org>

	* libgda/gda-value.c: corrected some memory leaks, for bug #526748
	* libgda/gda-connection.c: make gda_connection_get_authentification() return the empty
	string if the connection has no authentication string rather than NULL
	* libgda/gda-connection.c: the events list is now stored in reverse order, and the
	gda_connection_get_events() method returns a copy (in the correct order) of the list, for
	bug #526818
	* tools/gda-sql.c: changed the "\dsn_list" command to "\l", when using the "\c" command,
	passing a connection name starting with '~' will allow one to use the connection associated
	with the meta data: for example the "\c ~c0" command creates a "~c0" connection which corresponds
	to the "c0" connection's meta data
	* tools/command-exec.c: replaced g_strsplit() with a small custom tokenizer which
	recognizes simple and double quoted strings
	* tools/Makefile.am:
	* tools/information-schema-doc.c:
	* doc/C/i_s_doc.xml: created a (non installed) tool to automatically generate the i_s_doc.xml file which
	documents the structure of the meta data database.
	* libgda/information_schema.xml: fixed the "_element_types" table usage and added some descriptions
	about the tables, views and individual columns
	* libgda/gda-server-provider.h:
	* libgda/gda-connection.c: added a new "el_types" meta data method
	* libgda/sqlite/gda-sqlite-provider.c:
	* libgda/sqlite/gda-sqlite-meta.[ch]:
	* providers/postgres/gda-postgres-provider.c:
	* providers/postgres/gda-postgres-meta.[ch]:
	* providers/mysql/gda-mysql-provider.c:
	* providers/mysql/gda-mysql-meta.[ch]:
	* providers/skel-implementation/capi/gda-capi-provider.c:
	* providers/skel-implementation/capi/gda-capi-meta.[ch]: implemented (or partially implemented)
	the new "el_types" meta data method
	* doc/C: added an empty XSLT extension section, and misc doc. updates
	* tools/tools/tools-input.c: prepared code completion feature, and correctly initialize history


Added:
   trunk/doc/C/i_s_data_types.dia   (contents, props changed)
   trunk/doc/C/i_s_data_types.png   (contents, props changed)
   trunk/doc/C/i_s_doc.xml
   trunk/tools/information-schema-doc.c
Modified:
   trunk/ChangeLog
   trunk/doc/C/Makefile.am
   trunk/doc/C/information_schema.png
   trunk/doc/C/information_schema.svg
   trunk/doc/C/libgda-4.0-docs.sgml
   trunk/doc/C/libgda-4.0-sections.txt
   trunk/doc/C/prov-writing.xml
   trunk/doc/C/tmpl/gda-convenient.sgml
   trunk/doc/C/tmpl/gda-meta-store.sgml
   trunk/doc/C/tmpl/gda-server-provider.sgml
   trunk/doc/C/tmpl/provider-support.sgml
   trunk/libgda/gda-connection.c
   trunk/libgda/gda-connection.h
   trunk/libgda/gda-meta-struct.c
   trunk/libgda/gda-server-provider.h
   trunk/libgda/gda-value.c
   trunk/libgda/information_schema.xml
   trunk/libgda/sqlite/gda-sqlite-meta.c
   trunk/libgda/sqlite/gda-sqlite-meta.h
   trunk/libgda/sqlite/gda-sqlite-provider.c
   trunk/providers/mysql/gda-mysql-meta.c
   trunk/providers/mysql/gda-mysql-meta.h
   trunk/providers/mysql/gda-mysql-provider.c
   trunk/providers/postgres/gda-postgres-meta.c
   trunk/providers/postgres/gda-postgres-meta.h
   trunk/providers/postgres/gda-postgres-provider.c
   trunk/providers/skel-implementation/capi/gda-capi-meta.c
   trunk/providers/skel-implementation/capi/gda-capi-meta.h
   trunk/providers/skel-implementation/capi/gda-capi-provider.c
   trunk/tools/   (props changed)
   trunk/tools/Makefile.am
   trunk/tools/command-exec.c
   trunk/tools/gda-sql.c
   trunk/tools/tools-input.c

Modified: trunk/doc/C/Makefile.am
==============================================================================
--- trunk/doc/C/Makefile.am	(original)
+++ trunk/doc/C/Makefile.am	Wed Apr  9 20:49:07 2008
@@ -49,7 +49,7 @@
 HTML_IMAGES = DataModels.png \
 	architecture.png parts.png stmt-unknown.png stmt-select.png stmt-insert1.png stmt-insert2.png \
 	stmt-update.png stmt-compound.png information_schema.png \
-	MetaStore1.png MetaStore2.png
+	MetaStore1.png MetaStore2.png i_s_data_types.png
 
 # Extra options to supply to gtkdoc-fixref
 FIXXREF_OPTIONS=
@@ -59,7 +59,8 @@
 # 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 \
-	prov-writing.xml DataModels.svg \
+	prov-writing.xml i_s_doc.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
 

Added: trunk/doc/C/i_s_data_types.dia
==============================================================================
Binary file. No diff available.

Added: trunk/doc/C/i_s_data_types.png
==============================================================================
Binary file. No diff available.

Added: trunk/doc/C/i_s_doc.xml
==============================================================================
--- (empty file)
+++ trunk/doc/C/i_s_doc.xml	Wed Apr  9 20:49:07 2008
@@ -0,0 +1,336 @@
+<sect2>
+<!--File generated by the tools/information-schema-doc program from the
+libgda/information-schema.xml file,
+do not modify-->
+  <title>Individual table description</title>
+  <para>This section individually describes each table.</para>
+  <sect3 id="is:_attributes">
+    <title>_attributes table</title>
+    <para>Table to store (key,value) pairs (keys starting with '_' are reserved)</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>att_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>att_value</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+  </sect3>
+  <sect3 id="is:_information_schema_catalog_name">
+    <title>_information_schema_catalog_name table</title>
+    <para>Name of the current database (current catalog), has only one row</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>catalog_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+  </sect3>
+  <sect3 id="is:_schemata">
+    <title>_schemata table</title>
+    <para>List of schemas</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>catalog_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the catalog that contains the schema</entry></row><row><entry>schema_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>schema_owner</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Name of the schema</entry></row><row><entry>schema_internal</entry><entry>boolean</entry><entry></entry><entry>No</entry><entry>Tells if the schema is specific to the database implementation (and usually can't be modified)</entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(catalog_name) references <link linkend="is:_information_schema_catalog_name">_information_schema_catalog_name</link>(catalog_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_builtin_data_types">
+    <title>_builtin_data_types table</title>
+    <para>List of built-in data types such as varchar, int, ...</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>short_type_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry>Short name of the data type</entry></row><row><entry>full_type_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Full name of the data type</entry></row><row><entry>gtype</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>comments</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>synonyms</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>internal</entry><entry>boolean</entry><entry></entry><entry>No</entry><entry>Tells if the data type is reserved for 
 the database implementation and should not be used in applications</entry></row></tbody></tgroup></informaltable></para>
+  </sect3>
+  <sect3 id="is:_udt">
+    <title>_udt table</title>
+    <para>User defined data types</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>udt_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the catalog that contains the data type</entry></row><row><entry>udt_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the schema that contains the data type</entry></row><row><entry>udt_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the data type</entry></row><row><entry>udt_gtype</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>GType associated to the data type</entry></row><row><entry>udt_comments</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>udt_short_name</e
 ntry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>udt_full_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>udt_internal</entry><entry>boolean</entry><entry></entry><entry>No</entry><entry>Tells if the data type is reserved for the database implementation and should not be used in applications</entry></row><row><entry>udt_owner</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(udt_catalog, udt_schema) references <link linkend="is:_schemata">_schemata</link>(catalog_name, schema_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_udt_columns">
+    <title>_udt_columns table</title>
+    <para>List of components for a user defined data type for composed data types (such as a complex number data type which has real and imaginary parts)</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>udt_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the catalog that contains the user defined data type for which the column is</entry></row><row><entry>udt_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the schema that contains the user defined data type for which the column is</entry></row><row><entry>udt_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the user defined data type for which the column is</entry></row><row><entry>udt_column</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the column (part)</entry></row><row><entry>ordinal_position</
 entry><entry>gint</entry><entry></entry><entry>No</entry><entry>Column position, starts at 1</entry></row><row><entry>data_type</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)</entry></row><row><entry>array_spec</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Array description if the column is an array</entry></row><row><entry>character_maximum_length</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>character_octet_length</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>numeric_precision</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>numeric_scale</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>datetime_precision</entry><entry>gint</entry><entry></entry><entry>Yes</
 entry><entry></entry></row><row><entry>character_set_catalog</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>character_set_schema</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>character_set_name</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>collation_catalog</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>collation_schema</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>collation_name</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(udt_catalog, udt_schema, udt_name) references <link linkend="is:_udt">_udt</link>(udt_catalog, udt_schema, udt_name) </para>
+        </listitem>
+        <listitem>
+          <para>(array_spec) references <link linkend="is:_element_types">_element_types</link>(specific_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_enums">
+    <title>_enums table</title>
+    <para>List of possible enumeration labels for enumerations</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>udt_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the catalog that contains the ENUM user defined data type</entry></row><row><entry>udt_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the schema that contains the ENUM user defined data type</entry></row><row><entry>udt_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the ENUM user defined data type</entry></row><row><entry>label</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>ordinal_position</entry><entry>gint</entry><entry></entry><entry>No</entry><entry>Position, starts at 1</
 entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(udt_catalog, udt_schema, udt_name) references <link linkend="is:_udt">_udt</link>(udt_catalog, udt_schema, udt_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_element_types">
+    <title>_element_types table</title>
+    <para>Array specific attributes for array data types</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>specific_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>No specific meaning, used as a primary key, and for joining</entry></row><row><entry>object_catalog</entry><entry>string</entry><entry></entry><entry>No</entry><entry>Name of the catalog that contains the object that uses the array being described</entry></row><row><entry>object_schema</entry><entry>string</entry><entry></entry><entry>No</entry><entry>Name of the schema that contains the object that uses the array being described</entry></row><row><entry>object_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry>Name of the object that uses the array being described</entry></row><row>
 <entry>object_type</entry><entry>string</entry><entry></entry><entry>No</entry><entry>The type of the object that uses the array being described TABLE_COL, DOMAIN, UDT_COL, ROUTINE_COL or ROUTINE_PAR</entry></row><row><entry>data_type</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Base data type of the array (if the base data type is an array, then 'array_spec' is set, and this may be NULL)</entry></row><row><entry>array_spec</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Array description if the base data type is an array</entry></row><row><entry>min_cardinality</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>max_cardinality</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+  </sect3>
+  <sect3 id="is:_domains">
+    <title>_domains table</title>
+    <para>List of domains</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>domain_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of catalog that contains the domain</entry></row><row><entry>domain_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of schema that contains the domain</entry></row><row><entry>domain_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the domain</entry></row><row><entry>data_type</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Data type of the domain (if the domain is an array, then 'array_spec' is set, and this may be NULL)</entry></row><row><entry>array_spec</entry><entry>string</entry><entry></entry><entry>Yes</
 entry><entry>Array description if the domain is an array</entry></row><row><entry>domain_gtype</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>character_maximum_length</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>character_octet_length</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>collation_catalog</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Name of catalog that contains the associated collation</entry></row><row><entry>collation_schema</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Name of schema that contains the associated collation</entry></row><row><entry>collation_name</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Name of the associated collation</entry></row><row><entry>character_set_catalog</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Name of 
 catalog that contains the associated character set</entry></row><row><entry>character_set_schema</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Name of schema that contains the associated character set</entry></row><row><entry>character_set_name</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Name of the associated character set</entry></row><row><entry>numeric_precision</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>numeric_scale</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>domain_default</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>domain_comments</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>domain_short_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>domain_full_name</entry><entry>string</entry><
 entry></entry><entry>No</entry><entry></entry></row><row><entry>domain_internal</entry><entry>boolean</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>domain_owner</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(domain_catalog, domain_schema) references <link linkend="is:_schemata">_schemata</link>(catalog_name, schema_name) </para>
+        </listitem>
+        <listitem>
+          <para>(array_spec) references <link linkend="is:_element_types">_element_types</link>(specific_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_tables">
+    <title>_tables table</title>
+    <para>List of tables (tables, views or other objects which can contain data)</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>table_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of catalog that contains the table</entry></row><row><entry>table_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of schema that contains the table</entry></row><row><entry>table_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the table</entry></row><row><entry>table_type</entry><entry>string</entry><entry></entry><entry>No</entry><entry>Type of table: BASE TABLE, VIEW, LOCAL TEMPORARY, SYSTEM TABLE, GLOBAL TEMPORARY, ALIAS or SYNONYM</entry></row><row><entry>is_insertable_into</entry><entry>boolean</entry><entry></entry><entry>Yes
 </entry><entry>Tells if the table's contents can be modified</entry></row><row><entry>table_comments</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>table_short_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>table_full_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>table_owner</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(table_catalog, table_schema) references <link linkend="is:_schemata">_schemata</link>(catalog_name, schema_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_views">
+    <title>_views table</title>
+    <para>List of views and their specific information</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>table_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of catalog that contains the view</entry></row><row><entry>table_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of schema that contains the view</entry></row><row><entry>table_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the view</entry></row><row><entry>view_definition</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>View as SQL</entry></row><row><entry>check_option</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>CASCADE if the statement used to create the view included the WITH CHECK OPT
 ION; otherwise, NONE</entry></row><row><entry>is_updatable</entry><entry>boolean</entry><entry></entry><entry>Yes</entry><entry>Tells if the view's contents can be modified</entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(table_catalog, table_schema, table_name) references <link linkend="is:_tables">_tables</link>(table_catalog, table_schema, table_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_collations">
+    <title>_collations table</title>
+    <para>List of collations methods</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>collation_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>collation_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>collation_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>collation_comments</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>collation_short_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>collation_full_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row></tbody></tgroup></informalta
 ble></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(collation_catalog, collation_schema) references <link linkend="is:_schemata">_schemata</link>(catalog_name, schema_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_character_sets">
+    <title>_character_sets table</title>
+    <para>List of character sets</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>character_set_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>character_set_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>character_set_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>default_collate_catalog</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>default_collate_schema</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>default_collate_name</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><e
 ntry>character_set_comments</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>character_set_short_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>character_set_full_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(character_set_catalog, character_set_schema) references <link linkend="is:_schemata">_schemata</link>(catalog_name, schema_name) </para>
+        </listitem>
+        <listitem>
+          <para>(default_collate_catalog, default_collate_schema, default_collate_name) references <link linkend="is:_collations">_collations</link>(collation_catalog, collation_schema, collation_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_routines">
+    <title>_routines table</title>
+    <para>List of functions and stored procedures</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>specific_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>specific_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>specific_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>routine_catalog</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>routine_schema</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>routine_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>routine_type</entry><entry>string</
 entry><entry></entry><entry>Yes</entry><entry>FUNCTION, PROCEDURE, AGGREGATE</entry></row><row><entry>return_type</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>returns_set</entry><entry>boolean</entry><entry></entry><entry>No</entry><entry>True if function returns a set (i.e., multiple values of the specified data type)</entry></row><row><entry>routine_body</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>routine_definition</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>external_name</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>external_language</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>parameter_style</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>is_deterministic</entry><entry>boolean</entr
 y><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>sql_data_access</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>is_null_call</entry><entry>boolean</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>routine_comments</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>routine_short_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>routine_full_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>routine_owner</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(specific_catalog, specific_schema) references <link linkend="is:_schemata">_schemata</link>(catalog_name, schema_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_triggers">
+    <title>_triggers table</title>
+    <para>List of triggers</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>trigger_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>trigger_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>trigger_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>event_manipulation</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Event that fires the trigger (INSERT, UPDATE, or DELETE)</entry></row><row><entry>event_object_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the database that contains the table that the trigger is defined on</entry></row><row><entry>
 event_object_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the schema that contains the table that the trigger is defined on</entry></row><row><entry>event_object_table</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry>Name of the table that the trigger is defined on</entry></row><row><entry>action_statement</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Statement that is executed by the trigger</entry></row><row><entry>action_orientation</entry><entry>string</entry><entry></entry><entry>No</entry><entry>Identifies whether the trigger fires once for each processed row or once for each statement (ROW or STATEMENT)</entry></row><row><entry>condition_timing</entry><entry>string</entry><entry></entry><entry>No</entry><entry>Time at which the trigger fires (BEFORE or AFTER)</entry></row><row><entry>trigger_comments</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row>
 <entry>trigger_short_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>trigger_full_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(trigger_catalog, trigger_schema) references <link linkend="is:_schemata">_schemata</link>(catalog_name, schema_name) </para>
+        </listitem>
+        <listitem>
+          <para>(event_object_catalog, event_object_schema, event_object_table) references <link linkend="is:_tables">_tables</link>(table_catalog, table_schema, table_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_columns">
+    <title>_columns table</title>
+    <para>List of columns composing tables</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>table_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>column_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>ordinal_position</entry><entry>gint</entry><entry></entry><entry>No</entry><entry>Column position, starts at 1</entry></row><row><entry>column_default</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>is_nullable</ent
 ry><entry>boolean</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>data_type</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)</entry></row><row><entry>array_spec</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Array description if the column is an array</entry></row><row><entry>gtype</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>character_maximum_length</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>character_octet_length</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>numeric_precision</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>numeric_scale</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>d
 atetime_precision</entry><entry>gint</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>character_set_catalog</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>character_set_schema</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>character_set_name</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>collation_catalog</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>collation_schema</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>collation_name</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>extra</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>CSV string with: AUTO_INCREMENT</entry></row><row><entry>is_updatable</entry><entry>boolean</entry><entry></entry><entry>Yes</ent
 ry><entry></entry></row><row><entry>column_comments</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(table_catalog, table_schema, table_name) references <link linkend="is:_tables">_tables</link>(table_catalog, table_schema, table_name) </para>
+        </listitem>
+        <listitem>
+          <para>(character_set_catalog, character_set_schema, character_set_name) references <link linkend="is:_character_sets">_character_sets</link>(character_set_catalog, character_set_schema, character_set_name) </para>
+        </listitem>
+        <listitem>
+          <para>(collation_catalog, collation_schema, collation_name) references <link linkend="is:_collations">_collations</link>(collation_catalog, collation_schema, collation_name) </para>
+        </listitem>
+        <listitem>
+          <para>(array_spec) references <link linkend="is:_element_types">_element_types</link>(specific_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_table_constraints">
+    <title>_table_constraints table</title>
+    <para>List of constraints applied to tables (Check, primary or foreign key, or unique constraints)</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>constraint_catalog</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Name of the catalog that contains the constraint</entry></row><row><entry>constraint_schema</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Name of the schema that contains the constraint</entry></row><row><entry>constraint_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_name</entry><entry>string</entry><entr
 y>Yes</entry><entry>No</entry><entry></entry></row><row><entry>constraint_type</entry><entry>string</entry><entry></entry><entry>No</entry><entry>CHECK, FOREIGN KEY, PRIMARY KEY or UNIQUE</entry></row><row><entry>check_clause</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>The check expression if the constraint is a check constraint, NULL otherwise</entry></row><row><entry>is_deferrable</entry><entry>boolean</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>initially_deferred</entry><entry>boolean</entry><entry></entry><entry>Yes</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(table_catalog, table_schema, table_name) references <link linkend="is:_tables">_tables</link>(table_catalog, table_schema, table_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_referential_constraints">
+    <title>_referential_constraints table</title>
+    <para>List of foreign key constraints, along with some specific attributes</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>table_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>constraint_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>ref_table_catalog</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>ref_table_schema</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>ref_table_name</entry><entry>string<
 /entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>ref_constraint_name</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>match_option</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>FULL, PARTIAL or NONE</entry></row><row><entry>update_rule</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>CASCADE, SET NULL, SET DEFAULT, RESTRICT, NO ACTION or NONE</entry></row><row><entry>delete_rule</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>CASCADE, SET NULL, SET DEFAULT, RESTRICT, NO ACTION or NONE</entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(table_catalog, table_schema, table_name, constraint_name) references <link linkend="is:_table_constraints">_table_constraints</link>(table_catalog, table_schema, table_name, constraint_name) </para>
+        </listitem>
+        <listitem>
+          <para>(ref_table_catalog, ref_table_schema, ref_table_name, ref_constraint_name) references <link linkend="is:_table_constraints">_table_constraints</link>(table_catalog, table_schema, table_name, constraint_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_key_column_usage">
+    <title>_key_column_usage table</title>
+    <para>List of primary key constraints and the name of the tables' columns involved</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>table_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>constraint_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>column_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>ordinal_position</entry><entry>gint</entry><entry>Yes</entry><entry>No</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(table_catalog, table_schema, table_name, constraint_name) references <link linkend="is:_table_constraints">_table_constraints</link>(table_catalog, table_schema, table_name, constraint_name) </para>
+        </listitem>
+        <listitem>
+          <para>(table_catalog, table_schema, table_name, column_name) references <link linkend="is:_columns">_columns</link>(table_catalog, table_schema, table_name, column_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_check_column_usage">
+    <title>_check_column_usage table</title>
+    <para>List of check constraints and the name of the tables' columns involved</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>table_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>constraint_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>column_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(table_catalog, table_schema, table_name, constraint_name) references <link linkend="is:_table_constraints">_table_constraints</link>(table_catalog, table_schema, table_name, constraint_name) </para>
+        </listitem>
+        <listitem>
+          <para>(table_catalog, table_schema, table_name, column_name) references <link linkend="is:_columns">_columns</link>(table_catalog, table_schema, table_name, column_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_view_column_usage">
+    <title>_view_column_usage table</title>
+    <para>List of the tables' columns involved in a view</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>view_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>view_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>view_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>table_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>column_name</entry><entry>string</entry><entry
 >Yes</entry><entry>No</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(view_catalog, view_schema, view_name) references <link linkend="is:_views">_views</link>(table_catalog, table_schema, table_name) </para>
+        </listitem>
+        <listitem>
+          <para>(table_catalog, table_schema, table_name, column_name) references <link linkend="is:_columns">_columns</link>(table_catalog, table_schema, table_name, column_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_domain_constraints">
+    <title>_domain_constraints table</title>
+    <para>List of constraints applicable to domains</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>constraint_catalog</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Name of the catalog that contains the constraint</entry></row><row><entry>constraint_schema</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Name of the schema that contains the constraint</entry></row><row><entry>constraint_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>domain_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>domain_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>domain_name</entry><entry>string</entry><e
 ntry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>check_clause</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>is_deferrable</entry><entry>boolean</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>initially_deferred</entry><entry>boolean</entry><entry></entry><entry>Yes</entry><entry></entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(domain_catalog, domain_schema, domain_name) references <link linkend="is:_domains">_domains</link>(domain_catalog, domain_schema, domain_name) </para>
+        </listitem>
+        <listitem>
+          <para>(constraint_catalog, constraint_schema) references <link linkend="is:_schemata">_schemata</link>(catalog_name, schema_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_parameters">
+    <title>_parameters table</title>
+    <para>List of routines' (functions and stored procedures) parameters</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>specific_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>specific_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>specific_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>ordinal_position</entry><entry>gint</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>parameter_mode</entry><entry>string</entry><entry></entry><entry>No</entry><entry></entry></row><row><entry>parameter_name</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry></entry></row><row><entry>data_type</entry><entry>string</
 entry><entry></entry><entry>Yes</entry><entry>Data type of the parameter (if the parameter is an array, then 'array_spec' is set, and this may be NULL)</entry></row><row><entry>array_spec</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Array description if the parameter is an array</entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(specific_catalog, specific_schema, specific_name) references <link linkend="is:_routines">_routines</link>(specific_catalog, specific_schema, specific_name) </para>
+        </listitem>
+        <listitem>
+          <para>(array_spec) references <link linkend="is:_element_types">_element_types</link>(specific_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_routine_columns">
+    <title>_routine_columns table</title>
+    <para>List of routines' (functions and stored procedures) returned values' parts (columns) for routines returning composed values</para>
+    <para>The following table describes the columns:<informaltable frame="all"><tgroup cols="5" colsep="1" rowsep="1" align="justify"><thead><row><entry>Column name</entry><entry>Type</entry><entry>Key</entry><entry>Can be NULL</entry><entry>description</entry></row></thead><tbody><row><entry>specific_catalog</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>specific_schema</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>specific_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>column_name</entry><entry>string</entry><entry>Yes</entry><entry>No</entry><entry></entry></row><row><entry>ordinal_position</entry><entry>gint</entry><entry>Yes</entry><entry>Yes</entry><entry></entry></row><row><entry>data_type</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Data type of the column (if the column is an array, then 'arra
 y_spec' is set, and this may be NULL)</entry></row><row><entry>array_spec</entry><entry>string</entry><entry></entry><entry>Yes</entry><entry>Array description if the column is an array</entry></row></tbody></tgroup></informaltable></para>
+    <para>
+      <itemizedlist>
+        <listitem>
+          <para>(specific_catalog, specific_schema, specific_name) references <link linkend="is:_routines">_routines</link>(specific_catalog, specific_schema, specific_name) </para>
+        </listitem>
+        <listitem>
+          <para>(array_spec) references <link linkend="is:_element_types">_element_types</link>(specific_name) </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+  </sect3>
+  <sect3 id="is:_all_types">
+    <title>_all_types view</title>
+    <para>List of all the data types</para>
+    <para>Definition is:<programlisting width="80">SELECT short_type_name AS short_type_name, gtype, full_type_name AS full_type_name, comments, internal AS internal, synonyms,
+       NULL AS domain_catalog, NULL AS domain_schema, NULL AS domain_name,
+       NULL AS udt_catalog, NULL AS udt_schema, NULL AS udt_name
+       FROM _builtin_data_types
+UNION
+SELECT udt_short_name, udt_gtype, udt_full_name, udt_comments, udt_internal, NULL,
+       NULL, NULL, NULL, udt_catalog, udt_schema, udt_name FROM _udt
+UNION
+SELECT domain_short_name, domain_gtype, domain_full_name, domain_comments, domain_internal, NULL,
+       domain_catalog, domain_schema, domain_name , NULL, NULL, NULL FROM _domains</programlisting></para>
+  </sect3>
+  <sect3 id="is:_detailled_fk">
+    <title>_detailled_fk view</title>
+    <para>For each foreign key constraint, lists all the tables' columns involved and the constraint name</para>
+    <para>Definition is:<programlisting width="80">SELECT rc.table_catalog as fk_table_catalog, rc.table_schema as fk_table_schema, rc.table_name as fk_table_name, kc1.column_name as fk_column,
+      rc.ref_table_catalog as ref_table_catalog, rc.ref_table_schema as ref_table_schema, rc.ref_table_name as ref_table_name, kc2.column_name as ref_column,
+      rc.constraint_name as fk_constraint_name, kc1.ordinal_position as ordinal_position
+      FROM _referential_constraints rc 
+      INNER JOIN _key_column_usage kc2 ON (rc.ref_table_catalog=kc2.table_catalog AND rc.ref_table_schema=kc2.table_schema AND rc.ref_table_name=kc2.table_name AND rc.ref_constraint_name=kc2.constraint_name) 
+      INNER JOIN _key_column_usage kc1 ON (rc.table_catalog=kc1.table_catalog AND rc.table_schema=kc1.table_schema AND rc.table_name=kc1.table_name AND rc.constraint_name=kc1.constraint_name) 
+      WHERE kc1.ordinal_position = kc2.ordinal_position 
+      ORDER BY rc.table_catalog, rc.table_schema, rc.table_name, kc1.ordinal_position
+    </programlisting></para>
+  </sect3>
+</sect2>
\ No newline at end of file

Modified: trunk/doc/C/information_schema.png
==============================================================================
Binary files. No diff available.

Modified: trunk/doc/C/information_schema.svg
==============================================================================
--- trunk/doc/C/information_schema.svg	(original)
+++ trunk/doc/C/information_schema.svg	Wed Apr  9 20:49:07 2008
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generated by Graphviz version 2.12 (Tue Sep  4 16:56:48 UTC 2007)
-     For user: (vivien) Vivien,,, -->
+<!-- Generated by Graphviz version 2.12 (Mon Apr 23 09:57:53 UTC 2007)
+     For user: (vmalerba) MALERBA Vivien DSNA&#45;DTI SIM ATM M204 p5713 -->
 <!-- Title: G Pages: 1 -->
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/";
@@ -10,16 +10,17 @@
    xmlns="http://www.w3.org/2000/svg";
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
-   width="27.07in"
-   height="25.10in"
+   width="33.15in"
+   height="26.10in"
    id="svg2"
    sodipodi:version="0.32"
-   inkscape:version="0.45.1"
-   sodipodi:docname="graph.svg"
+   inkscape:version="0.45"
+   sodipodi:docname="information_schema.svg"
    inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   sodipodi:docbase="/home/vivien/Devel/V4/bugs/20080311_meta_store_structure_dump">
+   sodipodi:docbase="/local/TESTS/V4/libgda-trunk/doc/C"
+   sodipodi:modified="TRUE">
   <metadata
-     id="metadata986">
+     id="metadata1197">
     <rdf:RDF>
       <cc:Work
          rdf:about="">
@@ -30,13 +31,13 @@
     </rdf:RDF>
   </metadata>
   <defs
-     id="defs984">
+     id="defs1195">
     <title
        id="title5">G</title>
   </defs>
   <sodipodi:namedview
-     inkscape:window-height="1200"
-     inkscape:window-width="1920"
+     inkscape:window-height="902"
+     inkscape:window-width="1114"
      inkscape:pageshadow="2"
      inkscape:pageopacity="0.0"
      guidetolerance="10.0"
@@ -46,2133 +47,2806 @@
      bordercolor="#666666"
      pagecolor="#ffffff"
      id="base"
-     inkscape:zoom="0.40340068"
-     inkscape:cx="1299.9967"
-     inkscape:cy="1053.6697"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
+     inkscape:zoom="0.29416773"
+     inkscape:cx="1491.7501"
+     inkscape:cy="766.56946"
+     inkscape:window-x="5"
+     inkscape:window-y="50"
      inkscape:current-layer="svg2" />
   <polygon
      id="polygon7"
-     points="-4,4 -4,-1804 1946,-1804 1946,4 -4,4 "
+     points="-4,4 -4,-1876 2383,-1876 2383,4 -4,4 "
      style="fill:#ffffff;stroke:#ffffff"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)"
-     inkscape:export-xdpi="90"
-     inkscape:export-ydpi="90" />
+     transform="matrix(1.048566,0,0,1.3297947,48.310492,2491.2193)"
+     inkscape:export-xdpi="36.799999"
+     inkscape:export-ydpi="36.799999" />
   <g
      class="node"
      id="node1"
-     transform="matrix(1.33333,0,0,1.33333,111.92709,241.22582)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
        id="title10">main.main._attributes</title>
     <polygon
        id="polygon12"
-       points="344,-131 344,-151 432,-151 432,-131 344,-131 "
+       points="1002,-131 1002,-151 1090,-151 1090,-131 1002,-131 "
        style="fill:#808080;stroke:#808080" />
     <text
        id="text14"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-136.33299"
-       x="388">_attributes</text>
+       x="1046">_attributes</text>
     <polygon
        id="polygon16"
-       points="344,-131 344,-151 432,-151 432,-131 344,-131 "
+       points="1002,-131 1002,-151 1090,-151 1090,-131 1002,-131 "
        style="fill:none;stroke:#000000" />
     <text
        id="text18"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-117.333"
-       x="371.5">att_name</text>
+       x="1029.5">att_name</text>
     <text
        id="text20"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-117.333"
+       x="1078">key</text>
+    <text
+       id="text22"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-99.333298"
-       x="371.5">att_value</text>
+       x="1029.5">att_value</text>
     <polygon
-       id="polygon22"
-       points="343,-94 343,-152 433,-152 433,-94 343,-94 "
+       id="polygon24"
+       points="1001,-94 1001,-152 1091,-152 1091,-94 1001,-94 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node2"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title25">main.main._information_schema_catalog_name</title>
+       id="title27">main.main._information_schema_catalog_name</title>
     <polygon
-       id="polygon27"
-       points="699,-1775 699,-1795 911,-1795 911,-1775 699,-1775 "
+       id="polygon29"
+       points="1016,-1847 1016,-1867 1228,-1867 1228,-1847 1016,-1847 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text29"
+       id="text31"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1780.33"
-       x="805">_information_schema_catalog_name</text>
+       y="-1852.33"
+       x="1122">_information_schema_catalog_name</text>
     <polygon
-       id="polygon31"
-       points="699,-1775 699,-1795 911,-1795 911,-1775 699,-1775 "
+       id="polygon33"
+       points="1016,-1847 1016,-1867 1228,-1867 1228,-1847 1016,-1847 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text33"
+       id="text35"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1833.33"
+       x="1056.5">catalog_name</text>
+    <text
+       id="text37"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1761.33"
-       x="739.5">catalog_name</text>
+       y="-1833.33"
+       x="1216">key</text>
     <polygon
-       id="polygon35"
-       points="698,-1756 698,-1796 912,-1796 912,-1756 698,-1756 "
+       id="polygon39"
+       points="1015,-1828 1015,-1868 1229,-1868 1229,-1828 1015,-1828 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node3"
-     transform="matrix(1.33333,0,0,1.33333,-1427.4853,1926.8948)">
+     transform="matrix(1.33333,0,0,1.33333,-1490.412,1971.0174)">
     <title
-       id="title38">main.main._builtin_data_types</title>
+       id="title42">main.main._builtin_data_types</title>
     <polygon
-       id="polygon40"
-       points="1267,-167 1267,-187 1425,-187 1425,-167 1267,-167 "
+       id="polygon44"
+       points="1924,-167 1924,-187 2082,-187 2082,-167 1924,-167 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text42"
+       id="text46"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-172.33299"
-       x="1346">_builtin_data_types</text>
+       x="2003">_builtin_data_types</text>
     <polygon
-       id="polygon44"
-       points="1267,-167 1267,-187 1425,-187 1425,-167 1267,-167 "
+       id="polygon48"
+       points="1924,-167 1924,-187 2082,-187 2082,-167 1924,-167 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text46"
+       id="text50"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-153.33299"
-       x="1317">short_type_name</text>
+       x="1974">short_type_name</text>
     <text
-       id="text48"
+       id="text52"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-135.33299"
-       x="1313">full_type_name</text>
+       x="1970">full_type_name</text>
     <text
-       id="text50"
+       id="text54"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-135.33299"
+       x="2070">key</text>
+    <text
+       id="text56"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-117.333"
-       x="1284.5">gtype</text>
+       x="1941.5">gtype</text>
     <text
-       id="text52"
+       id="text58"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-99.333298"
-       x="1297.5">comments</text>
+       x="1954.5">comments</text>
     <text
-       id="text54"
+       id="text60"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-81.333298"
-       x="1297">synonyms</text>
+       x="1954">synonyms</text>
     <text
-       id="text56"
+       id="text62"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-63.333302"
-       x="1290.5">internal</text>
+       x="1947.5">internal</text>
     <polygon
-       id="polygon58"
-       points="1266,-58 1266,-188 1426,-188 1426,-58 1266,-58 "
+       id="polygon64"
+       points="1923,-58 1923,-188 2083,-188 2083,-58 1923,-58 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node4"
-     transform="matrix(1.33333,0,0,1.33333,-1702.646,1669.0866)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title61">main.main._element_types</title>
+       id="title67">main.main._element_types</title>
     <polygon
-       id="polygon63"
-       points="1461,-194 1461,-214 1645,-214 1645,-194 1461,-194 "
+       id="polygon69"
+       points="718,-1517 718,-1537 860,-1537 860,-1517 718,-1517 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text65"
+       id="text71"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-199.33299"
-       x="1553">_element_types</text>
+       y="-1522.33"
+       x="789">_element_types</text>
     <polygon
-       id="polygon67"
-       points="1461,-194 1461,-214 1645,-214 1645,-194 1461,-194 "
+       id="polygon73"
+       points="718,-1517 718,-1537 860,-1537 860,-1517 718,-1517 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text69"
-       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-180.33299"
-       x="1503">specific_name</text>
-    <text
-       id="text71"
-       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-162.33299"
-       x="1503.5">object_catalog</text>
-    <text
-       id="text73"
-       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-144.33299"
-       x="1504">object_schema</text>
-    <text
        id="text75"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-126.333"
-       x="1498.5">object_name</text>
+       y="-1503.33"
+       x="760">specific_name</text>
     <text
        id="text77"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-108.333"
-       x="1529.5">object_ordinal_position</text>
+       y="-1503.33"
+       x="848">key</text>
     <text
        id="text79"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-90.333298"
-       x="1495.5">object_type</text>
+       y="-1485.33"
+       x="760.5">object_catalog</text>
     <text
        id="text81"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-72.333298"
-       x="1490">data_type</text>
+       y="-1467.33"
+       x="761">object_schema</text>
     <text
        id="text83"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-54.333302"
-       x="1507.5">min_cardinality</text>
+       y="-1449.33"
+       x="755.5">object_name</text>
     <text
        id="text85"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-36.333302"
-       x="1508.5">max_cardinality</text>
+       y="-1431.33"
+       x="752.5">object_type</text>
+    <text
+       id="text87"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1413.33"
+       x="747">data_type</text>
+    <text
+       id="text89"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1395.33"
+       x="750">array_spec</text>
+    <text
+       id="text91"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1377.33"
+       x="764.5">min_cardinality</text>
+    <text
+       id="text93"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1359.33"
+       x="765.5">max_cardinality</text>
     <polygon
-       id="polygon87"
-       points="1460,-31 1460,-215 1646,-215 1646,-31 1460,-31 "
+       id="polygon95"
+       points="717,-1354 717,-1538 861,-1538 861,-1354 717,-1354 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node5"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title90">main.main._schemata</title>
+       id="title98">main.main._schemata</title>
     <polygon
-       id="polygon92"
-       points="741,-1691 741,-1711 869,-1711 869,-1691 741,-1691 "
+       id="polygon100"
+       points="1058,-1763 1058,-1783 1186,-1783 1186,-1763 1058,-1763 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text94"
+       id="text102"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1696.33"
-       x="805">_schemata</text>
+       y="-1768.33"
+       x="1122">_schemata</text>
     <polygon
-       id="polygon96"
-       points="741,-1691 741,-1711 869,-1711 869,-1691 741,-1691 "
+       id="polygon104"
+       points="1058,-1763 1058,-1783 1186,-1783 1186,-1763 1058,-1763 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text98"
+       id="text106"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1677.33"
-       x="781.5">catalog_name</text>
+       y="-1749.33"
+       x="1098.5">catalog_name</text>
     <text
-       id="text100"
+       id="text108"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1659.33"
-       x="782">schema_name</text>
+       y="-1749.33"
+       x="1174">key</text>
     <text
-       id="text102"
+       id="text110"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1731.33"
+       x="1099">schema_name</text>
+    <text
+       id="text112"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1731.33"
+       x="1174">key</text>
+    <text
+       id="text114"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1641.33"
-       x="784.5">schema_owner</text>
+       y="-1713.33"
+       x="1101.5">schema_owner</text>
     <text
-       id="text104"
+       id="text116"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1623.33"
-       x="788.5">schema_internal</text>
+       y="-1695.33"
+       x="1105.5">schema_internal</text>
     <polygon
-       id="polygon106"
-       points="740,-1618 740,-1712 870,-1712 870,-1618 740,-1618 "
+       id="polygon118"
+       points="1057,-1690 1057,-1784 1187,-1784 1187,-1690 1057,-1690 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge2"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title109">main.main._schemata-&gt;main.main._information_schema_catalog_name</title>
+       id="title121">main.main._schemata-&gt;main.main._information_schema_catalog_name</title>
     <path
-       id="path111"
-       d="M 805,-1716 C 805,-1724 805,-1733 805,-1742"
+       id="path123"
+       d="M 1122,-1788 C 1122,-1796 1122,-1805 1122,-1814"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon113"
-       points="801.5,-1742 805,-1752 808.5,-1742 801.5,-1742 "
+       id="polygon125"
+       points="1118.5,-1814 1122,-1824 1125.5,-1814 1118.5,-1814 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node7"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title116">main.main._udt</title>
+       id="title128">main.main._udt</title>
     <polygon
-       id="polygon118"
-       points="214,-1445 214,-1465 324,-1465 324,-1445 214,-1445 "
+       id="polygon130"
+       points="363,-1517 363,-1537 481,-1537 481,-1517 363,-1517 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text120"
+       id="text132"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1450.33"
-       x="269">_udt</text>
+       y="-1522.33"
+       x="422">_udt</text>
     <polygon
-       id="polygon122"
-       points="214,-1445 214,-1465 324,-1465 324,-1445 214,-1445 "
+       id="polygon134"
+       points="363,-1517 363,-1537 481,-1537 481,-1517 363,-1517 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text124"
+       id="text136"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1431.33"
-       x="248.5">udt_catalog</text>
+       y="-1503.33"
+       x="397.5">udt_catalog</text>
     <text
-       id="text126"
+       id="text138"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1413.33"
-       x="249">udt_schema</text>
+       y="-1503.33"
+       x="469">key</text>
     <text
-       id="text128"
+       id="text140"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1395.33"
-       x="243.5">udt_name</text>
+       y="-1485.33"
+       x="398">udt_schema</text>
     <text
-       id="text130"
+       id="text142"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1377.33"
-       x="244">udt_gtype</text>
+       y="-1485.33"
+       x="469">key</text>
     <text
-       id="text132"
+       id="text144"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1359.33"
-       x="257">udt_comments</text>
+       y="-1467.33"
+       x="392.5">udt_name</text>
     <text
-       id="text134"
+       id="text146"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1341.33"
-       x="261">udt_short_name</text>
+       y="-1467.33"
+       x="469">key</text>
     <text
-       id="text136"
+       id="text148"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1323.33"
-       x="257">udt_full_name</text>
+       y="-1449.33"
+       x="393">udt_gtype</text>
     <text
-       id="text138"
+       id="text150"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1305.33"
-       x="250">udt_internal</text>
+       y="-1431.33"
+       x="406">udt_comments</text>
     <text
-       id="text140"
+       id="text152"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1287.33"
-       x="246">udt_owner</text>
+       y="-1413.33"
+       x="410">udt_short_name</text>
+    <text
+       id="text154"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1395.33"
+       x="406">udt_full_name</text>
+    <text
+       id="text156"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1377.33"
+       x="399">udt_internal</text>
+    <text
+       id="text158"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1359.33"
+       x="395">udt_owner</text>
     <polygon
-       id="polygon142"
-       points="213,-1282 213,-1466 325,-1466 325,-1282 213,-1282 "
+       id="polygon160"
+       points="362,-1354 362,-1538 482,-1538 482,-1354 362,-1354 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge4"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title145">main.main._udt-&gt;main.main._schemata</title>
+       id="title163">main.main._udt-&gt;main.main._schemata</title>
     <path
-       id="path147"
-       d="M 305,-1470 C 324,-1509 351,-1551 388,-1578 C 440,-1616 616,-1643 722,-1656"
+       id="path165"
+       d="M 490,-1523 C 533,-1567 592,-1620 655,-1650 C 721,-1683 923,-1712 1039,-1727"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon149"
-       points="721.701,-1659.49 732,-1657 722.398,-1652.52 721.701,-1659.49 "
+       id="polygon167"
+       points="1038.7,-1730.49 1049,-1728 1039.4,-1723.52 1038.7,-1730.49 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node9"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title152">main.main._domains</title>
+       id="title170">main.main._domains</title>
     <polygon
-       id="polygon154"
-       points="439,-1553 439,-1573 631,-1573 631,-1553 439,-1553 "
+       id="polygon172"
+       points="560,-1181 560,-1201 752,-1201 752,-1181 560,-1181 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text156"
+       id="text174"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1558.33"
-       x="535">_domains</text>
+       y="-1186.33"
+       x="656">_domains</text>
     <polygon
-       id="polygon158"
-       points="439,-1553 439,-1573 631,-1573 631,-1553 439,-1553 "
+       id="polygon176"
+       points="560,-1181 560,-1201 752,-1201 752,-1181 560,-1181 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text160"
+       id="text178"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1539.33"
-       x="485.5">domain_catalog</text>
+       y="-1167.33"
+       x="606.5">domain_catalog</text>
     <text
-       id="text162"
+       id="text180"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1521.33"
-       x="486">domain_schema</text>
+       y="-1167.33"
+       x="740">key</text>
     <text
-       id="text164"
+       id="text182"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1503.33"
-       x="480.5">domain_name</text>
+       y="-1149.33"
+       x="607">domain_schema</text>
     <text
-       id="text166"
+       id="text184"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1485.33"
-       x="468">data_type</text>
+       y="-1149.33"
+       x="740">key</text>
     <text
-       id="text168"
+       id="text186"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1467.33"
-       x="456.5">gtype</text>
+       y="-1131.33"
+       x="601.5">domain_name</text>
     <text
-       id="text170"
+       id="text188"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1449.33"
-       x="519.5">character_maximum_length</text>
+       y="-1131.33"
+       x="740">key</text>
     <text
-       id="text172"
+       id="text190"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1431.33"
-       x="504.5">character_octet_length</text>
+       y="-1113.33"
+       x="589">data_type</text>
     <text
-       id="text174"
+       id="text192"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1413.33"
-       x="489">collation_catalog</text>
+       y="-1095.33"
+       x="592">array_spec</text>
     <text
-       id="text176"
+       id="text194"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1395.33"
-       x="489.5">collation_schema</text>
+       y="-1077.33"
+       x="602">domain_gtype</text>
     <text
-       id="text178"
+       id="text196"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1377.33"
-       x="484">collation_name</text>
+       y="-1059.33"
+       x="640.5">character_maximum_length</text>
     <text
-       id="text180"
+       id="text198"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1359.33"
-       x="501">character_set_catalog</text>
+       y="-1041.33"
+       x="625.5">character_octet_length</text>
     <text
-       id="text182"
+       id="text200"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1341.33"
-       x="501.5">character_set_schema</text>
+       y="-1023.33"
+       x="610">collation_catalog</text>
     <text
-       id="text184"
+       id="text202"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1323.33"
-       x="496">character_set_name</text>
+       y="-1005.33"
+       x="610.5">collation_schema</text>
     <text
-       id="text186"
+       id="text204"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1305.33"
-       x="493">numeric_precision</text>
+       y="-987.33301"
+       x="605">collation_name</text>
     <text
-       id="text188"
+       id="text206"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1287.33"
-       x="481">numeric_scale</text>
+       y="-969.33301"
+       x="622">character_set_catalog</text>
     <text
-       id="text190"
+       id="text208"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1269.33"
-       x="485">domain_default</text>
+       y="-951.33301"
+       x="622.5">character_set_schema</text>
     <text
-       id="text192"
+       id="text210"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1251.33"
-       x="494">domain_comments</text>
+       y="-933.33301"
+       x="617">character_set_name</text>
     <text
-       id="text194"
+       id="text212"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1233.33"
-       x="498">domain_short_name</text>
+       y="-915.33301"
+       x="614">numeric_precision</text>
     <text
-       id="text196"
+       id="text214"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1215.33"
-       x="494">domain_full_name</text>
+       y="-897.33301"
+       x="602">numeric_scale</text>
     <text
-       id="text198"
+       id="text216"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-879.33301"
+       x="606">domain_default</text>
+    <text
+       id="text218"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1197.33"
-       x="487">domain_internal</text>
+       y="-861.33301"
+       x="615">domain_comments</text>
     <text
-       id="text200"
+       id="text220"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-843.33301"
+       x="619">domain_short_name</text>
+    <text
+       id="text222"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-825.33301"
+       x="615">domain_full_name</text>
+    <text
+       id="text224"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-807.33301"
+       x="608">domain_internal</text>
+    <text
+       id="text226"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1179.33"
-       x="483">domain_owner</text>
+       y="-789.33301"
+       x="604">domain_owner</text>
     <polygon
-       id="polygon202"
-       points="438,-1174 438,-1574 632,-1574 632,-1174 438,-1174 "
+       id="polygon228"
+       points="559,-784 559,-1202 753,-1202 753,-784 559,-784 "
+       style="fill:none;stroke:#000000" />
+  </g>
+  <g
+     class="edge"
+     id="edge8"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
+    <title
+       id="title231">main.main._domains-&gt;main.main._element_types</title>
+    <path
+       id="path233"
+       d="M 719,-1206 C 733,-1252 746,-1300 758,-1340"
        style="fill:none;stroke:#000000" />
+    <polygon
+       id="polygon235"
+       points="754.774,-1341.43 761,-1350 761.479,-1339.42 754.774,-1341.43 "
+       style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge6"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title205">main.main._domains-&gt;main.main._schemata</title>
+       id="title238">main.main._domains-&gt;main.main._schemata</title>
     <path
-       id="path207"
-       d="M 640,-1569 C 643,-1572 646,-1575 649,-1578 C 670,-1599 698,-1617 723,-1630"
+       id="path240"
+       d="M 609,-1206 C 591,-1349 596,-1531 700,-1650 C 743,-1700 928,-1723 1039,-1732"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon209"
-       points="721.559,-1633.2 732,-1635 724.958,-1627.08 721.559,-1633.2 "
+       id="polygon242"
+       points="1038.7,-1735.49 1049,-1733 1039.4,-1728.52 1038.7,-1735.49 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node11"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node12"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title212">main.main._tables</title>
+       id="title245">main.main._tables</title>
     <polygon
-       id="polygon214"
-       points="881,-1037 881,-1057 1007,-1057 1007,-1037 881,-1037 "
+       id="polygon247"
+       points="1454,-1064 1454,-1084 1582,-1084 1582,-1064 1454,-1064 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text216"
+       id="text249"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1042.33"
-       x="944">_tables</text>
+       y="-1069.33"
+       x="1518">_tables</text>
     <polygon
-       id="polygon218"
-       points="881,-1037 881,-1057 1007,-1057 1007,-1037 881,-1037 "
+       id="polygon251"
+       points="1454,-1064 1454,-1084 1582,-1084 1582,-1064 1454,-1064 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text220"
+       id="text253"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1023.33"
-       x="920">table_catalog</text>
+       y="-1050.33"
+       x="1493">table_catalog</text>
     <text
-       id="text222"
+       id="text255"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1005.33"
-       x="920.5">table_schema</text>
+       y="-1050.33"
+       x="1570">key</text>
     <text
-       id="text224"
+       id="text257"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-987.33301"
-       x="915">table_name</text>
+       y="-1032.33"
+       x="1493.5">table_schema</text>
     <text
-       id="text226"
+       id="text259"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-969.33301"
-       x="912">table_type</text>
+       y="-1032.33"
+       x="1570">key</text>
     <text
-       id="text228"
+       id="text261"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-951.33301"
-       x="932.5">is_insertable_into</text>
+       y="-1014.33"
+       x="1488">table_name</text>
     <text
-       id="text230"
+       id="text263"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-933.33301"
-       x="928.5">table_comments</text>
+       y="-1014.33"
+       x="1570">key</text>
     <text
-       id="text232"
+       id="text265"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-915.33301"
-       x="932.5">table_short_name</text>
+       y="-996.33301"
+       x="1485">table_type</text>
     <text
-       id="text234"
+       id="text267"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-897.33301"
-       x="928.5">table_full_name</text>
+       y="-978.33301"
+       x="1505.5">is_insertable_into</text>
     <text
-       id="text236"
+       id="text269"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-879.33301"
-       x="917.5">table_owner</text>
+       y="-960.33301"
+       x="1501.5">table_comments</text>
+    <text
+       id="text271"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-942.33301"
+       x="1505.5">table_short_name</text>
+    <text
+       id="text273"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-924.33301"
+       x="1501.5">table_full_name</text>
+    <text
+       id="text275"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-906.33301"
+       x="1490.5">table_owner</text>
     <polygon
-       id="polygon238"
-       points="880,-874 880,-1058 1008,-1058 1008,-874 880,-874 "
+       id="polygon277"
+       points="1453,-901 1453,-1085 1583,-1085 1583,-901 1453,-901 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge8"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge10"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title241">main.main._tables-&gt;main.main._schemata</title>
+       id="title280">main.main._tables-&gt;main.main._schemata</title>
     <path
-       id="path243"
-       d="M 948,-1062 C 951,-1186 943,-1406 873,-1578 C 869,-1588 864,-1597 858,-1606"
+       id="path282"
+       d="M 1528,-1089 C 1537,-1230 1531,-1493 1392,-1650 C 1367,-1679 1275,-1704 1205,-1720"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon245"
-       points="855.2,-1603.9 852,-1614 860.8,-1608.1 855.2,-1603.9 "
+       id="polygon284"
+       points="1204.12,-1716.61 1195,-1722 1205.49,-1723.47 1204.12,-1716.61 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node13"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node14"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title248">main.main._collations</title>
+       id="title287">main.main._collations</title>
     <polygon
-       id="polygon250"
-       points="667,-1418 667,-1438 827,-1438 827,-1418 667,-1418 "
+       id="polygon289"
+       points="1214,-1490 1214,-1510 1374,-1510 1374,-1490 1214,-1490 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text252"
+       id="text291"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1423.33"
-       x="747">_collations</text>
+       y="-1495.33"
+       x="1294">_collations</text>
     <polygon
-       id="polygon254"
-       points="667,-1418 667,-1438 827,-1438 827,-1418 667,-1418 "
+       id="polygon293"
+       points="1214,-1490 1214,-1510 1374,-1510 1374,-1490 1214,-1490 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text256"
+       id="text295"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1404.33"
-       x="717">collation_catalog</text>
+       y="-1476.33"
+       x="1264">collation_catalog</text>
     <text
-       id="text258"
+       id="text297"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1386.33"
-       x="717.5">collation_schema</text>
+       y="-1476.33"
+       x="1362">key</text>
+    <text
+       id="text299"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1458.33"
+       x="1264.5">collation_schema</text>
+    <text
+       id="text301"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1458.33"
+       x="1362">key</text>
+    <text
+       id="text303"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1440.33"
+       x="1259">collation_name</text>
     <text
-       id="text260"
+       id="text305"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1368.33"
-       x="712">collation_name</text>
+       y="-1440.33"
+       x="1362">key</text>
     <text
-       id="text262"
+       id="text307"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1350.33"
-       x="725.5">collation_comments</text>
+       y="-1422.33"
+       x="1272.5">collation_comments</text>
     <text
-       id="text264"
+       id="text309"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1332.33"
-       x="729.5">collation_short_name</text>
+       y="-1404.33"
+       x="1276.5">collation_short_name</text>
     <text
-       id="text266"
+       id="text311"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1314.33"
-       x="725.5">collation_full_name</text>
+       y="-1386.33"
+       x="1272.5">collation_full_name</text>
     <polygon
-       id="polygon268"
-       points="666,-1309 666,-1439 828,-1439 828,-1309 666,-1309 "
+       id="polygon313"
+       points="1213,-1381 1213,-1511 1375,-1511 1375,-1381 1213,-1381 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge10"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge12"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title271">main.main._collations-&gt;main.main._schemata</title>
+       id="title316">main.main._collations-&gt;main.main._schemata</title>
     <path
-       id="path273"
-       d="M 761,-1443 C 770,-1492 783,-1557 793,-1604"
+       id="path318"
+       d="M 1263,-1515 C 1244,-1556 1218,-1607 1191,-1650 C 1185,-1659 1178,-1668 1172,-1678"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon275"
-       points="789.607,-1604.88 795,-1614 796.471,-1603.51 789.607,-1604.88 "
+       id="polygon320"
+       points="1169.2,-1675.9 1166,-1686 1174.8,-1680.1 1169.2,-1675.9 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node15"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node16"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title278">main.main._routines</title>
+       id="title323">main.main._routines</title>
     <polygon
-       id="polygon280"
-       points="1083,-1553 1083,-1573 1229,-1573 1229,-1553 1083,-1553 "
+       id="polygon325"
+       points="994,-1625 994,-1645 1140,-1645 1140,-1625 994,-1625 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text282"
+       id="text327"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1558.33"
-       x="1156">_routines</text>
+       y="-1630.33"
+       x="1067">_routines</text>
     <polygon
-       id="polygon284"
-       points="1083,-1553 1083,-1573 1229,-1573 1229,-1553 1083,-1553 "
+       id="polygon329"
+       points="994,-1625 994,-1645 1140,-1645 1140,-1625 994,-1625 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text286"
+       id="text331"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1611.33"
+       x="1041">specific_catalog</text>
+    <text
+       id="text333"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1611.33"
+       x="1128">key</text>
+    <text
+       id="text335"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1593.33"
+       x="1041.5">specific_schema</text>
+    <text
+       id="text337"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1593.33"
+       x="1128">key</text>
+    <text
+       id="text339"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1575.33"
+       x="1036">specific_name</text>
+    <text
+       id="text341"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1575.33"
+       x="1128">key</text>
+    <text
+       id="text343"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1557.33"
+       x="1039.5">routine_catalog</text>
+    <text
+       id="text345"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1539.33"
-       x="1130">specific_catalog</text>
+       x="1040">routine_schema</text>
     <text
-       id="text288"
+       id="text347"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1521.33"
-       x="1130.5">specific_schema</text>
+       x="1034.5">routine_name</text>
     <text
-       id="text290"
+       id="text349"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1503.33"
-       x="1125">specific_name</text>
+       x="1031.5">routine_type</text>
     <text
-       id="text292"
+       id="text351"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1485.33"
-       x="1128.5">routine_catalog</text>
+       x="1028.5">return_type</text>
     <text
-       id="text294"
+       id="text353"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1467.33"
-       x="1129">routine_schema</text>
+       x="1026.5">returns_set</text>
     <text
-       id="text296"
+       id="text355"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1449.33"
-       x="1123.5">routine_name</text>
+       x="1033.5">routine_body</text>
     <text
-       id="text298"
+       id="text357"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1431.33"
-       x="1120.5">routine_type</text>
+       x="1047">routine_definition</text>
     <text
-       id="text300"
+       id="text359"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1413.33"
-       x="1117.5">return_type</text>
+       x="1037">external_name</text>
     <text
-       id="text302"
+       id="text361"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1395.33"
-       x="1115.5">returns_set</text>
+       x="1047">external_language</text>
     <text
-       id="text304"
+       id="text363"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1377.33"
-       x="1122.5">routine_body</text>
+       x="1040.5">parameter_style</text>
     <text
-       id="text306"
+       id="text365"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1359.33"
-       x="1136">routine_definition</text>
+       x="1040.5">is_deterministic</text>
     <text
-       id="text308"
+       id="text367"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1341.33"
-       x="1126">external_name</text>
+       x="1039.5">sql_data_access</text>
     <text
-       id="text310"
+       id="text369"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1323.33"
-       x="1136">external_language</text>
+       x="1028.5">is_null_call</text>
     <text
-       id="text312"
+       id="text371"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1305.33"
-       x="1129.5">parameter_style</text>
+       x="1048">routine_comments</text>
     <text
-       id="text314"
+       id="text373"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1287.33"
-       x="1129.5">is_deterministic</text>
+       x="1052">routine_short_name</text>
     <text
-       id="text316"
+       id="text375"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1269.33"
-       x="1128.5">sql_data_access</text>
+       x="1048">routine_full_name</text>
     <text
-       id="text318"
+       id="text377"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1251.33"
-       x="1117.5">is_null_call</text>
-    <text
-       id="text320"
-       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1233.33"
-       x="1137">routine_comments</text>
-    <text
-       id="text322"
-       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1215.33"
-       x="1141">routine_short_name</text>
-    <text
-       id="text324"
-       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1197.33"
-       x="1137">routine_full_name</text>
-    <text
-       id="text326"
-       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1179.33"
-       x="1126">routine_owner</text>
+       x="1037">routine_owner</text>
     <polygon
-       id="polygon328"
-       points="1082,-1174 1082,-1574 1230,-1574 1230,-1174 1082,-1174 "
+       id="polygon379"
+       points="993,-1246 993,-1646 1141,-1646 1141,-1246 993,-1246 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge12"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge14"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title331">main.main._routines-&gt;main.main._schemata</title>
+       id="title382">main.main._routines-&gt;main.main._schemata</title>
     <path
-       id="path333"
-       d="M 1074,-1562 C 1069,-1568 1064,-1573 1058,-1578 C 1011,-1620 942,-1642 888,-1654"
+       id="path384"
+       d="M 1106,-1650 C 1107,-1659 1109,-1668 1111,-1676"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon335"
-       points="887.119,-1650.61 878,-1656 888.492,-1657.47 887.119,-1650.61 "
+       id="polygon386"
+       points="1107.61,-1676.88 1113,-1686 1114.47,-1675.51 1107.61,-1676.88 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node17"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node18"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title338">main.main._udt_columns</title>
+       id="title389">main.main._udt_columns</title>
     <polygon
-       id="polygon340"
-       points="167,-1109 167,-1129 371,-1129 371,-1109 167,-1109 "
+       id="polygon391"
+       points="320,-1145 320,-1165 524,-1165 524,-1145 320,-1145 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text342"
+       id="text393"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1114.33"
-       x="269">_udt_columns</text>
+       y="-1150.33"
+       x="422">_udt_columns</text>
     <polygon
-       id="polygon344"
-       points="167,-1109 167,-1129 371,-1129 371,-1109 167,-1109 "
+       id="polygon395"
+       points="320,-1145 320,-1165 524,-1165 524,-1145 320,-1145 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text346"
+       id="text397"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1095.33"
-       x="201.5">udt_catalog</text>
+       y="-1131.33"
+       x="354.5">udt_catalog</text>
     <text
-       id="text348"
+       id="text399"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1077.33"
-       x="202">udt_schema</text>
+       y="-1131.33"
+       x="512">key</text>
     <text
-       id="text350"
+       id="text401"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1059.33"
-       x="196.5">udt_name</text>
+       y="-1113.33"
+       x="355">udt_schema</text>
     <text
-       id="text352"
+       id="text403"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1041.33"
-       x="202.5">udt_column</text>
+       y="-1113.33"
+       x="512">key</text>
     <text
-       id="text354"
+       id="text405"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1023.33"
-       x="215">ordinal_position</text>
+       y="-1095.33"
+       x="349.5">udt_name</text>
     <text
-       id="text356"
+       id="text407"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1005.33"
-       x="196">data_type</text>
+       y="-1095.33"
+       x="512">key</text>
     <text
-       id="text358"
+       id="text409"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1077.33"
+       x="355.5">udt_column</text>
+    <text
+       id="text411"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1077.33"
+       x="512">key</text>
+    <text
+       id="text413"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1059.33"
+       x="368">ordinal_position</text>
+    <text
+       id="text415"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1041.33"
+       x="349">data_type</text>
+    <text
+       id="text417"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1023.33"
+       x="352">array_spec</text>
+    <text
+       id="text419"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1005.33"
+       x="400.5">character_maximum_length</text>
+    <text
+       id="text421"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-987.33301"
-       x="247.5">character_maximum_length</text>
+       x="385.5">character_octet_length</text>
     <text
-       id="text360"
+       id="text423"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-969.33301"
-       x="232.5">character_octet_length</text>
+       x="374">numeric_precision</text>
     <text
-       id="text362"
+       id="text425"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-951.33301"
-       x="221">numeric_precision</text>
+       x="362">numeric_scale</text>
     <text
-       id="text364"
+       id="text427"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-933.33301"
-       x="209">numeric_scale</text>
+       x="375">datetime_precision</text>
     <text
-       id="text366"
+       id="text429"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-915.33301"
-       x="222">datetime_precision</text>
+       x="382">character_set_catalog</text>
     <text
-       id="text368"
+       id="text431"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-897.33301"
-       x="229">character_set_catalog</text>
+       x="382.5">character_set_schema</text>
     <text
-       id="text370"
+       id="text433"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-879.33301"
-       x="229.5">character_set_schema</text>
+       x="377">character_set_name</text>
     <text
-       id="text372"
+       id="text435"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-861.33301"
-       x="224">character_set_name</text>
+       x="370">collation_catalog</text>
     <text
-       id="text374"
+       id="text437"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-843.33301"
-       x="217">collation_catalog</text>
+       x="370.5">collation_schema</text>
     <text
-       id="text376"
+       id="text439"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-825.33301"
-       x="217.5">collation_schema</text>
-    <text
-       id="text378"
-       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-807.33301"
-       x="212">collation_name</text>
+       x="365">collation_name</text>
     <polygon
-       id="polygon380"
-       points="166,-802 166,-1130 372,-1130 372,-802 166,-802 "
+       id="polygon441"
+       points="319,-820 319,-1166 525,-1166 525,-820 319,-820 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge14"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge18"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
+    <title
+       id="title444">main.main._udt_columns-&gt;main.main._element_types</title>
+    <path
+       id="path446"
+       d="M 516,-1170 C 525,-1183 533,-1195 542,-1206 C 589,-1267 651,-1328 701,-1372"
+       style="fill:none;stroke:#000000" />
+    <polygon
+       id="polygon448"
+       points="699.169,-1375.05 709,-1379 703.779,-1369.78 699.169,-1375.05 "
+       style="fill:#000000;stroke:#000000" />
+  </g>
+  <g
+     class="edge"
+     id="edge16"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title383">main.main._udt_columns-&gt;main.main._udt</title>
+       id="title451">main.main._udt_columns-&gt;main.main._udt</title>
     <path
-       id="path385"
-       d="M 269,-1134 C 269,-1179 269,-1227 269,-1268"
+       id="path453"
+       d="M 422,-1170 C 422,-1227 422,-1289 422,-1340"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon387"
-       points="265.5,-1268 269,-1278 272.5,-1268 265.5,-1268 "
+       id="polygon455"
+       points="418.5,-1340 422,-1350 425.5,-1340 418.5,-1340 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node19"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node21"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title390">main.main._enums</title>
+       id="title458">main.main._enums</title>
     <polygon
-       id="polygon392"
-       points="9,-1001 9,-1021 131,-1021 131,-1001 9,-1001 "
+       id="polygon460"
+       points="162,-1028 162,-1048 284,-1048 284,-1028 162,-1028 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text394"
+       id="text462"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1006.33"
-       x="70">_enums</text>
+       y="-1033.33"
+       x="223">_enums</text>
     <polygon
-       id="polygon396"
-       points="9,-1001 9,-1021 131,-1021 131,-1001 9,-1001 "
+       id="polygon464"
+       points="162,-1028 162,-1048 284,-1048 284,-1028 162,-1028 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text398"
+       id="text466"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-987.33301"
-       x="43.5">udt_catalog</text>
+       y="-1014.33"
+       x="196.5">udt_catalog</text>
     <text
-       id="text400"
+       id="text468"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-969.33301"
-       x="44">udt_schema</text>
+       y="-1014.33"
+       x="272">key</text>
     <text
-       id="text402"
+       id="text470"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-951.33301"
-       x="38.5">udt_name</text>
+       y="-996.33301"
+       x="197">udt_schema</text>
     <text
-       id="text404"
+       id="text472"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-933.33301"
-       x="24.5">label</text>
+       y="-996.33301"
+       x="272">key</text>
     <text
-       id="text406"
+       id="text474"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-915.33301"
-       x="57">ordinal_position</text>
+       y="-978.33301"
+       x="191.5">udt_name</text>
+    <text
+       id="text476"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-978.33301"
+       x="272">key</text>
+    <text
+       id="text478"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-960.33301"
+       x="177.5">label</text>
+    <text
+       id="text480"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-960.33301"
+       x="272">key</text>
+    <text
+       id="text482"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-942.33301"
+       x="210">ordinal_position</text>
     <polygon
-       id="polygon408"
-       points="8,-910 8,-1022 132,-1022 132,-910 8,-910 "
+       id="polygon484"
+       points="161,-937 161,-1049 285,-1049 285,-937 161,-937 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge16"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge20"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title411">main.main._enums-&gt;main.main._udt</title>
+       id="title487">main.main._enums-&gt;main.main._udt</title>
     <path
-       id="path413"
-       d="M 98,-1026 C 113,-1058 132,-1098 149,-1134 C 170,-1179 195,-1227 216,-1269"
+       id="path489"
+       d="M 243,-1053 C 258,-1096 279,-1156 302,-1206 C 322,-1251 345,-1300 366,-1341"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon415"
-       points="213.084,-1270.96 221,-1278 219.203,-1267.56 213.084,-1270.96 "
+       id="polygon491"
+       points="363.084,-1342.96 371,-1350 369.203,-1339.56 363.084,-1342.96 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node21"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node23"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title418">main.main._views</title>
+       id="title494">main.main._views</title>
     <polygon
-       id="polygon420"
-       points="483,-566 483,-586 599,-586 599,-566 483,-566 "
+       id="polygon496"
+       points="1348,-557 1348,-577 1466,-577 1466,-557 1348,-557 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text422"
+       id="text498"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-571.33301"
-       x="541">_views</text>
+       y="-562.33301"
+       x="1407">_views</text>
     <polygon
-       id="polygon424"
-       points="483,-566 483,-586 599,-586 599,-566 483,-566 "
+       id="polygon500"
+       points="1348,-557 1348,-577 1466,-577 1466,-557 1348,-557 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text426"
+       id="text502"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-552.33301"
-       x="522">table_catalog</text>
+       y="-543.33301"
+       x="1387">table_catalog</text>
     <text
-       id="text428"
+       id="text504"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-534.33301"
-       x="522.5">table_schema</text>
+       y="-543.33301"
+       x="1454">key</text>
     <text
-       id="text430"
+       id="text506"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-516.33301"
-       x="517">table_name</text>
+       y="-525.33301"
+       x="1387.5">table_schema</text>
     <text
-       id="text432"
+       id="text508"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-498.33301"
-       x="529.5">view_definition</text>
+       y="-525.33301"
+       x="1454">key</text>
     <text
-       id="text434"
+       id="text510"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-480.33301"
-       x="522.5">check_option</text>
+       y="-507.33301"
+       x="1382">table_name</text>
     <text
-       id="text436"
+       id="text512"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-462.33301"
-       x="520">is_updatable</text>
+       y="-507.33301"
+       x="1454">key</text>
+    <text
+       id="text514"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-489.33301"
+       x="1394.5">view_definition</text>
+    <text
+       id="text516"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-471.33301"
+       x="1387.5">check_option</text>
+    <text
+       id="text518"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-453.33301"
+       x="1385">is_updatable</text>
     <polygon
-       id="polygon438"
-       points="482,-457 482,-587 600,-587 600,-457 482,-457 "
+       id="polygon520"
+       points="1347,-448 1347,-578 1467,-578 1467,-448 1347,-448 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge18"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge22"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title441">main.main._views-&gt;main.main._tables</title>
+       id="title523">main.main._views-&gt;main.main._tables</title>
     <path
-       id="path443"
-       d="M 544,-591 C 550,-646 568,-720 617,-762 C 702,-834 773,-733 863,-798 C 884,-814 900,-837 912,-861"
+       id="path525"
+       d="M 1423,-582 C 1441,-662 1472,-794 1494,-887"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon445"
-       points="908.74,-862.283 916,-870 915.137,-859.44 908.74,-862.283 "
+       id="polygon527"
+       points="1490.61,-887.881 1496,-897 1497.47,-886.508 1490.61,-887.881 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node23"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node25"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title448">main.main._character_sets</title>
+       id="title530">main.main._character_sets</title>
     <polygon
-       id="polygon450"
-       points="649,-1037 649,-1057 845,-1057 845,-1037 649,-1037 "
+       id="polygon532"
+       points="1184,-1064 1184,-1084 1380,-1084 1380,-1064 1184,-1064 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text452"
+       id="text534"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1042.33"
-       x="747">_character_sets</text>
+       y="-1069.33"
+       x="1282">_character_sets</text>
     <polygon
-       id="polygon454"
-       points="649,-1037 649,-1057 845,-1057 845,-1037 649,-1037 "
+       id="polygon536"
+       points="1184,-1064 1184,-1084 1380,-1084 1380,-1064 1184,-1064 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text456"
+       id="text538"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1023.33"
-       x="711">character_set_catalog</text>
+       y="-1050.33"
+       x="1246">character_set_catalog</text>
     <text
-       id="text458"
+       id="text540"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1005.33"
-       x="711.5">character_set_schema</text>
+       y="-1050.33"
+       x="1368">key</text>
     <text
-       id="text460"
+       id="text542"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-987.33301"
-       x="706">character_set_name</text>
+       y="-1032.33"
+       x="1246.5">character_set_schema</text>
     <text
-       id="text462"
+       id="text544"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-969.33301"
-       x="716">default_collate_catalog</text>
+       y="-1032.33"
+       x="1368">key</text>
     <text
-       id="text464"
+       id="text546"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-951.33301"
-       x="716.5">default_collate_schema</text>
+       y="-1014.33"
+       x="1241">character_set_name</text>
     <text
-       id="text466"
+       id="text548"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-933.33301"
-       x="711">default_collate_name</text>
+       y="-1014.33"
+       x="1368">key</text>
     <text
-       id="text468"
+       id="text550"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-915.33301"
-       x="719.5">character_set_comments</text>
+       y="-996.33301"
+       x="1251">default_collate_catalog</text>
     <text
-       id="text470"
+       id="text552"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-897.33301"
-       x="723.5">character_set_short_name</text>
+       y="-978.33301"
+       x="1251.5">default_collate_schema</text>
     <text
-       id="text472"
+       id="text554"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-879.33301"
-       x="719.5">character_set_full_name</text>
+       y="-960.33301"
+       x="1246">default_collate_name</text>
+    <text
+       id="text556"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-942.33301"
+       x="1254.5">character_set_comments</text>
+    <text
+       id="text558"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-924.33301"
+       x="1258.5">character_set_short_name</text>
+    <text
+       id="text560"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-906.33301"
+       x="1254.5">character_set_full_name</text>
     <polygon
-       id="polygon474"
-       points="648,-874 648,-1058 846,-1058 846,-874 648,-874 "
+       id="polygon562"
+       points="1183,-901 1183,-1085 1381,-1085 1381,-901 1183,-901 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge20"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge24"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title477">main.main._character_sets-&gt;main.main._schemata</title>
+       id="title565">main.main._character_sets-&gt;main.main._schemata</title>
     <path
-       id="path479"
-       d="M 804,-1062 C 820,-1095 836,-1133 845,-1170 C 885,-1347 883,-1401 845,-1578 C 843,-1587 840,-1596 837,-1604"
+       id="path567"
+       d="M 1243,-1089 C 1225,-1135 1207,-1191 1196,-1242 C 1157,-1421 1201,-1474 1158,-1650 C 1156,-1659 1153,-1668 1149,-1676"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon481"
-       points="833.464,-1603.42 833,-1614 839.964,-1606.02 833.464,-1603.42 "
+       id="polygon569"
+       points="1145.52,-1675.42 1146,-1686 1152.23,-1677.43 1145.52,-1675.42 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge22"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge26"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title484">main.main._character_sets-&gt;main.main._collations</title>
+       id="title572">main.main._character_sets-&gt;main.main._collations</title>
     <path
-       id="path486"
-       d="M 747,-1062 C 747,-1133 747,-1228 747,-1295"
+       id="path574"
+       d="M 1285,-1089 C 1287,-1171 1290,-1289 1292,-1367"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon488"
-       points="743.5,-1295 747,-1305 750.5,-1295 743.5,-1295 "
+       id="polygon576"
+       points="1288.5,-1367 1292,-1377 1295.5,-1367 1288.5,-1367 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node26"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node28"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title491">main.main._triggers</title>
+       id="title579">main.main._triggers</title>
     <polygon
-       id="polygon493"
-       points="1061,-629 1061,-649 1213,-649 1213,-629 1061,-629 "
+       id="polygon581"
+       points="1700,-620 1700,-640 1852,-640 1852,-620 1700,-620 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text495"
+       id="text583"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-634.33301"
-       x="1137">_triggers</text>
+       y="-625.33301"
+       x="1776">_triggers</text>
     <polygon
-       id="polygon497"
-       points="1061,-629 1061,-649 1213,-649 1213,-629 1061,-629 "
+       id="polygon585"
+       points="1700,-620 1700,-640 1852,-640 1852,-620 1700,-620 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text499"
+       id="text587"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-615.33301"
-       x="1105.5">trigger_catalog</text>
+       y="-606.33301"
+       x="1744.5">trigger_catalog</text>
     <text
-       id="text501"
+       id="text589"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-597.33301"
-       x="1106">trigger_schema</text>
+       y="-606.33301"
+       x="1840">key</text>
     <text
-       id="text503"
+       id="text591"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-579.33301"
-       x="1100.5">trigger_name</text>
+       y="-588.33301"
+       x="1745">trigger_schema</text>
     <text
-       id="text505"
+       id="text593"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-561.33301"
-       x="1118.5">event_manipulation</text>
+       y="-588.33301"
+       x="1840">key</text>
     <text
-       id="text507"
+       id="text595"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-543.33301"
-       x="1122">event_object_catalog</text>
+       y="-570.33301"
+       x="1739.5">trigger_name</text>
     <text
-       id="text509"
+       id="text597"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-525.33301"
-       x="1122.5">event_object_schema</text>
+       y="-570.33301"
+       x="1840">key</text>
     <text
-       id="text511"
+       id="text599"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-507.33301"
-       x="1115.5">event_object_table</text>
+       y="-552.33301"
+       x="1757.5">event_manipulation</text>
     <text
-       id="text513"
+       id="text601"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-489.33301"
-       x="1110">action_statement</text>
+       y="-552.33301"
+       x="1840">key</text>
     <text
-       id="text515"
+       id="text603"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-471.33301"
-       x="1114">action_orientation</text>
+       y="-534.33301"
+       x="1761">event_object_catalog</text>
     <text
-       id="text517"
+       id="text605"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-453.33301"
-       x="1111.5">condition_timing</text>
+       y="-534.33301"
+       x="1840">key</text>
     <text
-       id="text519"
+       id="text607"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-435.33301"
-       x="1114">trigger_comments</text>
+       y="-516.33301"
+       x="1761.5">event_object_schema</text>
     <text
-       id="text521"
+       id="text609"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-417.33301"
-       x="1118">trigger_short_name</text>
+       y="-516.33301"
+       x="1840">key</text>
     <text
-       id="text523"
+       id="text611"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-399.33301"
-       x="1114">trigger_full_name</text>
+       y="-498.33301"
+       x="1754.5">event_object_table</text>
+    <text
+       id="text613"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-498.33301"
+       x="1840">key</text>
+    <text
+       id="text615"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-480.33301"
+       x="1749">action_statement</text>
+    <text
+       id="text617"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-462.33301"
+       x="1753">action_orientation</text>
+    <text
+       id="text619"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-444.33301"
+       x="1750.5">condition_timing</text>
+    <text
+       id="text621"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-426.33301"
+       x="1753">trigger_comments</text>
+    <text
+       id="text623"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-408.33301"
+       x="1757">trigger_short_name</text>
+    <text
+       id="text625"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-390.33301"
+       x="1753">trigger_full_name</text>
     <polygon
-       id="polygon525"
-       points="1060,-394 1060,-650 1214,-650 1214,-394 1060,-394 "
+       id="polygon627"
+       points="1699,-385 1699,-641 1853,-641 1853,-385 1699,-385 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge24"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge28"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title528">main.main._triggers-&gt;main.main._schemata</title>
+       id="title630">main.main._triggers-&gt;main.main._schemata</title>
     <path
-       id="path530"
-       d="M 1097,-654 C 1085,-699 1072,-751 1063,-798 C 997,-1144 1117,-1284 924,-1578 C 914,-1593 901,-1606 886,-1618"
+       id="path632"
+       d="M 1782,-645 C 1784,-882 1753,-1380 1473,-1650 C 1435,-1687 1297,-1712 1205,-1726"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon532"
-       points="883.9,-1615.2 878,-1624 888.1,-1620.8 883.9,-1615.2 "
+       id="polygon634"
+       points="1204.12,-1722.61 1195,-1728 1205.49,-1729.47 1204.12,-1722.61 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge26"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge30"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title535">main.main._triggers-&gt;main.main._tables</title>
+       id="title637">main.main._triggers-&gt;main.main._tables</title>
     <path
-       id="path537"
-       d="M 1087,-654 C 1073,-690 1058,-728 1043,-762 C 1028,-795 1012,-829 997,-861"
+       id="path639"
+       d="M 1727,-645 C 1714,-678 1698,-713 1682,-744 C 1656,-794 1623,-845 1594,-889"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon539"
-       points="993.797,-859.559 992,-870 999.916,-862.958 993.797,-859.559 "
+       id="polygon641"
+       points="1591.2,-886.9 1588,-897 1596.8,-891.1 1591.2,-886.9 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node29"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node31"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title542">main.main._table_constraints</title>
+       id="title644">main.main._table_constraints</title>
     <polygon
-       id="polygon544"
-       points="863,-602 863,-622 1025,-622 1025,-602 863,-602 "
+       id="polygon646"
+       points="1502,-593 1502,-613 1664,-613 1664,-593 1502,-593 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text546"
+       id="text648"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-607.33301"
-       x="944">_table_constraints</text>
+       y="-598.33301"
+       x="1583">_table_constraints</text>
     <polygon
-       id="polygon548"
-       points="863,-602 863,-622 1025,-622 1025,-602 863,-602 "
+       id="polygon650"
+       points="1502,-593 1502,-613 1664,-613 1664,-593 1502,-593 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text550"
+       id="text652"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-588.33301"
-       x="916">constraint_catalog</text>
+       y="-579.33301"
+       x="1555">constraint_catalog</text>
     <text
-       id="text552"
+       id="text654"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-561.33301"
+       x="1555.5">constraint_schema</text>
+    <text
+       id="text656"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-543.33301"
+       x="1550">constraint_name</text>
+    <text
+       id="text658"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-543.33301"
+       x="1652">key</text>
+    <text
+       id="text660"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-525.33301"
+       x="1541">table_catalog</text>
+    <text
+       id="text662"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-525.33301"
+       x="1652">key</text>
+    <text
+       id="text664"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-507.33301"
+       x="1541.5">table_schema</text>
+    <text
+       id="text666"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-507.33301"
+       x="1652">key</text>
+    <text
+       id="text668"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-489.33301"
+       x="1536">table_name</text>
+    <text
+       id="text670"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-489.33301"
+       x="1652">key</text>
+    <text
+       id="text672"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-471.33301"
+       x="1547">constraint_type</text>
+    <text
+       id="text674"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-453.33301"
+       x="1540.5">check_clause</text>
+    <text
+       id="text676"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-435.33301"
+       x="1540.5">is_deferrable</text>
+    <text
+       id="text678"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-417.33301"
+       x="1553">initially_deferred</text>
+    <polygon
+       id="polygon680"
+       points="1501,-412 1501,-614 1665,-614 1665,-412 1501,-412 "
+       style="fill:none;stroke:#000000" />
+  </g>
+  <g
+     class="edge"
+     id="edge32"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
+    <title
+       id="title683">main.main._table_constraints-&gt;main.main._tables</title>
+    <path
+       id="path685"
+       d="M 1569,-618 C 1558,-698 1543,-807 1532,-887"
+       style="fill:none;stroke:#000000" />
+    <polygon
+       id="polygon687"
+       points="1528.51,-886.701 1531,-897 1535.48,-887.398 1528.51,-886.701 "
+       style="fill:#000000;stroke:#000000" />
+  </g>
+  <g
+     class="node"
+     id="node33"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
+    <title
+       id="title690">main.main._domain_constraints</title>
+    <polygon
+       id="polygon692"
+       points="307,-584 307,-604 475,-604 475,-584 307,-584 "
+       style="fill:#808080;stroke:#808080" />
+    <text
+       id="text694"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-589.33301"
+       x="391">_domain_constraints</text>
+    <polygon
+       id="polygon696"
+       points="307,-584 307,-604 475,-604 475,-584 307,-584 "
+       style="fill:none;stroke:#000000" />
+    <text
+       id="text698"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-570.33301"
-       x="916.5">constraint_schema</text>
+       x="360">constraint_catalog</text>
     <text
-       id="text554"
+       id="text700"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-552.33301"
-       x="911">constraint_name</text>
+       x="360.5">constraint_schema</text>
     <text
-       id="text556"
+       id="text702"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-534.33301"
-       x="902">table_catalog</text>
+       x="355">constraint_name</text>
     <text
-       id="text558"
+       id="text704"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-534.33301"
+       x="463">key</text>
+    <text
+       id="text706"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-516.33301"
-       x="902.5">table_schema</text>
+       x="353.5">domain_catalog</text>
     <text
-       id="text560"
+       id="text708"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-516.33301"
+       x="463">key</text>
+    <text
+       id="text710"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-498.33301"
+       x="354">domain_schema</text>
+    <text
+       id="text712"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-498.33301"
-       x="897">table_name</text>
+       x="463">key</text>
     <text
-       id="text562"
+       id="text714"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-480.33301"
-       x="908">constraint_type</text>
+       x="348.5">domain_name</text>
     <text
-       id="text564"
+       id="text716"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-480.33301"
+       x="463">key</text>
+    <text
+       id="text718"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-462.33301"
-       x="901.5">check_clause</text>
+       x="345.5">check_clause</text>
     <text
-       id="text566"
+       id="text720"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-444.33301"
-       x="901.5">is_deferrable</text>
+       x="345.5">is_deferrable</text>
     <text
-       id="text568"
+       id="text722"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-426.33301"
-       x="914">initially_deferred</text>
+       x="358">initially_deferred</text>
     <polygon
-       id="polygon570"
-       points="862,-421 862,-623 1026,-623 1026,-421 862,-421 "
+       id="polygon724"
+       points="306,-421 306,-605 476,-605 476,-421 306,-421 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge28"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge36"
+     transform="matrix(1.3264629,0,0,1.33333,12.540347,2501.3271)">
+    <title
+       id="title727">main.main._domain_constraints-&gt;main.main._schemata</title>
+    <path
+       id="path729"
+       d="M 298,-583 C 241,-631 175,-701 144,-780 C 0,-1150 25,-1417 345,-1650 C 400,-1691 849,-1721 1039,-1732"
+       style="fill:none;stroke:#000000" />
+    <polygon
+       id="polygon731"
+       points="1038.7,-1735.49 1049,-1733 1039.4,-1728.52 1038.7,-1735.49 "
+       style="fill:#000000;stroke:#000000" />
+  </g>
+  <g
+     class="edge"
+     id="edge34"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title573">main.main._table_constraints-&gt;main.main._tables</title>
+       id="title734">main.main._domain_constraints-&gt;main.main._domains</title>
     <path
-       id="path575"
-       d="M 944,-627 C 944,-698 944,-789 944,-860"
+       id="path736"
+       d="M 446,-609 C 475,-660 511,-723 542,-780 C 543,-782 545,-785 546,-788"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon577"
-       points="940.5,-860 944,-870 947.5,-860 940.5,-860 "
+       id="polygon738"
+       points="543.084,-789.958 551,-797 549.203,-786.559 543.084,-789.958 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node31"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node36"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title580">main.main._domain_constraints</title>
+       id="title741">main.main._parameters</title>
     <polygon
-       id="polygon582"
-       points="407,-1037 407,-1057 575,-1057 575,-1037 407,-1037 "
+       id="polygon743"
+       points="1012,-1055 1012,-1075 1148,-1075 1148,-1055 1012,-1055 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text584"
+       id="text745"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1042.33"
-       x="491">_domain_constraints</text>
+       y="-1060.33"
+       x="1080">_parameters</text>
     <polygon
-       id="polygon586"
-       points="407,-1037 407,-1057 575,-1057 575,-1037 407,-1037 "
+       id="polygon747"
+       points="1012,-1055 1012,-1075 1148,-1075 1148,-1055 1012,-1055 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text588"
+       id="text749"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1041.33"
+       x="1059">specific_catalog</text>
+    <text
+       id="text751"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1041.33"
+       x="1136">key</text>
+    <text
+       id="text753"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1023.33"
-       x="460">constraint_catalog</text>
+       x="1059.5">specific_schema</text>
     <text
-       id="text590"
+       id="text755"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1023.33"
+       x="1136">key</text>
+    <text
+       id="text757"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1005.33"
-       x="460.5">constraint_schema</text>
+       x="1054">specific_name</text>
     <text
-       id="text592"
+       id="text759"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-987.33301"
-       x="455">constraint_name</text>
+       y="-1005.33"
+       x="1136">key</text>
     <text
-       id="text594"
+       id="text761"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-969.33301"
-       x="453.5">domain_catalog</text>
+       y="-987.33301"
+       x="1060">ordinal_position</text>
     <text
-       id="text596"
+       id="text763"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-951.33301"
-       x="454">domain_schema</text>
+       y="-987.33301"
+       x="1136">key</text>
     <text
-       id="text598"
+       id="text765"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-933.33301"
-       x="448.5">domain_name</text>
+       y="-969.33301"
+       x="1061">parameter_mode</text>
     <text
-       id="text600"
+       id="text767"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-915.33301"
-       x="445.5">check_clause</text>
+       y="-951.33301"
+       x="1060.5">parameter_name</text>
     <text
-       id="text602"
+       id="text769"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-897.33301"
-       x="445.5">is_deferrable</text>
+       y="-933.33301"
+       x="1041">data_type</text>
     <text
-       id="text604"
+       id="text771"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-879.33301"
-       x="458">initially_deferred</text>
+       y="-915.33301"
+       x="1044">array_spec</text>
     <polygon
-       id="polygon606"
-       points="406,-874 406,-1058 576,-1058 576,-874 406,-874 "
+       id="polygon773"
+       points="1011,-910 1011,-1076 1149,-1076 1149,-910 1011,-910 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge32"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge40"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title609">main.main._domain_constraints-&gt;main.main._schemata</title>
+       id="title776">main.main._parameters-&gt;main.main._element_types</title>
     <path
-       id="path611"
-       d="M 442,-1062 C 382,-1194 303,-1431 421,-1578 C 458,-1624 620,-1647 722,-1658"
+       id="path778"
+       d="M 1052,-1080 C 1037,-1120 1017,-1167 994,-1206 C 961,-1261 915,-1315 876,-1359"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon613"
-       points="721.701,-1661.49 732,-1659 722.398,-1654.52 721.701,-1661.49 "
+       id="polygon780"
+       points="873.596,-1356.45 869,-1366 878.546,-1361.4 873.596,-1356.45 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge30"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge38"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title616">main.main._domain_constraints-&gt;main.main._domains</title>
+       id="title783">main.main._parameters-&gt;main.main._routines</title>
     <path
-       id="path618"
-       d="M 501,-1062 C 505,-1092 508,-1125 512,-1160"
+       id="path785"
+       d="M 1078,-1080 C 1077,-1123 1075,-1178 1073,-1232"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon620"
-       points="508.522,-1160.4 513,-1170 515.488,-1159.7 508.522,-1160.4 "
+       id="polygon787"
+       points="1069.5,-1232 1073,-1242 1076.5,-1232 1069.5,-1232 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node34"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node39"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title623">main.main._parameters</title>
+       id="title790">main.main._routine_columns</title>
     <polygon
-       id="polygon625"
-       points="1267,-1019 1267,-1039 1403,-1039 1403,-1019 1267,-1019 "
+       id="polygon792"
+       points="826,-1046 826,-1066 976,-1066 976,-1046 826,-1046 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text627"
+       id="text794"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1024.33"
-       x="1335">_parameters</text>
+       y="-1051.33"
+       x="901">_routine_columns</text>
     <polygon
-       id="polygon629"
-       points="1267,-1019 1267,-1039 1403,-1039 1403,-1019 1267,-1019 "
+       id="polygon796"
+       points="826,-1046 826,-1066 976,-1066 976,-1046 826,-1046 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text631"
+       id="text798"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1005.33"
-       x="1314">specific_catalog</text>
+       y="-1032.33"
+       x="873">specific_catalog</text>
     <text
-       id="text633"
+       id="text800"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-987.33301"
-       x="1314.5">specific_schema</text>
+       y="-1032.33"
+       x="964">key</text>
     <text
-       id="text635"
+       id="text802"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-969.33301"
-       x="1309">specific_name</text>
+       y="-1014.33"
+       x="873.5">specific_schema</text>
     <text
-       id="text637"
+       id="text804"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-951.33301"
-       x="1315">ordinal_position</text>
+       y="-1014.33"
+       x="964">key</text>
     <text
-       id="text639"
+       id="text806"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-933.33301"
-       x="1316">parameter_mode</text>
+       y="-996.33301"
+       x="868">specific_name</text>
     <text
-       id="text641"
+       id="text808"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-915.33301"
-       x="1315.5">parameter_name</text>
+       y="-996.33301"
+       x="964">key</text>
     <text
-       id="text643"
+       id="text810"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-897.33301"
-       x="1296">data_type</text>
+       y="-978.33301"
+       x="867.5">column_name</text>
+    <text
+       id="text812"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-978.33301"
+       x="964">key</text>
+    <text
+       id="text814"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-960.33301"
+       x="874">ordinal_position</text>
+    <text
+       id="text816"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-960.33301"
+       x="964">key</text>
+    <text
+       id="text818"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-942.33301"
+       x="855">data_type</text>
+    <text
+       id="text820"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-924.33301"
+       x="858">array_spec</text>
     <polygon
-       id="polygon645"
-       points="1266,-892 1266,-1040 1404,-1040 1404,-892 1266,-892 "
+       id="polygon822"
+       points="825,-919 825,-1067 977,-1067 977,-919 825,-919 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge34"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge44"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
+    <title
+       id="title825">main.main._routine_columns-&gt;main.main._element_types</title>
+    <path
+       id="path827"
+       d="M 882,-1071 C 864,-1145 836,-1258 815,-1340"
+       style="fill:none;stroke:#000000" />
+    <polygon
+       id="polygon829"
+       points="811.529,-1339.51 813,-1350 818.393,-1340.88 811.529,-1339.51 "
+       style="fill:#000000;stroke:#000000" />
+  </g>
+  <g
+     class="edge"
+     id="edge42"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title648">main.main._parameters-&gt;main.main._routines</title>
+       id="title832">main.main._routine_columns-&gt;main.main._routines</title>
     <path
-       id="path650"
-       d="M 1301,-1044 C 1284,-1082 1263,-1131 1242,-1178"
+       id="path834"
+       d="M 930,-1071 C 946,-1116 968,-1174 989,-1232"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon652"
-       points="1238.86,-1176.44 1238,-1187 1245.26,-1179.28 1238.86,-1176.44 "
+       id="polygon836"
+       points="985.774,-1233.43 992,-1242 992.479,-1231.42 985.774,-1233.43 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node36"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node42"
+     transform="matrix(1.33333,0,0,1.33333,-2092.1095,1984.6151)">
     <title
-       id="title655">main.main._routine_columns</title>
+       id="title839">main.main._all_types</title>
     <polygon
-       id="polygon657"
-       points="1081,-1010 1081,-1030 1231,-1030 1231,-1010 1081,-1010 "
-       style="fill:#808080;stroke:#808080" />
+       id="polygon841"
+       points="2118,-221 2118,-241 2218,-241 2218,-221 2118,-221 "
+       style="fill:#ffff00;stroke:#ffff00" />
     <text
-       id="text659"
+       id="text843"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1015.33"
-       x="1156">_routine_columns</text>
+       y="-226.33299"
+       x="2168">_all_types</text>
     <polygon
-       id="polygon661"
-       points="1081,-1010 1081,-1030 1231,-1030 1231,-1010 1081,-1010 "
+       id="polygon845"
+       points="2118,-221 2118,-241 2218,-241 2218,-221 2118,-221 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text663"
+       id="text847"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-996.33301"
-       x="1128">specific_catalog</text>
+       y="-207.33299"
+       x="2168">short_type_name</text>
     <text
-       id="text665"
+       id="text849"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-978.33301"
-       x="1128.5">specific_schema</text>
+       y="-189.33299"
+       x="2135.5">gtype</text>
     <text
-       id="text667"
+       id="text851"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-960.33301"
-       x="1123">specific_name</text>
+       y="-171.33299"
+       x="2164">full_type_name</text>
     <text
-       id="text669"
+       id="text853"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-942.33301"
-       x="1122.5">column_name</text>
+       y="-153.33299"
+       x="2148.5">comments</text>
     <text
-       id="text671"
+       id="text855"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-924.33301"
-       x="1129">ordinal_position</text>
+       y="-135.33299"
+       x="2141.5">internal</text>
     <text
-       id="text673"
+       id="text857"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-906.33301"
-       x="1110">data_type</text>
+       y="-117.333"
+       x="2148">synonyms</text>
+    <text
+       id="text859"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-99.333298"
+       x="2164.5">domain_catalog</text>
+    <text
+       id="text861"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-81.333298"
+       x="2165">domain_schema</text>
+    <text
+       id="text863"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-63.333302"
+       x="2159.5">domain_name</text>
+    <text
+       id="text865"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-45.333302"
+       x="2152.5">udt_catalog</text>
+    <text
+       id="text867"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-27.3333"
+       x="2153">udt_schema</text>
+    <text
+       id="text869"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-9.3333302"
+       x="2147.5">udt_name</text>
     <polygon
-       id="polygon675"
-       points="1080,-901 1080,-1031 1232,-1031 1232,-901 1080,-901 "
-       style="fill:none;stroke:#000000" />
-  </g>
-  <g
-     class="edge"
-     id="edge36"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
-    <title
-       id="title678">main.main._routine_columns-&gt;main.main._routines</title>
-    <path
-       id="path680"
-       d="M 1156,-1035 C 1156,-1070 1156,-1114 1156,-1160"
+       id="polygon871"
+       points="2117,-4 2117,-242 2219,-242 2219,-4 2117,-4 "
        style="fill:none;stroke:#000000" />
-    <polygon
-       id="polygon682"
-       points="1152.5,-1160 1156,-1170 1159.5,-1160 1152.5,-1160 "
-       style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node39"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node43"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title720">main.main._columns</title>
+       id="title874">main.main._columns</title>
     <polygon
-       id="polygon722"
-       points="635,-737 635,-757 827,-757 827,-737 635,-737 "
+       id="polygon876"
+       points="1120,-719 1120,-739 1312,-739 1312,-719 1120,-719 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text724"
+       id="text878"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-742.33301"
-       x="731">_columns</text>
+       y="-724.33301"
+       x="1216">_columns</text>
     <polygon
-       id="polygon726"
-       points="635,-737 635,-757 827,-757 827,-737 635,-737 "
+       id="polygon880"
+       points="1120,-719 1120,-739 1312,-739 1312,-719 1120,-719 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text728"
+       id="text882"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-723.33301"
-       x="674">table_catalog</text>
+       y="-705.33301"
+       x="1159">table_catalog</text>
     <text
-       id="text730"
+       id="text884"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-705.33301"
-       x="674.5">table_schema</text>
+       x="1300">key</text>
     <text
-       id="text732"
+       id="text886"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-687.33301"
-       x="669">table_name</text>
+       x="1159.5">table_schema</text>
+    <text
+       id="text888"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-687.33301"
+       x="1300">key</text>
+    <text
+       id="text890"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-669.33301"
+       x="1154">table_name</text>
     <text
-       id="text734"
+       id="text892"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-669.33301"
-       x="676.5">column_name</text>
+       x="1300">key</text>
+    <text
+       id="text894"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-651.33301"
+       x="1161.5">column_name</text>
     <text
-       id="text736"
+       id="text896"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-651.33301"
-       x="683">ordinal_position</text>
+       x="1300">key</text>
     <text
-       id="text738"
+       id="text898"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-633.33301"
-       x="681">column_default</text>
+       x="1168">ordinal_position</text>
     <text
-       id="text740"
+       id="text900"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-615.33301"
-       x="667.5">is_nullable</text>
+       x="1166">column_default</text>
     <text
-       id="text742"
+       id="text902"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-597.33301"
-       x="664">data_type</text>
+       x="1152.5">is_nullable</text>
     <text
-       id="text744"
+       id="text904"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-579.33301"
-       x="684">array_dimension</text>
+       x="1149">data_type</text>
     <text
-       id="text746"
+       id="text906"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-561.33301"
-       x="674.5">element_type</text>
+       x="1152">array_spec</text>
     <text
-       id="text748"
+       id="text908"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-543.33301"
-       x="652.5">gtype</text>
+       x="1137.5">gtype</text>
     <text
-       id="text750"
+       id="text910"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-525.33301"
-       x="715.5">character_maximum_length</text>
+       x="1200.5">character_maximum_length</text>
     <text
-       id="text752"
+       id="text912"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-507.33301"
-       x="700.5">character_octet_length</text>
+       x="1185.5">character_octet_length</text>
     <text
-       id="text754"
+       id="text914"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-489.33301"
-       x="689">numeric_precision</text>
+       x="1174">numeric_precision</text>
     <text
-       id="text756"
+       id="text916"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-471.33301"
-       x="677">numeric_scale</text>
+       x="1162">numeric_scale</text>
     <text
-       id="text758"
+       id="text918"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-453.33301"
-       x="690">datetime_precision</text>
+       x="1175">datetime_precision</text>
     <text
-       id="text760"
+       id="text920"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-435.33301"
-       x="697">character_set_catalog</text>
+       x="1182">character_set_catalog</text>
     <text
-       id="text762"
+       id="text922"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-417.33301"
-       x="697.5">character_set_schema</text>
+       x="1182.5">character_set_schema</text>
     <text
-       id="text764"
+       id="text924"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-399.33301"
-       x="692">character_set_name</text>
+       x="1177">character_set_name</text>
     <text
-       id="text766"
+       id="text926"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-381.33301"
-       x="685">collation_catalog</text>
+       x="1170">collation_catalog</text>
     <text
-       id="text768"
+       id="text928"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-363.33301"
-       x="685.5">collation_schema</text>
+       x="1170.5">collation_schema</text>
     <text
-       id="text770"
+       id="text930"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-345.33301"
-       x="680">collation_name</text>
+       x="1165">collation_name</text>
     <text
-       id="text772"
+       id="text932"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-327.33301"
-       x="651">extra</text>
+       x="1136">extra</text>
     <text
-       id="text774"
+       id="text934"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-309.33301"
-       x="672">is_updatable</text>
+       x="1157">is_updatable</text>
     <text
-       id="text776"
+       id="text936"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-291.33301"
-       x="690">column_comments</text>
+       x="1175">column_comments</text>
     <polygon
-       id="polygon778"
-       points="634,-286 634,-758 828,-758 828,-286 634,-286 "
+       id="polygon938"
+       points="1119,-286 1119,-740 1313,-740 1313,-286 1119,-286 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge38"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge52"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title781">main.main._columns-&gt;main.main._tables</title>
+       id="title941">main.main._columns-&gt;main.main._element_types</title>
     <path
-       id="path783"
-       d="M 836,-744 C 839,-750 842,-756 845,-762 C 852,-779 855,-782 863,-798 C 873,-818 883,-840 894,-861"
+       id="path943"
+       d="M 1111,-549 C 1013,-589 873,-663 808,-780 C 755,-873 768,-1176 780,-1340"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon785"
-       points="890.74,-862.283 898,-870 897.137,-859.44 890.74,-862.283 "
+       id="polygon945"
+       points="776.522,-1340.4 781,-1350 783.488,-1339.7 776.522,-1340.4 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge42"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge46"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title788">main.main._columns-&gt;main.main._collations</title>
+       id="title948">main.main._columns-&gt;main.main._tables</title>
     <path
-       id="path790"
-       d="M 639,-762 C 636,-774 633,-786 631,-798 C 606,-946 597,-989 631,-1134 C 636,-1152 642,-1154 649,-1170 C 669,-1212 691,-1258 710,-1296"
+       id="path950"
+       d="M 1321,-736 C 1324,-739 1327,-741 1330,-744 C 1365,-776 1396,-748 1431,-780 C 1461,-809 1481,-849 1494,-887"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon792"
-       points="706.74,-1297.28 714,-1305 713.137,-1294.44 706.74,-1297.28 "
+       id="polygon952"
+       points="1490.77,-888.427 1497,-897 1497.48,-886.416 1490.77,-888.427 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge40"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge50"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
+    <title
+       id="title955">main.main._columns-&gt;main.main._collations</title>
+    <path
+       id="path957"
+       d="M 1321,-734 C 1324,-738 1327,-741 1330,-744 C 1353,-769 1380,-751 1398,-780 C 1446,-862 1417,-1114 1398,-1206 C 1386,-1262 1360,-1322 1338,-1368"
+       style="fill:none;stroke:#000000" />
+    <polygon
+       id="polygon959"
+       points="1334.8,-1366.56 1333,-1377 1340.92,-1369.96 1334.8,-1366.56 "
+       style="fill:#000000;stroke:#000000" />
+  </g>
+  <g
+     class="edge"
+     id="edge48"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title795">main.main._columns-&gt;main.main._character_sets</title>
+       id="title962">main.main._columns-&gt;main.main._character_sets</title>
     <path
-       id="path797"
-       d="M 740,-762 C 741,-796 742,-830 743,-860"
+       id="path964"
+       d="M 1248,-744 C 1254,-794 1262,-845 1268,-887"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon799"
-       points="739.5,-860 743,-870 746.5,-860 739.5,-860 "
+       id="polygon966"
+       points="1264.52,-887.398 1269,-897 1271.49,-886.701 1264.52,-887.398 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node43"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node48"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title802">main.main._referential_constraints</title>
+       id="title969">main.main._referential_constraints</title>
     <polygon
-       id="polygon804"
-       points="1043,-212 1043,-232 1231,-232 1231,-212 1043,-212 "
+       id="polygon971"
+       points="1700,-212 1700,-232 1888,-232 1888,-212 1700,-212 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text806"
+       id="text973"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-217.33299"
-       x="1137">_referential_constraints</text>
+       x="1794">_referential_constraints</text>
     <polygon
-       id="polygon808"
-       points="1043,-212 1043,-232 1231,-232 1231,-212 1043,-212 "
+       id="polygon975"
+       points="1700,-212 1700,-232 1888,-232 1888,-212 1700,-212 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text810"
+       id="text977"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-198.33299"
-       x="1082">table_catalog</text>
+       x="1739">table_catalog</text>
     <text
-       id="text812"
+       id="text979"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-198.33299"
+       x="1876">key</text>
+    <text
+       id="text981"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-180.33299"
-       x="1082.5">table_schema</text>
+       x="1739.5">table_schema</text>
     <text
-       id="text814"
+       id="text983"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-180.33299"
+       x="1876">key</text>
+    <text
+       id="text985"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-162.33299"
-       x="1077">table_name</text>
+       x="1734">table_name</text>
     <text
-       id="text816"
+       id="text987"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-162.33299"
+       x="1876">key</text>
+    <text
+       id="text989"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-144.33299"
-       x="1091">constraint_name</text>
+       x="1748">constraint_name</text>
     <text
-       id="text818"
+       id="text991"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-144.33299"
+       x="1876">key</text>
+    <text
+       id="text993"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-126.333"
-       x="1093.5">ref_table_catalog</text>
+       x="1750.5">ref_table_catalog</text>
     <text
-       id="text820"
+       id="text995"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-108.333"
-       x="1094">ref_table_schema</text>
+       x="1751">ref_table_schema</text>
     <text
-       id="text822"
+       id="text997"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-90.333298"
-       x="1088.5">ref_table_name</text>
+       x="1745.5">ref_table_name</text>
     <text
-       id="text824"
+       id="text999"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-72.333298"
-       x="1102.5">ref_constraint_name</text>
+       x="1759.5">ref_constraint_name</text>
     <text
-       id="text826"
+       id="text1001"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-54.333302"
-       x="1083.5">match_option</text>
+       x="1740.5">match_option</text>
     <text
-       id="text828"
+       id="text1003"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-36.333302"
-       x="1078">update_rule</text>
+       x="1735">update_rule</text>
     <text
-       id="text830"
+       id="text1005"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-18.3333"
-       x="1076">delete_rule</text>
+       x="1733">delete_rule</text>
     <polygon
-       id="polygon832"
-       points="1042,-13 1042,-233 1232,-233 1232,-13 1042,-13 "
+       id="polygon1007"
+       points="1699,-13 1699,-233 1889,-233 1889,-13 1699,-13 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge44"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge54"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title835">main.main._referential_constraints-&gt;main.main._table_constraints</title>
+       id="title1010">main.main._referential_constraints-&gt;main.main._table_constraints</title>
     <path
-       id="path837"
-       d="M 1067,-237 C 1058,-252 1050,-267 1043,-282 C 1023,-322 1003,-368 987,-408"
+       id="path1012"
+       d="M 1709,-237 C 1700,-252 1690,-267 1682,-282 C 1662,-319 1642,-361 1627,-399"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon839"
-       points="983.863,-406.44 983,-417 990.26,-409.283 983.863,-406.44 "
+       id="polygon1014"
+       points="1623.86,-397.44 1623,-408 1630.26,-400.283 1623.86,-397.44 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node45"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node50"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title842">main.main._key_column_usage</title>
+       id="title1017">main.main._key_column_usage</title>
     <polygon
-       id="polygon844"
-       points="653,-167 653,-187 809,-187 809,-167 653,-167 "
+       id="polygon1019"
+       points="1310,-167 1310,-187 1466,-187 1466,-167 1310,-167 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text846"
+       id="text1021"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-172.33299"
-       x="731">_key_column_usage</text>
+       x="1388">_key_column_usage</text>
     <polygon
-       id="polygon848"
-       points="653,-167 653,-187 809,-187 809,-167 653,-167 "
+       id="polygon1023"
+       points="1310,-167 1310,-187 1466,-187 1466,-167 1310,-167 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text850"
+       id="text1025"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-153.33299"
-       x="692">table_catalog</text>
+       x="1349">table_catalog</text>
+    <text
+       id="text1027"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-153.33299"
+       x="1454">key</text>
+    <text
+       id="text1029"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-135.33299"
+       x="1349.5">table_schema</text>
     <text
-       id="text852"
+       id="text1031"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-135.33299"
-       x="692.5">table_schema</text>
+       x="1454">key</text>
+    <text
+       id="text1033"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-117.333"
+       x="1344">table_name</text>
     <text
-       id="text854"
+       id="text1035"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-117.333"
-       x="687">table_name</text>
+       x="1454">key</text>
+    <text
+       id="text1037"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-99.333298"
+       x="1358">constraint_name</text>
     <text
-       id="text856"
+       id="text1039"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-99.333298"
-       x="701">constraint_name</text>
+       x="1454">key</text>
     <text
-       id="text858"
+       id="text1041"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-81.333298"
-       x="694.5">column_name</text>
+       x="1351.5">column_name</text>
     <text
-       id="text860"
+       id="text1043"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-81.333298"
+       x="1454">key</text>
+    <text
+       id="text1045"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-63.333302"
+       x="1358">ordinal_position</text>
+    <text
+       id="text1047"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-63.333302"
-       x="701">ordinal_position</text>
+       x="1454">key</text>
     <polygon
-       id="polygon862"
-       points="652,-58 652,-188 810,-188 810,-58 652,-58 "
+       id="polygon1049"
+       points="1309,-58 1309,-188 1467,-188 1467,-58 1309,-58 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge46"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge56"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title865">main.main._key_column_usage-&gt;main.main._table_constraints</title>
+       id="title1052">main.main._key_column_usage-&gt;main.main._table_constraints</title>
     <path
-       id="path867"
-       d="M 786,-192 C 806,-219 828,-251 845,-282 C 866,-322 886,-367 902,-408"
+       id="path1054"
+       d="M 1432,-192 C 1449,-220 1468,-252 1484,-282 C 1502,-319 1521,-361 1537,-399"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon869"
-       points="898.74,-409.283 906,-417 905.137,-406.44 898.74,-409.283 "
+       id="polygon1056"
+       points="1533.74,-400.283 1541,-408 1540.14,-397.44 1533.74,-400.283 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge48"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge58"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title872">main.main._key_column_usage-&gt;main.main._columns</title>
+       id="title1059">main.main._key_column_usage-&gt;main.main._columns</title>
     <path
-       id="path874"
-       d="M 731,-192 C 731,-215 731,-243 731,-272"
+       id="path1061"
+       d="M 1357,-192 C 1347,-216 1335,-243 1322,-273"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon876"
-       points="727.5,-272 731,-282 734.5,-272 727.5,-272 "
+       id="polygon1063"
+       points="1318.86,-271.44 1318,-282 1325.26,-274.283 1318.86,-271.44 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node48"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node53"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title879">main.main._check_column_usage</title>
+       id="title1066">main.main._check_column_usage</title>
     <polygon
-       id="polygon881"
-       points="845,-158 845,-178 1007,-178 1007,-158 845,-158 "
+       id="polygon1068"
+       points="1502,-158 1502,-178 1664,-178 1664,-158 1502,-158 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text883"
+       id="text1070"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-163.33299"
-       x="926">_check_column_usage</text>
+       x="1583">_check_column_usage</text>
     <polygon
-       id="polygon885"
-       points="845,-158 845,-178 1007,-178 1007,-158 845,-158 "
+       id="polygon1072"
+       points="1502,-158 1502,-178 1664,-178 1664,-158 1502,-158 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text887"
+       id="text1074"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-144.33299"
+       x="1541">table_catalog</text>
+    <text
+       id="text1076"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-144.33299"
-       x="884">table_catalog</text>
+       x="1652">key</text>
+    <text
+       id="text1078"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-126.333"
+       x="1541.5">table_schema</text>
     <text
-       id="text889"
+       id="text1080"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-126.333"
-       x="884.5">table_schema</text>
+       x="1652">key</text>
+    <text
+       id="text1082"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-108.333"
+       x="1536">table_name</text>
     <text
-       id="text891"
+       id="text1084"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-108.333"
-       x="879">table_name</text>
+       x="1652">key</text>
     <text
-       id="text893"
+       id="text1086"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-90.333298"
-       x="893">constraint_name</text>
+       x="1550">constraint_name</text>
+    <text
+       id="text1088"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-90.333298"
+       x="1652">key</text>
+    <text
+       id="text1090"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-72.333298"
+       x="1543.5">column_name</text>
     <text
-       id="text895"
+       id="text1092"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-72.333298"
-       x="886.5">column_name</text>
+       x="1652">key</text>
     <polygon
-       id="polygon897"
-       points="844,-67 844,-179 1008,-179 1008,-67 844,-67 "
+       id="polygon1094"
+       points="1501,-67 1501,-179 1665,-179 1665,-67 1501,-67 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge50"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge60"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title900">main.main._check_column_usage-&gt;main.main._table_constraints</title>
+       id="title1097">main.main._check_column_usage-&gt;main.main._table_constraints</title>
     <path
-       id="path902"
-       d="M 929,-183 C 932,-242 936,-333 939,-407"
+       id="path1099"
+       d="M 1583,-183 C 1583,-240 1583,-327 1583,-398"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon904"
-       points="935.5,-407 939,-417 942.5,-407 935.5,-407 "
+       id="polygon1101"
+       points="1579.5,-398 1583,-408 1586.5,-398 1579.5,-398 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge52"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge62"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title907">main.main._check_column_usage-&gt;main.main._columns</title>
+       id="title1104">main.main._check_column_usage-&gt;main.main._columns</title>
     <path
-       id="path909"
-       d="M 895,-183 C 880,-213 861,-249 845,-282 C 844,-285 842,-288 841,-291"
+       id="path1106"
+       d="M 1547,-183 C 1530,-206 1509,-230 1484,-246 C 1424,-284 1385,-239 1330,-282 C 1330,-282 1329,-283 1329,-283"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon911"
-       points="837.797,-289.559 836,-300 843.916,-292.958 837.797,-289.559 "
+       id="polygon1108"
+       points="1326.22,-280.781 1321,-290 1330.83,-286.049 1326.22,-280.781 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
-     id="node51"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="node56"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title914">main.main._view_column_usage</title>
+       id="title1111">main.main._view_column_usage</title>
     <polygon
-       id="polygon916"
-       points="468,-176 468,-196 616,-196 616,-176 468,-176 "
+       id="polygon1113"
+       points="1126,-176 1126,-196 1274,-196 1274,-176 1126,-176 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text918"
+       id="text1115"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-181.33299"
-       x="542">_view_column_usage</text>
+       x="1200">_view_column_usage</text>
     <polygon
-       id="polygon920"
-       points="468,-176 468,-196 616,-196 616,-176 468,-176 "
+       id="polygon1117"
+       points="1126,-176 1126,-196 1274,-196 1274,-176 1126,-176 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text922"
+       id="text1119"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-162.33299"
-       x="507">view_catalog</text>
+       x="1165">view_catalog</text>
     <text
-       id="text924"
+       id="text1121"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-162.33299"
+       x="1262">key</text>
+    <text
+       id="text1123"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-144.33299"
-       x="507.5">view_schema</text>
+       x="1165.5">view_schema</text>
     <text
-       id="text926"
+       id="text1125"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-144.33299"
+       x="1262">key</text>
+    <text
+       id="text1127"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-126.333"
-       x="502">view_name</text>
+       x="1160">view_name</text>
     <text
-       id="text928"
+       id="text1129"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-126.333"
+       x="1262">key</text>
+    <text
+       id="text1131"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-108.333"
-       x="507">table_catalog</text>
+       x="1165">table_catalog</text>
     <text
-       id="text930"
+       id="text1133"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-108.333"
+       x="1262">key</text>
+    <text
+       id="text1135"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-90.333298"
-       x="507.5">table_schema</text>
+       x="1165.5">table_schema</text>
     <text
-       id="text932"
+       id="text1137"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-90.333298"
+       x="1262">key</text>
+    <text
+       id="text1139"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-72.333298"
-       x="502">table_name</text>
+       x="1160">table_name</text>
     <text
-       id="text934"
+       id="text1141"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-72.333298"
+       x="1262">key</text>
+    <text
+       id="text1143"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-54.333302"
+       x="1167.5">column_name</text>
+    <text
+       id="text1145"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-54.333302"
-       x="509.5">column_name</text>
+       x="1262">key</text>
     <polygon
-       id="polygon936"
-       points="467,-49 467,-197 617,-197 617,-49 467,-49 "
+       id="polygon1147"
+       points="1125,-49 1125,-197 1275,-197 1275,-49 1125,-49 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge54"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge64"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title939">main.main._view_column_usage-&gt;main.main._views</title>
+       id="title1150">main.main._view_column_usage-&gt;main.main._views</title>
     <path
-       id="path941"
-       d="M 542,-201 C 542,-272 542,-373 541,-443"
+       id="path1152"
+       d="M 1255,-201 C 1266,-216 1279,-232 1292,-246 C 1307,-264 1317,-263 1330,-282 C 1360,-329 1379,-388 1391,-434"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon943"
-       points="537.5,-443 541,-453 544.5,-443 537.5,-443 "
+       id="polygon1154"
+       points="1387.61,-434.881 1393,-444 1394.47,-433.508 1387.61,-434.881 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
-     id="edge56"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+     id="edge66"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2501.3271)">
     <title
-       id="title946">main.main._view_column_usage-&gt;main.main._columns</title>
+       id="title1157">main.main._view_column_usage-&gt;main.main._columns</title>
     <path
-       id="path948"
-       d="M 579,-201 C 592,-228 606,-259 622,-292"
+       id="path1159"
+       d="M 1203,-201 C 1204,-222 1205,-246 1206,-272"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon950"
-       points="618.74,-293.283 626,-301 625.137,-290.44 618.74,-293.283 "
+       id="polygon1161"
+       points="1202.5,-272 1206,-282 1209.5,-272 1202.5,-272 "
        style="fill:#000000;stroke:#000000" />
   </g>
+  <g
+     class="node"
+     id="node59"
+     transform="matrix(1.33333,0,0,1.33333,-2115.9054,1960.8192)">
+    <title
+       id="title1164">main.main._detailled_fk</title>
+    <polygon
+       id="polygon1166"
+       points="2254,-203 2254,-223 2370,-223 2370,-203 2254,-203 "
+       style="fill:#ffff00;stroke:#ffff00" />
+    <text
+       id="text1168"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-208.33299"
+       x="2312">_detailled_fk</text>
+    <polygon
+       id="polygon1170"
+       points="2254,-203 2254,-223 2370,-223 2370,-203 2254,-203 "
+       style="fill:none;stroke:#000000" />
+    <text
+       id="text1172"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-189.33299"
+       x="2302.5">fk_table_catalog</text>
+    <text
+       id="text1174"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-171.33299"
+       x="2303">fk_table_schema</text>
+    <text
+       id="text1176"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-153.33299"
+       x="2297.5">fk_table_name</text>
+    <text
+       id="text1178"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-135.33299"
+       x="2286.5">fk_column</text>
+    <text
+       id="text1180"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-117.333"
+       x="2304.5">ref_table_catalog</text>
+    <text
+       id="text1182"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-99.333298"
+       x="2305">ref_table_schema</text>
+    <text
+       id="text1184"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-81.333298"
+       x="2299.5">ref_table_name</text>
+    <text
+       id="text1186"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-63.333302"
+       x="2288.5">ref_column</text>
+    <text
+       id="text1188"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-45.333302"
+       x="2311.5">fk_constraint_name</text>
+    <text
+       id="text1190"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-27.3333"
+       x="2302">ordinal_position</text>
+    <polygon
+       id="polygon1192"
+       points="2253,-22 2253,-224 2371,-224 2371,-22 2253,-22 "
+       style="fill:none;stroke:#000000" />
+  </g>
 </svg>

Modified: trunk/doc/C/libgda-4.0-docs.sgml
==============================================================================
--- trunk/doc/C/libgda-4.0-docs.sgml	(original)
+++ trunk/doc/C/libgda-4.0-docs.sgml	Wed Apr  9 20:49:07 2008
@@ -103,6 +103,7 @@
 <!ENTITY libgda-GdaDataComparator SYSTEM "xml/gda-data-comparator.xml">
 <!ENTITY provider-writing SYSTEM "prov-writing.xml">
 <!ENTITY provider-support SYSTEM "xml/provider-support.xml">
+<!ENTITY i-s-doc SYSTEM "i_s_doc.xml">
 <!ENTITY fdl-appendix SYSTEM "fdl-appendix.sgml">
 <!ENTITY howto SYSTEM "howto.xml">
 <!ENTITY libgda-TreeIndex SYSTEM "xml/tree_index.sgml">
@@ -407,7 +408,7 @@
     &limitations;
   </part>  
   <part id="part_libgda_api">
-    <title>Client API Reference</title>
+    <title>Client API reference</title>
     <para>
       The following sections describe the API available for &GDA; applications.
     </para>
@@ -651,11 +652,8 @@
 	an easy to use in-memory representation	of some database objects.
       </para>
 
-      &libgda-GdaMetaStore;
-      &libgda-GdaMetaStruct;
-
-      <sect2 id="GdaMetaStoreSetup">
-	<title>GdaConnection and GdaMetaStore setups</title>
+      <sect1 id="GdaMetaStoreSetup">
+	<title>Setup</title>
 	<para>
 	  Each <link linkend="GdaMetaStore">GdaMetaStore</link> object internally uses a (private)
 	  <link linkend="GdaConnection">GdaConnection</link> connection object. The following figure illustrates
@@ -737,12 +735,12 @@
 g_object_unref (store);
 	  </programlisting>
 	</para>
-      </sect2>
+      </sect1>
 
-      <sect2 id="GdaMetaStoreCustomData">
-	<title>How to store custom data in a GdaMetaStore</title>
+      <sect1 id="GdaMetaStoreCustomData">
+	<title>Adding custom data</title>
 	<para>
-	  This section explains how to add application specific data to a #GdaMetaStore object.
+	  This section explains how to add application specific data (custom data) to a #GdaMetaStore object.
 	</para>
 	<para>
 	  Applications of course don't need to use that feature to manage their own data but it makes sense to use
@@ -774,7 +772,102 @@
 	</sect3>
 	<para>
 	</para>
-      </sect2>
+      </sect1>
+
+      <sect1 id="information_schema">
+	<title>Database structure</title>
+	<para>
+	  &LIBGDA; imposes its own structure (based on objects such as tables and views which name starts with an 
+	  underscore '_') for the meta data database associated to a <link linkend="GdaMetaStore">GdaMetaStore</link> object,
+	  but a user can also add its own tables or other database objects. The following diagram shows the tables 
+	  defined by &LIBGDA; for its internal needs:
+	  <mediaobject>
+	    <imageobject role="html">
+	      <imagedata fileref="information_schema.png" format="PNG"/>
+	    </imageobject>
+	    <textobject>
+	      <phrase>Dictioanry's tables and views initially defined by &LIBGDA;</phrase>
+	    </textobject>
+	  </mediaobject>
+	</para>
+
+	<sect2>
+	  <title>Data types</title>
+	  <para>
+	    Data types (as reported for example for table's columns) can be one of the following kinds:
+	    <itemizedlist>
+	      <listitem><para>Builtin data types offered by the database engine such as integers, varchar, etc. Those data 
+		  types are all listed in the 
+		  <link linkend="is:_builtin_data_types">"_builtin_data_types"</link> table.</para></listitem>
+	      <listitem><para>Database domains: domains are data types with optional constraints 
+		  (restrictions on the allowed set of values). A domain refers to the base data type from which it is defined
+		  (that base data type can also be an array). Those data types are all listed in the
+		  <link linkend="is:_domains">"_domains"</link> table.</para></listitem>
+	      <listitem><para>User defined data types (which are not part of the SQL standard but featured by some databases
+		  such as PostgreSQL) are simple or composed data types based on existing data types 
+		  (which may also be arrays). Those data types are all listed in the
+		  <link linkend="is:_udt">"_udt"</link> table.</para></listitem>
+	      <listitem><para>Arrays of any of the previous data types (one or more dimensions). Arrays are not per-se data
+		  types, but rather refer to an existing data type. Arrays are described in the 
+		  <link linkend="is:_element_types">"_element_types"</link> table.</para></listitem>
+	    </itemizedlist>
+	    Note that the data types which are built in, domains or user defined are all also listed in the
+	    <link linkend="is:_all_types">"_all_types"</link> view as a convenience.
+	  </para>
+	  <para>
+	    The impact of that data types' hierarchy is that everytime a data type is referenced (from a table's column
+	    definition for example), there will be two attributes for the data type: one named 
+	    <parameter>data_type</parameter> which, if not NULL, refers to a data type listed in the
+	    <link linkend="is:_all_types">"_all_types"</link> view (thus a built in, domain or user defined data type), and
+	    one named <parameter>array_spec</parameter> which, if not NULL, refers to an array, listed in the
+	    <link linkend="is:_element_types">"_element_types"</link> table. Any of these attributes can be NULL, but they
+	    should never be both NULL at the same time.
+	  </para>
+	  <para>
+	    Single dimension arrays will have the <parameter>data_type</parameter> attribute referencing a data type in the
+	    <link linkend="is:_all_types">"_all_types"</link> view (and the <parameter>array_spec</parameter> attribute
+	    set to NULL), whereas multi dimension arrays will have the <parameter>data_type</parameter> attribute set to NULL
+	    and the <parameter>array_spec</parameter> attribute referencing another tow in the 
+	    <link linkend="is:_element_types">"_element_types"</link> table.
+	  </para>
+	  <para>
+	    The following diagram illustrates the data types representation and how ther are refered from table's columns,
+	    domains, and other database objects which refer to a data type:
+	    <mediaobject>
+	      <imageobject role="html">
+		<imagedata fileref="i_s_data_types.png" format="PNG"/>
+	      </imageobject>
+	      <textobject>
+		<phrase>Dictioanry's tables and views initially defined by &LIBGDA;</phrase>
+	      </textobject>
+	    </mediaobject>
+	  </para>
+	</sect2>
+
+	<sect2>
+	  <title>Short and full names</title>
+	  <para>
+	    Database objects will have two associated names, the <emphasis>short name</emphasis> and the
+	    <emphasis>long name</emphasis>, the difference being the same as machine in a local network being called
+	    either by its machine name such as "moon" or by its fully qualified domain name such as "moon.my.network", but
+	    applied to databases and schemas. The full name corresponding to the 
+	    &lt;database&gt;.&lt;schema&gt;.&lt;object_name&gt; or &lt;schema&gt;.&lt;object_name&gt;, and the
+	    short name corresponding to the &lt;object_name&gt;.
+	  </para>
+	  <para>
+	    Short name and full name differ when the schema being accessed is not the schema containing the named
+	    database object, in which case the full name must be used. Some database specific features may also alter
+	    the differences between the short name and the sull name such as the "search_path" variable for PostgreSQL
+	    (which is to a unix PATH variable but for schemas).
+	  </para>
+	</sect2>
+
+	<!-- tables and views documentation -->
+	&i-s-doc;
+      </sect1>
+
+      &libgda-GdaMetaStore;
+      &libgda-GdaMetaStruct;
     </chapter>
 
     <chapter>
@@ -1056,6 +1149,24 @@
     </chapter>
   </part>
 
+  <part id="part_libgda-xslt">
+    <title>XSLT extension</title>
+    <chapter id="libgda-xslt-introduction">
+      <title>Introduction</title>
+      <para>
+	&LIBGDA; features an XSLT extension...
+      </para>
+    </chapter>
+    <chapter id="libgda-xslt-api">
+      <title>API reference</title>
+      <para>TODO</para>
+    </chapter>
+    <chapter>
+      <title>Example</title>
+      <para>TODO</para>
+    </chapter>
+  </part>
+
   <part id="part_providers">
     <title>Databases providers for developers</title>
       <para>

Modified: trunk/doc/C/libgda-4.0-sections.txt
==============================================================================
--- trunk/doc/C/libgda-4.0-sections.txt	(original)
+++ trunk/doc/C/libgda-4.0-sections.txt	Wed Apr  9 20:49:07 2008
@@ -906,7 +906,7 @@
 
 <SECTION>
 <FILE>gda-convenient</FILE>
-<TITLE>Convenient functions</TITLE>
+<TITLE>Convenience functions</TITLE>
 gda_prepare_create_database
 gda_perform_create_database
 gda_prepare_drop_database
@@ -1425,8 +1425,6 @@
 gda_connection_internal_savepoint_rolledback
 gda_connection_internal_savepoint_removed
 gda_connection_internal_change_transaction_state
-<SUBSECTION>
-gda_connection_get_meta_store
 </SECTION>
 
 <SECTION>

Modified: trunk/doc/C/prov-writing.xml
==============================================================================
--- trunk/doc/C/prov-writing.xml	(original)
+++ trunk/doc/C/prov-writing.xml	Wed Apr  9 20:49:07 2008
@@ -299,7 +299,8 @@
       with an underscore '_'. The method starting with an underscore must update the whole contents of the meta data
       table, and the other one must accept some more parameters to refine what gets updated. There are exception 
       to this rule (such as the
-      "tables_views()" method which must update both the "_tables" and "_views" tables, or the for the
+      "tables_views()" method which must update both the <link linkend="is:_tables">"_tables"</link> and 
+      <link linkend="is:_views">"_views"</link> tables, or the for the
       tables which have no foreign key (no dependency) to any other table).
     </para>
     <para> 
@@ -314,7 +315,8 @@
       </programlisting>
       which means that the <parameter>table_catalog</parameter> and <parameter>table_schema</parameter>
       arguments can't be NULL, whereas the <parameter>table_name</parameter> can be NULL (and in this case the 
-      "tables_views()" method must update the "_tables" and "_views" tables regarding all the tables which
+      "tables_views()" method must update the <link linkend="is:_tables">"_tables"</link> and 
+      <link linkend="is:_views">"_views"</link> tables regarding all the tables which
       are in the specified catalog and schema.
     </para>
     <para>
@@ -328,7 +330,9 @@
 gboolean (*_info) (GdaServerProvider *, GdaConnection *, GdaMetaStore *, 
                    GdaMetaContext *, GError **);
 	</programlisting>
-	This method must update the contents of the "_information_schema_catalog_name" table, which must contain exactly
+	This method must update the contents of the 
+	<link linkend="is:_information_schema_catalog_name">"_information_schema_catalog_name"</link>
+	table, which must contain exactly
 	one row describing the catalog name for the connection.
       </para>
     </sect2>
@@ -340,7 +344,8 @@
 gboolean (*_btypes) (GdaServerProvider *, GdaConnection *, GdaMetaStore *, 
                      GdaMetaContext *, GError **);
 	</programlisting>
-	This method must update the contents of the "_builtin_data_types" table which lists all the
+	This method must update the contents of the <link linkend="is:_builtin_data_types">"_builtin_data_types"</link>
+	table which lists all the
 	database's built in data types. There is no specific parameter.
       </para>
     </sect2>
@@ -355,7 +360,8 @@
                        GdaMetaContext *, GError **,
                        const GValue *catalog_name, const GValue *schema_name_n);
 	</programlisting>
-        This method must update the contents of the "_schemata" table, which lists all the schemas (namespaces). 
+        This method must update the contents of the <link linkend="is:_schemata">"_schemata"</link> table, 
+	which lists all the schemas (namespaces). 
       </para>
     </sect2>
     <sect2>
@@ -369,7 +375,8 @@
                            const GValue *table_catalog, const GValue *table_schema, 
                            const GValue *table_name_n);
 	</programlisting>
-	This method must update the contents of the "_tables" and "_views" tables which list all the
+	This method must update the contents of the <link linkend="is:_tables">"_tables"</link> and 
+	<link linkend="is:_views">"_views"</link> tables which list all the
 	tables and views.
       </para>
     </sect2>
@@ -385,7 +392,7 @@
                       const GValue *table_catalog, const GValue *table_schema, 
                       const GValue *table_name);
 	</programlisting>
-	This method must update the contents of the "_columns" table which lists all the
+	This method must update the contents of the <link linkend="is:_columns">"_columns"</link> table which lists all the
 	columns of all the tables and views.
       </para>
     </sect2>
@@ -401,7 +408,8 @@
                               const GValue *table_catalog, const GValue *table_schema, 
                               const GValue *table_name, const GValue *constraint_name_n);
 	</programlisting>
-	This method must update the contents of the "_table_constraints" table which lists all the
+	This method must update the contents of the <link linkend="is:_table_constraints">"_table_constraints"</link>
+	table which lists all the
 	constraints (primary key, foreing key, unique or check cnstraints) for each table.
       </para>
     </sect2>
@@ -417,8 +425,10 @@
                               const GValue *table_catalog, const GValue *table_schema, 
                               const GValue *table_name, const GValue *constraint_name);
 	</programlisting>
-	This method must update the contents of the "_referential_constraints" table which lists all the
-	refetential constraints (which are also listed in the "_table_constraints" table).
+	This method must update the contents of the 
+	<link linkend="is:_referential_constraints">"_referential_constraints"</link> table which lists all the
+	refetential constraints (which are also listed in the 
+	<link linkend="is:_table_constraints">"_table_constraints"</link> table).
       </para>
     </sect2>
 
@@ -433,8 +443,10 @@
                           const GValue *table_catalog, const GValue *table_schema,
                           const GValue *table_name, const GValue *constraint_name);
 	</programlisting>
-	This method must update the contents of the "_key_column_usage" table which lists all the
-	columns involved in each table constraint (as listed in the "_table_constraints" table.
+	This method must update the contents of the <link linkend="is:_key_column_usage">"_key_column_usage"</link>
+	table which lists all the
+	columns involved in each table constraint (as listed in the 
+	<link linkend="is:_table_constraints">"_table_constraints"</link> table).
       </para>
     </sect2>
   </sect1>

Modified: trunk/doc/C/tmpl/gda-convenient.sgml
==============================================================================
--- trunk/doc/C/tmpl/gda-convenient.sgml	(original)
+++ trunk/doc/C/tmpl/gda-convenient.sgml	Wed Apr  9 20:49:07 2008
@@ -1,5 +1,5 @@
 <!-- ##### SECTION Title ##### -->
-Convenient functions
+Convenience functions
 
 <!-- ##### SECTION Short_Description ##### -->
 Do quickly some actions

Modified: trunk/doc/C/tmpl/gda-meta-store.sgml
==============================================================================
--- trunk/doc/C/tmpl/gda-meta-store.sgml	(original)
+++ trunk/doc/C/tmpl/gda-meta-store.sgml	Wed Apr  9 20:49:07 2008
@@ -13,23 +13,11 @@
   before any data could be read out of it.
 </para>
 <para>
-  The new dictionary now relies on a database structure to store its data. The actual database can be a
+  The new dictionary now relies on a database structure to store its data (see the 
+  <link linkend="information_schema">database schema</link> section for a detailled description). The actual database can be a
   single file (using an SQLite database), an entirely in memory database (also using an SQLite database), or
   a more conventional backend such as a PostgreSQL database for a shared dictionary on a server.
 </para>
-<para>
-  &LIBGDA; imposes its own structure (based on objects such as tables and views which name starts with an underscore '_'),
-  but a user can also add its own tables or other database objects. The following diagram shows the tables 
-  defined by &LIBGDA; for its internal needs:
-  <mediaobject>
-    <imageobject role="html">
-      <imagedata fileref="information_schema.png" format="PNG"/>
-    </imageobject>
-    <textobject>
-      <phrase>Dictioanry's tables and views initially defined by &LIBGDA;</phrase>
-    </textobject>
-  </mediaobject>
-</para>
 
 <!-- ##### SECTION See_Also ##### -->
 <para>

Modified: trunk/doc/C/tmpl/gda-server-provider.sgml
==============================================================================
--- trunk/doc/C/tmpl/gda-server-provider.sgml	(original)
+++ trunk/doc/C/tmpl/gda-server-provider.sgml	Wed Apr  9 20:49:07 2008
@@ -105,6 +105,7 @@
 @_constraints_dom: 
 @constraints_dom: 
 @_el_types: 
+ el_types: 
 @_collations: 
 @collations: 
 @_character_sets: 

Modified: trunk/doc/C/tmpl/provider-support.sgml
==============================================================================
--- trunk/doc/C/tmpl/provider-support.sgml	(original)
+++ trunk/doc/C/tmpl/provider-support.sgml	Wed Apr  9 20:49:07 2008
@@ -240,12 +240,3 @@
 @newstate: 
 
 
-<!-- ##### FUNCTION gda_connection_get_meta_store ##### -->
-<para>
-
-</para>
-
- cnc: 
- Returns: 
-
-

Modified: trunk/libgda/gda-connection.c
==============================================================================
--- trunk/libgda/gda-connection.c	(original)
+++ trunk/libgda/gda-connection.c	Wed Apr  9 20:49:07 2008
@@ -53,7 +53,7 @@
 	gboolean              is_open;
 
 	GdaMetaStore         *meta_store;
-	GList                *events_list;
+	GList                *events_list; /* last event is stored as the first node */
 
 	GdaTransactionStatus *trans_status;
 	GHashTable           *prepared_stmts;
@@ -631,13 +631,13 @@
 								   NULL, NULL, NULL))
 		cnc->priv->is_open = TRUE;
 	else {
-		const GList *events;
+		GList *events;
 		
 		events = gda_connection_get_events (cnc);
 		if (events) {
 			GList *l;
 
-			for (l = (GList *) events; l != NULL; l = l->next) {
+			for (l = events; l; l = l->next) {
 				GdaConnectionEvent *event;
 
 				event = GDA_CONNECTION_EVENT (l->data);
@@ -647,6 +647,7 @@
 							     gda_connection_event_get_description (event));
 				}
 			}
+			g_list_free (events);
 		}
 
 		cnc->priv->is_open = FALSE;
@@ -898,7 +899,10 @@
 	g_return_val_if_fail (GDA_IS_CONNECTION (cnc), NULL);
 	g_return_val_if_fail (cnc->priv, NULL);
 
-	return (const gchar *) cnc->priv->auth_string;
+	if (cnc->priv->auth_string)
+		return (const gchar *) cnc->priv->auth_string;
+	else
+		return "";
 }
 
 /**
@@ -947,7 +951,7 @@
 		}
 	}
 
-	cnc->priv->events_list = g_list_append (cnc->priv->events_list, event);
+	cnc->priv->events_list = g_list_prepend (cnc->priv->events_list, event);
 
 	if (debug > 0) {
 		const gchar *str = NULL;
@@ -1043,13 +1047,12 @@
 	g_return_if_fail (cnc->priv);
 	g_return_if_fail (events_list != NULL);
 
-	cnc->priv->events_list = g_list_concat (cnc->priv->events_list, events_list);
-
-	/* notify errors */
-	for (l = events_list; l ; l = g_list_next (l))
+	for (l = events_list; l ; l = l->next) {
+		cnc->priv->events_list = g_list_prepend (cnc->priv->events_list, l->data);
 		if (gda_connection_event_get_event_type (GDA_CONNECTION_EVENT (l->data)) ==
 		    GDA_CONNECTION_EVENT_ERROR)
 			g_signal_emit (G_OBJECT (cnc), gda_connection_signals[ERROR], 0, l->data);
+	}
 
 	g_list_free (events_list);
 }
@@ -1264,7 +1267,9 @@
  * @last_insert_row: a place to store a new #GdaSet object which contains the values of the last inserted row, or %NULL
  * @error: a place to store errors, or %NULL
  *
- * Executes @stmt. As @stmt can, by desing (and if not abused), contain only one SQL statement, the
+ * Executes @stmt. 
+ *
+ * As @stmt can, by desing (and if not abused), contain only one SQL statement, the
  * return object will either be:
  * <itemizedlist>
  *   <listitem><para>a #GdaDataModel if @stmt is a SELECT statement (a GDA_SQL_STATEMENT_SELECT, see #GdaSqlStatementType)
@@ -1318,7 +1323,8 @@
  * @last_insert_row: a place to store a new #GdaSet object which contains the values of the last inserted row, or %NULL
  * @error: a place to store an error, or %NULL
  *
- * Executes a non-selection statement on the given connection.
+ * Executes a non-selection statement on the given connection. The gda_execute_non_select_command() method can be easier
+ * to use if one prefers to use some SQL directly.
  *
  * This function returns the number of rows affected by the execution of @stmt, or -1
  * if an error occurred, or -2 if the connection's provider does not return the number of rows affected.
@@ -1388,7 +1394,8 @@
  * @params: a #GdaSet object (which can be obtained using gda_statement_get_parameters()), or %NULL
  * @error: a place to store an error, or %NULL
  *
- * Executes a selection command on the given connection.
+ * Executes a selection command on the given connection. The gda_execute_select_command() method can be easier
+ * to use if one prefers to use some SQL directly.
  *
  * This function returns a #GdaDataModel resulting from the SELECT statement, or %NULL
  * if an error occurred.
@@ -2129,15 +2136,21 @@
 		}
 		else {
 			/* _element_types, params: 
-			 *  - none
+			 *  -0- @specific_name
 			 */
+			i = check_parameters (context, error, 1,
+					      &name, G_TYPE_STRING, NULL,
+					      "specific_name", &name, NULL);
+			if (i < 0)
+				return FALSE;
+
 			ASSERT_TABLE_NAME (tname, "element_types");
-			if (!PROV_CLASS (provider)->meta_funcs._el_types) {
-				WARN_METHOD_NOT_IMPLEMENTED (provider, "_el_types");
+			if (!PROV_CLASS (provider)->meta_funcs.el_types) {
+				WARN_METHOD_NOT_IMPLEMENTED (provider, "el_types");
 				break;
 			}
-			retval = PROV_CLASS (provider)->meta_funcs._el_types (provider, cnc, store, context, error);
-			WARN_META_UPDATE_FAILURE (retval, "_el_types");
+			retval = PROV_CLASS (provider)->meta_funcs.el_types (provider, cnc, store, context, error, name);
+			WARN_META_UPDATE_FAILURE (retval, "el_types");
 			return retval;
 		}
 		break;
@@ -2426,7 +2439,7 @@
 			return retval;
 		}
 		else if ((tname[1] == 'd') && (tname[2] == 't') && (tname[3] == '_')) {
-			/* _udt, params: 
+			/* _udt_columns, params: 
 			 *  -0- @udt_catalog, @udt_schema, @udt_name
 			 */
 			i = check_parameters (context, error, 1,
@@ -3012,19 +3025,21 @@
  * gda_connection_get_events
  * @cnc: a #GdaConnection.
  *
- * Retrieves a list of the last errors occurred during the connection.
- * You can make a copy of the list using #gda_connection_event_list_copy.
- * 
- * Returns: a GList of #GdaConnectionEvent.
+ * Retrieves a list of the last errors occurred during the connection. The returned list is
+ * chronologically ordered such as that the most recent event is the #GdaConnectionEvent of the last node. 
  *
+ * The caller is responsible for freeing the returned list (but not the contents of each node) using
+ * g_list_free().
+ * 
+ * Returns: a new GList of #GdaConnectionEvent.
  */
-const GList *
+GList *
 gda_connection_get_events (GdaConnection *cnc)
 {
 	g_return_val_if_fail (GDA_IS_CONNECTION (cnc), NULL);
 	g_return_val_if_fail (cnc->priv, FALSE);
 
-	return cnc->priv->events_list;
+	return g_list_reverse (cnc->priv->events_list);
 }
 
 /**

Modified: trunk/libgda/gda-connection.h
==============================================================================
--- trunk/libgda/gda-connection.h	(original)
+++ trunk/libgda/gda-connection.h	Wed Apr  9 20:49:07 2008
@@ -158,7 +158,7 @@
 GdaConnectionEvent  *gda_connection_add_event_string     (GdaConnection *cnc, const gchar *str, ...);
 void                 gda_connection_add_events_list      (GdaConnection *cnc, GList *events_list);
 void                 gda_connection_clear_events_list    (GdaConnection *cnc);
-const GList         *gda_connection_get_events           (GdaConnection *cnc);
+GList               *gda_connection_get_events           (GdaConnection *cnc);
 
 GdaSqlParser        *gda_connection_create_parser        (GdaConnection *cnc);
 GObject             *gda_connection_batch_execute        (GdaConnection *cnc,

Modified: trunk/libgda/gda-meta-struct.c
==============================================================================
--- trunk/libgda/gda-meta-struct.c	(original)
+++ trunk/libgda/gda-meta-struct.c	Wed Apr  9 20:49:07 2008
@@ -278,6 +278,7 @@
 						       GdaMetaDbObjectType *out_type, GValue **out_short_name, 
 						       GValue **out_full_name, GValue **out_owner, const GValue *catalog, 
 						       const GValue *schema, const GValue *name);
+static gchar *array_type_to_sql (GdaMetaStore *store, const GValue *specific_name);
 
 /**
  * gda_meta_struct_complement
@@ -446,7 +447,7 @@
 	}
 	case GDA_META_DB_TABLE: {
 		/* columns */
-		gchar *sql = "SELECT c.column_name, c.data_type, c.gtype, c.is_nullable, t.table_short_name, t.table_full_name, c.column_default, t.table_owner FROM _columns as c NATURAL JOIN _tables as t WHERE table_catalog = ##tc::string AND table_schema = ##ts::string AND table_name = ##tname::string ORDER BY ordinal_position";
+		gchar *sql = "SELECT c.column_name, c.data_type, c.gtype, c.is_nullable, t.table_short_name, t.table_full_name, c.column_default, t.table_owner, c.array_spec FROM _columns as c NATURAL JOIN _tables as t WHERE table_catalog = ##tc::string AND table_schema = ##ts::string AND table_name = ##tname::string ORDER BY ordinal_position";
 		GdaMetaTable *mt;
 		GdaDataModel *model;
 		gint i, nrows;
@@ -475,12 +476,20 @@
 		for (i = 0; i < nrows; i++) {
 			GdaMetaTableColumn *tcol;
 			const GValue *val;
+			const gchar *cstr = NULL;
 			tcol = g_new0 (GdaMetaTableColumn, 1);
 			tcol->column_name = g_strdup (g_value_get_string (gda_data_model_get_value_at (model, 0, i)));
-			tcol->column_type = g_strdup (g_value_get_string (gda_data_model_get_value_at (model, 1, i)));
+			val = gda_data_model_get_value_at (model, 1, i);
+			if (val && !gda_value_is_null (val))
+				cstr = g_value_get_string (val);
+			if (cstr && *cstr)
+				tcol->column_type = g_strdup (cstr);
+			else 
+				tcol->column_type = array_type_to_sql (store, 
+								       gda_data_model_get_value_at (model, 8, i));
 			tcol->gtype = gda_g_type_from_string (g_value_get_string (gda_data_model_get_value_at (model, 2, i)));
 			tcol->nullok = g_value_get_boolean (gda_data_model_get_value_at (model, 3, i));
-			val = gda_data_model_get_value_at (model, 1, 6);
+			val = gda_data_model_get_value_at (model, 6, i);
 			if (val && !gda_value_is_null (val))
 				tcol->default_value = g_strdup (g_value_get_string (val));
 
@@ -651,6 +660,42 @@
 	return NULL;
 }
 
+static gchar *
+array_type_to_sql (GdaMetaStore *store, const GValue *specific_name)
+{
+	gchar *str;
+	GdaDataModel *model;
+	gint nrows;
+	const GValue *cvalue;
+
+	if (!specific_name || gda_value_is_null (specific_name)) 
+		return g_strdup ("[]");
+
+	model = gda_meta_store_extract (store, 	"SELECT data_type, array_spec FROM _element_types WHERE specific_name = ##name::string",
+					NULL, "name", specific_name, NULL);
+	if (!model) 
+		return g_strdup ("[]");
+	nrows = gda_data_model_get_n_rows (model);
+	if (nrows != 1) {
+		g_object_unref (model);
+		return g_strdup ("[]");
+	}
+	
+	cvalue = gda_data_model_get_value_at (model, 0, 0);
+	if (!cvalue || gda_value_is_null (cvalue) || !g_value_get_string (cvalue)) {
+		/* use array_spec */
+		gchar *str2;
+		cvalue = gda_data_model_get_value_at (model, 1, 0);
+		str2 = array_type_to_sql (store, cvalue);
+		str = g_strdup_printf ("%s[]", str2);
+		g_free (str2);
+	}
+	else
+		str = g_strdup_printf ("%s[]", g_value_get_string (gda_data_model_get_value_at (model, 0, 0)));
+	g_object_unref (model);
+	return str;
+}
+
 /*
  * Makes a list of all the GdaMetaDbObject structures listed in @objects
  * which are not present in @ordered_list and for which no dependency is in @ordered_list

Modified: trunk/libgda/gda-server-provider.h
==============================================================================
--- trunk/libgda/gda-server-provider.h	(original)
+++ trunk/libgda/gda-server-provider.h	Wed Apr  9 20:49:07 2008
@@ -96,6 +96,8 @@
 
 	/* _element_types */
 	gboolean (*_el_types)        (GdaServerProvider *, GdaConnection *, GdaMetaStore *, GdaMetaContext *, GError **);
+	gboolean (*el_types)         (GdaServerProvider *, GdaConnection *, GdaMetaStore *, GdaMetaContext *, GError **,
+				      const GValue *specific_name);
 
 	/* _collations */
 	gboolean (*_collations)       (GdaServerProvider *, GdaConnection *, GdaMetaStore *, GdaMetaContext *, GError **);

Modified: trunk/libgda/gda-value.c
==============================================================================
--- trunk/libgda/gda-value.c	(original)
+++ trunk/libgda/gda-value.c	Wed Apr  9 20:49:07 2008
@@ -1,5 +1,5 @@
 /* GDA common library
- * Copyright (C) 1998 - 2007 The GNOME Foundation.
+ * Copyright (C) 1998 - 2008 The GNOME Foundation.
  *
  * AUTHORS:
  *	Michael Lausch <michael lausch at>
@@ -310,6 +310,7 @@
 	g_return_if_fail (binary);
 		
 	g_free (binary->data);
+	g_free (binary);
 }
 
 /* 
@@ -509,16 +510,17 @@
 	
 	g_return_val_if_fail( val, NULL);
 		
-	copy = g_new0(GdaGeometricPoint, 1);
+	copy = g_new0 (GdaGeometricPoint, 1);
 	copy->x = val->x;
 	copy->y = val->y;
 
 	return copy;
 }
 
-void gda_geometricpoint_free (gpointer boxed)
+void
+gda_geometricpoint_free (gpointer boxed)
 {
-	
+	g_free (boxed);
 }
 
 
@@ -602,10 +604,11 @@
 	return list;
 }
 
-void gda_value_list_free (gpointer boxed)
+void
+gda_value_list_free (gpointer boxed)
 {
 	GList *l = (GList*) boxed;
-	g_list_free(l);
+	g_list_free (l);
 }
 
 
@@ -735,7 +738,6 @@
 	g_return_if_fail (numeric);
 
 	g_free (numeric->number);
-
 	g_free (numeric);
 }
 
@@ -890,9 +892,9 @@
 	GdaTime *src = (GdaTime*) boxed;
 	GdaTime *copy = NULL;
 	
-	g_return_val_if_fail(src, NULL);
+	g_return_val_if_fail (src, NULL);
 	
-	copy = g_new0(GdaTime, 1);
+	copy = g_new0 (GdaTime, 1);
 	copy->hour = src->hour;
 	copy->minute = src->minute;
 	copy->second = src->second;
@@ -902,9 +904,10 @@
 	return copy;
 }
 
-void gda_time_free (gpointer boxed)
+void
+gda_time_free (gpointer boxed)
 {
-	
+	g_free (boxed);
 }
 
 
@@ -1003,7 +1006,7 @@
 	
 	g_return_val_if_fail(src, NULL);
 	
-	copy = g_new0(GdaTimestamp, 1);
+	copy = g_new0 (GdaTimestamp, 1);
 	copy->year = src->year;
 	copy->month = src->month;
 	copy->day = src->day;
@@ -1016,9 +1019,10 @@
 	return copy;
 }
 
-void gda_timestamp_free (gpointer boxed)
+void
+gda_timestamp_free (gpointer boxed)
 {
-	
+	g_free (boxed);
 }
 
 

Modified: trunk/libgda/information_schema.xml
==============================================================================
--- trunk/libgda/information_schema.xml	(original)
+++ trunk/libgda/information_schema.xml	Wed Apr  9 20:49:07 2008
@@ -28,46 +28,46 @@
   </specifics>
 
   <!-- schema description -->
-  <table name="_attributes" descr="(key,value) pairs, keys starting with '_' are reserved">
+  <table name="_attributes" descr="Table to store (key,value) pairs (keys starting with '_' are reserved)">
     <column name="att_name" pkey="TRUE"/>
     <column name="att_value"/>
   </table>
 
-  <table name="_information_schema_catalog_name" descr="One row: the name of the current database (current catalog)">
+  <table name="_information_schema_catalog_name" descr="Name of the current database (current catalog), has only one row">
     <column name="catalog_name" pkey="TRUE"/>
   </table>
 
   <table name="_schemata" descr="List of schemas">
-    <column name="catalog_name" pkey="TRUE"/>
+    <column name="catalog_name" pkey="TRUE" descr="Name of the catalog that contains the schema"/>
     <column name="schema_name" pkey="TRUE"/>
-    <column name="schema_owner" nullok="TRUE"/>
-    <column name="schema_internal" type="boolean"/>
+    <column name="schema_owner" nullok="TRUE" descr="Name of the schema"/>
+    <column name="schema_internal" type="boolean"  descr="Tells if the schema is specific to the database implementation (and usually can't be modified)"/>
     <fkey ref_table="_information_schema_catalog_name">
       <part column="catalog_name" ref_column="catalog_name"/>
     </fkey>
   </table>
 
   <table name="_builtin_data_types" descr="List of built-in data types such as varchar, int, ...">
-    <column name="short_type_name"/>
-    <column name="full_type_name" pkey="TRUE"/>
+    <column name="short_type_name" descr="Short name of the data type"/>
+    <column name="full_type_name" pkey="TRUE" descr="Full name of the data type"/>
     <column name="gtype" nullok="TRUE"/>
     <column name="comments" nullok="TRUE"/>
     <column name="synonyms" nullok="TRUE"/>
-    <column name="internal" type="boolean"/>
+    <column name="internal" type="boolean" descr="Tells if the data type is reserved for the database implementation and should not be used in applications"/>
     <unique>
       <column name="short_type_name"/>
     </unique>
   </table>
 
   <table name="_udt" descr="User defined data types">
-    <column name="udt_catalog" pkey="TRUE"/>
-    <column name="udt_schema" pkey="TRUE"/>
-    <column name="udt_name" pkey="TRUE"/>
-    <column name="udt_gtype" nullok="TRUE"/>
+    <column name="udt_catalog" pkey="TRUE" descr="Name of the catalog that contains the data type"/>
+    <column name="udt_schema" pkey="TRUE" descr="Name of the schema that contains the data type"/>
+    <column name="udt_name" pkey="TRUE" descr="Name of the data type"/>
+    <column name="udt_gtype" nullok="TRUE" descr="GType associated to the data type"/>
     <column name="udt_comments" nullok="TRUE"/>
     <column name="udt_short_name"/>
     <column name="udt_full_name"/>
-    <column name="udt_internal" type="boolean"/>
+    <column name="udt_internal" type="boolean" descr="Tells if the data type is reserved for the database implementation and should not be used in applications"/>
     <column name="udt_owner" nullok="TRUE"/>
     <fkey ref_table="_schemata">
       <part column="udt_catalog" ref_column="catalog_name"/>
@@ -78,13 +78,14 @@
     </unique>
   </table>
 
-  <table name="_udt_columns" descr="List of components for a user defined data type">
-    <column name="udt_catalog" pkey="TRUE"/>
-    <column name="udt_schema" pkey="TRUE"/>
-    <column name="udt_name" pkey="TRUE"/>
-    <column name="udt_column" pkey="TRUE"/>
+  <table name="_udt_columns" descr="List of components for a user defined data type for composed data types (such as a complex number data type which has real and imaginary parts)">
+    <column name="udt_catalog" pkey="TRUE" descr="Name of the catalog that contains the user defined data type for which the column is"/>
+    <column name="udt_schema" pkey="TRUE" descr="Name of the schema that contains the user defined data type for which the column is"/>
+    <column name="udt_name" pkey="TRUE" descr="Name of the user defined data type for which the column is"/>
+    <column name="udt_column" pkey="TRUE" descr="Name of the column (part)"/>
     <column name="ordinal_position" type="gint" descr="Column position, starts at 1"/>
-    <column name="data_type" descr="References _all_types.full_type_name or _element_types.specific_name"/>
+    <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)"/>
+    <column name="array_spec" nullok="TRUE" descr="Array description if the column is an array"/>
     <column name="character_maximum_length" type="gint" nullok="TRUE"/>
     <column name="character_octet_length" type="gint" nullok="TRUE"/>
     <column name="numeric_precision" type="gint" nullok="TRUE"/>
@@ -101,12 +102,20 @@
       <part column="udt_schema"/>
       <part column="udt_name"/>
     </fkey>
+    <fkey ref_table="_element_types">
+      <part column="array_spec" ref_column="specific_name"/>
+    </fkey>
+    <!--
+    <fkey ref_table="_all_types">
+      <part column="data_type" ref_column="full_type_name"/>
+    </fkey>
+    -->
   </table>
 
   <table name="_enums" descr="List of possible enumeration labels for enumerations">
-    <column name="udt_catalog" pkey="TRUE"/>
-    <column name="udt_schema" pkey="TRUE"/>
-    <column name="udt_name" pkey="TRUE"/>
+    <column name="udt_catalog" pkey="TRUE" descr="Name of the catalog that contains the ENUM user defined data type"/>
+    <column name="udt_schema" pkey="TRUE" descr="Name of the schema that contains the ENUM user defined data type"/>
+    <column name="udt_name" pkey="TRUE" descr="Name of the ENUM user defined data type"/>
     <column name="label" pkey="TRUE"/>
     <column name="ordinal_position" type="gint" descr="Position, starts at 1"/>
     <fkey ref_table="_udt">
@@ -116,32 +125,33 @@
     </fkey>
   </table>
 
-  <table name="_element_types" descr="">
-    <column name="specific_name" pkey="TRUE"/>
-    <column name="object_catalog"/>
-    <column name="object_schema"/>
-    <column name="object_name"/>
-    <column name="object_ordinal_position" type="gint" nullok="TRUE"/>
-    <column name="object_type"/>
-    <column name="data_type"/>
-    <column name="min_cardinality" type="gint"/>
-    <column name="max_cardinality" type="gint"/>
+  <table name="_element_types" descr="Array specific attributes for array data types">
+    <column name="specific_name" pkey="TRUE" descr="No specific meaning, used as a primary key, and for joining"/>
+    <column name="object_catalog" descr="Name of the catalog that contains the object that uses the array being described"/>
+    <column name="object_schema" descr="Name of the schema that contains the object that uses the array being described"/>
+    <column name="object_name" descr="Name of the object that uses the array being described"/>
+    <column name="object_type" descr="The type of the object that uses the array being described TABLE_COL, DOMAIN, UDT_COL, ROUTINE_COL or ROUTINE_PAR"/>
+    <column name="data_type" nullok="TRUE" descr="Base data type of the array (if the base data type is an array, then 'array_spec' is set, and this may be NULL)"/>
+    <column name="array_spec" nullok="TRUE" descr="Array description if the base data type is an array"/>
+    <column name="min_cardinality" type="gint" nullok="TRUE"/>
+    <column name="max_cardinality" type="gint" nullok="TRUE"/>
   </table>
 
   <table name="_domains" descr="List of domains">
-    <column name="domain_catalog" pkey="TRUE"/>
-    <column name="domain_schema" pkey="TRUE"/>
-    <column name="domain_name" pkey="TRUE"/>
-    <column name="data_type" nullok="TRUE"/>
-    <column name="gtype"/>
+    <column name="domain_catalog" pkey="TRUE" descr="Name of catalog that contains the domain"/>
+    <column name="domain_schema" pkey="TRUE" descr="Name of schema that contains the domain"/>
+    <column name="domain_name" pkey="TRUE" descr="Name of the domain"/>
+    <column name="data_type" nullok="TRUE" descr="Data type of the domain (if the domain is an array, then 'array_spec' is set, and this may be NULL)"/>
+    <column name="array_spec" nullok="TRUE" descr="Array description if the domain is an array"/>
+    <column name="domain_gtype"/>
     <column name="character_maximum_length" type="gint" nullok="TRUE"/>
     <column name="character_octet_length" type="gint" nullok="TRUE"/>
-    <column name="collation_catalog" nullok="TRUE"/>
-    <column name="collation_schema" nullok="TRUE"/>
-    <column name="collation_name" nullok="TRUE"/>
-    <column name="character_set_catalog" nullok="TRUE"/>
-    <column name="character_set_schema" nullok="TRUE"/>
-    <column name="character_set_name" nullok="TRUE"/>
+    <column name="collation_catalog" nullok="TRUE" descr="Name of catalog that contains the associated collation"/>
+    <column name="collation_schema" nullok="TRUE" descr="Name of schema that contains the associated collation"/>
+    <column name="collation_name" nullok="TRUE" descr="Name of the associated collation"/>
+    <column name="character_set_catalog" nullok="TRUE" descr="Name of catalog that contains the associated character set"/>
+    <column name="character_set_schema" nullok="TRUE" descr="Name of schema that contains the associated character set"/>
+    <column name="character_set_name" nullok="TRUE" descr="Name of the associated character set"/>
     <column name="numeric_precision" type="gint" nullok="TRUE"/>
     <column name="numeric_scale" type="gint" nullok="TRUE"/>
     <column name="domain_default" nullok="TRUE"/>
@@ -154,17 +164,25 @@
       <part column="domain_catalog" ref_column="catalog_name"/>
       <part column="domain_schema" ref_column="schema_name"/>
     </fkey>
+    <fkey ref_table="_element_types">
+      <part column="array_spec" ref_column="specific_name"/>
+    </fkey>
+    <!--
+    <fkey ref_table="_all_types">
+      <part column="data_type" ref_column="full_type_name"/>
+    </fkey>
+    -->
     <unique>
       <column name="domain_full_name"/>
     </unique>
   </table>
 
-  <table name="_tables">
-    <column name="table_catalog" pkey="TRUE"/>
-    <column name="table_schema" pkey="TRUE"/>
-    <column name="table_name" pkey="TRUE"/>
-    <column name="table_type"/>
-    <column name="is_insertable_into" type="boolean" nullok="TRUE"/>
+  <table name="_tables" descr="List of tables (tables, views or other objects which can contain data)">
+    <column name="table_catalog" pkey="TRUE" descr="Name of catalog that contains the table"/>
+    <column name="table_schema" pkey="TRUE" descr="Name of schema that contains the table"/>
+    <column name="table_name" pkey="TRUE" descr="Name of the table"/>
+    <column name="table_type" descr="Type of table: BASE TABLE, VIEW, LOCAL TEMPORARY, SYSTEM TABLE, GLOBAL TEMPORARY, ALIAS or SYNONYM"/>
+    <column name="is_insertable_into" type="boolean" nullok="TRUE" descr="Tells if the table's contents can be modified"/>
     <column name="table_comments" nullok="TRUE"/>
     <column name="table_short_name"/>
     <column name="table_full_name"/>
@@ -178,13 +196,13 @@
     </unique>
   </table>
 
-  <table name="_views">
-    <column name="table_catalog" pkey="TRUE"/>
-    <column name="table_schema" pkey="TRUE"/>
-    <column name="table_name" pkey="TRUE"/>
-    <column name="view_definition" nullok="TRUE"/>
+  <table name="_views" descr="List of views and their specific information">
+    <column name="table_catalog" pkey="TRUE" descr="Name of catalog that contains the view"/>
+    <column name="table_schema" pkey="TRUE" descr="Name of schema that contains the view"/>
+    <column name="table_name" pkey="TRUE" descr="Name of the view"/>
+    <column name="view_definition" nullok="TRUE" descr="View as SQL"/>
     <column name="check_option" nullok="TRUE" descr="CASCADE if the statement used to create the view included the WITH CHECK OPTION; otherwise, NONE"/>
-    <column name="is_updatable" type="boolean" nullok="TRUE"/>
+    <column name="is_updatable" type="boolean" nullok="TRUE" descr="Tells if the view's contents can be modified"/>
     <fkey ref_table="_tables">
       <part column="table_catalog"/>
       <part column="table_schema"/>
@@ -192,7 +210,7 @@
     </fkey>
   </table>
 
-  <table name="_collations">
+  <table name="_collations" descr="List of collations methods">
     <column name="collation_catalog" pkey="TRUE"/>
     <column name="collation_schema" pkey="TRUE"/>
     <column name="collation_name" pkey="TRUE"/>
@@ -208,7 +226,7 @@
     </unique>
   </table>
 
-  <table name="_character_sets">
+  <table name="_character_sets" descr="List of character sets">
     <column name="character_set_catalog" pkey="TRUE"/>
     <column name="character_set_schema" pkey="TRUE"/>
     <column name="character_set_name" pkey="TRUE"/>
@@ -232,7 +250,7 @@
     </unique>
   </table>
 
-  <table name="_routines">
+  <table name="_routines" descr="List of functions and stored procedures">
     <column name="specific_catalog" pkey="TRUE"/>
     <column name="specific_schema" pkey="TRUE"/>
     <column name="specific_name" pkey="TRUE"/>
@@ -263,7 +281,7 @@
     </unique>
   </table>
 
-  <table name="_triggers">
+  <table name="_triggers" descr="List of triggers">
     <column name="trigger_catalog" pkey="TRUE"/>
     <column name="trigger_schema" pkey="TRUE"/>
     <column name="trigger_name" pkey="TRUE"/>
@@ -292,7 +310,7 @@
     </unique>
   </table>
 
-  <table name="_columns">
+  <table name="_columns" descr="List of columns composing tables">
     <column name="table_catalog" pkey="TRUE"/>
     <column name="table_schema" pkey="TRUE"/>
     <column name="table_name" pkey="TRUE"/>
@@ -300,9 +318,8 @@
     <column name="ordinal_position" type="gint" descr="Column position, starts at 1"/>
     <column name="column_default" nullok="TRUE"/>
     <column name="is_nullable" type="boolean"/>
-    <column name="data_type" descr="References _all_types.full_type_name"/>
-    <column name="array_dimension" type="gint"/>
-    <column name="element_type" nullok="TRUE" descr="References _element_types.specific_name, for arrays of @data_type base type"/>
+    <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)"/>
+    <column name="array_spec" nullok="TRUE" descr="Array description if the column is an array"/>
     <column name="gtype"/>
     <column name="character_maximum_length" type="gint" nullok="TRUE"/>
     <column name="character_octet_length" type="gint" nullok="TRUE"/>
@@ -333,9 +350,17 @@
       <part column="collation_schema"/>
       <part column="collation_name"/>
     </fkey>
+    <fkey ref_table="_element_types">
+      <part column="array_spec" ref_column="specific_name"/>
+    </fkey>
+    <!--
+    <fkey ref_table="_all_types">
+      <part column="data_type" ref_column="full_type_name"/>
+    </fkey>
+    -->
   </table>
 
-  <table name="_table_constraints">
+  <table name="_table_constraints" descr="List of constraints applied to tables (Check, primary or foreign key, or unique constraints)">
     <column name="constraint_catalog" nullok="TRUE" descr="Name of the catalog that contains the constraint"/>
     <column name="constraint_schema" nullok="TRUE" descr="Name of the schema that contains the constraint"/>
 
@@ -354,7 +379,7 @@
     </fkey>
   </table>
 
-  <table name="_referential_constraints">
+  <table name="_referential_constraints" descr="List of foreign key constraints, along with some specific attributes">
     <column name="table_catalog" pkey="TRUE"/>
     <column name="table_schema" pkey="TRUE"/>
     <column name="table_name" pkey="TRUE"/>
@@ -382,7 +407,7 @@
     </fkey>
   </table>
 
-  <table name="_key_column_usage">
+  <table name="_key_column_usage" descr="List of primary key constraints and the name of the tables' columns involved">
     <column name="table_catalog" pkey="TRUE"/>
     <column name="table_schema" pkey="TRUE"/>
     <column name="table_name" pkey="TRUE"/>
@@ -404,7 +429,7 @@
     </fkey>
   </table>
 
-  <table name="_check_column_usage">
+  <table name="_check_column_usage" descr="List of check constraints and the name of the tables' columns involved">
     <column name="table_catalog" pkey="TRUE"/>
     <column name="table_schema" pkey="TRUE"/>
     <column name="table_name" pkey="TRUE"/>
@@ -424,7 +449,7 @@
     </fkey>
   </table>
 
-  <table name="_view_column_usage">
+  <table name="_view_column_usage" descr="List of the tables' columns involved in a view">
     <column name="view_catalog" pkey="TRUE"/>
     <column name="view_schema" pkey="TRUE"/>
     <column name="view_name" pkey="TRUE"/>
@@ -445,7 +470,7 @@
     </fkey>
   </table>
 
-  <table name="_domain_constraints">
+  <table name="_domain_constraints" descr="List of constraints applicable to domains">
     <column name="constraint_catalog" nullok="TRUE" descr="Name of the catalog that contains the constraint"/>
     <column name="constraint_schema" nullok="TRUE" descr="Name of the schema that contains the constraint"/>
 
@@ -468,36 +493,54 @@
     </fkey>
   </table>
 
-  <table name="_parameters">
+  <table name="_parameters" descr="List of routines' (functions and stored procedures) parameters">
     <column name="specific_catalog" pkey="TRUE"/>
     <column name="specific_schema" pkey="TRUE"/>
     <column name="specific_name" pkey="TRUE"/>
     <column name="ordinal_position" type="gint" pkey="TRUE"/>
     <column name="parameter_mode"/>
     <column name="parameter_name" nullok="TRUE"/>
-    <column name="data_type"/>
+    <column name="data_type" nullok="TRUE" descr="Data type of the parameter (if the parameter is an array, then 'array_spec' is set, and this may be NULL)"/>
+    <column name="array_spec" nullok="TRUE" descr="Array description if the parameter is an array"/>
     <fkey ref_table="_routines">
       <part column="specific_catalog"/>
       <part column="specific_schema"/>
       <part column="specific_name"/>
     </fkey>
+    <fkey ref_table="_element_types">
+      <part column="array_spec" ref_column="specific_name"/>
+    </fkey>
+    <!--
+    <fkey ref_table="_all_types">
+      <part column="data_type" ref_column="full_type_name"/>
+    </fkey>
+    -->
   </table>
 
-  <table name="_routine_columns">
+  <table name="_routine_columns" descr="List of routines' (functions and stored procedures) returned values' parts (columns) for routines returning composed values">
     <column name="specific_catalog" pkey="TRUE"/>
     <column name="specific_schema" pkey="TRUE"/>
     <column name="specific_name" pkey="TRUE"/>
     <column name="column_name" pkey="TRUE"/>
     <column name="ordinal_position" type="gint" nullok="TRUE" pkey="TRUE"/>
-    <column name="data_type"/>
+    <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)"/>
+    <column name="array_spec" nullok="TRUE" descr="Array description if the column is an array"/>
     <fkey ref_table="_routines">
       <part column="specific_catalog"/>
       <part column="specific_schema"/>
       <part column="specific_name"/>
     </fkey>
+    <fkey ref_table="_element_types">
+      <part column="array_spec" ref_column="specific_name"/>
+    </fkey>
+    <!--
+    <fkey ref_table="_all_types">
+      <part column="data_type" ref_column="full_type_name"/>
+    </fkey>
+    -->
   </table>
   
-  <view name="_all_types">
+  <view name="_all_types" descr="List of all the data types">
     <definition>SELECT short_type_name AS short_type_name, gtype, full_type_name AS full_type_name, comments, internal AS internal, synonyms,
        NULL AS domain_catalog, NULL AS domain_schema, NULL AS domain_name,
        NULL AS udt_catalog, NULL AS udt_schema, NULL AS udt_name
@@ -510,7 +553,7 @@
        domain_catalog, domain_schema, domain_name , NULL, NULL, NULL FROM _domains</definition>
   </view>
 
-  <view name="_detailled_fk">
+  <view name="_detailled_fk" descr="For each foreign key constraint, lists all the tables' columns involved and the constraint name">
     <definition>SELECT rc.table_catalog as fk_table_catalog, rc.table_schema as fk_table_schema, rc.table_name as fk_table_name, kc1.column_name as fk_column,
       rc.ref_table_catalog as ref_table_catalog, rc.ref_table_schema as ref_table_schema, rc.ref_table_name as ref_table_name, kc2.column_name as ref_column,
       rc.constraint_name as fk_constraint_name, kc1.ordinal_position as ordinal_position

Modified: trunk/libgda/sqlite/gda-sqlite-meta.c
==============================================================================
--- trunk/libgda/sqlite/gda-sqlite-meta.c	(original)
+++ trunk/libgda/sqlite/gda-sqlite-meta.c	Wed Apr  9 20:49:07 2008
@@ -300,6 +300,15 @@
 }
 
 gboolean
+_gda_sqlite_meta_el_types (GdaServerProvider *prov, GdaConnection *cnc, 
+			   GdaMetaStore *store, GdaMetaContext *context, GError **error,
+			   const GValue *specific_name)
+{
+	/* feature not supported by SQLite */
+	return TRUE;
+}
+
+gboolean
 _gda_sqlite_meta__collations (GdaServerProvider *prov, GdaConnection *cnc, 
 			      GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {
@@ -646,7 +655,7 @@
 			g_value_set_string ((v6 = gda_value_new (G_TYPE_STRING)), "string");
 		else
 			g_value_set_string ((v6 = gda_value_new (G_TYPE_STRING)), g_type_name (gtype));
-		if (! append_a_row (mod_model, error, 25, 
+		if (! append_a_row (mod_model, error, 24, 
 				    FALSE, catalog_value, /* table_catalog */
 				    FALSE, p_table_schema, /* table_schema */
 				    FALSE, p_table_name, /* table_name */
@@ -655,8 +664,7 @@
 				    FALSE, gda_data_model_get_value_at (tmpmodel, 4, i), /* column default */
 				    TRUE, v3, /* is_nullable */
 				    TRUE, v2, /* data_type */
-				    FALSE, zero_value, /* array_dimension */
-				    FALSE, NULL, /* element_type */
+				    FALSE, NULL, /* array_spec */
 				    TRUE, v6, /* gtype */
 				    FALSE, NULL, /* character_maximum_length */
 				    FALSE, NULL, /* character_octet_length */

Modified: trunk/libgda/sqlite/gda-sqlite-meta.h
==============================================================================
--- trunk/libgda/sqlite/gda-sqlite-meta.h	(original)
+++ trunk/libgda/sqlite/gda-sqlite-meta.h	Wed Apr  9 20:49:07 2008
@@ -75,6 +75,9 @@
 /* _element_types */
 gboolean _gda_sqlite_meta__el_types        (GdaServerProvider *prov, GdaConnection *cnc, 
 					    GdaMetaStore *store, GdaMetaContext *context, GError **error);
+gboolean _gda_sqlite_meta_el_types         (GdaServerProvider *prov, GdaConnection *cnc, 
+					    GdaMetaStore *store, GdaMetaContext *context, GError **error,
+					    const GValue *specific_name);
 
 /* _collations */
 gboolean _gda_sqlite_meta__collations      (GdaServerProvider *prov, GdaConnection *cnc, 

Modified: trunk/libgda/sqlite/gda-sqlite-provider.c
==============================================================================
--- trunk/libgda/sqlite/gda-sqlite-provider.c	(original)
+++ trunk/libgda/sqlite/gda-sqlite-provider.c	Wed Apr  9 20:49:07 2008
@@ -240,6 +240,7 @@
 	provider_class->meta_funcs._constraints_dom = _gda_sqlite_meta__constraints_dom;
 	provider_class->meta_funcs.constraints_dom = _gda_sqlite_meta_constraints_dom;
 	provider_class->meta_funcs._el_types = _gda_sqlite_meta__el_types;
+	provider_class->meta_funcs.el_types = _gda_sqlite_meta_el_types;
 	provider_class->meta_funcs._collations = _gda_sqlite_meta__collations;
 	provider_class->meta_funcs.collations = _gda_sqlite_meta_collations;
 	provider_class->meta_funcs._character_sets = _gda_sqlite_meta__character_sets;

Modified: trunk/providers/mysql/gda-mysql-meta.c
==============================================================================
--- trunk/providers/mysql/gda-mysql-meta.c	(original)
+++ trunk/providers/mysql/gda-mysql-meta.c	Wed Apr  9 20:49:07 2008
@@ -243,6 +243,15 @@
 }
 
 gboolean
+_gda_mysql_meta_el_types (GdaServerProvider *prov, GdaConnection *cnc, 
+			  GdaMetaStore *store, GdaMetaContext *context, GError **error,
+			  const GValue *specific_name)
+{
+	TO_IMPLEMENT;
+	return TRUE;
+}
+
+gboolean
 _gda_mysql_meta__collations (GdaServerProvider *prov, GdaConnection *cnc, 
 			    GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {

Modified: trunk/providers/mysql/gda-mysql-meta.h
==============================================================================
--- trunk/providers/mysql/gda-mysql-meta.h	(original)
+++ trunk/providers/mysql/gda-mysql-meta.h	Wed Apr  9 20:49:07 2008
@@ -75,6 +75,9 @@
 /* _element_types */
 gboolean _gda_mysql_meta__el_types        (GdaServerProvider *prov, GdaConnection *cnc, 
 					  GdaMetaStore *store, GdaMetaContext *context, GError **error);
+gboolean _gda_mysql_meta_el_types         (GdaServerProvider *prov, GdaConnection *cnc, 
+					   GdaMetaStore *store, GdaMetaContext *context, GError **error,
+					   const GValue *specific_name);
 
 /* _collations */
 gboolean _gda_mysql_meta__collations      (GdaServerProvider *prov, GdaConnection *cnc, 

Modified: trunk/providers/mysql/gda-mysql-provider.c
==============================================================================
--- trunk/providers/mysql/gda-mysql-provider.c	(original)
+++ trunk/providers/mysql/gda-mysql-provider.c	Wed Apr  9 20:49:07 2008
@@ -238,6 +238,7 @@
         provider_class->meta_funcs._constraints_dom = _gda_mysql_meta__constraints_dom;
         provider_class->meta_funcs.constraints_dom = _gda_mysql_meta_constraints_dom;
         provider_class->meta_funcs._el_types = _gda_mysql_meta__el_types;
+        provider_class->meta_funcs.el_types = _gda_mysql_meta_el_types;
         provider_class->meta_funcs._collations = _gda_mysql_meta__collations;
         provider_class->meta_funcs.collations = _gda_mysql_meta_collations;
         provider_class->meta_funcs._character_sets = _gda_mysql_meta__character_sets;

Modified: trunk/providers/postgres/gda-postgres-meta.c
==============================================================================
--- trunk/providers/postgres/gda-postgres-meta.c	(original)
+++ trunk/providers/postgres/gda-postgres-meta.c	Wed Apr  9 20:49:07 2008
@@ -69,6 +69,10 @@
 	I_STMT_VIEWS_COLUMNS_ALL,
 	I_STMT_TRIGGERS,
 	I_STMT_TRIGGERS_ALL,
+	I_STMT_EL_TYPES_COL,
+	I_STMT_EL_TYPES_DOM,
+	I_STMT_EL_TYPES_UDT,
+	I_STMT_EL_TYPES_ALL
 } InternalStatementItem;
 
 
@@ -80,7 +84,7 @@
 	"SELECT pg_catalog.current_database()",
 
 	/* I_STMT_BTYPES */
-	"SELECT t.typname, 'pg_catalog.' || t.typname, 'gchararray', pg_catalog.obj_description(t.oid), NULL, CASE WHEN t.typname ~ '^_' THEN TRUE WHEN typtype = 'p' THEN TRUE WHEN t.typname in ('any', 'anyarray', 'anyelement', 'cid', 'cstring', 'int2vector', 'internal', 'language_handler', 'oidvector', 'opaque', 'record', 'refcursor', 'regclass', 'regoper', 'regoperator', 'regproc', 'regprocedure', 'regtype', 'SET', 'smgr', 'tid', 'trigger', 'unknown', 'void', 'xid', 'oid', 'aclitem') THEN TRUE ELSE FALSE END, CAST (t.oid AS int8) FROM pg_catalog.pg_type t, pg_catalog.pg_user u, pg_catalog.pg_namespace n WHERE t.typowner=u.usesysid AND n.oid = t.typnamespace AND pg_catalog.pg_type_is_visible(t.oid) AND (typtype='b' OR typtype='p')",
+	"SELECT t.typname, 'pg_catalog.' || t.typname, 'gchararray', pg_catalog.obj_description(t.oid), NULL, CASE WHEN t.typname ~ '^_' THEN TRUE WHEN typtype = 'p' THEN TRUE WHEN t.typname in ('any', 'anyarray', 'anyelement', 'cid', 'cstring', 'int2vector', 'internal', 'language_handler', 'oidvector', 'opaque', 'record', 'refcursor', 'regclass', 'regoper', 'regoperator', 'regproc', 'regprocedure', 'regtype', 'SET', 'smgr', 'tid', 'trigger', 'unknown', 'void', 'xid', 'oid', 'aclitem') THEN TRUE ELSE FALSE END, CAST (t.oid AS int8) FROM pg_catalog.pg_type t, pg_catalog.pg_user u, pg_catalog.pg_namespace n WHERE t.typowner=u.usesysid AND n.oid = t.typnamespace AND pg_catalog.pg_type_is_visible(t.oid) AND (typtype='b' OR typtype='p') AND typelem = 0",
 
 	/* I_STMT_SCHEMAS */
 	"SELECT catalog_name, schema_name, schema_owner, CASE WHEN schema_name ~'^pg_' THEN TRUE WHEN schema_name ='information_schema' THEN TRUE ELSE FALSE END FROM information_schema.schemata WHERE catalog_name = ##cat::string",
@@ -110,10 +114,10 @@
 	"SELECT current_database()::information_schema.sql_identifier AS table_catalog, nc.nspname::information_schema.sql_identifier AS table_schema, c.relname::information_schema.sql_identifier AS table_name, pg_catalog.pg_get_viewdef(c.oid, TRUE), NULL, CASE WHEN c.relkind = 'r'::\"char\" THEN TRUE ELSE FALSE END FROM pg_namespace nc, pg_class c WHERE current_database()::information_schema.sql_identifier = ##cat::string AND nc.nspname::information_schema.sql_identifier = ##schema::string AND c.relnamespace = nc.oid AND c.relkind = 'v' AND NOT pg_is_other_temp_schema(nc.oid) AND (pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'SELECT'::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 c.relname::information_schema.sql_identifier = ##name::string",
 
 	/* I_STMT_COLUMNS_OF_TABLE */
-	"SELECT current_database(), nc.nspname, c.relname, a.attname, a.attnum, pg_get_expr(ad.adbin, ad.adrelid), CASE WHEN a.attnotnull OR t.typtype = 'd' AND t.typnotnull THEN FALSE ELSE TRUE END, coalesce (nt.nspname || '.', '') || t.typname, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 1 ELSE 0 END, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'ARRAY' || 'COL' || current_database() || '.' || nc.nspname || '.' || c.relname || '.' || a.attnum ELSE NULL END, 'gchararray', information_schema._pg_char_max_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_char_octet_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_scale(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truety
 pmod(a.*, t.*)), information_schema._pg_datetime_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), NULL, NULL, NULL, NULL, NULL, NULL, CASE WHEN pg_get_expr(ad.adbin, ad.adrelid) LIKE 'nextval(%' THEN 'AUTO_INCREMENT' ELSE NULL END, CASE WHEN c.relkind = 'r' THEN TRUE ELSE FALSE END, pg_catalog.col_description(c.oid, a.attnum), CAST (t.oid AS int8) FROM pg_attribute a LEFT JOIN pg_attrdef ad ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum, pg_class c, pg_namespace nc, pg_type t JOIN pg_namespace nt ON t.typnamespace = nt.oid LEFT JOIN (pg_type bt JOIN pg_namespace nbt ON bt.typnamespace = nbt.oid) ON t.typtype = 'd' AND t.typbasetype = bt.oid WHERE current_database() = ##cat::string AND nc.nspname = ##schema::string AND c.relname = ##name::string AND a.attrelid = c.oid AND a.atttypid = t.oid AND nc.oid = c.relnamespace AND NOT pg_is_other_temp_schema(nc.oid) AND a.attnum > 0 AND NOT a.attisdropped AND (c.relkind = ANY (ARR
 AY['r', 'v'])) AND (pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'SELECT'::text) OR has_table_privilege(c.oid, 'INSERT'::text) OR has_table_privilege(c.oid, 'UPDATE'::text) OR has_table_privilege(c.oid, 'REFERENCES'::text))",
+	"SELECT current_database(), nc.nspname, c.relname, a.attname, a.attnum, pg_get_expr(ad.adbin, ad.adrelid), CASE WHEN a.attnotnull OR t.typtype = 'd' AND t.typnotnull THEN FALSE ELSE TRUE END, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN NULL ELSE coalesce (nt.nspname || '.', '') || t.typname END, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'COL' || current_database() || '.' || nc.nspname || '.' || c.relname || '.' || a.attnum ELSE NULL END, 'gchararray', information_schema._pg_char_max_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_char_octet_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_scale(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t
 .*)), information_schema._pg_datetime_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), NULL, NULL, NULL, NULL, NULL, NULL, CASE WHEN pg_get_expr(ad.adbin, ad.adrelid) LIKE 'nextval(%' THEN 'AUTO_INCREMENT' ELSE NULL END, CASE WHEN c.relkind = 'r' THEN TRUE ELSE FALSE END, pg_catalog.col_description(c.oid, a.attnum), CAST (t.oid AS int8) FROM pg_attribute a LEFT JOIN pg_attrdef ad ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum, pg_class c, pg_namespace nc, pg_type t JOIN pg_namespace nt ON t.typnamespace = nt.oid LEFT JOIN (pg_type bt JOIN pg_namespace nbt ON bt.typnamespace = nbt.oid) ON t.typtype = 'd' AND t.typbasetype = bt.oid WHERE current_database() = ##cat::string AND nc.nspname = ##schema::string AND c.relname = ##name::string AND a.attrelid = c.oid AND a.atttypid = t.oid AND nc.oid = c.relnamespace AND NOT pg_is_other_temp_schema(nc.oid) AND a.attnum > 0 AND NOT a.attisdropped AND (c.relkind = ANY (ARRAY['r', 'v'
 ])) AND (pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'SELECT'::text) OR has_table_privilege(c.oid, 'INSERT'::text) OR has_table_privilege(c.oid, 'UPDATE'::text) OR has_table_privilege(c.oid, 'REFERENCES'::text))",
 
 	/* I_STMT_COLUMNS_ALL */
-	"SELECT current_database(), nc.nspname, c.relname, a.attname, a.attnum, pg_get_expr(ad.adbin, ad.adrelid), CASE WHEN a.attnotnull OR t.typtype = 'd' AND t.typnotnull THEN FALSE ELSE TRUE END, coalesce (nt.nspname || '.', '') || t.typname, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 1 ELSE 0 END, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'ARRAY' || 'COL' || current_database() || '.' || nc.nspname || '.' || c.relname || '.' || a.attnum ELSE NULL END, 'gchararray', information_schema._pg_char_max_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_char_octet_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_scale(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truety
 pmod(a.*, t.*)), information_schema._pg_datetime_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), NULL, NULL, NULL, NULL, NULL, NULL, CASE WHEN pg_get_expr(ad.adbin, ad.adrelid) LIKE 'nextval(%' THEN 'AUTO_INCREMENT' ELSE NULL END, CASE WHEN c.relkind = 'r' THEN TRUE ELSE FALSE END, pg_catalog.col_description(c.oid, a.attnum), CAST (t.oid AS int8) FROM pg_attribute a LEFT JOIN pg_attrdef ad ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum, pg_class c, pg_namespace nc, pg_type t JOIN pg_namespace nt ON t.typnamespace = nt.oid LEFT JOIN (pg_type bt JOIN pg_namespace nbt ON bt.typnamespace = nbt.oid) ON t.typtype = 'd' AND t.typbasetype = bt.oid WHERE a.attrelid = c.oid AND a.atttypid = t.oid AND nc.oid = c.relnamespace AND NOT pg_is_other_temp_schema(nc.oid) AND a.attnum > 0 AND NOT a.attisdropped AND (c.relkind = ANY (ARRAY['r', 'v'])) AND (pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'SELECT'::text)
  OR has_table_privilege(c.oid, 'INSERT'::text) OR has_table_privilege(c.oid, 'UPDATE'::text) OR has_table_privilege(c.oid, 'REFERENCES'::text))",
+	"SELECT current_database(), nc.nspname, c.relname, a.attname, a.attnum, pg_get_expr(ad.adbin, ad.adrelid), CASE WHEN a.attnotnull OR t.typtype = 'd' AND t.typnotnull THEN FALSE ELSE TRUE END, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN NULL ELSE coalesce (nt.nspname || '.', '') || t.typname END, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'COL' || current_database() || '.' || nc.nspname || '.' || c.relname || '.' || a.attnum ELSE NULL END, 'gchararray', information_schema._pg_char_max_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_char_octet_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_scale(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t
 .*)), information_schema._pg_datetime_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), NULL, NULL, NULL, NULL, NULL, NULL, CASE WHEN pg_get_expr(ad.adbin, ad.adrelid) LIKE 'nextval(%' THEN 'AUTO_INCREMENT' ELSE NULL END, CASE WHEN c.relkind = 'r' THEN TRUE ELSE FALSE END, pg_catalog.col_description(c.oid, a.attnum), CAST (t.oid AS int8) FROM pg_attribute a LEFT JOIN pg_attrdef ad ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum, pg_class c, pg_namespace nc, pg_type t JOIN pg_namespace nt ON t.typnamespace = nt.oid LEFT JOIN (pg_type bt JOIN pg_namespace nbt ON bt.typnamespace = nbt.oid) ON t.typtype = 'd' AND t.typbasetype = bt.oid WHERE a.attrelid = c.oid AND a.atttypid = t.oid AND nc.oid = c.relnamespace AND NOT pg_is_other_temp_schema(nc.oid) AND a.attnum > 0 AND NOT a.attisdropped AND (c.relkind = ANY (ARRAY['r', 'v'])) AND (pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'SELECT'::text) OR has_tab
 le_privilege(c.oid, 'INSERT'::text) OR has_table_privilege(c.oid, 'UPDATE'::text) OR has_table_privilege(c.oid, 'REFERENCES'::text))",
 
 	/* I_STMT_TABLES_CONSTRAINTS */
 	"SELECT constraint_catalog, constraint_schema, constraint_name, table_catalog, table_schema, table_name, constraint_type, NULL, CASE WHEN is_deferrable = 'YES' THEN TRUE ELSE FALSE END, CASE WHEN initially_deferred = 'YES' THEN TRUE ELSE FALSE END FROM information_schema.table_constraints WHERE table_catalog = ##cat::string AND table_schema = ##schema::string AND table_name = ##name::string",
@@ -143,16 +147,16 @@
 	"SELECT pg_catalog.current_database(), n.nspname, t.typname, 'gchararray', pg_catalog.obj_description(t.oid), CASE WHEN pg_catalog.pg_type_is_visible(t.oid) IS TRUE THEN t.typname ELSE coalesce (n.nspname || '.', '') || t.typname END, coalesce (n.nspname || '.', '') || t.typname, CASE WHEN t.typname ~ '^_' THEN TRUE WHEN t.typname in ('any', 'anyarray', 'anyelement', 'cid', 'cstring', 'int2vector', 'internal', 'language_handler', 'oidvector', 'opaque', 'record', 'refcursor', 'regclass', 'regoper', 'regoperator', 'regproc', 'regprocedure', 'regtype', 'SET', 'smgr', 'tid', 'trigger', 'unknown', 'void', 'xid', 'oid', 'aclitem') THEN TRUE ELSE FALSE END, o.rolname FROM pg_catalog.pg_type t, pg_catalog.pg_user u, pg_catalog.pg_namespace n , pg_authid o WHERE t.typowner=u.usesysid AND n.oid = t.typnamespace AND pg_catalog.pg_type_is_visible(t.oid) AND (t.typrelid != 0 AND (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) AND o.oid=t.typowner",
 
 	/* I_STMT_UDT_COLUMNS */
-	"select pg_catalog.current_database(), n.nspname, udt.typname, a.attname, a.attnum, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'ARRAY' || 'UDT' || current_database() || '.' || n.nspname || '.' || udt.typname || '.' || a.attnum ELSE coalesce (nt.nspname || '.', '') || t.typname END, information_schema._pg_char_max_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_char_octet_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_scale(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_datetime_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), NULL, NULL , NULL, NULL, NULL, NULL FROM pg_t
 ype udt INNER JOIN pg_namespace n ON (udt.typnamespace=n.oid) INNER JOIN pg_attribute a ON (a.attrelid=udt.typrelid) INNER JOIN pg_type t ON (a.atttypid=t.oid) INNER JOIN pg_namespace nt ON (t.typnamespace = nt.oid) WHERE udt.typrelid != 0 AND (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = udt.typrelid) AND pg_catalog.current_database = ##cat::string AND n.nspname = ##schema::string AND udt.typname = ##name::string",
+	"select pg_catalog.current_database(), n.nspname, udt.typname, a.attname, a.attnum, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN NULL ELSE coalesce (nt.nspname || '.', '') || t.typname END, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'UDT' || current_database() || '.' || n.nspname || '.' || udt.typname || '.' || a.attnum ELSE NULL END, information_schema._pg_char_max_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_char_octet_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_scale(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_datetime_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truety
 pmod(a.*, t.*)), NULL, NULL , NULL, NULL, NULL, NULL FROM pg_type udt INNER JOIN pg_namespace n ON (udt.typnamespace=n.oid) INNER JOIN pg_attribute a ON (a.attrelid=udt.typrelid) INNER JOIN pg_type t ON (a.atttypid=t.oid) INNER JOIN pg_namespace nt ON (t.typnamespace = nt.oid) WHERE udt.typrelid != 0 AND (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = udt.typrelid) AND pg_catalog.current_database = ##cat::string AND n.nspname = ##schema::string AND udt.typname = ##name::string",
 
 	/* I_STMT_UDT_COLUMNS_ALL */
-	"select pg_catalog.current_database(), n.nspname, udt.typname, a.attname, a.attnum, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'ARRAY' || 'UDT' || current_database() || '.' || n.nspname || '.' || udt.typname || '.' || a.attnum ELSE coalesce (nt.nspname || '.', '') || t.typname END, information_schema._pg_char_max_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_char_octet_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_scale(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_datetime_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), NULL, NULL , NULL, NULL, NULL, NULL FROM pg_t
 ype udt INNER JOIN pg_namespace n ON (udt.typnamespace=n.oid) INNER JOIN pg_attribute a ON (a.attrelid=udt.typrelid) INNER JOIN pg_type t ON (a.atttypid=t.oid) INNER JOIN pg_namespace nt ON (t.typnamespace = nt.oid) WHERE udt.typrelid != 0 AND (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = udt.typrelid)",
+	"select pg_catalog.current_database(), n.nspname, udt.typname, a.attname, a.attnum, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN NULL ELSE coalesce (nt.nspname || '.', '') || t.typname END, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'UDT' || current_database() || '.' || n.nspname || '.' || udt.typname || '.' || a.attnum ELSE NULL END, information_schema._pg_char_max_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_char_octet_length(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_numeric_scale(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truetypmod(a.*, t.*)), information_schema._pg_datetime_precision(information_schema._pg_truetypid(a.*, t.*), information_schema._pg_truety
 pmod(a.*, t.*)), NULL, NULL , NULL, NULL, NULL, NULL FROM pg_type udt INNER JOIN pg_namespace n ON (udt.typnamespace=n.oid) INNER JOIN pg_attribute a ON (a.attrelid=udt.typrelid) INNER JOIN pg_type t ON (a.atttypid=t.oid) INNER JOIN pg_namespace nt ON (t.typnamespace = nt.oid) WHERE udt.typrelid != 0 AND (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = udt.typrelid)",
 
 	/* I_STMT_DOMAINS */
-	"SELECT pg_catalog.current_database(), nt.nspname, t.typname, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'ARRAY' || 'DOM' || current_database() || '.' || nt.nspname || '.' || bt.typname ELSE coalesce (nbt.nspname || '.', '') || bt.typname END, 'gchararray', information_schema._pg_char_max_length(t.typbasetype, t.typtypmod), information_schema._pg_char_octet_length(t.typbasetype, t.typtypmod),  NULL, NULL, NULL, NULL, NULL, NULL,  information_schema._pg_numeric_precision(t.typbasetype, t.typtypmod), information_schema._pg_numeric_scale(t.typbasetype, t.typtypmod), t.typdefault, pg_catalog.obj_description(t.oid), CASE WHEN pg_catalog.pg_type_is_visible(t.oid) IS TRUE THEN t.typname ELSE coalesce (nt.nspname || '.', '') || t.typname END, coalesce (nt.nspname || '.', '') || t.typname, o.rolname FROM pg_type t, pg_namespace nt, pg_type bt, pg_namespace nbt, pg_authid o WHERE t.typnamespace = nt.oid AND t.typbasetype = bt.oid AND bt.typnamespace = nbt.oid AND t.typtype 
 = 'd' AND o.oid=t.typowner AND pg_catalog.current_database() = ##cat::string AND nt.nspname = ##schema::string", 
+	"SELECT pg_catalog.current_database(), nt.nspname, t.typname, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN NULL ELSE coalesce (nbt.nspname || '.', '') || bt.typname END, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'DOM' || current_database() || '.' || nt.nspname || '.' || t.typname ELSE NULL END, 'gchararray', information_schema._pg_char_max_length(t.typbasetype, t.typtypmod), information_schema._pg_char_octet_length(t.typbasetype, t.typtypmod),  NULL, NULL, NULL, NULL, NULL, NULL,  information_schema._pg_numeric_precision(t.typbasetype, t.typtypmod), information_schema._pg_numeric_scale(t.typbasetype, t.typtypmod), t.typdefault, pg_catalog.obj_description(t.oid), CASE WHEN pg_catalog.pg_type_is_visible(t.oid) IS TRUE THEN t.typname ELSE coalesce (nt.nspname || '.', '') || t.typname END, coalesce (nt.nspname || '.', '') || t.typname, o.rolname FROM pg_type t, pg_namespace nt, pg_type bt, pg_namespace nbt, pg_authid o WHERE t.typnamespace = nt.oid AND t.typb
 asetype = bt.oid AND bt.typnamespace = nbt.oid AND t.typtype = 'd' AND o.oid=t.typowner AND pg_catalog.current_database() = ##cat::string AND nt.nspname = ##schema::string", 
 
 	/* I_STMT_DOMAINS_ALL */
-	"SELECT pg_catalog.current_database(), nt.nspname, t.typname, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'ARRAY' || 'DOM' || current_database() || '.' || nt.nspname || '.' || bt.typname ELSE coalesce (nbt.nspname || '.', '') || bt.typname END, 'gchararray', information_schema._pg_char_max_length(t.typbasetype, t.typtypmod), information_schema._pg_char_octet_length(t.typbasetype, t.typtypmod),  NULL, NULL, NULL, NULL, NULL, NULL,  information_schema._pg_numeric_precision(t.typbasetype, t.typtypmod), information_schema._pg_numeric_scale(t.typbasetype, t.typtypmod), t.typdefault, pg_catalog.obj_description(t.oid), CASE WHEN pg_catalog.pg_type_is_visible(t.oid) IS TRUE THEN t.typname ELSE coalesce (nt.nspname || '.', '') || t.typname END, coalesce (nt.nspname || '.', '') || t.typname, o.rolname FROM pg_type t, pg_namespace nt, pg_type bt, pg_namespace nbt, pg_authid o WHERE t.typnamespace = nt.oid AND t.typbasetype = bt.oid AND bt.typnamespace = nbt.oid AND t.typtype 
 = 'd' AND o.oid=t.typowner",
+	"SELECT pg_catalog.current_database(), nt.nspname, t.typname, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN NULL ELSE coalesce (nbt.nspname || '.', '') || bt.typname END, CASE WHEN t.typelem <> 0::oid AND t.typlen = -1 THEN 'DOM' || current_database() || '.' || nt.nspname || '.' || t.typname ELSE NULL END, 'gchararray', information_schema._pg_char_max_length(t.typbasetype, t.typtypmod), information_schema._pg_char_octet_length(t.typbasetype, t.typtypmod),  NULL, NULL, NULL, NULL, NULL, NULL,  information_schema._pg_numeric_precision(t.typbasetype, t.typtypmod), information_schema._pg_numeric_scale(t.typbasetype, t.typtypmod), t.typdefault, pg_catalog.obj_description(t.oid), CASE WHEN pg_catalog.pg_type_is_visible(t.oid) IS TRUE THEN t.typname ELSE coalesce (nt.nspname || '.', '') || t.typname END, coalesce (nt.nspname || '.', '') || t.typname, o.rolname FROM pg_type t, pg_namespace nt, pg_type bt, pg_namespace nbt, pg_authid o WHERE t.typnamespace = nt.oid AND t.typb
 asetype = bt.oid AND bt.typnamespace = nbt.oid AND t.typtype = 'd' AND o.oid=t.typowner",
 
 	/* I_STMT_DOMAINS_CONSTRAINTS */
 	"SELECT constraint_catalog, constraint_schema, constraint_name, domain_catalog, domain_schema, domain_name, NULL, CASE WHEN is_deferrable = 'YES' THEN TRUE ELSE FALSE END, CASE WHEN initially_deferred = 'YES' THEN TRUE ELSE FALSE END FROM information_schema.domain_constraints WHERE domain_catalog = ##cat::string AND domain_schema = ##schema::string AND domain_name = ##name::string",
@@ -170,7 +174,21 @@
 	"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))"
+	"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))",
+
+	/* I_STMT_EL_TYPES_COL */
+	"SELECT 'COL' || current_database() || '.' || nc.nspname || '.' || c.relname || '.' || a.attnum, current_database(), nc.nspname, c.relname, 'TABLE_COL', coalesce (nbt.nspname || '.', '') || bt.typname, NULL, NULL, NULL FROM pg_attribute a, pg_class c, pg_namespace nc, pg_type t JOIN pg_namespace nt ON t.typnamespace = nt.oid LEFT JOIN (pg_type bt JOIN pg_namespace nbt ON bt.typnamespace = nbt.oid) ON t.typelem = bt.oid WHERE a.attrelid = c.oid AND a.atttypid = t.oid AND nc.oid = c.relnamespace AND NOT pg_is_other_temp_schema(nc.oid) AND a.attnum > 0 AND NOT a.attisdropped AND (c.relkind = ANY (ARRAY['r'::\"char\", 'v'::\"char\"])) AND (pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'SELECT'::text) OR has_table_privilege(c.oid, 'INSERT'::text) OR has_table_privilege(c.oid, 'UPDATE'::text) OR has_table_privilege(c.oid, 'REFERENCES'::text)) AND t.typelem <> 0::oid AND t.typlen = -1 AND 'COL' || current_database() || '.' || nc.nspname || '.' || c.relname |
 | '.' || a.attnum = ##name::string",
+
+	/* I_STMT_EL_TYPES_DOM */
+	"SELECT 'DOM' || current_database() || '.' || nt.nspname || '.' || t.typname, current_database(), nt.nspname, t.typname, 'DOMAIN', coalesce (nbt.nspname || '.', '') || bt.typname, NULL, NULL, NULL FROM pg_type t, pg_namespace nt, pg_type bt, pg_namespace nbt WHERE t.typnamespace = nt.oid AND t.typelem = bt.oid AND bt.typnamespace = nbt.oid AND t.typtype = 'd' AND t.typlen = -1 AND 'DOM' || current_database() || '.' || nt.nspname || '.' || t.typname = ##name::string",
+
+	/* I_STMT_EL_TYPES_UDT */
+	"SELECT 'UDT' || current_database() || '.' || n.nspname || '.' || udt.typname || '.' || a.attnum, pg_catalog.current_database(), n.nspname, udt.typname, 'UDT_COL', coalesce (nbt.nspname || '.', '') || bt.typname, NULL, NULL, NULL FROM pg_type udt INNER JOIN pg_namespace n ON (udt.typnamespace=n.oid) INNER JOIN pg_attribute a ON (a.attrelid=udt.typrelid) INNER JOIN pg_type t ON (a.atttypid=t.oid) INNER JOIN pg_namespace nt ON (t.typnamespace = nt.oid), pg_type bt, pg_namespace nbt where udt.typrelid != 0 AND (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = udt.typrelid) AND t.typelem = bt.oid AND bt.typnamespace = nbt.oid AND t.typlen = -1 AND 'UDT' || current_database() || '.' || n.nspname || '.' || udt.typname || '.' || a.attnum = ##name::string",
+
+	/* I_STMT_EL_TYPES_ALL */
+	"SELECT 'UDT' || current_database() || '.' || n.nspname || '.' || udt.typname || '.' || a.attnum, pg_catalog.current_database(), n.nspname, udt.typname, 'UDT_COL', coalesce (nbt.nspname || '.', '') || bt.typname, NULL, NULL, NULL FROM pg_type udt INNER JOIN pg_namespace n ON (udt.typnamespace=n.oid) INNER JOIN pg_attribute a ON (a.attrelid=udt.typrelid) INNER JOIN pg_type t ON (a.atttypid=t.oid) INNER JOIN pg_namespace nt ON (t.typnamespace = nt.oid), pg_type bt, pg_namespace nbt where udt.typrelid != 0 AND (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = udt.typrelid) AND t.typelem = bt.oid AND bt.typnamespace = nbt.oid AND t.typlen = -1 "
+	"UNION SELECT 'DOM' || current_database() || '.' || nt.nspname || '.' || t.typname, current_database(), nt.nspname, t.typname, 'DOMAIN', coalesce (nbt.nspname || '.', '') || bt.typname, NULL, NULL, NULL FROM pg_type t, pg_namespace nt, pg_type bt, pg_namespace nbt WHERE t.typnamespace = nt.oid AND t.typelem = bt.oid AND bt.typnamespace = nbt.oid AND t.typtype = 'd' AND t.typlen = -1 "
+	"UNION SELECT 'COL' || current_database() || '.' || nc.nspname || '.' || c.relname || '.' || a.attnum, current_database(), nc.nspname, c.relname, 'TABLE_COL', coalesce (nbt.nspname || '.', '') || bt.typname, NULL, NULL, NULL FROM pg_attribute a, pg_class c, pg_namespace nc, pg_type t JOIN pg_namespace nt ON t.typnamespace = nt.oid LEFT JOIN (pg_type bt JOIN pg_namespace nbt ON bt.typnamespace = nbt.oid) ON t.typelem = bt.oid WHERE a.attrelid = c.oid AND a.atttypid = t.oid AND nc.oid = c.relnamespace AND NOT pg_is_other_temp_schema(nc.oid) AND a.attnum > 0 AND NOT a.attisdropped AND (c.relkind = ANY (ARRAY['r'::\"char\", 'v'::\"char\"])) AND (pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'SELECT'::text) OR has_table_privilege(c.oid, 'INSERT'::text) OR has_table_privilege(c.oid, 'UPDATE'::text) OR has_table_privilege(c.oid, 'REFERENCES'::text)) AND t.typelem <> 0::oid AND t.typlen = -1"
 };
 
 /*
@@ -441,8 +459,47 @@
 _gda_postgres_meta__el_types (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_EL_TYPES_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
+_gda_postgres_meta_el_types (GdaServerProvider *prov, GdaConnection *cnc, 
+			     GdaMetaStore *store, GdaMetaContext *context, GError **error,
+			     const GValue *specific_name)
+{
+	const gchar *cstr;
+	GdaDataModel *model;
+	gboolean retval;
+
+	cstr = g_value_get_string (specific_name);
+	if (*cstr == 'C')
+		model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_EL_TYPES_COL], NULL, 
+								 error);
+	else if (*cstr == 'D')
+		model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_EL_TYPES_DOM], NULL, 
+								 error);
+	else if (*cstr == 'U')
+		model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_EL_TYPES_UDT], NULL, 
+								 error);
+	else
+		TO_IMPLEMENT;
+	
+	if (!model)
+		return FALSE;
+	retval = gda_meta_store_modify_with_context (store, context, model, error);
+	g_object_unref (model);
+		
+	return retval;
 }
 
 gboolean
@@ -636,7 +693,7 @@
 	for (i = 0; i < nrows; i++) {
 		const GValue *value;
 		GType type;
-		value = gda_data_model_get_value_at (model, 25, i);
+		value = gda_data_model_get_value_at (model, 24, i);
 		
 		type = _gda_postgres_type_oid_to_gda (cdata, g_value_get_int64 (value));
 		if (type != G_TYPE_STRING) {

Modified: trunk/providers/postgres/gda-postgres-meta.h
==============================================================================
--- trunk/providers/postgres/gda-postgres-meta.h	(original)
+++ trunk/providers/postgres/gda-postgres-meta.h	Wed Apr  9 20:49:07 2008
@@ -75,6 +75,9 @@
 /* _element_types */
 gboolean _gda_postgres_meta__el_types        (GdaServerProvider *prov, GdaConnection *cnc, 
 					      GdaMetaStore *store, GdaMetaContext *context, GError **error);
+gboolean _gda_postgres_meta_el_types         (GdaServerProvider *prov, GdaConnection *cnc, 
+					      GdaMetaStore *store, GdaMetaContext *context, GError **error,
+					      const GValue *specific_name);
 
 /* _collations */
 gboolean _gda_postgres_meta__collations      (GdaServerProvider *prov, GdaConnection *cnc, 

Modified: trunk/providers/postgres/gda-postgres-provider.c
==============================================================================
--- trunk/providers/postgres/gda-postgres-provider.c	(original)
+++ trunk/providers/postgres/gda-postgres-provider.c	Wed Apr  9 20:49:07 2008
@@ -198,6 +198,7 @@
 	provider_class->meta_funcs._constraints_dom = _gda_postgres_meta__constraints_dom;
 	provider_class->meta_funcs.constraints_dom = _gda_postgres_meta_constraints_dom;
 	provider_class->meta_funcs._el_types = _gda_postgres_meta__el_types;
+	provider_class->meta_funcs.el_types = _gda_postgres_meta_el_types;
 	provider_class->meta_funcs._collations = _gda_postgres_meta__collations;
 	provider_class->meta_funcs.collations = _gda_postgres_meta_collations;
 	provider_class->meta_funcs._character_sets = _gda_postgres_meta__character_sets;

Modified: trunk/providers/skel-implementation/capi/gda-capi-meta.c
==============================================================================
--- trunk/providers/skel-implementation/capi/gda-capi-meta.c	(original)
+++ trunk/providers/skel-implementation/capi/gda-capi-meta.c	Wed Apr  9 20:49:07 2008
@@ -227,6 +227,15 @@
 }
 
 gboolean
+_gda_capi_meta_el_types (GdaServerProvider *prov, GdaConnection *cnc, 
+			 GdaMetaStore *store, GdaMetaContext *context, GError **error,
+			 const GValue *specific_name)
+{
+	TO_IMPLEMENT;
+	return TRUE;
+}
+
+gboolean
 _gda_capi_meta__collations (GdaServerProvider *prov, GdaConnection *cnc, 
 			    GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {

Modified: trunk/providers/skel-implementation/capi/gda-capi-meta.h
==============================================================================
--- trunk/providers/skel-implementation/capi/gda-capi-meta.h	(original)
+++ trunk/providers/skel-implementation/capi/gda-capi-meta.h	Wed Apr  9 20:49:07 2008
@@ -75,6 +75,9 @@
 /* _element_types */
 gboolean _gda_capi_meta__el_types        (GdaServerProvider *prov, GdaConnection *cnc, 
 					  GdaMetaStore *store, GdaMetaContext *context, GError **error);
+gboolean _gda_capi_meta_el_types         (GdaServerProvider *prov, GdaConnection *cnc, 
+					  GdaMetaStore *store, GdaMetaContext *context, GError **error,
+					  const GValue *specific_name);
 
 /* _collations */
 gboolean _gda_capi_meta__collations      (GdaServerProvider *prov, GdaConnection *cnc, 

Modified: trunk/providers/skel-implementation/capi/gda-capi-provider.c
==============================================================================
--- trunk/providers/skel-implementation/capi/gda-capi-provider.c	(original)
+++ trunk/providers/skel-implementation/capi/gda-capi-provider.c	Wed Apr  9 20:49:07 2008
@@ -190,6 +190,7 @@
 	provider_class->meta_funcs._constraints_dom = _gda_capi_meta__constraints_dom;
 	provider_class->meta_funcs.constraints_dom = _gda_capi_meta_constraints_dom;
 	provider_class->meta_funcs._el_types = _gda_capi_meta__el_types;
+	provider_class->meta_funcs.el_types = _gda_capi_meta_el_types;
 	provider_class->meta_funcs._collations = _gda_capi_meta__collations;
 	provider_class->meta_funcs.collations = _gda_capi_meta_collations;
 	provider_class->meta_funcs._character_sets = _gda_capi_meta__character_sets;

Modified: trunk/tools/Makefile.am
==============================================================================
--- trunk/tools/Makefile.am	(original)
+++ trunk/tools/Makefile.am	Wed Apr  9 20:49:07 2008
@@ -3,13 +3,16 @@
 	gda-sql-4.0 \
 	gda-list-server-op-4.0
 
+noinst_PROGRAMS = information-schema-doc
+
 AM_CPPFLAGS = \
 	-I$(top_srcdir) \
 	-I$(top_builddir) \
 	-I$(top_srcdir)/libgda/sqlite \
 	-I$(top_srcdir)/libgda \
 	-I. \
-	$(LIBGDA_CFLAGS)
+	$(LIBGDA_CFLAGS) \
+	-DROOT_DIR=\""$(top_srcdir)"\"
 
 gda_list_config_4_0_SOURCES = \
         gda-list-config.c
@@ -23,7 +26,7 @@
 	tools-input.h \
 	tools-input.c \
 	command-exec.h \
-	command-exec.c
+	command-exec.c 
 
 gda_sql_4_0_LDADD = \
         $(top_builddir)/libgda/libgda-4.0.la \
@@ -31,6 +34,8 @@
 	$(READLINE_LIB) \
         $(HISTORY_LIB)
 
+
+
 # setenv() is in libiberty in mingw
 if PLATFORM_WIN32
 gda_sql_4_0_LDADD += -liberty
@@ -43,3 +48,10 @@
         $(top_builddir)/libgda/libgda-4.0.la \
         $(LIBGDA_LIBS)
 
+
+information_schema_doc_SOURCES = \
+        information-schema-doc.c
+
+information_schema_doc_LDADD = \
+        $(top_builddir)/libgda/libgda-4.0.la \
+        $(LIBGDA_LIBS)
\ No newline at end of file

Modified: trunk/tools/command-exec.c
==============================================================================
--- trunk/tools/command-exec.c	(original)
+++ trunk/tools/command-exec.c	Wed Apr  9 20:49:07 2008
@@ -23,6 +23,7 @@
 #include <glib/gi18n-lib.h>
 #include <string.h>
 #include "tools-input.h"
+#include "parser.h"
 #ifdef HAVE_READLINE_HISTORY_H
 #include <readline/history.h>
 #endif
@@ -146,15 +147,106 @@
 	}
 }
 
+/*
+ * Small tokenizer
+ */
+#define T_ILLEGAL                         1
+#define T_SPACE                           2
+#define T_TEXTUAL                         3
+#define T_WORD                            4
+#define T_STRING                          5
+static int
+getToken (const char *z, gint *tok_type)
+{
+	*tok_type = T_SPACE;
+	int i, c;
+
+	switch (*z) {
+	case ' ': case '\t': case '\n': case '\f': case '\r': {
+		for (i=1; g_ascii_isspace (z[i]); i++){}
+		*tok_type = T_SPACE;
+		return i;
+	}
+	case '\'':
+        case '"': {
+                char delim = z[0];
+                for (i = 1; (c = z[i]) != 0; i++) {
+                        if (c == delim) {
+                                if (z[i+1] == delim)
+                                        i++;
+                                else
+                                        break;
+                        }
+                        else if (c == '\\') {
+                                if (z[i+1] == delim)
+                                        i++;
+                        }
+                }
+                if (c) {
+                        if (delim == '"')
+                                *tok_type = T_TEXTUAL;
+                        else
+                                *tok_type = T_STRING;
+			return i+1;
+                }
+                else {
+                        *tok_type = T_ILLEGAL;
+                        return 0;
+                }
+                break;
+        }
+	default: 
+		for (i=0; z[i] && !g_ascii_isspace (z[i]); i++){}
+		*tok_type = T_WORD;
+		return i;
+	}
+}
+
 /* default function to split arguments */
 static gchar **
 default_gda_internal_commandargs_func (const gchar *string)
 {
-	gchar **array, **ptr;
-
-	array = g_strsplit (string, " ", -1);
-	for (ptr = array; *ptr; ptr++)
-		g_strchug (*ptr);
+	gchar **array = NULL;
+	GSList *parsed_list = NULL;
+	gchar *ptr;
+	gint nparsed, token_type;
+
+	ptr = (gchar *) string; 
+	nparsed = getToken (ptr, &token_type);
+	while (nparsed > 0) {
+		gint local_nparsed = nparsed;
+		gchar *local_ptr = ptr;
+		switch (token_type) {
+		case T_SPACE:
+		case T_ILLEGAL:
+			break;
+		case T_TEXTUAL:
+		case T_STRING:
+			local_ptr++;
+			local_nparsed -= 2;
+		default: {
+			gchar hold;
+			hold = local_ptr[local_nparsed];
+			local_ptr[local_nparsed] = 0;
+			parsed_list = g_slist_append (parsed_list, g_strdup (local_ptr));
+			local_ptr[local_nparsed] = hold;
+			break;
+		}
+		}
+		ptr += nparsed;
+		nparsed = getToken (ptr, &token_type);
+	}
+	
+	if (parsed_list) {
+		GSList *list;
+		gint i;
+		array = g_new0 (gchar*, g_slist_length (parsed_list) + 1);
+		for (i = 0, list = parsed_list; list; i++, list = list->next) {
+			array [i] = (gchar *) list->data;
+			/*g_print ("array [%d] = %s\n", i, array [i]);*/
+		}
+		g_slist_free (parsed_list);
+	}
 
 	return array;
 }

Modified: trunk/tools/gda-sql.c
==============================================================================
--- trunk/tools/gda-sql.c	(original)
+++ trunk/tools/gda-sql.c	Wed Apr  9 20:49:07 2008
@@ -1240,7 +1240,7 @@
 	c = g_new0 (GdaInternalCommand, 1);
 	c->group = _("General");
 	c->name = g_strdup_printf (_("%s [CNC_NAME [DSN [USER [PASSWORD]]]]"), "c");
-	c->description = _("Connect to another defined data source (DSN, see \\dsn_list)");
+	c->description = _("Connect to another defined data source (DSN, see \\l)");
 	c->args = NULL;
 	c->command_func = (GdaInternalCommandFunc) extra_command_manage_cnc;
 	c->user_data = data;
@@ -1252,7 +1252,7 @@
 	c->name = g_strdup_printf (_("%s [CNC_NAME]"), "close");
 	c->description = _("Close a connection");
 	c->args = NULL;
-	c->command_func = (GdaInternalCommandFunc)extra_command_close_cnc;
+	c->command_func = (GdaInternalCommandFunc) extra_command_close_cnc;
 	c->user_data = data;
 	c->arguments_delimiter_func = NULL;
 	commands->commands = g_slist_prepend (commands->commands, c);
@@ -1269,7 +1269,7 @@
 
 	c = g_new0 (GdaInternalCommand, 1);
 	c->group = _("General");
-	c->name = "dsn_list";
+	c->name = "l";
 	c->description = _("List configured data sources (DSN)");
 	c->args = NULL;
 	c->command_func = (GdaInternalCommandFunc) extra_command_list_dsn;
@@ -1580,9 +1580,8 @@
 	return res;
 }
 
-static 
-GdaInternalCommandResult *extra_command_list_dsn (GdaConnection *cnc, const gchar **args,
-						  GError **error, MainData *data)
+static GdaInternalCommandResult *
+extra_command_list_dsn (GdaConnection *cnc, const gchar **args, GError **error, MainData *data)
 {
 	GdaInternalCommandResult *res;
 	
@@ -1592,9 +1591,8 @@
 	return res;
 }
 
-static 
-GdaInternalCommandResult *extra_command_list_providers (GdaConnection *cnc, const gchar **args,
-							GError **error, MainData *data)
+static GdaInternalCommandResult *
+extra_command_list_providers (GdaConnection *cnc, const gchar **args, GError **error, MainData *data)
 {
 	GdaInternalCommandResult *res;
 	
@@ -1613,8 +1611,8 @@
 }
 
 static 
-GdaInternalCommandResult *extra_command_manage_cnc (GdaConnection *cnc, const gchar **args,
-						    GError **error, MainData *data)
+GdaInternalCommandResult *
+extra_command_manage_cnc (GdaConnection *cnc, const gchar **args, GError **error, MainData *data)
 {
 	/* arguments:
 	 * 0 = connection name
@@ -1654,6 +1652,7 @@
 		else {
 			/* switch to another already opened connection */
 			ConnectionSetting *cs;
+
 			cs = find_connection_from_name (data, args[0]);
 			if (cs) {
 				GdaInternalCommandResult *res;
@@ -1664,6 +1663,48 @@
 				return res;
 			}
 			else {
+				if (*args [0] == '~') {
+					cs = find_connection_from_name (data, args[0] + 1);
+					if (!cs) {
+						g_set_error (error, 0, 0,
+							     _("No connection named '%s' found"), args[0] + 1);
+						return NULL;
+					}
+					ConnectionSetting *ncs = g_new0 (ConnectionSetting, 1);
+					GdaMetaStore *store;
+					GdaInternalCommandResult *res;
+					
+					ncs->name = g_strdup (args[0]);
+					store = gda_connection_get_meta_store (cs->cnc);
+					ncs->cnc = gda_meta_store_get_internal_connection (store);
+					g_object_ref (ncs->cnc);
+					ncs->parser = gda_connection_create_parser (ncs->cnc);
+					
+					data->settings = g_slist_append (data->settings, ncs);
+					data->current = ncs;
+
+					GError *lerror = NULL;
+					if (!data->output_stream) {
+						g_print (_("Getting database schema information, "
+							   "this may take some time... "));
+						fflush (stdout);
+					}
+					if (!gda_connection_update_meta_store (ncs->cnc, NULL, &lerror)) {
+						if (!data->output_stream) 
+							g_print (_("error: %s\n"), 
+								 lerror && lerror->message ? lerror->message : _("No detail"));
+						if (lerror)
+							g_error_free (lerror);
+					}
+					else
+						if (!data->output_stream) 
+							g_print (_(" Done.\n"));
+					
+					res = g_new0 (GdaInternalCommandResult, 1);
+					res->type = GDA_INTERNAL_COMMAND_RESULT_EMPTY;
+					return res;
+				}
+
 				g_set_error (error, 0, 0,
 					     _("No connection named '%s' found"), args[0]);
 				return NULL;
@@ -1751,8 +1792,8 @@
 }
 
 static 
-GdaInternalCommandResult *extra_command_close_cnc (GdaConnection *cnc, const gchar **args,
-						   GError **error, MainData *data)
+GdaInternalCommandResult *
+extra_command_close_cnc (GdaConnection *cnc, const gchar **args, GError **error, MainData *data)
 {
 	ConnectionSetting *cs;
 	if (args[0] && *args[0]) {
@@ -1792,9 +1833,8 @@
 	return res;
 }
 
-static 
-GdaInternalCommandResult *extra_command_bind_cnc (GdaConnection *cnc, const gchar **args,
-						  GError **error, MainData *data)
+static GdaInternalCommandResult *
+extra_command_bind_cnc (GdaConnection *cnc, const gchar **args, GError **error, MainData *data)
 {
 	ConnectionSetting *cs = NULL;
 	gint i, nargs = g_strv_length ((gchar **) args);
@@ -1898,8 +1938,7 @@
 	return res;
 }
 
-static 
-GdaInternalCommandResult *
+static GdaInternalCommandResult *
 extra_command_cd (GdaConnection *cnc, const gchar **args,
 		  GError **error, MainData *data)
 {
@@ -1958,8 +1997,7 @@
 	return NULL;
 }
 
-static 
-GdaInternalCommandResult *
+static GdaInternalCommandResult *
 extra_command_edit_buffer (GdaConnection *cnc, const gchar **args,
 			   GError **error, MainData *data)
 {
@@ -2051,8 +2089,7 @@
 	return res;
 }
 
-static 
-GdaInternalCommandResult *
+static GdaInternalCommandResult *
 extra_command_reset_buffer (GdaConnection *cnc, const gchar **args,
 			    GError **error, MainData *data)
 {
@@ -2081,8 +2118,7 @@
 	return res;
 }
 
-static 
-GdaInternalCommandResult *
+static GdaInternalCommandResult *
 extra_command_show_buffer (GdaConnection *cnc, const gchar **args,
 			   GError **error, MainData *data)
 {
@@ -2097,8 +2133,7 @@
 	return res;
 }
 
-static 
-GdaInternalCommandResult *
+static GdaInternalCommandResult *
 extra_command_exec_buffer (GdaConnection *cnc, const gchar **args,
 			   GError **error, MainData *data)
 {
@@ -2116,8 +2151,7 @@
 	return res;
 }
 
-static 
-GdaInternalCommandResult *
+static GdaInternalCommandResult *
 extra_command_write_buffer (GdaConnection *cnc, const gchar **args,
 			    GError **error, MainData *data)
 {

Added: trunk/tools/information-schema-doc.c
==============================================================================
--- (empty file)
+++ trunk/tools/information-schema-doc.c	Wed Apr  9 20:49:07 2008
@@ -0,0 +1,259 @@
+/* GDA - Information schema documentation extractor
+ * Copyright (C) 2008 The GNOME Foundation.
+ *
+ * AUTHORS:
+ *      Vivien Malerba <malerba gnome-db org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <glib.h>
+#include <libgda/binreloc/gda-binreloc.h>
+#include <string.h>
+
+#define FILE_NAME "information_schema.xml"
+#define OUT_FILE "i_s_doc.xml"
+
+int
+main (int argc, char** argv)
+{
+        xmlDocPtr doc;
+        xmlNodePtr node;
+        gchar *fname;
+	xmlNodePtr out_top_node;
+	xmlBufferPtr buf;
+
+        fname = g_build_filename (ROOT_DIR, "libgda", FILE_NAME, NULL);
+	if (! g_file_test (fname, G_FILE_TEST_EXISTS)) {
+		g_free (fname);
+		fname = gda_gbr_get_file_path (GDA_DATA_DIR, LIBGDA_ABI_NAME, FILE_NAME, NULL);
+		if (! g_file_test (fname, G_FILE_TEST_EXISTS)) {
+			g_print ("Could not find '%s'.\n", FILE_NAME);
+			exit (1);
+		}
+	}
+
+	doc = xmlParseFile (fname);
+	if (!doc) {
+		g_print ("Missing or malformed file '%s', check your installation", fname);
+		g_free (fname);
+		exit (1);
+        }
+	
+	node = xmlDocGetRootElement (doc);
+	g_free (fname);
+	if (strcmp ((gchar *) node->name, "schema")) {
+		g_print ("Root node should be <schema>, got <%s>\n", (gchar *) node->name);
+		xmlFreeDoc (doc);
+		exit (1);
+	}
+
+	out_top_node = xmlNewNode (NULL, BAD_CAST "sect2");
+	xmlAddChild (out_top_node, xmlNewComment (BAD_CAST 
+						  "File generated by the tools/information-schema-doc program from the\n"
+						  "libgda/information-schema.xml file,\ndo not modify"));
+	xmlNewChild (out_top_node, NULL, BAD_CAST "title", BAD_CAST "Individual table description");
+	xmlNewChild (out_top_node, NULL, BAD_CAST "para", BAD_CAST "This section individually describes each table.");
+	
+	for (node = node->children; node; node = node->next) {
+		if (!strcmp ((gchar *) node->name, "table")) {
+			xmlNodePtr snode, child, table, row, ref = NULL;
+			xmlChar *prop;
+			snode = xmlNewChild (out_top_node, NULL, "sect3", NULL);
+			prop = xmlGetProp (node, BAD_CAST "name");
+			if (prop) {
+				gchar *str;
+				str = g_strdup_printf ("is:%s", (gchar *) prop);
+				xmlSetProp (snode, "id", BAD_CAST str);
+				g_free (str);
+
+				str = g_strdup_printf ("%s table", (gchar *) prop);
+				xmlNewChild (snode, NULL, "title", str);
+				g_free (str);
+				xmlFree (prop);
+			}
+			else
+				xmlNewChild (snode, NULL, "title", "FIXME: table not named");
+
+			prop = xmlGetProp (node, BAD_CAST "descr");
+			if (prop) {
+				xmlNewChild (snode, NULL, "para", prop);
+				xmlFree (prop);
+			}
+			table = xmlNewChild (snode, NULL, BAD_CAST "para", "The following table describes the columns:");
+			table = xmlNewChild (table, NULL, BAD_CAST "informaltable", NULL);
+			xmlSetProp (table, BAD_CAST "frame", BAD_CAST "all");
+			table = xmlNewChild (table, NULL, BAD_CAST "tgroup", NULL);
+			xmlSetProp (table, BAD_CAST "cols", BAD_CAST "5");
+			xmlSetProp (table, BAD_CAST "colsep", BAD_CAST "1");
+			xmlSetProp (table, BAD_CAST "rowsep", BAD_CAST "1");
+			xmlSetProp (table, BAD_CAST "align", BAD_CAST "justify");
+			
+			child = xmlNewChild (table, NULL, BAD_CAST "thead", NULL);
+			row = xmlNewChild (child, NULL, BAD_CAST "row", NULL);
+			xmlNewChild (row, NULL, BAD_CAST "entry", BAD_CAST "Column name");
+			xmlNewChild (row, NULL, BAD_CAST "entry", BAD_CAST "Type");
+			xmlNewChild (row, NULL, BAD_CAST "entry", BAD_CAST "Key");
+			xmlNewChild (row, NULL, BAD_CAST "entry", BAD_CAST "Can be NULL");
+			xmlNewChild (row, NULL, BAD_CAST "entry", BAD_CAST "description");
+			table = xmlNewChild (table, NULL, BAD_CAST "tbody", NULL);	
+			for (child = node->children; child; child = child->next) {
+				if (!strcmp ((gchar *) child->name, "column")) {
+					row = xmlNewChild (table, NULL, BAD_CAST "row", NULL);
+					
+					prop = xmlGetProp (child, BAD_CAST "name");
+					xmlNewChild (row, NULL, BAD_CAST "entry", prop ? prop : BAD_CAST "FIXME");
+					if (prop) xmlFree (prop);
+					
+					prop = xmlGetProp (child, BAD_CAST "type");
+					xmlNewChild (row, NULL, BAD_CAST "entry", prop ? prop : BAD_CAST "string");
+					if (prop) xmlFree (prop);
+					
+					prop = xmlGetProp (child, BAD_CAST "pkey");
+					xmlNewChild (row, NULL, BAD_CAST "entry", 
+						     prop && ((*prop == 't') || (*prop == 'T')) ? 
+						     BAD_CAST "Yes" : BAD_CAST "");
+					if (prop) xmlFree (prop);
+
+					prop = xmlGetProp (child, BAD_CAST "nullok");
+					xmlNewChild (row, NULL, BAD_CAST "entry", 
+						     prop && ((*prop == 't') || (*prop == 'T')) ? 
+						     BAD_CAST "Yes" : BAD_CAST "No");
+					if (prop) xmlFree (prop);
+
+					prop = xmlGetProp (child, BAD_CAST "descr");
+					xmlNewChild (row, NULL, BAD_CAST "entry", prop ? prop : BAD_CAST "");
+					if (prop) xmlFree (prop);
+				}
+				else if (!strcmp ((gchar *) child->name, "fkey")) {
+					xmlNodePtr fkey;
+					if (!ref) {
+						ref = xmlNewChild (snode, NULL, BAD_CAST "para", NULL);
+						ref = xmlNewChild (ref, NULL, BAD_CAST "itemizedlist", NULL);
+					}
+					fkey = xmlNewChild (ref, NULL, BAD_CAST "listitem", NULL);
+
+					prop = xmlGetProp (child, BAD_CAST "ref_table");
+					if (prop) {
+						gchar *str;
+						GString *fk_str = NULL, *ref_pk_str = NULL;
+						xmlNodePtr subnode, link;
+
+						fkey = xmlNewChild (fkey, NULL, BAD_CAST "para", NULL);
+						
+						for (subnode = child->children; subnode; subnode = subnode->next) {
+							xmlChar *column, *ref_column;
+							if (strcmp ((gchar *) subnode->name, "part")) 
+								continue;
+							column = xmlGetProp (subnode, "column");
+							if (!column)
+								continue;
+							if (!fk_str) {
+								fk_str = g_string_new ("(");
+								ref_pk_str = g_string_new ("(");
+							}
+							else {
+								g_string_append (fk_str, ", ");
+								g_string_append (ref_pk_str, ", ");
+							}
+							g_string_append (fk_str, (gchar *) column);
+							ref_column = xmlGetProp (subnode, "ref_column");
+							if (ref_column) {
+								g_string_append (ref_pk_str, (gchar *) ref_column);
+								xmlFree (ref_column);
+							}
+							else
+								g_string_append (ref_pk_str, (gchar *) column);
+							xmlFree (column);
+						}
+						if (fk_str) {
+							g_string_append (fk_str, ") ");
+							g_string_append (ref_pk_str, ") ");
+						}
+
+						if (fk_str) {
+							xmlNodeAddContent (fkey, fk_str->str);
+							g_string_free (fk_str, TRUE);
+						}
+						xmlNodeAddContent (fkey, BAD_CAST "references ");
+						link = xmlNewChild (fkey, NULL, BAD_CAST "link", prop);
+						str = g_strdup_printf ("is:%s", prop);
+						xmlSetProp (link, BAD_CAST "linkend", BAD_CAST str);
+						g_free (str);
+						if (ref_pk_str) {
+							xmlNodeAddContent (fkey, ref_pk_str->str);
+							g_string_free (ref_pk_str, TRUE);
+						}
+						
+						if (prop) xmlFree (prop);
+					}
+					else
+						fkey = xmlNewChild (ref, NULL, BAD_CAST "para", BAD_CAST "FIXME");
+				}
+			}
+			
+		}
+		else if (!strcmp ((gchar *) node->name, "view")) {
+			xmlNodePtr snode, child, para;
+			xmlChar *prop;
+			snode = xmlNewChild (out_top_node, NULL, "sect3", NULL);
+			prop = xmlGetProp (node, BAD_CAST "name");
+			if (prop) {
+				gchar *str;
+				str = g_strdup_printf ("is:%s", (gchar *) prop);
+				xmlSetProp (snode, "id", BAD_CAST str);
+				g_free (str);
+
+				str = g_strdup_printf ("%s view", (gchar *) prop);
+				xmlNewChild (snode, NULL, "title", str);
+				g_free (str);
+				xmlFree (prop);
+			}
+			else
+				xmlNewChild (snode, NULL, "title", "FIXME: view not named");
+
+			prop = xmlGetProp (node, BAD_CAST "descr");
+			if (prop) {
+				xmlNewChild (snode, NULL, "para", prop);
+				xmlFree (prop);
+			}
+			for (child = node->children; child; child = child->next) {
+				if (!strcmp ((gchar *) child->name, "definition")) {
+					xmlChar *def;
+
+					def = xmlNodeGetContent (child);
+					para = xmlNewChild (snode, NULL, "para", "Definition is:");
+					para = xmlNewChild (para, NULL, "programlisting", def);
+					xmlSetProp (para, BAD_CAST "width", BAD_CAST "80");
+					xmlFree (def);
+					break;
+				}
+			}
+		}
+	}
+	xmlFreeDoc (doc);
+
+	buf = xmlBufferCreate();
+	xmlNodeDump (buf, NULL, out_top_node, 0, 1);
+	if (! g_file_set_contents (OUT_FILE, xmlBufferContent (buf), -1, NULL)) 
+		g_print ("Could not write output file '%s'\n", OUT_FILE);
+	else
+		g_print ("Doc. written to '%s'\n", OUT_FILE);
+	xmlBufferFree (buf);
+	
+	return 0;
+}

Modified: trunk/tools/tools-input.c
==============================================================================
--- trunk/tools/tools-input.c	(original)
+++ trunk/tools/tools-input.c	Wed Apr  9 20:49:07 2008
@@ -95,16 +95,64 @@
 	}
 }
 
+#ifdef HAVE_READLINE_READLINE_H	
+static char *
+completion_generator_func (const char *text, int state)
+{
+	static char **compl = NULL;
+	if (state == 0) {
+		/* clear any previous completion */
+		if (compl) {
+			/* don't free the contents of @array, it is freed by readline */
+			g_free (compl);
+			compl = NULL;
+		}
+
+		/* compute list of possible completions. It's very simple at the moment */
+		if (!(*text)) {
+			/* no completion possible */
+		}
+		else {
+			gchar *copy;
+
+			copy = g_strdup (text);
+			g_strchomp (copy);
+			if (*copy) {
+				const char *start;
+				for (start = copy + (strlen (copy) - 1); start >= copy; start--)
+					if (g_ascii_isspace (*start)) {
+						start ++;
+						break;
+					}
+				compl = g_new0 (char *, 2);
+				compl[0] = malloc (sizeof (char) * (strlen (start) + 1));
+				strcpy (compl[0], start);
+			}
+			g_free (copy);
+		}
+
+		if (compl)
+			return compl[0];
+		else
+			return NULL;
+	}
+	else 
+		return compl[state];
+}
+#endif
+
 /**
  * init_input
  *
- * Loads the contents of the history file, if supported
+ * Initializes input
  */
 void
 init_input ()
 {
 #ifdef HAVE_READLINE_READLINE_H	
 	rl_set_signals ();
+	rl_readline_name = "gda-sql";
+	rl_completion_entry_function = completion_generator_func;
 #endif
 }
 
@@ -162,6 +210,7 @@
 	}
 	else
 		history_file = g_build_filename (g_get_home_dir (), HISTORY_FILE, NULL);
+	using_history ();
 	read_history (history_file);
 	history_init_done = TRUE;
 #endif
@@ -197,7 +246,7 @@
 #ifdef HAVE_READLINE_HISTORY_H
 	int res;
 	if (!history_init_done || !history_file)
-		return;
+		return FALSE;
 	res = append_history (1, file ? file : history_file);
 	if (res == ENOENT)
 		res = write_history (file ? file : history_file);



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