~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to client/drizzle.c

  • Committer: Brian Aker
  • Date: 2008-08-09 21:43:24 UTC
  • mfrom: (279.1.4 codestyle)
  • Revision ID: brian@tangent.org-20080809214324-jy2c15bx49naddsf
Merge from Monty

Show diffs side-by-side

added added

removed removed

Lines of Context:
235
235
static void add_int_to_prompt(int toadd);
236
236
static int get_result_width(DRIZZLE_RES *res);
237
237
static int get_field_disp_length(DRIZZLE_FIELD * field);
 
238
static const char * strcont(register const char *str, register const char *set);
238
239
 
239
240
/* A structure which contains information on the commands this program
240
241
   can understand. */
1040
1041
  prompt_counter=0;
1041
1042
 
1042
1043
  outfile[0]=0;      // no (default) outfile
1043
 
  strmov(pager, "stdout");  // the default, if --pager wasn't given
 
1044
  stpcpy(pager, "stdout");  // the default, if --pager wasn't given
1044
1045
  {
1045
1046
    char *tmp=getenv("PAGER");
1046
1047
    if (tmp && strlen(tmp))
1047
1048
    {
1048
1049
      default_pager_set= 1;
1049
 
      strmov(default_pager, tmp);
 
1050
      stpcpy(default_pager, tmp);
1050
1051
    }
1051
1052
  }
1052
1053
  if (!isatty(0) || !isatty(1))
1475
1476
  case OPT_DELIMITER:
1476
1477
    if (argument == disabled_my_option)
1477
1478
    {
1478
 
      strmov(delimiter, DEFAULT_DELIMITER);
 
1479
      stpcpy(delimiter, DEFAULT_DELIMITER);
1479
1480
    }
1480
1481
    else
1481
1482
    {
1521
1522
      {
1522
1523
        default_pager_set= 1;
1523
1524
        strmake(pager, argument, sizeof(pager) - 1);
1524
 
        strmov(default_pager, pager);
 
1525
        stpcpy(default_pager, pager);
1525
1526
      }
1526
1527
      else if (default_pager_set)
1527
 
        strmov(pager, default_pager);
 
1528
        stpcpy(pager, default_pager);
1528
1529
      else
1529
1530
        opt_nopager= 1;
1530
1531
    }
1615
1616
  pagpoint= getenv("PAGER");
1616
1617
  if (!((char*) (pagpoint)))
1617
1618
  {
1618
 
    strmov(pager, "stdout");
 
1619
    stpcpy(pager, "stdout");
1619
1620
    opt_nopager= 1;
1620
1621
  }
1621
1622
  else
1622
 
    strmov(pager, pagpoint);
1623
 
  strmov(default_pager, pager);
 
1623
    stpcpy(pager, pagpoint);
 
1624
  stpcpy(default_pager, pager);
1624
1625
 
1625
1626
  opt_max_allowed_packet= *drizzle_params->p_max_allowed_packet;
1626
1627
  opt_net_buffer_length= *drizzle_params->p_net_buffer_length;
1633
1634
 
1634
1635
  if (status.batch) /* disable pager and outfile in this case */
