コード例 #1
0
        //----------------------------------------------------
        bool Parse_ColumnField_Header(MySqlStreamReader reader)
        {
            if (!reader.Ensure(PACKET_HEADER_LENGTH + 1))
            {
                return(_needMoreData = true);
            }
            _currentHeader = reader.ReadPacketHeader();
            byte type = reader.PeekByte();//1

            switch (type)
            {
            case ERROR_CODE:
                _parsingState = PrepareResponseParseState.Error_Content;
                break;

            case EOF_CODE:
                //?
                _parsingState = PrepareResponseParseState.ColumnField_EOF;
                break;

            default:
                _parsingState = PrepareResponseParseState.ColumnField_Content;
                break;
            }
            return(false);
        }
コード例 #2
0
        bool Parse_PrepareOk_Header(MySqlStreamReader reader)
        {
            //this is first step ***
            if (!reader.Ensure(PACKET_HEADER_LENGTH + 1))
            {
                return(_needMoreData = true);
            }
            _currentHeader = reader.ReadPacketHeader();
            byte type = reader.PeekByte();

            switch (type)
            {
            case ERROR_CODE:
                _parsingState = PrepareResponseParseState.Error_Content;
                break;

            case EOF_CODE:
            case OK_CODE:
                _parsingState = PrepareResponseParseState.OkPrepare_Content;
                break;

            default:
                throw new NotSupportedException("Packet type don't match!!");
            }
            return(false);
        }
コード例 #3
0
        //----------------------------------------------------
        bool ParseErrorPacket(MySqlStreamReader reader)
        {
            if (!reader.Ensure(_currentHeader.ContentLength))
            {
                return(_needMoreData = true);
            }
            var errPacket = new ErrPacket(_currentHeader);

            errPacket.ParsePacketContent(reader);
            //
            _finalResult  = new MySqlErrorResult(errPacket);
            _parsingState = PrepareResponseParseState.ShouldEnd;
            reader.Reset();
            return(true);
        }
コード例 #4
0
        bool Parse_ColumnField_Content(MySqlStreamReader reader)
        {
            if (!reader.Ensure(_currentHeader.ContentLength))
            {
                return(_needMoreData = true);
            }
            var field = new FieldPacket(_currentHeader, _isProtocol41);

            field.ParsePacketContent(reader);
            field.FieldIndex = _tableHeader.ColumnCount; //set this before  add to field list
            _tableHeader.AddField(field);
            //back to field header
            _parsingState = PrepareResponseParseState.ColumnField_Header;
            return(false);
        }
コード例 #5
0
        bool Parse_ColumnField_EOF(MySqlStreamReader reader)
        {
            if (!reader.Ensure(_currentHeader.ContentLength))
            {
                return(_needMoreData = true);
            }

            var eofPacket = new EofPacket(_currentHeader, this._isProtocol41);

            eofPacket.ParsePacketContent(reader);
            //
            _finalResult  = new MySqlPrepareResponseResult(_okPrepare, _tableHeader);
            _parsingState = PrepareResponseParseState.ShouldEnd;
            reader.Reset();
            return(true);//finish
        }
コード例 #6
0
        bool Parse_PrepareOk_Content(MySqlStreamReader reader)
        {
            if (!reader.Ensure(_currentHeader.ContentLength))
            {
                return(_needMoreData = true);
            }
            var okPrepare = new OkPrepareStmtPacket(_currentHeader);

            okPrepare.ParsePacketContent(reader);
            _okPrepare = okPrepare;
            //----------------------------------------------------
            _tableHeader = new TableHeader(true);
            //----------------------------------------------------
            //*** 3 possible way after read prepare ok header***
            if (okPrepare.num_params == 0)
            {
                //if prepare stmt dosn't have binding parameters
                if (okPrepare.num_columns > 0)
                {
                    //has some column
                    _parsingState = PrepareResponseParseState.ColumnField_Header;
                }
                else
                {
                    _finalResult  = new MySqlPrepareResponseResult(okPrepare, _tableHeader);
                    _parsingState = PrepareResponseParseState.ShouldEnd;
                    reader.Reset();
                    return(true); //finish
                }
            }
            else
            {
                _parsingState = PrepareResponseParseState.BindingField_Header;
            }
            return(false);
        }
