libgda r3095 - in trunk: . doc/C libgda libgda/sql-parser libgda/sqlite providers/postgres providers/skel-implementation/capi



Author: vivien
Date: Mon Mar 24 16:41:50 2008
New Revision: 3095
URL: http://svn.gnome.org/viewvc/libgda?rev=3095&view=rev

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

	* libgda/sql-parser/lemon.c:
	* libgda/sql-parser/LemonPatch:
	* libgda/sql-parser/lempar.c: use the Lemon parser generator for SQLite 3.5.7
	* libgda/sql-parser/parser.y:
	* libgda/sql-parser/delimiter.y:
	* providers/skel-implementation/capi/parser.y:
	* providers/postgres/parser.y: add #include <assert.h> which is required by the
	new version of the Lemon parser generator
	* providers/postgres/gda-postgres-meta.c:
	* providers/postgres/gda-postgres-provider.c: renamed the prepared statement with
	lowercase only to avoid postgres warning about non existing prepared statement
	when calling DEALLOCATE
	* libgda/information_schema.xml: added some descriptions
	* doc/C/information_schema.png:
	* doc/C/information_schema.svg: updated the GdaMetaStore's internal structure's
	diagram


Modified:
   trunk/ChangeLog
   trunk/doc/C/information_schema.png
   trunk/doc/C/information_schema.svg
   trunk/libgda/information_schema.xml
   trunk/libgda/sql-parser/LemonPatch
   trunk/libgda/sql-parser/delimiter.y
   trunk/libgda/sql-parser/lemon.c
   trunk/libgda/sql-parser/lempar.c
   trunk/libgda/sql-parser/parser.y
   trunk/libgda/sqlite/gda-sqlite-meta.c
   trunk/providers/postgres/gda-postgres-meta.c
   trunk/providers/postgres/gda-postgres-provider.c
   trunk/providers/postgres/parser.y
   trunk/providers/skel-implementation/capi/parser.y

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	Mon Mar 24 16:41:50 2008
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- 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 -->
+<!-- Generated by Graphviz version 2.12 (Tue Sep  4 16:56:48 UTC 2007)
+     For user: (vivien) Vivien,,, -->
 <!-- Title: G Pages: 1 -->
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/";
@@ -11,19 +11,15 @@
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
    width="27.07in"
-   height="24.85in"
+   height="25.10in"
    id="svg2"
    sodipodi:version="0.32"
-   inkscape:version="0.45"
+   inkscape:version="0.45.1"
    sodipodi:docname="graph.svg"
    inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   sodipodi:docbase="/local/TESTS/V4/bugs/20080311_meta_store_structure_dump"
-   inkscape:export-filename="/local/TESTS/V4/bugs/20080311_meta_store_structure_dump/graph.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90"
-   sodipodi:modified="TRUE">
+   sodipodi:docbase="/home/vivien/Devel/V4/bugs/20080311_meta_store_structure_dump">
   <metadata
-     id="metadata978">
+     id="metadata986">
     <rdf:RDF>
       <cc:Work
          rdf:about="">
@@ -34,17 +30,13 @@
     </rdf:RDF>
   </metadata>
   <defs
-     id="defs976">
+     id="defs984">
     <title
        id="title5">G</title>
-    <title
-       id="title409">main.main._enums-&gt;main.main._udt</title>
-    <title
-       id="title646">main.main._parameters-&gt;main.main._routines</title>
   </defs>
   <sodipodi:namedview
-     inkscape:window-height="887"
-     inkscape:window-width="1087"
+     inkscape:window-height="1200"
+     inkscape:window-width="1920"
      inkscape:pageshadow="2"
      inkscape:pageopacity="0.0"
      guidetolerance="10.0"
@@ -54,23 +46,23 @@
      bordercolor="#666666"
      pagecolor="#ffffff"
      id="base"
-     inkscape:zoom="0.25735968"
-     inkscape:cx="1222.0129"
-     inkscape:cy="705.30271"
-     inkscape:window-x="6"
-     inkscape:window-y="52"
+     inkscape:zoom="0.40340068"
+     inkscape:cx="1299.9967"
+     inkscape:cy="1053.6697"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
      inkscape:current-layer="svg2" />
   <polygon
      id="polygon7"
-     points="-4,4 -4,-1786 1946,-1786 1946,4 -4,4 "
+     points="-4,4 -4,-1804 1946,-1804 1946,4 -4,4 "
      style="fill:#ffffff;stroke:#ffffff"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)"
      inkscape:export-xdpi="90"
      inkscape:export-ydpi="90" />
   <g
      class="node"
      id="node1"
-     transform="matrix(1.33333,0,0,1.33333,-223.91783,1817.9135)">
+     transform="matrix(1.33333,0,0,1.33333,111.92709,241.22582)">
     <title
        id="title10">main.main._attributes</title>
     <polygon
@@ -104,36 +96,36 @@
   <g
      class="node"
      id="node2"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title25">main.main._information_schema_catalog_name</title>
     <polygon
        id="polygon27"
-       points="699,-1757 699,-1777 911,-1777 911,-1757 699,-1757 "
+       points="699,-1775 699,-1795 911,-1795 911,-1775 699,-1775 "
        style="fill:#808080;stroke:#808080" />
     <text
        id="text29"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1762.33"
+       y="-1780.33"
        x="805">_information_schema_catalog_name</text>
     <polygon
        id="polygon31"
-       points="699,-1757 699,-1777 911,-1777 911,-1757 699,-1757 "
+       points="699,-1775 699,-1795 911,-1795 911,-1775 699,-1775 "
        style="fill:none;stroke:#000000" />
     <text
        id="text33"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1743.33"
+       y="-1761.33"
        x="739.5">catalog_name</text>
     <polygon
        id="polygon35"
-       points="698,-1738 698,-1778 912,-1778 912,-1738 698,-1738 "
+       points="698,-1756 698,-1796 912,-1796 912,-1756 698,-1756 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node3"
-     transform="matrix(1.33333,0,0,1.33333,-1376.002,2115.1629)">
+     transform="matrix(1.33333,0,0,1.33333,-1427.4853,1926.8948)">
     <title
        id="title38">main.main._builtin_data_types</title>
     <polygon
@@ -187,7 +179,7 @@
   <g
      class="node"
      id="node4"
-     transform="matrix(1.33333,0,0,1.33333,-1570.2826,1866.4837)">
+     transform="matrix(1.33333,0,0,1.33333,-1702.646,1669.0866)">
     <title
        id="title61">main.main._element_types</title>
     <polygon
@@ -256,1899 +248,1931 @@
   <g
      class="node"
      id="node5"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title90">main.main._schemata</title>
     <polygon
        id="polygon92"
-       points="741,-1673 741,-1693 869,-1693 869,-1673 741,-1673 "
+       points="741,-1691 741,-1711 869,-1711 869,-1691 741,-1691 "
        style="fill:#808080;stroke:#808080" />
     <text
        id="text94"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1678.33"
+       y="-1696.33"
        x="805">_schemata</text>
     <polygon
        id="polygon96"
-       points="741,-1673 741,-1693 869,-1693 869,-1673 741,-1673 "
+       points="741,-1691 741,-1711 869,-1711 869,-1691 741,-1691 "
        style="fill:none;stroke:#000000" />
     <text
        id="text98"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1659.33"
+       y="-1677.33"
        x="781.5">catalog_name</text>
     <text
        id="text100"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1641.33"
+       y="-1659.33"
        x="782">schema_name</text>
     <text
        id="text102"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1623.33"
+       y="-1641.33"
        x="784.5">schema_owner</text>
     <text
        id="text104"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1605.33"
+       y="-1623.33"
        x="788.5">schema_internal</text>
     <polygon
        id="polygon106"
-       points="740,-1600 740,-1694 870,-1694 870,-1600 740,-1600 "
+       points="740,-1618 740,-1712 870,-1712 870,-1618 740,-1618 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge2"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title109">main.main._schemata-&gt;main.main._information_schema_catalog_name</title>
     <path
        id="path111"
-       d="M 805,-1698 C 805,-1706 805,-1715 805,-1724"
+       d="M 805,-1716 C 805,-1724 805,-1733 805,-1742"
        style="fill:none;stroke:#000000" />
     <polygon
        id="polygon113"
-       points="801.5,-1724 805,-1734 808.5,-1724 801.5,-1724 "
+       points="801.5,-1742 805,-1752 808.5,-1742 801.5,-1742 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node7"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title116">main.main._udt</title>
     <polygon
        id="polygon118"
-       points="214,-1427 214,-1447 324,-1447 324,-1427 214,-1427 "
+       points="214,-1445 214,-1465 324,-1465 324,-1445 214,-1445 "
        style="fill:#808080;stroke:#808080" />
     <text
        id="text120"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1432.33"
+       y="-1450.33"
        x="269">_udt</text>
     <polygon
        id="polygon122"
-       points="214,-1427 214,-1447 324,-1447 324,-1427 214,-1427 "
+       points="214,-1445 214,-1465 324,-1465 324,-1445 214,-1445 "
        style="fill:none;stroke:#000000" />
     <text
        id="text124"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1413.33"
+       y="-1431.33"
        x="248.5">udt_catalog</text>
     <text
        id="text126"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1395.33"
+       y="-1413.33"
        x="249">udt_schema</text>
     <text
        id="text128"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1377.33"
+       y="-1395.33"
        x="243.5">udt_name</text>
     <text
        id="text130"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1359.33"
+       y="-1377.33"
        x="244">udt_gtype</text>
     <text
        id="text132"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1341.33"
+       y="-1359.33"
        x="257">udt_comments</text>
     <text
        id="text134"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1323.33"
+       y="-1341.33"
        x="261">udt_short_name</text>
     <text
        id="text136"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1305.33"
+       y="-1323.33"
        x="257">udt_full_name</text>
     <text
        id="text138"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1287.33"
+       y="-1305.33"
        x="250">udt_internal</text>
     <text
        id="text140"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1269.33"
+       y="-1287.33"
        x="246">udt_owner</text>
     <polygon
        id="polygon142"
-       points="213,-1264 213,-1448 325,-1448 325,-1264 213,-1264 "
+       points="213,-1282 213,-1466 325,-1466 325,-1282 213,-1282 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge4"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title145">main.main._udt-&gt;main.main._schemata</title>
     <path
        id="path147"
-       d="M 305,-1452 C 324,-1491 351,-1533 388,-1560 C 440,-1598 616,-1625 722,-1638"
+       d="M 305,-1470 C 324,-1509 351,-1551 388,-1578 C 440,-1616 616,-1643 722,-1656"
        style="fill:none;stroke:#000000" />
     <polygon
        id="polygon149"
-       points="721.701,-1641.49 732,-1639 722.398,-1634.52 721.701,-1641.49 "
+       points="721.701,-1659.49 732,-1657 722.398,-1652.52 721.701,-1659.49 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node9"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title152">main.main._domains</title>
     <polygon
        id="polygon154"
-       points="439,-1535 439,-1555 631,-1555 631,-1535 439,-1535 "
+       points="439,-1553 439,-1573 631,-1573 631,-1553 439,-1553 "
        style="fill:#808080;stroke:#808080" />
     <text
        id="text156"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1540.33"
+       y="-1558.33"
        x="535">_domains</text>
     <polygon
        id="polygon158"
-       points="439,-1535 439,-1555 631,-1555 631,-1535 439,-1535 "
+       points="439,-1553 439,-1573 631,-1573 631,-1553 439,-1553 "
        style="fill:none;stroke:#000000" />
     <text
        id="text160"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1521.33"
+       y="-1539.33"
        x="485.5">domain_catalog</text>
     <text
        id="text162"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1503.33"
+       y="-1521.33"
        x="486">domain_schema</text>
     <text
        id="text164"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1485.33"
+       y="-1503.33"
        x="480.5">domain_name</text>
     <text
        id="text166"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1467.33"
+       y="-1485.33"
        x="468">data_type</text>
     <text
        id="text168"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1467.33"
+       x="456.5">gtype</text>
+    <text
+       id="text170"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1449.33"
        x="519.5">character_maximum_length</text>
     <text
-       id="text170"
+       id="text172"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1431.33"
        x="504.5">character_octet_length</text>
     <text
-       id="text172"
+       id="text174"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1413.33"
        x="489">collation_catalog</text>
     <text
-       id="text174"
+       id="text176"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1395.33"
        x="489.5">collation_schema</text>
     <text
-       id="text176"
+       id="text178"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1377.33"
        x="484">collation_name</text>
     <text
-       id="text178"
+       id="text180"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1359.33"
        x="501">character_set_catalog</text>
     <text
-       id="text180"
+       id="text182"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1341.33"
        x="501.5">character_set_schema</text>
     <text
-       id="text182"
+       id="text184"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1323.33"
        x="496">character_set_name</text>
     <text
-       id="text184"
+       id="text186"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1305.33"
        x="493">numeric_precision</text>
     <text
-       id="text186"
+       id="text188"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1287.33"
        x="481">numeric_scale</text>
     <text
-       id="text188"
+       id="text190"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1269.33"
        x="485">domain_default</text>
     <text
-       id="text190"
-       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1251.33"
-       x="481">domain_gtype</text>
-    <text
        id="text192"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1233.33"
+       y="-1251.33"
        x="494">domain_comments</text>
     <text
        id="text194"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1215.33"
+       y="-1233.33"
        x="498">domain_short_name</text>
     <text
        id="text196"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1197.33"
+       y="-1215.33"
        x="494">domain_full_name</text>
     <text
        id="text198"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1179.33"
+       y="-1197.33"
        x="487">domain_internal</text>
     <text
        id="text200"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1161.33"
+       y="-1179.33"
        x="483">domain_owner</text>
     <polygon
        id="polygon202"
-       points="438,-1156 438,-1556 632,-1556 632,-1156 438,-1156 "
+       points="438,-1174 438,-1574 632,-1574 632,-1174 438,-1174 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge6"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title205">main.main._domains-&gt;main.main._schemata</title>
     <path
        id="path207"
