Changeset: 4d44b1a11c81 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4d44b1a11c81
Branch: default
Log Message:

Merged ustr into default.


diffs (truncated from 11025 to 300 lines):

diff --git a/clients/Tests/MAL-signatures-hge.test 
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -50764,6 +50764,11 @@ pattern sqlcatalog.create_user(X_0:str, 
 SQLcreate_user
 Catalog operation create_user
 sqlcatalog
+create_ustr
+pattern sqlcatalog.create_ustr(X_0:str, X_1:str, X_2:int):void
+SQLcreate_ustr
+Catalog operation create_ustr
+sqlcatalog
 create_view
 pattern sqlcatalog.create_view(X_0:str, X_1:str, X_2:ptr, X_3:int, 
X_4:int):void
 SQLcreate_view
@@ -50829,6 +50834,11 @@ pattern sqlcatalog.drop_user(X_0:str, X_
 SQLdrop_user
 Catalog operation drop_user
 sqlcatalog
+drop_ustr
+pattern sqlcatalog.drop_ustr(X_0:str, X_1:str, X_2:int, X_3:int):void
+SQLdrop_ustr
+Catalog operation drop_ustr
+sqlcatalog
 drop_view
 pattern sqlcatalog.drop_view(X_0:str, X_1:str, X_2:int, X_3:int):void
 SQLdrop_view
diff --git a/clients/Tests/MAL-signatures.test 
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -39144,6 +39144,11 @@ pattern sqlcatalog.create_user(X_0:str, 
 SQLcreate_user
 Catalog operation create_user
 sqlcatalog
+create_ustr
+pattern sqlcatalog.create_ustr(X_0:str, X_1:str, X_2:int):void
+SQLcreate_ustr
+Catalog operation create_ustr
+sqlcatalog
 create_view
 pattern sqlcatalog.create_view(X_0:str, X_1:str, X_2:ptr, X_3:int, 
X_4:int):void
 SQLcreate_view
@@ -39209,6 +39214,11 @@ pattern sqlcatalog.drop_user(X_0:str, X_
 SQLdrop_user
 Catalog operation drop_user
 sqlcatalog
+drop_ustr
+pattern sqlcatalog.drop_ustr(X_0:str, X_1:str, X_2:int, X_3:int):void
+SQLdrop_ustr
+Catalog operation drop_ustr
+sqlcatalog
 drop_view
 pattern sqlcatalog.drop_view(X_0:str, X_1:str, X_2:int, X_3:int):void
 SQLdrop_view
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -113,6 +113,7 @@ gdk_return BATclear(BAT *b, bool force);
 void BATcommit(BAT *b, BUN size);
 BAT *BATconstant(oid hseq, int tt, const void *val, BUN cnt, role_t role);
 BAT *BATconvert(BAT *b, BAT *s, int tp, uint8_t scale1, uint8_t scale2, 
uint8_t precision);
+gdk_return BATconvert2ustr(BAT *b, BAT *bu) 
__attribute__((__warn_unused_result__));
 BUN BATcount_no_nil(BAT *b, BAT *s);
 gdk_return BATdel(BAT *b, BAT *d) __attribute__((__warn_unused_result__));
 BAT *BATdense(oid hseq, oid tseq, BUN cnt) 
__attribute__((__warn_unused_result__));
@@ -901,6 +902,7 @@ const char create_tableRef[];
 const char create_triggerRef[];
 const char create_typeRef[];
 const char create_userRef[];
+const char create_ustrRef[];
 const char create_viewRef[];
 const char crossproductRef[];
 const char cume_distRef[];
@@ -935,6 +937,7 @@ const char drop_tableRef[];
 const char drop_triggerRef[];
 const char drop_typeRef[];
 const char drop_userRef[];
+const char drop_ustrRef[];
 const char drop_viewRef[];
 void dumpModules(stream *out);
 const char emptybindRef[];
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -919,8 +919,13 @@ dump_column_definition(Mapi mid, stream 
                                "c.type_digits, "       /* 2 */
                                "c.type_scale, "        /* 3 */
                                "c.\"null\", "          /* 4 */
-                               "c.number "                     /* 5 */
+                               "c.number, "            /* 5 */
+                               "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
@@ -930,8 +935,13 @@ dump_column_definition(Mapi mid, stream 
                                "c.type_digits, "       /* 2 */
                                "c.type_scale, "        /* 3 */
                                "c.\"null\", "          /* 4 */
-                               "c.number "                     /* 5 */
-                        "FROM sys._columns c, "
+                               "c.number, "            /* 5 */
+                               "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 "
@@ -950,6 +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);
+               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) {
@@ -958,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");
@@ -995,8 +1016,14 @@ dump_column_definition(Mapi mid, stream 
                }
                space = dump_type(mid, sqlf, c_type, c_type_digits, 
c_type_scale, hashge);
                if (strcmp(c_null, "false") == 0) {
-                       mnstr_printf(sqlf, "%*s NOT NULL",
-                                                CAP(13 - space), "");
+                       mnstr_printf(sqlf, "%*s NOT NULL", CAP(13 - space), "");
+                       space = 13;
+               }
+               if (s_name && o_name) {
+                       mnstr_printf(sqlf, "%*s DISTINCT STRING COLUMN ",
+                                                                CAP(13 - 
space), "");
+                       dquoted_print(sqlf, s_name, ".");
+                       dquoted_print(sqlf, o_name, NULL);
                        space = 13;
                }
 
@@ -1004,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;
        }
@@ -1953,7 +1982,7 @@ dump_table_storage(Mapi mid, const char 
 
        snprintf(query, maxquerylen,
                         "SELECT name, storage FROM sys._columns "
-                        "WHERE storage IS NOT NULL "
+                        "WHERE storage NOT LIKE 'USTR%%' "
                         "AND table_id = (SELECT id FROM sys._tables WHERE name 
= '%s' "
                         "AND schema_id = (SELECT id FROM sys.schemas WHERE 
name = '%s'))",
                         t, s);
@@ -2001,27 +2030,30 @@ dump_table_access(Mapi mid, const char *
 
        snprintf(query, maxquerylen,
                         "SELECT t.access FROM sys._tables t, sys.schemas s "
-                        "WHERE s.name = '%s' AND t.schema_id = s.id AND t.name 
= '%s'",
+                        "WHERE s.name = '%s' AND t.schema_id = s.id AND t.name 
= '%s' AND t.access in (1, 2)",
                         s, t);
        if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid))
                goto bailout;
-       if (mapi_rows_affected(hdl) != 1) {
-               if (mapi_rows_affected(hdl) == 0)
-                       fprintf(stderr, "table %s.%s does not exist\n", schema, 
tname);
-               else
-                       fprintf(stderr, "table %s.%s is not unique\n", schema, 
tname);
+       switch (mapi_rows_affected(hdl)) {
+       case 0:
+               rc = 0;
+               break;
+       case 1:
+               while ((mapi_fetch_row(hdl)) != 0) {
+                       const char *access = mapi_fetch_field(hdl, 0);
+                       if (access && (*access == '1' || *access == '2')) {
+                               mnstr_printf(sqlf, "ALTER TABLE ");
+                               dquoted_print(sqlf, schema, ".");
+                               dquoted_print(sqlf, tname, " ");
+                               mnstr_printf(sqlf, "SET %s ONLY;\n", *access == 
'1' ? "READ" : "INSERT");
+                       }
+               }
+               rc = 0;                                         /* success */
+               break;
+       default:
+               fprintf(stderr, "table %s.%s is not unique\n", schema, tname);
                goto bailout;
        }
-       while ((mapi_fetch_row(hdl)) != 0) {
-               const char *access = mapi_fetch_field(hdl, 0);
-               if (access && (*access == '1' || *access == '2')) {
-                       mnstr_printf(sqlf, "ALTER TABLE ");
-                       dquoted_print(sqlf, schema, ".");
-                       dquoted_print(sqlf, tname, " ");
-                       mnstr_printf(sqlf, "SET %s ONLY;\n", *access == '1' ? 
"READ" : "INSERT");
-               }
-       }
-       rc = 0;                                         /* success */
   bailout:
        free(query);
        free(s);
@@ -2206,12 +2238,12 @@ dump_table(Mapi mid, const char *schema,
        }
 
        rc = describe_table(mid, schema, tname, sqlf, foreign, databaseDump);
-       if (rc == 0)
-               rc = dump_table_storage(mid, schema, tname, sqlf);
        if (rc == 0 && !describe)
                rc = dump_table_data(mid, schema, tname, sqlf, ddir, ext, 
useInserts, noescape);
        if (rc == 0)
                rc = dump_table_access(mid, schema, tname, sqlf);
+       if (rc == 0)
+               rc = dump_table_storage(mid, schema, tname, sqlf);
        if (rc == 0 && !databaseDump)
                rc = dump_table_defaults(mid, schema, tname, sqlf);
   doreturn:
@@ -2796,6 +2828,8 @@ dump_database(Mapi mid, stream *sqlf, co
                "ORDER BY sch.name, seq.name";
        static const char sequences2[] =
                "SELECT * FROM sys.describe_sequences ORDER BY sch, seq";
+       static const char ustrs[] =
+               "SELECT s.name, o.name FROM sys.objects o, sys.schemas s WHERE 
o.nr = s.id ORDER BY s.name, o.name";
        static const char tables[] =
                "SELECT t.id AS id, "
                           "s.name AS sname, "
@@ -3086,6 +3120,21 @@ dump_database(Mapi mid, stream *sqlf, co
        mapi_close_handle(hdl);
        hdl = NULL;
 
+       if ((hdl = mapi_query(mid, ustrs)) == NULL || mapi_error(mid))
+               goto bailout;
+
+       while (rc == 0 &&
+                  mnstr_errnr(sqlf) == MNSTR_NO__ERROR &&
+              mapi_fetch_row(hdl) != 0) {
+               const char *sname = mapi_fetch_field(hdl, 0);
+               const char *uname = mapi_fetch_field(hdl, 1);
+               mnstr_printf(sqlf, "CREATE DISTINCT STRING COLUMN ");
+               dquoted_print(sqlf, sname, ".");
+               dquoted_print(sqlf, uname, ";\n");
+       }
+       mapi_close_handle(hdl);
+       hdl = NULL;
+
        /* Tables, views, triggers, and functions can all reference each
         * other, so we need to be very careful in how we dump them.  We
         * first dump the tables (all types), including data, but without
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -398,7 +398,8 @@ typedef struct PROPrec PROPrec;
 #define GDKLIBRARY_HSIZE       061045U /* first in Jan2022: heap "size" values 
*/
 #define GDKLIBRARY_JSON        061046U /* first in Sep2022: json storage 
changes*/
 #define GDKLIBRARY_STATUS      061047U /* first in Dec2023: no status/filename 
columns */
-#define GDKLIBRARY             061050U /* first in Aug2024 */
+#define GDKLIBRARY_USTR                061050U /* first in Aug2024: no ustr */
+#define GDKLIBRARY             061051U /* first after Dec2025 */
 
 /* The batRestricted field indicates whether a BAT is readonly.
  * we have modes: BAT_WRITE  = all permitted
@@ -451,11 +452,13 @@ typedef struct BAT {
        /* see also comment near BATassertProps() for more information
         * about the properties */
        bool tkey:1;            /* no duplicate values present */
+       bool tvkey:1;           /* no duplicate values in tvheap */
        bool tnonil:1;          /* there are no nils in the column */
        bool tnil:1;            /* there is a nil in the column */
        bool tsorted:1;         /* column is sorted in ascending order */
        bool trevsorted:1;      /* column is sorted in descending order */
        bool tascii:1;          /* string column is fully ASCII (7 bit) */
+       bat ustr;               /* use ustr bat */
        BUN tnokey[2];          /* positions that prove key==FALSE */
        BUN tnosorted;          /* position that proves sorted==FALSE */
        BUN tnorevsorted;       /* position that proves revsorted==FALSE */
@@ -537,7 +540,7 @@ __attribute__((__pure__))
 static inline bool
 isVIEW(const BAT *b)
 {
-       return VIEWtparent(b) != 0 || VIEWvtparent(b) != 0;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to