~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to client/mysql.cc

  • Committer: Stewart Smith
  • Date: 2008-06-30 05:33:25 UTC
  • mfrom: (12.2.8 drizzle)
  • mto: This revision was merged to the branch mainline in revision 19.
  • Revision ID: stewart@flamingspork.com-20080630053325-mwrv6bjaufcpvj8n
merge my work

Show diffs side-by-side

added added

removed removed

Lines of Context:
104
104
#define cmp_database(cs,A,B) strcmp((A),(B))
105
105
#endif
106
106
 
107
 
#if !defined( __WIN__) && !defined(__NETWARE__) && !defined(THREAD)
 
107
#if !defined(THREAD)
108
108
#define USE_POPEN
109
109
#endif
110
110
 
1297
1297
  return;
1298
1298
 
1299
1299
err:
1300
 
#ifdef _WIN32
1301
 
  /*
1302
 
   When SIGINT is raised on Windows, the OS creates a new thread to handle the
1303
 
   interrupt. Once that thread completes, the main thread continues running 
1304
 
   only to find that it's resources have already been free'd when the sigint 
1305
 
   handler called mysql_end(). 
1306
 
  */
1307
 
  mysql_thread_end();
1308
 
  return;
1309
 
#else
1310
1300
  mysql_end(sig);
1311
 
#endif  
1312
1301
}
1313
1302
 
1314
1303
 
1328
1317
   0, 0, 0, 0, 0},
1329
1318
  {"help", 'I', "Synonym for -?", 0, 0, 0, GET_NO_ARG, NO_ARG, 0,
1330
1319
   0, 0, 0, 0, 0},
1331
 