-       d="M 640,-1551 C 643,-1554 646,-1557 649,-1560 C 670,-1581 698,-1599 723,-1612"
+       d="M 640,-1569 C 643,-1572 646,-1575 649,-1578 C 670,-1599 698,-1617 723,-1630"
        style="fill:none;stroke:#000000" />
     <polygon
        id="polygon209"
-       points="721.559,-1615.2 732,-1617 724.958,-1609.08 721.559,-1615.2 "
+       points="721.559,-1633.2 732,-1635 724.958,-1627.08 721.559,-1633.2 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node11"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title212">main.main._tables</title>
     <polygon
        id="polygon214"
-       points="881,-1028 881,-1048 1007,-1048 1007,-1028 881,-1028 "
+       points="881,-1037 881,-1057 1007,-1057 1007,-1037 881,-1037 "
        style="fill:#808080;stroke:#808080" />
     <text
        id="text216"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1033.33"
+       y="-1042.33"
        x="944">_tables</text>
     <polygon
        id="polygon218"
-       points="881,-1028 881,-1048 1007,-1048 1007,-1028 881,-1028 "
+       points="881,-1037 881,-1057 1007,-1057 1007,-1037 881,-1037 "
        style="fill:none;stroke:#000000" />
     <text
        id="text220"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1014.33"
+       y="-1023.33"
        x="920">table_catalog</text>
     <text
        id="text222"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-996.33301"
+       y="-1005.33"
        x="920.5">table_schema</text>
     <text
        id="text224"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-978.33301"
+       y="-987.33301"
        x="915">table_name</text>
     <text
        id="text226"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-960.33301"
+       y="-969.33301"
        x="912">table_type</text>
     <text
        id="text228"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-942.33301"
+       y="-951.33301"
        x="932.5">is_insertable_into</text>
     <text
        id="text230"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-924.33301"
+       y="-933.33301"
        x="928.5">table_comments</text>
     <text
        id="text232"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-906.33301"
+       y="-915.33301"
        x="932.5">table_short_name</text>
     <text
        id="text234"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-888.33301"
+       y="-897.33301"
        x="928.5">table_full_name</text>
     <text
        id="text236"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-870.33301"
+       y="-879.33301"
        x="917.5">table_owner</text>
     <polygon
        id="polygon238"
-       points="880,-865 880,-1049 1008,-1049 1008,-865 880,-865 "
+       points="880,-874 880,-1058 1008,-1058 1008,-874 880,-874 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge8"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title241">main.main._tables-&gt;main.main._schemata</title>
     <path
        id="path243"
-       d="M 948,-1053 C 950,-1176 942,-1392 873,-1560 C 869,-1570 864,-1579 858,-1588"
+       d="M 948,-1062 C 951,-1186 943,-1406 873,-1578 C 869,-1588 864,-1597 858,-1606"
        style="fill:none;stroke:#000000" />
     <polygon
        id="polygon245"
-       points="855.2,-1585.9 852,-1596 860.8,-1590.1 855.2,-1585.9 "
+       points="855.2,-1603.9 852,-1614 860.8,-1608.1 855.2,-1603.9 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node13"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title248">main.main._collations</title>
     <polygon
        id="polygon250"
-       points="667,-1400 667,-1420 827,-1420 827,-1400 667,-1400 "
+       points="667,-1418 667,-1438 827,-1438 827,-1418 667,-1418 "
        style="fill:#808080;stroke:#808080" />
     <text
        id="text252"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1405.33"
+       y="-1423.33"
        x="747">_collations</text>
     <polygon
        id="polygon254"
-       points="667,-1400 667,-1420 827,-1420 827,-1400 667,-1400 "
+       points="667,-1418 667,-1438 827,-1438 827,-1418 667,-1418 "
        style="fill:none;stroke:#000000" />
     <text
        id="text256"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1386.33"
+       y="-1404.33"
        x="717">collation_catalog</text>
     <text
        id="text258"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1368.33"
+       y="-1386.33"
        x="717.5">collation_schema</text>
     <text
        id="text260"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1350.33"
+       y="-1368.33"
        x="712">collation_name</text>
     <text
        id="text262"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1332.33"
+       y="-1350.33"
        x="725.5">collation_comments</text>
     <text
        id="text264"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1314.33"
+       y="-1332.33"
        x="729.5">collation_short_name</text>
     <text
        id="text266"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1296.33"
+       y="-1314.33"
        x="725.5">collation_full_name</text>
     <polygon
        id="polygon268"
-       points="666,-1291 666,-1421 828,-1421 828,-1291 666,-1291 "
+       points="666,-1309 666,-1439 828,-1439 828,-1309 666,-1309 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge10"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title271">main.main._collations-&gt;main.main._schemata</title>
     <path
        id="path273"
-       d="M 761,-1425 C 770,-1474 783,-1539 793,-1586"
+       d="M 761,-1443 C 770,-1492 783,-1557 793,-1604"
        style="fill:none;stroke:#000000" />
     <polygon
        id="polygon275"
-       points="789.607,-1586.88 795,-1596 796.471,-1585.51 789.607,-1586.88 "
+       points="789.607,-1604.88 795,-1614 796.471,-1603.51 789.607,-1604.88 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node15"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title278">main.main._routines</title>
     <polygon
        id="polygon280"
-       points="1083,-1535 1083,-1555 1229,-1555 1229,-1535 1083,-1535 "
+       points="1083,-1553 1083,-1573 1229,-1573 1229,-1553 1083,-1553 "
        style="fill:#808080;stroke:#808080" />
     <text
        id="text282"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1540.33"
+       y="-1558.33"
        x="1156">_routines</text>
     <polygon
        id="polygon284"
-       points="1083,-1535 1083,-1555 1229,-1555 1229,-1535 1083,-1535 "
+       points="1083,-1553 1083,-1573 1229,-1573 1229,-1553 1083,-1553 "
        style="fill:none;stroke:#000000" />
     <text
        id="text286"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1521.33"
+       y="-1539.33"
        x="1130">specific_catalog</text>
     <text
        id="text288"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1503.33"
+       y="-1521.33"
        x="1130.5">specific_schema</text>
     <text
        id="text290"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1485.33"
+       y="-1503.33"
        x="1125">specific_name</text>
     <text
        id="text292"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1467.33"
+       y="-1485.33"
        x="1128.5">routine_catalog</text>
     <text
        id="text294"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1449.33"
+       y="-1467.33"
        x="1129">routine_schema</text>
     <text
        id="text296"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1431.33"
+       y="-1449.33"
        x="1123.5">routine_name</text>
     <text
        id="text298"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1413.33"
+       y="-1431.33"
        x="1120.5">routine_type</text>
     <text
        id="text300"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1395.33"
+       y="-1413.33"
        x="1117.5">return_type</text>
     <text
        id="text302"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1377.33"
+       y="-1395.33"
        x="1115.5">returns_set</text>
     <text
        id="text304"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1359.33"
+       y="-1377.33"
        x="1122.5">routine_body</text>
     <text
        id="text306"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1341.33"
+       y="-1359.33"
        x="1136">routine_definition</text>
     <text
        id="text308"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1323.33"
+       y="-1341.33"
        x="1126">external_name</text>
     <text
        id="text310"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1305.33"
+       y="-1323.33"
        x="1136">external_language</text>
     <text
        id="text312"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1287.33"
+       y="-1305.33"
        x="1129.5">parameter_style</text>
     <text
        id="text314"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1269.33"
+       y="-1287.33"
        x="1129.5">is_deterministic</text>
     <text
        id="text316"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1251.33"
+       y="-1269.33"
        x="1128.5">sql_data_access</text>
     <text
        id="text318"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1233.33"
+       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="-1215.33"
+       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="-1197.33"
+       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="-1179.33"
+       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="-1161.33"
+       y="-1179.33"
        x="1126">routine_owner</text>
     <polygon
        id="polygon328"
-       points="1082,-1156 1082,-1556 1230,-1556 1230,-1156 1082,-1156 "
+       points="1082,-1174 1082,-1574 1230,-1574 1230,-1174 1082,-1174 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge12"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title331">main.main._routines-&gt;main.main._schemata</title>
     <path
        id="path333"
-       d="M 1074,-1544 C 1069,-1550 1064,-1555 1058,-1560 C 1011,-1602 942,-1624 888,-1636"
+       d="M 1074,-1562 C 1069,-1568 1064,-1573 1058,-1578 C 1011,-1620 942,-1642 888,-1654"
        style="fill:none;stroke:#000000" />
     <polygon
        id="polygon335"
-       points="887.119,-1632.61 878,-1638 888.492,-1639.47 887.119,-1632.61 "
+       points="887.119,-1650.61 878,-1656 888.492,-1657.47 887.119,-1650.61 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node17"
-     transform="matrix(1.33333,0,0,1.33333,-50.991312,2379.9536)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
        id="title338">main.main._udt_columns</title>
     <polygon
        id="polygon340"
-       points="167,-1091 167,-1111 371,-1111 371,-1091 167,-1091 "
+       points="167,-1109 167,-1129 371,-1129 371,-1109 167,-1109 "
        style="fill:#808080;stroke:#808080" />
     <text
        id="text342"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1096.33"
+       y="-1114.33"
        x="269">_udt_columns</text>
     <polygon
        id="polygon344"
-       points="167,-1091 167,-1111 371,-1111 371,-1091 167,-1091 "
+       points="167,-1109 167,-1129 371,-1129 371,-1109 167,-1109 "
        style="fill:none;stroke:#000000" />
     <text
        id="text346"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1077.33"
+       y="-1095.33"
        x="201.5">udt_catalog</text>
     <text
        id="text348"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1059.33"
+       y="-1077.33"
        x="202">udt_schema</text>
     <text
        id="text350"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1041.33"
+       y="-1059.33"
        x="196.5">udt_name</text>
     <text
        id="text352"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1023.33"
+       y="-1041.33"
        x="202.5">udt_column</text>
     <text
        id="text354"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-1023.33"
+       x="215">ordinal_position</text>
+    <text
+       id="text356"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-1005.33"
        x="196">data_type</text>
     <text
-       id="text356"
+       id="text358"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-987.33301"
        x="247.5">character_maximum_length</text>
     <text
-       id="text358"
+       id="text360"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-969.33301"
        x="232.5">character_octet_length</text>
     <text
-       id="text360"
+       id="text362"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-951.33301"
        x="221">numeric_precision</text>
     <text
-       id="text362"
+       id="text364"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-933.33301"
        x="209">numeric_scale</text>
     <text
-       id="text364"
+       id="text366"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-915.33301"
        x="222">datetime_precision</text>
     <text
-       id="text366"
+       id="text368"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-897.33301"
        x="229">character_set_catalog</text>
     <text
-       id="text368"
+       id="text370"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-879.33301"
        x="229.5">character_set_schema</text>
     <text
-       id="text370"
+       id="text372"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-861.33301"
        x="224">character_set_name</text>
     <text
-       id="text372"
+       id="text374"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-843.33301"
        x="217">collation_catalog</text>
     <text
-       id="text374"
+       id="text376"
        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="text376"
+       id="text378"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-807.33301"
        x="212">collation_name</text>
     <polygon
-       id="polygon378"
-       points="166,-802 166,-1112 372,-1112 372,-802 166,-802 "
+       id="polygon380"
+       points="166,-802 166,-1130 372,-1130 372,-802 166,-802 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge14"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title381">main.main._udt_columns-&gt;main.main._udt</title>
+       id="title383">main.main._udt_columns-&gt;main.main._udt</title>
     <path
-       id="path383"
-       d="M 269,-1116 C 269,-1161 269,-1209 269,-1250"
+       id="path385"
+       d="M 269,-1134 C 269,-1179 269,-1227 269,-1268"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon385"
-       points="265.5,-1250 269,-1260 272.5,-1250 265.5,-1250 "
+       id="polygon387"
+       points="265.5,-1268 269,-1278 272.5,-1268 265.5,-1268 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node19"
-     transform="matrix(1.33333,0,0,1.33333,448.29315,2715.4901)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title388">main.main._enums</title>
+       id="title390">main.main._enums</title>
     <polygon
-       id="polygon390"
-       points="9,-992 9,-1012 131,-1012 131,-992 9,-992 "
+       id="polygon392"
+       points="9,-1001 9,-1021 131,-1021 131,-1001 9,-1001 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text392"
+       id="text394"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-997.33301"
+       y="-1006.33"
        x="70">_enums</text>
     <polygon
-       id="polygon394"
-       points="9,-992 9,-1012 131,-1012 131,-992 9,-992 "
+       id="polygon396"
+       points="9,-1001 9,-1021 131,-1021 131,-1001 9,-1001 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text396"
+       id="text398"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-978.33301"
+       y="-987.33301"
        x="43.5">udt_catalog</text>
     <text
-       id="text398"
+       id="text400"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-960.33301"
+       y="-969.33301"
        x="44">udt_schema</text>
     <text
-       id="text400"
+       id="text402"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-942.33301"
+       y="-951.33301"
        x="38.5">udt_name</text>
     <text
-       id="text402"
+       id="text404"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-924.33301"
+       y="-933.33301"
        x="24.5">label</text>
     <text
-       id="text404"
+       id="text406"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-906.33301"
+       y="-915.33301"
        x="57">ordinal_position</text>
     <polygon
-       id="polygon406"
-       points="8,-901 8,-1013 132,-1013 132,-901 8,-901 "
+       id="polygon408"
+       points="8,-910 8,-1022 132,-1022 132,-910 8,-910 "
        style="fill:none;stroke:#000000" />
   </g>
