Changeset: 83702b7537ec for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/83702b7537ec
Modified Files:
        clients/mapiclient/dump.c
Branch: ustr
Log Message:

Streamline dump queries.
No need for extra query to figure out distinct string column name.


diffs (95 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -920,8 +920,12 @@ dump_column_definition(Mapi mid, stream 
                                "c.type_scale, "        /* 3 */
                                "c.\"null\", "          /* 4 */
                                "c.number, "            /* 5 */
-                               "c.storage "            /* 6 */
+                               "us.name, "                     /* 6 */
+                               "uo.name "                      /* 7 */
                         "FROM sys._columns c "
+                                "LEFT OUTER JOIN sys.dependencies d ON c.id = 
d.depend_id "
+                                "LEFT OUTER JOIN sys.objects uo ON d.id = 
uo.id "
+                                "LEFT OUTER JOIN sys.schemas us ON uo.nr = 
us.id "
                         "WHERE c.table_id = %s "
                         "ORDER BY c.number", tid);
        else
@@ -932,8 +936,12 @@ dump_column_definition(Mapi mid, stream 
                                "c.type_scale, "        /* 3 */
                                "c.\"null\", "          /* 4 */
                                "c.number, "            /* 5 */
-                               "c.storage "            /* 6 */
-                        "FROM sys._columns c, "
+                               "us.name, "                     /* 6 */
+                               "uo.name "                      /* 7 */
+                        "FROM sys._columns c "
+                                "LEFT OUTER JOIN sys.dependencies d ON c.id = 
d.depend_id "
+                                "LEFT OUTER JOIN sys.objects uo ON d.id = 
uo.id "
+                                "LEFT OUTER JOIN sys.schemas us ON uo.nr = 
us.id, "
                              "sys._tables t, "
                              "sys.schemas s "
                         "WHERE c.table_id = t.id "
@@ -952,7 +960,8 @@ dump_column_definition(Mapi mid, stream 
                char *c_type_digits = strdup(mapi_fetch_field(hdl, 2));
                char *c_type_scale = strdup(mapi_fetch_field(hdl, 3));
                const char *c_null = mapi_fetch_field(hdl, 4);
-               const char *c_storage = mapi_fetch_field(hdl, 6);
+               char *s_name = mapi_fetch_field(hdl, 6);
+               char *o_name = mapi_fetch_field(hdl, 7);
                int space;
 
                if (mapi_error(mid) || !c_type || !c_type_digits || 
!c_type_scale) {
@@ -961,6 +970,15 @@ dump_column_definition(Mapi mid, stream 
                        free(c_type_scale);
                        goto bailout;
                }
+               if ((s_name && (s_name = strdup(s_name)) == NULL) ||
+                       (o_name && (o_name = strdup(o_name)) == NULL)) {
+                       free(c_type);
+                       free(c_type_digits);
+                       free(c_type_scale);
+                       free(s_name);
+                       free(o_name);
+                       goto bailout;
+               }
 
                if (cnt)
                        mnstr_printf(sqlf, ",\n");
@@ -1001,23 +1019,11 @@ dump_column_definition(Mapi mid, stream 
                        mnstr_printf(sqlf, "%*s NOT NULL", CAP(13 - space), "");
                        space = 13;
                }
-               if (c_storage && strncmp(c_storage, "USTR", 4) == 0) {
-                       char q[128];
-                       int sid, uid;
-                       sscanf(c_storage, "USTR %d %d", &sid, &uid);
-                       snprintf(q, sizeof(q), "SELECT s.name, o.name FROM 
sys.schemas s, sys.objects o WHERE s.id = %d AND o.nr = s.id AND o.id = %d", 
sid, uid);
-                       MapiHdl h = mapi_query(mid, q);
-                       if (h != NULL) {
-                               if (mapi_fetch_row(h) != 0) {
-                                       const char *sname = mapi_fetch_field(h, 
0);
-                                       const char *uname = mapi_fetch_field(h, 
1);
-                                       mnstr_printf(sqlf, "%*s DISTINCT STRING 
COLUMN ",
+               if (s_name && o_name) {
+                       mnstr_printf(sqlf, "%*s DISTINCT STRING COLUMN ",
                                                                 CAP(13 - 
space), "");
-                                       dquoted_print(sqlf, sname, ".");
-                                       dquoted_print(sqlf, uname, NULL);
-                               }
-                               mapi_close_handle(h);
-                       }
+                       dquoted_print(sqlf, s_name, ".");
+                       dquoted_print(sqlf, o_name, NULL);
                        space = 13;
                }
 
@@ -1025,6 +1031,8 @@ dump_column_definition(Mapi mid, stream 
                free(c_type);
                free(c_type_digits);
                free(c_type_scale);
+               free(s_name);
+               free(o_name);
                if (mnstr_errnr(sqlf) != MNSTR_NO__ERROR)
                        goto bailout;
        }
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to