~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to client/drizzletest.cc

  • Committer: Olaf van der Spek
  • Date: 2011-06-16 12:28:46 UTC
  • mto: (2318.6.3 refactor7)
  • mto: This revision was merged to the branch mainline in revision 2340.
  • Revision ID: olafvdspek@gmail.com-20110616122846-umrayrppjgq96u6g
Refactor

Show diffs side-by-side

added added

removed removed

Lines of Context:
4449
4449
  Values may be converted with 'replace_column'
4450
4450
*/
4451
4451
 
4452
 
static void append_result(string *ds, drizzle_result_st *res)
 
4452
static void append_result(string *ds, drizzle::result_c& res)
4453
4453
{
4454
 
  uint32_t num_fields= drizzle_result_column_count(res);
4455
 
  while (drizzle_row_t row = drizzle_row_next(res))
 
4454
  uint32_t num_fields= res.column_count();
 
4455
  while (drizzle_row_t row = res.row_next())
4456
4456
  {
4457
 
    size_t* lengths = drizzle_row_field_sizes(res);
4458
 
    drizzle_column_seek(res, 0);
 
4457
    size_t* lengths = res.row_field_sizes();
 
4458
    res.column_seek(0);
4459
4459
    for (uint32_t i = 0; i < num_fields; i++)
4460
4460
    {
4461
 
      drizzle_column_st* column= drizzle_column_next(res);
4462
 
      if (row[i] && (drizzle_column_type(column) == DRIZZLE_COLUMN_TYPE_TINY))
 
4461
      drizzle_column_st* column= res.column_next();
 
4462
      if (row[i] && drizzle_column_type(column) == DRIZZLE_COLUMN_TYPE_TINY)
4463
4463
      {
4464
4464
        if (boost::lexical_cast<uint32_t>(row[i]))
4465
4465
        {
4466
 
          if ((drizzle_column_flags(column) & DRIZZLE_COLUMN_FLAGS_UNSIGNED))
 
4466
          if (drizzle_column_flags(column) & DRIZZLE_COLUMN_FLAGS_UNSIGNED)
4467
4467
          {
4468
4468
            append_field(ds, i, column, "YES", 3, false);
4469
4469
          }
4474
4474
        }
4475
4475
        else
4476
4476
        {
4477
 
          if ((drizzle_column_flags(column) & DRIZZLE_COLUMN_FLAGS_UNSIGNED))
 
4477
          if (drizzle_column_flags(column) & DRIZZLE_COLUMN_FLAGS_UNSIGNED)
4478
4478
          {
4479
4479
            append_field(ds, i, column, "NO", 2, false);
4480
4480
          }
4499
4499
  Append metadata for fields to output
4500
4500
*/
4501
4501
 
4502
 
static void append_metadata(string *ds, drizzle_result_st *res)
 
4502
static void append_metadata(string *ds, drizzle::result_c& res)
4503
4503
{
4504
 
  drizzle_column_st *column;
4505
4504
  ds->append("Catalog\tDatabase\tTable\tTable_alias\tColumn\t"
4506
4505
             "Column_alias\tType\tLength\tMax length\tIs_null\t"
4507
4506
             "Flags\tDecimals\tCharsetnr\n");
4508
4507
 
4509
 
  drizzle_column_seek(res, 0);
4510
 
  while ((column= drizzle_column_next(res)))
 
4508
  res.column_seek(0);
 
4509
  while (drizzle_column_st* column= res.column_next())
4511
4510
  {
4512
 
    ds->append(drizzle_column_catalog(column),
4513
 
               strlen(drizzle_column_catalog(column)));
4514
 
    ds->append("\t", 1);
 
4511
    ds->append(drizzle_column_catalog(column), strlen(drizzle_column_catalog(column)));
 
4512
    *ds += "\t";
4515
4513
    ds->append(drizzle_column_db(column), strlen(drizzle_column_db(column)));
4516
 
    ds->append("\t", 1);
4517
 
    ds->append(drizzle_column_orig_table(column),
4518
 
               strlen(drizzle_column_orig_table(column)));
4519
 
    ds->append("\t", 1);
4520
 
    ds->append(drizzle_column_table(column),
4521
 
               strlen(drizzle_column_table(column)));
4522
 
    ds->append("\t", 1);
4523
 
    ds->append(drizzle_column_orig_name(column),
4524
 
               strlen(drizzle_column_orig_name(column)));
4525
 
    ds->append("\t", 1);
4526
 
    ds->append(drizzle_column_name(column),
4527
 
               strlen(drizzle_column_name(column)));
4528
 
    ds->append("\t", 1);
 
4514
    *ds += "\t";
 
4515
    ds->append(drizzle_column_orig_table(column), strlen(drizzle_column_orig_table(column)));
 
4516
    *ds += "\t";
 
4517
    ds->append(drizzle_column_table(column), strlen(drizzle_column_table(column)));
 
4518
    *ds += "\t";
 
4519
    ds->append(drizzle_column_orig_name(column), strlen(drizzle_column_orig_name(column)));
 
4520
    *ds += "\t";
 
4521
    ds->append(drizzle_column_name(column), strlen(drizzle_column_name(column)));
 
4522
    *ds += "\t";
4529
4523
    replace_append_uint(ds, drizzle_column_type_drizzle(column));
4530
 
    ds->append("\t", 1);
 
4524
    *ds += "\t";
4531
4525
    replace_append_uint(ds, drizzle_column_size(column));
4532
 
    ds->append("\t", 1);
4533
 
    if (drizzle_column_type(column) == DRIZZLE_COLUMN_TYPE_TINY)
4534
 
    {
4535
 
      replace_append_uint(ds, 1);
4536
 
    }
4537
 
    else
4538
 
    {
4539
 
      replace_append_uint(ds, drizzle_column_max_size(column));
4540
 
    }
4541
 
    ds->append("\t", 1);
4542
 
    ds->append((char*) ((drizzle_column_flags(column) & DRIZZLE_COLUMN_FLAGS_NOT_NULL) ? "N" : "Y"), 1);
4543
 
    ds->append("\t", 1);
 
4526
    *ds += "\t";
 
4527
    replace_append_uint(ds, drizzle_column_type(column) == DRIZZLE_COLUMN_TYPE_TINY ? 1 : drizzle_column_max_size(column));
 
4528
    *ds += "\t";
 
4529
    ds->append((drizzle_column_flags(column) & DRIZZLE_COLUMN_FLAGS_NOT_NULL) ? "N" : "Y", 1);
 
4530
    *ds += "\t";
4544
4531
    replace_append_uint(ds, drizzle_column_flags(column));
4545
 
    ds->append("\t", 1);
 
4532
    *ds += "\t";
4546
4533
    replace_append_uint(ds, drizzle_column_decimals(column));
4547
 
    ds->append("\t", 1);
 
4534
    *ds += "\t";
4548
4535
    replace_append_uint(ds, drizzle_column_charset(column));
4549
 
    ds->append("\n", 1);
 
4536
    *ds += "\n";
4550
4537
  }
4551
4538
}
4552
4539
 
4574
4561
  Display the table headings with the names tab separated
4575
4562
*/
4576
4563
 
4577
 
static void append_table_headings(string& ds, drizzle_result_st* res)
 
4564
static void append_table_headings(string& ds, drizzle::result_c& res)
4578
4565
{
4579
4566
  uint32_t col_idx= 0;
4580
 
  drizzle_column_seek(res, 0);
4581
 
  while (drizzle_column_st* column= drizzle_column_next(res))
 
4567
  res.column_seek(0);
 
4568
  while (drizzle_column_st* column= res.column_next())
4582
4569
  {
4583
4570
    if (col_idx)
4584
4571
      ds += "\t";
4595
4582
  Number of warnings appended to ds
4596
4583
*/
4597
4584
 
4598
 
static int append_warnings(string& ds, drizzle_con_st *con, drizzle_result_st *res)
 
4585
static int append_warnings(string& ds, drizzle_con_st *con, drizzle::result_c& res)
4599
4586
{
4600
 
  uint32_t count= drizzle_result_warning_count(res);
 
4587
  uint32_t count= drizzle_result_warning_count(&res.b_);
4601
4588
  if (!count)
4602
4589
    return 0;
4603
4590
 
4613
4600
  if (warn_res.column_count() == 0)
4614
4601
    die("Warning count is %u but didn't get any warnings", count);
4615
4602
 
4616
 
  append_result(&ds, &warn_res.b_);
 
4603
  append_result(&ds, warn_res);
4617
4604
  return count;
4618
4605
}
4619
4606
 
4634
4621
static void run_query_normal(st_connection *cn,
4635
4622
                             st_command* command,
4636
4623
                             int flags, char *query, int query_len,
4637
 
                             string *ds, string *ds_warnings)
 
4624
                             string *ds, string& ds_warnings)
4638
4625
{
4639
4626
  drizzle_return_t ret;
4640
4627
  drizzle_con_st *con= &cn->con;
4709
4696
      if (res.column_count())
4710
4697
      {
4711
4698
        if (display_metadata)
4712
 
          append_metadata(ds, &res.b_);
 
4699
          append_metadata(ds, res);
4713
4700
 
4714
4701
        if (!display_result_vertically)
4715
 
          append_table_headings(*ds, &res.b_);
 
4702
          append_table_headings(*ds, res);
4716
4703
 
4717
 
        append_result(ds, &res.b_);
 
4704
        append_result(ds, res);
4718
4705
      }
4719
4706
 
4720
4707
      /*
4732
4719
      if (!disable_warnings)
4733
4720
      {
4734
4721
        drizzle_con_remove_options(con, DRIZZLE_CON_NO_RESULT_READ);
4735
 
        if (append_warnings(*ds_warnings, con, &res.b_) || ds_warnings->length())
 
4722
        if (append_warnings(ds_warnings, con, res) || not ds_warnings.empty())
4736
4723
        {
4737
4724
          ds->append("Warnings:\n", 10);
4738
 
          *ds += *ds_warnings;
 
4725
          *ds += ds_warnings;
4739
4726
        }
4740
4727
      }
4741
4728
 
4955
4942
    Always run with normal C API if it's not a complete
4956
4943
    SEND + REAP
4957
4944
  */
4958
 
  run_query_normal(cn, command, flags, query, query_len, ds, &ds_warnings);
 
4945
  run_query_normal(cn, command, flags, query, query_len, ds, ds_warnings);
4959
4946
 
4960
4947
  if (display_result_sorted)
4961
4948
  {