Commit 415df59f authored by sasha@mysql.sashanet.com's avatar sasha@mysql.sashanet.com
Browse files

Merge work:/home/bk/mysql-4.0

into mysql.sashanet.com:/home/sasha/src/bk/mysql-4.0
parents 56a36c71 a74811e7
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */

#define MANAGER_CLIENT_VERSION "1.0"
#define MANAGER_CLIENT_VERSION "1.1"

#include <my_global.h>
#include <mysql.h>
@@ -28,7 +28,7 @@
#include <unistd.h>

#ifndef MYSQL_MANAGER_PORT
#define MYSQL_MANAGER_PORT 23546
#define MYSQL_MANAGER_PORT 9305
#endif

static void die(const char* fmt, ...);
+3 −0
Original line number Diff line number Diff line
@@ -2158,12 +2158,15 @@ static void var_from_env(const char* name, const char* def_val)

static void init_var_hash()
{
  VAR* v;
  if (hash_init(&var_hash, 1024, 0, 0, get_var_key, var_free, MYF(0)))
    die("Variable hash initialization failed");
  var_from_env("MASTER_MYPORT", "9306");
  var_from_env("SLAVE_MYPORT", "9307");
  var_from_env("MYSQL_TEST_DIR", "/tmp");
  var_from_env("BIG_TEST", opt_big_test ? "1" : "0");
  v=var_init(0,"MAX_TABLES", 0, (sizeof(ulong) == 4) ? "31" : "63",0);
  hash_insert(&var_hash, (byte*)v);
}


