Exemplo n.º 1
0
 public void UseConnectionParser()
 {
     //switch from current parser to another
     ParseResult         = null;
     currentPacketParser = connParser;
     _mysqlStreamReader.Reset();
 }
Exemplo n.º 2
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);
        }
Exemplo n.º 3
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
        }
        public override void Parse(MySqlStreamReader reader)
        {
            //reset final result
            _parseResult = null;
            while (!StepParse(reader))
            {
                ;
            }
            //StepParse() return true if
            //1. need more data or
            //2. finish

            reader.ClearReadBuffer();

            if (_needMoreData)
            {
                //at any state if need more buffer
                //then stop parsing and return
                if (_supportPartialRelease)
                {
                    if (_rows != null && _rows.Count > 0)
                    {
                        _parseResult = new MySqlTableResult(_tableHeader, _rows.ToArray())
                        {
                            HasFollower = true
                        };
                    }
                    if (_generateResultMode)
                    {
                        //generate new result
#if DEBUG
                        if (_rows != null)
                        {
                        }
#endif
                        _rows.Clear();
                    }
                }
            }
            else if (_parsingState == ResultPacketState.ShouldEnd)
            {
                //reset
                reader.Reset();
                _parsingState = ResultPacketState.Header_Header;
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// return ***true*** if finish or need more data
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        bool StepParse(MySqlStreamReader reader)
        {
            switch (_parsingState)
            {
            case PrepareResponseParseState.OkPrepare_Header:
                return(Parse_PrepareOk_Header(reader));

            case PrepareResponseParseState.OkPrepare_Content:
                return(Parse_PrepareOk_Content(reader));

            //------------------------------------------------
            case PrepareResponseParseState.BindingField_Header:
                return(Parse_BindingField_Header(reader));

            case PrepareResponseParseState.BindingField_Content:
                return(Parse_BindingField_Content(reader));

            case PrepareResponseParseState.BindingField_EOF:
                return(Parse_BindingField_EOF(reader));

            //------------------------------------------------
            case PrepareResponseParseState.ColumnField_Header:
                return(Parse_ColumnField_Header(reader));

            case PrepareResponseParseState.ColumnField_Content:
                return(Parse_ColumnField_Content(reader));

            case PrepareResponseParseState.ColumnField_EOF:
                return(Parse_ColumnField_EOF(reader));

            //------------------------------------------------
            case PrepareResponseParseState.ShouldEnd:
                reader.Reset();
                return(true);

            case PrepareResponseParseState.Error_Content:
                return(ParseErrorPacket(reader));

            default:
                throw new Exception("unknown step?");
            }
        }
Exemplo n.º 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);
        }
        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);
            }
        }
 //----------------------------------------------------
 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;
 }
        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
        }
 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;
 }
 /// <summary>
 /// return ***true*** if finish or need more data
 /// </summary>
 /// <param name="reader"></param>
 /// <returns></returns>
 bool StepParse(MySqlStreamReader reader)
 {
     switch (_parsingState)
     {
         case PrepareResponseParseState.OkPrepare_Header:
             return Parse_PrepareOk_Header(reader);
         case PrepareResponseParseState.OkPrepare_Content:
             return Parse_PrepareOk_Content(reader);
         //------------------------------------------------
         case PrepareResponseParseState.BindingField_Header:
             return Parse_BindingField_Header(reader);
         case PrepareResponseParseState.BindingField_Content:
             return Parse_BindingField_Content(reader);
         case PrepareResponseParseState.BindingField_EOF:
             return Parse_BindingField_EOF(reader);
         //------------------------------------------------
         case PrepareResponseParseState.ColumnField_Header:
             return Parse_ColumnField_Header(reader);
         case PrepareResponseParseState.ColumnField_Content:
             return Parse_ColumnField_Content(reader);
         case PrepareResponseParseState.ColumnField_EOF:
             return Parse_ColumnField_EOF(reader);
         //------------------------------------------------
         case PrepareResponseParseState.ShouldEnd:
             reader.Reset();
             return true;
         case PrepareResponseParseState.Error_Content:
             return ParseErrorPacket(reader);
         default:
             throw new Exception("unknown step?");
     }
 }
 public override void Parse(MySqlStreamReader reader)
 {
     //reset final result 
     _parseResult = null;
     while (!StepParse(reader)) ;
     //StepParse() return true if 
     //1. need more data or
     //2. finish
     if (_needMoreData)
     {
         //at any state if need more buffer 
         //then stop parsing and return 
         if (_supportPartialRelease)
         {
             if (_rows != null && _rows.Count > 0)
             {
                 _parseResult = new MySqlTableResult(_tableHeader, _rows) { HasFollower = true };
             }
             if (_generateResultMode)
             {
                 //generate new result
                 _rows = new List<DataRowPacket>();
             }
         }
     }
     else if (_parsingState == ResultPacketState.ShouldEnd)
     {
         //reset
         reader.Reset();
         _parsingState = ResultPacketState.Header_Header;
     }
 }