[libgda] SQL identifiers quoting now done by database providers
- From: Vivien Malerba <vivien src gnome org>
- To: svn-commits-list gnome org
- Subject: [libgda] SQL identifiers quoting now done by database providers
- Date: Fri, 10 Jul 2009 19:22:29 +0000 (UTC)
commit f0d467ea730e706c194345c652b2ebf10c6e31b5
Author: Vivien Malerba <malerba gnome-db org>
Date: Thu Jul 9 22:04:51 2009 +0200
SQL identifiers quoting now done by database providers
As MySQL's quoting is made using the '`' character, quoting SQL identifiers
can only be done by the database providers themselves, thus the new
gda_sql_identifier_quote() function.
This commit also uses (for MySQL and PostgreSQL) reserved keywords lists
depending on the server version, and corrects some small errors.
Some test data has also been corrected because "public" is a reserved
SQL standard keyword.
doc/C/libgda-4.0-docs.sgml | 4 -
doc/C/libgda-4.0-sections.txt | 1 +
doc/C/tmpl/gda-server-provider.sgml | 2 +-
doc/C/tmpl/gda-sql-parser.sgml | 13 +
libgda/Makefile.am | 4 +-
libgda/gda-data-meta-wrapper.c | 7 +
libgda/gda-server-provider.h | 7 +-
libgda/gda-util.c | 97 ++++
libgda/gda-util.h | 4 +-
libgda/information_schema.xml | 12 +-
libgda/libgda.symbols | 1 +
libgda/sqlite/Makefile.am | 7 +-
libgda/sqlite/gda-sqlite-meta.c | 2 +
libgda/sqlite/keywords.list | 3 +
libgda/sqlite/keywords_hash.h | 41 ++
libgda/sqlite/mkkeywordhash.c | 162 +++---
providers/mysql/Makefile.am | 19 +-
providers/mysql/gda-mysql-meta.c | 126 +++--
providers/mysql/gda-mysql-provider.c | 171 ++++++-
providers/mysql/gda-mysql-recordset.c | 1 +
providers/mysql/gda-mysql-util.c | 34 ++
providers/mysql/gda-mysql-util.h | 25 +-
providers/mysql/gda-mysql.h | 1 +
providers/mysql/keywords_V50.list | 80 +++
providers/mysql/keywords_V51.list | 80 +++
providers/mysql/keywords_V54.list | 79 +++
providers/mysql/keywords_V60.list | 81 +++
providers/postgres/Makefile.am | 17 +-
providers/postgres/gda-postgres-meta.c | 193 +++++--
providers/postgres/gda-postgres-provider.c | 86 +++
providers/postgres/gda-postgres-util.c | 34 ++
providers/postgres/gda-postgres-util.h | 5 +
providers/postgres/gda-postgres.h | 1 +
providers/postgres/keywords.list | 101 ----
providers/postgres/keywords_82.list | 345 ++++++++++++
providers/postgres/keywords_83.list | 144 +++++
providers/postgres/keywords_84.list | 150 +++++
providers/skel-implementation/capi/Makefile.am | 9 +-
providers/skel-implementation/capi/gda-capi-meta.c | 2 +
providers/skel-implementation/capi/keywords.list | 93 +---
tests/.gitignore | 1 +
tests/Makefile.am | 9 +-
tests/meta-store/common.c | 2 +-
tests/meta-store/data_columns.csv | 572 ++++++++++----------
tests/meta-store/data_key_column_usage.csv | 274 +++++-----
tests/meta-store/data_referential_constraints.csv | 38 +-
tests/meta-store/data_schemata.csv | 2 +-
tests/meta-store/data_table_constraints.csv | 388 +++++++-------
tests/meta-store/data_tables.csv | 66 ++--
tests/meta-store/data_view_column_usage.csv | 112 ++--
tests/meta-store/data_views.csv | 10 +-
tests/test-identifiers-quotes.c | 200 +++++++
52 files changed, 2781 insertions(+), 1137 deletions(-)
---
diff --git a/doc/C/libgda-4.0-docs.sgml b/doc/C/libgda-4.0-docs.sgml
index ffe4fd7..fb3cd48 100644
--- a/doc/C/libgda-4.0-docs.sgml
+++ b/doc/C/libgda-4.0-docs.sgml
@@ -461,10 +461,6 @@
colons, commas or spaces)</para>
</listitem>
<listitem>
- <para>GDA_CONNECTION_COMMANDS_SHOW: if set, then all the commands issued to a server will be
- displayed on STDOUT</para>
- </listitem>
- <listitem>
<para>GDA_PROVIDERS_ROOT_DIR: if set, must point to the directory where the providers files are (providers
files are shared libraries)</para>
</listitem>
diff --git a/doc/C/libgda-4.0-sections.txt b/doc/C/libgda-4.0-sections.txt
index 5277fbf..4fc8928 100644
--- a/doc/C/libgda-4.0-sections.txt
+++ b/doc/C/libgda-4.0-sections.txt
@@ -1113,6 +1113,7 @@ gda_sql_parser_parse_string
gda_sql_parser_parse_string_as_batch
gda_sql_parser_parse_file_as_batch
<SUBSECTION>
+gda_sql_identifier_quote
gda_sql_identifier_needs_quotes
gda_sql_identifier_add_quotes
gda_sql_identifier_remove_quotes
diff --git a/doc/C/tmpl/gda-server-provider.sgml b/doc/C/tmpl/gda-server-provider.sgml
index 794d5df..2a3d711 100644
--- a/doc/C/tmpl/gda-server-provider.sgml
+++ b/doc/C/tmpl/gda-server-provider.sgml
@@ -65,8 +65,8 @@ Base class for all the DBMS providers
@create_connection:
@meta_funcs:
@xa_funcs:
+ identifier_quote:
@handle_async:
- _gda_reserved2:
@_gda_reserved3:
@_gda_reserved4:
@_gda_reserved5:
diff --git a/doc/C/tmpl/gda-sql-parser.sgml b/doc/C/tmpl/gda-sql-parser.sgml
index 9e22e90..16a4dc3 100644
--- a/doc/C/tmpl/gda-sql-parser.sgml
+++ b/doc/C/tmpl/gda-sql-parser.sgml
@@ -178,6 +178,19 @@ Modifies the behaviour of the tokenizer, reserved for #GdaServerProvider impleme
@Returns:
+<!-- ##### FUNCTION gda_sql_identifier_quote ##### -->
+<para>
+
+</para>
+
+ id:
+ cnc:
+ prov:
+ meta_store_convention:
+ force_quotes:
+ Returns:
+
+
<!-- ##### FUNCTION gda_sql_identifier_needs_quotes ##### -->
<para>
diff --git a/libgda/Makefile.am b/libgda/Makefile.am
index 31270b5..066d37f 100644
--- a/libgda/Makefile.am
+++ b/libgda/Makefile.am
@@ -30,8 +30,8 @@ gda-marshal.c: gda-marshal.list $(GLIB_GENMARSHAL)
mkkeywordhash$(EXEEXT_FOR_BUILD): $(top_srcdir)/libgda/sqlite/mkkeywordhash.c
$(CC_FOR_BUILD) -g -o mkkeywordhash$(EXEEXT_FOR_BUILD) $(GDA_DEBUG_FLAGS) $<
-keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list
- ./mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list > keywords_hash.c
+keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/libgda/keywords.list
+ ./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/libgda/keywords.list > keywords_hash.c
gda_headers = \
gda-attributes-manager.h \
diff --git a/libgda/gda-data-meta-wrapper.c b/libgda/gda-data-meta-wrapper.c
index f6355b9..5bc5ee3 100644
--- a/libgda/gda-data-meta-wrapper.c
+++ b/libgda/gda-data-meta-wrapper.c
@@ -27,6 +27,13 @@
#include <libgda/gda-enums.h>
#include <libgda/gda-data-model.h>
#include <libgda/sql-parser/gda-statement-struct-util.h>
+
+/* we don't want to duplicate the symbols in <libgda/sqlite/keywords_hash.h>, so simply
+ * declare them as external
+ */
+extern const unsigned char UpperToLower[];
+#define charMap(X) UpperToLower[(unsigned char)(X)]
+extern int casecmp(const char *zLeft, const char *zRight, int N);
#include "keywords_hash.c" /* this one is dynamically generated */
/*
diff --git a/libgda/gda-server-provider.h b/libgda/gda-server-provider.h
index 34a2c79..1e98141 100644
--- a/libgda/gda-server-provider.h
+++ b/libgda/gda-server-provider.h
@@ -294,10 +294,15 @@ struct _GdaServerProviderClass {
/* distributed transaction */
GdaServerProviderXa *xa_funcs; /* it is a pointer! => set to %NULL if unsupported by provider */
+ /* SQL identifiers quoting */
+ gchar *(* identifier_quote) (GdaServerProvider *provider, GdaConnection *cnc,
+ const gchar *id,
+ gboolean meta_store_convention, gboolean force_quotes);
+
+ /* Async. handling@ */
gboolean (*handle_async) (GdaServerProvider *provider, GdaConnection *cnc, GError **error);
/* Padding for future expansion */
- void (*_gda_reserved2) (void);
void (*_gda_reserved3) (void);
void (*_gda_reserved4) (void);
void (*_gda_reserved5) (void);
diff --git a/libgda/gda-util.c b/libgda/gda-util.c
index c4595c1..3152174 100644
--- a/libgda/gda-util.c
+++ b/libgda/gda-util.c
@@ -30,6 +30,7 @@
#include <glib/gi18n-lib.h>
#include <libgda/gda-log.h>
#include <libgda/gda-util.h>
+#include <libgda/gda-server-provider.h>
#include <libgda/gda-column.h>
#ifdef HAVE_LOCALE_H
#include <locale.h>
@@ -39,9 +40,19 @@
#include <libgda/binreloc/gda-binreloc.h>
+/* we don't want to duplicate the symbols in <libgda/sqlite/keywords_hash.h>, so simply
+ * declare them as external
+ */
+extern const unsigned char UpperToLower[];
+#define charMap(X) UpperToLower[(unsigned char)(X)]
+extern int casecmp(const char *zLeft, const char *zRight, int N);
+#include "keywords_hash.c" /* this one is dynamically generated */
+
extern gchar *gda_lang_locale;
extern GdaAttributesManager *gda_holder_attributes_manager;
+#define PROV_CLASS(provider) (GDA_SERVER_PROVIDER_CLASS (G_OBJECT_GET_CLASS (provider)))
+
/**
* gda_g_type_to_string
* @type: Type to convert from.
@@ -1531,6 +1542,92 @@ gda_sql_identifier_split (const gchar *id)
return NULL;
}
+static gboolean _sql_identifier_needs_quotes (const gchar *str);
+
+
+/**
+ * gda_sql_identifier_quote
+ * @id: an SQL identifier
+ * @cnc: a #GdaConnection object, or %NULL
+ * @prov: a #GdaServerProvider object, or %NULL
+ * @meta_store_convention: set to %TRUE if @id respects the #GdaMetaStore
+ * representation of SQL identifiers, or if it is a user input
+ * @force_quotes: set to %TRUE to force the returned string to be quoted
+ *
+ * Use this function for any SQL identifier to make sure it is correctly formatted
+ * to be used with @cnc (if @cnc is %NULL, then the standard SQL quoting rules will be applied).
+ *
+ * If @id already has quotes, then this function returns a copy of @id, except that the quotes may be
+ * replaced by database specific characters (such as the backquote for MySQL).
+ *
+ * If @id has no quotes, and if none are requited, then this function returns a copy if @id. The criteria to
+ * determine if @id needs quotes depends on the database provider associated to @cnc, and if @cnc is %NULL, then
+ * in all the following cases quotes are required:
+ * <itemizedlist>
+ * <listitem><para>If @id's 1st character is a digit</para></listitem>
+ * <listitem><para>If @id contains other characters than digits, letters and the '_', '$' and '#'</para></listitem>
+ * <listitem><para>If @id is an SQL reserved keyword</para></listitem>
+ * </itemizedlist>
+ *
+ * If @force_quotes is %TRUE, then the this function always returns a quoted SQL identifier.
+ *
+ * Returns: the possibly quoted representation of @id as a new string, or %NULL if @id is in a wrong format
+ *
+ * Since: 4.0.3
+ */
+gchar *
+gda_sql_identifier_quote (const gchar *id, GdaConnection *cnc, GdaServerProvider *prov,
+ gboolean meta_store_convention, gboolean force_quotes)
+{
+ g_return_val_if_fail (id && *id, NULL);
+ if (cnc)
+ g_return_val_if_fail (GDA_IS_CONNECTION (cnc), NULL);
+ if (prov)
+ g_return_val_if_fail (GDA_IS_SERVER_PROVIDER (prov), NULL);
+ if (cnc && prov)
+ g_return_val_if_fail (gda_connection_get_provider (cnc) == prov, NULL);
+
+ if (prov && PROV_CLASS (prov)->identifier_quote) {
+ return PROV_CLASS (prov)->identifier_quote (prov, cnc, id,
+ meta_store_convention, force_quotes);
+ }
+ else {
+ /* default SQL standard */
+ if (*id == '"') {
+ /* there are already some quotes */
+ return g_strdup (id);
+ }
+ if (is_keyword (id) || _sql_identifier_needs_quotes (id) || force_quotes)
+ return gda_sql_identifier_add_quotes (id);
+
+ /* nothing to do */
+ return g_strdup (id);
+ }
+}
+
+static gboolean
+_sql_identifier_needs_quotes (const gchar *str)
+{
+ const gchar *ptr;
+
+ g_return_val_if_fail (str, FALSE);
+ for (ptr = str; *ptr; ptr++) {
+ /* quote if 1st char is a number */
+ if ((*ptr <= '9') && (*ptr >= '0')) {
+ if (ptr == str)
+ return TRUE;
+ continue;
+ }
+ if (((*ptr >= 'A') && (*ptr <= 'Z')) ||
+ ((*ptr >= 'a') && (*ptr <= 'z')))
+ continue;
+
+ if ((*ptr != '$') && (*ptr != '_') && (*ptr != '#'))
+ return TRUE;
+ }
+ return FALSE;
+}
+
/*
* RFC 1738 defines that these characters should be escaped, as well
* any non-US-ASCII character or anything between 0x00 - 0x1F.
diff --git a/libgda/gda-util.h b/libgda/gda-util.h
index 86f8059..b681933 100644
--- a/libgda/gda-util.h
+++ b/libgda/gda-util.h
@@ -1,5 +1,5 @@
/* GDA common library
- * Copyright (C) 1998 - 2008 The GNOME Foundation.
+ * Copyright (C) 1998 - 2009 The GNOME Foundation.
*
* AUTHORS:
* Rodrigo Moya <rodrigo gnome-db org>
@@ -48,6 +48,8 @@ guint gda_identifier_hash (const gchar *id);
gboolean gda_identifier_equal (const gchar *id1, const gchar *id2);
gchar **gda_completion_list_get (GdaConnection *cnc, const gchar *sql, gint start, gint end);
gchar **gda_sql_identifier_split (const gchar *id);
+gchar *gda_sql_identifier_quote (const gchar *id, GdaConnection *cnc, GdaServerProvider *prov,
+ gboolean meta_store_convention, gboolean force_quotes);
/*
* Param & model utilities
diff --git a/libgda/information_schema.xml b/libgda/information_schema.xml
index 2d2a46f..37b13ba 100644
--- a/libgda/information_schema.xml
+++ b/libgda/information_schema.xml
@@ -90,7 +90,7 @@
<column name="udt_name" pkey="TRUE" descr="Name of the user defined data type for which the column is" ident="TRUE"/>
<column name="udt_column" pkey="TRUE" descr="Name of the column (part)" ident="TRUE"/>
<column name="ordinal_position" type="gint" descr="Column position, starts at 1"/>
- <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)" ident="TRUE"/>
+ <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)"/>
<column name="array_spec" nullok="TRUE" descr="Array description if the column is an array"/>
<column name="character_maximum_length" type="gint" nullok="TRUE"/>
<column name="character_octet_length" type="gint" nullok="TRUE"/>
@@ -137,7 +137,7 @@
<column name="object_schema" descr="Name of the schema that contains the object that uses the array being described" ident="TRUE"/>
<column name="object_name" descr="Name of the object that uses the array being described" ident="TRUE"/>
<column name="object_type" descr="The type of the object that uses the array being described TABLE_COL, DOMAIN, UDT_COL, ROUTINE_COL, ROUTINE_PAR"/>
- <column name="data_type" nullok="TRUE" descr="Base data type of the array (if the base data type is an array, then 'array_spec' is set, and this may be NULL)" ident="TRUE"/>
+ <column name="data_type" nullok="TRUE" descr="Base data type of the array (if the base data type is an array, then 'array_spec' is set, and this may be NULL)"/>
<column name="array_spec" nullok="TRUE" descr="Array description if the base data type is an array"/>
<column name="min_cardinality" type="gint" nullok="TRUE"/>
<column name="max_cardinality" type="gint" nullok="TRUE"/>
@@ -147,7 +147,7 @@
<column name="domain_catalog" pkey="TRUE" descr="Name of catalog that contains the domain"/>
<column name="domain_schema" pkey="TRUE" descr="Name of schema that contains the domain" ident="TRUE"/>
<column name="domain_name" pkey="TRUE" descr="Name of the domain" ident="TRUE"/>
- <column name="data_type" nullok="TRUE" descr="Data type of the domain (if the domain is an array, then 'array_spec' is set, and this may be NULL)" ident="TRUE"/>
+ <column name="data_type" nullok="TRUE" descr="Data type of the domain (if the domain is an array, then 'array_spec' is set, and this may be NULL)"/>
<column name="array_spec" nullok="TRUE" descr="Array description if the domain is an array"/>
<column name="domain_gtype"/>
<column name="character_maximum_length" type="gint" nullok="TRUE"/>
@@ -325,7 +325,7 @@
<column name="ordinal_position" type="gint" descr="Column position, starts at 1"/>
<column name="column_default" nullok="TRUE"/>
<column name="is_nullable" type="boolean"/>
- <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)" ident="TRUE"/>
+ <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)"/>
<column name="array_spec" nullok="TRUE" descr="Array description if the column is an array"/>
<column name="gtype"/>
<column name="character_maximum_length" type="gint" nullok="TRUE"/>
@@ -506,7 +506,7 @@
<column name="ordinal_position" type="gint" pkey="TRUE"/>
<column name="parameter_mode"/>
<column name="parameter_name" nullok="TRUE" ident="TRUE"/>
- <column name="data_type" nullok="TRUE" descr="Data type of the parameter (if the parameter is an array, then 'array_spec' is set, and this may be NULL; can also be NULL if any type of parameter is accepted)" ident="TRUE"/>
+ <column name="data_type" nullok="TRUE" descr="Data type of the parameter (if the parameter is an array, then 'array_spec' is set, and this may be NULL; can also be NULL if any type of parameter is accepted)"/>
<column name="array_spec" nullok="TRUE" descr="Array description if the parameter is an array"/>
<fkey ref_table="_routines">
<part column="specific_catalog"/>
@@ -529,7 +529,7 @@
<column name="specific_name" pkey="TRUE"/>
<column name="column_name" pkey="TRUE" ident="TRUE"/>
<column name="ordinal_position" type="gint" nullok="TRUE" pkey="TRUE"/>
- <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)" ident="TRUE"/>
+ <column name="data_type" nullok="TRUE" descr="Data type of the column (if the column is an array, then 'array_spec' is set, and this may be NULL)"/>
<column name="array_spec" nullok="TRUE" descr="Array description if the column is an array"/>
<fkey ref_table="_routines">
<part column="specific_catalog"/>
diff --git a/libgda/libgda.symbols b/libgda/libgda.symbols
index 86a5c11..08d004a 100644
--- a/libgda/libgda.symbols
+++ b/libgda/libgda.symbols
@@ -585,6 +585,7 @@
gda_sql_function_take_name
gda_sql_identifier_add_quotes
gda_sql_identifier_needs_quotes
+ gda_sql_identifier_quote
gda_sql_identifier_remove_quotes
gda_sql_identifier_split
gda_sqlite_provider_get_type
diff --git a/libgda/sqlite/Makefile.am b/libgda/sqlite/Makefile.am
index fa9ce5f..d64c5d7 100644
--- a/libgda/sqlite/Makefile.am
+++ b/libgda/sqlite/Makefile.am
@@ -23,8 +23,8 @@ AM_CPPFLAGS = \
mkkeywordhash$(EXEEXT_FOR_BUILD): mkkeywordhash.c
$(CC_FOR_BUILD) -o mkkeywordhash$(EXEEXT_FOR_BUILD) $(GDA_DEBUG_FLAGS) $<
-keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list
- ./mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list > keywords_hash.c
+keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/libgda/sqlite/keywords.list
+ ./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/libgda/sqlite/keywords.list > keywords_hash.c
gen_emb_string$(EXEEXT_FOR_BUILD): gen_emb_string.c
$(CC_FOR_BUILD) -o gen_emb_string$(EXEEXT_FOR_BUILD) $<
@@ -52,6 +52,7 @@ libgda_sqlite_la_SOURCES = \
gda-sqlite-recordset.c \
gda-sqlite-recordset.h \
gda-sqlite.h \
+ keywords_hash.h \
utils.c
libgda_sqlite_la_LDFLAGS = -export-dynamic -module -avoid-version $(NO_UNDEFINED)
@@ -63,6 +64,6 @@ libgda_sqlite_la_LIBADD = \
gdaincludedir=$(includedir)/libgda-$(GDA_ABI_MAJOR_VERSION).$(GDA_ABI_MINOR_VERSION)/libgda/sqlite
gdainclude_HEADERS=$(sqliteheaders)
-EXTRA_DIST = gen_emb_string.c keywords.list
+EXTRA_DIST = gen_emb_string.c mkkeywordhash.c keywords.list
CLEANFILES = gen_emb_string$(EXEEXT_FOR_BUILD) xml_embedded.h mkkeywordhash$(EXEEXT_FOR_BUILD) keywords_hash.c
diff --git a/libgda/sqlite/gda-sqlite-meta.c b/libgda/sqlite/gda-sqlite-meta.c
index 6504f94..0c80fda 100644
--- a/libgda/sqlite/gda-sqlite-meta.c
+++ b/libgda/sqlite/gda-sqlite-meta.c
@@ -32,6 +32,8 @@
#include <libgda/gda-connection-private.h>
#include <libgda/gda-data-model-array.h>
#include <libgda/gda-set.h>
+
+#include <libgda/sqlite/keywords_hash.h>
#include "keywords_hash.c" /* this one is dynamically generated */
static gboolean append_a_row (GdaDataModel *to_model, GError **error, gint nb, ...);
diff --git a/libgda/sqlite/keywords.list b/libgda/sqlite/keywords.list
index 51bdd79..8f56879 100644
--- a/libgda/sqlite/keywords.list
+++ b/libgda/sqlite/keywords.list
@@ -1,3 +1,6 @@
+# SQLite 3.6.16 keywords
+
+
ABORT,
ADD,
AFTER,
diff --git a/libgda/sqlite/keywords_hash.h b/libgda/sqlite/keywords_hash.h
new file mode 100644
index 0000000..091884c
--- /dev/null
+++ b/libgda/sqlite/keywords_hash.h
@@ -0,0 +1,41 @@
+/*
+ * This code has been copied from SQLite's mkkeywordhash.c file and modified.
+ * to read the SQL keywords from a file instead of static ones.
+ *
+ * Include it along with the generated keywork_hash.c file
+ */
+
+#ifndef __KEYWORDS_HASH_H__
+#define __KEYWORDS_HASH_H__
+
+#include <string.h>
+
+const unsigned char UpperToLower[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,
+ 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,
+ 122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,
+ 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,
+ 126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
+ 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,
+ 162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,
+ 180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,
+ 198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
+ 216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,
+ 234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,
+ 252,253,254,255
+};
+#define charMap(X) UpperToLower[(unsigned char)X]
+int
+casecmp (const char *zLeft, const char *zRight, int N)
+{
+ register unsigned char *a, *b;
+ a = (unsigned char *)zLeft;
+ b = (unsigned char *)zRight;
+ while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
+ return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
+}
+
+#endif
diff --git a/libgda/sqlite/mkkeywordhash.c b/libgda/sqlite/mkkeywordhash.c
index 94bf8c6..dc6ce89 100644
--- a/libgda/sqlite/mkkeywordhash.c
+++ b/libgda/sqlite/mkkeywordhash.c
@@ -33,32 +33,6 @@ static const char zHdr[] =
" * This code has been copied from SQLite's mkkeywordhash.c file and modified.\n"
" * to read the SQL keywords from a file instead of static ones\n"
" */\n";
-static const char zCode[] =
- "static const unsigned char UpperToLower[] = {\n"
- " 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n"
- " 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\n"
- " 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,\n"
- " 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,\n"
- " 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,\n"
- " 122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,\n"
- " 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,\n"
- " 126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,\n"
- " 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,\n"
- " 162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,\n"
- " 180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,\n"
- " 198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,\n"
- " 216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,\n"
- " 234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,\n"
- " 252,253,254,255\n"
- "};\n"
- "#define charMap(X) UpperToLower[(unsigned char)X]\n"
- "static int casecmp(const char *zLeft, const char *zRight, int N){\n"
- " register unsigned char *a, *b;\n"
- " a = (unsigned char *)zLeft;\n"
- " b = (unsigned char *)zRight;\n"
- " while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }\n"
- " return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];\n"
- "}\n";
/*
** All the keywords of the SQL language are stored in a hash
@@ -81,6 +55,7 @@ struct Keyword {
Keyword *aKeywordTable = NULL;
int nKeyword = 0;
+char *prefix = NULL;
/* An array to map all upper-case characters into their corresponding
** lower-case character.
@@ -142,11 +117,43 @@ static Keyword *findById(int id){
return &aKeywordTable[i];
}
+/* @len is the number of chars, NOT including the \0 at the end */
+static void
+add_keywork (const char *keyword, int len)
+{
+#define MAXKEYWORDS 1000
+ const char *ptr;
+
+ if (len == 0)
+ return;
+ for (ptr = keyword; *ptr && (ptr - keyword) < len; ptr++) {
+ if (((*ptr < 'A') || (*ptr > 'Z')) &&
+ ((*ptr < 'a') || (*ptr > 'z')) &&
+ ((*ptr < '0') || (*ptr > '9')) &&
+ (*ptr != '_')) {
+ /* ignore this keyword */
+ return;
+ }
+ }
+
+ aKeywordTable [nKeyword].zName = malloc (sizeof (char) * (len + 1));
+ memcpy (aKeywordTable [nKeyword].zName, keyword, sizeof (char) * len);
+ aKeywordTable [nKeyword].zName [len] = 0;
+
+ printf (" * KEYWORD: '%s'\n", aKeywordTable [nKeyword].zName);
+
+ nKeyword ++;
+ if (nKeyword > MAXKEYWORDS) {
+ fprintf (stderr, "Maximum number of SQL keywords exceeded, "
+ "change the MAXKEYWORDS constant and recompile\n");
+ exit (1);
+ }
+}
+
static void
parse_input (const char *filename)
{
#define BUFSIZE 500
-#define MAXKEYWORDS 1000
FILE *stream;
char buffer[BUFSIZE];
int read;
@@ -176,50 +183,22 @@ parse_input (const char *filename)
*ptr = 0;
/* treat the line */
- char *tmp1, *tmp2;
- printf (" *\n * From line: %s\n", buffer);
- for (tmp1 = tmp2 = buffer; *tmp2; tmp2++) {
- if (((*tmp2 < 'A') || (*tmp2 > 'Z')) &&
- ((*tmp2 < 'a') || (*tmp2 > 'z')) &&
- ((*tmp2 < '0') || (*tmp2 > '9')) &&
- (*tmp2 != '_')) {
- /* keyword found */
- int len;
-
- len = tmp2 - tmp1 + 1;
-
- aKeywordTable [nKeyword].zName = malloc (sizeof (char) * len);
- memcpy (aKeywordTable [nKeyword].zName, tmp1, sizeof (char) * (len - 1));
- aKeywordTable [nKeyword].zName [len - 1] = 0;
-
- tmp1 = tmp2 + 1;
-
- printf (" * KEYWORD: %s\n", aKeywordTable [nKeyword].zName);
-
- nKeyword ++;
- if (nKeyword > MAXKEYWORDS) {
- fprintf (stderr, "Maximum number of SQL keywords exceeded, "
- "change the MAXKEYWORDS constant and recompile\n");
- aKeywordTable = NULL; /* we don't care about mem leaks here */
- return;
+ if (*buffer && *buffer != '#') {
+ char *tmp1, *tmp2;
+ printf (" *\n * From line: %s\n", buffer);
+ for (tmp1 = tmp2 = buffer; *tmp2; tmp2++) {
+ if (((*tmp2 < 'A') || (*tmp2 > 'Z')) &&
+ ((*tmp2 < 'a') || (*tmp2 > 'z')) &&
+ ((*tmp2 < '0') || (*tmp2 > '9')) &&
+ (*tmp2 != '_')) {
+ /* keyword found */
+ add_keywork (tmp1, tmp2 - tmp1);
+
+ tmp1 = tmp2 + 1;
}
}
- }
- if ((tmp1 != tmp2) && *tmp1) {
- int len;
- len = tmp2 - tmp1 + 2;
- aKeywordTable [nKeyword].zName = malloc (sizeof (char) * len);
- memcpy (aKeywordTable [nKeyword].zName, tmp1, sizeof (char) * (len - 1));
- aKeywordTable [nKeyword].zName [len - 1] = 0;
- printf (" * KEYWORD: %s\n", aKeywordTable [nKeyword].zName);
-
- nKeyword ++;
- if (nKeyword > MAXKEYWORDS) {
- fprintf (stderr, "Maximum number of SQL keywords exceeded, "
- "change the MAXKEYWORDS constant and recompile\n");
- aKeywordTable = NULL; /* we don't care about mem leaks here */
- return;
- }
+ if ((tmp1 != tmp2) && *tmp1)
+ add_keywork (tmp1, tmp2 - tmp1);
}
if (hold) {
@@ -239,7 +218,7 @@ parse_input (const char *filename)
#ifdef TEST_RESERVED_WORDS
int i;
- printf ("static char *keywords[] = {\n");
+ printf ("static char *%skeywords[] = {\n", prefix ? prefix : "");
for (i = 0; i < nKeyword; i++)
printf ("\t\"%s\",\n", aKeywordTable [i].zName);
printf ("};\n");
@@ -263,10 +242,12 @@ main (int argc, char **argv)
int aHash[5000]; /* 2000 is much bigger than nKeyword */
char zText[10000];
- if (argc != 2) {
- printf ("Usage: %s <file with SQL keywords>\n", argv[0]);
+ if ((argc < 2) || (argc > 3)) {
+ printf ("Usage: %s <file with SQL keywords> [<prefix>]\n", argv[0]);
return 1;
}
+ if (argc == 3)
+ prefix = argv[2];
printf("%s", zHdr);
parse_input (argv[1]);
@@ -389,9 +370,8 @@ main (int argc, char **argv)
}
/* Begin generating code */
- printf("%s\n", zCode);
printf("/* Hash score: %d */\n", bestCount);
- printf("static int keywordCode(const char *z, int n){\n");
+ printf("static int %skeywordCode(const char *z, int n){\n", prefix ? prefix : "");
printf(" /* zText[] encodes %d bytes of keywords in %d bytes */\n",
totalLen + nKeyword, nChar+1 );
for(i=j=k=0; i<nKeyword; i++){
@@ -413,7 +393,7 @@ main (int argc, char **argv)
if( j>0 ){
printf("%*s */\n", 74-j, "");
}
- printf(" static const char zText[%d] = {\n", nChar);
+ printf(" static const char %szText[%d] = {\n", prefix ? prefix : "", nChar);
zText[nChar] = 0;
for(i=j=0; i<k; i++){
if( j==0 ){
@@ -433,7 +413,7 @@ main (int argc, char **argv)
if( j>0 ) printf("\n");
printf(" };\n");
- printf(" static const unsigned int aHash[%d] = {\n", bestSize);
+ printf(" static const unsigned int %saHash[%d] = {\n", prefix ? prefix : "", bestSize);
for(i=j=0; i<bestSize; i++){
if( j==0 ) printf(" ");
printf(" %d,", aHash[i]);
@@ -445,7 +425,7 @@ main (int argc, char **argv)
}
printf("%s };\n", j==0 ? "" : "\n");
- printf(" static const unsigned int aNext[%d] = {\n", nKeyword);
+ printf(" static const unsigned int %saNext[%d] = {\n", prefix ? prefix : "", nKeyword);
for(i=j=0; i<nKeyword; i++){
if( j==0 ) printf(" ");
printf(" %3d,", aKeywordTable[i].iNext);
@@ -457,7 +437,7 @@ main (int argc, char **argv)
}
printf("%s };\n", j==0 ? "" : "\n");
- printf(" static const unsigned char aLen[%d] = {\n", nKeyword);
+ printf(" static const unsigned char %saLen[%d] = {\n", prefix ? prefix : "", nKeyword);
for(i=j=0; i<nKeyword; i++){
if( j==0 ) printf(" ");
printf(" %3d,", aKeywordTable[i].len+aKeywordTable[i].prefix);
@@ -469,7 +449,7 @@ main (int argc, char **argv)
}
printf("%s };\n", j==0 ? "" : "\n");
- printf(" static const unsigned short int aOffset[%d] = {\n", nKeyword);
+ printf(" static const unsigned short int %saOffset[%d] = {\n", prefix ? prefix : "", nKeyword);
for(i=j=0; i<nKeyword; i++){
if( j==0 ) printf(" ");
printf(" %3d,", aKeywordTable[i].offset);
@@ -487,26 +467,30 @@ main (int argc, char **argv)
printf(" h = ((charMap(z[0])*4) ^\n"
" (charMap(z[n-1])*3) ^\n"
" n) %% %d;\n", bestSize);
- printf(" for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){\n");
- printf(" if( aLen[i]==n &&"
- " casecmp(&zText[aOffset[i]],z,n)==0 ){\n");
+ printf(" for(i=((int)%saHash[h])-1; i>=0; i=((int)%saNext[i])-1){\n",
+ prefix ? prefix : "", prefix ? prefix : "");
+ printf(" if( %saLen[i]==n &&"
+ " casecmp(&%szText[%saOffset[i]],z,n)==0 ){\n",
+ prefix ? prefix : "",
+ prefix ? prefix : "",
+ prefix ? prefix : "");
printf(" return 1;\n");
printf(" }\n");
printf(" }\n");
printf(" return 0;\n");
printf("}\n");
- printf("\nstatic gboolean\nis_keyword (const char *z)\n{\n");
- printf("\treturn keywordCode(z, strlen (z));\n");
- printf("}\n");
+ printf("\nstatic gboolean\n%sis_keyword (const char *z)\n{\n", prefix ? prefix : "");
+ printf("\treturn %skeywordCode(z, strlen (z));\n", prefix ? prefix : "");
+ printf("}\n\n");
#ifdef TEST_RESERVED_WORDS
- printf("\nstatic void\ntest_keywords (void)\n{\n");
+ printf("\nstatic void\n%stest_keywords (void)\n{\n", prefix ? prefix : "");
printf("\tint i;\n");
printf("\tfor (i = 0; i < %d; i++) {\n", nKeyword);
- printf("\t\tif (! is_keyword (keywords[i]))\n");
- printf("\t\t\tprintf (\"KEYWORK %%s ignored!\\n\", keywords[i]);\n");
+ printf("\t\tif (! %sis_keyword (%skeywords[i]))\n", prefix ? prefix : "", prefix ? prefix : "");
+ printf("\t\t\tprintf (\"KEYWORK %%s ignored!\\n\", %skeywords[i]);\n", prefix ? prefix : "");
printf("\t}\n");
- printf("}\n");
+ printf("}\n\n");
#endif
diff --git a/providers/mysql/Makefile.am b/providers/mysql/Makefile.am
index b366e2e..4b75200 100644
--- a/providers/mysql/Makefile.am
+++ b/providers/mysql/Makefile.am
@@ -10,6 +10,18 @@ AM_CPPFLAGS = \
-I$(top_builddir) \
$(LIBGDA_CFLAGS) $(MYSQL_CFLAGS)
+mkkeywordhash$(EXEEXT_FOR_BUILD): $(top_srcdir)/libgda/sqlite/mkkeywordhash.c
+ $(CC_FOR_BUILD) -o mkkeywordhash$(EXEEXT_FOR_BUILD) $(GDA_DEBUG_FLAGS) $<
+
+keyword_files=keywords_V50.list keywords_V51.list keywords_V54.list keywords_V60.list
+pkeyword_files=$(addprefix $(top_srcdir)/providers/mysql/,$(keyword_files))
+
+keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) $(pkeyword_files)
+ ./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/mysql/keywords_V50.list V50 > keywords_hash.c
+ ./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/mysql/keywords_V51.list V51 >> keywords_hash.c
+ ./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/mysql/keywords_V54.list V54 >> keywords_hash.c
+ ./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/mysql/keywords_V60.list V60 >> keywords_hash.c
+
# parser generation
parser.c parser.h: parser.y $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD)
- $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD) -q -d $(srcdir)/parser.y $(top_srcdir)/libgda/sql-parser/lempar.c
@@ -20,7 +32,7 @@ gen_def$(EXEEXT_FOR_BUILD): gen_def.c
mysql_token_types.h: gen_def$(EXEEXT_FOR_BUILD) parser.h
./gen_def$(EXEEXT_FOR_BUILD) > mysql_token_types.h
-$(OBJECTS) $(libgda_mysql_la_OBJECTS): mysql_token_types.h
+$(OBJECTS) $(libgda_mysql_la_OBJECTS): mysql_token_types.h keywords_hash.c
libgda_mysql_la_SOURCES = \
gda-mysql-blob-op.c \
@@ -74,7 +86,8 @@ xml_DATA = $(xml_in_files:.xml.in=.xml)
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libgda-mysql-4.0.pc
-EXTRA_DIST = $(xml_in_files) libgda-mysql-4.0.pc.in parser.y gen_def.c
+EXTRA_DIST = $(xml_in_files) libgda-mysql-4.0.pc.in parser.y gen_def.c $(keyword_files)
DISTCLEANFILES = $(xml_DATA)
-CLEANFILES = parser.h parser.c parser.out mysql_token_types.h gen_def$(EXEEXT_FOR_BUILD)
+CLEANFILES = parser.h parser.c parser.out mysql_token_types.h gen_def$(EXEEXT_FOR_BUILD) \
+ mkkeywordhash$(EXEEXT_FOR_BUILD) keywords_hash.c
diff --git a/providers/mysql/gda-mysql-meta.c b/providers/mysql/gda-mysql-meta.c
index 8a5bfe9..9f6b823 100644
--- a/providers/mysql/gda-mysql-meta.c
+++ b/providers/mysql/gda-mysql-meta.c
@@ -23,6 +23,7 @@
#include <string.h>
#include "gda-mysql.h"
#include "gda-mysql-meta.h"
+#include "gda-mysql-util.h"
#include "gda-mysql-provider.h"
#include <libgda/gda-meta-store.h>
#include <libgda/sql-parser/gda-sql-parser.h>
@@ -250,6 +251,10 @@ _gda_mysql_provider_meta_init (GdaServerProvider *provider)
"name2", G_TYPE_STRING, "");
g_static_mutex_unlock (&init_mutex);
+
+#ifdef GDA_DEBUG
+ _gda_mysql_test_keywords ();
+#endif
}
gboolean
@@ -261,10 +266,16 @@ _gda_mysql_meta__info (GdaServerProvider *prov,
{
GdaDataModel *model;
gboolean retval;
+ MysqlConnectionData *cdata;
+ cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
+
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_CATALOG], NULL, error);
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model, NULL, error, NULL);
g_object_unref (G_OBJECT(model));
}
@@ -321,6 +332,10 @@ _gda_mysql_meta__btypes (GdaServerProvider *prov,
};
GdaDataModel *model;
gboolean retval = TRUE;
+ MysqlConnectionData *cdata;
+ cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
model = gda_meta_store_create_modify_data_model (store, context->table_name);
if (model == NULL)
@@ -362,8 +377,10 @@ _gda_mysql_meta__btypes (GdaServerProvider *prov,
g_list_free (values);
}
- if (retval)
+ if (retval) {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model, NULL, error, NULL);
+ }
g_object_unref (G_OBJECT(model));
}
@@ -427,7 +444,6 @@ _gda_mysql_meta__enums (GdaServerProvider *prov,
GdaMetaContext *context,
GError **error)
{
- //TO_IMPLEMENT;
/* Feature not supported by MySQL. */
return TRUE;
}
@@ -442,7 +458,6 @@ _gda_mysql_meta_enums (GdaServerProvider *prov,
const GValue *udt_schema,
const GValue *udt_name)
{
- //TO_IMPLEMENT;
/* Feature not supported by MySQL. */
return TRUE;
}
@@ -455,7 +470,6 @@ _gda_mysql_meta__domains (GdaServerProvider *prov,
GdaMetaContext *context,
GError **error)
{
- //TO_IMPLEMENT;
/* Feature not supported by MySQL. */
return TRUE;
}
@@ -469,7 +483,6 @@ _gda_mysql_meta_domains (GdaServerProvider *prov,
const GValue *domain_catalog,
const GValue *domain_schema)
{
- //TO_IMPLEMENT;
/* Feature not supported by MySQL. */
return TRUE;
}
@@ -481,7 +494,6 @@ _gda_mysql_meta__constraints_dom (GdaServerProvider *prov,
GdaMetaContext *context,
GError **error)
{
- //TO_IMPLEMENT;
/* Feature not supported by MySQL. */
return TRUE;
}
@@ -496,7 +508,6 @@ _gda_mysql_meta_constraints_dom (GdaServerProvider *prov,
const GValue *domain_schema,
const GValue *domain_name)
{
- //TO_IMPLEMENT;
/* Feature not supported by MySQL. */
return TRUE;
}
@@ -508,7 +519,6 @@ _gda_mysql_meta__el_types (GdaServerProvider *prov,
GdaMetaContext *context,
GError **error)
{
- //TO_IMPLEMENT;
/* Feature not supported by MySQL. */
return TRUE;
}
@@ -521,7 +531,6 @@ _gda_mysql_meta_el_types (GdaServerProvider *prov,
GError **error,
const GValue *specific_name)
{
- //TO_IMPLEMENT;
/* Feature not supported by MySQL. */
return TRUE;
}
@@ -533,7 +542,6 @@ _gda_mysql_meta__collations (GdaServerProvider *prov,
GdaMetaContext *context,
GError **error)
{
- //TO_IMPLEMENT;
/* Feature not supported by MySQL. */
return TRUE;
}
@@ -559,14 +567,18 @@ _gda_mysql_meta__character_sets (GdaServerProvider *prov,
GdaMetaContext *context,
GError **error)
{
- //TO_IMPLEMENT;
-
GdaDataModel *model;
gboolean retval;
+ MysqlConnectionData *cdata;
+ cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
+
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_CHARACTER_SETS_ALL], NULL, error);
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
}
@@ -584,10 +596,12 @@ _gda_mysql_meta_character_sets (GdaServerProvider *prov,
const GValue *chset_schema,
const GValue *chset_name_n)
{
- //TO_IMPLEMENT;
-
GdaDataModel *model;
gboolean retval;
+ MysqlConnectionData *cdata;
+ cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), chset_catalog, error))
return FALSE;
@@ -599,6 +613,7 @@ _gda_mysql_meta_character_sets (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
@@ -614,19 +629,23 @@ _gda_mysql_meta__schemata (GdaServerProvider *prov,
GdaMetaContext *context,
GError **error)
{
- // TO_IMPLEMENT;
-
GType col_types[] = {
0, 0, 0,
G_TYPE_BOOLEAN, G_TYPE_NONE
};
GdaDataModel *model;
gboolean retval;
+ MysqlConnectionData *cdata;
+ cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
+
model = gda_connection_statement_execute_select_full (cnc, internal_stmt[I_STMT_SCHEMAS_ALL], NULL,
GDA_STATEMENT_MODEL_RANDOM_ACCESS, col_types, error);
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
}
@@ -643,14 +662,16 @@ _gda_mysql_meta_schemata (GdaServerProvider *prov,
const GValue *catalog_name,
const GValue *schema_name_n)
{
- // TO_IMPLEMENT;
-
GType col_types[] = {
0, 0, 0,
G_TYPE_BOOLEAN, G_TYPE_NONE
};
GdaDataModel *model;
gboolean retval;
+ MysqlConnectionData *cdata;
+ cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), catalog_name, error))
return FALSE;
@@ -660,6 +681,7 @@ _gda_mysql_meta_schemata (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model, NULL, error, NULL);
g_object_unref (G_OBJECT(model));
}
@@ -671,6 +693,7 @@ _gda_mysql_meta_schemata (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model,
"schema_name=##name::string",
error,
@@ -719,6 +742,7 @@ _gda_mysql_meta__tables_views (GdaServerProvider *prov,
retval = FALSE;
else {
copy.table_name = "_tables";
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, ©, model_tables, error);
g_object_unref (G_OBJECT(model_tables));
}
@@ -729,6 +753,7 @@ _gda_mysql_meta__tables_views (GdaServerProvider *prov,
retval = FALSE;
else {
copy.table_name = "_views";
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, ©, model_views, error);
g_object_unref (G_OBJECT(model_views));
}
@@ -746,8 +771,6 @@ _gda_mysql_meta_tables_views (GdaServerProvider *prov,
const GValue *table_schema,
const GValue *table_name_n)
{
- // TO_IMPLEMENT;
-
GType col_types_tables[] = {
0, 0, 0, 0,
G_TYPE_BOOLEAN, G_TYPE_NONE
@@ -784,6 +807,7 @@ _gda_mysql_meta_tables_views (GdaServerProvider *prov,
if (model_tables == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, ©, model_tables, NULL);
g_object_unref (G_OBJECT(model_tables));
}
@@ -794,6 +818,7 @@ _gda_mysql_meta_tables_views (GdaServerProvider *prov,
if (model_views == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, ©, model_views, NULL);
g_object_unref (G_OBJECT(model_views));
}
@@ -808,6 +833,7 @@ _gda_mysql_meta_tables_views (GdaServerProvider *prov,
retval = FALSE;
else {
copy.table_name = "_tables";
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, ©, model_tables, error);
g_object_unref (G_OBJECT(model_tables));
}
@@ -819,6 +845,7 @@ _gda_mysql_meta_tables_views (GdaServerProvider *prov,
retval = FALSE;
else {
copy.table_name = "_views";
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, ©, model_views, error);
g_object_unref (G_OBJECT(model_views));
}
@@ -961,8 +988,6 @@ _gda_mysql_meta__columns (GdaServerProvider *prov,
GdaMetaContext *context,
GError **error)
{
- // TO_IMPLEMENT;
-
GType col_types[] = {
0, 0, 0, 0, G_TYPE_INT, G_TYPE_STRING,
G_TYPE_BOOLEAN,
@@ -1008,8 +1033,10 @@ _gda_mysql_meta__columns (GdaServerProvider *prov,
break;
}
- if (retval)
+ if (retval) {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, proxy/* model */, error);
+ }
g_object_unref (G_OBJECT(proxy));
g_object_unref (G_OBJECT(model));
@@ -1028,8 +1055,6 @@ _gda_mysql_meta_columns (GdaServerProvider *prov,
const GValue *table_schema,
const GValue *table_name)
{
- // TO_IMPLEMENT;
-
GType col_types[] = {
0, 0, 0, 0, G_TYPE_INT, G_TYPE_STRING,
G_TYPE_BOOLEAN,
@@ -1081,11 +1106,13 @@ _gda_mysql_meta_columns (GdaServerProvider *prov,
break;
}
- if (retval)
+ if (retval) {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, proxy,
"table_schema=##schema::string AND table_name=##name::string",
error,
"schema", table_schema, "name", table_name, NULL);
+ }
g_object_unref (G_OBJECT(proxy));
g_object_unref (G_OBJECT(model));
}
@@ -1100,8 +1127,6 @@ _gda_mysql_meta__view_cols (GdaServerProvider *prov,
GdaMetaContext *context,
GError **error)
{
- // TO_IMPLEMENT;
-
GdaDataModel *model;
gboolean retval;
/* Check correct mysql server version. */
@@ -1119,6 +1144,7 @@ _gda_mysql_meta__view_cols (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
}
@@ -1136,9 +1162,12 @@ _gda_mysql_meta_view_cols (GdaServerProvider *prov,
const GValue *view_schema,
const GValue *view_name)
{
- // TO_IMPLEMENT;
GdaDataModel *model;
gboolean retval;
+ MysqlConnectionData *cdata;
+ cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), view_catalog, error))
return FALSE;
@@ -1150,6 +1179,7 @@ _gda_mysql_meta_view_cols (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
@@ -1165,19 +1195,23 @@ _gda_mysql_meta__constraints_tab (GdaServerProvider *prov,
GdaMetaContext *context,
GError **error)
{
- // TO_IMPLEMENT;
-
GType col_types[] = {
0, 0, 0, 0, 0, 0, 0, 0,
G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_NONE
};
GdaDataModel *model;
gboolean retval;
+ MysqlConnectionData *cdata;
+ cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
+
model = gda_connection_statement_execute_select_full (cnc, internal_stmt[I_STMT_TABLES_CONSTRAINTS_ALL], NULL,
GDA_STATEMENT_MODEL_RANDOM_ACCESS, col_types, error);
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
}
@@ -1196,10 +1230,12 @@ _gda_mysql_meta_constraints_tab (GdaServerProvider *prov,
const GValue *table_name,
const GValue *constraint_name_n)
{
- // TO_IMPLEMENT;
-
GdaDataModel *model;
gboolean retval;
+ MysqlConnectionData *cdata;
+ cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), table_catalog, error))
return FALSE;
@@ -1212,6 +1248,7 @@ _gda_mysql_meta_constraints_tab (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model,
"table_schema = ##schema::string AND table_name = ##name::string",
error,
@@ -1225,6 +1262,7 @@ _gda_mysql_meta_constraints_tab (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model,
"table_schema=##schema::string AND table_name=##name::string AND constraint_name=##name2::string",
error,
@@ -1255,6 +1293,7 @@ _gda_mysql_meta__constraints_ref (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
}
@@ -1300,6 +1339,7 @@ _gda_mysql_meta_constraints_ref (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model,
"table_schema=##schema::string AND table_name=##name::string AND constraint_name=##name2::string",
error,
@@ -1323,19 +1363,23 @@ _gda_mysql_meta__key_columns (GdaServerProvider *prov,
GdaMetaContext *context,
GError **error)
{
- // TO_IMPLEMENT;
-
GType col_types[] = {
0, 0, 0, 0, 0,
G_TYPE_INT, G_TYPE_NONE
};
GdaDataModel *model;
gboolean retval;
+ MysqlConnectionData *cdata;
+ cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
+
model = gda_connection_statement_execute_select_full (cnc, internal_stmt[I_STMT_KEY_COLUMN_USAGE_ALL], NULL,
GDA_STATEMENT_MODEL_RANDOM_ACCESS, col_types, error);
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
}
@@ -1354,8 +1398,6 @@ _gda_mysql_meta_key_columns (GdaServerProvider *prov,
const GValue *table_name,
const GValue *constraint_name)
{
- // TO_IMPLEMENT;
-
GdaDataModel *model;
gboolean retval;
/* Check correct mysql server version. */
@@ -1382,6 +1424,7 @@ _gda_mysql_meta_key_columns (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model,
"table_schema=##schema::string AND table_name=##name::string AND constraint_name=##name2::string",
error,
@@ -1445,6 +1488,7 @@ _gda_mysql_meta__triggers (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
}
@@ -1487,6 +1531,7 @@ _gda_mysql_meta_triggers (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
@@ -1506,10 +1551,16 @@ _gda_mysql_meta__routines (GdaServerProvider *prov,
GdaDataModel *model;
gboolean retval;
+ MysqlConnectionData *cdata;
+ cdata = (MysqlConnectionData *) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
+
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_ROUTINES_ALL], NULL, error);
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
}
@@ -1556,6 +1607,7 @@ _gda_mysql_meta_routines (GdaServerProvider *prov,
if (model == NULL)
retval = FALSE;
else {
+ gda_meta_store_set_reserved_keywords_func (store, _gda_mysql_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (G_OBJECT(model));
diff --git a/providers/mysql/gda-mysql-provider.c b/providers/mysql/gda-mysql-provider.c
index c54e287..416ef5f 100644
--- a/providers/mysql/gda-mysql-provider.c
+++ b/providers/mysql/gda-mysql-provider.c
@@ -159,6 +159,10 @@ static GObject *gda_mysql_provider_statement_execute (GdaServerProvi
gpointer cb_data,
GError **error);
+/* Quoting */
+static gchar *gda_mysql_identifier_quote (GdaServerProvider *provider, GdaConnection *cnc,
+ const gchar *id,
+ gboolean meta_store_convention, gboolean force_quotes);
/* distributed transactions */
static gboolean gda_mysql_provider_xa_start (GdaServerProvider *provider,
@@ -253,6 +257,8 @@ gda_mysql_provider_class_init (GdaMysqlProviderClass *klass)
provider_class->cancel = NULL;
provider_class->create_connection = NULL;
+ provider_class->identifier_quote = gda_mysql_identifier_quote;
+
memset (&(provider_class->meta_funcs), 0, sizeof (GdaServerProviderMeta));
provider_class->meta_funcs._info = _gda_mysql_meta__info;
provider_class->meta_funcs._btypes = _gda_mysql_meta__btypes;
@@ -471,6 +477,17 @@ get_mysql_version (MYSQL *mysql)
(version_long%100));
}
+static gchar *
+get_mysql_short_version (MYSQL *mysql)
+{
+ g_return_val_if_fail (mysql != NULL, NULL);
+ unsigned long version_long;
+ version_long = mysql_get_server_version (mysql);
+ return g_strdup_printf ("%lu%lu",
+ version_long/10000,
+ (version_long%10000)/100);
+}
+
/*
* Open connection request
@@ -601,6 +618,7 @@ gda_mysql_provider_open_connection (GdaServerProvider *provider,
cdata->version_long = mysql_get_server_version (mysql);
cdata->version = get_mysql_version (mysql);
+ cdata->short_version = get_mysql_short_version (mysql);
cdata->tables_case_sensitive = case_sensitive;
return TRUE;
@@ -1239,13 +1257,55 @@ mysql_render_table (GdaSqlTable *table, GdaSqlRenderingContext *context, GError
GString *string;
string = g_string_new ("");
for (i = 0; ids_array [i]; i++) {
- if (*(ids_array [i]) == '"')
- gda_sql_identifier_remove_quotes (ids_array [i]);
+ if (*(ids_array [i]) == '"') {
+ gchar *ptr;
+ for (ptr = ids_array [i]; *ptr; ptr++) {
+ if (*ptr == '"')
+ *ptr = '`';
+ }
+ }
+ if (i != 0)
+ g_string_append_c (string, '.');
+ g_string_append (string, ids_array [i]);
+ }
+ g_strfreev (ids_array);
+ return g_string_free (string, FALSE);
+}
+
+static gchar *
+mysql_render_field (GdaSqlField *field, GdaSqlRenderingContext *context, GError **error)
+{
+ g_return_val_if_fail (field, NULL);
+ g_return_val_if_fail (GDA_SQL_ANY_PART (field)->type == GDA_SQL_ANY_SQL_FIELD, NULL);
+
+ /* can't have: field->field_name not a valid SQL identifier */
+ if (!gda_sql_any_part_check_structure (GDA_SQL_ANY_PART (field), error)) return NULL;
+
+ gchar **ids_array;
+ ids_array = gda_sql_identifier_split (field->field_name);
+ if (!ids_array) {
+ g_set_error (error, GDA_SQL_ERROR, GDA_SQL_STRUCTURE_CONTENTS_ERROR,
+ "%s", _("Malformed field name"));
+ return NULL;
+ }
+
+ gint i;
+ GString *string;
+ string = g_string_new ("");
+ for (i = 0; ids_array [i]; i++) {
+ if (*(ids_array [i]) == '"') {
+ gchar *ptr;
+ for (ptr = ids_array [i]; *ptr; ptr++) {
+ if (*ptr == '"')
+ *ptr = '`';
+ }
+ }
if (i != 0)
g_string_append_c (string, '.');
g_string_append (string, ids_array [i]);
}
g_strfreev (ids_array);
+ g_print ("%s ==> %s\n", field->field_name, string->str);
return g_string_free (string, FALSE);
}
@@ -1277,7 +1337,7 @@ gda_mysql_provider_statement_to_sql (GdaServerProvider *provider,
memset (&context, 0, sizeof (context));
context.params = params;
context.flags = flags;
- /* remove double quotes around table name */
+ /* replace double quotes around table name with backquotes */
context.render_select_target = (GdaSqlRenderingFunc) mysql_render_select_target;
context.render_table = (GdaSqlRenderingFunc) mysql_render_table;
@@ -1332,6 +1392,7 @@ real_prepare (GdaServerProvider *provider, GdaConnection *cnc, GdaStatement *stm
return FALSE;
}
+ g_print ("PREPARE: %s\n", sql);
if (mysql_stmt_prepare (mysql_stmt, sql, strlen (sql))) {
_gda_mysql_make_error (cdata->cnc, NULL, mysql_stmt, error);
mysql_stmt_close (mysql_stmt);
@@ -2004,6 +2065,108 @@ gda_mysql_provider_xa_recover (GdaServerProvider *provider,
return NULL;
}
+static gchar *
+identifier_add_quotes (const gchar *str)
+{
+ gchar *retval, *rptr;
+ const gchar *sptr;
+ gint len;
+
+ if (!str)
+ return NULL;
+
+ len = strlen (str);
+ retval = g_new (gchar, 2*len + 3);
+ *retval = '`';
+ for (rptr = retval+1, sptr = str; *sptr; sptr++, rptr++) {
+ if (*sptr == '`') {
+ *rptr = '\\';
+ rptr++;
+ *rptr = *sptr;
+ }
+ else
+ *rptr = *sptr;
+ }
+ *rptr = '`';
+ rptr++;
+ *rptr = 0;
+ return retval;
+}
+
+static gboolean
+_sql_identifier_needs_quotes (const gchar *str)
+{
+ const gchar *ptr;
+
+ g_return_val_if_fail (str, FALSE);
+ for (ptr = str; *ptr; ptr++) {
+ /* quote if 1st char is a number */
+ if ((*ptr <= '9') && (*ptr >= '0')) {
+ if (ptr == str)
+ return TRUE;
+ continue;
+ }
+ if (((*ptr >= 'A') && (*ptr <= 'Z')) ||
+ ((*ptr >= 'a') && (*ptr <= 'z')))
+ continue;
+
+ if ((*ptr != '$') && (*ptr != '_') && (*ptr != '#'))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gchar *
+gda_mysql_identifier_quote (GdaServerProvider *provider, GdaConnection *cnc,
+ const gchar *id,
+ gboolean meta_store_convention, gboolean force_quotes)
+{
+ GdaSqlReservedKeywordsFunc kwfunc;
+ MysqlConnectionData *cdata = NULL;
+
+ if (cnc) {
+ cdata = (MysqlConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return NULL;
+ }
+
+ kwfunc = _gda_mysql_get_reserved_keyword_func (cdata);
+ if (meta_store_convention) {
+ /* @id can either:
+ * - be enquoted between double quotes
+ * - not enquoted and in lower case
+ */
+ if (*id == '"') {
+ /* must be quoted, replace '"' with '`' */
+ gchar *ptr, *retval;
+ retval = g_strdup (id);
+ *retval = '`';
+ for (ptr = retval + 1; *ptr; ptr++) {
+ if (*ptr == '"')
+ *ptr = '`';
+ }
+ return retval;
+ }
+
+ if (kwfunc (id) || _sql_identifier_needs_quotes (id) || force_quotes)
+ return identifier_add_quotes (id);
+
+ /* nothing to do */
+ return g_strdup (id);
+ }
+ else {
+ if (*id == '`') {
+ /* there are already some quotes */
+ return g_strdup (id);
+ }
+ if (kwfunc (id) || _sql_identifier_needs_quotes (id) || force_quotes)
+ return identifier_add_quotes (id);
+
+ /* nothing to do */
+ return g_strdup (id);
+ }
+}
+
/*
* Free connection's specific data
*/
@@ -2019,7 +2182,7 @@ gda_mysql_free_cnc_data (MysqlConnectionData *cdata)
}
g_free (cdata->version);
- cdata->version_long = -1;
+ g_free (cdata->short_version);
g_free (cdata);
}
diff --git a/providers/mysql/gda-mysql-recordset.c b/providers/mysql/gda-mysql-recordset.c
index 2a2ca77..aae08cf 100644
--- a/providers/mysql/gda-mysql-recordset.c
+++ b/providers/mysql/gda-mysql-recordset.c
@@ -523,6 +523,7 @@ gda_mysql_recordset_new (GdaConnection *cnc,
/* create data model */
model = g_object_new (GDA_TYPE_MYSQL_RECORDSET,
+ "connection", cnc,
"prepared-stmt", ps,
"model-usage", rflags,
"exec-params", exec_params,
diff --git a/providers/mysql/gda-mysql-util.c b/providers/mysql/gda-mysql-util.c
index 98ad113..62fbb39 100644
--- a/providers/mysql/gda-mysql-util.c
+++ b/providers/mysql/gda-mysql-util.c
@@ -25,6 +25,9 @@
#include <glib/gi18n-lib.h>
#include "gda-mysql-util.h"
+#include <libgda/sqlite/keywords_hash.h>
+#include "keywords_hash.c" /* this one is dynamically generated */
+
/*
* Create a new #GdaConnectionEvent object and "adds" it to @cnc
*
@@ -78,3 +81,34 @@ _gda_mysql_make_error (GdaConnection *cnc,
return event_error;
}
+
+#ifdef GDA_DEBUG
+void
+_gda_mysql_test_keywords (void)
+{
+ V50test_keywords();
+ V51test_keywords();
+ V54test_keywords();
+ V60test_keywords();
+}
+#endif
+
+GdaSqlReservedKeywordsFunc
+_gda_mysql_get_reserved_keyword_func (MysqlConnectionData *cdata)
+{
+ if (cdata && cdata->short_version) {
+ switch (*cdata->short_version) {
+ case '5':
+ if (cdata->short_version[1] == '1')
+ return V51is_keyword;
+ if (cdata->short_version[1] == '0')
+ return V50is_keyword;
+ return V54is_keyword;
+ case '6':
+ default:
+ return V60is_keyword;
+ break;
+ }
+ }
+ return V60is_keyword;
+}
diff --git a/providers/mysql/gda-mysql-util.h b/providers/mysql/gda-mysql-util.h
index a2104ac..250fa4b 100644
--- a/providers/mysql/gda-mysql-util.h
+++ b/providers/mysql/gda-mysql-util.h
@@ -28,22 +28,15 @@
G_BEGIN_DECLS
-GdaConnectionEvent *
-_gda_mysql_make_error (GdaConnection *cnc,
- MYSQL *mysql,
- MYSQL_STMT *mysql_stmt,
- GError **error);
-/* int */
-/* _gda_mysql_real_query_wrap (GdaConnection *cnc, */
-/* MYSQL *mysql, */
-/* const char *query, */
-/* unsigned long length); */
-/* int */
-/* _gda_mysql_get_connection_type_list (GdaConnection *cnc, */
-/* MysqlConnectionData *cdata); */
-/* GType */
-/* _gda_mysql_type_oid_to_gda (MysqlConnectionData *cdata, */
-/* enum enum_field_types mysql_type); */
+GdaConnectionEvent * _gda_mysql_make_error (GdaConnection *cnc,
+ MYSQL *mysql,
+ MYSQL_STMT *mysql_stmt,
+ GError **error);
+#ifdef GDA_DEBUG
+void _gda_mysql_test_keywords (void);
+#endif
+GdaSqlReservedKeywordsFunc _gda_mysql_get_reserved_keyword_func (MysqlConnectionData *cdata);
+
G_END_DECLS
diff --git a/providers/mysql/gda-mysql.h b/providers/mysql/gda-mysql.h
index f221b5f..c601771 100644
--- a/providers/mysql/gda-mysql.h
+++ b/providers/mysql/gda-mysql.h
@@ -48,6 +48,7 @@ typedef struct {
/* Backend version (to which we're connected). */
gchar *version;
unsigned long version_long;
+ gchar *short_version;
/* specifies how case sensitiveness is */
gboolean tables_case_sensitive;
diff --git a/providers/mysql/keywords_V50.list b/providers/mysql/keywords_V50.list
new file mode 100644
index 0000000..ddcf22b
--- /dev/null
+++ b/providers/mysql/keywords_V50.list
@@ -0,0 +1,80 @@
+#
+# MySQL 5.0's keywords
+#
+
+ADD ALL ALTER
+ANALYZE AND AS
+ASC ASENSITIVE BEFORE
+BETWEEN BIGINT BINARY
+BLOB BOTH BY
+CALL CASCADE CASE
+CHANGE CHAR CHARACTER
+CHECK COLLATE COLUMN
+COLUMNS CONDITION CONNECTION
+CONSTRAINT CONTINUE CONVERT
+CREATE CROSS CURRENT_DATE
+CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER
+CURSOR DATABASE DATABASES
+DAY_HOUR DAY_MICROSECOND DAY_MINUTE
+DAY_SECOND DEC DECIMAL
+DECLARE DEFAULT DELAYED
+DELETE DESC DESCRIBE
+DETERMINISTIC DISTINCT DISTINCTROW
+DIV DOUBLE DROP
+DUAL EACH ELSE
+ELSEIF ENCLOSED ESCAPED
+EXISTS EXIT EXPLAIN
+FALSE FETCH FIELDS
+FLOAT FLOAT4 FLOAT8
+FOR FORCE FOREIGN
+FROM FULLTEXT GOTO
+GRANT GROUP HAVING
+HIGH_PRIORITY HOUR_MICROSECOND HOUR_MINUTE
+HOUR_SECOND IF IGNORE
+IN INDEX INFILE
+INNER INOUT INSENSITIVE
+INSERT INT INT1
+INT2 INT3 INT4
+INT8 INTEGER INTERVAL
+INTO IS ITERATE
+JOIN KEY KEYS
+KILL LABEL LEADING
+LEAVE LEFT LIKE
+LIMIT LINES LOAD
+LOCALTIME LOCALTIMESTAMP LOCK
+LONG LONGBLOB LONGTEXT
+LOOP LOW_PRIORITY MATCH
+MEDIUMBLOB MEDIUMINT MEDIUMTEXT
+MIDDLEINT MINUTE_MICROSECOND MINUTE_SECOND
+MOD MODIFIES NATURAL
+NOT NO_WRITE_TO_BINLOG NULL
+NUMERIC ON OPTIMIZE
+OPTION OPTIONALLY OR
+ORDER OUT OUTER
+OUTFILE PRECISION PRIMARY
+PRIVILEGES PROCEDURE PURGE
+READ READS REAL
+REFERENCES REGEXP RELEASE
+RENAME REPEAT REPLACE
+REQUIRE RESTRICT RETURN
+REVOKE RIGHT RLIKE
+SCHEMA SCHEMAS SECOND_MICROSECOND
+SELECT SENSITIVE SEPARATOR
+SET SHOW SMALLINT
+SONAME SPATIAL SPECIFIC
+SQL SQLEXCEPTION SQLSTATE
+SQLWARNING SQL_BIG_RESULT SQL_CALC_FOUND_ROWS
+SQL_SMALL_RESULT SSL STARTING
+STRAIGHT_JOIN TABLE TABLES
+TERMINATED THEN TINYBLOB
+TINYINT TINYTEXT TO
+TRAILING TRIGGER TRUE
+UNDO UNION UNIQUE
+UNLOCK UNSIGNED UPDATE
+UPGRADE USAGE USE
+USING UTC_DATE UTC_TIME
+UTC_TIMESTAMP VALUES VARBINARY
+VARCHAR VARCHARACTER VARYING
+WHEN WHERE WHILE
+WITH WRITE XOR
+YEAR_MONTH ZEROFILL
diff --git a/providers/mysql/keywords_V51.list b/providers/mysql/keywords_V51.list
new file mode 100644
index 0000000..601065f
--- /dev/null
+++ b/providers/mysql/keywords_V51.list
@@ -0,0 +1,80 @@
+#
+# MySQL 5.1's keywords
+#
+
+ACCESSIBLE ADD ALL
+ALTER ANALYZE AND
+AS ASC ASENSITIVE
+BEFORE BETWEEN BIGINT
+BINARY BLOB BOTH
+BY CALL CASCADE
+CASE CHANGE CHAR
+CHARACTER CHECK COLLATE
+COLUMN CONDITION CONNECTION
+CONSTRAINT CONTINUE CONVERT
+CREATE CROSS CURRENT_DATE
+CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER
+CURSOR DATABASE DATABASES
+DAY_HOUR DAY_MICROSECOND DAY_MINUTE
+DAY_SECOND DEC DECIMAL
+DECLARE DEFAULT DELAYED
+DELETE DESC DESCRIBE
+DETERMINISTIC DISTINCT DISTINCTROW
+DIV DOUBLE DROP
+DUAL EACH ELSE
+ELSEIF ENCLOSED ESCAPED
+EXISTS EXIT EXPLAIN
+FALSE FETCH FLOAT
+FLOAT4 FLOAT8 FOR
+FORCE FOREIGN FROM
+FULLTEXT GOTO GRANT
+GROUP HAVING HIGH_PRIORITY
+HOUR_MICROSECOND HOUR_MINUTE HOUR_SECOND
+IF IGNORE IN
+INDEX INFILE INNER
+INOUT INSENSITIVE INSERT
+INT INT1 INT2
+INT3 INT4 INT8
+INTEGER INTERVAL INTO
+IS ITERATE JOIN
+KEY KEYS KILL
+LABEL LEADING LEAVE
+LEFT LIKE LIMIT
+LINEAR LINES LOAD
+LOCALTIME LOCALTIMESTAMP LOCK
+LONG LONGBLOB LONGTEXT
+LOOP LOW_PRIORITY MASTER_SSL_VERIFY_SERVER_CERT
+MATCH MEDIUMBLOB MEDIUMINT
+MEDIUMTEXT MIDDLEINT MINUTE_MICROSECOND
+MINUTE_SECOND MOD MODIFIES
+NATURAL NOT NO_WRITE_TO_BINLOG
+NULL NUMERIC ON
+OPTIMIZE OPTION OPTIONALLY
+OR ORDER OUT
+OUTER OUTFILE PRECISION
+PRIMARY PROCEDURE PURGE
+RANGE READ READS
+READ_ONLY READ_WRITE REAL
+REFERENCES REGEXP RELEASE
+RENAME REPEAT REPLACE
+REQUIRE RESTRICT RETURN
+REVOKE RIGHT RLIKE
+SCHEMA SCHEMAS SECOND_MICROSECOND
+SELECT SENSITIVE SEPARATOR
+SET SHOW SMALLINT
+SPATIAL SPECIFIC SQL
+SQLEXCEPTION SQLSTATE SQLWARNING
+SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT
+SSL STARTING STRAIGHT_JOIN
+TABLE TERMINATED THEN
+TINYBLOB TINYINT TINYTEXT
+TO TRAILING TRIGGER
+TRUE UNDO UNION
+UNIQUE UNLOCK UNSIGNED
+UPDATE UPGRADE USAGE
+USE USING UTC_DATE
+UTC_TIME UTC_TIMESTAMP VALUES
+VARBINARY VARCHAR VARCHARACTER
+VARYING WHEN WHERE
+WHILE WITH WRITE
+XOR YEAR_MONTH ZEROFILL
\ No newline at end of file
diff --git a/providers/mysql/keywords_V54.list b/providers/mysql/keywords_V54.list
new file mode 100644
index 0000000..a075ce4
--- /dev/null
+++ b/providers/mysql/keywords_V54.list
@@ -0,0 +1,79 @@
+#
+# MySQL 5.4's keywords
+#
+
+ACCESSIBLE ADD ALL
+ALTER ANALYZE AND
+AS ASC ASENSITIVE
+BEFORE BETWEEN BIGINT
+BINARY BLOB BOTH
+BY CALL CASCADE
+CASE CHANGE CHAR
+CHARACTER CHECK COLLATE
+COLUMN CONDITION CONSTRAINT
+CONTINUE CONVERT CREATE
+CROSS CURRENT_DATE CURRENT_TIME
+CURRENT_TIMESTAMP CURRENT_USER CURSOR
+DATABASE DATABASES DAY_HOUR
+DAY_MICROSECOND DAY_MINUTE DAY_SECOND
+DEC DECIMAL DECLARE
+DEFAULT DELAYED DELETE
+DESC DESCRIBE DETERMINISTIC
+DISTINCT DISTINCTROW DIV
+DOUBLE DROP DUAL
+EACH ELSE ELSEIF
+ENCLOSED ESCAPED EXISTS
+EXIT EXPLAIN FALSE
+FETCH FLOAT FLOAT4
+FLOAT8 FOR FORCE
+FOREIGN FROM FULLTEXT
+GRANT GROUP HAVING
+HIGH_PRIORITY HOUR_MICROSECOND HOUR_MINUTE
+HOUR_SECOND IF IGNORE
+IN INDEX INFILE
+INNER INOUT INSENSITIVE
+INSERT INT INT1
+INT2 INT3 INT4
+INT8 INTEGER INTERVAL
+INTO IS ITERATE
+JOIN KEY KEYS
+KILL LEADING LEAVE
+LEFT LIKE LIMIT
+LINEAR LINES LOAD
+LOCALTIME LOCALTIMESTAMP LOCK
+LONG LONGBLOB LONGTEXT
+LOOP LOW_PRIORITY MASTER_SSL_VERIFY_SERVER_CERT
+MATCH MEDIUMBLOB MEDIUMINT
+MEDIUMTEXT MIDDLEINT MINUTE_MICROSECOND
+MINUTE_SECOND MOD MODIFIES
+NATURAL NOT NO_WRITE_TO_BINLOG
+NULL NUMERIC ON
+OPTIMIZE OPTION OPTIONALLY
+OR ORDER OUT
+OUTER OUTFILE PRECISION
+PRIMARY PROCEDURE PURGE
+RANGE READ READS
+READ_WRITE REAL REFERENCES
+REGEXP RELEASE RENAME
+REPEAT REPLACE REQUIRE
+RESTRICT RETURN REVOKE
+RIGHT RLIKE SCHEMA
+SCHEMAS SECOND_MICROSECOND SELECT
+SENSITIVE SEPARATOR SET
+SHOW SMALLINT SPATIAL
+SPECIFIC SQL SQLEXCEPTION
+SQLSTATE SQLWARNING SQL_BIG_RESULT
+SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT SSL
+STARTING STRAIGHT_JOIN TABLE
+TERMINATED THEN TINYBLOB
+TINYINT TINYTEXT TO
+TRAILING TRIGGER TRUE
+UNDO UNION UNIQUE
+UNLOCK UNSIGNED UPDATE
+USAGE USE USING
+UTC_DATE UTC_TIME UTC_TIMESTAMP
+VALUES VARBINARY VARCHAR
+VARCHARACTER VARYING WHEN
+WHERE WHILE WITH
+WRITE XOR YEAR_MONTH
+ZEROFILL
\ No newline at end of file
diff --git a/providers/mysql/keywords_V60.list b/providers/mysql/keywords_V60.list
new file mode 100644
index 0000000..f0d2ca0
--- /dev/null
+++ b/providers/mysql/keywords_V60.list
@@ -0,0 +1,81 @@
+#
+# MySQL 6.0's keywords
+#
+
+ACCESSIBLE ADD ALL
+ALTER ANALYZE AND
+AS ASC ASENSITIVE
+BEFORE BETWEEN BIGINT
+BINARY BLOB BOTH
+BY CALL CASCADE
+CASE CHANGE CHAR
+CHARACTER CHECK COLLATE
+COLUMN CONDITION CONSTRAINT
+CONTINUE CONVERT CREATE
+CROSS CURRENT_DATE CURRENT_TIME
+CURRENT_TIMESTAMP CURRENT_USER CURSOR
+DATABASE DATABASES DAY_HOUR
+DAY_MICROSECOND DAY_MINUTE DAY_SECOND
+DEC DECIMAL DECLARE
+DEFAULT DELAYED DELETE
+DESC DESCRIBE DETERMINISTIC
+DISTINCT DISTINCTROW DIV
+DOUBLE DROP DUAL
+EACH ELSE ELSEIF
+ENCLOSED ESCAPED EXISTS
+EXIT EXPLAIN FALSE
+FETCH FLOAT FLOAT4
+FLOAT8 FOR FORCE
+FOREIGN FROM FULLTEXT
+GRANT GROUP HAVING
+HIGH_PRIORITY HOUR_MICROSECOND HOUR_MINUTE
+HOUR_SECOND IF IGNORE
+IGNORE_SERVER_IDS IN INDEX
+INFILE INNER INOUT
+INSENSITIVE INSERT INT
+INT1 INT2 INT3
+INT4 INT8 INTEGER
+INTERVAL INTO IS
+ITERATE JOIN KEY
+KEYS KILL LEADING
+LEAVE LEFT LIKE
+LIMIT LINEAR LINES
+LOAD LOCALTIME LOCALTIMESTAMP
+LOCK LONG LONGBLOB
+LONGTEXT LOOP LOW_PRIORITY
+MASTER_HEARTBEAT_PERIOD MASTER_SSL_VERIFY_SERVER_CERT MATCH
+MEDIUMBLOB MEDIUMINT MEDIUMTEXT
+MIDDLEINT MINUTE_MICROSECOND MINUTE_SECOND
+MOD MODIFIES NATURAL
+NOT NO_WRITE_TO_BINLOG NULL
+NUMERIC ON OPTIMIZE
+OPTION OPTIONALLY OR
+ORDER OUT OUTER
+OUTFILE OVERWRITE PRECISION
+PRIMARY PROCEDURE PURGE
+RANGE READ READS
+READ_ONLY READ_WRITE REAL
+REFERENCES REGEXP RELEASE
+RENAME REPEAT REPLACE
+REQUIRE RESIGNAL RESTRICT
+RETURN REVOKE RIGHT
+RLIKE SCHEMA SCHEMAS
+SECOND_MICROSECOND SELECT SENSITIVE
+SEPARATOR SET SHOW
+SIGNAL SKIP_GAP_EVENT SMALLINT
+SPATIAL SPECIFIC SQL
+SQLEXCEPTION SQLSTATE SQLWARNING
+SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT
+SSL STARTING STRAIGHT_JOIN
+TABLE TERMINATED THEN
+TINYBLOB TINYINT TINYTEXT
+TO TRAILING TRIGGER
+TRUE UNDO UNION
+UNIQUE UNLOCK UNSIGNED
+UPDATE USAGE USE
+USING UTC_DATE UTC_TIME
+UTC_TIMESTAMP VALUES VARBINARY
+VARCHAR VARCHARACTER VARYING
+WHEN WHERE WHILE
+WITH WRITE XOR
+YEAR_MONTH ZEROFILL
\ No newline at end of file
diff --git a/providers/postgres/Makefile.am b/providers/postgres/Makefile.am
index 51418e9..0f048eb 100644
--- a/providers/postgres/Makefile.am
+++ b/providers/postgres/Makefile.am
@@ -7,15 +7,20 @@ AM_CPPFLAGS = \
-I$(top_builddir) \
$(LIBGDA_CFLAGS) $(POSTGRES_CFLAGS)
-# parser generation
-parser.c parser.h: parser.y $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD)
- - $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD) -q -d $(srcdir)/parser.y $(top_srcdir)/libgda/sql-parser/lempar.c
+keyword_files=keywords_82.list keywords_83.list keywords_84.list
+pkeyword_files=$(addprefix $(top_srcdir)/providers/postgres/,$(keyword_files))
mkkeywordhash$(EXEEXT_FOR_BUILD): $(top_srcdir)/libgda/sqlite/mkkeywordhash.c
$(CC_FOR_BUILD) -g -o mkkeywordhash$(EXEEXT_FOR_BUILD) $(GDA_DEBUG_FLAGS) $<
-keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list
- ./mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list > keywords_hash.c
+keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) $(pkeyword_files)
+ ./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/postgres/keywords_82.list V82 > keywords_hash.c
+ ./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/postgres/keywords_83.list V83 >> keywords_hash.c
+ ./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/postgres/keywords_84.list V84 >> keywords_hash.c
+
+# parser generation
+parser.c parser.h: parser.y $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD)
+ - $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD) -q -d $(srcdir)/parser.y $(top_srcdir)/libgda/sql-parser/lempar.c
gen_def$(EXEEXT_FOR_BUILD): gen_def.c
$(CC_FOR_BUILD) -o gen_def$(EXEEXT_FOR_BUILD) -DIMPOSED_HEADER=\""$(top_srcdir)/libgda/sql-parser/token_types.h"\" $(srcdir)/gen_def.c
@@ -77,7 +82,7 @@ xml_DATA = $(xml_in_files:.xml.in=.xml)
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libgda-postgres-4.0.pc
-EXTRA_DIST = $(xml_in_files) libgda-postgres-4.0.pc.in parser.y gen_def.c keywords.list
+EXTRA_DIST = $(xml_in_files) libgda-postgres-4.0.pc.in parser.y gen_def.c $(keyword_files)
DISTCLEANFILES = $(xml_DATA)
CLEANFILES = parser.h parser.c parser.out postgres_token_types.h gen_def$(EXEEXT_FOR_BUILD) \
diff --git a/providers/postgres/gda-postgres-meta.c b/providers/postgres/gda-postgres-meta.c
index be1267d..723bcf4 100644
--- a/providers/postgres/gda-postgres-meta.c
+++ b/providers/postgres/gda-postgres-meta.c
@@ -33,7 +33,6 @@
#include <libgda/gda-data-model-array.h>
#include <libgda/gda-set.h>
#include <libgda/providers-support/gda-meta-column-types.h>
-#include "keywords_hash.c" /* this one is dynamically generated */
/*
* predefined statements' IDs
@@ -277,8 +276,9 @@ _gda_postgres_provider_meta_init (GdaServerProvider *provider)
"name2", G_TYPE_STRING, "");
g_static_mutex_unlock (&init_mutex);
+
#ifdef GDA_DEBUG
- test_keywords ();
+ _gda_postgres_test_keywords ();
#endif
}
@@ -288,12 +288,17 @@ _gda_postgres_meta__info (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_CATALOG], NULL, error);
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model, NULL, error, NULL);
g_object_unref (model);
@@ -344,7 +349,7 @@ _gda_postgres_meta__btypes (GdaServerProvider *prov, GdaConnection *cnc,
/* modify meta store with @proxy */
if (retval) {
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, proxy, NULL, error, NULL);
}
g_object_unref (proxy);
@@ -359,13 +364,18 @@ _gda_postgres_meta__udt (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_UDT_ALL], NULL,
error);
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -379,6 +389,11 @@ _gda_postgres_meta_udt (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval = TRUE;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), udt_catalog, error))
return FALSE;
@@ -388,7 +403,7 @@ _gda_postgres_meta_udt (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -401,6 +416,11 @@ _gda_postgres_meta__udt_cols (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
model = gda_connection_statement_execute_select_full (cnc,
internal_stmt[I_STMT_UDT_COLUMNS_ALL],
@@ -411,7 +431,7 @@ _gda_postgres_meta__udt_cols (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -425,6 +445,11 @@ _gda_postgres_meta_udt_cols (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval = TRUE;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (!gda_holder_set_value (gda_set_get_holder (i_set, "cat"), udt_catalog, error))
return FALSE;
@@ -440,7 +465,7 @@ _gda_postgres_meta_udt_cols (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -470,13 +495,18 @@ _gda_postgres_meta__domains (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_DOMAINS_ALL], NULL,
error);
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -490,6 +520,11 @@ _gda_postgres_meta_domains (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval = TRUE;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), domain_catalog, error))
return FALSE;
@@ -499,7 +534,7 @@ _gda_postgres_meta_domains (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -512,13 +547,18 @@ _gda_postgres_meta__constraints_dom (GdaServerProvider *prov, GdaConnection *cnc
{
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_DOMAINS_CONSTRAINTS_ALL], NULL,
error);
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -533,6 +573,11 @@ _gda_postgres_meta_constraints_dom (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval = TRUE;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), domain_catalog, error))
return FALSE;
@@ -544,7 +589,7 @@ _gda_postgres_meta_constraints_dom (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -574,7 +619,7 @@ _gda_postgres_meta__el_types (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -589,16 +634,17 @@ _gda_postgres_meta_el_types (GdaServerProvider *prov, GdaConnection *cnc,
const gchar *cstr;
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "name"), specific_name, error))
return FALSE;
cstr = g_value_get_string (specific_name);
if (*cstr == 'C') {
/* check correct postgres server version */
- PostgresConnectionData *cdata;
- cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
- if (!cdata)
- return FALSE;
if (cdata->version_float < 8.2) {
g_set_error (error, GDA_SERVER_PROVIDER_ERROR, GDA_SERVER_PROVIDER_SERVER_VERSION_ERROR,
"%s", _("PostgreSQL version 8.2.0 at least is required"));
@@ -625,7 +671,7 @@ _gda_postgres_meta_el_types (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -674,12 +720,17 @@ _gda_postgres_meta__schemata (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_SCHEMAS_ALL], i_set, error);
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -693,6 +744,11 @@ _gda_postgres_meta_schemata (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), catalog_name, error))
return FALSE;
@@ -701,7 +757,7 @@ _gda_postgres_meta_schemata (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model, NULL, error, NULL);
}
else {
@@ -711,7 +767,7 @@ _gda_postgres_meta_schemata (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model, "schema_name = ##name::string", error,
"name", schema_name_n, NULL);
}
@@ -751,12 +807,12 @@ _gda_postgres_meta__tables_views (GdaServerProvider *prov, GdaConnection *cnc,
c2 = *context; /* copy contents, just because we need to modify @context->table_name */
if (retval) {
c2.table_name = "_tables";
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, &c2, tables_model, error);
}
if (retval) {
c2.table_name = "_views";
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, &c2, views_model, error);
}
g_object_unref (tables_model);
@@ -816,12 +872,12 @@ _gda_postgres_meta_tables_views (GdaServerProvider *prov, GdaConnection *cnc,
c2 = *context; /* copy contents, just because we need to modify @context->table_name */
if (retval) {
c2.table_name = "_tables";
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, &c2, tables_model, error);
}
if (retval) {
c2.table_name = "_views";
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, &c2, views_model, error);
}
g_object_unref (tables_model);
@@ -911,7 +967,7 @@ gboolean _gda_postgres_meta__columns (GdaServerProvider *prov, GdaConnection *cn
/* modify meta store with @proxy */
if (retval) {
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, proxy, error);
}
g_object_unref (proxy);
@@ -1016,7 +1072,7 @@ _gda_postgres_meta_columns (GdaServerProvider *prov, GdaConnection *cnc,
/* modify meta store with @proxy */
if (retval) {
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, proxy,
"table_schema = ##schema::string AND table_name = ##name::string", error,
"schema", table_schema, "name", table_name, NULL);
@@ -1049,7 +1105,7 @@ _gda_postgres_meta__view_cols (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -1064,6 +1120,11 @@ _gda_postgres_meta_view_cols (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval = TRUE;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), view_catalog, error))
return FALSE;
@@ -1075,7 +1136,7 @@ _gda_postgres_meta_view_cols (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -1088,13 +1149,18 @@ _gda_postgres_meta__constraints_tab (GdaServerProvider *prov, GdaConnection *cnc
{
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_TABLES_CONSTRAINTS_ALL], NULL,
error);
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -1109,6 +1175,11 @@ _gda_postgres_meta_constraints_tab (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval = TRUE;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), table_catalog, error))
return FALSE;
@@ -1123,7 +1194,7 @@ _gda_postgres_meta_constraints_tab (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
if (retval) {
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model,
"table_schema = ##schema::string AND table_name = ##name::string",
error,
@@ -1139,7 +1210,7 @@ _gda_postgres_meta_constraints_tab (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
if (retval) {
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model,
"table_schema = ##schema::string AND table_name = ##name::string AND constraint_name = ##name2::string", error,
"schema", table_schema, "name", table_name, "name2", constraint_name_n, NULL);
@@ -1157,13 +1228,18 @@ _gda_postgres_meta__constraints_ref (GdaServerProvider *prov, GdaConnection *cnc
{
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_REF_CONSTRAINTS_ALL], NULL,
error);
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -1178,6 +1254,11 @@ _gda_postgres_meta_constraints_ref (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval = TRUE;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), table_catalog, error))
return FALSE;
@@ -1195,7 +1276,7 @@ _gda_postgres_meta_constraints_ref (GdaServerProvider *prov, GdaConnection *cnc,
/* modify meta store */
if (retval) {
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model,
"table_schema = ##schema::string AND table_name = ##name::string AND constraint_name = ##name2::string",
error,
@@ -1212,13 +1293,18 @@ _gda_postgres_meta__key_columns (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_KEY_COLUMN_USAGE_ALL], NULL,
error);
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -1233,6 +1319,11 @@ _gda_postgres_meta_key_columns (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval = TRUE;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), table_catalog, error))
return FALSE;
@@ -1250,7 +1341,7 @@ _gda_postgres_meta_key_columns (GdaServerProvider *prov, GdaConnection *cnc,
/* modify meta store */
if (retval) {
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model,
"table_schema = ##schema::string AND table_name = ##name::string AND constraint_name = ##name2::string",
error,
@@ -1267,13 +1358,18 @@ _gda_postgres_meta__check_columns (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
model = gda_connection_statement_execute_select (cnc, internal_stmt[I_STMT_CHECK_COLUMN_USAGE_ALL], NULL,
error);
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -1288,6 +1384,11 @@ _gda_postgres_meta_check_columns (GdaServerProvider *prov, GdaConnection *cnc,
{
GdaDataModel *model;
gboolean retval = TRUE;
+ PostgresConnectionData *cdata;
+
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return FALSE;
if (! gda_holder_set_value (gda_set_get_holder (i_set, "cat"), table_catalog, error))
return FALSE;
@@ -1305,7 +1406,7 @@ _gda_postgres_meta_check_columns (GdaServerProvider *prov, GdaConnection *cnc,
/* modify meta store */
if (retval) {
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify (store, context->table_name, model,
"table_schema = ##schema::string AND table_name = ##name::string AND constraint_name = ##name2::string",
error,
@@ -1339,7 +1440,7 @@ _gda_postgres_meta__triggers (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -1378,7 +1479,7 @@ _gda_postgres_meta_triggers (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -1408,7 +1509,7 @@ _gda_postgres_meta__routines (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -1452,7 +1553,7 @@ _gda_postgres_meta_routines (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -1510,7 +1611,7 @@ _gda_postgres_meta__routine_col (GdaServerProvider *prov, GdaConnection *cnc,
}
if (retval) {
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, proxy, error);
}
g_object_unref (model);
@@ -1580,7 +1681,7 @@ _gda_postgres_meta_routine_col (GdaServerProvider *prov, GdaConnection *cnc,
}
if (retval) {
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, proxy, error);
}
g_object_unref (model);
@@ -1612,7 +1713,7 @@ _gda_postgres_meta__routine_par (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
@@ -1651,7 +1752,7 @@ _gda_postgres_meta_routine_par (GdaServerProvider *prov, GdaConnection *cnc,
if (!model)
return FALSE;
- gda_meta_store_set_reserved_keywords_func (store, is_keyword);
+ gda_meta_store_set_reserved_keywords_func (store, _gda_postgres_get_reserved_keyword_func (cdata));
retval = gda_meta_store_modify_with_context (store, context, model, error);
g_object_unref (model);
diff --git a/providers/postgres/gda-postgres-provider.c b/providers/postgres/gda-postgres-provider.c
index b4e7aee..37f3d6f 100644
--- a/providers/postgres/gda-postgres-provider.c
+++ b/providers/postgres/gda-postgres-provider.c
@@ -119,6 +119,11 @@ static GObject *gda_postgres_provider_statement_execute (GdaServerPr
guint *task_id, GdaServerProviderExecCallback async_cb,
gpointer cb_data, GError **error);
+/* Quoting */
+static gchar *gda_postgresql_identifier_quote (GdaServerProvider *provider, GdaConnection *cnc,
+ const gchar *id,
+ gboolean meta_store_convention, gboolean force_quotes);
+
/* distributed transactions */
static gboolean gda_postgres_provider_xa_start (GdaServerProvider *provider, GdaConnection *cnc,
const GdaXaTransactionId *xid, GError **error);
@@ -188,6 +193,7 @@ gda_postgres_provider_class_init (GdaPostgresProviderClass *klass)
provider_class->get_def_dbms_type = gda_postgres_provider_get_default_dbms_type;
provider_class->create_connection = NULL;
+ provider_class->identifier_quote = gda_postgresql_identifier_quote;
provider_class->open_connection = gda_postgres_provider_open_connection;
provider_class->close_connection = gda_postgres_provider_close_connection;
provider_class->get_database = gda_postgres_provider_get_database;
@@ -698,6 +704,8 @@ gda_postgres_provider_open_connection (GdaServerProvider *provider, GdaConnectio
}
cdata->version = g_strdup (PQgetvalue(pg_res, 0, 0));
cdata->version_float = get_pg_version_float (cdata->version);
+ cdata->short_version = g_strdup_printf ("%d%d", (int) cdata->version_float,
+ (int) ((cdata->version_float - (int) cdata->version_float) * 10));
PQclear (pg_res);
/*
@@ -2433,6 +2441,83 @@ gda_postgres_provider_xa_recover (GdaServerProvider *provider, GdaConnection *cn
}
}
+static gchar *
+identifier_add_quotes (const gchar *str)
+{
+ gchar *retval, *rptr;
+ const gchar *sptr;
+ gint len;
+
+ if (!str)
+ return NULL;
+
+ len = strlen (str);
+ retval = g_new (gchar, 2*len + 3);
+ *retval = '"';
+ for (rptr = retval+1, sptr = str; *sptr; sptr++, rptr++) {
+ if (*sptr == '"') {
+ *rptr = '\\';
+ rptr++;
+ *rptr = *sptr;
+ }
+ else
+ *rptr = *sptr;
+ }
+ *rptr = '"';
+ rptr++;
+ *rptr = 0;
+ return retval;
+}
+
+static gboolean
+_sql_identifier_needs_quotes (const gchar *str)
+{
+ const gchar *ptr;
+
+ g_return_val_if_fail (str, FALSE);
+ for (ptr = str; *ptr; ptr++) {
+ /* quote if 1st char is a number */
+ if ((*ptr <= '9') && (*ptr >= '0')) {
+ if (ptr == str)
+ return TRUE;
+ continue;
+ }
+ if (((*ptr >= 'A') && (*ptr <= 'Z')) ||
+ ((*ptr >= 'a') && (*ptr <= 'z')))
+ continue;
+
+ if ((*ptr != '$') && (*ptr != '_') && (*ptr != '#'))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gchar *
+gda_postgresql_identifier_quote (GdaServerProvider *provider, GdaConnection *cnc,
+ const gchar *id,
+ gboolean meta_store_convention, gboolean force_quotes)
+{
+ GdaSqlReservedKeywordsFunc kwfunc;
+ PostgresConnectionData *cdata = NULL;
+
+ if (cnc) {
+ cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data (cnc);
+ if (!cdata)
+ return NULL;
+ }
+
+ kwfunc = _gda_postgres_get_reserved_keyword_func (cdata);
+ if (*id == '"') {
+ /* there are already some quotes */
+ return g_strdup (id);
+ }
+ if (kwfunc (id) || _sql_identifier_needs_quotes (id) || force_quotes)
+ return identifier_add_quotes (id);
+
+ /* nothing to do */
+ return g_strdup (id);
+}
+
/*
* Free connection's specific data
@@ -2460,6 +2545,7 @@ gda_postgres_free_cnc_data (PostgresConnectionData *cdata)
g_hash_table_destroy (cdata->h_table);
g_free (cdata->version);
+ g_free (cdata->short_version);
g_free (cdata->avoid_types_oids);
g_free (cdata->any_type_oid);
diff --git a/providers/postgres/gda-postgres-util.c b/providers/postgres/gda-postgres-util.c
index 66d142d..4190177 100644
--- a/providers/postgres/gda-postgres-util.c
+++ b/providers/postgres/gda-postgres-util.c
@@ -25,6 +25,9 @@
#include <glib/gi18n-lib.h>
#include "gda-postgres-util.h"
+#include <libgda/sqlite/keywords_hash.h>
+#include "keywords_hash.c" /* this one is dynamically generated */
+
static GdaConnectionEventCode
gda_postgres_sqlsate_to_gda_code (const gchar *sqlstate)
{
@@ -133,3 +136,34 @@ _gda_postgres_type_oid_to_gda (PostgresConnectionData *cdata, Oid postgres_type)
else
return G_TYPE_STRING;
}
+
+#ifdef GDA_DEBUG
+void
+_gda_postgres_test_keywords (void)
+{
+ V82test_keywords();
+ V83test_keywords();
+ V84test_keywords();
+}
+#endif
+
+GdaSqlReservedKeywordsFunc
+_gda_postgres_get_reserved_keyword_func (PostgresConnectionData *cdata)
+{
+ if (cdata && cdata->short_version) {
+ switch (*cdata->short_version) {
+ case '8':
+ if (cdata->short_version[1] == '2')
+ return V82is_keyword;
+ if (cdata->short_version[1] == '3')
+ return V83is_keyword;
+ if (cdata->short_version[1] == '4')
+ return V84is_keyword;
+ return V84is_keyword;
+ default:
+ return V84is_keyword;
+ break;
+ }
+ }
+ return V84is_keyword;
+}
diff --git a/providers/postgres/gda-postgres-util.h b/providers/postgres/gda-postgres-util.h
index 4b05901..e961f12 100644
--- a/providers/postgres/gda-postgres-util.h
+++ b/providers/postgres/gda-postgres-util.h
@@ -34,6 +34,11 @@ PGresult *_gda_postgres_PQexec_wrap (GdaConnection *cnc,
int _gda_postgres_get_connection_type_list (GdaConnection *cnc, PostgresConnectionData *cdata);
GType _gda_postgres_type_oid_to_gda (PostgresConnectionData *cdata, Oid postgres_type);
+#ifdef GDA_DEBUG
+void _gda_postgres_test_keywords (void);
+#endif
+GdaSqlReservedKeywordsFunc _gda_postgres_get_reserved_keyword_func (PostgresConnectionData *cdata);
+
G_END_DECLS
#endif
diff --git a/providers/postgres/gda-postgres.h b/providers/postgres/gda-postgres.h
index 41effc1..dbaf7d6 100644
--- a/providers/postgres/gda-postgres.h
+++ b/providers/postgres/gda-postgres.h
@@ -59,6 +59,7 @@ typedef struct {
/* Version of the backend to which we are connected */
gchar *version;
gfloat version_float;
+ gchar *short_version;
/* Internal data types not returned */
gchar *avoid_types;
diff --git a/providers/postgres/keywords_82.list b/providers/postgres/keywords_82.list
new file mode 100644
index 0000000..9d143c2
--- /dev/null
+++ b/providers/postgres/keywords_82.list
@@ -0,0 +1,345 @@
+#
+# PostgreSQL 8.3's keywords
+#
+
+abort
+absolute
+access
+action
+add
+admin
+after
+aggregate
+all
+also
+alter
+analyse
+analyze
+and
+any
+array
+as
+asc
+assertion
+assignment
+asymmetric
+at
+authorization
+backward
+before
+begin
+between
+bigint
+binary
+bit
+boolean
+both
+by
+cache
+called
+cascade
+cascaded
+case
+cast
+chain
+char
+character
+characteristics
+check
+checkpoint
+class
+close
+cluster
+coalesce
+collate
+column
+comment
+commit
+committed
+concurrently
+connection
+constraint
+constraints
+conversion
+convert
+copy
+create
+createdb
+createrole
+createuser
+cross
+csv
+current_date
+current_role
+current_time
+current_timestamp
+current_user
+cursor
+cycle
+database
+day
+deallocate
+dec
+decimal
+declare
+default
+defaults
+deferrable
+deferred
+definer
+delete
+delimiter
+delimiters
+desc
+disable
+distinct
+do
+domain
+double
+drop
+each
+else
+enable
+encoding
+encrypted
+end
+escape
+except
+excluding
+exclusive
+execute
+exists
+explain
+external
+extract
+false
+fetch
+first
+float
+for
+force
+foreign
+forward
+freeze
+from
+full
+function
+global
+grant
+granted
+greatest
+group
+handler
+having
+header
+hold
+hour
+if
+ilike
+immediate
+immutable
+implicit
+in
+including
+increment
+index
+indexes
+inherit
+inherits
+initially
+inner
+inout
+input
+insensitive
+insert
+instead
+int
+integer
+intersect
+interval
+into
+invoker
+is
+isnull
+isolation
+join
+key
+lancompiler
+language
+large
+last
+leading
+least
+left
+level
+like
+limit
+listen
+load
+local
+localtime
+localtimestamp
+location
+lock
+login
+match
+maxvalue
+minute
+minvalue
+mode
+month
+move
+names
+national
+natural
+nchar
+new
+next
+no
+nocreatedb
+nocreaterole
+nocreateuser
+noinherit
+nologin
+none
+nosuperuser
+not
+nothing
+notify
+notnull
+nowait
+null
+nullif
+numeric
+object
+of
+off
+offset
+oids
+old
+on
+only
+operator
+option
+or
+order
+out
+outer
+overlaps
+overlay
+owned
+owner
+partial
+password
+placing
+position
+precision
+prepare
+prepared
+preserve
+primary
+prior
+privileges
+procedural
+procedure
+quote
+read
+real
+reassign
+recheck
+references
+reindex
+relative
+release
+rename
+repeatable
+replace
+reset
+restart
+restrict
+returning
+returns
+revoke
+right
+role
+rollback
+row
+rows
+rule
+savepoint
+schema
+scroll
+second
+security
+select
+sequence
+serializable
+session
+session_user
+set
+setof
+share
+show
+similar
+simple
+smallint
+some
+stable
+start
+statement
+statistics
+stdin
+stdout
+storage
+strict
+substring
+superuser
+symmetric
+sysid
+system
+table
+tablespace
+temp
+template
+temporary
+then
+time
+timestamp
+to
+trailing
+transaction
+treat
+trigger
+trim
+true
+truncate
+trusted
+type
+uncommitted
+unencrypted
+union
+unique
+unknown
+unlisten
+until
+update
+user
+using
+vacuum
+valid
+validator
+values
+varchar
+varying
+verbose
+view
+volatile
+when
+where
+with
+without
+work
+write
+year
+zone
+
diff --git a/providers/postgres/keywords_83.list b/providers/postgres/keywords_83.list
new file mode 100644
index 0000000..e3c6874
--- /dev/null
+++ b/providers/postgres/keywords_83.list
@@ -0,0 +1,144 @@
+#
+# PostgreSQL 8.3's keywords
+#
+
+all
+analyse
+analyze
+and
+any
+array
+as
+asc
+asymmetric
+authorization
+between
+bigint
+binary
+bit
+boolean
+both
+case
+cast
+char
+character
+check
+coalesce
+collate
+column
+constraint
+create
+cross
+current_date
+current_role
+current_time
+current_timestamp
+current_user
+dec
+decimal
+default
+deferrable
+desc
+distinct
+do
+else
+end
+except
+exists
+extract
+false
+float
+for
+foreign
+freeze
+from
+full
+grant
+greatest
+group
+having
+ilike
+in
+initially
+inner
+inout
+int
+integer
+intersect
+interval
+into
+is
+isnull
+join
+leading
+least
+left
+like
+limit
+localtime
+localtimestamp
+national
+natural
+nchar
+new
+none
+not
+notnull
+null
+nullif
+numeric
+off
+offset
+old
+on
+only
+or
+order
+out
+outer
+overlaps
+overlay
+placing
+position
+precision
+primary
+real
+references
+returning
+right
+row
+select
+session_user
+setof
+similar
+smallint
+some
+substring
+symmetric
+table
+then
+time
+timestamp
+to
+trailing
+treat
+trim
+true
+union
+unique
+user
+using
+values
+varchar
+verbose
+when
+where
+with
+xmlattributes
+xmlconcat
+xmlelement
+xmlforest
+xmlparse
+xmlpi
+xmlroot
+xmlserialize
diff --git a/providers/postgres/keywords_84.list b/providers/postgres/keywords_84.list
new file mode 100644
index 0000000..2f715fb
--- /dev/null
+++ b/providers/postgres/keywords_84.list
@@ -0,0 +1,150 @@
+#
+# PostgreSQL 8.4's keywords
+#
+
+all
+analyse
+analyze
+and
+any
+array
+as
+asc
+asymmetric
+authorization
+between
+bigint
+binary
+bit
+boolean
+both
+case
+cast
+char
+character
+check
+coalesce
+collate
+column
+constraint
+create
+cross
+current_catalog
+current_date
+current_role
+current_schema
+current_time
+current_timestamp
+current_user
+dec
+decimal
+default
+deferrable
+desc
+distinct
+do
+else
+end
+except
+exists
+extract
+false
+fetch
+float
+for
+foreign
+freeze
+from
+full
+grant
+greatest
+group
+having
+ilike
+in
+initially
+inner
+inout
+int
+integer
+intersect
+interval
+into
+is
+isnull
+join
+leading
+least
+left
+like
+limit
+localtime
+localtimestamp
+national
+natural
+nchar
+new
+none
+not
+notnull
+null
+nullif
+numeric
+off
+offset
+old
+on
+only
+or
+order
+out
+outer
+over
+overlaps
+overlay
+placing
+position
+precision
+primary
+real
+references
+returning
+right
+row
+select
+session_user
+setof
+similar
+smallint
+some
+substring
+symmetric
+table
+then
+time
+timestamp
+to
+trailing
+treat
+trim
+true
+union
+unique
+user
+using
+values
+varchar
+variadic
+verbose
+when
+where
+window
+with
+xmlattributes
+xmlconcat
+xmlelement
+xmlforest
+xmlparse
+xmlpi
+xmlroot
+xmlserialize
diff --git a/providers/skel-implementation/capi/Makefile.am b/providers/skel-implementation/capi/Makefile.am
index 60aaea1..3f4a267 100644
--- a/providers/skel-implementation/capi/Makefile.am
+++ b/providers/skel-implementation/capi/Makefile.am
@@ -12,11 +12,14 @@ AM_CPPFLAGS = \
$(LIBGDA_CFLAGS) #$(CAPI_CFLAGS)
# SQL keywords HASH generation
+keyword_files=keywords.list
+pkeyword_files=$(addprefix $(top_srcdir)/providers/skel-implementation/capi/,$(keyword_files))
+
mkkeywordhash$(EXEEXT_FOR_BUILD): $(top_srcdir)/libgda/sqlite/mkkeywordhash.c
$(CC_FOR_BUILD) -g -o mkkeywordhash$(EXEEXT_FOR_BUILD) $(GDA_DEBUG_FLAGS) $<
-keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list
- ./mkkeywordhash$(EXEEXT_FOR_BUILD) keywords.list > keywords_hash.c
+keywords_hash.c: mkkeywordhash$(EXEEXT_FOR_BUILD) $(pkeyword_files)
+ ./mkkeywordhash$(EXEEXT_FOR_BUILD) $(top_srcdir)/providers/skel-implementation/capi/keywords.list > keywords_hash.c
# parser generation
parser.c parser.h: parser.y $(top_builddir)/libgda/sql-parser/lemon$(EXEEXT_FOR_BUILD)
@@ -70,7 +73,7 @@ pkgconfigdir = $(libdir)/pkgconfig
#pkgconfig_DATA = libgda-capi-4.0.pc
noinst_DATA += libgda-capi-4.0.pc
-EXTRA_DIST = $(xml_in_files) libgda-capi-4.0.pc.in parser.y gen_def.c keywords.list
+EXTRA_DIST = $(xml_in_files) libgda-capi-4.0.pc.in parser.y gen_def.c $(keyword_files)
DISTCLEANFILES = $(noinst_DATA)
CLEANFILES = parser.h parser.c parser.out capi_token_types.h gen_def$(EXEEXT_FOR_BUILD) \
diff --git a/providers/skel-implementation/capi/gda-capi-meta.c b/providers/skel-implementation/capi/gda-capi-meta.c
index 9e91e41..94021c2 100644
--- a/providers/skel-implementation/capi/gda-capi-meta.c
+++ b/providers/skel-implementation/capi/gda-capi-meta.c
@@ -32,6 +32,8 @@
#include <libgda/gda-data-model-array.h>
#include <libgda/gda-set.h>
#include <libgda/gda-holder.h>
+
+#include <libgda/sqlite/keywords_hash.h>
#include "keywords_hash.c" /* this one is dynamically generated */
/*
diff --git a/providers/skel-implementation/capi/keywords.list b/providers/skel-implementation/capi/keywords.list
index 7fa6da1..be51f89 100644
--- a/providers/skel-implementation/capi/keywords.list
+++ b/providers/skel-implementation/capi/keywords.list
@@ -1,82 +1,13 @@
-ALL
-ANALYSE
-ANALYZE
-AND
-ANY
-ARRAY
-AS
-ASC
-ASYMMETRIC
-BETWEEN
-BINARY
-BOTH
-CASE
-CAST
-CHECK
-COLLATE
-COLUMN
-CONSTRAINT
-CREATE
-CROSS
-DEFAULT
-DEFERRABLE
-DESC
-DISTINCT
-DO
-ELSE
-END
-EXCEPT
-FALSE
-FETCH
-FOLLOWING
-FOR
-FOREIGN
-FREEZE
-FROM
-FULL
-GRANT
-GROUP
-HAVING
-IN
-INITIALLY
-INNER
-INTERSECT
-INTO
-IS
-JOIN
-LEADING
-LEFT
-LIKE
-LIMIT
-NATURAL
-NEW
-NOT
-NULL
-OFF
-OFFSET
-OLD
-ON
-ONLY
-OR
-ORDER
-OUTER
-OVERLAPS
-PRIMARY
-PRIOR
-REFERENCES
-RETURNING
-RIGHT
+#
+# List of reserved keywords
+#
+# one or more per line
+# last line must be empty
+# comments start with a '#' at the beginning of the line
+# lower or upper case does not matter
+#
+
SELECT
-SIMILAR
-SOME
-TABLE
-THEN
-TO
-TRUE
-UNION
-UNIQUE
-USER
-USING
-WHEN
-WHERE
-WITH
+INSERT
+UPDATE
+DELETE
diff --git a/tests/.gitignore b/tests/.gitignore
index 3d3b592..bdadec1 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -1,3 +1,4 @@
test-bin-converter
test-ddl-creator
test-sql-identifier
+test-identifiers-quotes
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7224cde..30e475a 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,6 +1,6 @@
noinst_LTLIBRARIES = libgda-test-4.0.la
TESTS = test-ddl-creator test-bin-converter test-sql-identifier
-check_PROGRAMS = test-ddl-creator test-bin-converter test-sql-identifier
+check_PROGRAMS = test-ddl-creator test-bin-converter test-sql-identifier test-identifiers-quotes
SUBDIRS = providers parser value-holders meta-store data-models multi-threading
@@ -52,4 +52,11 @@ test_sql_identifier_LDADD = \
$(top_builddir)/libgda/libgda-4.0.la \
$(LIBGDA_LIBS)
+test_identifiers_quotes_SOURCES = \
+ test-identifiers-quotes.c
+
+test_identifiers_quotes_LDADD = \
+ $(top_builddir)/libgda/libgda-4.0.la \
+ $(LIBGDA_LIBS)
+
EXTRA_DIST = dbstruct.xml
\ No newline at end of file
diff --git a/tests/meta-store/common.c b/tests/meta-store/common.c
index 3edb52e..012355d 100644
--- a/tests/meta-store/common.c
+++ b/tests/meta-store/common.c
@@ -426,7 +426,7 @@ test_schemata_1 (GdaMetaStore *store)
import = common_load_csv_file ("data_schemata.csv", 3, "gboolean", -1);
DECL_CHANGE (TNAME, GDA_META_STORE_ADD, "+0", "meta", "+1", "pg_catalog", "+2", "a user", "+3", "TRUE", NULL);
- DECL_CHANGE (TNAME, GDA_META_STORE_ADD, "+0", "meta", "+1", "public", "+2", "postgres", "+3", "FALSE", NULL);
+ DECL_CHANGE (TNAME, GDA_META_STORE_ADD, "+0", "meta", "+1", "pub", "+2", "postgres", "+3", "FALSE", NULL);
DECL_CHANGE (TNAME, GDA_META_STORE_ADD, "+0", "meta", "+1", "information_schema", "+2", "postgres", "+3", "TRUE", NULL);
TEST_MODIFY (store, TNAME, import, NULL, &error, NULL);
TEST_END (import);
diff --git a/tests/meta-store/data_columns.csv b/tests/meta-store/data_columns.csv
index 29b05d4..2d9f20c 100644
--- a/tests/meta-store/data_columns.csv
+++ b/tests/meta-store/data_columns.csv
@@ -1,286 +1,286 @@
-meta,public,_attributes,att_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_attributes,att_value,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_information_schema_catalog_name,catalog_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_schemata,catalog_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_schemata,schema_name,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_schemata,schema_owner,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_schemata,schema_internal,4,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,short_type_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,full_type_name,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,gtype,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,synonyms,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_builtin_data_types,internal,6,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,udt_column,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,udt_ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,data_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,character_maximum_length,7,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,character_octet_length,8,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,numeric_precision,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,numeric_scale,10,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,datetime_precision,11,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,character_set_catalog,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,character_set_schema,13,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,character_set_name,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,collation_catalog,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,collation_schema,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt_columns,collation_name,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_enums,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_enums,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_enums,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_enums,label,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_gtype,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_comments,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_short_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_full_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_internal,8,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_udt,udt_owner,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,specific_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,object_catalog,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,object_schema,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,object_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,object_ordinal_position,5,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,object_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,data_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,min_cardinality,8,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_element_types,max_cardinality,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_all_types,short_type_name,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,gtype,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,full_type_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,internal,5,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,domain_catalog,6,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,domain_schema,7,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,domain_name,8,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,udt_catalog,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,udt_schema,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_all_types,udt_name,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_triggers,trigger_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,trigger_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,trigger_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,event_manipulation,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,event_object_catalog,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,event_object_schema,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,event_object_table,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,action_statement,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,action_orientation,9,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,condition_timing,10,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,trigger_comments,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,trigger_short_name,12,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_triggers,trigger_full_name,13,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,default_collate_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,default_collate_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,default_collate_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_comments,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_short_name,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_character_sets,character_set_full_name,9,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_short_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_collations,collation_full_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,unique_constraint_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,unique_constraint_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,unique_constraint_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,match_option,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,update_rule,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_referential_constraints,delete_rule,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_constraints,constraint_real_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_constraints,check_clause,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_key_column_usage,ordinal_position,8,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,constraint_real_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,table_catalog,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,table_schema,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,table_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,constraint_type,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,is_deferrable,9,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_constraints,initially_deferred,10,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_check_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_constraint_column_usage,table_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,table_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,table_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,column_name,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,constraint_catalog,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,constraint_schema,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_column_usage,constraint_name,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,table_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,table_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,table_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,constraint_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,constraint_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_constraint_table_usage,constraint_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_views,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_views,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_views,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_views,view_definition,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_views,check_option,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_views,is_updatable,6,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,view_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,view_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,view_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_view_table_usage,view_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_view_table_usage,view_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_view_table_usage,view_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_view_table_usage,table_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_view_table_usage,table_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_view_table_usage,table_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,domain_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,domain_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,domain_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,is_deferrable,7,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_constraints,initially_deferred,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,data_type,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,character_maximum_length,5,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,character_octet_length,6,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,collation_catalog,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,collation_schema,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,collation_name,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,character_set_catalog,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,character_set_schema,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,character_set_name,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,numeric_precision,13,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,numeric_scale,14,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_default,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_gtype,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_comments,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_short_name,18,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_full_name,19,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_internal,20,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domains,domain_owner,21,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_domain_column_usage,domain_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,domain_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,domain_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,table_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,table_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,table_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_domain_column_usage,column_name,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
-meta,public,_parameters,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,ordinal_position,4,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,parameter_mode,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,parameter_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_parameters,data_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,column_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routine_columns,data_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_type,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,return_type,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,returns_set,9,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_body,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_definition,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,external_name,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,external_language,13,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,parameter_style,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,is_deterministic,15,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,sql_data_access,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,is_null_call,17,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_comments,18,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_short_name,19,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_full_name,20,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_routines,routine_owner,21,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,table_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,table_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,table_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,privilege_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_table_privileges,is_grantable,7,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_type,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,is_insertable_into,5,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_comments,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_short_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_full_name,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_tables,table_owner,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,table_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,table_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,table_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,column_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,privilege_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_column_privileges,is_grantable,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,column_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,column_default,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,is_nullable,7,NULL,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,data_type,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,character_maximum_length,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,character_octet_length,10,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,numeric_precision,11,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,numeric_scale,12,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,datetime_precision,13,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,character_set_catalog,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,character_set_schema,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,character_set_name,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,collation_catalog,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,collation_schema,18,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,collation_name,19,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,extra,20,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,is_updatable,21,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_columns,column_comments,22,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,object_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,object_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,object_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,object_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,privilege_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
-meta,public,_usage_privileges,is_grantable,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_attributes,att_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_attributes,att_value,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_information_schema_catalog_name,catalog_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_schemata,catalog_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_schemata,schema_name,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_schemata,schema_owner,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_schemata,schema_internal,4,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,short_type_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,full_type_name,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,gtype,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,synonyms,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_builtin_data_types,internal,6,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,udt_column,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,udt_ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,data_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,character_maximum_length,7,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,character_octet_length,8,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,numeric_precision,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,numeric_scale,10,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,datetime_precision,11,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,character_set_catalog,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,character_set_schema,13,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,character_set_name,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,collation_catalog,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,collation_schema,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt_columns,collation_name,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_enums,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_enums,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_enums,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_enums,label,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_gtype,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_comments,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_short_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_full_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_internal,8,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_udt,udt_owner,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,specific_name,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,object_catalog,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,object_schema,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,object_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,object_ordinal_position,5,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,object_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,data_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,min_cardinality,8,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_element_types,max_cardinality,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_all_types,short_type_name,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,gtype,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,full_type_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,internal,5,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,domain_catalog,6,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,domain_schema,7,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,domain_name,8,NULL,TRUE,pg_catalog.text,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,udt_catalog,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,udt_schema,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_all_types,udt_name,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_triggers,trigger_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,trigger_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,trigger_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,event_manipulation,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,event_object_catalog,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,event_object_schema,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,event_object_table,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,action_statement,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,action_orientation,9,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,condition_timing,10,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,trigger_comments,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,trigger_short_name,12,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_triggers,trigger_full_name,13,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,default_collate_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,default_collate_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,default_collate_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_comments,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_short_name,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_character_sets,character_set_full_name,9,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_comments,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_short_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_collations,collation_full_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,unique_constraint_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,unique_constraint_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,unique_constraint_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,match_option,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,update_rule,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_referential_constraints,delete_rule,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_constraints,constraint_real_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_constraints,check_clause,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_key_column_usage,ordinal_position,8,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,constraint_real_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,table_catalog,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,table_schema,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,table_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,constraint_type,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,is_deferrable,9,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_constraints,initially_deferred,10,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_check_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_constraint_column_usage,table_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,table_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,table_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,column_name,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,constraint_catalog,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,constraint_schema,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_column_usage,constraint_name,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,table_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,table_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,table_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,constraint_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,constraint_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_constraint_table_usage,constraint_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_views,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_views,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_views,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_views,view_definition,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_views,check_option,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_views,is_updatable,6,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,view_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,view_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,view_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,table_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,table_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,table_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_column_usage,column_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_view_table_usage,view_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_view_table_usage,view_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_view_table_usage,view_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_view_table_usage,table_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_view_table_usage,table_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_view_table_usage,table_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_constraints,constraint_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,constraint_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,constraint_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,domain_catalog,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,domain_schema,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,domain_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,is_deferrable,7,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_constraints,initially_deferred,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,data_type,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,character_maximum_length,5,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,character_octet_length,6,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,collation_catalog,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,collation_schema,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,collation_name,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,character_set_catalog,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,character_set_schema,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,character_set_name,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,numeric_precision,13,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,numeric_scale,14,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_default,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_gtype,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_comments,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_short_name,18,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_full_name,19,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_internal,20,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domains,domain_owner,21,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_domain_column_usage,domain_catalog,1,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,domain_schema,2,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,domain_name,3,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,table_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,table_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,table_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_domain_column_usage,column_name,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL
+meta,pub,_parameters,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,ordinal_position,4,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,parameter_mode,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,parameter_name,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_parameters,data_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,column_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routine_columns,data_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,specific_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,specific_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,specific_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_catalog,4,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_schema,5,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_type,7,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,return_type,8,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,returns_set,9,false,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_body,10,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_definition,11,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,external_name,12,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,external_language,13,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,parameter_style,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,is_deterministic,15,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,sql_data_access,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,is_null_call,17,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_comments,18,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_short_name,19,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_full_name,20,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_routines,routine_owner,21,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,table_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,table_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,table_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,privilege_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_table_privileges,is_grantable,7,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_type,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,is_insertable_into,5,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_comments,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_short_name,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_full_name,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_tables,table_owner,9,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,table_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,table_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,table_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,column_name,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,privilege_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_column_privileges,is_grantable,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,table_catalog,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,table_schema,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,table_name,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,column_name,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,ordinal_position,5,NULL,FALSE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,column_default,6,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,is_nullable,7,NULL,FALSE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,data_type,8,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,character_maximum_length,9,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,character_octet_length,10,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,numeric_precision,11,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,numeric_scale,12,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,datetime_precision,13,NULL,TRUE,pg_catalog.int4,0,NULL,gchararray,NULL,NULL,32,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,character_set_catalog,14,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,character_set_schema,15,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,character_set_name,16,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,collation_catalog,17,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,collation_schema,18,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,collation_name,19,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,extra,20,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,is_updatable,21,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_columns,column_comments,22,NULL,TRUE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,grantor,1,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,grantee,2,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,object_catalog,3,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,object_schema,4,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,object_name,5,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,object_type,6,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,privilege_type,7,NULL,FALSE,pg_catalog.varchar,0,NULL,gchararray,NULL,1073741824,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
+meta,pub,_usage_privileges,is_grantable,8,NULL,TRUE,pg_catalog.bool,0,NULL,gchararray,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,TRUE,NULL
diff --git a/tests/meta-store/data_key_column_usage.csv b/tests/meta-store/data_key_column_usage.csv
index fc44dbe..b181e86 100644
--- a/tests/meta-store/data_key_column_usage.csv
+++ b/tests/meta-store/data_key_column_usage.csv
@@ -1,137 +1,137 @@
-"meta","public","_attributes_pkey","meta","public","_attributes","att_name","1"
-"meta","public","_schemata_pkey","meta","public","_schemata","catalog_name","1"
-"meta","public","_schemata_pkey","meta","public","_schemata","schema_name","2"
-"meta","public","_builtin_data_types_pkey","meta","public","_builtin_data_types","full_type_name","1"
-"meta","public","_udt_pkey","meta","public","_udt","udt_catalog","1"
-"meta","public","_udt_pkey","meta","public","_udt","udt_schema","2"
-"meta","public","_udt_pkey","meta","public","_udt","udt_name","3"
-"meta","public","_udt_columns_pkey","meta","public","_udt_columns","udt_catalog","1"
-"meta","public","_udt_columns_pkey","meta","public","_udt_columns","udt_schema","2"
-"meta","public","_udt_columns_pkey","meta","public","_udt_columns","udt_name","3"
-"meta","public","_udt_columns_pkey","meta","public","_udt_columns","udt_column","4"
-"meta","public","_enums_pkey","meta","public","_enums","udt_catalog","1"
-"meta","public","_enums_pkey","meta","public","_enums","udt_schema","2"
-"meta","public","_enums_pkey","meta","public","_enums","udt_name","3"
-"meta","public","_enums_pkey","meta","public","_enums","label","4"
-"meta","public","_enums_udt_catalog_fkey","meta","public","_enums","udt_catalog","1"
-"meta","public","_enums_udt_catalog_fkey","meta","public","_enums","udt_schema","2"
-"meta","public","_enums_udt_catalog_fkey","meta","public","_enums","udt_name","3"
-"meta","public","_element_types_pkey","meta","public","_element_types","specific_name","1"
-"meta","public","_domains_pkey","meta","public","_domains","domain_catalog","1"
-"meta","public","_domains_pkey","meta","public","_domains","domain_schema","2"
-"meta","public","_domains_pkey","meta","public","_domains","domain_name","3"
-"meta","public","_tables_pkey","meta","public","_tables","table_catalog","1"
-"meta","public","_tables_pkey","meta","public","_tables","table_schema","2"
-"meta","public","_tables_pkey","meta","public","_tables","table_name","3"
-"meta","public","_views_pkey","meta","public","_views","table_catalog","1"
-"meta","public","_views_pkey","meta","public","_views","table_schema","2"
-"meta","public","_views_pkey","meta","public","_views","table_name","3"
-"meta","public","_views_table_catalog_fkey","meta","public","_views","table_catalog","1"
-"meta","public","_views_table_catalog_fkey","meta","public","_views","table_schema","2"
-"meta","public","_views_table_catalog_fkey","meta","public","_views","table_name","3"
-"meta","public","_collations_pkey","meta","public","_collations","collation_catalog","1"
-"meta","public","_collations_pkey","meta","public","_collations","collation_schema","2"
-"meta","public","_collations_pkey","meta","public","_collations","collation_name","3"
-"meta","public","_character_sets_pkey","meta","public","_character_sets","character_set_catalog","1"
-"meta","public","_character_sets_pkey","meta","public","_character_sets","character_set_schema","2"
-"meta","public","_character_sets_pkey","meta","public","_character_sets","character_set_name","3"
-"meta","public","_character_sets_default_collate_catalog_fkey","meta","public","_character_sets","default_collate_catalog","1"
-"meta","public","_character_sets_default_collate_catalog_fkey","meta","public","_character_sets","default_collate_schema","2"
-"meta","public","_character_sets_default_collate_catalog_fkey","meta","public","_character_sets","default_collate_name","3"
-"meta","public","_routines_pkey","meta","public","_routines","specific_catalog","1"
-"meta","public","_routines_pkey","meta","public","_routines","specific_schema","2"
-"meta","public","_routines_pkey","meta","public","_routines","specific_name","3"
-"meta","public","_triggers_pkey","meta","public","_triggers","trigger_catalog","1"
-"meta","public","_triggers_pkey","meta","public","_triggers","trigger_schema","2"
-"meta","public","_triggers_pkey","meta","public","_triggers","trigger_name","3"
-"meta","public","_triggers_pkey","meta","public","_triggers","event_object_catalog","4"
-"meta","public","_triggers_pkey","meta","public","_triggers","event_object_schema","5"
-"meta","public","_triggers_pkey","meta","public","_triggers","event_object_table","6"
-"meta","public","_triggers_pkey","meta","public","_triggers","event_manipulation","7"
-"meta","public","_triggers_event_object_catalog_fkey","meta","public","_triggers","event_object_catalog","1"
-"meta","public","_triggers_event_object_catalog_fkey","meta","public","_triggers","event_object_schema","2"
-"meta","public","_triggers_event_object_catalog_fkey","meta","public","_triggers","event_object_table","3"
-"meta","public","_columns_pkey","meta","public","_columns","table_catalog","1"
-"meta","public","_columns_pkey","meta","public","_columns","table_schema","2"
-"meta","public","_columns_pkey","meta","public","_columns","table_name","3"
-"meta","public","_columns_pkey","meta","public","_columns","column_name","4"
-"meta","public","_columns_table_catalog_fkey","meta","public","_columns","table_catalog","1"
-"meta","public","_columns_table_catalog_fkey","meta","public","_columns","table_schema","2"
-"meta","public","_columns_table_catalog_fkey","meta","public","_columns","table_name","3"
-"meta","public","_columns_character_set_catalog_fkey","meta","public","_columns","character_set_catalog","1"
-"meta","public","_columns_character_set_catalog_fkey","meta","public","_columns","character_set_schema","2"
-"meta","public","_columns_character_set_catalog_fkey","meta","public","_columns","character_set_name","3"
-"meta","public","_columns_collation_catalog_fkey","meta","public","_columns","collation_catalog","1"
-"meta","public","_columns_collation_catalog_fkey","meta","public","_columns","collation_schema","2"
-"meta","public","_columns_collation_catalog_fkey","meta","public","_columns","collation_name","3"
-"meta","public","_table_constraints_pkey","meta","public","_table_constraints","constraint_catalog","1"
-"meta","public","_table_constraints_pkey","meta","public","_table_constraints","constraint_schema","2"
-"meta","public","_table_constraints_pkey","meta","public","_table_constraints","constraint_name","3"
-"meta","public","_table_constraints_table_catalog_fkey","meta","public","_table_constraints","table_catalog","1"
-"meta","public","_table_constraints_table_catalog_fkey","meta","public","_table_constraints","table_schema","2"
-"meta","public","_table_constraints_table_catalog_fkey","meta","public","_table_constraints","table_name","3"
-"meta","public","_referential_constraints_pkey","meta","public","_referential_constraints","constraint_catalog","1"
-"meta","public","_referential_constraints_pkey","meta","public","_referential_constraints","constraint_schema","2"
-"meta","public","_referential_constraints_pkey","meta","public","_referential_constraints","constraint_name","3"
-"meta","public","_referential_constraints_constraint_catalog_fkey","meta","public","_referential_constraints","constraint_catalog","1"
-"meta","public","_referential_constraints_constraint_catalog_fkey","meta","public","_referential_constraints","constraint_schema","2"
-"meta","public","_referential_constraints_constraint_catalog_fkey","meta","public","_referential_constraints","constraint_name","3"
-"meta","public","_referential_constraints_unique_constraint_catalog_fkey","meta","public","_referential_constraints","unique_constraint_catalog","1"
-"meta","public","_referential_constraints_unique_constraint_catalog_fkey","meta","public","_referential_constraints","unique_constraint_schema","2"
-"meta","public","_referential_constraints_unique_constraint_catalog_fkey","meta","public","_referential_constraints","unique_constraint_name","3"
-"meta","public","_key_column_usage_pkey","meta","public","_key_column_usage","constraint_catalog","1"
-"meta","public","_key_column_usage_pkey","meta","public","_key_column_usage","constraint_schema","2"
-"meta","public","_key_column_usage_pkey","meta","public","_key_column_usage","constraint_name","3"
-"meta","public","_key_column_usage_pkey","meta","public","_key_column_usage","ordinal_position","4"
-"meta","public","_key_column_usage_constraint_catalog_fkey","meta","public","_key_column_usage","constraint_catalog","1"
-"meta","public","_key_column_usage_constraint_catalog_fkey","meta","public","_key_column_usage","constraint_schema","2"
-"meta","public","_key_column_usage_constraint_catalog_fkey","meta","public","_key_column_usage","constraint_name","3"
-"meta","public","_key_column_usage_table_catalog_fkey","meta","public","_key_column_usage","table_catalog","1"
-"meta","public","_key_column_usage_table_catalog_fkey","meta","public","_key_column_usage","table_schema","2"
-"meta","public","_key_column_usage_table_catalog_fkey","meta","public","_key_column_usage","table_name","3"
-"meta","public","_key_column_usage_table_catalog_fkey","meta","public","_key_column_usage","column_name","4"
-"meta","public","_check_column_usage_pkey","meta","public","_check_column_usage","constraint_catalog","1"
-"meta","public","_check_column_usage_pkey","meta","public","_check_column_usage","constraint_schema","2"
-"meta","public","_check_column_usage_pkey","meta","public","_check_column_usage","constraint_name","3"
-"meta","public","_check_column_usage_constraint_catalog_fkey","meta","public","_check_column_usage","constraint_catalog","1"
-"meta","public","_check_column_usage_constraint_catalog_fkey","meta","public","_check_column_usage","constraint_schema","2"
-"meta","public","_check_column_usage_constraint_catalog_fkey","meta","public","_check_column_usage","constraint_name","3"
-"meta","public","_check_column_usage_table_catalog_fkey","meta","public","_check_column_usage","table_catalog","1"
-"meta","public","_check_column_usage_table_catalog_fkey","meta","public","_check_column_usage","table_schema","2"
-"meta","public","_check_column_usage_table_catalog_fkey","meta","public","_check_column_usage","table_name","3"
-"meta","public","_check_column_usage_table_catalog_fkey","meta","public","_check_column_usage","column_name","4"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","view_catalog","1"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","view_schema","2"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","view_name","3"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","table_catalog","4"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","table_schema","5"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","table_name","6"
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","column_name","7"
-"meta","public","_view_column_usage_view_catalog_fkey","meta","public","_view_column_usage","view_catalog","1"
-"meta","public","_view_column_usage_view_catalog_fkey","meta","public","_view_column_usage","view_schema","2"
-"meta","public","_view_column_usage_view_catalog_fkey","meta","public","_view_column_usage","view_name","3"
-"meta","public","_view_column_usage_table_catalog_fkey","meta","public","_view_column_usage","table_catalog","1"
-"meta","public","_view_column_usage_table_catalog_fkey","meta","public","_view_column_usage","table_schema","2"
-"meta","public","_view_column_usage_table_catalog_fkey","meta","public","_view_column_usage","table_name","3"
-"meta","public","_view_column_usage_table_catalog_fkey","meta","public","_view_column_usage","column_name","4"
-"meta","public","_domain_constraints_pkey","meta","public","_domain_constraints","constraint_catalog","1"
-"meta","public","_domain_constraints_pkey","meta","public","_domain_constraints","constraint_schema","2"
-"meta","public","_domain_constraints_pkey","meta","public","_domain_constraints","constraint_name","3"
-"meta","public","_domain_constraints_domain_catalog_fkey","meta","public","_domain_constraints","domain_catalog","1"
-"meta","public","_domain_constraints_domain_catalog_fkey","meta","public","_domain_constraints","domain_schema","2"
-"meta","public","_domain_constraints_domain_catalog_fkey","meta","public","_domain_constraints","domain_name","3"
-"meta","public","_parameters_pkey","meta","public","_parameters","specific_catalog","1"
-"meta","public","_parameters_pkey","meta","public","_parameters","specific_schema","2"
-"meta","public","_parameters_pkey","meta","public","_parameters","specific_name","3"
-"meta","public","_parameters_pkey","meta","public","_parameters","ordinal_position","4"
-"meta","public","_parameters_specific_catalog_fkey","meta","public","_parameters","specific_catalog","1"
-"meta","public","_parameters_specific_catalog_fkey","meta","public","_parameters","specific_schema","2"
-"meta","public","_parameters_specific_catalog_fkey","meta","public","_parameters","specific_name","3"
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","specific_catalog","1"
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","specific_schema","2"
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","specific_name","3"
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","column_name","4"
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","ordinal_position","5"
-"meta","public","_routine_columns_specific_catalog_fkey","meta","public","_routine_columns","specific_catalog","1"
-"meta","public","_routine_columns_specific_catalog_fkey","meta","public","_routine_columns","specific_schema","2"
-"meta","public","_routine_columns_specific_catalog_fkey","meta","public","_routine_columns","specific_name","3"
+"meta","pub","_attributes_pkey","meta","pub","_attributes","att_name","1"
+"meta","pub","_schemata_pkey","meta","pub","_schemata","catalog_name","1"
+"meta","pub","_schemata_pkey","meta","pub","_schemata","schema_name","2"
+"meta","pub","_builtin_data_types_pkey","meta","pub","_builtin_data_types","full_type_name","1"
+"meta","pub","_udt_pkey","meta","pub","_udt","udt_catalog","1"
+"meta","pub","_udt_pkey","meta","pub","_udt","udt_schema","2"
+"meta","pub","_udt_pkey","meta","pub","_udt","udt_name","3"
+"meta","pub","_udt_columns_pkey","meta","pub","_udt_columns","udt_catalog","1"
+"meta","pub","_udt_columns_pkey","meta","pub","_udt_columns","udt_schema","2"
+"meta","pub","_udt_columns_pkey","meta","pub","_udt_columns","udt_name","3"
+"meta","pub","_udt_columns_pkey","meta","pub","_udt_columns","udt_column","4"
+"meta","pub","_enums_pkey","meta","pub","_enums","udt_catalog","1"
+"meta","pub","_enums_pkey","meta","pub","_enums","udt_schema","2"
+"meta","pub","_enums_pkey","meta","pub","_enums","udt_name","3"
+"meta","pub","_enums_pkey","meta","pub","_enums","label","4"
+"meta","pub","_enums_udt_catalog_fkey","meta","pub","_enums","udt_catalog","1"
+"meta","pub","_enums_udt_catalog_fkey","meta","pub","_enums","udt_schema","2"
+"meta","pub","_enums_udt_catalog_fkey","meta","pub","_enums","udt_name","3"
+"meta","pub","_element_types_pkey","meta","pub","_element_types","specific_name","1"
+"meta","pub","_domains_pkey","meta","pub","_domains","domain_catalog","1"
+"meta","pub","_domains_pkey","meta","pub","_domains","domain_schema","2"
+"meta","pub","_domains_pkey","meta","pub","_domains","domain_name","3"
+"meta","pub","_tables_pkey","meta","pub","_tables","table_catalog","1"
+"meta","pub","_tables_pkey","meta","pub","_tables","table_schema","2"
+"meta","pub","_tables_pkey","meta","pub","_tables","table_name","3"
+"meta","pub","_views_pkey","meta","pub","_views","table_catalog","1"
+"meta","pub","_views_pkey","meta","pub","_views","table_schema","2"
+"meta","pub","_views_pkey","meta","pub","_views","table_name","3"
+"meta","pub","_views_table_catalog_fkey","meta","pub","_views","table_catalog","1"
+"meta","pub","_views_table_catalog_fkey","meta","pub","_views","table_schema","2"
+"meta","pub","_views_table_catalog_fkey","meta","pub","_views","table_name","3"
+"meta","pub","_collations_pkey","meta","pub","_collations","collation_catalog","1"
+"meta","pub","_collations_pkey","meta","pub","_collations","collation_schema","2"
+"meta","pub","_collations_pkey","meta","pub","_collations","collation_name","3"
+"meta","pub","_character_sets_pkey","meta","pub","_character_sets","character_set_catalog","1"
+"meta","pub","_character_sets_pkey","meta","pub","_character_sets","character_set_schema","2"
+"meta","pub","_character_sets_pkey","meta","pub","_character_sets","character_set_name","3"
+"meta","pub","_character_sets_default_collate_catalog_fkey","meta","pub","_character_sets","default_collate_catalog","1"
+"meta","pub","_character_sets_default_collate_catalog_fkey","meta","pub","_character_sets","default_collate_schema","2"
+"meta","pub","_character_sets_default_collate_catalog_fkey","meta","pub","_character_sets","default_collate_name","3"
+"meta","pub","_routines_pkey","meta","pub","_routines","specific_catalog","1"
+"meta","pub","_routines_pkey","meta","pub","_routines","specific_schema","2"
+"meta","pub","_routines_pkey","meta","pub","_routines","specific_name","3"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","trigger_catalog","1"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","trigger_schema","2"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","trigger_name","3"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","event_object_catalog","4"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","event_object_schema","5"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","event_object_table","6"
+"meta","pub","_triggers_pkey","meta","pub","_triggers","event_manipulation","7"
+"meta","pub","_triggers_event_object_catalog_fkey","meta","pub","_triggers","event_object_catalog","1"
+"meta","pub","_triggers_event_object_catalog_fkey","meta","pub","_triggers","event_object_schema","2"
+"meta","pub","_triggers_event_object_catalog_fkey","meta","pub","_triggers","event_object_table","3"
+"meta","pub","_columns_pkey","meta","pub","_columns","table_catalog","1"
+"meta","pub","_columns_pkey","meta","pub","_columns","table_schema","2"
+"meta","pub","_columns_pkey","meta","pub","_columns","table_name","3"
+"meta","pub","_columns_pkey","meta","pub","_columns","column_name","4"
+"meta","pub","_columns_table_catalog_fkey","meta","pub","_columns","table_catalog","1"
+"meta","pub","_columns_table_catalog_fkey","meta","pub","_columns","table_schema","2"
+"meta","pub","_columns_table_catalog_fkey","meta","pub","_columns","table_name","3"
+"meta","pub","_columns_character_set_catalog_fkey","meta","pub","_columns","character_set_catalog","1"
+"meta","pub","_columns_character_set_catalog_fkey","meta","pub","_columns","character_set_schema","2"
+"meta","pub","_columns_character_set_catalog_fkey","meta","pub","_columns","character_set_name","3"
+"meta","pub","_columns_collation_catalog_fkey","meta","pub","_columns","collation_catalog","1"
+"meta","pub","_columns_collation_catalog_fkey","meta","pub","_columns","collation_schema","2"
+"meta","pub","_columns_collation_catalog_fkey","meta","pub","_columns","collation_name","3"
+"meta","pub","_table_constraints_pkey","meta","pub","_table_constraints","constraint_catalog","1"
+"meta","pub","_table_constraints_pkey","meta","pub","_table_constraints","constraint_schema","2"
+"meta","pub","_table_constraints_pkey","meta","pub","_table_constraints","constraint_name","3"
+"meta","pub","_table_constraints_table_catalog_fkey","meta","pub","_table_constraints","table_catalog","1"
+"meta","pub","_table_constraints_table_catalog_fkey","meta","pub","_table_constraints","table_schema","2"
+"meta","pub","_table_constraints_table_catalog_fkey","meta","pub","_table_constraints","table_name","3"
+"meta","pub","_referential_constraints_pkey","meta","pub","_referential_constraints","constraint_catalog","1"
+"meta","pub","_referential_constraints_pkey","meta","pub","_referential_constraints","constraint_schema","2"
+"meta","pub","_referential_constraints_pkey","meta","pub","_referential_constraints","constraint_name","3"
+"meta","pub","_referential_constraints_constraint_catalog_fkey","meta","pub","_referential_constraints","constraint_catalog","1"
+"meta","pub","_referential_constraints_constraint_catalog_fkey","meta","pub","_referential_constraints","constraint_schema","2"
+"meta","pub","_referential_constraints_constraint_catalog_fkey","meta","pub","_referential_constraints","constraint_name","3"
+"meta","pub","_referential_constraints_unique_constraint_catalog_fkey","meta","pub","_referential_constraints","unique_constraint_catalog","1"
+"meta","pub","_referential_constraints_unique_constraint_catalog_fkey","meta","pub","_referential_constraints","unique_constraint_schema","2"
+"meta","pub","_referential_constraints_unique_constraint_catalog_fkey","meta","pub","_referential_constraints","unique_constraint_name","3"
+"meta","pub","_key_column_usage_pkey","meta","pub","_key_column_usage","constraint_catalog","1"
+"meta","pub","_key_column_usage_pkey","meta","pub","_key_column_usage","constraint_schema","2"
+"meta","pub","_key_column_usage_pkey","meta","pub","_key_column_usage","constraint_name","3"
+"meta","pub","_key_column_usage_pkey","meta","pub","_key_column_usage","ordinal_position","4"
+"meta","pub","_key_column_usage_constraint_catalog_fkey","meta","pub","_key_column_usage","constraint_catalog","1"
+"meta","pub","_key_column_usage_constraint_catalog_fkey","meta","pub","_key_column_usage","constraint_schema","2"
+"meta","pub","_key_column_usage_constraint_catalog_fkey","meta","pub","_key_column_usage","constraint_name","3"
+"meta","pub","_key_column_usage_table_catalog_fkey","meta","pub","_key_column_usage","table_catalog","1"
+"meta","pub","_key_column_usage_table_catalog_fkey","meta","pub","_key_column_usage","table_schema","2"
+"meta","pub","_key_column_usage_table_catalog_fkey","meta","pub","_key_column_usage","table_name","3"
+"meta","pub","_key_column_usage_table_catalog_fkey","meta","pub","_key_column_usage","column_name","4"
+"meta","pub","_check_column_usage_pkey","meta","pub","_check_column_usage","constraint_catalog","1"
+"meta","pub","_check_column_usage_pkey","meta","pub","_check_column_usage","constraint_schema","2"
+"meta","pub","_check_column_usage_pkey","meta","pub","_check_column_usage","constraint_name","3"
+"meta","pub","_check_column_usage_constraint_catalog_fkey","meta","pub","_check_column_usage","constraint_catalog","1"
+"meta","pub","_check_column_usage_constraint_catalog_fkey","meta","pub","_check_column_usage","constraint_schema","2"
+"meta","pub","_check_column_usage_constraint_catalog_fkey","meta","pub","_check_column_usage","constraint_name","3"
+"meta","pub","_check_column_usage_table_catalog_fkey","meta","pub","_check_column_usage","table_catalog","1"
+"meta","pub","_check_column_usage_table_catalog_fkey","meta","pub","_check_column_usage","table_schema","2"
+"meta","pub","_check_column_usage_table_catalog_fkey","meta","pub","_check_column_usage","table_name","3"
+"meta","pub","_check_column_usage_table_catalog_fkey","meta","pub","_check_column_usage","column_name","4"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","view_catalog","1"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","view_schema","2"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","view_name","3"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","table_catalog","4"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","table_schema","5"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","table_name","6"
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","column_name","7"
+"meta","pub","_view_column_usage_view_catalog_fkey","meta","pub","_view_column_usage","view_catalog","1"
+"meta","pub","_view_column_usage_view_catalog_fkey","meta","pub","_view_column_usage","view_schema","2"
+"meta","pub","_view_column_usage_view_catalog_fkey","meta","pub","_view_column_usage","view_name","3"
+"meta","pub","_view_column_usage_table_catalog_fkey","meta","pub","_view_column_usage","table_catalog","1"
+"meta","pub","_view_column_usage_table_catalog_fkey","meta","pub","_view_column_usage","table_schema","2"
+"meta","pub","_view_column_usage_table_catalog_fkey","meta","pub","_view_column_usage","table_name","3"
+"meta","pub","_view_column_usage_table_catalog_fkey","meta","pub","_view_column_usage","column_name","4"
+"meta","pub","_domain_constraints_pkey","meta","pub","_domain_constraints","constraint_catalog","1"
+"meta","pub","_domain_constraints_pkey","meta","pub","_domain_constraints","constraint_schema","2"
+"meta","pub","_domain_constraints_pkey","meta","pub","_domain_constraints","constraint_name","3"
+"meta","pub","_domain_constraints_domain_catalog_fkey","meta","pub","_domain_constraints","domain_catalog","1"
+"meta","pub","_domain_constraints_domain_catalog_fkey","meta","pub","_domain_constraints","domain_schema","2"
+"meta","pub","_domain_constraints_domain_catalog_fkey","meta","pub","_domain_constraints","domain_name","3"
+"meta","pub","_parameters_pkey","meta","pub","_parameters","specific_catalog","1"
+"meta","pub","_parameters_pkey","meta","pub","_parameters","specific_schema","2"
+"meta","pub","_parameters_pkey","meta","pub","_parameters","specific_name","3"
+"meta","pub","_parameters_pkey","meta","pub","_parameters","ordinal_position","4"
+"meta","pub","_parameters_specific_catalog_fkey","meta","pub","_parameters","specific_catalog","1"
+"meta","pub","_parameters_specific_catalog_fkey","meta","pub","_parameters","specific_schema","2"
+"meta","pub","_parameters_specific_catalog_fkey","meta","pub","_parameters","specific_name","3"
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","specific_catalog","1"
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","specific_schema","2"
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","specific_name","3"
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","column_name","4"
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","ordinal_position","5"
+"meta","pub","_routine_columns_specific_catalog_fkey","meta","pub","_routine_columns","specific_catalog","1"
+"meta","pub","_routine_columns_specific_catalog_fkey","meta","pub","_routine_columns","specific_schema","2"
+"meta","pub","_routine_columns_specific_catalog_fkey","meta","pub","_routine_columns","specific_name","3"
diff --git a/tests/meta-store/data_referential_constraints.csv b/tests/meta-store/data_referential_constraints.csv
index 2f5da29..06d40ed 100644
--- a/tests/meta-store/data_referential_constraints.csv
+++ b/tests/meta-store/data_referential_constraints.csv
@@ -1,19 +1,19 @@
-"meta","public","_enums_udt","_enums_udt_catalog_fkey","meta","public","_udt","_udt_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_views","_views_table_catalog_fkey","meta","public","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_character_sets","_character_sets_default_collate_catalog_fkey","meta","public","_collations","_collations_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_triggers","_triggers_event_object_catalog_fkey","meta","public","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_columns","_columns_table_catalog_fkey","meta","public","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_columns","_columns_character_set_catalog_fkey","meta","public","_character_sets","_character_sets_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_columns","_columns_collation_catalog_fkey","meta","public","_collations","_collations_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_table_constraints","_table_constraints_table_catalog_fkey","meta","public","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_referential_constraints","_referential_constraints_constraint_catalog_fkey","meta","public","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_referential_constraints,"_referential_constraints_unique_constraint_catalog_fkey","meta","public","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_key_column_usage","_key_column_usage_constraint_catalog_fkey","meta","public","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_key_column_usage","_key_column_usage_table_catalog_fkey","meta","public","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_check_column_usage","_check_column_usage_constraint_catalog_fkey","meta","public","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_check_column_usage","_check_column_usage_table_catalog_fkey","meta","public","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_view_column_usage","_view_column_usage_view_catalog_fkey","meta","public","_views","_views_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_view_column_usage","_view_column_usage_table_catalog_fkey","meta","public","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","domain_constraints","_domain_constraints_domain_catalog_fkey","meta","public","_domains","_domains_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_parameters","_parameters_specific_catalog_fkey","meta","public","_routines","_routines_pkey","NONE","NO ACTION","NO ACTION"
-"meta","public","_routine_columns","_routine_columns_specific_catalog_fkey","meta","public","_routines","_routines_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_enums_udt","_enums_udt_catalog_fkey","meta","pub","_udt","_udt_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_views","_views_table_catalog_fkey","meta","pub","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_character_sets","_character_sets_default_collate_catalog_fkey","meta","pub","_collations","_collations_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_triggers","_triggers_event_object_catalog_fkey","meta","pub","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_columns","_columns_table_catalog_fkey","meta","pub","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_columns","_columns_character_set_catalog_fkey","meta","pub","_character_sets","_character_sets_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_columns","_columns_collation_catalog_fkey","meta","pub","_collations","_collations_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_table_constraints","_table_constraints_table_catalog_fkey","meta","pub","_tables","_tables_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_referential_constraints","_referential_constraints_constraint_catalog_fkey","meta","pub","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_referential_constraints,"_referential_constraints_unique_constraint_catalog_fkey","meta","pub","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_key_column_usage","_key_column_usage_constraint_catalog_fkey","meta","pub","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_key_column_usage","_key_column_usage_table_catalog_fkey","meta","pub","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_check_column_usage","_check_column_usage_constraint_catalog_fkey","meta","pub","_table_constraints","_table_constraints_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_check_column_usage","_check_column_usage_table_catalog_fkey","meta","pub","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_view_column_usage","_view_column_usage_view_catalog_fkey","meta","pub","_views","_views_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_view_column_usage","_view_column_usage_table_catalog_fkey","meta","pub","_columns","_columns_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","domain_constraints","_domain_constraints_domain_catalog_fkey","meta","pub","_domains","_domains_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_parameters","_parameters_specific_catalog_fkey","meta","pub","_routines","_routines_pkey","NONE","NO ACTION","NO ACTION"
+"meta","pub","_routine_columns","_routine_columns_specific_catalog_fkey","meta","pub","_routines","_routines_pkey","NONE","NO ACTION","NO ACTION"
diff --git a/tests/meta-store/data_schemata.csv b/tests/meta-store/data_schemata.csv
index 89278cb..973c88d 100644
--- a/tests/meta-store/data_schemata.csv
+++ b/tests/meta-store/data_schemata.csv
@@ -1,3 +1,3 @@
"meta","pg_catalog","a user",TRUE
-"meta","public","postgres",FALSE
+"meta","pub","postgres",FALSE
"meta","information_schema","postgres",TRUE
diff --git a/tests/meta-store/data_table_constraints.csv b/tests/meta-store/data_table_constraints.csv
index 2f00177..932f648 100644
--- a/tests/meta-store/data_table_constraints.csv
+++ b/tests/meta-store/data_table_constraints.csv
@@ -1,194 +1,194 @@
-"meta","public","""2200_78469_1_not_null""","meta","public","_attributes","CHECK","att_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78469_2_not_null""","meta","public","_attributes","CHECK","att_value IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78476_1_not_null""","meta","public","_information_schema_catalog_name","CHECK","catalog_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78483_1_not_null""","meta","public","_builtin_data_types","CHECK","short_type_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78483_2_not_null""","meta","public","_builtin_data_types","CHECK","full_type_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78483_6_not_null""","meta","public","_builtin_data_types","CHECK","internal IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_1_not_null""","meta","public","_udt","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_2_not_null""","meta","public","_udt","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_3_not_null""","meta","public","_udt","CHECK","udt_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_6_not_null""","meta","public","_udt","CHECK","udt_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_7_not_null""","meta","public","_udt","CHECK","udt_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78490_8_not_null""","meta","public","_udt","CHECK","udt_internal IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_1_not_null""","meta","public","_element_types","CHECK","specific_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_2_not_null""","meta","public","_element_types","CHECK","object_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_3_not_null""","meta","public","_element_types","CHECK","object_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_4_not_null""","meta","public","_element_types","CHECK","object_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_6_not_null""","meta","public","_element_types","CHECK","object_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_7_not_null""","meta","public","_element_types","CHECK","data_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_8_not_null""","meta","public","_element_types","CHECK","min_cardinality IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78497_9_not_null""","meta","public","_element_types","CHECK","max_cardinality IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78504_1_not_null""","meta","public","_schemata","CHECK","catalog_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78504_2_not_null""","meta","public","_schemata","CHECK","schema_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78504_4_not_null""","meta","public","_schemata","CHECK","schema_internal IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_11_not_null""","meta","public","_udt_columns","CHECK","character_set_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_12_not_null""","meta","public","_udt_columns","CHECK","character_set_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_13_not_null""","meta","public","_udt_columns","CHECK","character_set_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_14_not_null""","meta","public","_udt_columns","CHECK","collation_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_15_not_null""","meta","public","_udt_columns","CHECK","collation_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_16_not_null""","meta","public","_udt_columns","CHECK","collation_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_1_not_null""","meta","public","_udt_columns","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_2_not_null""","meta","public","_udt_columns","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_3_not_null""","meta","public","_udt_columns","CHECK","udt_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_4_not_null""","meta","public","_udt_columns","CHECK","udt_column IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78516_5_not_null""","meta","public","_udt_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78528_1_not_null""","meta","public","_enums","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78528_2_not_null""","meta","public","_enums","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78528_3_not_null""","meta","public","_enums","CHECK","udt_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78528_4_not_null""","meta","public","_enums","CHECK","label IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_18_not_null""","meta","public","_domains","CHECK","domain_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_19_not_null""","meta","public","_domains","CHECK","domain_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_1_not_null""","meta","public","_domains","CHECK","domain_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_20_not_null""","meta","public","_domains","CHECK","domain_internal IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_2_not_null""","meta","public","_domains","CHECK","domain_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78540_3_not_null""","meta","public","_domains","CHECK","domain_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_1_not_null""","meta","public","_tables","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_2_not_null""","meta","public","_tables","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_3_not_null""","meta","public","_tables","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_4_not_null""","meta","public","_tables","CHECK","table_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_7_not_null""","meta","public","_tables","CHECK","table_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78552_8_not_null""","meta","public","_tables","CHECK","table_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78564_1_not_null""","meta","public","_collations","CHECK","collation_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78564_2_not_null""","meta","public","_collations","CHECK","collation_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78564_3_not_null""","meta","public","_collations","CHECK","collation_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78564_5_not_null""","meta","public","_collations","CHECK","collation_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78564_6_not_null""","meta","public","_collations","CHECK","collation_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_19_not_null""","meta","public","_routines","CHECK","routine_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_1_not_null""","meta","public","_routines","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_20_not_null""","meta","public","_routines","CHECK","routine_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_2_not_null""","meta","public","_routines","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_3_not_null""","meta","public","_routines","CHECK","specific_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_6_not_null""","meta","public","_routines","CHECK","routine_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78576_9_not_null""","meta","public","_routines","CHECK","returns_set IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78588_1_not_null""","meta","public","_views","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78588_2_not_null""","meta","public","_views","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78588_3_not_null""","meta","public","_views","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78600_1_not_null""","meta","public","_character_sets","CHECK","character_set_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78600_2_not_null""","meta","public","_character_sets","CHECK","character_set_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78600_3_not_null""","meta","public","_character_sets","CHECK","character_set_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78600_8_not_null""","meta","public","_character_sets","CHECK","character_set_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78600_9_not_null""","meta","public","_character_sets","CHECK","character_set_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_10_not_null""","meta","public","_triggers","CHECK","condition_timing IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_12_not_null""","meta","public","_triggers","CHECK","trigger_short_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_13_not_null""","meta","public","_triggers","CHECK","trigger_full_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_1_not_null""","meta","public","_triggers","CHECK","trigger_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_2_not_null""","meta","public","_triggers","CHECK","trigger_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_3_not_null""","meta","public","_triggers","CHECK","trigger_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_4_not_null""","meta","public","_triggers","CHECK","event_manipulation IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_5_not_null""","meta","public","_triggers","CHECK","event_object_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_6_not_null""","meta","public","_triggers","CHECK","event_object_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_7_not_null""","meta","public","_triggers","CHECK","event_object_table IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78617_9_not_null""","meta","public","_triggers","CHECK","action_orientation IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_1_not_null""","meta","public","_table_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_2_not_null""","meta","public","_table_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_3_not_null""","meta","public","_table_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_4_not_null""","meta","public","_table_constraints","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_5_not_null""","meta","public","_table_constraints","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_6_not_null""","meta","public","_table_constraints","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78634_7_not_null""","meta","public","_table_constraints","CHECK","constraint_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_1_not_null""","meta","public","_domain_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_2_not_null""","meta","public","_domain_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_3_not_null""","meta","public","_domain_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_4_not_null""","meta","public","_domain_constraints","CHECK","domain_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_5_not_null""","meta","public","_domain_constraints","CHECK","domain_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78651_6_not_null""","meta","public","_domain_constraints","CHECK","domain_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_1_not_null""","meta","public","_parameters","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_2_not_null""","meta","public","_parameters","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_3_not_null""","meta","public","_parameters","CHECK","specific_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_4_not_null""","meta","public","_parameters","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_5_not_null""","meta","public","_parameters","CHECK","parameter_mode IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78668_7_not_null""","meta","public","_parameters","CHECK","data_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_1_not_null""","meta","public","_routine_columns","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_2_not_null""","meta","public","_routine_columns","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_3_not_null""","meta","public","_routine_columns","CHECK","specific_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_4_not_null""","meta","public","_routine_columns","CHECK","column_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_5_not_null""","meta","public","_routine_columns","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78680_6_not_null""","meta","public","_routine_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_1_not_null""","meta","public","_columns","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_2_not_null""","meta","public","_columns","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_3_not_null""","meta","public","_columns","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_4_not_null""","meta","public","_columns","CHECK","column_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_5_not_null""","meta","public","_columns","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_7_not_null""","meta","public","_columns","CHECK","is_nullable IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78696_8_not_null""","meta","public","_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_1_not_null""","meta","public","_referential_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_2_not_null""","meta","public","_referential_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_3_not_null""","meta","public","_referential_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_4_not_null""","meta","public","_referential_constraints","CHECK","unique_constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_5_not_null""","meta","public","_referential_constraints","CHECK","unique_constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78718_6_not_null""","meta","public","_referential_constraints","CHECK","unique_constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_1_not_null""","meta","public","_key_column_usage","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_2_not_null""","meta","public","_key_column_usage","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_3_not_null""","meta","public","_key_column_usage","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_4_not_null""","meta","public","_key_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_5_not_null""","meta","public","_key_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_6_not_null""","meta","public","_key_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_7_not_null""","meta","public","_key_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78738_8_not_null""","meta","public","_key_column_usage","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_1_not_null""","meta","public","_check_column_usage","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_2_not_null""","meta","public","_check_column_usage","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_3_not_null""","meta","public","_check_column_usage","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_4_not_null""","meta","public","_check_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_5_not_null""","meta","public","_check_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_6_not_null""","meta","public","_check_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78755_7_not_null""","meta","public","_check_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_1_not_null""","meta","public","_view_column_usage","CHECK","view_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_2_not_null""","meta","public","_view_column_usage","CHECK","view_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_3_not_null""","meta","public","_view_column_usage","CHECK","view_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_4_not_null""","meta","public","_view_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_5_not_null""","meta","public","_view_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_6_not_null""","meta","public","_view_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
-"meta","public","""2200_78772_7_not_null""","meta","public","_view_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
-"meta","public","_attributes_pkey","meta","public","_attributes","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_builtin_data_types_pkey","meta","public","_builtin_data_types","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_character_sets_character_set_catalog_fkey","meta","public","_character_sets","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_character_sets_default_collate_catalog_fkey","meta","public","_character_sets","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_character_sets_pkey","meta","public","_character_sets","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_check_column_usage_constraint_catalog_fkey","meta","public","_check_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_check_column_usage_pkey","meta","public","_check_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_check_column_usage_table_catalog_fkey","meta","public","_check_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_collations_collation_catalog_fkey","meta","public","_collations","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_collations_pkey","meta","public","_collations","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_columns_character_set_catalog_fkey","meta","public","_columns","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_columns_collation_catalog_fkey","meta","public","_columns","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_columns_pkey","meta","public","_columns","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_columns_table_catalog_fkey","meta","public","_columns","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_domain_constraints_constraint_catalog_fkey","meta","public","_domain_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_domain_constraints_domain_catalog_fkey","meta","public","_domain_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_domain_constraints_pkey","meta","public","_domain_constraints","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_domains_domain_catalog_fkey","meta","public","_domains","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_domains_pkey","meta","public","_domains","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_element_types_pkey","meta","public","_element_types","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_enums_pkey","meta","public","_enums","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_enums_udt_catalog_fkey","meta","public","_enums","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_information_schema_catalog_name_pkey","meta","public","_information_schema_catalog_name","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_key_column_usage_constraint_catalog_fkey","meta","public","_key_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_key_column_usage_pkey","meta","public","_key_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_key_column_usage_table_catalog_fkey","meta","public","_key_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_parameters_pkey","meta","public","_parameters","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_parameters_specific_catalog_fkey","meta","public","_parameters","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_referential_constraints_constraint_catalog_fkey","meta","public","_referential_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_referential_constraints_pkey","meta","public","_referential_constraints","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_referential_constraints_unique_constraint_catalog_fkey","meta","public","_referential_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_routine_columns_pkey","meta","public","_routine_columns","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_routine_columns_specific_catalog_fkey","meta","public","_routine_columns","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_routines_pkey","meta","public","_routines","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_routines_specific_catalog_fkey","meta","public","_routines","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_schemata_catalog_name_fkey","meta","public","_schemata","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_schemata_pkey","meta","public","_schemata","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_table_constraints_constraint_catalog_fkey","meta","public","_table_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_table_constraints_pkey","meta","public","_table_constraints","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_table_constraints_table_catalog_fkey","meta","public","_table_constraints","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_tables_pkey","meta","public","_tables","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_tables_table_catalog_fkey","meta","public","_tables","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_triggers_event_object_catalog_fkey","meta","public","_triggers","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_triggers_pkey","meta","public","_triggers","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_triggers_trigger_catalog_fkey","meta","public","_triggers","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_udt_columns_pkey","meta","public","_udt_columns","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_udt_columns_udt_catalog_fkey","meta","public","_udt_columns","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_udt_pkey","meta","public","_udt","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_view_column_usage_pkey","meta","public","_view_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_view_column_usage_table_catalog_fkey","meta","public","_view_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_view_column_usage_view_catalog_fkey","meta","public","_view_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
-"meta","public","_views_pkey","meta","public","_views","PRIMARY KEY","NULL",FALSE,FALSE
-"meta","public","_views_table_catalog_fkey","meta","public","_views","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","""2200_78469_1_not_null""","meta","pub","_attributes","CHECK","att_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78469_2_not_null""","meta","pub","_attributes","CHECK","att_value IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78476_1_not_null""","meta","pub","_information_schema_catalog_name","CHECK","catalog_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78483_1_not_null""","meta","pub","_builtin_data_types","CHECK","short_type_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78483_2_not_null""","meta","pub","_builtin_data_types","CHECK","full_type_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78483_6_not_null""","meta","pub","_builtin_data_types","CHECK","internal IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_1_not_null""","meta","pub","_udt","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_2_not_null""","meta","pub","_udt","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_3_not_null""","meta","pub","_udt","CHECK","udt_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_6_not_null""","meta","pub","_udt","CHECK","udt_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_7_not_null""","meta","pub","_udt","CHECK","udt_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78490_8_not_null""","meta","pub","_udt","CHECK","udt_internal IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_1_not_null""","meta","pub","_element_types","CHECK","specific_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_2_not_null""","meta","pub","_element_types","CHECK","object_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_3_not_null""","meta","pub","_element_types","CHECK","object_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_4_not_null""","meta","pub","_element_types","CHECK","object_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_6_not_null""","meta","pub","_element_types","CHECK","object_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_7_not_null""","meta","pub","_element_types","CHECK","data_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_8_not_null""","meta","pub","_element_types","CHECK","min_cardinality IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78497_9_not_null""","meta","pub","_element_types","CHECK","max_cardinality IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78504_1_not_null""","meta","pub","_schemata","CHECK","catalog_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78504_2_not_null""","meta","pub","_schemata","CHECK","schema_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78504_4_not_null""","meta","pub","_schemata","CHECK","schema_internal IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_11_not_null""","meta","pub","_udt_columns","CHECK","character_set_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_12_not_null""","meta","pub","_udt_columns","CHECK","character_set_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_13_not_null""","meta","pub","_udt_columns","CHECK","character_set_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_14_not_null""","meta","pub","_udt_columns","CHECK","collation_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_15_not_null""","meta","pub","_udt_columns","CHECK","collation_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_16_not_null""","meta","pub","_udt_columns","CHECK","collation_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_1_not_null""","meta","pub","_udt_columns","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_2_not_null""","meta","pub","_udt_columns","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_3_not_null""","meta","pub","_udt_columns","CHECK","udt_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_4_not_null""","meta","pub","_udt_columns","CHECK","udt_column IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78516_5_not_null""","meta","pub","_udt_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78528_1_not_null""","meta","pub","_enums","CHECK","udt_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78528_2_not_null""","meta","pub","_enums","CHECK","udt_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78528_3_not_null""","meta","pub","_enums","CHECK","udt_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78528_4_not_null""","meta","pub","_enums","CHECK","label IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_18_not_null""","meta","pub","_domains","CHECK","domain_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_19_not_null""","meta","pub","_domains","CHECK","domain_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_1_not_null""","meta","pub","_domains","CHECK","domain_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_20_not_null""","meta","pub","_domains","CHECK","domain_internal IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_2_not_null""","meta","pub","_domains","CHECK","domain_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78540_3_not_null""","meta","pub","_domains","CHECK","domain_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_1_not_null""","meta","pub","_tables","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_2_not_null""","meta","pub","_tables","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_3_not_null""","meta","pub","_tables","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_4_not_null""","meta","pub","_tables","CHECK","table_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_7_not_null""","meta","pub","_tables","CHECK","table_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78552_8_not_null""","meta","pub","_tables","CHECK","table_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78564_1_not_null""","meta","pub","_collations","CHECK","collation_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78564_2_not_null""","meta","pub","_collations","CHECK","collation_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78564_3_not_null""","meta","pub","_collations","CHECK","collation_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78564_5_not_null""","meta","pub","_collations","CHECK","collation_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78564_6_not_null""","meta","pub","_collations","CHECK","collation_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_19_not_null""","meta","pub","_routines","CHECK","routine_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_1_not_null""","meta","pub","_routines","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_20_not_null""","meta","pub","_routines","CHECK","routine_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_2_not_null""","meta","pub","_routines","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_3_not_null""","meta","pub","_routines","CHECK","specific_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_6_not_null""","meta","pub","_routines","CHECK","routine_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78576_9_not_null""","meta","pub","_routines","CHECK","returns_set IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78588_1_not_null""","meta","pub","_views","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78588_2_not_null""","meta","pub","_views","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78588_3_not_null""","meta","pub","_views","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78600_1_not_null""","meta","pub","_character_sets","CHECK","character_set_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78600_2_not_null""","meta","pub","_character_sets","CHECK","character_set_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78600_3_not_null""","meta","pub","_character_sets","CHECK","character_set_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78600_8_not_null""","meta","pub","_character_sets","CHECK","character_set_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78600_9_not_null""","meta","pub","_character_sets","CHECK","character_set_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_10_not_null""","meta","pub","_triggers","CHECK","condition_timing IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_12_not_null""","meta","pub","_triggers","CHECK","trigger_short_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_13_not_null""","meta","pub","_triggers","CHECK","trigger_full_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_1_not_null""","meta","pub","_triggers","CHECK","trigger_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_2_not_null""","meta","pub","_triggers","CHECK","trigger_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_3_not_null""","meta","pub","_triggers","CHECK","trigger_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_4_not_null""","meta","pub","_triggers","CHECK","event_manipulation IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_5_not_null""","meta","pub","_triggers","CHECK","event_object_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_6_not_null""","meta","pub","_triggers","CHECK","event_object_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_7_not_null""","meta","pub","_triggers","CHECK","event_object_table IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78617_9_not_null""","meta","pub","_triggers","CHECK","action_orientation IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_1_not_null""","meta","pub","_table_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_2_not_null""","meta","pub","_table_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_3_not_null""","meta","pub","_table_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_4_not_null""","meta","pub","_table_constraints","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_5_not_null""","meta","pub","_table_constraints","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_6_not_null""","meta","pub","_table_constraints","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78634_7_not_null""","meta","pub","_table_constraints","CHECK","constraint_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_1_not_null""","meta","pub","_domain_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_2_not_null""","meta","pub","_domain_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_3_not_null""","meta","pub","_domain_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_4_not_null""","meta","pub","_domain_constraints","CHECK","domain_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_5_not_null""","meta","pub","_domain_constraints","CHECK","domain_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78651_6_not_null""","meta","pub","_domain_constraints","CHECK","domain_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_1_not_null""","meta","pub","_parameters","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_2_not_null""","meta","pub","_parameters","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_3_not_null""","meta","pub","_parameters","CHECK","specific_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_4_not_null""","meta","pub","_parameters","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_5_not_null""","meta","pub","_parameters","CHECK","parameter_mode IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78668_7_not_null""","meta","pub","_parameters","CHECK","data_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_1_not_null""","meta","pub","_routine_columns","CHECK","specific_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_2_not_null""","meta","pub","_routine_columns","CHECK","specific_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_3_not_null""","meta","pub","_routine_columns","CHECK","specific_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_4_not_null""","meta","pub","_routine_columns","CHECK","column_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_5_not_null""","meta","pub","_routine_columns","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78680_6_not_null""","meta","pub","_routine_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_1_not_null""","meta","pub","_columns","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_2_not_null""","meta","pub","_columns","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_3_not_null""","meta","pub","_columns","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_4_not_null""","meta","pub","_columns","CHECK","column_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_5_not_null""","meta","pub","_columns","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_7_not_null""","meta","pub","_columns","CHECK","is_nullable IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78696_8_not_null""","meta","pub","_columns","CHECK","data_type IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_1_not_null""","meta","pub","_referential_constraints","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_2_not_null""","meta","pub","_referential_constraints","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_3_not_null""","meta","pub","_referential_constraints","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_4_not_null""","meta","pub","_referential_constraints","CHECK","unique_constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_5_not_null""","meta","pub","_referential_constraints","CHECK","unique_constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78718_6_not_null""","meta","pub","_referential_constraints","CHECK","unique_constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_1_not_null""","meta","pub","_key_column_usage","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_2_not_null""","meta","pub","_key_column_usage","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_3_not_null""","meta","pub","_key_column_usage","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_4_not_null""","meta","pub","_key_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_5_not_null""","meta","pub","_key_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_6_not_null""","meta","pub","_key_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_7_not_null""","meta","pub","_key_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78738_8_not_null""","meta","pub","_key_column_usage","CHECK","ordinal_position IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_1_not_null""","meta","pub","_check_column_usage","CHECK","constraint_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_2_not_null""","meta","pub","_check_column_usage","CHECK","constraint_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_3_not_null""","meta","pub","_check_column_usage","CHECK","constraint_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_4_not_null""","meta","pub","_check_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_5_not_null""","meta","pub","_check_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_6_not_null""","meta","pub","_check_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78755_7_not_null""","meta","pub","_check_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_1_not_null""","meta","pub","_view_column_usage","CHECK","view_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_2_not_null""","meta","pub","_view_column_usage","CHECK","view_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_3_not_null""","meta","pub","_view_column_usage","CHECK","view_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_4_not_null""","meta","pub","_view_column_usage","CHECK","table_catalog IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_5_not_null""","meta","pub","_view_column_usage","CHECK","table_schema IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_6_not_null""","meta","pub","_view_column_usage","CHECK","table_name IS NOT NULL",FALSE,FALSE
+"meta","pub","""2200_78772_7_not_null""","meta","pub","_view_column_usage","CHECK","column_name IS NOT NULL",FALSE,FALSE
+"meta","pub","_attributes_pkey","meta","pub","_attributes","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_builtin_data_types_pkey","meta","pub","_builtin_data_types","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_character_sets_character_set_catalog_fkey","meta","pub","_character_sets","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_character_sets_default_collate_catalog_fkey","meta","pub","_character_sets","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_character_sets_pkey","meta","pub","_character_sets","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_check_column_usage_constraint_catalog_fkey","meta","pub","_check_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_check_column_usage_pkey","meta","pub","_check_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_check_column_usage_table_catalog_fkey","meta","pub","_check_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_collations_collation_catalog_fkey","meta","pub","_collations","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_collations_pkey","meta","pub","_collations","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_columns_character_set_catalog_fkey","meta","pub","_columns","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_columns_collation_catalog_fkey","meta","pub","_columns","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_columns_pkey","meta","pub","_columns","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_columns_table_catalog_fkey","meta","pub","_columns","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_domain_constraints_constraint_catalog_fkey","meta","pub","_domain_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_domain_constraints_domain_catalog_fkey","meta","pub","_domain_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_domain_constraints_pkey","meta","pub","_domain_constraints","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_domains_domain_catalog_fkey","meta","pub","_domains","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_domains_pkey","meta","pub","_domains","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_element_types_pkey","meta","pub","_element_types","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_enums_pkey","meta","pub","_enums","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_enums_udt_catalog_fkey","meta","pub","_enums","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_information_schema_catalog_name_pkey","meta","pub","_information_schema_catalog_name","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_key_column_usage_constraint_catalog_fkey","meta","pub","_key_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_key_column_usage_pkey","meta","pub","_key_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_key_column_usage_table_catalog_fkey","meta","pub","_key_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_parameters_pkey","meta","pub","_parameters","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_parameters_specific_catalog_fkey","meta","pub","_parameters","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_referential_constraints_constraint_catalog_fkey","meta","pub","_referential_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_referential_constraints_pkey","meta","pub","_referential_constraints","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_referential_constraints_unique_constraint_catalog_fkey","meta","pub","_referential_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_routine_columns_pkey","meta","pub","_routine_columns","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_routine_columns_specific_catalog_fkey","meta","pub","_routine_columns","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_routines_pkey","meta","pub","_routines","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_routines_specific_catalog_fkey","meta","pub","_routines","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_schemata_catalog_name_fkey","meta","pub","_schemata","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_schemata_pkey","meta","pub","_schemata","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_table_constraints_constraint_catalog_fkey","meta","pub","_table_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_table_constraints_pkey","meta","pub","_table_constraints","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_table_constraints_table_catalog_fkey","meta","pub","_table_constraints","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_tables_pkey","meta","pub","_tables","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_tables_table_catalog_fkey","meta","pub","_tables","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_triggers_event_object_catalog_fkey","meta","pub","_triggers","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_triggers_pkey","meta","pub","_triggers","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_triggers_trigger_catalog_fkey","meta","pub","_triggers","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_udt_columns_pkey","meta","pub","_udt_columns","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_udt_columns_udt_catalog_fkey","meta","pub","_udt_columns","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_udt_pkey","meta","pub","_udt","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_view_column_usage_pkey","meta","pub","_view_column_usage","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_view_column_usage_table_catalog_fkey","meta","pub","_view_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_view_column_usage_view_catalog_fkey","meta","pub","_view_column_usage","FOREIGN KEY","NULL",FALSE,FALSE
+"meta","pub","_views_pkey","meta","pub","_views","PRIMARY KEY","NULL",FALSE,FALSE
+"meta","pub","_views_table_catalog_fkey","meta","pub","_views","FOREIGN KEY","NULL",FALSE,FALSE
diff --git a/tests/meta-store/data_tables.csv b/tests/meta-store/data_tables.csv
index 9b6f34c..8edf0b5 100644
--- a/tests/meta-store/data_tables.csv
+++ b/tests/meta-store/data_tables.csv
@@ -1,35 +1,35 @@
"meta","pg_catalog","pg_stats","VIEW",FALSE,"NULL","pg_stats","pg_catalog.pg_stats","postgres"
"meta","pg_catalog","pg_locks","VIEW",FALSE,"NULL","pg_locks","pg_catalog.pg_locks","postgres"
-"meta","public","_attributes","BASE TABLE",TRUE,"NULL","_attributes","public._attributes","postgres"
-"meta","public","_information_schema_catalog_name","BASE TABLE",TRUE,"NULL","_information_schema_catalog_name","public._information_schema_catalog_name","postgres"
-"meta","public","_schemata","BASE TABLE",TRUE,"NULL","_schemata","public._schemata","postgres"
-"meta","public","_builtin_data_types","BASE TABLE",TRUE,"NULL","_builtin_data_types","public._builtin_data_types","postgres"
-"meta","public","_udt_columns","BASE TABLE",TRUE,"NULL","_udt_columns","public._udt_columns","postgres"
-"meta","public","_enums","BASE TABLE",TRUE,"NULL","_enums","public._enums","postgres"
-"meta","public","_udt","BASE TABLE",TRUE,"NULL","_udt","public._udt","postgres"
-"meta","public","_element_types","BASE TABLE",TRUE,"NULL","_element_types","public._element_types","postgres"
-"meta","public","_all_types","VIEW",FALSE,"NULL","_all_types","public._all_types","postgres"
-"meta","public","_triggers","BASE TABLE",TRUE,"NULL","_triggers","public._triggers","postgres"
-"meta","public","_character_sets","BASE TABLE",TRUE,"NULL","_character_sets","public._character_sets","postgres"
-"meta","public","_collations","BASE TABLE",TRUE,"NULL","_collations","public._collations","postgres"
-"meta","public","_referential_constraints","BASE TABLE",TRUE,"NULL","_referential_constraints","public._referential_constraints","postgres"
-"meta","public","_check_constraints","BASE TABLE",TRUE,"NULL","_check_constraints","public._check_constraints","postgres"
-"meta","public","_key_column_usage","BASE TABLE",TRUE,"NULL","_key_column_usage","public._key_column_usage","postgres"
-"meta","public","_table_constraints","BASE TABLE",TRUE,"NULL","_table_constraints","public._table_constraints","postgres"
-"meta","public","_check_column_usage","BASE TABLE",TRUE,"NULL","_check_column_usage","public._check_column_usage","postgres"
-"meta","public","_constraint_column_usage","VIEW",FALSE,"NULL","_constraint_column_usage","public._constraint_column_usage","postgres"
-"meta","public","_constraint_table_usage","VIEW",FALSE,"NULL","_constraint_table_usage","public._constraint_table_usage","postgres"
-"meta","public","_views","BASE TABLE",TRUE,"NULL","_views","public._views","postgres"
-"meta","public","_view_column_usage","BASE TABLE",TRUE,"NULL","_view_column_usage","public._view_column_usage","postgres"
-"meta","public","_view_table_usage","VIEW",FALSE,"NULL","_view_table_usage","public._view_table_usage","postgres"
-"meta","public","_domain_constraints","BASE TABLE",TRUE,"NULL","_domain_constraints","public._domain_constraints","postgres"
-"meta","public","_domains","BASE TABLE",TRUE,"NULL","_domains","public._domains","postgres"
-"meta","public","_domain_column_usage","VIEW",FALSE,"NULL","_domain_column_usage","public._domain_column_usage","postgres"
-"meta","public","_parameters","BASE TABLE",TRUE,"NULL","_parameters","public._parameters","postgres"
-"meta","public","_routine_columns","BASE TABLE",TRUE,"NULL","_routine_columns","public._routine_columns","postgres"
-"meta","public","_routines","BASE TABLE",TRUE,"NULL","_routines","public._routines","postgres"
-"meta","public","_table_privileges","BASE TABLE",TRUE,"NULL","_table_privileges","public._table_privileges","postgres"
-"meta","public","_tables","BASE TABLE",TRUE,"NULL","_tables","public._tables","postgres"
-"meta","public","_column_privileges","BASE TABLE",TRUE,"NULL","_column_privileges","public._column_privileges","postgres"
-"meta","public","_columns","BASE TABLE",TRUE,"NULL","_columns","public._columns","postgres"
-"meta","public","_usage_privileges","BASE TABLE",TRUE,"NULL","_usage_privileges","public._usage_privileges","postgres"
+"meta","pub","_attributes","BASE TABLE",TRUE,"NULL","_attributes","pub._attributes","postgres"
+"meta","pub","_information_schema_catalog_name","BASE TABLE",TRUE,"NULL","_information_schema_catalog_name","pub._information_schema_catalog_name","postgres"
+"meta","pub","_schemata","BASE TABLE",TRUE,"NULL","_schemata","pub._schemata","postgres"
+"meta","pub","_builtin_data_types","BASE TABLE",TRUE,"NULL","_builtin_data_types","pub._builtin_data_types","postgres"
+"meta","pub","_udt_columns","BASE TABLE",TRUE,"NULL","_udt_columns","pub._udt_columns","postgres"
+"meta","pub","_enums","BASE TABLE",TRUE,"NULL","_enums","pub._enums","postgres"
+"meta","pub","_udt","BASE TABLE",TRUE,"NULL","_udt","pub._udt","postgres"
+"meta","pub","_element_types","BASE TABLE",TRUE,"NULL","_element_types","pub._element_types","postgres"
+"meta","pub","_all_types","VIEW",FALSE,"NULL","_all_types","pub._all_types","postgres"
+"meta","pub","_triggers","BASE TABLE",TRUE,"NULL","_triggers","pub._triggers","postgres"
+"meta","pub","_character_sets","BASE TABLE",TRUE,"NULL","_character_sets","pub._character_sets","postgres"
+"meta","pub","_collations","BASE TABLE",TRUE,"NULL","_collations","pub._collations","postgres"
+"meta","pub","_referential_constraints","BASE TABLE",TRUE,"NULL","_referential_constraints","pub._referential_constraints","postgres"
+"meta","pub","_check_constraints","BASE TABLE",TRUE,"NULL","_check_constraints","pub._check_constraints","postgres"
+"meta","pub","_key_column_usage","BASE TABLE",TRUE,"NULL","_key_column_usage","pub._key_column_usage","postgres"
+"meta","pub","_table_constraints","BASE TABLE",TRUE,"NULL","_table_constraints","pub._table_constraints","postgres"
+"meta","pub","_check_column_usage","BASE TABLE",TRUE,"NULL","_check_column_usage","pub._check_column_usage","postgres"
+"meta","pub","_constraint_column_usage","VIEW",FALSE,"NULL","_constraint_column_usage","pub._constraint_column_usage","postgres"
+"meta","pub","_constraint_table_usage","VIEW",FALSE,"NULL","_constraint_table_usage","pub._constraint_table_usage","postgres"
+"meta","pub","_views","BASE TABLE",TRUE,"NULL","_views","pub._views","postgres"
+"meta","pub","_view_column_usage","BASE TABLE",TRUE,"NULL","_view_column_usage","pub._view_column_usage","postgres"
+"meta","pub","_view_table_usage","VIEW",FALSE,"NULL","_view_table_usage","pub._view_table_usage","postgres"
+"meta","pub","_domain_constraints","BASE TABLE",TRUE,"NULL","_domain_constraints","pub._domain_constraints","postgres"
+"meta","pub","_domains","BASE TABLE",TRUE,"NULL","_domains","pub._domains","postgres"
+"meta","pub","_domain_column_usage","VIEW",FALSE,"NULL","_domain_column_usage","pub._domain_column_usage","postgres"
+"meta","pub","_parameters","BASE TABLE",TRUE,"NULL","_parameters","pub._parameters","postgres"
+"meta","pub","_routine_columns","BASE TABLE",TRUE,"NULL","_routine_columns","pub._routine_columns","postgres"
+"meta","pub","_routines","BASE TABLE",TRUE,"NULL","_routines","pub._routines","postgres"
+"meta","pub","_table_privileges","BASE TABLE",TRUE,"NULL","_table_privileges","pub._table_privileges","postgres"
+"meta","pub","_tables","BASE TABLE",TRUE,"NULL","_tables","pub._tables","postgres"
+"meta","pub","_column_privileges","BASE TABLE",TRUE,"NULL","_column_privileges","pub._column_privileges","postgres"
+"meta","pub","_columns","BASE TABLE",TRUE,"NULL","_columns","pub._columns","postgres"
+"meta","pub","_usage_privileges","BASE TABLE",TRUE,"NULL","_usage_privileges","pub._usage_privileges","postgres"
diff --git a/tests/meta-store/data_view_column_usage.csv b/tests/meta-store/data_view_column_usage.csv
index 8d3db3b..b1c85e4 100644
--- a/tests/meta-store/data_view_column_usage.csv
+++ b/tests/meta-store/data_view_column_usage.csv
@@ -1,56 +1,56 @@
-"meta","public","_all_types","meta","public","_builtin_data_types","comments"
-"meta","public","_all_types","meta","public","_builtin_data_types","full_type_name"
-"meta","public","_all_types","meta","public","_builtin_data_types","gtype"
-"meta","public","_all_types","meta","public","_builtin_data_types","internal"
-"meta","public","_all_types","meta","public","_builtin_data_types","short_type_name"
-"meta","public","_all_types","meta","public","_domains","domain_catalog"
-"meta","public","_all_types","meta","public","_domains","domain_comments"
-"meta","public","_all_types","meta","public","_domains","domain_full_name"
-"meta","public","_all_types","meta","public","_domains","domain_gtype"
-"meta","public","_all_types","meta","public","_domains","domain_internal"
-"meta","public","_all_types","meta","public","_domains","domain_name"
-"meta","public","_all_types","meta","public","_domains","domain_schema"
-"meta","public","_all_types","meta","public","_domains","domain_short_name"
-"meta","public","_all_types","meta","public","_udt","udt_catalog"
-"meta","public","_all_types","meta","public","_udt","udt_comments"
-"meta","public","_all_types","meta","public","_udt","udt_full_name"
-"meta","public","_all_types","meta","public","_udt","udt_gtype"
-"meta","public","_all_types","meta","public","_udt","udt_internal"
-"meta","public","_all_types","meta","public","_udt","udt_name"
-"meta","public","_all_types","meta","public","_udt","udt_schema"
-"meta","public","_all_types","meta","public","_udt","udt_short_name"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","column_name"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","constraint_catalog"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","constraint_name"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","constraint_schema"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","table_catalog"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","table_name"
-"meta","public","_constraint_column_usage","meta","public","_check_column_usage","table_schema"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","column_name"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","constraint_catalog"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","constraint_name"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","constraint_schema"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","table_catalog"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","table_name"
-"meta","public","_constraint_column_usage","meta","public","_key_column_usage","table_schema"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","constraint_catalog"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","constraint_name"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","constraint_schema"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","table_catalog"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","table_name"
-"meta","public","_constraint_table_usage","meta","public","_constraint_column_usage","table_schema"
-"meta","public","_domain_column_usage","meta","public","_columns","column_name"
-"meta","public","_domain_column_usage","meta","public","_columns","data_type"
-"meta","public","_domain_column_usage","meta","public","_columns","table_catalog"
-"meta","public","_domain_column_usage","meta","public","_columns","table_name"
-"meta","public","_domain_column_usage","meta","public","_columns","table_schema"
-"meta","public","_domain_column_usage","meta","public","_domains","domain_catalog"
-"meta","public","_domain_column_usage","meta","public","_domains","domain_full_name"
-"meta","public","_domain_column_usage","meta","public","_domains","domain_name"
-"meta","public","_domain_column_usage","meta","public","_domains","domain_schema"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","table_catalog"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","table_name"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","table_schema"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","view_catalog"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","view_name"
-"meta","public","_view_table_usage","meta","public","_view_column_usage","view_schema"
+"meta","pub","_all_types","meta","pub","_builtin_data_types","comments"
+"meta","pub","_all_types","meta","pub","_builtin_data_types","full_type_name"
+"meta","pub","_all_types","meta","pub","_builtin_data_types","gtype"
+"meta","pub","_all_types","meta","pub","_builtin_data_types","internal"
+"meta","pub","_all_types","meta","pub","_builtin_data_types","short_type_name"
+"meta","pub","_all_types","meta","pub","_domains","domain_catalog"
+"meta","pub","_all_types","meta","pub","_domains","domain_comments"
+"meta","pub","_all_types","meta","pub","_domains","domain_full_name"
+"meta","pub","_all_types","meta","pub","_domains","domain_gtype"
+"meta","pub","_all_types","meta","pub","_domains","domain_internal"
+"meta","pub","_all_types","meta","pub","_domains","domain_name"
+"meta","pub","_all_types","meta","pub","_domains","domain_schema"
+"meta","pub","_all_types","meta","pub","_domains","domain_short_name"
+"meta","pub","_all_types","meta","pub","_udt","udt_catalog"
+"meta","pub","_all_types","meta","pub","_udt","udt_comments"
+"meta","pub","_all_types","meta","pub","_udt","udt_full_name"
+"meta","pub","_all_types","meta","pub","_udt","udt_gtype"
+"meta","pub","_all_types","meta","pub","_udt","udt_internal"
+"meta","pub","_all_types","meta","pub","_udt","udt_name"
+"meta","pub","_all_types","meta","pub","_udt","udt_schema"
+"meta","pub","_all_types","meta","pub","_udt","udt_short_name"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","column_name"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","constraint_catalog"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","constraint_name"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","constraint_schema"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","table_catalog"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","table_name"
+"meta","pub","_constraint_column_usage","meta","pub","_check_column_usage","table_schema"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","column_name"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","constraint_catalog"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","constraint_name"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","constraint_schema"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","table_catalog"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","table_name"
+"meta","pub","_constraint_column_usage","meta","pub","_key_column_usage","table_schema"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","constraint_catalog"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","constraint_name"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","constraint_schema"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","table_catalog"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","table_name"
+"meta","pub","_constraint_table_usage","meta","pub","_constraint_column_usage","table_schema"
+"meta","pub","_domain_column_usage","meta","pub","_columns","column_name"
+"meta","pub","_domain_column_usage","meta","pub","_columns","data_type"
+"meta","pub","_domain_column_usage","meta","pub","_columns","table_catalog"
+"meta","pub","_domain_column_usage","meta","pub","_columns","table_name"
+"meta","pub","_domain_column_usage","meta","pub","_columns","table_schema"
+"meta","pub","_domain_column_usage","meta","pub","_domains","domain_catalog"
+"meta","pub","_domain_column_usage","meta","pub","_domains","domain_full_name"
+"meta","pub","_domain_column_usage","meta","pub","_domains","domain_name"
+"meta","pub","_domain_column_usage","meta","pub","_domains","domain_schema"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","table_catalog"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","table_name"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","table_schema"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","view_catalog"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","view_name"
+"meta","pub","_view_table_usage","meta","pub","_view_column_usage","view_schema"
diff --git a/tests/meta-store/data_views.csv b/tests/meta-store/data_views.csv
index 0c99bf2..9aff7a3 100644
--- a/tests/meta-store/data_views.csv
+++ b/tests/meta-store/data_views.csv
@@ -34,7 +34,7 @@
WHERE has_table_privilege(c.oid, 'select'::text);","NULL",FALSE
"meta","pg_catalog","pg_locks"," SELECT l.locktype, l.""database"", l.relation, l.page, l.tuple, l.transactionid, l.classid, l.objid, l.objsubid, l.""transaction"", l.pid, l.""mode"", l.""granted""
FROM pg_lock_status() l(locktype text, ""database"" oid, relation oid, page integer, tuple smallint, transactionid xid, classid oid, objid oid, objsubid smallint, ""transaction"" xid, pid integer, ""mode"" text, ""granted"" boolean);","NULL",FALSE
-"meta","public","_all_types","( SELECT _builtin_data_types.short_type_name, _builtin_data_types.gtype, _builtin_data_types.full_type_name, _builtin_data_types.comments, _builtin_data_types.internal, NULL::""unknown"" AS domain_catalog, NULL::""unknown"" AS domain_schema, NULL::""unknown"" AS domain_name, NULL::""unknown"" AS udt_catalog, NULL::""unknown"" AS udt_schema, NULL::""unknown"" AS udt_name
+"meta","pub","_all_types","( SELECT _builtin_data_types.short_type_name, _builtin_data_types.gtype, _builtin_data_types.full_type_name, _builtin_data_types.comments, _builtin_data_types.internal, NULL::""unknown"" AS domain_catalog, NULL::""unknown"" AS domain_schema, NULL::""unknown"" AS domain_name, NULL::""unknown"" AS udt_catalog, NULL::""unknown"" AS udt_schema, NULL::""unknown"" AS udt_name
FROM _builtin_data_types
UNION
SELECT _udt.udt_short_name AS short_type_name, _udt.udt_gtype AS gtype, _udt.udt_full_name AS full_type_name, _udt.udt_comments AS comments, _udt.udt_internal AS internal, NULL::""unknown"" AS domain_catalog, NULL::""unknown"" AS domain_schema, NULL::""unknown"" AS domain_name, _udt.udt_catalog, _udt.udt_schema, _udt.udt_name
@@ -42,17 +42,17 @@ UNION
UNION
SELECT _domains.domain_short_name AS short_type_name, _domains.domain_gtype AS gtype, _domains.domain_full_name AS full_type_name, _domains.domain_comments AS comments, _domains.domain_internal AS internal, _domains.domain_catalog, _domains.domain_schema, _domains.domain_name, NULL::""unknown"" AS udt_catalog, NULL::""unknown"" AS udt_schema, NULL::""unknown"" AS udt_name
FROM _domains;","NULL",FALSE
-"meta","public","_constraint_column_usage"," SELECT _key_column_usage.table_catalog, _key_column_usage.table_schema, _key_column_usage.table_name, _key_column_usage.column_name, _key_column_usage.constraint_catalog, _key_column_usage.constraint_schema, _key_column_usage.constraint_name
+"meta","pub","_constraint_column_usage"," SELECT _key_column_usage.table_catalog, _key_column_usage.table_schema, _key_column_usage.table_name, _key_column_usage.column_name, _key_column_usage.constraint_catalog, _key_column_usage.constraint_schema, _key_column_usage.constraint_name
FROM _key_column_usage
UNION
SELECT _check_column_usage.table_catalog, _check_column_usage.table_schema, _check_column_usage.table_name, _check_column_usage.column_name, _check_column_usage.constraint_catalog, _check_column_usage.constraint_schema, _check_column_usage.constraint_name
FROM _check_column_usage;","NULL",FALSE
-"meta","public","_constraint_table_usage"," SELECT DISTINCT _constraint_column_usage.table_catalog, _constraint_column_usage.table_schema, _constraint_column_usage.table_name, _constraint_column_usage.constraint_catalog, _constraint_column_usage.constraint_schema, _constraint_column_usage.constraint_name
+"meta","pub","_constraint_table_usage"," SELECT DISTINCT _constraint_column_usage.table_catalog, _constraint_column_usage.table_schema, _constraint_column_usage.table_name, _constraint_column_usage.constraint_catalog, _constraint_column_usage.constraint_schema, _constraint_column_usage.constraint_name
FROM _constraint_column_usage
ORDER BY _constraint_column_usage.table_catalog, _constraint_column_usage.table_schema, _constraint_column_usage.table_name, _constraint_column_usage.constraint_catalog, _constraint_column_usage.constraint_schema, _constraint_column_usage.constraint_name;","NULL",FALSE
-"meta","public","_view_table_usage"," SELECT DISTINCT _view_column_usage.view_catalog, _view_column_usage.view_schema, _view_column_usage.view_name, _view_column_usage.table_catalog, _view_column_usage.table_schema, _view_column_usage.table_name
+"meta","pub","_view_table_usage"," SELECT DISTINCT _view_column_usage.view_catalog, _view_column_usage.view_schema, _view_column_usage.view_name, _view_column_usage.table_catalog, _view_column_usage.table_schema, _view_column_usage.table_name
FROM _view_column_usage
ORDER BY _view_column_usage.view_catalog, _view_column_usage.view_schema, _view_column_usage.view_name, _view_column_usage.table_catalog, _view_column_usage.table_schema, _view_column_usage.table_name;","NULL",FALSE
-"meta","public","_domain_column_usage"," SELECT d.domain_catalog, d.domain_schema, d.domain_name, c.table_catalog, c.table_schema, c.table_name, c.column_name
+"meta","pub","_domain_column_usage"," SELECT d.domain_catalog, d.domain_schema, d.domain_name, c.table_catalog, c.table_schema, c.table_name, c.column_name
FROM _domains d
JOIN _columns c ON c.data_type::text = d.domain_full_name::text;","NULL",FALSE
diff --git a/tests/test-identifiers-quotes.c b/tests/test-identifiers-quotes.c
new file mode 100644
index 0000000..3e5078b
--- /dev/null
+++ b/tests/test-identifiers-quotes.c
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2009 The GNOME Foundation.
+ *
+ * AUTHORS:
+ * Vivien Malerba <malerba gnome-db org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <string.h>
+#include <libgda/libgda.h>
+
+typedef struct {
+ gchar *sql_identifier;
+ gchar *provider;
+ gboolean meta_store_convention;
+ gboolean force_quotes;
+ gchar *expected_result;
+} ATest;
+
+ATest tests[] = {
+ /* generic SQL */
+ {"\"Solution\"", NULL, FALSE, FALSE, "\"Solution\""},
+ {"\"Solution\"", NULL, FALSE, TRUE, "\"Solution\""},
+ {"\"solution\"", NULL, FALSE, FALSE, "\"solution\""},
+ {"\"solution\"", NULL, FALSE, TRUE, "\"solution\""},
+ {"solution", NULL, FALSE, FALSE, "solution"},
+ {"solution", NULL, FALSE, TRUE, "\"solution\""},
+ {"solution", NULL, TRUE, FALSE, "solution"},
+ {"solution", NULL, TRUE, TRUE, "\"solution\""},
+
+ {"SOLUTION", NULL, FALSE, TRUE, "\"SOLUTION\""},
+ {"SOLUTION", NULL, FALSE, FALSE, "SOLUTION"},
+
+ {"Solution", NULL, FALSE, FALSE, "Solution"}, /* mixed case */
+ {"Solution", NULL, FALSE, TRUE, "\"Solution\""},
+
+ {"5olution", NULL, FALSE, FALSE, "\"5olution\""}, /* test 1st digit */
+ {"5olution", NULL, FALSE, TRUE, "\"5olution\""},
+ {"5olution", NULL, TRUE, FALSE, "\"5olution\""}, /* this should not happen, but just in case */
+ {"5olution", NULL, TRUE, TRUE, "\"5olution\""}, /* this should not happen, but just in case */
+
+ {"$solu_t#ion", NULL, FALSE, FALSE, "$solu_t#ion"}, /* other allowed characters */
+ {"$solu_t#ion", NULL, FALSE, TRUE, "\"$solu_t#ion\""},
+ {"$solu_t#ion", NULL, TRUE, FALSE, "$solu_t#ion"},
+ {"$solu_t#ion", NULL, TRUE, TRUE, "\"$solu_t#ion\""},
+
+ {"solu tion", NULL, FALSE, FALSE, "\"solu tion\""}, /* non allowed characters */
+ {"solu tion", NULL, FALSE, TRUE, "\"solu tion\""},
+ {"solu tion", NULL, TRUE, FALSE, "\"solu tion\""},
+ {"solu tion", NULL, TRUE, TRUE, "\"solu tion\""},
+
+ {"select", NULL, FALSE, FALSE, "\"select\""}, /* SQL reserved keyword */
+ {"select", NULL, FALSE, TRUE, "\"select\""},
+ {"select", NULL, TRUE, FALSE, "\"select\""},
+ {"select", NULL, TRUE, TRUE, "\"select\""},
+
+ /* MySQL specific */
+ {"`Solution`", "MySQL", FALSE, FALSE, "`Solution`"},
+ {"`Solution`", "MySQL", FALSE, TRUE, "`Solution`"},
+ {"`solution`", "MySQL", FALSE, FALSE, "`solution`"},
+ {"`solution`", "MySQL", FALSE, TRUE, "`solution`"},
+ {"solution", "MySQL", FALSE, FALSE, "solution"},
+ {"solution", "MySQL", FALSE, TRUE, "`solution`"},
+ {"solution", "MySQL", TRUE, FALSE, "solution"},
+ {"solution", "MySQL", TRUE, TRUE, "`solution`"},
+
+ {"SOLUTION", "MySQL", FALSE, TRUE, "`SOLUTION`"},
+ {"SOLUTION", "MySQL", FALSE, FALSE, "SOLUTION"},
+
+ {"Solution", "MySQL", FALSE, FALSE, "Solution"}, /* mixed case */
+ {"Solution", "MySQL", FALSE, TRUE, "`Solution`"},
+
+ {"5olution", "MySQL", FALSE, FALSE, "`5olution`"}, /* test 1st digit */
+ {"5olution", "MySQL", FALSE, TRUE, "`5olution`"},
+ {"5olution", "MySQL", TRUE, FALSE, "`5olution`"}, /* this should not happen, but just in case */
+ {"5olution", "MySQL", TRUE, TRUE, "`5olution`"}, /* this should not happen, but just in case */
+
+ {"$solu_t#ion", "MySQL", FALSE, FALSE, "$solu_t#ion"}, /* other allowed characters */
+ {"$solu_t#ion", "MySQL", FALSE, TRUE, "`$solu_t#ion`"},
+ {"$solu_t#ion", "MySQL", TRUE, FALSE, "$solu_t#ion"},
+ {"$solu_t#ion", "MySQL", TRUE, TRUE, "`$solu_t#ion`"},
+
+ {"solu tion", "MySQL", FALSE, FALSE, "`solu tion`"}, /* non allowed characters */
+ {"solu tion", "MySQL", FALSE, TRUE, "`solu tion`"},
+ {"solu tion", "MySQL", TRUE, FALSE, "`solu tion`"},
+ {"solu tion", "MySQL", TRUE, TRUE, "`solu tion`"},
+
+ {"select", "MySQL", FALSE, FALSE, "`select`"}, /* SQL reserved keyword */
+ {"select", "MySQL", FALSE, TRUE, "`select`"},
+ {"select", "MySQL", TRUE, FALSE, "`select`"},
+ {"select", "MySQL", TRUE, TRUE, "`select`"},
+
+ /* PostgreSQL specific */
+ {"\"Solution\"", "PostgreSQL", FALSE, FALSE, "\"Solution\""},
+ {"\"Solution\"", "PostgreSQL", FALSE, TRUE, "\"Solution\""},
+ {"\"solution\"", "PostgreSQL", FALSE, FALSE, "\"solution\""},
+ {"\"solution\"", "PostgreSQL", FALSE, TRUE, "\"solution\""},
+ {"solution", "PostgreSQL", FALSE, FALSE, "solution"},
+ {"solution", "PostgreSQL", FALSE, TRUE, "\"solution\""},
+ {"solution", "PostgreSQL", TRUE, FALSE, "solution"},
+ {"solution", "PostgreSQL", TRUE, TRUE, "\"solution\""},
+
+ {"SOLUTION", "PostgreSQL", FALSE, TRUE, "\"SOLUTION\""},
+ {"SOLUTION", "PostgreSQL", FALSE, FALSE, "SOLUTION"},
+
+ {"Solution", "PostgreSQL", FALSE, FALSE, "Solution"}, /* mixed case */
+ {"Solution", "PostgreSQL", FALSE, TRUE, "\"Solution\""},
+
+ {"5olution", "PostgreSQL", FALSE, FALSE, "\"5olution\""}, /* test 1st digit */
+ {"5olution", "PostgreSQL", FALSE, TRUE, "\"5olution\""},
+ {"5olution", "PostgreSQL", TRUE, FALSE, "\"5olution\""}, /* this should not happen, but just in case */
+ {"5olution", "PostgreSQL", TRUE, TRUE, "\"5olution\""}, /* this should not happen, but just in case */
+
+ {"$solu_t#ion", "PostgreSQL", FALSE, FALSE, "$solu_t#ion"}, /* other allowed characters */
+ {"$solu_t#ion", "PostgreSQL", FALSE, TRUE, "\"$solu_t#ion\""},
+ {"$solu_t#ion", "PostgreSQL", TRUE, FALSE, "$solu_t#ion"},
+ {"$solu_t#ion", "PostgreSQL", TRUE, TRUE, "\"$solu_t#ion\""},
+
+ {"solu tion", "PostgreSQL", FALSE, FALSE, "\"solu tion\""}, /* non allowed characters */
+ {"solu tion", "PostgreSQL", FALSE, TRUE, "\"solu tion\""},
+ {"solu tion", "PostgreSQL", TRUE, FALSE, "\"solu tion\""},
+ {"solu tion", "PostgreSQL", TRUE, TRUE, "\"solu tion\""},
+
+ {"select", "PostgreSQL", FALSE, FALSE, "\"select\""}, /* SQL reserved keyword */
+ {"select", "PostgreSQL", FALSE, TRUE, "\"select\""},
+ {"select", "PostgreSQL", TRUE, FALSE, "\"select\""},
+ {"select", "PostgreSQL", TRUE, TRUE, "\"select\""},
+};
+
+int
+main (int argc, char** argv)
+{
+ gda_init ();
+ gint i, nfailed = 0;
+ for (i = 0; i < G_N_ELEMENTS (tests); i++) {
+ ATest *test = &(tests [i]);
+ gchar *result;
+ GdaServerProvider *prov = NULL;
+ gboolean fail = FALSE;
+ if (test->provider) {
+ prov = gda_config_get_provider (test->provider, NULL);
+ if (!prov) {
+ g_print ("Can't find provider for %s, ignoring test\n", test->provider);
+ continue;
+ }
+ }
+ result = gda_sql_identifier_quote (test->sql_identifier, NULL, prov, test->meta_store_convention,
+ test->force_quotes);
+ if (!result) {
+ if (test->expected_result) {
+ g_print ("Failed for %s: result is NULL when %s was expected\n",
+ test->sql_identifier,
+ test->expected_result);
+ fail = TRUE;
+ }
+ }
+ else {
+ if (!test->expected_result) {
+ g_print ("Failed for %s: result is %s when NULL was expected\n",
+ test->sql_identifier,
+ result);
+ fail = TRUE;
+ }
+ else if (strcmp (result, test->expected_result)) {
+ g_print ("Failed for %s: result is %s when %s was expected\n",
+ test->sql_identifier,
+ result, test->expected_result);
+ fail = TRUE;
+ }
+ g_free (result);
+ }
+
+ if (fail) {
+ g_print ("\tprovider: %s\n", test->provider);
+ g_print ("\tmeta store convention: %s\n", test->meta_store_convention ? "Yes" : "No");
+ g_print ("\tforce quotes: %s\n", test->force_quotes ? "Yes" : "No");
+ nfailed++;
+ }
+ }
+
+ g_print ("%d tests executed, ", i);
+ if (nfailed > 0)
+ g_print ("%d failed\n", nfailed);
+ else
+ g_print ("Ok\n");
+ return EXIT_SUCCESS;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]