mirror of
				https://github.com/isar/libmdbx.git
				synced 2025-10-31 15:38:57 +08:00 
			
		
		
		
	mdbx: упрощение выхода по not-found пути из cursor_seek().
				
					
				
			This commit is contained in:
		| @@ -638,7 +638,7 @@ static __always_inline int cursor_step(const bool inner, const bool forward, MDB | |||||||
|       inner_gone(mc); |       inner_gone(mc); | ||||||
|   } else { |   } else { | ||||||
|     if (mc->flags & z_hollow) { |     if (mc->flags & z_hollow) { | ||||||
|       cASSERT(mc, !inner_pointed(mc)); |       cASSERT(mc, !inner_pointed(mc) || inner_hollow(mc)); | ||||||
|       return MDBX_ENODATA; |       return MDBX_ENODATA; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -1818,8 +1818,9 @@ __hot csr_t cursor_seek(MDBX_cursor *mc, MDBX_val *key, MDBX_val *data, MDBX_cur | |||||||
|          * Поэтому переводим курсор в неустановленное состояние, но без сброса |          * Поэтому переводим курсор в неустановленное состояние, но без сброса | ||||||
|          * top, что позволяет работать fastpath при последующем поиске по дереву |          * top, что позволяет работать fastpath при последующем поиске по дереву | ||||||
|          * страниц. */ |          * страниц. */ | ||||||
|         mc->flags = z_hollow | (mc->flags & z_clear_mask); |         mc->flags |= z_hollow; | ||||||
|         inner_gone(mc); |         if (inner_pointed(mc)) | ||||||
|  |           mc->subcur->cursor.flags |= z_hollow; | ||||||
|         ret.err = MDBX_NOTFOUND; |         ret.err = MDBX_NOTFOUND; | ||||||
|         return ret; |         return ret; | ||||||
|       } |       } | ||||||
|   | |||||||
| @@ -151,7 +151,7 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline bool is_hollow(const | |||||||
|     cASSERT(mc, mc->top >= 0); |     cASSERT(mc, mc->top >= 0); | ||||||
|     cASSERT(mc, (mc->flags & z_eof_hard) || mc->ki[mc->top] < page_numkeys(mc->pg[mc->top])); |     cASSERT(mc, (mc->flags & z_eof_hard) || mc->ki[mc->top] < page_numkeys(mc->pg[mc->top])); | ||||||
|   } else if (mc->subcur) |   } else if (mc->subcur) | ||||||
|     cASSERT(mc, is_poor(&mc->subcur->cursor)); |     cASSERT(mc, is_poor(&mc->subcur->cursor) || (is_pointed(mc) && mc->subcur->cursor.flags < 0)); | ||||||
|   return r; |   return r; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user