1635
1636
  {
1636
 
    strmov(default_pager, "stdout");
1637
 
    strmov(pager, "stdout");
 
1637
    stpcpy(default_pager, "stdout");
 
1638
    stpcpy(pager, "stdout");
1638
1639
    opt_nopager= 1;
1639
1640
    default_pager_set= 0;
1640
1641
    opt_outfile= 0;
1763
1764
static COMMANDS *find_command(char *name,char cmd_char)
1764
1765
{
1765
1766
  uint len;
1766
 
  char *end;
 
1767
  const char *end;
1767
1768
 
1768
1769
  if (!name)
1769
1770
  {
2612
2613
    put_info(_("Note that all text commands must be first on line and end with ';'"),INFO_INFO,0,0);
2613
2614
  for (i = 0; commands[i].name; i++)
2614
2615
  {
2615
 
    end= strmov(buff, commands[i].name);
 
2616
    end= stpcpy(buff, commands[i].name);
2616
2617
    for (j= (int)strlen(commands[i].name); j < 10; j++)
2617
 
      end= strmov(end, " ");
 
2618
      end= stpcpy(end, " ");
2618
2619
    if (commands[i].func)
2619
2620
      tee_fprintf(stdout, "%s(\\%c) %s\n", buff,
2620
2621
                  commands[i].cmd_char, _(commands[i].doc));
2750
2751
    {
2751
2752
      if (!drizzle_num_rows(result) && ! quick && !column_types_flag)
2752
2753
      {
2753
 
        strmov(buff, _("Empty set"));
 
2754
        stpcpy(buff, _("Empty set"));
2754
2755
      }
2755
2756
      else
2756
2757
      {
2772
2773
      }
2773
2774
    }
2774
2775
    else if (drizzle_affected_rows(&drizzle) == ~(uint64_t) 0)
2775
 
      strmov(buff,_("Query OK"));
 
2776
      stpcpy(buff,_("Query OK"));
2776
2777
    else
2777
2778
      sprintf(buff, ngettext("Query OK, %ld row affected",
2778
2779
                             "Query OK, %ld rows affected",
2785
2786
      *pos++= ',';
2786
2787
      *pos++= ' ';
2787
2788
      pos=int10_to_str(warnings, pos, 10);
2788
 
      pos=strmov(pos, " warning");
 
2789
      pos=stpcpy(pos, " warning");
2789
2790
      if (warnings != 1)
2790
2791
        *pos++= 's';
2791
2792
    }
2792
 
    strmov(pos, time_buff);
 
2793
    stpcpy(pos, time_buff);
2793
2794
    put_info(buff,INFO_RESULT,0,0);
2794
2795
    if (drizzle_info(&drizzle))
2795
2796
      put_info(drizzle_info(&drizzle),INFO_RESULT,0,0);
2905
2906
  char *s=buf;
2906
2907
  *s=0;
2907
2908
#define ff2s_check_flag(X)                                              \
2908
 
  if (f & X ## _FLAG) { s=strmov(s, # X " "); f &= ~ X ## _FLAG; }
 
2909
  if (f & X ## _FLAG) { s=stpcpy(s, # X " "); f &= ~ X ## _FLAG; }
2909
2910
  ff2s_check_flag(NOT_NULL);
2910
2911
  ff2s_check_flag(PRI_KEY);
2911
2912
  ff2s_check_flag(UNIQUE_KEY);
3388
3389
    {
3389
3390
      tee_fprintf(stdout, "Default pager wasn't set, using stdout.\n");
3390
3391
      opt_nopager=1;
3391
 
      strmov(pager, "stdout");
 
3392
      stpcpy(pager, "stdout");
3392
3393
      PAGER= stdout;
3393
3394
      return 0;
3394
3395
    }
3395
 
    strmov(pager, default_pager);
 
3396
    stpcpy(pager, default_pager);
3396
3397
  }
3397
3398
  else
3398
3399
  {
3401
3402
                                my_iscntrl(charset_info,end[-1])))
3402
3403
      end--;
3403
3404
    end[0]=0;
3404
 
    strmov(pager, pager_name);
3405
 
    strmov(default_pager, pager_name);
 
3405
    stpcpy(pager, pager_name);
 
3406
    stpcpy(default_pager, pager_name);
3406
3407
  }
3407
3408
  opt_nopager=0;
3408
3409
  tee_fprintf(stdout, "PAGER set to '%s'\n", pager);
3414
3415
com_nopager(DYNAMIC_STRING *buffer __attribute__((unused)),
3415
3416
            char *line __attribute__((unused)))
3416
3417
{
3417
 
  strmov(pager, "stdout");
 
3418
  stpcpy(pager, "stdout");
3418
3419
  opt_nopager=1;
3419
3420
  PAGER= stdout;
3420
3421
  tee_fprintf(stdout, "PAGER set to stdout\n");
3738
3739
    if (*ptr == '\\' && ptr[1]) // escaped character
3739
3740
    {
3740
3741
      // Remove the backslash
3741
 
      strmov(ptr, ptr+1);
 
3742
      stpcpy(ptr, ptr+1);
3742
3743
    }
3743
3744
    else if ((!quoted && *ptr == ' ') || (quoted && *ptr == qtype))
3744
3745
    {
3913
3914
    char *bufp = buf;
3914
3915
    DRIZZLE_RES *result;
3915
3916
 
3916
 
    bufp= strnmov(buf, drizzle_get_server_info(con), sizeof buf);
 
3917
    bufp= stpncpy(buf, drizzle_get_server_info(con), sizeof buf);
3917
3918
 
3918
3919
    /* "limit 1" is protection against SQL_SELECT_LIMIT=0 */
3919
3920
    if (!drizzle_query(con, "select @@version_comment limit 1") &&
4097
4098
    tmp=(ulong) floor(sec/(3600.0*24));
4098
4099
    sec-=3600.0*24*tmp;
4099
4100
    buff=int10_to_str((long) tmp, buff, 10);
4100
 
    buff=strmov(buff,tmp > 1 ? " days " : " day ");
 
4101
    buff=stpcpy(buff,tmp > 1 ? " days " : " day ");
4101
4102
  }
4102
4103
  if (sec >= 3600.0)
4103
4104
  {
4104
4105
    tmp=(ulong) floor(sec/3600.0);
4105
4106
    sec-=3600.0*tmp;
4106
4107
    buff=int10_to_str((long) tmp, buff, 10);
4107
 
    buff=strmov(buff,tmp > 1 ? " hours " : " hour ");
 
4108
    buff=stpcpy(buff,tmp > 1 ? " hours " : " hour ");
4108
4109
  }
4109
4110
  if (sec >= 60.0)
4110
4111
  {
4111
4112
    tmp=(ulong) floor(sec/60.0);
4112
4113
    sec-=60.0*tmp;
4113
4114
    buff=int10_to_str((long) tmp, buff, 10);
4114
 
    buff=strmov(buff," min ");
 
4115
    buff=stpcpy(buff," min ");
4115
4116
  }
4116
4117
  if (part_second)
4117
4118
    sprintf(buff,"%.2f sec",sec);
4132
4133
  buff[0]=' ';
4133
4134
  buff[1]='(';
4134
4135
  end_timer(start_time,buff+2);
4135
 
  strmov(strend(buff),")");
 
4136
  stpcpy(strend(buff),")");
4136
4137
}
4137
4138
 
4138
4139
static const char * construct_prompt()
4182
4183
          dynstr_append(processed_prompt, "localhost");
4183
4184
        else
4184
4185
        {
4185
 
          const char *end=strcend(prompt,' ');
4186
 
          dynstr_append_mem(processed_prompt, prompt, (end-prompt));
 
4186
          const char *end=strrchr(prompt,' ');
 
4187
          if (end != NULL)
 
4188
            dynstr_append_mem(processed_prompt, prompt, (end-prompt));
4187
4189
        }
4188
4190
        break;
4189
4191
      }
4350
4352
    tee_fprintf(stdout, "PROMPT set to '%s'\n", current_prompt);
4351
4353
  return 0;
4352
4354
}
 
4355
 
 
4356
/*
 
4357
    strcont(str, set) if str contanies any character in the string set.
 
4358
    The result is the position of the first found character in str, or NullS
 
4359
    if there isn't anything found.
 
4360
*/
 
4361
 
 
4362
static const char * strcont(register const char *str, register const char *set)
 
4363
{
 
4364
  register const char * start = (const char *) set;
 
4365
 
 
4366
  while (*str)
 
4367
  {
 
4368
    while (*set)
 
4369
    {
 
4370
      if (*set++ == *str)
 
4371
        return ((const char*) str);
 
4372
    }
 
4373
    set=start; str++;
 
4374
  }
 
4375
  return NULL;
 
4376
} /* strcont */