-  <path
-     style="fill:none;stroke:#000000;stroke-width:1.7279501"
-     d="M 539.45026,1361.0629 C 523.34651,1277.628 504.022,1174.7249 486.84466,1085.7276 C 463.22583,963.35645 437.45982,827.07944 414.91457,710.27058"
-     id="path411" />
-  <polygon
-     style="fill:#000000;stroke:#000000"
-     points="213.084,-1252.96 221,-1260 219.203,-1249.56 213.084,-1252.96 "
-     id="polygon413"
-     transform="matrix(1.0240327,-0.8538888,0.8538888,1.0240327,1261.8718,2177.5094)" />
+  <g
+     class="edge"
+     id="edge16"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+    <title
+       id="title411">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"
+       style="fill:none;stroke:#000000" />
+    <polygon
+       id="polygon415"
+       points="213.084,-1270.96 221,-1278 219.203,-1267.56 213.084,-1270.96 "
+       style="fill:#000000;stroke:#000000" />
+  </g>
   <g
      class="node"
      id="node21"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title416">main.main._views</title>
+       id="title418">main.main._views</title>
     <polygon
-       id="polygon418"
+       id="polygon420"
        points="483,-566 483,-586 599,-586 599,-566 483,-566 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text420"
+       id="text422"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-571.33301"
        x="541">_views</text>
     <polygon
-       id="polygon422"
+       id="polygon424"
        points="483,-566 483,-586 599,-586 599,-566 483,-566 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text424"
+       id="text426"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-552.33301"
        x="522">table_catalog</text>
     <text
-       id="text426"
+       id="text428"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-534.33301"
        x="522.5">table_schema</text>
     <text
-       id="text428"
+       id="text430"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-516.33301"
        x="517">table_name</text>
     <text
-       id="text430"
+       id="text432"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-498.33301"
        x="529.5">view_definition</text>
     <text
-       id="text432"
+       id="text434"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-480.33301"
        x="522.5">check_option</text>
     <text
-       id="text434"
+       id="text436"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-462.33301"
        x="520">is_updatable</text>
     <polygon
-       id="polygon436"
+       id="polygon438"
        points="482,-457 482,-587 600,-587 600,-457 482,-457 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge18"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title439">main.main._views-&gt;main.main._tables</title>
+       id="title441">main.main._views-&gt;main.main._tables</title>
     <path
-       id="path441"
-       d="M 544,-591 C 550,-646 568,-720 617,-762 C 702,-834 773,-734 863,-798 C 882,-812 897,-831 908,-852"
+       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"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon443"
-       points="905.084,-853.958 913,-861 911.203,-850.559 905.084,-853.958 "
+       id="polygon445"
+       points="908.74,-862.283 916,-870 915.137,-859.44 908.74,-862.283 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node23"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title446">main.main._character_sets</title>
+       id="title448">main.main._character_sets</title>
     <polygon
-       id="polygon448"
-       points="649,-1028 649,-1048 845,-1048 845,-1028 649,-1028 "
+       id="polygon450"
+       points="649,-1037 649,-1057 845,-1057 845,-1037 649,-1037 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text450"
+       id="text452"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1033.33"
+       y="-1042.33"
        x="747">_character_sets</text>
     <polygon
-       id="polygon452"
-       points="649,-1028 649,-1048 845,-1048 845,-1028 649,-1028 "
+       id="polygon454"
+       points="649,-1037 649,-1057 845,-1057 845,-1037 649,-1037 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text454"
+       id="text456"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1014.33"
+       y="-1023.33"
        x="711">character_set_catalog</text>
     <text
-       id="text456"
+       id="text458"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-996.33301"
+       y="-1005.33"
        x="711.5">character_set_schema</text>
     <text
-       id="text458"
+       id="text460"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-978.33301"
+       y="-987.33301"
        x="706">character_set_name</text>
     <text
-       id="text460"
+       id="text462"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-960.33301"
+       y="-969.33301"
        x="716">default_collate_catalog</text>
     <text
-       id="text462"
+       id="text464"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-942.33301"
+       y="-951.33301"
        x="716.5">default_collate_schema</text>
     <text
-       id="text464"
+       id="text466"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-924.33301"
+       y="-933.33301"
        x="711">default_collate_name</text>
     <text
-       id="text466"
+       id="text468"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-906.33301"
+       y="-915.33301"
        x="719.5">character_set_comments</text>
     <text
-       id="text468"
+       id="text470"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-888.33301"
+       y="-897.33301"
        x="723.5">character_set_short_name</text>
     <text
-       id="text470"
+       id="text472"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-870.33301"
+       y="-879.33301"
        x="719.5">character_set_full_name</text>
     <polygon
-       id="polygon472"
-       points="648,-865 648,-1049 846,-1049 846,-865 648,-865 "
+       id="polygon474"
+       points="648,-874 648,-1058 846,-1058 846,-874 648,-874 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge20"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title475">main.main._character_sets-&gt;main.main._schemata</title>
+       id="title477">main.main._character_sets-&gt;main.main._schemata</title>
     <path
-       id="path477"
-       d="M 806,-1053 C 822,-1084 837,-1118 845,-1152 C 886,-1329 883,-1383 845,-1560 C 843,-1569 840,-1578 837,-1586"
+       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"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon479"
-       points="833.464,-1585.42 833,-1596 839.964,-1588.02 833.464,-1585.42 "
+       id="polygon481"
+       points="833.464,-1603.42 833,-1614 839.964,-1606.02 833.464,-1603.42 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge22"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title482">main.main._character_sets-&gt;main.main._collations</title>
+       id="title484">main.main._character_sets-&gt;main.main._collations</title>
     <path
-       id="path484"
-       d="M 747,-1053 C 747,-1121 747,-1212 747,-1277"
+       id="path486"
+       d="M 747,-1062 C 747,-1133 747,-1228 747,-1295"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon486"
-       points="743.5,-1277 747,-1287 750.5,-1277 743.5,-1277 "
+       id="polygon488"
+       points="743.5,-1295 747,-1305 750.5,-1295 743.5,-1295 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node26"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title489">main.main._triggers</title>
+       id="title491">main.main._triggers</title>
     <polygon
-       id="polygon491"
+       id="polygon493"
        points="1061,-629 1061,-649 1213,-649 1213,-629 1061,-629 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text493"
+       id="text495"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-634.33301"
        x="1137">_triggers</text>
     <polygon
-       id="polygon495"
+       id="polygon497"
        points="1061,-629 1061,-649 1213,-649 1213,-629 1061,-629 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text497"
+       id="text499"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-615.33301"
        x="1105.5">trigger_catalog</text>
     <text
-       id="text499"
+       id="text501"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-597.33301"
        x="1106">trigger_schema</text>
     <text
-       id="text501"
+       id="text503"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-579.33301"
        x="1100.5">trigger_name</text>
     <text
-       id="text503"
+       id="text505"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-561.33301"
        x="1118.5">event_manipulation</text>
     <text
-       id="text505"
+       id="text507"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-543.33301"
        x="1122">event_object_catalog</text>
     <text
-       id="text507"
+       id="text509"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-525.33301"
        x="1122.5">event_object_schema</text>
     <text
-       id="text509"
+       id="text511"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-507.33301"
        x="1115.5">event_object_table</text>
     <text
-       id="text511"
+       id="text513"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-489.33301"
        x="1110">action_statement</text>
     <text
-       id="text513"
+       id="text515"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-471.33301"
        x="1114">action_orientation</text>
     <text
-       id="text515"
+       id="text517"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-453.33301"
        x="1111.5">condition_timing</text>
     <text
-       id="text517"
+       id="text519"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-435.33301"
        x="1114">trigger_comments</text>
     <text
-       id="text519"
+       id="text521"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-417.33301"
        x="1118">trigger_short_name</text>
     <text
-       id="text521"
+       id="text523"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-399.33301"
        x="1114">trigger_full_name</text>
     <polygon
-       id="polygon523"
+       id="polygon525"
        points="1060,-394 1060,-650 1214,-650 1214,-394 1060,-394 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge24"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title526">main.main._triggers-&gt;main.main._schemata</title>
+       id="title528">main.main._triggers-&gt;main.main._schemata</title>
     <path
-       id="path528"
-       d="M 1098,-654 C 1085,-699 1072,-751 1063,-798 C 997,-1137 1111,-1273 923,-1560 C 913,-1575 900,-1588 886,-1600"
+       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"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon530"
-       points="883.9,-1597.2 878,-1606 888.1,-1602.8 883.9,-1597.2 "
+       id="polygon532"
+       points="883.9,-1615.2 878,-1624 888.1,-1620.8 883.9,-1615.2 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge26"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title533">main.main._triggers-&gt;main.main._tables</title>
+       id="title535">main.main._triggers-&gt;main.main._tables</title>
     <path
-       id="path535"
-       d="M 1088,-654 C 1074,-690 1058,-728 1043,-762 C 1029,-792 1014,-823 1000,-852"
+       id="path537"
+       d="M 1087,-654 C 1073,-690 1058,-728 1043,-762 C 1028,-795 1012,-829 997,-861"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon537"
-       points="996.797,-850.559 995,-861 1002.92,-853.958 996.797,-850.559 "
+       id="polygon539"
+       points="993.797,-859.559 992,-870 999.916,-862.958 993.797,-859.559 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node29"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title540">main.main._table_constraints</title>
+       id="title542">main.main._table_constraints</title>
     <polygon
-       id="polygon542"
+       id="polygon544"
        points="863,-602 863,-622 1025,-622 1025,-602 863,-602 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text544"
+       id="text546"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-607.33301"
        x="944">_table_constraints</text>
     <polygon
-       id="polygon546"
+       id="polygon548"
        points="863,-602 863,-622 1025,-622 1025,-602 863,-602 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text548"
+       id="text550"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-588.33301"
        x="916">constraint_catalog</text>
     <text
-       id="text550"
+       id="text552"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-570.33301"
        x="916.5">constraint_schema</text>
     <text
-       id="text552"
+       id="text554"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-552.33301"
        x="911">constraint_name</text>
     <text
-       id="text554"
+       id="text556"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-534.33301"
        x="902">table_catalog</text>
     <text
-       id="text556"
+       id="text558"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-516.33301"
        x="902.5">table_schema</text>
     <text
-       id="text558"
+       id="text560"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-498.33301"
        x="897">table_name</text>
     <text
-       id="text560"
+       id="text562"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-480.33301"
        x="908">constraint_type</text>
     <text
-       id="text562"
+       id="text564"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-462.33301"
        x="901.5">check_clause</text>
     <text
-       id="text564"
+       id="text566"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-444.33301"
        x="901.5">is_deferrable</text>
     <text
-       id="text566"
+       id="text568"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-426.33301"
        x="914">initially_deferred</text>
     <polygon
-       id="polygon568"
+       id="polygon570"
        points="862,-421 862,-623 1026,-623 1026,-421 862,-421 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge28"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title571">main.main._table_constraints-&gt;main.main._tables</title>
+       id="title573">main.main._table_constraints-&gt;main.main._tables</title>
     <path
-       id="path573"
-       d="M 944,-627 C 944,-695 944,-783 944,-851"
+       id="path575"
+       d="M 944,-627 C 944,-698 944,-789 944,-860"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon575"
-       points="940.5,-851 944,-861 947.5,-851 940.5,-851 "
+       id="polygon577"
+       points="940.5,-860 944,-870 947.5,-860 940.5,-860 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node31"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title578">main.main._domain_constraints</title>
+       id="title580">main.main._domain_constraints</title>
     <polygon
-       id="polygon580"
-       points="407,-1028 407,-1048 575,-1048 575,-1028 407,-1028 "
+       id="polygon582"
+       points="407,-1037 407,-1057 575,-1057 575,-1037 407,-1037 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text582"
+       id="text584"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1033.33"
+       y="-1042.33"
        x="491">_domain_constraints</text>
     <polygon
-       id="polygon584"
-       points="407,-1028 407,-1048 575,-1048 575,-1028 407,-1028 "
+       id="polygon586"
+       points="407,-1037 407,-1057 575,-1057 575,-1037 407,-1037 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text586"
+       id="text588"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1014.33"
+       y="-1023.33"
        x="460">constraint_catalog</text>
     <text
-       id="text588"
+       id="text590"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-996.33301"
+       y="-1005.33"
        x="460.5">constraint_schema</text>
     <text
-       id="text590"
+       id="text592"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-978.33301"
+       y="-987.33301"
        x="455">constraint_name</text>
     <text
-       id="text592"
+       id="text594"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-960.33301"
+       y="-969.33301"
        x="453.5">domain_catalog</text>
     <text
-       id="text594"
+       id="text596"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-942.33301"
+       y="-951.33301"
        x="454">domain_schema</text>
     <text
-       id="text596"
+       id="text598"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-924.33301"
+       y="-933.33301"
        x="448.5">domain_name</text>
     <text
-       id="text598"
+       id="text600"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-906.33301"
+       y="-915.33301"
        x="445.5">check_clause</text>
     <text
-       id="text600"
+       id="text602"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-888.33301"
+       y="-897.33301"
        x="445.5">is_deferrable</text>
     <text
-       id="text602"
+       id="text604"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-870.33301"
+       y="-879.33301"
        x="458">initially_deferred</text>
     <polygon
-       id="polygon604"
-       points="406,-865 406,-1049 576,-1049 576,-865 406,-865 "
+       id="polygon606"
+       points="406,-874 406,-1058 576,-1058 576,-874 406,-874 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge32"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title607">main.main._domain_constraints-&gt;main.main._schemata</title>
+       id="title609">main.main._domain_constraints-&gt;main.main._schemata</title>
     <path
-       id="path609"
-       d="M 442,-1053 C 382,-1183 305,-1415 421,-1560 C 458,-1606 620,-1629 722,-1640"
+       id="path611"
+       d="M 442,-1062 C 382,-1194 303,-1431 421,-1578 C 458,-1624 620,-1647 722,-1658"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon611"
-       points="721.701,-1643.49 732,-1641 722.398,-1636.52 721.701,-1643.49 "
+       id="polygon613"
+       points="721.701,-1661.49 732,-1659 722.398,-1654.52 721.701,-1661.49 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge30"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title614">main.main._domain_constraints-&gt;main.main._domains</title>
+       id="title616">main.main._domain_constraints-&gt;main.main._domains</title>
     <path
