Changeset: 030f1c61a2a5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/030f1c61a2a5
Branch: label
Log Message:

merged with default


diffs (truncated from 408 to 300 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1131,14 +1131,15 @@ dump_column_definition(Mapi mid, stream 
                         "SELECT kc.name, "             /* 0 */
                                "kc.nr, "                       /* 1 */
                                "k.name, "                      /* 2 */
-                               "kc.id "                        /* 3 */
+                               "kc.id, "                       /* 3 */
+                               "k.type "                       /* 4 */
                         "FROM sys.objects kc, "
                              "sys.keys k, "
                              "sys.schemas s, "
                              "sys._tables t "
                         "WHERE kc.id = k.id "
                           "AND k.table_id = t.id "
-                          "AND k.type = 1 "
+                          "AND k.type in (1, 3) "
                           "AND t.schema_id = s.id "
                           "AND s.name = '%s' "
                           "AND t.name = '%s' "
@@ -1150,6 +1151,7 @@ dump_column_definition(Mapi mid, stream 
                const char *c_column = mapi_fetch_field(hdl, 0);
                const char *kc_nr = mapi_fetch_field(hdl, 1);
                const char *k_name = mapi_fetch_field(hdl, 2);
+               const char *k_type = mapi_fetch_field(hdl, 4);
 
                if (mapi_error(mid))
                        goto bailout;
@@ -1161,7 +1163,7 @@ dump_column_definition(Mapi mid, stream 
                                mnstr_printf(sqlf, "CONSTRAINT ");
                                dquoted_print(sqlf, k_name, " ");
                        }
-                       mnstr_printf(sqlf, "UNIQUE (");
+                       mnstr_printf(sqlf, "UNIQUE%s (", strcmp(k_type, "1") == 
0 ? "" : " NULLS NOT DISTINCT");
                        cnt = 1;
                } else
                        mnstr_printf(sqlf, ", ");
diff --git a/clients/mapilib/connect.c b/clients/mapilib/connect.c
--- a/clients/mapilib/connect.c
+++ b/clients/mapilib/connect.c
@@ -381,6 +381,22 @@ connect_socket_tcp_addr(Mapi mid, struct
        return s;
 }
 
+static const char *
+base_name(const char *file)
+{
+       char *p = strrchr(file, '/');
+#ifdef _MSC_VER
+       char *q = strrchr(file, '\\');
+       if (q != NULL) {
+               if (p == NULL || p < q)
+                       p = q;
+       }
+#endif
+       if (p)
+               return p + 1;
+       return file;
+}
+
 static void
 send_all_clientinfo(Mapi mid)
 {
@@ -403,7 +419,7 @@ send_all_clientinfo(Mapi mid)
                application_name = get_bin_path();
                if (application_name) {
                        free_this = strdup(application_name);
-                       application_name = (const char*) 
basename((char*)application_name);
+                       application_name = base_name(application_name);
                }
        }
        const char *client_remark = msetting_string(mp, MP_CLIENT_REMARK);
diff --git a/clients/odbc/driver/SQLSpecialColumns.c 
b/clients/odbc/driver/SQLSpecialColumns.c
--- a/clients/odbc/driver/SQLSpecialColumns.c
+++ b/clients/odbc/driver/SQLSpecialColumns.c
@@ -209,7 +209,7 @@ MNDBSpecialColumns(ODBCStmt *stmt,
                }
 
                /* construct the query */
-               querylen = 6100 + (sch ? strlen(sch) : 0) + (tab ? strlen(tab) 
: 0);
+               querylen = 6130 + (sch ? strlen(sch) : 0) + (tab ? strlen(tab) 
: 0);
                query = malloc(querylen);
                if (query == NULL)
                        goto nomem;
@@ -235,9 +235,9 @@ MNDBSpecialColumns(ODBCStmt *stmt,
                        "SELECT \"id\", \"table_id\" FROM \"sys\".\"keys\" 
WHERE \"type\" = 0 "
                        "UNION ALL "
                        /* and first unique constraint of a table when table 
has no pkey */
-                       "SELECT \"id\", \"table_id\" FROM \"sys\".\"keys\" 
WHERE \"type\" = 1 "
+                       "SELECT \"id\", \"table_id\" FROM \"sys\".\"keys\" 
WHERE \"type\" IN (1, 3) "
                        "AND \"table_id\" NOT IN (select \"table_id\" from 
\"sys\".\"keys\" where \"type\" = 0) "
-                       "AND (\"table_id\", \"id\") IN (select \"table_id\", 
min(\"id\") from \"sys\".\"keys\" where \"type\" = 1 group by \"table_id\"))",
+                       "AND (\"table_id\", \"id\") IN (select \"table_id\", 
min(\"id\") from \"sys\".\"keys\" where \"type\" IN (1, 3) group by 
\"table_id\"))",
                        querylen - pos);
                if (inclTmpKey) {
                        /* we must also include the primary key or unique 
constraint of local temporary tables which are stored in tmp.keys */
@@ -246,9 +246,9 @@ MNDBSpecialColumns(ODBCStmt *stmt,
                        ", tmpkeys as ("
                        "SELECT \"id\", \"table_id\" FROM \"tmp\".\"keys\" 
WHERE \"type\" = 0 "
                        "UNION ALL "
-                       "SELECT \"id\", \"table_id\" FROM \"tmp\".\"keys\" 
WHERE \"type\" = 1 "
+                       "SELECT \"id\", \"table_id\" FROM \"tmp\".\"keys\" 
WHERE \"type\" IN (1, 3) "
                        "AND \"table_id\" NOT IN (select \"table_id\" from 
\"tmp\".\"keys\" where \"type\" = 0) "
-                       "AND (\"table_id\", \"id\") IN (select \"table_id\", 
min(\"id\") from \"tmp\".\"keys\" where \"type\" = 1 group by \"table_id\"))",
+                       "AND (\"table_id\", \"id\") IN (select \"table_id\", 
min(\"id\") from \"tmp\".\"keys\" where \"type\" IN (1, 3) group by 
\"table_id\"))",
                        querylen - pos);
                }
                /* 3rd cte: tableids */
@@ -310,7 +310,7 @@ MNDBSpecialColumns(ODBCStmt *stmt,
                        "SELECT c.\"name\", c.\"type\", c.\"type_digits\", 
c.\"type_scale\", c.\"number\" "
                        "FROM tableids t "
                        "JOIN \"sys\".\"_columns\" c ON t.\"id\" = 
c.\"table_id\" "
-                       "WHERE t.\"id\" NOT IN (SELECT \"table_id\" FROM 
\"sys\".\"keys\" WHERE \"type\" in (0, 1))",
+                       "WHERE t.\"id\" NOT IN (SELECT \"table_id\" FROM 
\"sys\".\"keys\" WHERE \"type\" IN (0, 1, 3))",
                        querylen - pos);
                /* add an extra selection when SQL_NO_NULLS is requested */
                if (Nullable == SQL_NO_NULLS) {
@@ -322,7 +322,7 @@ MNDBSpecialColumns(ODBCStmt *stmt,
                        "SELECT c.\"name\", c.\"type\", c.\"type_digits\", 
c.\"type_scale\", c.\"number\" "
                        "FROM tableids t "
                        "JOIN \"tmp\".\"_columns\" c ON t.\"id\" = 
c.\"table_id\" "
-                       "WHERE t.\"id\" NOT IN (SELECT \"table_id\" FROM 
\"tmp\".\"keys\" WHERE \"type\" in (0, 1))",
+                       "WHERE t.\"id\" NOT IN (SELECT \"table_id\" FROM 
\"tmp\".\"keys\" WHERE \"type\" IN (0, 1, 3))",
                        querylen - pos);
                        /* add an extra selection when SQL_NO_NULLS is 
requested */
                        if (Nullable == SQL_NO_NULLS) {
diff --git a/clients/odbc/driver/SQLStatistics.c 
b/clients/odbc/driver/SQLStatistics.c
--- a/clients/odbc/driver/SQLStatistics.c
+++ b/clients/odbc/driver/SQLStatistics.c
@@ -212,7 +212,7 @@ MNDBStatistics(ODBCStmt *stmt,
                "join sys.schemas s on t.schema_id = s.id "
                "join sys.objects kc on i.id = kc.id "
                "join sys._columns c on (t.id = c.table_id and kc.name = 
c.name) "
-               "%sjoin sys.keys k on (k.name = i.name and i.table_id = 
k.table_id and k.type in (0, 1)) "
+               "%sjoin sys.keys k on (k.name = i.name and i.table_id = 
k.table_id and k.type in (0, 1, 3)) "
                "join sys.storage() st on (st.schema = s.name and st.table = 
t.name and st.column = c.name) "
                "where 1=1",
                SQL_INDEX_HASHED, SQL_INDEX_OTHER,
@@ -261,7 +261,7 @@ MNDBStatistics(ODBCStmt *stmt,
                        "join sys.schemas s on t.schema_id = s.id "
                        "join tmp.objects kc on i.id = kc.id "
                        "join tmp._columns c on (t.id = c.table_id and kc.name 
= c.name) "
-                       "%sjoin tmp.keys k on (k.name = i.name and i.table_id = 
k.table_id and k.type in (0, 1))"
+                       "%sjoin tmp.keys k on (k.name = i.name and i.table_id = 
k.table_id and k.type in (0, 1, 3))"
                        "left outer join sys.storage() st on (st.schema = 
s.name and st.table = t.name and st.column = c.name) "
                        "where 1=1",
                        SQL_INDEX_HASHED, SQL_INDEX_OTHER,
@@ -284,7 +284,6 @@ MNDBStatistics(ODBCStmt *stmt,
                        pos += snprintf(query + pos, querylen - pos, " and %s", 
tab);
                }
        }
-       assert(pos < (querylen - 74));
 
        if (sch)
                free(sch);
diff --git a/sql/scripts/10_sys_schema_extension.sql 
b/sql/scripts/10_sys_schema_extension.sql
--- a/sql/scripts/10_sys_schema_extension.sql
+++ b/sql/scripts/10_sys_schema_extension.sql
@@ -399,7 +399,7 @@ CREATE TABLE sys.key_types (
     key_type_name VARCHAR(35) NOT NULL UNIQUE);
 
 -- Values taken from sql/include/sql_catalog.h see typedef enum
--- key_type: pkey, ukey, fkey.
+-- key_type: pkey, ukey, fkey, unndkey, ckey.
 INSERT INTO sys.key_types (key_type_id, key_type_name) VALUES
   (0, 'Primary Key'),
   (1, 'Unique Key'),
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -408,23 +408,30 @@ load_key(sql_trans *tr, sql_table *t, re
        nk->columns = list_create((fdestroy) &kc_destroy);
        nk->t = t;
 
-       if (ktype == ckey) {
+       switch (ktype) {
+       case ckey:
                str ch = (char*)store->table_api.table_fetch_value(rt_keys, 
find_sql_column(keys, "check"));
                if (!strNil(ch))
                        nk->check =_STRDUP(ch);
-       }
-       else if (ktype == ukey || ktype == pkey) {
+               break;
+       case ukey:
+       case unndkey:
+       case pkey: {
                sql_ukey *uk = (sql_ukey *) nk;
 
                if (ktype == pkey)
                        t->pkey = uk;
-       } else {
+               break;
+       }
+       case fkey: {
                sql_fkey *fk = (sql_fkey *) nk;
                int action = *(int*)store->table_api.table_fetch_value(rt_keys, 
find_sql_column(keys, "action"));
                fk->on_delete = action & 255;
                fk->on_update = (action>>8) & 255;
 
                fk->rkey = *(sqlid*)store->table_api.table_fetch_value(rt_keys, 
find_sql_column(keys, "rkey"));
+               break;
+       }
        }
 
        for ( ; rt_keycols->cur_row < rt_keycols->nr_rows; 
rt_keycols->cur_row++) {
diff --git a/sql/test/emptydb/Tests/check.stable.out.int128 
b/sql/test/emptydb/Tests/check.stable.out.int128
--- a/sql/test/emptydb/Tests/check.stable.out.int128
+++ b/sql/test/emptydb/Tests/check.stable.out.int128
@@ -5597,7 +5597,7 @@ select 'null in fkeys.delete_action', de
 % .%1, .key_types # table_name
 % %1,  key_type_name # name
 % varchar,     varchar # type
-% 13,  11 # length
+% 13,  34 # length
 [ "sys.key_types",     "Check Constraint"      ]
 [ "sys.key_types",     "Foreign Key"   ]
 [ "sys.key_types",     "Primary Key"   ]
@@ -6057,26 +6057,26 @@ select 'null in fkeys.delete_action', de
 % %237,        id,     id,     name,   schema_id,      table_id,       
table_name,     obj_type,       sys_table,      system # name
 % varchar,     int,    int,    varchar,        int,    int,    varchar,        
varchar,        varchar,        boolean # type
 % 0,   1,      1,      0,      1,      1,      0,      0,      0,      5 # 
length
-% .%5, sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys # table_name
-% %5,  id,     id,     table_id,       type,   name,   rkey,   action # name
-% varchar,     int,    int,    int,    int,    varchar,        int,    int # 
type
-% 0,   1,      1,      1,      1,      0,      1,      1 # length
-% .%5, sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys # table_name
-% %5,  table_id,       id,     table_id,       type,   name,   rkey,   action 
# name
-% varchar,     int,    int,    int,    int,    varchar,        int,    int # 
type
-% 0,   1,      1,      1,      1,      0,      1,      1 # length
-% .%13,        sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys # table_name
-% %13, table_id,       id,     table_id,       type,   name,   rkey,   action 
# name
-% varchar,     int,    int,    int,    int,    varchar,        int,    int # 
type
-% 0,   1,      1,      1,      1,      0,      1,      1 # length
-% .%5, sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys # table_name
-% %5,  type,   id,     table_id,       type,   name,   rkey,   action # name
-% varchar,     int,    int,    int,    int,    varchar,        int,    int # 
type
-% 0,   1,      1,      1,      1,      0,      1,      1 # length
-% .%5, sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys # table_name
-% %5,  rkey,   id,     table_id,       type,   name,   rkey,   action # name
-% varchar,     int,    int,    int,    int,    varchar,        int,    int # 
type
-% 0,   1,      1,      1,      1,      0,      1,      1 # length
+% .%5, sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys,       sys.keys # table_name
+% %5,  id,     id,     table_id,       type,   name,   rkey,   action, check # 
name
+% varchar,     int,    int,    int,    int,    varchar,        int,    int,    
varchar # type
+% 0,   1,      1,      1,      1,      0,      1,      1,      0 # length
+% .%5, sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys,       sys.keys # table_name
+% %5,  table_id,       id,     table_id,       type,   name,   rkey,   action, 
check # name
+% varchar,     int,    int,    int,    int,    varchar,        int,    int,    
varchar # type
+% 0,   1,      1,      1,      1,      0,      1,      1,      0 # length
+% .%13,        sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys,       sys.keys # table_name
+% %13, table_id,       id,     table_id,       type,   name,   rkey,   action, 
check # name
+% varchar,     int,    int,    int,    int,    varchar,        int,    int,    
varchar # type
+% 0,   1,      1,      1,      1,      0,      1,      1,      0 # length
+% .%5, sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys,       sys.keys # table_name
+% %5,  type,   id,     table_id,       type,   name,   rkey,   action, check # 
name
+% varchar,     int,    int,    int,    int,    varchar,        int,    int,    
varchar # type
+% 0,   1,      1,      1,      1,      0,      1,      1,      0 # length
+% .%5, sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys,       sys.keys # table_name
+% %5,  rkey,   id,     table_id,       type,   name,   rkey,   action, check # 
name
+% varchar,     int,    int,    int,    int,    varchar,        int,    int,    
varchar # type
+% 0,   1,      1,      1,      1,      0,      1,      1,      0 # length
 % .%5, sys.idxs,       sys.idxs,       sys.idxs,       sys.idxs,       
sys.idxs # table_name
 % %5,  id,     id,     table_id,       type,   name # name
 % varchar,     int,    int,    int,    int,    varchar # type
@@ -6353,14 +6353,14 @@ select 'null in fkeys.delete_action', de
 % %5,  partition_id,   table_id,       partition_id,   value # name
 % varchar,     int,    int,    int,    varchar # type
 % 0,   1,      1,      1,      0 # length
-% .%10,        .%4,    .keys,  .keys,  .keys,  .keys,  .keys,  .keys # 
table_name
-% %10, %4,     id,     table_id,       type,   name,   rkey,   action # name
-% varchar,     smallint,       int,    int,    int,    varchar,        int,    
int # type
-% 0,   1,      1,      1,      1,      0,      1,      1 # length
-% .%10,        .%4,    .keys,  .keys,  .keys,  .keys,  .keys,  .keys # 
table_name
-% %10, %4,     id,     table_id,       type,   name,   rkey,   action # name
-% varchar,     smallint,       int,    int,    int,    varchar,        int,    
int # type
-% 0,   1,      1,      1,      1,      0,      1,      1 # length
+% .%10,        .%4,    .keys,  .keys,  .keys,  .keys,  .keys,  .keys,  .keys # 
table_name
+% %10, %4,     id,     table_id,       type,   name,   rkey,   action, check # 
name
+% varchar,     smallint,       int,    int,    int,    varchar,        int,    
int,    varchar # type
+% 0,   1,      1,      1,      1,      0,      1,      1,      0 # length
+% .%10,        .%4,    .keys,  .keys,  .keys,  .keys,  .keys,  .keys,  .keys # 
table_name
+% %10, %4,     id,     table_id,       type,   name,   rkey,   action, check # 
name
+% varchar,     smallint,       int,    int,    int,    varchar,        int,    
int,    varchar # type
+% 0,   1,      1,      1,      1,      0,      1,      1,      0 # length
 % .%30,        .fkeys, .fkeys, .fkeys, .fkeys, .fkeys, .fkeys, .fkeys, .fkeys, 
.fkeys, .fkeys, .fkeys, .fkeys, .fkeys, .fkeys # table_name
 % %30, id,     table_id,       type,   name,   rkey,   id,     table_id,       
type,   name,   rkey,   update_action_id,       update_action,  
delete_action_id,       delete_action # name
 % varchar,     int,    int,    int,    varchar,        int,    int,    int,    
int,    varchar,        int,    smallint,       varchar,        smallint,       
varchar # type
@@ -6597,30 +6597,30 @@ select 'null in fkeys.delete_action', de
 % %1,  key_type_name,  key_type_id,    key_type_name # name
 % varchar,     varchar,        smallint,       varchar # type
 % 0,   0,      1,      0 # length
-% .%1, sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys # table_name
-% %1,  id,     id,     table_id,       type,   name,   rkey,   action # name
-% varchar,     int,    int,    int,    int,    varchar,        int,    int # 
type
-% 0,   1,      1,      1,      1,      0,      1,      1 # length
-% .%1, sys.keys,       sys.keys,       sys.keys,       sys.keys,       
sys.keys,       sys.keys,       sys.keys # table_name
-% %1,  table_id,       id,     table_id,       type,   name,   rkey,   action 
# name
-% varchar,     int,    int,    int,    int,    varchar,        int,    int # 
type
-% 0,   1,      1,      1,      1,      0,      1,      1 # length
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to