FunctionEncoder.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/dataaccess/query/FunctionEncoder.cpp
22 
23  \brief A query encoder for general function expressions.
24 */
25 
26 // TerraLib
27 #include "FunctionEncoder.h"
28 #include "Function.h"
29 #include "SQLVisitor.h"
30 
31 // STL
32 #include <cassert>
33 #include <string>
34 
36  std::string& buff,
37  SQLVisitor& v) const
38 {
39  size_t size = f.getNumArgs();
40 
41  if(m_name == "st_dump" || m_name =="st_dumprings")
42  {
43  buff += "(";
44  buff += m_name;
45  buff += "(";
46 
47  for(size_t i = 0; i < size; ++i)
48  {
49  if(i != 0)
50  buff += ", ";
51 
52  assert(f[i]);
53  f[i]->accept(v);
54  }
55 
56  buff += ")).geom";
57  }
58  else if(m_name == "st_extent")
59  {
60  buff += "(";
61  buff += m_name;
62  buff += "(";
63 
64  for(size_t i = 0; i < size; ++i)
65  {
66  if(i != 0)
67  buff += ", ";
68 
69  assert(f[i]);
70  f[i]->accept(v);
71  }
72 
73  buff += "))::geometry";
74  }
75  else
76  {
77  buff += m_name;
78  buff += "(";
79 
80  for(size_t i = 0; i < size; ++i)
81  {
82  if(i != 0)
83  buff += ", ";
84 
85  assert(f[i]);
86  f[i]->accept(v);
87  }
88 
89  buff += ")";
90  }
91 }
92 
A class that models a Function expression.
std::string m_name
The alias to the function.
virtual ReturnType accept(VisitorType &guest) const =0
It call the visit method from the guest object.
void toSQL(const Function &f, std::string &buff, SQLVisitor &v) const
It encodes the function to a SQL notation.
A visitor for building an SQL statement from a given Query hierarchy.
A class that models a Function expression.
A query encoder for general function expressions.
A visitor for building an SQL statement from a given Query hierarchy.
std::size_t getNumArgs() const
It returns the number of arguments informed to the function.