Пример #1
0
        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);
        }
Пример #2
0
        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);
        }