-       id="path616"
-       d="M 502,-1053 C 505,-1080 508,-1110 512,-1142"
+       id="path618"
+       d="M 501,-1062 C 505,-1092 508,-1125 512,-1160"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon618"
-       points="508.522,-1142.4 513,-1152 515.488,-1141.7 508.522,-1142.4 "
+       id="polygon620"
+       points="508.522,-1160.4 513,-1170 515.488,-1159.7 508.522,-1160.4 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node34"
-     transform="matrix(1.33333,0,0,1.33333,-130.67006,2598.3833)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title621">main.main._parameters</title>
+       id="title623">main.main._parameters</title>
     <polygon
-       id="polygon623"
-       points="1267,-1010 1267,-1030 1403,-1030 1403,-1010 1267,-1010 "
+       id="polygon625"
+       points="1267,-1019 1267,-1039 1403,-1039 1403,-1019 1267,-1019 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text625"
+       id="text627"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1015.33"
+       y="-1024.33"
        x="1335">_parameters</text>
     <polygon
-       id="polygon627"
-       points="1267,-1010 1267,-1030 1403,-1030 1403,-1010 1267,-1010 "
+       id="polygon629"
+       points="1267,-1019 1267,-1039 1403,-1039 1403,-1019 1267,-1019 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text629"
+       id="text631"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-996.33301"
+       y="-1005.33"
        x="1314">specific_catalog</text>
     <text
-       id="text631"
+       id="text633"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-978.33301"
+       y="-987.33301"
        x="1314.5">specific_schema</text>
     <text
-       id="text633"
+       id="text635"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-960.33301"
+       y="-969.33301"
        x="1309">specific_name</text>
     <text
-       id="text635"
+       id="text637"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-942.33301"
+       y="-951.33301"
        x="1315">ordinal_position</text>
     <text
-       id="text637"
+       id="text639"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-924.33301"
+       y="-933.33301"
        x="1316">parameter_mode</text>
     <text
-       id="text639"
+       id="text641"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-906.33301"
+       y="-915.33301"
        x="1315.5">parameter_name</text>
     <text
-       id="text641"
+       id="text643"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-888.33301"
+       y="-897.33301"
        x="1296">data_type</text>
     <polygon
-       id="polygon643"
-       points="1266,-883 1266,-1031 1404,-1031 1404,-883 1266,-883 "
+       id="polygon645"
+       points="1266,-892 1266,-1040 1404,-1040 1404,-892 1266,-892 "
        style="fill:none;stroke:#000000" />
   </g>
-  <path
-     style="fill:none;stroke:#000000;stroke-width:1.51578224"
-     d="M 1675.3776,1214.1743 C 1661.2203,1112.0936 1644.5646,982.42372 1627.0761,858.27171"
-     id="path648" />
-  <polygon
-     style="fill:#000000;stroke:#000000"
-     points="1238.86,-1162.44 1238,-1173 1245.26,-1165.28 1238.86,-1162.44 "
-     id="polygon650"
-     transform="matrix(1.2798233,0.3739268,-0.3739268,1.2798233,-399.21721,1883.417)" />
+  <g
+     class="edge"
+     id="edge34"
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
+    <title
+       id="title648">main.main._parameters-&gt;main.main._routines</title>
+    <path
+       id="path650"
+       d="M 1301,-1044 C 1284,-1082 1263,-1131 1242,-1178"
+       style="fill:none;stroke:#000000" />
+    <polygon
+       id="polygon652"
+       points="1238.86,-1176.44 1238,-1187 1245.26,-1179.28 1238.86,-1176.44 "
+       style="fill:#000000;stroke:#000000" />
+  </g>
   <g
      class="node"
      id="node36"
-     transform="matrix(1.33333,0,0,1.33333,-29.010968,2386.8225)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title653">main.main._routine_columns</title>
+       id="title655">main.main._routine_columns</title>
     <polygon
-       id="polygon655"
-       points="1081,-1001 1081,-1021 1231,-1021 1231,-1001 1081,-1001 "
+       id="polygon657"
+       points="1081,-1010 1081,-1030 1231,-1030 1231,-1010 1081,-1010 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text657"
+       id="text659"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-1006.33"
+       y="-1015.33"
        x="1156">_routine_columns</text>
     <polygon
-       id="polygon659"
-       points="1081,-1001 1081,-1021 1231,-1021 1231,-1001 1081,-1001 "
+       id="polygon661"
+       points="1081,-1010 1081,-1030 1231,-1030 1231,-1010 1081,-1010 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text661"
+       id="text663"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-987.33301"
+       y="-996.33301"
        x="1128">specific_catalog</text>
     <text
-       id="text663"
+       id="text665"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-969.33301"
+       y="-978.33301"
        x="1128.5">specific_schema</text>
     <text
-       id="text665"
+       id="text667"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-951.33301"
+       y="-960.33301"
        x="1123">specific_name</text>
     <text
-       id="text667"
+       id="text669"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-933.33301"
+       y="-942.33301"
        x="1122.5">column_name</text>
     <text
-       id="text669"
+       id="text671"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-915.33301"
+       y="-924.33301"
        x="1129">ordinal_position</text>
     <text
-       id="text671"
+       id="text673"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-897.33301"
+       y="-906.33301"
        x="1110">data_type</text>
     <polygon
-       id="polygon673"
-       points="1080,-892 1080,-1022 1232,-1022 1232,-892 1080,-892 "
+       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,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title676">main.main._routine_columns-&gt;main.main._routines</title>
+       id="title678">main.main._routine_columns-&gt;main.main._routines</title>
     <path
-       id="path678"
-       d="M 1156,-1026 C 1156,-1058 1156,-1099 1156,-1142"
+       id="path680"
+       d="M 1156,-1035 C 1156,-1070 1156,-1114 1156,-1160"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon680"
-       points="1152.5,-1142 1156,-1152 1159.5,-1142 1152.5,-1142 "
+       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,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title718">main.main._columns</title>
+       id="title720">main.main._columns</title>
     <polygon
-       id="polygon720"
+       id="polygon722"
        points="635,-737 635,-757 827,-757 827,-737 635,-737 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text722"
+       id="text724"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-742.33301"
        x="731">_columns</text>
     <polygon
-       id="polygon724"
+       id="polygon726"
        points="635,-737 635,-757 827,-757 827,-737 635,-737 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text726"
+       id="text728"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-723.33301"
        x="674">table_catalog</text>
     <text
-       id="text728"
+       id="text730"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-705.33301"
        x="674.5">table_schema</text>
     <text
-       id="text730"
+       id="text732"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-687.33301"
        x="669">table_name</text>
     <text
-       id="text732"
+       id="text734"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-669.33301"
        x="676.5">column_name</text>
     <text
-       id="text734"
+       id="text736"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-651.33301"
        x="683">ordinal_position</text>
     <text
-       id="text736"
+       id="text738"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-633.33301"
        x="681">column_default</text>
     <text
-       id="text738"
+       id="text740"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-615.33301"
        x="667.5">is_nullable</text>
     <text
-       id="text740"
+       id="text742"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-597.33301"
        x="664">data_type</text>
     <text
-       id="text742"
+       id="text744"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-579.33301"
        x="684">array_dimension</text>
     <text
-       id="text744"
+       id="text746"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-561.33301"
        x="674.5">element_type</text>
     <text
-       id="text746"
+       id="text748"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-543.33301"
        x="652.5">gtype</text>
     <text
-       id="text748"
+       id="text750"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-525.33301"
        x="715.5">character_maximum_length</text>
     <text
-       id="text750"
+       id="text752"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-507.33301"
        x="700.5">character_octet_length</text>
     <text
-       id="text752"
+       id="text754"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-489.33301"
        x="689">numeric_precision</text>
     <text
-       id="text754"
+       id="text756"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-471.33301"
        x="677">numeric_scale</text>
     <text
-       id="text756"
+       id="text758"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-453.33301"
        x="690">datetime_precision</text>
     <text
-       id="text758"
+       id="text760"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-435.33301"
        x="697">character_set_catalog</text>
     <text
-       id="text760"
+       id="text762"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-417.33301"
        x="697.5">character_set_schema</text>
     <text
-       id="text762"
+       id="text764"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-399.33301"
        x="692">character_set_name</text>
     <text
-       id="text764"
+       id="text766"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-381.33301"
        x="685">collation_catalog</text>
     <text
-       id="text766"
+       id="text768"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-363.33301"
        x="685.5">collation_schema</text>
     <text
-       id="text768"
+       id="text770"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-345.33301"
        x="680">collation_name</text>
     <text
-       id="text770"
+       id="text772"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-327.33301"
        x="651">extra</text>
     <text
-       id="text772"
+       id="text774"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-309.33301"
        x="672">is_updatable</text>
     <text
-       id="text774"
+       id="text776"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-291.33301"
        x="690">column_comments</text>
     <polygon
-       id="polygon776"
+       id="polygon778"
        points="634,-286 634,-758 828,-758 828,-286 634,-286 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge38"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title779">main.main._columns-&gt;main.main._tables</title>
+       id="title781">main.main._columns-&gt;main.main._tables</title>
     <path
-       id="path781"
-       d="M 836,-744 C 839,-750 842,-756 845,-762 C 853,-780 872,-816 890,-852"
+       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"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon783"
-       points="887.084,-853.958 895,-861 893.203,-850.559 887.084,-853.958 "
+       id="polygon785"
+       points="890.74,-862.283 898,-870 897.137,-859.44 890.74,-862.283 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge42"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title786">main.main._columns-&gt;main.main._collations</title>
+       id="title788">main.main._columns-&gt;main.main._collations</title>
     <path
-       id="path788"
-       d="M 639,-762 C 636,-774 633,-786 631,-798 C 607,-938 599,-979 631,-1116 C 636,-1134 642,-1136 649,-1152 C 669,-1194 691,-1240 710,-1278"
+       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"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon790"
-       points="706.74,-1279.28 714,-1287 713.137,-1276.44 706.74,-1279.28 "
+       id="polygon792"
+       points="706.74,-1297.28 714,-1305 713.137,-1294.44 706.74,-1297.28 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge40"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title793">main.main._columns-&gt;main.main._character_sets</title>
+       id="title795">main.main._columns-&gt;main.main._character_sets</title>
     <path
-       id="path795"
-       d="M 740,-762 C 741,-793 743,-823 744,-851"
+       id="path797"
+       d="M 740,-762 C 741,-796 742,-830 743,-860"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon797"
-       points="740.5,-851 744,-861 747.5,-851 740.5,-851 "
+       id="polygon799"
+       points="739.5,-860 743,-870 746.5,-860 739.5,-860 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node43"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title800">main.main._referential_constraints</title>
+       id="title802">main.main._referential_constraints</title>
     <polygon
-       id="polygon802"
+       id="polygon804"
        points="1043,-212 1043,-232 1231,-232 1231,-212 1043,-212 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text804"
+       id="text806"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-217.33299"
        x="1137">_referential_constraints</text>
     <polygon
-       id="polygon806"
+       id="polygon808"
        points="1043,-212 1043,-232 1231,-232 1231,-212 1043,-212 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text808"
+       id="text810"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-198.33299"
        x="1082">table_catalog</text>
     <text
-       id="text810"
+       id="text812"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-180.33299"
        x="1082.5">table_schema</text>
     <text
-       id="text812"
+       id="text814"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-162.33299"
        x="1077">table_name</text>
     <text
-       id="text814"
+       id="text816"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-144.33299"
        x="1091">constraint_name</text>
     <text
-       id="text816"
+       id="text818"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-126.333"
        x="1093.5">ref_table_catalog</text>
     <text
-       id="text818"
+       id="text820"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-108.333"
        x="1094">ref_table_schema</text>
     <text
-       id="text820"
+       id="text822"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-90.333298"
        x="1088.5">ref_table_name</text>
     <text
-       id="text822"
+       id="text824"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-72.333298"
        x="1102.5">ref_constraint_name</text>
     <text
-       id="text824"
+       id="text826"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-54.333302"
        x="1083.5">match_option</text>
     <text
-       id="text826"
+       id="text828"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-36.333302"
        x="1078">update_rule</text>
     <text
-       id="text828"
+       id="text830"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-18.3333"
        x="1076">delete_rule</text>
     <polygon
-       id="polygon830"
+       id="polygon832"
        points="1042,-13 1042,-233 1232,-233 1232,-13 1042,-13 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge44"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title833">main.main._referential_constraints-&gt;main.main._table_constraints</title>
+       id="title835">main.main._referential_constraints-&gt;main.main._table_constraints</title>
     <path
-       id="path835"
+       id="path837"
        d="M 1067,-237 C 1058,-252 1050,-267 1043,-282 C 1023,-322 1003,-368 987,-408"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon837"
+       id="polygon839"
        points="983.863,-406.44 983,-417 990.26,-409.283 983.863,-406.44 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node45"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title840">main.main._key_column_usage</title>
+       id="title842">main.main._key_column_usage</title>
     <polygon
-       id="polygon842"
+       id="polygon844"
        points="653,-167 653,-187 809,-187 809,-167 653,-167 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text844"
+       id="text846"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-172.33299"
        x="731">_key_column_usage</text>
     <polygon
-       id="polygon846"
+       id="polygon848"
        points="653,-167 653,-187 809,-187 809,-167 653,-167 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text848"
+       id="text850"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-153.33299"
        x="692">table_catalog</text>
     <text
-       id="text850"
+       id="text852"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-135.33299"
        x="692.5">table_schema</text>
     <text
-       id="text852"
+       id="text854"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-117.333"
        x="687">table_name</text>
     <text
-       id="text854"
+       id="text856"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-99.333298"
        x="701">constraint_name</text>
     <text
-       id="text856"
+       id="text858"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-81.333298"
        x="694.5">column_name</text>
     <text
-       id="text858"
+       id="text860"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-63.333302"
        x="701">ordinal_position</text>
     <polygon
-       id="polygon860"
+       id="polygon862"
        points="652,-58 652,-188 810,-188 810,-58 652,-58 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge46"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title863">main.main._key_column_usage-&gt;main.main._table_constraints</title>
