Changeset: d1b8bdfa82fd for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d1b8bdfa82fd
Modified Files:
gdk/gdk_bbp.c
Branch: multi-cachelock
Log Message:
merged with default
diffs (truncated from 5300 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
@@ -48789,11 +48789,6 @@ command remote.connect(X_0:str, X_1:str,
RMTconnectScen;
returns a newly created connection for uri, using user name, password and
scenario
remote
-connect
-pattern remote.connect(X_0:str, X_1:str):str
-RMTconnectTable;
-return a newly created connection for a table. username and password should be
in the vault
-remote
disconnect
command remote.disconnect(X_0:str):void
RMTdisconnect;
@@ -49234,6 +49229,11 @@ command sql.date_trunc(X_0:str, X_1:time
date_trunc;
Truncate a timestamp to (millennium,
century,decade,year,quarter,month,week,day,hour,minute,second,
milliseconds,microseconds)
sql
+decypher
+pattern sql.decypher(X_0:str):str
+SQLdecypher;
+Return decyphered password
+sql
delete
unsafe pattern sql.delete(X_0:int, X_1:str, X_2:str, X_3:any):int
mvc_delete_wrap;
@@ -49724,11 +49724,6 @@ pattern sql.row_number(X_0:any_1, X_1:bi
SQLrow_number;
return the row_numer-ed groups
sql
-rt_credentials
-pattern sql.rt_credentials(X_0:str) (X_1:bat[:str], X_2:bat[:str],
X_3:bat[:str])
-sql_rt_credentials_wrap;
-Return the remote table credentials for the given table
-sql
sessions
pattern sql.sessions() (X_0:bat[:int], X_1:bat[:str], X_2:bat[:timestamp],
X_3:bat[:timestamp], X_4:bat[:str], X_5:bat[:int], X_6:bat[:int],
X_7:bat[:int], X_8:bat[:int])
sql_sessions_wrap;
@@ -50259,6 +50254,11 @@ pattern sqlcatalog.create_table(X_0:str,
SQLcreate_table;
Catalog operation create_table
sqlcatalog
+create_table
+pattern sqlcatalog.create_table(X_0:str, X_1:str, X_2:ptr, X_3:int, X_4:str,
X_5:str):void
+SQLcreate_table;
+Catalog operation create_table
+sqlcatalog
create_trigger
pattern sqlcatalog.create_trigger(X_0:str, X_1:str, X_2:str, X_3:int, X_4:int,
X_5:int, X_6:str, X_7:str, X_8:str, X_9:str, X_10:int):void
SQLcreate_trigger;
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
@@ -37219,11 +37219,6 @@ command remote.connect(X_0:str, X_1:str,
RMTconnectScen;
returns a newly created connection for uri, using user name, password and
scenario
remote
-connect
-pattern remote.connect(X_0:str, X_1:str):str
-RMTconnectTable;
-return a newly created connection for a table. username and password should be
in the vault
-remote
disconnect
command remote.disconnect(X_0:str):void
RMTdisconnect;
@@ -37639,6 +37634,11 @@ command sql.date_trunc(X_0:str, X_1:time
date_trunc;
Truncate a timestamp to (millennium,
century,decade,year,quarter,month,week,day,hour,minute,second,
milliseconds,microseconds)
sql
+decypher
+pattern sql.decypher(X_0:str):str
+SQLdecypher;
+Return decyphered password
+sql
delete
unsafe pattern sql.delete(X_0:int, X_1:str, X_2:str, X_3:any):int
mvc_delete_wrap;
@@ -38104,11 +38104,6 @@ pattern sql.row_number(X_0:any_1, X_1:bi
SQLrow_number;
return the row_numer-ed groups
sql
-rt_credentials
-pattern sql.rt_credentials(X_0:str) (X_1:bat[:str], X_2:bat[:str],
X_3:bat[:str])
-sql_rt_credentials_wrap;
-Return the remote table credentials for the given table
-sql
sessions
pattern sql.sessions() (X_0:bat[:int], X_1:bat[:str], X_2:bat[:timestamp],
X_3:bat[:timestamp], X_4:bat[:str], X_5:bat[:int], X_6:bat[:int],
X_7:bat[:int], X_8:bat[:int])
sql_sessions_wrap;
@@ -38584,6 +38579,11 @@ pattern sqlcatalog.create_table(X_0:str,
SQLcreate_table;
Catalog operation create_table
sqlcatalog
+create_table
+pattern sqlcatalog.create_table(X_0:str, X_1:str, X_2:ptr, X_3:int, X_4:str,
X_5:str):void
+SQLcreate_table;
+Catalog operation create_table
+sqlcatalog
create_trigger
pattern sqlcatalog.create_trigger(X_0:str, X_1:str, X_2:str, X_3:int, X_4:int,
X_5:int, X_6:str, X_7:str, X_8:str, X_9:str, X_10:int):void
SQLcreate_trigger;
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
@@ -721,18 +721,8 @@ const char *wsaerror(int);
# monetdb5
str AUTHGeneratePasswordHash(str *res, const char *value);
-str AUTHRegisterGetPasswordHandler(get_user_password_handler callback);
-str AUTHRegisterGetUserNameHandler(get_user_name_handler callback);
-str AUTHRegisterGetUserOIDHandler(get_user_oid_handler callback);
-str AUTHaddRemoteTableCredentials(const char *local_table, const char
*localuser, const char *uri, const char *remoteuser, const char *pass, bool
pw_encrypted);
-str AUTHcheckCredentials(oid *ret, Client c, const char *user, const char
*passwd, const char *challenge, const char *algo);
str AUTHcypherValue(str *ret, const char *value);
str AUTHdecypherValue(str *ret, const char *value);
-str AUTHdeleteRemoteTableCredentials(const char *local_table);
-str AUTHgetPasswordHash(str *ret, Client c, const char *username);
-str AUTHgetRemoteTableCredentials(const char *local_table, str *uri, str
*username, str *password);
-str AUTHgetUsername(str *ret, Client c);
-str AUTHinitTables(void);
str AUTHrequireAdmin(Client c);
str AUTHunlockVault(const char *password);
str AUTHverifyPassword(const char *passwd);
@@ -1366,8 +1356,8 @@ str SQLengineIntern(Client c, backend *b
str SQLescapeString(str s);
str SQLexit(Client c);
str SQLexitClient(Client c);
-str SQLinitClient(Client c);
-str SQLinitClientFromMAL(Client c);
+str SQLinitClient(Client c, const char *passwd, const char *challenge, const
char *algo);
+str SQLinitClientFromMAL(Client c, const char *passwd, const char *challenge,
const char *algo);
str SQLparser(Client c);
str SQLreader(Client c);
str SQLresetClient(Client c);
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -409,6 +409,47 @@ bailout:
return false;
}
+static bool
+has_remote_user_info_table(Mapi mid)
+{
+ MapiHdl hdl;
+ bool ret;
+ static int answer = -1;
+
+ if (answer >= 0)
+ return answer;
+
+ if ((hdl = mapi_query(mid,
+ "select id from sys._tables"
+ " where name = 'remote_user_info'"
+ " and schema_id = ("
+ "select id from sys.schemas"
+ " where name = 'sys')")) == NULL ||
+ mapi_error(mid))
+ goto bailout;
+ ret = mapi_get_row_count(hdl) == 1;
+ while ((mapi_fetch_row(hdl)) != 0) {
+ if (mapi_error(mid))
+ goto bailout;
+ }
+ if (mapi_error(mid))
+ goto bailout;
+ mapi_close_handle(hdl);
+ answer = ret;
+ return ret;
+
+bailout:
+ if (hdl) {
+ if (mapi_result_error(hdl))
+ mapi_explain_result(hdl, stderr);
+ else
+ mapi_explain_query(hdl, stderr);
+ mapi_close_handle(hdl);
+ } else
+ mapi_explain(mid, stderr);
+ return false;
+}
+
static int
dump_foreign_keys(Mapi mid, const char *schema, const char *tname, const char
*tid, stream *toConsole)
{
@@ -1320,10 +1361,17 @@ describe_table(Mapi mid, const char *sch
} else if (type == 5) { /* remote table */
char *rt_user = NULL;
char *rt_hash = NULL;
- snprintf(query, maxquerylen,
- "SELECT username, hash "
- "FROM sys.remote_table_credentials('%s.%s')",
- schema, tname);
+ if (has_remote_user_info_table(mid)) {
+ snprintf(query, maxquerylen,
+ "SELECT username,
sys.decypher(password) "
+ "FROM sys.remote_user_info where
table_id = (select t.id from sys._tables t, sys.schemas s where "
+ "t.schema_id = s.id and s.name = '%s'
and t.name = '%s')", schema, tname);
+ } else {
+ snprintf(query, maxquerylen,
+ "SELECT username, hash "
+ "FROM
sys.remote_table_credentials('%s.%s')",
+ schema, tname);
+ }
if ((hdl = mapi_query(mid, query)) == NULL ||
mapi_error(mid))
goto bailout;
cnt = 0;
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -737,9 +737,9 @@ BATdestroy(BAT *b)
GDKfree(b->theap);
}
if (b->oldtail) {
+ ATOMIC_AND(&b->oldtail->refs, ~DELAYEDREMOVE);
/* the bat has not been committed, so we cannot remove
* the old tail file */
- ATOMIC_AND(&b->oldtail->refs, ~DELAYEDREMOVE);
HEAPdecref(b->oldtail, false);
b->oldtail = NULL;
}
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -3252,6 +3252,11 @@ BBPdestroy(BAT *b)
if (vtp != 0)
BBPrelease(vtp);
}
+ if (b->oldtail) {
+ ATOMIC_AND(&b->oldtail->refs, ~DELAYEDREMOVE);
+ HEAPdecref(b->oldtail, true);
+ b->oldtail = NULL;
+ }
BATdelete(b);
BBPclear(b->batCacheid); /* if destroyed; de-register from BBP */
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -571,36 +571,38 @@ log_read_updates(logger *lg, trans *tr,
GDKfree(hv);
}
- if (res == LOG_OK && tr_grow(tr) == GDK_SUCCEED) {
- tr->changes[tr->nr].type = l->flag;
- if (l->flag==LOG_UPDATE_BULK && offset == -1) {
- assert(cands); // bat r is part of a group of
bats logged together.
- struct canditer ci;
- canditer_init(&ci, NULL, *cands);
- const oid first = canditer_peek(&ci);
- const oid last = canditer_last(&ci);
- offset = (lng) first;
- pnr = (lng) (last - first) + 1;
- if (!lg->flushing ) {
- assert(uid == NULL);
- uid = *cands;
- BBPfix((*cands)->batCacheid);
- tr->changes[tr->nr].type = LOG_UPDATE;
+ if (res == LOG_OK) {
+ if (tr_grow(tr) == GDK_SUCCEED) {
+ tr->changes[tr->nr].type = l->flag;
+ if (l->flag==LOG_UPDATE_BULK && offset == -1) {
+ assert(cands); // bat r is part of a
group of bats logged together.
+ struct canditer ci;
+ canditer_init(&ci, NULL, *cands);
+ const oid first = canditer_peek(&ci);
+ const oid last = canditer_last(&ci);
+ offset = (lng) first;
+ pnr = (lng) (last - first) + 1;
+ if (!lg->flushing ) {
+ assert(uid == NULL);
+ uid = *cands;
+ BBPfix((*cands)->batCacheid);
+ tr->changes[tr->nr].type =
LOG_UPDATE;
+ }
}
- }
- if (l->flag==LOG_UPDATE_CONST) {
- assert(!cands); // TODO: This might change in
the future.
- tr->changes[tr->nr].type = LOG_UPDATE_BULK;
+ if (l->flag==LOG_UPDATE_CONST) {
+ assert(!cands); // TODO: This might
change in the future.
+ tr->changes[tr->nr].type =
LOG_UPDATE_BULK;
+ }
+ tr->changes[tr->nr].nr = pnr;
+ tr->changes[tr->nr].tt = tpe;
+ tr->changes[tr->nr].cid = id;
+ tr->changes[tr->nr].offset = offset;
+ tr->changes[tr->nr].b = r;
+ tr->changes[tr->nr].uid = uid;
+ tr->nr++;
+ } else {
+ res = LOG_ERR;
}
- tr->changes[tr->nr].nr = pnr;
- tr->changes[tr->nr].tt = tpe;
- tr->changes[tr->nr].cid = id;
- tr->changes[tr->nr].offset = offset;
- tr->changes[tr->nr].b = r;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]