internal static T Expect <T>(IBackendMessage msg, NpgsqlConnector connector)
        {
            if (msg is T asT)
            {
                return(asT);
            }

            connector.Break();
            throw new NpgsqlException($"Received backend message {msg.Code} while expecting {typeof(T).Name}. Please file a bug.");
        }
Beispiel #2
0
        bool ProcessMessageForUnprepared(IBackendMessage msg, CommandBehavior behavior)
        {
            Contract.Requires(!IsPrepared);

            switch (msg.Code)
            {
            case BackendMessageCode.CompletedResponse:  // e.g. begin transaction
            case BackendMessageCode.ParseComplete:
            case BackendMessageCode.ParameterDescription:
                return(false);

            case BackendMessageCode.RowDescription:
                Contract.Assert(_queryIndex < _queries.Count);
                var description = (RowDescriptionMessage)msg;
                FixupRowDescription(description, _queryIndex == 0);
                _queries[_queryIndex].Description = description;
                if ((behavior & CommandBehavior.SchemaOnly) != 0)
                {
                    _queryIndex++;
                }
                return(false);

            case BackendMessageCode.NoData:
                Contract.Assert(_queryIndex < _queries.Count);
                _queries[_queryIndex].Description = null;
                return(false);

            case BackendMessageCode.BindComplete:
                Contract.Assume((behavior & CommandBehavior.SchemaOnly) == 0);
                return(++_queryIndex == _queries.Count);

            case BackendMessageCode.ReadyForQuery:
                Contract.Assume((behavior & CommandBehavior.SchemaOnly) != 0);
                return(true);  // End of a SchemaOnly command

            default:
                throw _connector.UnexpectedMessageReceived(msg.Code);
            }
        }
Beispiel #3
0
        bool ProcessMessageForUnprepared(IBackendMessage msg, CommandBehavior behavior)
        {
            Contract.Requires(!IsPrepared);

            switch (msg.Code) {
            case BackendMessageCode.CompletedResponse:  // e.g. begin transaction
            case BackendMessageCode.ParseComplete:
            case BackendMessageCode.ParameterDescription:
                return false;
            case BackendMessageCode.RowDescription:
                Contract.Assert(_queryIndex < _queries.Count);
                var description = (RowDescriptionMessage)msg;
                FixupRowDescription(description, _queryIndex == 0);
                _queries[_queryIndex].Description = description;
                if ((behavior & CommandBehavior.SchemaOnly) != 0) {
                    _queryIndex++;
                }
                return false;
            case BackendMessageCode.NoData:
                Contract.Assert(_queryIndex < _queries.Count);
                _queries[_queryIndex].Description = null;
                return false;
            case BackendMessageCode.BindComplete:
                Contract.Assume((behavior & CommandBehavior.SchemaOnly) == 0);
                return ++_queryIndex == _queries.Count;
            case BackendMessageCode.ReadyForQuery:
                Contract.Assume((behavior & CommandBehavior.SchemaOnly) != 0);
                return true;  // End of a SchemaOnly command
            default:
                throw _connector.UnexpectedMessageReceived(msg.Code);
            }
        }
Beispiel #4
0
 internal static T Expect <T>(IBackendMessage msg)
 => msg is T asT