Changeset: c539e073d383 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c539e073d383
Modified Files:
        clients/Tests/MAL-signatures-hge.test
        clients/Tests/MAL-signatures.test
        clients/Tests/exports.stable.out
        cmake/monetdb-findpackages.cmake
        common/utils/mstring.h
        gdk/CMakeLists.txt
        gdk/gdk.h
        gdk/gdk_aggr.c
        gdk/gdk_align.c
        gdk/gdk_atoms.c
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
        gdk/gdk_calc.c
        gdk/gdk_group.c
        gdk/gdk_hash.c
        gdk/gdk_heap.c
        gdk/gdk_join.c
        gdk/gdk_private.h
        gdk/gdk_project.c
        gdk/gdk_storage.c
        gdk/gdk_string.c
        gdk/gdk_system.h
        gdk/gdk_utils.c
        monetdb5/mal/CMakeLists.txt
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_namespace.h
        monetdb5/modules/atoms/str.c
        monetdb5/modules/mal/batExtensions.c
        monetdb5/modules/mal/mat.c
        monetdb5/modules/mal/pcre.c
        monetdb5/modules/mal/pp_algebra.c
        monetdb5/modules/mal/pp_hash.c
        monetdb5/modules/mal/txtsim.c
        monetdb5/optimizer/opt_mitosis.c
        monetdb_config.h.in
        sql/backends/monet5/CMakeLists.txt
        sql/backends/monet5/copy.c
        sql/backends/monet5/copy_convert.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_statement.c
        sql/include/sql_catalog.h
        sql/include/sql_relation.h
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_parser.y
        sql/server/sql_scan.c
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_storage.h
        sql/storage/objectset.c
        sql/storage/sql_catalog.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        
sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
        sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
        sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade/Tests/upgrade.stable.out
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
        
sql/test/testdb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out
        sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
        sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade/Tests/upgrade.stable.out
        sql/test/testdb/Tests/dump.stable.out
        testing/Mtest.py.in
Branch: pp_hashjoin
Log Message:

merged with default


diffs (truncated from 13003 to 300 lines):

diff --git a/NT/mksqlwxs.py b/NT/mksqlwxs.py
--- a/NT/mksqlwxs.py
+++ b/NT/mksqlwxs.py
@@ -162,7 +162,6 @@ def main():
                vcpkg.format(r'bin\libxml2.dll'),
                vcpkg.format(r'bin\lz4.dll'),
                vcpkg.format(r'bin\pcre2-8.dll'),
-               vcpkg.format(r'bin\xxhash.dll'),
                vcpkg.format(r'bin\z.dll')])
     id = comp(debug, id, 14,
               [r'bin\mclient.pdb',
@@ -222,7 +221,6 @@ def main():
                vcpkg.format(r'lib\lz4.lib'),
                vcpkg.format(r'lib\lzma.lib'),
                vcpkg.format(r'lib\pcre2-8.lib'),
-               vcpkg.format(r'lib\xxhash.lib'),
                vcpkg.format(r'lib\z.lib')])
     print(r'            </Directory>')
     print(r'            <Directory Id="share" Name="share">')
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
@@ -52884,6 +52884,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
@@ -52949,6 +52954,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
@@ -40964,6 +40964,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
@@ -41029,6 +41034,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__));
@@ -393,7 +394,7 @@ bool MT_thread_init(void);
 gdk_return MT_thread_init_add_callback(void (*init)(void *), void 
(*destroy)(void *), void *data);
 bool MT_thread_register(void);
 void MT_thread_set_qry_ctx(QryCtx *ctx);
-void MT_thread_setalgorithm(const char *algo);
+void MT_thread_setalgorithm(const char *algo, const char *func);
 void MT_thread_setallocator(allocator *ma);
 void MT_thread_setdata(void *data);
 void MT_thread_setlockwait(MT_Lock *lock);
@@ -910,6 +911,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[];
@@ -944,6 +946,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[];
@@ -1375,8 +1378,8 @@ char *prompt_getlogin(void);
 struct dirent *readdir(DIR *dir);
 void rewinddir(DIR *dir);
 char *simple_prompt(const char *prompt, int maxlen, int echo, const char *def);
-size_t strlconcat(char *restrict dst, size_t n, const char *restrict src, ...) 
__attribute__((__access__(write_only, 1, 2))) __attribute__(()) 
__attribute__((__sentinel__));
-ssize_t strtconcat(char *restrict dst, size_t n, const char *restrict src, 
...) __attribute__((__access__(write_only, 1, 2))) __attribute__(()) 
__attribute__((__sentinel__));
+size_t strlconcat(char *restrict dst, size_t n, const char *restrict src, ...) 
__attribute__((__access__(write_only, 1, 2))) __attribute__((__nonnull__(1))) 
__attribute__((__sentinel__));
+ssize_t strtconcat(char *restrict dst, size_t n, const char *restrict src, 
...) __attribute__((__access__(write_only, 1, 2))) 
__attribute__((__nonnull__(1))) __attribute__((__sentinel__));
 char *utf16toutf8(const uint16_t *src);
 const uint8_t utf8d[364];
 uint16_t *utf8toutf16(const char *src);
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");
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to