#ifdef __NETWARE__
1332
 
  {"autoclose", OPT_AUTO_CLOSE, "Auto close the screen on exit for Netware.",
1333
 
   0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
1334
 
#endif
1335
1320
  {"auto-rehash", OPT_AUTO_REHASH,
1336
1321
   "Enable automatic rehashing. One doesn't need to use 'rehash' to get table and field completion, but startup and reconnecting may take a longer time. Disable with --disable-auto-rehash.",
1337
1322
   (uchar**) &opt_rehash, (uchar**) &opt_rehash, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0,
1438
1423
  {"password", 'p',
1439
1424
   "Password to use when connecting to server. If password is not given it's asked from the tty.",
1440
1425
   0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
1441
 
#ifdef __WIN__
1442
 
  {"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, GET_NO_ARG,
1443
 
   NO_ARG, 0, 0, 0, 0, 0, 0},
1444
 
#endif
1445
1426
  {"port", 'P', "Port number to use for connection or 0 for default to, in "
1446
1427
   "order of preference, my.cnf, $MYSQL_TCP_PORT, "
1447
1428
#if MYSQL_PORT_DEFAULT == 0
1534
1515
 
1535
1516
static void usage(int version)
1536
1517
{
1537
 
  /* Divert all help information on NetWare to logger screen. */
1538
 
#ifdef __NETWARE__
1539
 
#define printf  consoleprintf
1540
 
#endif
1541
 
 
1542
1518
#if defined(USE_LIBEDIT_INTERFACE)
1543
1519
  const char* readline= "";
1544
1520
#else
1564
1540
  my_print_help(my_long_options);
1565
1541
  print_defaults("my", load_default_groups);
1566
1542
  my_print_variables(my_long_options);
1567
 
  NETWARE_SET_SCREEN_MODE(1);
1568
 
#ifdef __NETWARE__
1569
 
#undef printf
1570
 
#endif
1571
1543
}
1572
1544
 
1573
1545
 
1576
1548
               char *argument)
1577
1549
{
1578
1550
  switch(optid) {
1579
 
#ifdef __NETWARE__
1580
 
  case OPT_AUTO_CLOSE:
1581
 
    setscreenmode(SCR_AUTOCLOSE_ON_EXIT);
1582
 
    break;
1583
 
#endif
1584
1551
  case OPT_CHARSETS_DIR:
1585
1552
    strmake(mysql_charsets_dir, argument, sizeof(mysql_charsets_dir) - 1);
1586
1553
    charsets_dir = mysql_charsets_dir;
1811
1778
 
1812
1779
static int read_and_execute(bool interactive)
1813
1780
{
1814
 
#if defined(__NETWARE__)
1815
 
  char linebuffer[254];
1816
 
  String buffer;
1817
 
#endif
1818
 
#if defined(__WIN__)
1819
 
  String tmpbuf;
1820
 
  String buffer;
1821
 
#endif
1822
 
 
1823
1781
  char  *line;
1824
1782
  char  in_string=0;
1825
1783
  ulong line_number=0;
1859
1817
      if (opt_outfile && glob_buffer.is_empty())
1860
1818
        fflush(OUTFILE);
1861
1819
 
1862
 
#if defined( __WIN__) || defined(__NETWARE__)
1863
 
      tee_fputs(prompt, stdout);
1864
 
#if defined(__NETWARE__)
1865
 
      line=fgets(linebuffer, sizeof(linebuffer)-1, stdin);
1866
 
      /* Remove the '\n' */
1867
 
      if (line)
1868
 
      {
1869
 
        char *p = strrchr(line, '\n');
1870
 
        if (p != NULL)
1871
 
          *p = '\0';
1872
 
      }
1873
 
#else defined(__WIN__)
1874
 
      if (!tmpbuf.is_alloced())
1875
 
        tmpbuf.alloc(65535);
1876
 
      tmpbuf.length(0);
1877
 
      buffer.length(0);
1878
 
      size_t clen;
1879
 
      do
1880
 
      {
1881
 
        line= my_cgets((char*)tmpbuf.ptr(), tmpbuf.alloced_length()-1, &clen);
1882
 
        buffer.append(line, clen);
1883
 
        /* 
1884
 
           if we got buffer fully filled than there is a chance that
1885
 
           something else is still in console input buffer
1886
 
        */
1887
 
      } while (tmpbuf.alloced_length() <= clen);
1888
 
      /* 
1889
 
        An empty line is returned from my_cgets when there's error reading :
1890
 
        Ctrl-c for example
1891
 
      */
1892
 
      if (line)
1893
 
        line= buffer.c_ptr();
1894
 
#endif /* __NETWARE__ */
1895
 
#else
1896
1820
      if (opt_outfile)
1897
1821
        fputs(prompt, OUTFILE);
1898
1822
      line= readline(prompt);
1899
 
#endif /* defined( __WIN__) || defined(__NETWARE__) */
1900
1823
 
1901
1824
      /*
1902
1825
        When Ctrl+d or Ctrl+z is pressed, the line may be NULL on some OS
1944
1867
    }
1945
1868
  }
1946
1869
 
1947
 
#if defined( __WIN__) || defined(__NETWARE__)
1948
 
  buffer.free();
1949
 
#endif
1950
 
#if defined( __WIN__)
1951
 
  tmpbuf.free();
1952
 
#endif
1953
 
 
1954
1870
  return status.exit_status;
1955
1871
}
1956
1872
 
3803
3719
  strxmov(buff,editor," ",filename,NullS);
3804
3720
  (void) system(buff);
3805
3721
 
3806
 
  MY_STAT stat_arg;
3807
 
  if (!my_stat(filename,&stat_arg,MYF(MY_WME)))
 
3722
  struct stat stat_arg;
 
3723
  if (stat(filename,&stat_arg))
3808
3724
    goto err;
3809
3725
  if ((fd = my_open(filename,O_RDONLY, MYF(MY_WME))) < 0)
3810
3726
    goto err;
3828
3744
         char *line __attribute__((unused)))
3829
3745
{
3830
3746
  /* let the screen auto close on a normal shutdown */
3831
 
  NETWARE_SET_SCREEN_MODE(SCR_AUTOCLOSE_ON_EXIT);
3832
3747
  status.exit_status=0;
3833
3748
  return 1;
3834
3749
}
4530
4445
{
4531
4446
  va_list args;
4532
4447
 
4533
 
  NETWARE_YIELD;
4534
4448
  va_start(args, fmt);
4535
4449
  (void) vfprintf(file, fmt, args);
4536
4450
  va_end(args);
4546
4460
 
4547
4461
void tee_fputs(const char *s, FILE *file)
4548
4462
{
4549
 
  NETWARE_YIELD;
4550
4463
  fputs(s, file);
4551
4464
  if (opt_outfile)
4552
4465
    fputs(s, OUTFILE);
4555
4468
 
4556
4469
void tee_puts(const char *s, FILE *file)
4557
4470
{
4558
 
  NETWARE_YIELD;
4559
4471
  fputs(s, file);
4560
4472
  fputc('\n', file);
4561
4473
  if (opt_outfile)
4572
4484
    putc(c, OUTFILE);
4573
4485
}
4574
4486
 
4575
 
#if defined( __WIN__) || defined(__NETWARE__)
4576
 
#include <time.h>
4577
 
#else
4578
4487
#include <sys/times.h>
4579
4488
#ifdef _SC_CLK_TCK                              // For mit-pthreads
4580
4489
#undef CLOCKS_PER_SEC
4581
4490
#define CLOCKS_PER_SEC (sysconf(_SC_CLK_TCK))
4582
4491
#endif
4583
 
#endif
4584
4492
 
4585
4493
static ulong start_timer(void)
4586
4494
{
4587
 
#if defined( __WIN__) || defined(__NETWARE__)
4588
 
 return clock();
4589
 
#else
4590
4495
  struct tms tms_tmp;
4591
4496
  return times(&tms_tmp);
4592
 
#endif
4593
4497
}
4594
4498
 
4595
4499