summaryrefslogtreecommitdiff
path: root/src/cursor
diff options
context:
space:
mode:
authorDavid Hows <david.hows@mongodb.com>2017-01-23 16:05:51 +1100
committerDavid Hows <david.hows@mongodb.com>2017-01-23 16:06:16 +1100
commit48a3cbc17fa902528217287fd075c87efb44aebc (patch)
treefff4f814ab9fbd7f3eb4c45684f581a5da1c058c /src/cursor
parent8d2324943364286056ae399043f70b8a937de312 (diff)
parentbf8de9767982da9ae0f1542f3744c8aa8544fb82 (diff)
downloadmongodb-3.5.2.tar.gz
Merge branch 'develop' into mongodb-3.6mongodb-3.5.3mongodb-3.5.2
Diffstat (limited to 'src/cursor')
-rw-r--r--src/cursor/cur_backup.c16
-rw-r--r--src/cursor/cur_index.c4
-rw-r--r--src/cursor/cur_json.c16
-rw-r--r--src/cursor/cur_log.c4
-rw-r--r--src/cursor/cur_std.c1
-rw-r--r--src/cursor/cur_table.c2
6 files changed, 26 insertions, 17 deletions
diff --git a/src/cursor/cur_backup.c b/src/cursor/cur_backup.c
index 456aa2e0f02..08b15e6ca5e 100644
--- a/src/cursor/cur_backup.c
+++ b/src/cursor/cur_backup.c
@@ -230,10 +230,10 @@ __backup_start(
* We are holding the checkpoint and schema locks so schema operations
* will not see the backup file list until it is complete and valid.
*/
- __wt_writelock(session, conn->hot_backup_lock);
+ __wt_writelock(session, &conn->hot_backup_lock);
conn->hot_backup = true;
conn->hot_backup_list = NULL;
- __wt_writeunlock(session, conn->hot_backup_lock);
+ __wt_writeunlock(session, &conn->hot_backup_lock);
/* We're the lock holder, we own cleanup. */
F_SET(cb, WT_CURBACKUP_LOCKER);
@@ -297,9 +297,9 @@ err: /* Close the hot backup file. */
if (ret == 0) {
WT_ASSERT(session, dest != NULL);
WT_TRET(__wt_fs_rename(session, WT_BACKUP_TMP, dest, false));
- __wt_writelock(session, conn->hot_backup_lock);
+ __wt_writelock(session, &conn->hot_backup_lock);
conn->hot_backup_list = cb->list;
- __wt_writeunlock(session, conn->hot_backup_lock);
+ __wt_writeunlock(session, &conn->hot_backup_lock);
}
return (ret);
@@ -319,9 +319,9 @@ __backup_stop(WT_SESSION_IMPL *session, WT_CURSOR_BACKUP *cb)
conn = S2C(session);
/* Release all btree names held by the backup. */
- __wt_writelock(session, conn->hot_backup_lock);
+ __wt_writelock(session, &conn->hot_backup_lock);
conn->hot_backup_list = NULL;
- __wt_writeunlock(session, conn->hot_backup_lock);
+ __wt_writeunlock(session, &conn->hot_backup_lock);
if (cb->list != NULL) {
for (i = 0; cb->list[i] != NULL; ++i)
__wt_free(session, cb->list[i]);
@@ -332,9 +332,9 @@ __backup_stop(WT_SESSION_IMPL *session, WT_CURSOR_BACKUP *cb)
WT_TRET(__wt_backup_file_remove(session));
/* Checkpoint deletion can proceed, as can the next hot backup. */
- __wt_writelock(session, conn->hot_backup_lock);
+ __wt_writelock(session, &conn->hot_backup_lock);
conn->hot_backup = false;
- __wt_writeunlock(session, conn->hot_backup_lock);
+ __wt_writeunlock(session, &conn->hot_backup_lock);
return (ret);
}
diff --git a/src/cursor/cur_index.c b/src/cursor/cur_index.c
index 0ab992bc88c..4786b0524bc 100644
--- a/src/cursor/cur_index.c
+++ b/src/cursor/cur_index.c
@@ -520,8 +520,8 @@ __wt_curindex_open(WT_SESSION_IMPL *session,
WT_ERR(__curindex_open_colgroups(session, cindex, cfg));
if (F_ISSET(cursor, WT_CURSTD_DUMP_JSON))
- __wt_json_column_init(
- cursor, table->key_format, &idx->colconf, &table->colconf);
+ __wt_json_column_init(cursor, uri, table->key_format,
+ &idx->colconf, &table->colconf);
if (0) {
err: WT_TRET(__curindex_close(cursor));
diff --git a/src/cursor/cur_json.c b/src/cursor/cur_json.c
index a0a3ffdd974..5870d14273e 100644
--- a/src/cursor/cur_json.c
+++ b/src/cursor/cur_json.c
@@ -369,11 +369,11 @@ __wt_json_unpack_char(u_char ch, u_char *buf, size_t bufsz, bool force_unicode)
* of column names.
*/
void
-__wt_json_column_init(WT_CURSOR *cursor, const char *keyformat,
+__wt_json_column_init(WT_CURSOR *cursor, const char *uri, const char *keyformat,
const WT_CONFIG_ITEM *idxconf, const WT_CONFIG_ITEM *colconf)
{
WT_CURSOR_JSON *json;
- const char *p, *end, *beginkey;
+ const char *beginkey, *end, *lparen, *p;
uint32_t keycnt, nkeys;
json = (WT_CURSOR_JSON *)cursor->json_private;
@@ -400,8 +400,16 @@ __wt_json_column_init(WT_CURSOR *cursor, const char *keyformat,
keycnt++;
p++;
}
- json->value_names.str = p;
- json->value_names.len = WT_PTRDIFF(end, p);
+ if ((lparen = strchr(uri, '(')) != NULL) {
+ /* This cursor is a projection. */
+ json->value_names.str = lparen;
+ json->value_names.len = strlen(lparen) - 1;
+ WT_ASSERT((WT_SESSION_IMPL *)cursor->session,
+ json->value_names.str[json->value_names.len] == ')');
+ } else {
+ json->value_names.str = p;
+ json->value_names.len = WT_PTRDIFF(end, p);
+ }
if (idxconf == NULL) {
if (p > beginkey)
p--;
diff --git a/src/cursor/cur_log.c b/src/cursor/cur_log.c
index 3ee6554b3c0..e5b56aa406f 100644
--- a/src/cursor/cur_log.c
+++ b/src/cursor/cur_log.c
@@ -305,7 +305,7 @@ __curlog_close(WT_CURSOR *cursor)
WT_ASSERT(session, FLD_ISSET(conn->log_flags, WT_CONN_LOG_ENABLED));
if (F_ISSET(cl, WT_CURLOG_ARCHIVE_LOCK))
- __wt_readunlock(session, conn->log->log_archive_lock);
+ __wt_readunlock(session, &conn->log->log_archive_lock);
__wt_free(session, cl->cur_lsn);
__wt_free(session, cl->next_lsn);
@@ -383,7 +383,7 @@ __wt_curlog_open(WT_SESSION_IMPL *session,
WT_ERR(__wt_log_force_write(session, 1, NULL));
/* Log cursors block archiving. */
- __wt_readlock(session, log->log_archive_lock);
+ __wt_readlock(session, &log->log_archive_lock);
F_SET(cl, WT_CURLOG_ARCHIVE_LOCK);
if (0) {
diff --git a/src/cursor/cur_std.c b/src/cursor/cur_std.c
index 6264de89df9..7ace6d49cf0 100644
--- a/src/cursor/cur_std.c
+++ b/src/cursor/cur_std.c
@@ -144,6 +144,7 @@ __wt_cursor_set_notsup(WT_CURSOR *cursor)
*/
int
__wt_cursor_kv_not_set(WT_CURSOR *cursor, bool key)
+ WT_GCC_FUNC_ATTRIBUTE((cold))
{
WT_SESSION_IMPL *session;
diff --git a/src/cursor/cur_table.c b/src/cursor/cur_table.c
index fae7667e44f..76f7fc5865f 100644
--- a/src/cursor/cur_table.c
+++ b/src/cursor/cur_table.c
@@ -951,7 +951,7 @@ __wt_curtable_open(WT_SESSION_IMPL *session,
if (F_ISSET(cursor, WT_CURSTD_DUMP_JSON))
__wt_json_column_init(
- cursor, table->key_format, NULL, &table->colconf);
+ cursor, uri, table->key_format, NULL, &table->colconf);
/*
* Open the colgroup cursors immediately: we're going to need them for