+1 −1
Original line number Diff line number Diff line
@@ -238,7 +238,7 @@ typedef struct st_mysql_res {
  
typedef struct st_mysql_manager
{
  Vio* vio;
  NET net;
  char *host,*user,*passwd;
  unsigned int port;
  my_bool free_me;
+5 −4
Original line number Diff line number Diff line
@@ -905,7 +905,8 @@ unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
static MYSQL_DATA *read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
			     uint fields)
{
  uint	field,pkt_len;
  uint	field;
  ulong pkt_len;
  ulong len;
  uchar *cp;
  char	*to;
@@ -991,7 +992,7 @@ read_one_row(MYSQL *mysql,uint fields,MYSQL_ROW row, ulong *lengths)
  ulong pkt_len,len;
  uchar *pos,*prev_pos;

  if ((pkt_len=(uint) net_safe_read(mysql)) == packet_error)
  if ((pkt_len=net_safe_read(mysql)) == packet_error)
    return -1;
  if (pkt_len == 1 && mysql->net.read_pos[0] == 254)
    return 1;				/* End of data */
@@ -1453,7 +1454,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
  my_socket	sock;
  uint32	ip_addr;
  struct	sockaddr_in sock_addr;
  uint		pkt_length;
  ulong		pkt_length;
  NET		*net= &mysql->net;
#ifdef __WIN__
  HANDLE	hPipe=INVALID_HANDLE_VALUE;
@@ -2135,7 +2136,7 @@ int STDCALL mysql_read_query_result(MYSQL *mysql)
  uchar *pos;
  ulong field_count;
  MYSQL_DATA *fields;
  uint length;
  ulong length;
  DBUG_ENTER("mysql_read_query_result");

  /* read from the connection which we actually used, which
+28 −54
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con,
  uint32 ip_addr;
  char msg_buf[MAX_MYSQL_MANAGER_MSG];
  int msg_len;
  Vio* vio;

  if (!host)
    host="localhost";
@@ -105,13 +106,14 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con,
    strmov(con->last_error,"Cannot create socket");
    goto err;
  }
  if (!(con->vio=vio_new(sock,VIO_TYPE_TCPIP,FALSE)))
  if (!(vio=vio_new(sock,VIO_TYPE_TCPIP,FALSE)))
  {
    con->last_errno=ENOMEM;
    strmov(con->last_error,"Cannot create network I/O object");
    goto err;
  }
  vio_blocking(con->vio,TRUE);
  vio_blocking(vio,TRUE);
  my_net_init(&con->net,vio);
  bzero((char*) &sock_addr,sizeof(sock_addr));
  sock_addr.sin_family = AF_INET;
  if ((int) (ip_addr = inet_addr(host)) != (int) INADDR_NONE)
@@ -155,7 +157,7 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con,
    goto err;
  }
  /* read the greating */
  if (vio_read(con->vio,msg_buf,MAX_MYSQL_MANAGER_MSG)<=0)
  if (my_net_read(&con->net) == packet_error)
  {
    con->last_errno=errno;
    strmov(con->last_error,"Read error on socket");
@@ -163,19 +165,19 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con,
  }
  sprintf(msg_buf,"%-.16s %-.16s\n",user,passwd);
  msg_len=strlen(msg_buf);
  if (vio_write(con->vio,msg_buf,msg_len)!=msg_len)
  if (my_net_write(&con->net,msg_buf,msg_len) || net_flush(&con->net))
  {
    con->last_errno=errno;
    con->last_errno=con->net.last_errno;
    strmov(con->last_error,"Write error on socket");
    goto err;
  }
  if (vio_read(con->vio,msg_buf,MAX_MYSQL_MANAGER_MSG)<=0)
  if (my_net_read(&con->net) == packet_error)
  {
    con->last_errno=errno;
    strmov(con->last_error,"Read error on socket");
    goto err;
  }
  if ((con->cmd_status=atoi(msg_buf)) != MANAGER_OK)
  if ((con->cmd_status=atoi(con->net.read_pos)) != MANAGER_OK)
  {
    strmov(con->last_error,"Access denied");
    goto err;
@@ -210,11 +212,7 @@ void STDCALL mysql_manager_close(MYSQL_MANAGER* con)
     allocated in my_multimalloc() along with con->host, freeing
     con->hosts frees the whole block
  */
  if (con->vio)
  {
    vio_delete(con->vio);
    con->vio=0;
  }
  net_end(&con->net);
  if (con->free_me)
    my_free((gptr)con,MYF(0));
}
@@ -224,7 +222,7 @@ int STDCALL mysql_manager_command(MYSQL_MANAGER* con,const char* cmd,
{
  if (!cmd_len)
    cmd_len=strlen(cmd);
  if (vio_write(con->vio,(char*)cmd,cmd_len) != cmd_len)
  if (my_net_write(&con->net,(char*)cmd,cmd_len) || net_flush(&con->net))
  {
    con->last_errno=errno;
    strmov(con->last_error,"Write error on socket");
@@ -238,9 +236,9 @@ int STDCALL mysql_manager_fetch_line(MYSQL_MANAGER* con, char* res_buf,
						 int res_buf_size)
{
  char* res_buf_end=res_buf+res_buf_size;
  char* net_buf_pos=con->net_buf_pos, *net_buf_end=con->net_data_end;
  char* net_buf=con->net.read_pos, *net_buf_end;
  int res_buf_shift=RES_BUF_SHIFT;
  int done=0;
  uint num_bytes;
  
  if (res_buf_size<RES_BUF_SHIFT)
  {
@@ -249,51 +247,27 @@ int STDCALL mysql_manager_fetch_line(MYSQL_MANAGER* con, char* res_buf,
    return 1;
  }
  
  for (;;)
  {
    for (;net_buf_pos<net_buf_end && res_buf<res_buf_end;
	 net_buf_pos++,res_buf++)
    {
      char c=*net_buf_pos;
      if (c == '\r')
	c=*++net_buf_pos;
      if (c == '\n')
      {
	*res_buf=0;
	net_buf_pos++;
	done=1;
	break;
      }
      else
	*res_buf=*net_buf_pos;
    }
    if (done || res_buf==res_buf_end)
      break;
      
    if (net_buf_pos == net_buf_end && res_buf<res_buf_end)
    {
      int num_bytes;
      if ((num_bytes=vio_read(con->vio,con->net_buf,con->net_buf_size))<=0)
  if ((num_bytes=my_net_read(&con->net)) == packet_error)
  {
    con->last_errno=errno;
    strmov(con->last_error,"socket read failed");
    return 1;
  }
      net_buf_pos=con->net_buf;
      net_buf_end=net_buf_pos+num_bytes;
    }
  }
  con->net_buf_pos=net_buf_pos;
  con->net_data_end=net_buf_end;
  res_buf=res_buf_end-res_buf_size;
  if ((con->eof=(res_buf[3]==' ')))

  net_buf_end=net_buf+num_bytes;
  
  if ((con->eof=(net_buf[3]==' ')))
    res_buf_shift--;
  res_buf_end-=res_buf_shift;
  for (;res_buf<res_buf_end;res_buf++)
  net_buf+=res_buf_shift;
  res_buf_end[-1]=0;
  for (;net_buf<net_buf_end && res_buf < res_buf_end;res_buf++,net_buf++)
  {
    if((*res_buf=*net_buf) == '\r')
    {
    if(!(*res_buf=res_buf[res_buf_shift]))
      *res_buf=0;
      break;
    }
  }
  return 0;
}

Loading