/// <summary> /// +/- blocking /// </summary> /// <param name="nextAction"></param> public void Prepare(Action nextAction = null) { _execState = QueryExecState.Prepare; _queryUsedMode = QueryUseMode.Prepare; if (_cmdParams == null) { throw new Exception("Sql cmdParams can not null."); } //------------------- //blocking method*** //wait until execute finish //------------------- //prepare sql query _sqlParserMx.UsePrepareResponseParser(); _prepareContext = null; //------------------------------------------------------------- _writer.Reset(); ComPrepareStatementPacket.Write( _writer, _sqlStrTemplate.BindValues(_cmdParams, true)); //------------------------------------------------------------- if (nextAction != null) { //not block here SendAndRecv_A(_writer.ToArray(), nextAction); } else { //blocking _conn.InitWait(); SendAndRecv_A(_writer.ToArray(), _conn.UnWait); _conn.Wait(); } }
public void Prepare() { //prepare sql query _prepareContext = null; if (_cmdParams == null) { return; } _writer.Reset(); string realSql = _sqlStrTemplate.BindValues(_cmdParams, true); ComPrepareStatementPacket preparePacket = new ComPrepareStatementPacket(realSql); preparePacket.WritePacket(_writer); SendPacket(_writer.ToArray()); OkPrepareStmtPacket okPreparePacket = new OkPrepareStmtPacket(); okPreparePacket = ParsePrepareResponse(); if (okPreparePacket != null) { _prepareContext = new PreparedContext(okPreparePacket.statement_id, _sqlStrTemplate); if (okPreparePacket.num_params > 0) { var tableHeader = new TableHeader(); tableHeader.TypeCast = typeCast; tableHeader.NestTables = nestTables; tableHeader.ConnConfig = _conn.config; for (int i = 0; i < okPreparePacket.num_params; i++) { //no meaing for each field? FieldPacket field = ParseColumn(); tableHeader.AddField(field); } //set table after the table is ready! _prepareContext.Setup(tableHeader); ParseEOF(); } if (okPreparePacket.num_columns > 0) { _tableHeader = new TableHeader(); _tableHeader.TypeCast = typeCast; _tableHeader.NestTables = nestTables; _tableHeader.ConnConfig = _conn.config; for (int i = 0; i < okPreparePacket.num_columns; i++) { FieldPacket field = ParseColumn(); _tableHeader.AddField(field); } ParseEOF(); } } }