+       id="title865">main.main._key_column_usage-&gt;main.main._table_constraints</title>
     <path
-       id="path865"
+       id="path867"
        d="M 786,-192 C 806,-219 828,-251 845,-282 C 866,-322 886,-367 902,-408"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon867"
+       id="polygon869"
        points="898.74,-409.283 906,-417 905.137,-406.44 898.74,-409.283 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge48"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title870">main.main._key_column_usage-&gt;main.main._columns</title>
+       id="title872">main.main._key_column_usage-&gt;main.main._columns</title>
     <path
-       id="path872"
+       id="path874"
        d="M 731,-192 C 731,-215 731,-243 731,-272"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon874"
+       id="polygon876"
        points="727.5,-272 731,-282 734.5,-272 727.5,-272 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node48"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title877">main.main._check_column_usage</title>
+       id="title879">main.main._check_column_usage</title>
     <polygon
-       id="polygon879"
+       id="polygon881"
        points="845,-158 845,-178 1007,-178 1007,-158 845,-158 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text881"
+       id="text883"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-163.33299"
        x="926">_check_column_usage</text>
     <polygon
-       id="polygon883"
+       id="polygon885"
        points="845,-158 845,-178 1007,-178 1007,-158 845,-158 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text885"
+       id="text887"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-144.33299"
        x="884">table_catalog</text>
     <text
-       id="text887"
+       id="text889"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-126.333"
        x="884.5">table_schema</text>
     <text
-       id="text889"
+       id="text891"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-108.333"
        x="879">table_name</text>
     <text
-       id="text891"
+       id="text893"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-90.333298"
        x="893">constraint_name</text>
     <text
-       id="text893"
+       id="text895"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
        y="-72.333298"
        x="886.5">column_name</text>
     <polygon
-       id="polygon895"
+       id="polygon897"
        points="844,-67 844,-179 1008,-179 1008,-67 844,-67 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge50"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title898">main.main._check_column_usage-&gt;main.main._table_constraints</title>
+       id="title900">main.main._check_column_usage-&gt;main.main._table_constraints</title>
     <path
-       id="path900"
+       id="path902"
        d="M 929,-183 C 932,-242 936,-333 939,-407"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon902"
+       id="polygon904"
        points="935.5,-407 939,-417 942.5,-407 935.5,-407 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge52"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title905">main.main._check_column_usage-&gt;main.main._columns</title>
+       id="title907">main.main._check_column_usage-&gt;main.main._columns</title>
     <path
-       id="path907"
+       id="path909"
        d="M 895,-183 C 880,-213 861,-249 845,-282 C 844,-285 842,-288 841,-291"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon909"
+       id="polygon911"
        points="837.797,-289.559 836,-300 843.916,-292.958 837.797,-289.559 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="node"
      id="node51"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title912">main.main._view_column_usage</title>
+       id="title914">main.main._view_column_usage</title>
     <polygon
-       id="polygon914"
-       points="468,-149 468,-169 616,-169 616,-149 468,-149 "
+       id="polygon916"
+       points="468,-176 468,-196 616,-196 616,-176 468,-176 "
        style="fill:#808080;stroke:#808080" />
     <text
-       id="text916"
+       id="text918"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-154.33299"
+       y="-181.33299"
        x="542">_view_column_usage</text>
     <polygon
-       id="polygon918"
-       points="468,-149 468,-169 616,-169 616,-149 468,-149 "
+       id="polygon920"
+       points="468,-176 468,-196 616,-196 616,-176 468,-176 "
        style="fill:none;stroke:#000000" />
     <text
-       id="text920"
+       id="text922"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-135.33299"
+       y="-162.33299"
        x="507">view_catalog</text>
     <text
-       id="text922"
+       id="text924"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-117.333"
+       y="-144.33299"
        x="507.5">view_schema</text>
     <text
-       id="text924"
+       id="text926"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-99.333298"
+       y="-126.333"
        x="502">view_name</text>
     <text
-       id="text926"
+       id="text928"
        style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
-       y="-81.333298"
+       y="-108.333"
+       x="507">table_catalog</text>
+    <text
+       id="text930"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-90.333298"
+       x="507.5">table_schema</text>
+    <text
+       id="text932"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-72.333298"
+       x="502">table_name</text>
+    <text
+       id="text934"
+       style="font-size:14.17500019px;text-anchor:middle;font-family:Nimbus Roman No9 L"
+       y="-54.333302"
        x="509.5">column_name</text>
     <polygon
-       id="polygon928"
-       points="467,-76 467,-170 617,-170 617,-76 467,-76 "
+       id="polygon936"
+       points="467,-49 467,-197 617,-197 617,-49 467,-49 "
        style="fill:none;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge54"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title931">main.main._view_column_usage-&gt;main.main._views</title>
+       id="title939">main.main._view_column_usage-&gt;main.main._views</title>
     <path
-       id="path933"
-       d="M 542,-174 C 542,-242 542,-363 541,-443"
+       id="path941"
+       d="M 542,-201 C 542,-272 542,-373 541,-443"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon935"
+       id="polygon943"
        points="537.5,-443 541,-453 544.5,-443 537.5,-443 "
        style="fill:#000000;stroke:#000000" />
   </g>
   <g
      class="edge"
      id="edge56"
-     transform="matrix(1.33333,0,0,1.33333,5.33332,2381.3274)">
+     transform="matrix(1.33333,0,0,1.33333,5.33332,2405.3273)">
     <title
-       id="title938">main.main._view_column_usage-&gt;main.main._columns</title>
+       id="title946">main.main._view_column_usage-&gt;main.main._columns</title>
     <path
-       id="path940"
-       d="M 566,-174 C 581,-205 600,-247 622,-291"
+       id="path948"
+       d="M 579,-201 C 592,-228 606,-259 622,-292"
        style="fill:none;stroke:#000000" />
     <polygon
-       id="polygon942"
-       points="618.74,-292.283 626,-300 625.137,-289.44 618.74,-292.283 "
+       id="polygon950"
+       points="618.74,-293.283 626,-301 625.137,-290.44 618.74,-293.283 "
        style="fill:#000000;stroke:#000000" />
   </g>
 </svg>

Modified: trunk/libgda/information_schema.xml
==============================================================================
--- trunk/libgda/information_schema.xml	(original)
+++ trunk/libgda/information_schema.xml	Mon Mar 24 16:41:50 2008
@@ -239,9 +239,9 @@
     <column name="routine_catalog" nullok="TRUE"/>
     <column name="routine_schema" nullok="TRUE"/>
     <column name="routine_name"/>
-    <column name="routine_type" nullok="TRUE"/>
+    <column name="routine_type" nullok="TRUE" descr="FUNCTION, PROCEDURE, AGGREGATE"/>
     <column name="return_type" nullok="TRUE"/>
-    <column name="returns_set" type="boolean"/>
+    <column name="returns_set" type="boolean" descr="True if function returns a set (i.e., multiple values of the specified data type)"/>
     <column name="routine_body" nullok="TRUE"/>
     <column name="routine_definition" nullok="TRUE"/>
     <column name="external_name" nullok="TRUE"/>

Modified: trunk/libgda/sql-parser/LemonPatch
==============================================================================
--- trunk/libgda/sql-parser/LemonPatch	(original)
+++ trunk/libgda/sql-parser/LemonPatch	Mon Mar 24 16:41:50 2008
@@ -1,6 +1,6 @@
---- lemon.c
+--- lemon.c.3.5.7
 +++ lemon.c
-@@ -263,6 +263,8 @@
+@@ -266,6 +266,8 @@
    char *vardest;           /* Code for the default non-terminal destructor */
    int  vardestln;          /* Line number for default non-term destructor code*/
    char *filename;          /* Name of the input file */
@@ -9,7 +9,7 @@
    char *outname;           /* Name of the current output file */
    char *tokenprefix;       /* A prefix added to token names in the .h file */
    int nconflict;           /* Number of parsing conflicts */
-@@ -1393,6 +1395,7 @@
+@@ -1402,6 +1404,7 @@
    static int quiet = 0;
    static int statistics = 0;
    static int mhflag = 0;
@@ -17,7 +17,7 @@
    static struct s_options options[] = {
      {OPT_FLAG, "b", (char*)&basisflag, "Print only the basis in report."},
      {OPT_FLAG, "c", (char*)&compress, "Don't compress the action table."},
-@@ -1402,19 +1405,21 @@
+@@ -1411,19 +1414,21 @@
      {OPT_FLAG, "q", (char*)&quiet, "(Quiet) Don't print the report file."},
      {OPT_FLAG, "s", (char*)&statistics,
                                     "Print parser stats to standard output."},
@@ -41,7 +41,7 @@
      exit(1);
    }
    memset(&lem, 0, sizeof(lem));
-@@ -1426,6 +1431,21 @@
+@@ -1435,6 +1440,21 @@
    State_init();
    lem.argv0 = argv[0];
    lem.filename = OptArg(0);
@@ -63,7 +63,7 @@
    lem.basisflag = basisflag;
    Symbol_new("$");
    lem.errsym = Symbol_new("error");
-@@ -2667,12 +2687,12 @@
+@@ -2677,12 +2697,12 @@
    char *name;
    char *cp;
  
@@ -78,7 +78,7 @@
    cp = strrchr(name,'.');
    if( cp ) *cp = 0;
    strcat(name,suffix);
-@@ -3008,7 +3028,6 @@
+@@ -3023,7 +3043,6 @@
  PRIVATE FILE *tplt_open(lemp)
  struct lemon *lemp;
  {
@@ -86,7 +86,7 @@
    char buf[1000];
    FILE *in;
    char *tpltname;
-@@ -3022,20 +3041,20 @@
+@@ -3037,20 +3056,20 @@
    }
    if( access(buf,004)==0 ){
      tpltname = buf;

Modified: trunk/libgda/sql-parser/delimiter.y
==============================================================================
--- trunk/libgda/sql-parser/delimiter.y	(original)
+++ trunk/libgda/sql-parser/delimiter.y	Mon Mar 24 16:41:50 2008
@@ -40,6 +40,7 @@
 #include <libgda/sql-parser/gda-statement-struct-util.h>
 #include <libgda/sql-parser/gda-statement-struct-unknown.h>
 #include <libgda/sql-parser/gda-statement-struct-parts.h>
+#include <assert.h>
 
 #ifdef GDA_DEBUG_NO
 #define DEBUG(format, ...) g_print ("___" format "\n", __VA_ARGS__)

Modified: trunk/libgda/sql-parser/lemon.c
==============================================================================
--- trunk/libgda/sql-parser/lemon.c	(original)
+++ trunk/libgda/sql-parser/lemon.c	Mon Mar 24 16:41:50 2008
@@ -131,6 +131,7 @@
   } assoc;                 /* Associativity if predecence is defined */
   char *firstset;          /* First-set for all rules of this symbol */
   Boolean lambda;          /* True if NT and can generate an empty string */
+  int useCnt;              /* Number of times used */
   char *destructor;        /* Code which executes whenever this symbol is
                            ** popped from the stack during error processing */
   int destructorln;        /* Line number of destructor code */
@@ -191,7 +192,9 @@
     ACCEPT,
     REDUCE,
     ERROR,
-    CONFLICT,                /* Was a reduce, but part of a conflict */
+    SSCONFLICT,              /* A shift/shift conflict */
+    SRCONFLICT,              /* Was a reduce, but part of a conflict */
+    RRCONFLICT,              /* Was a reduce, but part of a conflict */
     SH_RESOLVED,             /* Was a shift.  Precedence resolved conflict */
     RD_RESOLVED,             /* Was reduce.  Precedence resolved conflict */
     NOT_USED                 /* Deleted by compression */
