public void UseConnectionParser() { //switch from current parser to another ParseResult = null; currentPacketParser = connParser; _mysqlStreamReader.Reset(); }
//---------------------------------------------------- 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 }
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; } }
/// <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?"); } }
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; } }