code: func (tc *TiDBContext) Prepare(sql string) (statement PreparedStatement, columns, params []*ColumnInfo, err error) {
  	stmtID, paramCount, fields, err := tc.session.PrepareStmt(sql)
  	if err != nil {
  		return
  	}
  	stmt := &TiDBStatement{
  		sql:         sql,
  		id:          stmtID,
  		numParams:   paramCount,
  		boundParams: make([][]byte, paramCount),
  		ctx:         tc,
  	}
  	statement = stmt
  	columns = make([]*ColumnInfo, len(fields))
  	for i := range fields {
  		columns[i] = convertColumnInfo(fields[i])
  	}
  	params = make([]*ColumnInfo, paramCount)
  	for i := range params {
  		params[i] = &ColumnInfo{
  			Type: mysql.TypeBlob,
  		}
  	}
  	tc.stmts[int(stmtID)] = stmt
  	return
  }
docs: // Prepare implements QueryCtx Prepare method.