public virtual async Task <IReadOnlyDictionary <string, object> > GetRoutingTable(IConnection connection, string database, string impersonatedUser, Bookmark bookmark) { ValidateImpersonatedUserForVersion(impersonatedUser); connection = connection ?? throw new ProtocolException("Attempting to get a routing table on a null connection"); connection.Mode = AccessMode.Read; string procedure; var parameters = new Dictionary <string, object>(); var bookmarkTracker = new BookmarkTracker(bookmark); var resourceHandler = new ConnectionResourceHandler(connection); var sessionDb = connection.SupportsMultidatabase() ? "system" : null; GetProcedureAndParameters(connection, database, out procedure, out parameters); var query = new Query(procedure, parameters); var result = await RunInAutoCommitTransactionAsync(connection, query, false, bookmarkTracker, resourceHandler, sessionDb, bookmark, null, null).ConfigureAwait(false); var record = await result.SingleAsync(); //Since 4.4 the Routing information will contain a db. Earlier versions need to populate this here as it's not received in the older route response... var finalDictionary = record.Values.ToDictionary(); finalDictionary[RoutingTableDBKey] = database; return((IReadOnlyDictionary <string, object>)finalDictionary); }
public virtual async Task <IReadOnlyDictionary <string, object> > GetRoutingTable(IConnection connection, string database, Bookmark bookmark) { connection = connection ?? throw new ProtocolException("Attempting to get a routing table on a null connection"); string procedure; var parameters = new Dictionary <string, object>(); var bookmarkTracker = new BookmarkTracker(bookmark); var resourceHandler = new ConnectionResourceHandler(connection); var sessionDb = connection.SupportsMultidatabase() ? "system" : null; GetProcedureAndParameters(connection, database, out procedure, out parameters); var query = new Query(procedure, parameters); var result = await RunInAutoCommitTransactionAsync(connection, query, false, bookmarkTracker, resourceHandler, sessionDb, bookmark, null).ConfigureAwait(false); var record = await result.SingleAsync(); return(record.Values); }