@@ -339,7 +342,7 @@
   if( freelist==0 ){
     int i;
     int amt = 100;
-    freelist = (struct action *)malloc( sizeof(struct action)*amt );
+    freelist = (struct action *)calloc(amt, sizeof(struct action));
     if( freelist==0 ){
       fprintf(stderr,"Unable to allocate memory for a new parser action.");
       exit(1);
@@ -362,8 +365,10 @@
 ){
   int rc;
   rc = ap1->sp->index - ap2->sp->index;
-  if( rc==0 ) rc = (int)ap1->type - (int)ap2->type;
   if( rc==0 ){
+    rc = (int)ap1->type - (int)ap2->type;
+  }
+  if( rc==0 && ap1->type==REDUCE ){
     rc = ap1->x.rp->index - ap2->x.rp->index;
   }
   return rc;
@@ -439,7 +444,7 @@
 
 /* Allocate a new acttab structure */
 acttab *acttab_alloc(void){
-  acttab *p = malloc( sizeof(*p) );
+  acttab *p = calloc( 1, sizeof(*p) );
   if( p==0 ){
     fprintf(stderr,"Unable to allocate memory for a new acttab.");
     exit(1);
@@ -1012,7 +1017,7 @@
   int errcnt = 0;
   assert( apx->sp==apy->sp );  /* Otherwise there would be no conflict */
   if( apx->type==SHIFT && apy->type==SHIFT ){
-    apy->type = CONFLICT;
+    apy->type = SSCONFLICT;
     errcnt++;
   }
   if( apx->type==SHIFT && apy->type==REDUCE ){
@@ -1020,7 +1025,7 @@
     spy = apy->x.rp->precsym;
     if( spy==0 || spx->prec<0 || spy->prec<0 ){
       /* Not enough precedence information. */
-      apy->type = CONFLICT;
+      apy->type = SRCONFLICT;
       errcnt++;
     }else if( spx->prec>spy->prec ){    /* Lower precedence wins */
       apy->type = RD_RESOLVED;
@@ -1032,7 +1037,7 @@
       apx->type = SH_RESOLVED;
     }else{
       assert( spx->prec==spy->prec && spx->assoc==NONE );
-      apy->type = CONFLICT;
+      apy->type = SRCONFLICT;
       errcnt++;
     }
   }else if( apx->type==REDUCE && apy->type==REDUCE ){
@@ -1040,7 +1045,7 @@
     spy = apy->x.rp->precsym;
     if( spx==0 || spy==0 || spx->prec<0 ||
     spy->prec<0 || spx->prec==spy->prec ){
-      apy->type = CONFLICT;
+      apy->type = RRCONFLICT;
       errcnt++;
     }else if( spx->prec>spy->prec ){
       apy->type = RD_RESOLVED;
@@ -1051,10 +1056,14 @@
     assert( 
       apx->type==SH_RESOLVED ||
       apx->type==RD_RESOLVED ||
-      apx->type==CONFLICT ||
+      apx->type==SSCONFLICT ||
+      apx->type==SRCONFLICT ||
+      apx->type==RRCONFLICT ||
       apy->type==SH_RESOLVED ||
       apy->type==RD_RESOLVED ||
-      apy->type==CONFLICT
+      apy->type==SSCONFLICT ||
+      apy->type==SRCONFLICT ||
+      apy->type==RRCONFLICT
     );
     /* The REDUCE/SHIFT case cannot happen because SHIFTs come before
     ** REDUCEs on the list.  If we reach this point it must be because
@@ -1080,7 +1089,7 @@
   if( freelist==0 ){
     int i;
     int amt = 3;
-    freelist = (struct config *)malloc( sizeof(struct config)*amt );
+    freelist = (struct config *)calloc( amt, sizeof(struct config) );
     if( freelist==0 ){
       fprintf(stderr,"Unable to allocate memory for a new configuration.");
       exit(1);
@@ -1449,6 +1458,7 @@
   lem.basisflag = basisflag;
   Symbol_new("$");
   lem.errsym = Symbol_new("error");
+  lem.errsym->useCnt = 0;
 
   /* Parse the input file */
   Parse(&lem);
@@ -1474,7 +1484,7 @@
     Reprint(&lem);
   }else{
     /* Initialize the size for all follow and first sets */
-    SetSize(lem.nterminal);
+    SetSize(lem.nterminal+1);
 
     /* Find the precedence for every production rule (that has one) */
     FindRulePrecedences(&lem);
@@ -2111,8 +2121,8 @@
     case IN_RHS:
       if( x[0]=='.' ){
         struct rule *rp;
-        rp = (struct rule *)malloc( sizeof(struct rule) + 
-             sizeof(struct symbol*)*psp->nrhs + sizeof(char*)*psp->nrhs );
+        rp = (struct rule *)calloc( sizeof(struct rule) + 
+             sizeof(struct symbol*)*psp->nrhs + sizeof(char*)*psp->nrhs, 1);
         if( rp==0 ){
           ErrorMsg(psp->filename,psp->tokenlineno,
             "Can't allocate enough memory for this rule.");
@@ -2148,7 +2158,7 @@
       }else if( isalpha(x[0]) ){
         if( psp->nrhs>=MAXRHS ){
           ErrorMsg(psp->filename,psp->tokenlineno,
-            "Too many symbols on RHS or rule beginning at \"%s\".",
+            "Too many symbols on RHS of rule beginning at \"%s\".",
             x);
           psp->errorcnt++;
           psp->state = RESYNC_AFTER_RULE_ERROR;
@@ -2161,11 +2171,11 @@
         struct symbol *msp = psp->rhs[psp->nrhs-1];
         if( msp->type!=MULTITERMINAL ){
           struct symbol *origsp = msp;
-          msp = malloc(sizeof(*msp));
+          msp = calloc(1,sizeof(*msp));
           memset(msp, 0, sizeof(*msp));
           msp->type = MULTITERMINAL;
           msp->nsubsym = 1;
-          msp->subsym = malloc(sizeof(struct symbol*));
+          msp->subsym = calloc(1,sizeof(struct symbol*));
           msp->subsym[0] = origsp;
           msp->name = origsp->name;
           psp->rhs[psp->nrhs-1] = msp;
@@ -2618,7 +2628,7 @@
   if( plink_freelist==0 ){
     int i;
     int amt = 100;
-    plink_freelist = (struct plink *)malloc( sizeof(struct plink)*amt );
+    plink_freelist = (struct plink *)calloc( amt, sizeof(struct plink) );
     if( plink_freelist==0 ){
       fprintf(stderr,
       "Unable to allocate memory for a new follow-set propagation link.\n");
@@ -2844,10 +2854,15 @@
     case ERROR:
       fprintf(fp,"%*s error",indent,ap->sp->name);
       break;
-    case CONFLICT:
+    case SRCONFLICT:
+    case RRCONFLICT:
       fprintf(fp,"%*s reduce %-3d ** Parsing conflict **",
         indent,ap->sp->name,ap->x.rp->index);
       break;
+    case SSCONFLICT:
+      fprintf(fp,"%*s shift  %d ** Parsing conflict **", 
+        indent,ap->sp->name,ap->x.stp->statenum);
+      break;
     case SH_RESOLVED:
     case RD_RESOLVED:
     case NOT_USED:
@@ -3355,7 +3370,7 @@
 
   /* Allocate and initialize types[] and allocate stddt[] */
   arraysize = lemp->nsymbol * 2;
-  types = (char**)malloc( arraysize * sizeof(char*) );
+  types = (char**)calloc( arraysize, sizeof(char*) );
   for(i=0; i<arraysize; i++) types[i] = 0;
   maxdtlength = 0;
   if( lemp->vartype ){
@@ -3436,7 +3451,9 @@
     fprintf(out,"  %s yy%d;\n",types[i],i+1); lineno++;
     free(types[i]);
   }
-  fprintf(out,"  int yy%d;\n",lemp->errsym->dtnum); lineno++;
+  if( lemp->errsym->useCnt ){
+    fprintf(out,"  int yy%d;\n",lemp->errsym->dtnum); lineno++;
+  }
   free(stddt);
   free(types);
   fprintf(out,"} YYMINORTYPE;\n"); lineno++;
@@ -3486,6 +3503,25 @@
   return p2->nAction - p1->nAction;
 }
 
+/*
+** Write text on "out" that describes the rule "rp".
+*/
+static void writeRuleText(FILE *out, struct rule *rp){
+  int j;
+  fprintf(out,"%s ::=", rp->lhs->name);
+  for(j=0; j<rp->nrhs; j++){
+    struct symbol *sp = rp->rhs[j];
+    fprintf(out," %s", sp->name);
+    if( sp->type==MULTITERMINAL ){
+      int k;
+      for(k=1; k<sp->nsubsym; k++){
+        fprintf(out,"|%s",sp->subsym[k]->name);
+      }
+    }
+  }
+}
+
+
 /* Generate C source code for the parser */
 void ReportTable(lemp, mhflag)
 struct lemon *lemp;
@@ -3581,8 +3617,10 @@
   }
   fprintf(out,"#define YYNSTATE %d\n",lemp->nstate);  lineno++;
   fprintf(out,"#define YYNRULE %d\n",lemp->nrule);  lineno++;
-  fprintf(out,"#define YYERRORSYMBOL %d\n",lemp->errsym->index);  lineno++;
-  fprintf(out,"#define YYERRSYMDT yy%d\n",lemp->errsym->dtnum);  lineno++;
+  if( lemp->errsym->useCnt ){
+    fprintf(out,"#define YYERRORSYMBOL %d\n",lemp->errsym->index);  lineno++;
+    fprintf(out,"#define YYERRSYMDT yy%d\n",lemp->errsym->dtnum);  lineno++;
+  }
   if( lemp->has_fallback ){
     fprintf(out,"#define YYFALLBACK 1\n");  lineno++;
   }
@@ -3601,7 +3639,7 @@
   */
 
   /* Compute the actions on all states and count them up */
-  ax = malloc( sizeof(ax[0])*lemp->nstate*2 );
+  ax = calloc(lemp->nstate*2, sizeof(ax[0]));
   if( ax==0 ){
     fprintf(stderr,"malloc failed\n");
     exit(1);
@@ -3781,17 +3819,8 @@
   */
   for(i=0, rp=lemp->rule; rp; rp=rp->next, i++){
     assert( rp->index==i );
-    fprintf(out," /* %3d */ \"%s ::=", i, rp->lhs->name);
-    for(j=0; j<rp->nrhs; j++){
-      struct symbol *sp = rp->rhs[j];
-      fprintf(out," %s", sp->name);
-      if( sp->type==MULTITERMINAL ){
-        int k;
-        for(k=1; k<sp->nsubsym; k++){
-          fprintf(out,"|%s",sp->subsym[k]->name);
-        }
-      }
-    }
+    fprintf(out," /* %3d */ \"", i);
+    writeRuleText(out, rp);
     fprintf(out,"\",\n"); lineno++;
   }
   tplt_xfer(lemp->name,in,out,&lineno);
@@ -3804,7 +3833,8 @@
     for(i=0; i<lemp->nsymbol; i++){
       struct symbol *sp = lemp->symbols[i];
       if( sp==0 || sp->type!=TERMINAL ) continue;
-      fprintf(out,"    case %d:\n",sp->index); lineno++;
+      fprintf(out,"    case %d: /* %s */\n",
+              sp->index, sp->name); lineno++;
     }
     for(i=0; i<lemp->nsymbol && lemp->symbols[i]->type!=TERMINAL; i++);
     if( i<lemp->nsymbol ){
@@ -3818,7 +3848,8 @@
       struct symbol *sp = lemp->symbols[i];
       if( sp==0 || sp->type==TERMINAL ||
           sp->index<=0 || sp->destructor!=0 ) continue;
-      fprintf(out,"    case %d:\n",sp->index); lineno++;
+      fprintf(out,"    case %d: /* %s */\n",
+              sp->index, sp->name); lineno++;
       dflt_sp = sp;
     }
     if( dflt_sp!=0 ){
@@ -3829,7 +3860,8 @@
   for(i=0; i<lemp->nsymbol; i++){
     struct symbol *sp = lemp->symbols[i];
     if( sp==0 || sp->type==TERMINAL || sp->destructor==0 ) continue;
-    fprintf(out,"    case %d:\n",sp->index); lineno++;
+    fprintf(out,"    case %d: /* %s */\n",
+            sp->index, sp->name); lineno++;
 
     /* Combine duplicate destructors into a single case */
     for(j=i+1; j<lemp->nsymbol; j++){
@@ -3837,7 +3869,8 @@
       if( sp2 && sp2->type!=TERMINAL && sp2->destructor
           && sp2->dtnum==sp->dtnum
           && strcmp(sp->destructor,sp2->destructor)==0 ){
-         fprintf(out,"    case %d:\n",sp2->index); lineno++;
+         fprintf(out,"    case %d: /* %s */\n",
+                 sp2->index, sp2->name); lineno++;
          sp2->destructor = 0;
       }
     }
@@ -3868,10 +3901,14 @@
   for(rp=lemp->rule; rp; rp=rp->next){
     struct rule *rp2;
     if( rp->code==0 ) continue;
-    fprintf(out,"      case %d:\n",rp->index); lineno++;
+    fprintf(out,"      case %d: /* ", rp->index);
+    writeRuleText(out, rp);
+    fprintf(out, " */\n"); lineno++;
     for(rp2=rp->next; rp2; rp2=rp2->next){
       if( rp2->code==rp->code ){
-        fprintf(out,"      case %d:\n",rp2->index); lineno++;
+        fprintf(out,"      case %d: /* ", rp2->index);
+        writeRuleText(out, rp2);
+        fprintf(out," */\n"); lineno++;
         rp2->code = 0;
       }
     }
@@ -4072,13 +4109,11 @@
 /* Allocate a new set */
 char *SetNew(){
   char *s;
-  int i;
-  s = (char*)malloc( size );
+  s = (char*)calloc( size, 1);
   if( s==0 ){
     extern void memory_error();
     memory_error();
   }
-  for(i=0; i<size; i++) s[i] = 0;
   return s;
 }
 
@@ -4096,6 +4131,7 @@
 int e;
 {
   int rv;
+  assert( e>=0 && e<size );
   rv = s[e];
   s[e] = 1;
   return !rv;
@@ -4285,7 +4321,7 @@
 
   sp = Symbol_find(x);
   if( sp==0 ){
-    sp = (struct symbol *)malloc( sizeof(struct symbol) );
+    sp = (struct symbol *)calloc(1, sizeof(struct symbol) );
     MemoryCheck(sp);
     sp->name = Strsafe(x);
     sp->type = isupper(*x) ? TERMINAL : NONTERMINAL;
@@ -4297,8 +4333,10 @@
     sp->lambda = LEMON_FALSE;
     sp->destructor = 0;
     sp->datatype = 0;
+    sp->useCnt = 0;
     Symbol_insert(sp,sp->name);
   }
+  sp->useCnt++;
   return sp;
 }
 
@@ -4468,7 +4506,7 @@
   int i,size;
   if( x2a==0 ) return 0;
   size = x2a->count;
-  array = (struct symbol **)malloc( sizeof(struct symbol *)*size );
+  array = (struct symbol **)calloc(size, sizeof(struct symbol *));
   if( array ){
     for(i=0; i<size; i++) array[i] = x2a->tbl[i].data;
   }
@@ -4519,7 +4557,7 @@
 struct state *State_new()
 {
   struct state *new;
-  new = (struct state *)malloc( sizeof(struct state) );
+  new = (struct state *)calloc(1, sizeof(struct state) );
   MemoryCheck(new);
   return new;
 }

Modified: trunk/libgda/sql-parser/lempar.c
==============================================================================
--- trunk/libgda/sql-parser/lempar.c	(original)
+++ trunk/libgda/sql-parser/lempar.c	Mon Mar 24 16:41:50 2008
@@ -349,9 +349,7 @@
   if( stateno>YY_SHIFT_MAX || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
     return yy_default[stateno];
   }
-  if( iLookAhead==YYNOCODE ){
-    return YY_NO_ACTION;
-  }
+  assert( iLookAhead!=YYNOCODE );
   i += iLookAhead;
   if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
     if( iLookAhead>0 ){
@@ -402,21 +400,14 @@
   YYCODETYPE iLookAhead     /* The look-ahead token */
 ){
   int i;
-  /* int stateno = pParser->yystack[pParser->yyidx].stateno; */
- 
-  if( stateno>YY_REDUCE_MAX ||
-      (i = yy_reduce_ofst[stateno])==YY_REDUCE_USE_DFLT ){
-    return yy_default[stateno];
-  }
-  if( iLookAhead==YYNOCODE ){
-    return YY_NO_ACTION;
-  }
+  assert( stateno<=YY_REDUCE_MAX );
+  i = yy_reduce_ofst[stateno];
+  assert( i!=YY_REDUCE_USE_DFLT );
+  assert( iLookAhead!=YYNOCODE );
   i += iLookAhead;
-  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
-    return yy_default[stateno];
-  }else{
-    return yy_action[i];
-  }
+  assert( i>=0 && i<YY_SZ_ACTTAB );
+  assert( yy_lookahead[i]==iLookAhead );
+  return yy_action[i];
 }
 
 /*
@@ -562,7 +553,8 @@
     {
       yy_shift(yypParser,yyact,yygoto,&yygotominor);
     }
-  }else if( yyact == YYNSTATE + YYNRULE + 1 ){
+  }else{
+    assert( yyact == YYNSTATE + YYNRULE + 1 );
     yy_accept(yypParser);
   }
 }
@@ -647,7 +639,9 @@
   YYMINORTYPE yyminorunion;
   int yyact;            /* The parser action. */
   int yyendofinput;     /* True if we are at the end of input */
+#ifdef YYERRORSYMBOL
   int yyerrorhit = 0;   /* True if yymajor has invoked an error */
+#endif
   yyParser *yypParser;  /* The parser */
 
   /* (re)initialize the parser, if necessary */
@@ -678,17 +672,17 @@
   do{
     yyact = yy_find_shift_action(yypParser,yymajor);
     if( yyact<YYNSTATE ){
+      assert( !yyendofinput );  /* Impossible to shift the $ token */
       yy_shift(yypParser,yyact,yymajor,&yyminorunion);
       yypParser->yyerrcnt--;
-      if( yyendofinput && yypParser->yyidx>=0 ){
-        yymajor = 0;
-      }else{
-        yymajor = YYNOCODE;
-      }
+      yymajor = YYNOCODE;
     }else if( yyact < YYNSTATE + YYNRULE ){
       yy_reduce(yypParser,yyact-YYNSTATE);
-    }else if( yyact == YY_ERROR_ACTION ){
+    }else{
+      assert( yyact == YY_ERROR_ACTION );
+#ifdef YYERRORSYMBOL
       int yymx;
+#endif
 #ifndef NDEBUG
       if( yyTraceFILE ){
         fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
@@ -769,9 +763,6 @@
       }
       yymajor = YYNOCODE;
 #endif
-    }else{
-      yy_accept(yypParser);
-      yymajor = YYNOCODE;
     }
   }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
   return;

Modified: trunk/libgda/sql-parser/parser.y
==============================================================================
--- trunk/libgda/sql-parser/parser.y	(original)
+++ trunk/libgda/sql-parser/parser.y	Mon Mar 24 16:41:50 2008
@@ -45,6 +45,7 @@
 #include <libgda/sql-parser/gda-statement-struct-select.h>
 #include <libgda/sql-parser/gda-statement-struct-compound.h>
 #include <libgda/sql-parser/gda-statement-struct-parts.h>
+#include <assert.h>
 
 #ifdef GDA_DEBUG_NO
 #define DEBUG(format, ...) g_print ("___" format "\n", __VA_ARGS__)

Modified: trunk/libgda/sqlite/gda-sqlite-meta.c
==============================================================================
--- trunk/libgda/sqlite/gda-sqlite-meta.c	(original)
+++ trunk/libgda/sqlite/gda-sqlite-meta.c	Mon Mar 24 16:41:50 2008
@@ -66,6 +66,10 @@
 	/* I_PRAGMA_FK_LIST */
 	"PRAGMA foreign_key_list (##tblname::string)"
 };
+/* name of the temporary database we don't want */
+#define TMP_DATABASE_NAME "temp"
+/* SQL statement where we can't use a prepared statement since the table to select from is the variable */
+#define SELECT_TABLES_VIEWS "SELECT tbl_name, type, sql FROM %s.sqlite_master where type='table' OR type='view'"
 
 /*
  * predefined statements' GdaStatement
@@ -299,8 +303,8 @@
 _gda_sqlite_meta__collations (GdaServerProvider *prov, GdaConnection *cnc, 
 			      GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {
-	/* How to do it ? Is it a static list ? */
-	TO_IMPLEMENT;
+	/* FIXME: We need to do something similar to what's done with
+	 * functions and aggregates as there is no pragma or API */
 	return TRUE;
 }
 
@@ -310,8 +314,8 @@
 			     const GValue *collation_catalog, const GValue *collation_schema, 
 			     const GValue *collation_name_n)
 {
-	/* How to do it ? Is it a static list ? */
-	TO_IMPLEMENT;
+	/* FIXME: We need to do something similar to what's done with
+	 * functions and aggregates as there is no pragma or API */
 	return TRUE;
 }
 
@@ -319,8 +323,8 @@
 _gda_sqlite_meta__character_sets (GdaServerProvider *prov, GdaConnection *cnc, 
 				  GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {
-	/* How to do it ? Is it a static list ? */
-	TO_IMPLEMENT;
+	/* FIXME: We need to do something similar to what's done with
+	 * functions and aggregates as there is no pragma or API */
 	return TRUE;
 }
 
@@ -330,8 +334,8 @@
 				 const GValue *chset_catalog, const GValue *chset_schema, 
 				 const GValue *chset_name_n)
 {
-	/* How to do it ? Is it a static list ? */
-	TO_IMPLEMENT;
+	/* FIXME: We need to do something similar to what's done with
+	 * functions and aggregates as there is no pragma or API */
 	return TRUE;
 }
 
@@ -339,9 +343,8 @@
 _gda_sqlite_meta__schemata (GdaServerProvider *prov, GdaConnection *cnc, 
 			    GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {
-	/* use same technique as _gda_sqlite_meta_schemata, in a common function */
-	TO_IMPLEMENT;
-	return TRUE;
+	return _gda_sqlite_meta_schemata (prov, cnc, store, context, error,
+					  NULL, NULL);
 }
 
 gboolean 
@@ -371,7 +374,7 @@
 			GValue *v1;
 
 			cstr = g_value_get_string (cvalue);
-			if (!cstr || !strncmp (cstr, "temp", 4))
+			if (!cstr || !strncmp (cstr, TMP_DATABASE_NAME, 4))
 				continue;
 
 			g_value_set_boolean ((v1 = gda_value_new (G_TYPE_BOOLEAN)), FALSE);
@@ -411,11 +414,10 @@
         const gchar *schema_name;
 
         schema_name = g_value_get_string (p_table_schema);
-        if (!strcmp (schema_name, "temp"))
+        if (!strcmp (schema_name, TMP_DATABASE_NAME))
                 return TRUE; /* nothing to do */
 
-        str = g_strdup_printf ("SELECT tbl_name, type, sql FROM %s.sqlite_master where type='table' OR type='view'",
-                               schema_name);
+        str = g_strdup_printf (SELECT_TABLES_VIEWS, schema_name);
         stmt = gda_sql_parser_parse_string (internal_parser, str, NULL, NULL);
         g_free (str);
         g_assert (stmt);
@@ -483,8 +485,50 @@
 _gda_sqlite_meta__tables_views (GdaServerProvider *prov, GdaConnection *cnc, 
 				GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {
-	TO_IMPLEMENT;
-	return TRUE;
+	GdaDataModel *tmpmodel;
+	GdaDataModel *tables_model, *views_model;
+	gboolean retval = TRUE;
+	gint i, nrows;
+
+	tmpmodel = (GdaDataModel *) gda_connection_statement_execute (cnc, internal_stmt[I_PRAGMA_DATABASE_LIST],
+								      NULL, GDA_STATEMENT_MODEL_RANDOM_ACCESS, NULL, error);
+	if (!tmpmodel)
+		return FALSE;
+
+	tables_model = gda_meta_store_create_modify_data_model (store, "_tables");
+	g_assert (tables_model);
+	views_model = gda_meta_store_create_modify_data_model (store, "_views");
+	g_assert (views_model);
+
+	nrows = gda_data_model_get_n_rows (tmpmodel);
+	for (i = 0; i < nrows; i++) {
+		/* iterate through the schemas */
+		const GValue *cvalue = gda_data_model_get_value_at (tmpmodel, 1, i);
+		if (!strcmp (g_value_get_string (cvalue), TMP_DATABASE_NAME))
+			 continue; /* nothing to do */
+
+		if (! fill_tables_views_model (cnc, tables_model, views_model, 
+					       cvalue, NULL, error)) {
+			retval = FALSE;
+			break;
+		}
+	}
+
+	GdaMetaContext c2;
+	c2 = *context; /* copy contents, just because we need to modify @context->table_name */
+	if (retval) {
+		c2.table_name = "_tables";
+		retval = gda_meta_store_modify_with_context (store, &c2, tables_model, error);
+	}
+	if (retval) {
+		c2.table_name = "_views";
+		retval = gda_meta_store_modify_with_context (store, &c2, views_model, error);
+	}
+	g_object_unref (tables_model);
+	g_object_unref (views_model);
+	
+	g_object_unref (tmpmodel);
+	return retval;
 }
 
 gboolean 
@@ -639,8 +683,73 @@
 _gda_sqlite_meta__columns (GdaServerProvider *prov, GdaConnection *cnc, 
 			   GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {
-	TO_IMPLEMENT;
-	return TRUE;
+	GdaDataModel *mod_model, *tmpmodel;
+	gboolean retval = TRUE;
+	gint i, nrows;
+	SqliteConnectionData *cdata;
+	
+	cdata = (SqliteConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
+
+	tmpmodel = (GdaDataModel *) gda_connection_statement_execute (cnc, internal_stmt[I_PRAGMA_DATABASE_LIST],
+								      NULL, GDA_STATEMENT_MODEL_RANDOM_ACCESS, NULL, error);
+	if (!tmpmodel)
+		return FALSE;
+
+	mod_model = gda_meta_store_create_modify_data_model (store, context->table_name);
+	g_assert (mod_model);
+
+	nrows = gda_data_model_get_n_rows (tmpmodel);
+	for (i = 0; i < nrows; i++) {
+		/* iterate through the schemas */
+		GdaDataModel *tables_model;
+		const gchar *schema_name;
+		const GValue *cvalue = gda_data_model_get_value_at (tmpmodel, 1, i);
+
+		schema_name = g_value_get_string (cvalue); 
+		if (!strcmp (schema_name, TMP_DATABASE_NAME))
+			 continue; /* nothing to do */
+		
+		gchar *str;
+		GType col_types[] = {G_TYPE_STRING, G_TYPE_STRING, G_TYPE_NONE};
+		GdaStatement *stmt;
+		
+		str = g_strdup_printf (SELECT_TABLES_VIEWS, schema_name);
+		stmt = gda_sql_parser_parse_string (internal_parser, str, NULL, NULL);
+		g_free (str);
+		g_assert (stmt);
+		tables_model = gda_connection_statement_execute_select_full (cnc, stmt, NULL,
+									     GDA_STATEMENT_MODEL_RANDOM_ACCESS,
+									     col_types, error);
+		g_object_unref (stmt);
+		if (!tables_model) {
+			retval = FALSE;
+			break;
+		}
+
+		gint tnrows, ti;
+		tnrows = gda_data_model_get_n_rows (tables_model);
+		for (ti = 0; ti < tnrows; ti++) {
+			/* iterate through the tables */
+			if (!fill_columns_model (cnc, cdata, mod_model, cvalue, 
+						 gda_data_model_get_value_at (tables_model, 0, ti), 
+						 error)) {
+				retval = FALSE;
+				break;
+			}
+		}
+		g_object_unref (tables_model);
+		if (!retval) 
+			break;
+	}
+	g_object_unref (tmpmodel);
+
+	if (retval)
+		retval = gda_meta_store_modify_with_context (store, context, mod_model, error);
+	g_object_unref (mod_model);
+
+	return retval;
 }
 
 gboolean
@@ -883,8 +992,73 @@
 _gda_sqlite_meta__constraints_tab (GdaServerProvider *prov, GdaConnection *cnc, 
 				   GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {
-	TO_IMPLEMENT;
-	return TRUE;
+	GdaDataModel *mod_model, *tmpmodel;
+	gboolean retval = TRUE;
+	gint i, nrows;
+	SqliteConnectionData *cdata;
+	
+	cdata = (SqliteConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
+
+	tmpmodel = (GdaDataModel *) gda_connection_statement_execute (cnc, internal_stmt[I_PRAGMA_DATABASE_LIST],
+								      NULL, GDA_STATEMENT_MODEL_RANDOM_ACCESS, NULL, error);
+	if (!tmpmodel)
+		return FALSE;
+
+	mod_model = gda_meta_store_create_modify_data_model (store, context->table_name);
+	g_assert (mod_model);
+
+	nrows = gda_data_model_get_n_rows (tmpmodel);
+	for (i = 0; i < nrows; i++) {
+		/* iterate through the schemas */
+		GdaDataModel *tables_model;
+		const gchar *schema_name;
+		const GValue *cvalue = gda_data_model_get_value_at (tmpmodel, 1, i);
+
+		schema_name = g_value_get_string (cvalue); 
+		if (!strcmp (schema_name, TMP_DATABASE_NAME))
+			 continue; /* nothing to do */
+		
+		gchar *str;
+		GType col_types[] = {G_TYPE_STRING, G_TYPE_STRING, G_TYPE_NONE};
+		GdaStatement *stmt;
+		
+		str = g_strdup_printf (SELECT_TABLES_VIEWS, schema_name);
+		stmt = gda_sql_parser_parse_string (internal_parser, str, NULL, NULL);
+		g_free (str);
+		g_assert (stmt);
+		tables_model = gda_connection_statement_execute_select_full (cnc, stmt, NULL,
+									     GDA_STATEMENT_MODEL_RANDOM_ACCESS,
+									     col_types, error);
+		g_object_unref (stmt);
+		if (!tables_model) {
+			retval = FALSE;
+			break;
+		}
+
+		gint tnrows, ti;
+		tnrows = gda_data_model_get_n_rows (tables_model);
+		for (ti = 0; ti < tnrows; ti++) {
+			/* iterate through the tables */
+			if (!fill_constraints_tab_model (cnc, cdata, mod_model, cvalue, 
+							 gda_data_model_get_value_at (tables_model, 0, ti),
+							 NULL, error)) {
+				retval = FALSE;
+				break;
+			}
+		}
+		g_object_unref (tables_model);
+		if (!retval) 
+			break;
+	}
+	g_object_unref (tmpmodel);
+
+	if (retval)
+		retval = gda_meta_store_modify_with_context (store, context, mod_model, error);
+	g_object_unref (mod_model);
+
+	return retval;
 }
 
 gboolean 
@@ -914,8 +1088,8 @@
 
 static gboolean 
 fill_constraints_ref_model (GdaConnection *cnc, SqliteConnectionData *cdata, GdaDataModel *mod_model, 
-			    const GValue *p_table_schema, const GValue *p_table_name, const GValue *constraint_name,
-			    GError **error)
+			    const GValue *p_table_schema, const GValue *p_table_name, 
+			    const GValue *constraint_name_n, GError **error)
 {
 	GdaDataModel *tmpmodel;
 	gboolean retval = TRUE;
@@ -951,12 +1125,12 @@
 		cvalue = gda_data_model_get_value_at (tmpmodel, 2, i);
 		if (! ref_table || strcmp (ref_table, g_value_get_string (cvalue))) {
 			gchar *constname;
-			GValue *v2, *v3, *v4;
+			GValue *v2, *v3, *v4, *v5;
 
 			g_free (ref_table);
 			ref_table = g_strdup (g_value_get_string (cvalue));
 			constname = g_strdup_printf ("fk_%s", ref_table);
-			if (strcmp (g_value_get_string (constraint_name), constname)) {
+			if (constraint_name_n && strcmp (g_value_get_string (constraint_name_n), constname)) {
 				g_free (constname);
 				continue;
 			}
@@ -964,12 +1138,15 @@
 			g_value_set_string ((v2 = gda_value_new (G_TYPE_STRING)), "FOREIGN KEY");
 			g_value_set_string ((v3 = gda_value_new (G_TYPE_STRING)), ref_table);
 			g_value_set_string ((v4 = gda_value_new (G_TYPE_STRING)), "primary_key");
-		
+			if (!constraint_name_n)
+				g_value_take_string ((v5 = gda_value_new (G_TYPE_STRING)), constname);
+
 			if (! append_a_row (mod_model, error, 11, 
 					    FALSE, catalog_value, /* table_catalog */
 					    FALSE, p_table_schema, /* table_schema */
 					    FALSE, p_table_name, /* table_name */
-					    FALSE, constraint_name, /* constraint_name */
+					    constraint_name_n ? FALSE: TRUE, 
+					    constraint_name_n ? constraint_name_n : v5, /* constraint_name */
 					    FALSE, catalog_value, /* ref_table_catalog */
 					    FALSE, p_table_schema, /* ref_table_schema */
 					    TRUE, v3, /* ref_table_name */
@@ -978,6 +1155,8 @@
 					    FALSE, rule_value, /* update_rule */
 					    FALSE, rule_value /* delete_rule */))
 				retval = FALSE;
+			if (constraint_name_n)
+				g_free (constname);
 		}
 	}
 	g_free (ref_table);
@@ -990,8 +1169,73 @@
 _gda_sqlite_meta__constraints_ref (GdaServerProvider *prov, GdaConnection *cnc, 
 				   GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {
-	TO_IMPLEMENT;
-	return TRUE;
+	GdaDataModel *mod_model, *tmpmodel;
+	gboolean retval = TRUE;
+	gint i, nrows;
+	SqliteConnectionData *cdata;
+	
+	cdata = (SqliteConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
+
+	tmpmodel = (GdaDataModel *) gda_connection_statement_execute (cnc, internal_stmt[I_PRAGMA_DATABASE_LIST],
+								      NULL, GDA_STATEMENT_MODEL_RANDOM_ACCESS, NULL, error);
+	if (!tmpmodel)
+		return FALSE;
+
+	mod_model = gda_meta_store_create_modify_data_model (store, context->table_name);
+	g_assert (mod_model);
+
+	nrows = gda_data_model_get_n_rows (tmpmodel);
+	for (i = 0; i < nrows; i++) {
+		/* iterate through the schemas */
+		GdaDataModel *tables_model;
+		const gchar *schema_name;
+		const GValue *cvalue = gda_data_model_get_value_at (tmpmodel, 1, i);
+
+		schema_name = g_value_get_string (cvalue); 
+		if (!strcmp (schema_name, TMP_DATABASE_NAME))
+			 continue; /* nothing to do */
+		
+		gchar *str;
+		GType col_types[] = {G_TYPE_STRING, G_TYPE_STRING, G_TYPE_NONE};
+		GdaStatement *stmt;
+		
+		str = g_strdup_printf (SELECT_TABLES_VIEWS, schema_name);
+		stmt = gda_sql_parser_parse_string (internal_parser, str, NULL, NULL);
+		g_free (str);
+		g_assert (stmt);
+		tables_model = gda_connection_statement_execute_select_full (cnc, stmt, NULL,
+									     GDA_STATEMENT_MODEL_RANDOM_ACCESS,
+									     col_types, error);
+		g_object_unref (stmt);
+		if (!tables_model) {
+			retval = FALSE;
+			break;
+		}
+
+		gint tnrows, ti;
+		tnrows = gda_data_model_get_n_rows (tables_model);
+		for (ti = 0; ti < tnrows; ti++) {
+			/* iterate through the tables */
+			if (!fill_constraints_ref_model (cnc, cdata, mod_model, cvalue,
+							 gda_data_model_get_value_at (tables_model, 0, ti),
+							 NULL, error)) {
+				retval = FALSE;
+				break;
+			}
+		}
+		g_object_unref (tables_model);
+		if (!retval) 
+			break;
+	}
+	g_object_unref (tmpmodel);
+
+	if (retval)
+		retval = gda_meta_store_modify_with_context (store, context, mod_model, error);
+	g_object_unref (mod_model);
+
+	return retval;
 }
 
 gboolean
@@ -1184,8 +1428,99 @@
 _gda_sqlite_meta__key_columns (GdaServerProvider *prov, GdaConnection *cnc, 
 			       GdaMetaStore *store, GdaMetaContext *context, GError **error)
 {
-	TO_IMPLEMENT;
-	return TRUE;
+	/* iterate through the tables, and each time call fill_constraints_tab_model() 
+	 * to get the list of table constraints. 
+	 * Then iterate through that data model and call fill_key_columns_model()
+	 * for each row */
+
+	GdaDataModel *const_model, *tmpmodel;
+	gboolean retval = TRUE;
+	gint i, nrows;
+	SqliteConnectionData *cdata;
+	
+	cdata = (SqliteConnectionData*) gda_connection_internal_get_provider_data (cnc);
+	if (!cdata)
+		return FALSE;
+
+	tmpmodel = (GdaDataModel *) gda_connection_statement_execute (cnc, internal_stmt[I_PRAGMA_DATABASE_LIST],
+								      NULL, GDA_STATEMENT_MODEL_RANDOM_ACCESS, NULL, error);
+	if (!tmpmodel)
+		return FALSE;
+
+	const_model = gda_meta_store_create_modify_data_model (store, "_table_constraints");
+	g_assert (const_model);
+
+	nrows = gda_data_model_get_n_rows (tmpmodel);
+	for (i = 0; i < nrows; i++) {
+		/* iterate through the schemas */
+		GdaDataModel *tables_model;
+		const gchar *schema_name;
+		const GValue *cvalue = gda_data_model_get_value_at (tmpmodel, 1, i);
+
+		schema_name = g_value_get_string (cvalue); 
+		if (!strcmp (schema_name, TMP_DATABASE_NAME))
+			 continue; /* nothing to do */
+		
+		gchar *str;
+		GType col_types[] = {G_TYPE_STRING, G_TYPE_STRING, G_TYPE_NONE};
+		GdaStatement *stmt;
+		
+		str = g_strdup_printf (SELECT_TABLES_VIEWS, schema_name);
+		stmt = gda_sql_parser_parse_string (internal_parser, str, NULL, NULL);
+		g_free (str);
+		g_assert (stmt);
+		tables_model = gda_connection_statement_execute_select_full (cnc, stmt, NULL,
+									     GDA_STATEMENT_MODEL_RANDOM_ACCESS,
+									     col_types, error);
+		g_object_unref (stmt);
+		if (!tables_model) {
+			retval = FALSE;
+			break;
+		}
+
+		gint tnrows, ti;
+		tnrows = gda_data_model_get_n_rows (tables_model);
+		for (ti = 0; ti < tnrows; ti++) {
+			/* iterate through the tables */
+			if (!fill_constraints_tab_model (cnc, cdata, const_model, cvalue,
+							 gda_data_model_get_value_at (tables_model, 0, ti),
+							 NULL, error)) {
+				retval = FALSE;
+				break;
+			}
+		}
+		g_object_unref (tables_model);
+		if (!retval) 
+			break;
+	}
+	g_object_unref (tmpmodel);
+	if (!retval) {
+		g_object_unref (const_model);
+		return FALSE;
+	}
+
+	GdaDataModel *mod_model;
+	mod_model = gda_meta_store_create_modify_data_model (store, context->table_name);
+	g_assert (mod_model);
+
+	nrows = gda_data_model_get_n_rows (const_model);
+	for (i = 0; i < nrows; i++) {
+		if (!fill_key_columns_model (cnc, cdata, mod_model, 
+					     gda_data_model_get_value_at (const_model, 4, i), 
+					     gda_data_model_get_value_at (const_model, 5, i), 
+					     gda_data_model_get_value_at (const_model, 2, i), 
+					     error)) {
+			retval = FALSE;
+			break;
+		}
+	}
+	g_object_unref (const_model);
+
+	if (retval)
+		retval = gda_meta_store_modify_with_context (store, context, mod_model, error);
+	g_object_unref (mod_model);
+
+	return retval;
 }
 
 gboolean 

Modified: trunk/providers/postgres/gda-postgres-meta.c
==============================================================================
--- trunk/providers/postgres/gda-postgres-meta.c	(original)
+++ trunk/providers/postgres/gda-postgres-meta.c	Mon Mar 24 16:41:50 2008
@@ -956,7 +956,7 @@
 	gda_holder_set_value (gda_set_get_holder (i_set, "schema"), table_schema);
 	gda_holder_set_value (gda_set_get_holder (i_set, "name"), table_name);
 
-	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_TABLES_CONSTRAINTS], i_set, 
+	model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_TRIGGERS], i_set, 
 							 error);
 	if (!model)
 		return FALSE;

Modified: trunk/providers/postgres/gda-postgres-provider.c
==============================================================================
--- trunk/providers/postgres/gda-postgres-provider.c	(original)
+++ trunk/providers/postgres/gda-postgres-provider.c	Mon Mar 24 16:41:50 2008
@@ -1604,7 +1604,7 @@
 	gchar *prep_stm_name;
 	GdaConnectionEvent *event = NULL;
 
-	prep_stm_name = g_strdup_printf ("PS%p", stmt);
+	prep_stm_name = g_strdup_printf ("ps%p", stmt);
 	pg_res = PQprepare (cdata->pconn, prep_stm_name, sql, 0, NULL);
 	if (!pg_res || (PQresultStatus (pg_res) != PGRES_COMMAND_OK)) {
 		event = _gda_postgres_make_error (cnc, cdata->pconn, pg_res, error);
@@ -1678,7 +1678,7 @@
 	gchar *prep_stm_name;
 	GdaConnectionEvent *event = NULL;
 
-	prep_stm_name = g_strdup_printf ("PS%d", counter++);
+	prep_stm_name = g_strdup_printf ("ps%d", counter++);
 	pg_res = PQprepare (cdata->pconn, prep_stm_name, sql, 0, NULL);
 	if (!pg_res || (PQresultStatus (pg_res) != PGRES_COMMAND_OK)) {
 		event = _gda_postgres_make_error (cdata->cnc, cdata->pconn, pg_res, error);
@@ -2110,7 +2110,7 @@
 	if (!cdata)
 		return;
 
-	if (cdata->pconn)
+	if (cdata->pconn) 
                 PQfinish (cdata->pconn);
 
 	if (cdata->type_data) {

Modified: trunk/providers/postgres/parser.y
==============================================================================
--- trunk/providers/postgres/parser.y	(original)
+++ trunk/providers/postgres/parser.y	Mon Mar 24 16:41:50 2008
@@ -45,6 +45,7 @@
 #include <libgda/sql-parser/gda-statement-struct-select.h>
 #include <libgda/sql-parser/gda-statement-struct-compound.h>
 #include <libgda/sql-parser/gda-statement-struct-parts.h>
+#include <assert.h>
 
 #ifdef GDA_DEBUG_NO
 #define DEBUG(format, ...) g_print ("___" format "\n", __VA_ARGS__)

Modified: trunk/providers/skel-implementation/capi/parser.y
==============================================================================
--- trunk/providers/skel-implementation/capi/parser.y	(original)
+++ trunk/providers/skel-implementation/capi/parser.y	Mon Mar 24 16:41:50 2008
@@ -45,6 +45,7 @@
 #include <libgda/sql-parser/gda-statement-struct-select.h>
 #include <libgda/sql-parser/gda-statement-struct-compound.h>
 #include <libgda/sql-parser/gda-statement-struct-parts.h>
+#include <assert.h>
 
 #ifdef GDA_DEBUG_NO
 #define DEBUG(format, ...) g_print ("___" format "\n", __VA_ARGS__)



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