コード例 #7
0
        bool Parse_BindingField_EOF(MySqlStreamReader reader)
        {
            if (!reader.Ensure(_currentHeader.ContentLength))
            {
                return(_needMoreData = true);
            }

            var eofPacket = new EofPacket(_currentHeader, _isProtocol41);

            eofPacket.ParsePacketContent(reader);

            if (_okPrepare.num_columns > 0)
            {
                _parsingState = PrepareResponseParseState.ColumnField_Header;
                return(false);
            }
            else
            {
                _finalResult  = new MySqlPrepareResponseResult(_okPrepare, _tableHeader);
                _parsingState = PrepareResponseParseState.ShouldEnd;
                reader.Reset();
                return(true);
            }
        }
コード例 #8
0
 //----------------------------------------------------
 bool ParseErrorPacket(MySqlStreamReader reader)
 {
     if (!reader.Ensure(_currentHeader.ContentLength))
     {
         return _needMoreData = true;
     }
     var errPacket = new ErrPacket(_currentHeader);
     errPacket.ParsePacketContent(reader);
     // 
     _finalResult = new MySqlErrorResult(errPacket);
     _parsingState = PrepareResponseParseState.ShouldEnd;
     reader.Reset();
     return true;
 }
コード例 #9
0
        bool Parse_ColumnField_EOF(MySqlStreamReader reader)
        {
            if (!reader.Ensure(_currentHeader.ContentLength))
            {
                return _needMoreData = true;
            }

            var eofPacket = new EofPacket(_currentHeader, this._isProtocol41);
            eofPacket.ParsePacketContent(reader);
            //
            _finalResult = new MySqlPrepareResponseResult(_okPrepare, _tableHeader);
            _parsingState = PrepareResponseParseState.ShouldEnd;
            reader.Reset();
            return true;//finish
        }
コード例 #10
0
 bool Parse_ColumnField_Content(MySqlStreamReader reader)
 {
     if (!reader.Ensure(_currentHeader.ContentLength))
     {
         return _needMoreData = true;
     }
     var field = new FieldPacket(_currentHeader, _isProtocol41);
     field.ParsePacketContent(reader);
     field.FieldIndex = _tableHeader.ColumnCount; //set this before  add to field list
     _tableHeader.AddField(field);
     //back to field header
     _parsingState = PrepareResponseParseState.ColumnField_Header;
     return false;
 }
コード例 #11
0
 //----------------------------------------------------
 bool Parse_ColumnField_Header(MySqlStreamReader reader)
 {
     if (!reader.Ensure(PACKET_HEADER_LENGTH + 1))
     {
         return _needMoreData = true;
     }
     _currentHeader = reader.ReadPacketHeader();
     byte type = reader.PeekByte();//1
     switch (type)
     {
         case ERROR_CODE:
             _parsingState = PrepareResponseParseState.Error_Content;
             break;
         case EOF_CODE:
             //?
             _parsingState = PrepareResponseParseState.ColumnField_EOF;
             break;
         default:
             _parsingState = PrepareResponseParseState.ColumnField_Content;
             break;
     }
     return false;
 }
コード例 #12
0
 bool Parse_PrepareOk_Content(MySqlStreamReader reader)
 {
     if (!reader.Ensure(_currentHeader.ContentLength))
     {
         return _needMoreData = true;
     }
     var okPrepare = new OkPrepareStmtPacket(_currentHeader);
     okPrepare.ParsePacketContent(reader);
     _okPrepare = okPrepare;
     //----------------------------------------------------
     _tableHeader = new TableHeader(true);
     //----------------------------------------------------
     //*** 3 possible way after read prepare ok header***
     if (okPrepare.num_params == 0)
     {
         //if prepare stmt dosn't have binding parameters
         if (okPrepare.num_columns > 0)
         {
             //has some column
             _parsingState = PrepareResponseParseState.ColumnField_Header;
         }
         else
         {
             _finalResult = new MySqlPrepareResponseResult(okPrepare, _tableHeader);
             _parsingState = PrepareResponseParseState.ShouldEnd;
             reader.Reset();
             return true; //finish
         }
     }
     else
     {
         _parsingState = PrepareResponseParseState.BindingField_Header;
     }
     return false;
 }
コード例 #13
0
 bool Parse_PrepareOk_Header(MySqlStreamReader reader)
 {
     //this is first step ***
     if (!reader.Ensure(PACKET_HEADER_LENGTH + 1))
     {
         return _needMoreData = true;
     }
     _currentHeader = reader.ReadPacketHeader();
     byte type = reader.PeekByte();
     switch (type)
     {
         case ERROR_CODE:
             _parsingState = PrepareResponseParseState.Error_Content;
             break;
         case EOF_CODE:
         case OK_CODE:
             _parsingState = PrepareResponseParseState.OkPrepare_Content;
             break;
         default:
             throw new NotSupportedException("Packet type don't match!!");
     }
     return false;
 }