File: sql_statement_decomposer.cpp

package info (click to toggle)
mysql-workbench 6.3.8%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 113,932 kB
  • ctags: 87,814
  • sloc: ansic: 955,521; cpp: 427,465; python: 59,728; yacc: 59,129; xml: 54,204; sql: 7,091; objc: 965; makefile: 638; sh: 613; java: 237; perl: 30; ruby: 6; php: 1
file content (74 lines) | stat: -rw-r--r-- 2,197 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* 
 * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; version 2 of the
 * License.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301  USA
 */

#include "sql_statement_decomposer.h"
#include "base/string_utilities.h"

#include <boost/foreach.hpp>
#include <iomanip>


std::string SelectItem::effective_alias() const
{
  if (wildcard)
    return "*";
  if (!alias.empty())
    return alias;
  if (!expr.empty())
    return expr;
  return field;
}

std::string SelectItem::state_as_string() const
{
  return base::strfmt("{%s}.{%s}.{%s}.{%s}.{%s}.{%i}", schema.c_str(), table.c_str(), field.c_str(), expr.c_str(), alias.c_str(), wildcard);
}

std::ostream& operator << (std::ostream &os, SelectStatement &s)
{
  int indent= 0;
  for (SelectStatement::Ref parent= s.parent; parent; parent= parent->parent)
    ++indent;
  os << std::setw(indent*2) << "" << "{SELECT\n";
  BOOST_FOREACH (const SelectItem &select_item, s.select_items)
    os << std::setw((indent+1)*2) << "" << select_item.state_as_string() << "\n";
  os << std::setw(indent*2) << "" << "FROM\n";
  BOOST_FOREACH (const FromItem &from_item, s.from_items)
  {
    if (from_item.statement)
      os << *from_item.statement;
    else
      os << std::setw((indent+1)*2) << "";
    if (!from_item.schema.empty())
      os << from_item.schema << ".";
    os << from_item.table;
    if (!from_item.alias.empty())
      os << " " << from_item.alias;
    os << "\n";
  }
  os << std::setw(indent*2) << "" << "}";
  return os;
}


Sql_statement_decomposer::Sql_statement_decomposer(grt::GRT *grt)
:
Sql_parser_base(grt)
{
}