source: observatorio/simulacion/SimEscenariosEconomicos/queries.H @ 5c51ff9

simulacion
Last change on this file since 5c51ff9 was 5c51ff9, checked in by Alejandro <amujica@…>, 9 years ago

Modificado para que se cree una sola conexion a la base de datos para todas las consultas en lote

  • Property mode set to 100644
File size: 12.3 KB
Line 
1/*
2  Copyright (C) 2012
3  Alejandro Mujica (amujica@cenditel.gob.ve)
4  Erwin Paredes (eparedes@cenditel.gob.ve)
5  José Ruiz (jruiz@cenditel.gob.ve)
6  Rodolfo Rangel (rrangel@cenditel.gob.ve)
7  Julie Vera (jvera@cenditel.gob.ve)
8 
9  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
10  Tecnologías Libres
11 
12  Este programa es software libre; Usted puede usarlo bajo los términos de la
13  licencia de software GPL versión 2.0 de la Free Software Foundation.
14 
15  Este programa se distribuye con la esperanza de que sea útil, pero SIN
16  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
17  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
18  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
19  de la GPL junto con este programa; si no, escriba a la Free Software
20  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
21*/
22
23/*
24  Autor:             Alejandro J. Mujica
25  Fecha de creación: 01/08/2013
26  Este archivo contiene la definición de un conjunto de consultas a base de
27  datos utilizadas a lo largo del proyecto.
28*/
29
30# ifndef QUERIES_H
31# define QUERIES_H
32
33# include <common.H>
34# include <autoConnection.H>
35
36/** Encierra una cadena entre comillas simples.
37 *
38 * Utilizada para los campos de tipo cadena que se almacenan en base de datos.
39 *
40 * @param str cadena que se va a encerrar entre comillas simples.
41 * @return cadena encerrada entre comillas simples.
42 */
43std::string singleQuote(const std::string & str);
44
45/** Encierra una cadena entre comillas dobles.
46 *
47 * @param str cadena que se va a encerrar entre comillas simples.
48 * @return cadena encerrada entre comillas simples.
49 */
50std::string doubleQuote(const std::string & str);
51
52/** Concatena dos cadenas mediante un conector.
53 *
54 * Últil para concatenar nombres de tablas con nombres de campos.
55 * Ej: estudiante.id.
56 * 
57 * @param table nombre de la tabla.
58 * @param field nombre del campo.
59 * @param connector caracter que conectará a las dos cadenas.
60 * @return cadena concatenada.
61 */
62std::string concat(const std::string & table, const std::string & field,
63                   const char & connector = '.');
64
65/** Concatena "campo AS alias"
66 *
67 * @param field nombre del campo de la tabla.
68 * @param alias alias que se le asignará al campo.
69 * @return cadena concatenada.
70 */
71std::string as(const std::string & field, const std::string & alias);
72
73/** Concatena "tabla.campo AS alias"
74 *
75 * @param table nombre de la tabla.
76 * @param field nombre del campo de la tabla.
77 * @param alias alias que se le asignará al campo.
78 * @return cadena concatenada.
79 */
80std::string concatas(const std::string & table, const std::string & field,
81                     const std::string & alias);
82
83/** Concatena tabla y campo de la forma tabla.campo AS tabla_campo
84 *
85 * @param table nombre de la tabla.
86 * @param field nombre del campo de la tabla.
87 * @return cadena concatenada.
88 */
89std::string concatas(const std::string &, const std::string &);
90
91/** Concatena una operación de comparación para base de datos.
92 *
93 * @param field nombre del campo.
94 * @param value valor con el cual se va a comparar el campo.
95 * @param oper operador de comparación (=, <, <=, >, >= <>)
96 */
97std::string op(const std::string & field, const std::string & value,
98               const std::string & oper = "=");
99
100/** Convierte un campo id (de tipo long) en cadena.
101 *
102 * @param id valor numérico del id.
103 * @return valor del id convertido en cadena.
104 */
105std::string idToStr(const size_t & id);
106
107
108/** Concatena la operación field BETWEEN beg AND end (para fechas).
109 *
110 * @param field nombre del campo a evaluar.
111 * @param beg valor mínimo de comparación.
112 * @param end valor máximo de comparación.
113 * @return cadena concatenada.
114 */
115std::string between(const std::string & field, const std::string & beg,
116                    const std::string & end);
117
118/** Dados un campo y un año (en cadena), efectúa la operación between entre
119 *  el primer y el último día del año.
120 *
121 * @param field nombre del campo que se va a comparar.
122 * @param year valor del año.
123 * @return cadena concatenada.
124 */
125std::string inYear(const std::string & field, const std::string & year);
126
127/** Extrae de la base de datos toda la información de un producto con id dado.
128 *
129 * @param id id del producto que se quiere consultar.
130 * @return Objeto ProductInfo con toda la información del producto consultado.
131 */
132ProductInfo loadInfoByProductId(AutoConnection & conn, const size_t & id);
133
134/** Carga la lista de id de los insumos para un producto dado.
135 *
136 * @param[in] productId id del producto.
137 * @param[in] year año de declaración de la matriz.
138 * @param[out] inputIds Lista de enteros en la cual se van a escribir los ids
139 *             de los insumos.
140 */
141void listInputIds(AutoConnection & conn, const size_t & productId,
142                  const std::string & year, List <size_t> & inputIds);
143
144/** Carga a todos los proveedores de un insumo dado.
145 *
146 * @param[in] inputId id del insumo.
147 * @param[in] year año de la venta del insumo.
148 * @param[out] Lista de proveedores del insumo.
149 */
150void listInputs(AutoConnection & conn, const size_t & inputId,
151                const std::string & year, List <InputInfo> & inputs);
152
153
154/** Dado un proveedor, obtiene todos los posibles productos asociados a ese
155 *  proveedor que coincidan con el mismo código arancelario.
156 *
157 * @param[in] inputInfo información del insumo.
158 * @param[out] Lista de productos asociados al insumo.
159 */
160void productInfoFromInput(AutoConnection & conn, const InputInfo & inputInfo,
161                          List <ProductInfo> & list);
162
163/** Carga la lista de todos los productos que utilizan como insumo un producto
164 *  dado.
165 *
166 * @param[in] good bien del cual se requieren los que lo usan.
167 * @param[in] Año de declaración de la relación.
168 * @param[out] list Lista sobre la cual se escribirán los productos que lo usan
169 *              junto al id que se le asocia como insumo a good por cada uno.
170 */
171void listRequesters(AutoConnection & conn, Good * good,
172                    const std::string & year,
173                    List <Aleph::pair<ProductInfo, long>> & list);
174
175/** Consulta la candidad de insumo requerida para producir una unidad de
176 *  producto.
177 *
178 * @param inputId id del insumo.
179 * @param productId id del producto.
180 * @return cantidad de insumo para producir una unidad de producto.
181 */
182real getUnitarianRequest(AutoConnection & conn, const size_t & inputId,
183                         const size_t & productId);
184
185/** Carga la cantidad producida y el precio de un producto en un año dado.
186 *
187 * @param[in-out] good bien al cual se le efectúa la consulta y se le asignan
188 *                 los valores.
189 * @param year año de la producción.
190 */
191void getProducedQuantityAndPrice(AutoConnection & conn, Good * good,
192                                 const std::string & year);
193
194
195/** Carga la cantidad producida y el precio de un producto en un año dado.
196 *
197 * @param[in-out] info producto al cual se le efectúa la consulta y se le
198 *                 asignan los valores.
199 * @param year año de la producción.
200 */
201void getProducedQuantityAndPrice(AutoConnection & conn, ProductInfo & info,
202                                 const std::string & year);
203
204/** Calcula la cantidad que se le debe asignar a un arco que va hacia aguas
205 *  arriba.
206 *
207 * @param[in] src bien en el nodo fuente.
208 * @param[in] tgt bien en el nodo destino.
209 * @param[in] year año de la relación.
210 * @param[out] info Referencia a la información del arco
211 */
212void computeArcQuantityUpstream(AutoConnection & conn, Good * src, Good * tgt,
213                                const std::string & year, ArcInfo & info);
214
215/** Consulta la cantidad que un comprador declara que obtiene de un proveedor.
216 *
217 * @param rif R.I.F. del proveedor.
218 * @param inputId id del insumo.
219 * @param year año de la compra.
220 * @return cantidad de insumo declarado.
221 */
222real getDeclaredBoughtQuantity(AutoConnection & conn, const std::string & rif,
223                               const long & inputId, const std::string & year);
224
225/** Calcula la cantidad que se le debe asignar a un arco que va hacia aguas
226 *  abajo.
227 *
228 * @param[in] src bien en el nodo fuente.
229 * @param[in] tgt bien en el nodo destino.
230 * @param[in-out] arcInfo información del arco sobre la cual se van a escribir
231                  los resultados.
232 * @param[in] year año de la relación.
233 */
234void computeArcQuantityDownstream(AutoConnection & conn, Good * src, Good * tgt,
235                                  const std::string & year, ArcInfo & arcInfo);
236
237/** Consulta el precio declarado de compra para un insumo el cual no está
238 *  registrado en el sigesic como un producto.
239 *
240 * @param good Bien proveído.
241 * @param id id del insumo.
242 * @param year año de la compra.
243 * @return precio de compra del insumo.
244 */
245real getAcquisitionPrice(AutoConnection & conn, Good * good, const long & id,
246                         const std::string & year);
247
248/** Consulta el país de origen de una empresa.
249 *
250 * @param rif R.I.F. de la empresa.
251 * @return nombre del país de origen.
252 */
253std::string getOrigCountry(AutoConnection & conn, const long & supplierId);
254
255/** Consulta el país de procedencia de una empresa.
256 *
257 * @param rif R.I.F. de la empresa.
258 * @return nombre del país de procedencia.
259 */
260std::string getProcCountry(AutoConnection & conn, const long & supplierId);
261
262/** Carga una lista de posibles proveedores para un insumo.
263 *
264 * @param[in] tariffCode código arancelario del insumo.
265 * @param[in] year año de la venta.
266 * @param[out] list Lista de posibles proveedores.
267 */
268void listSuggestedSuppliers(AutoConnection & conn,
269                            const std::string & tariffCode,
270                            const std::string & year,
271                            List<ProductInfo> & list);
272
273/** Carga la lista de id de productos de un insumo dado.
274 *
275 * @param[in] id id del insumo.
276 * @param[in] año de la de las ventas.
277 * @param[out] ids lista de id de los productos.
278 */
279void listRealProductId(AutoConnection & conn, const long & id,
280                       const std::string & year, List<long> & ids);
281
282/** Consulta el nombre de un insumo.
283 *
284 * @param id id del insumo.
285 * @return nombre del insumo.
286 */
287std::string getInputName(AutoConnection & conn, const long & id);
288
289/** Consulta la ubicación de una planta.
290 *
291 * @param id id de la planta.
292 * @return ubicación de la planta.
293 */
294PlantLocation getPlantLocation(const long & id);
295
296/** Consulta el CIIU de una unidad económica.
297 *
298 * @param rif R.I.F. de la empresa.
299 * @return valor del CIIU de la actividad económica.
300 */
301std::string getCiiu(AutoConnection & conn, const std::string & rif);
302
303/** Consulta la cantidad de emplados operativos de una unidad económica.
304 *
305 *  @param rif R.I.F. de la empresa.
306 *  @param year Año máximo de la declaración.
307 *  @return cantidad de empleados en la unidad económica.
308 */
309real getOperatingStaffNumber(AutoConnection & conn, const std::string & rif,
310                             const std::string & year);
311
312/** Consulta el monto total producido por una empresa en un año dado.
313 *
314 *  @param rif R.I.F. de la empresa.
315 *  @param year Año de la producción.
316 *  @return monto total producido por la empresa.
317 */
318real getTotalAmount(AutoConnection & conn, const std::string & rif,
319                    const std::string & year);
320
321/** Extrae los años para los cuales existe una producción.
322 *
323 * @param[in]  productId Id del producto del cual se quiere consultar.
324 * @param[out] years Lista de años para los cuales hay producción declarada.
325 */
326void getProductionYears(AutoConnection & conn, const long productId,
327                        List<std::string> & years);
328
329struct CompanyRifName {
330    std::string rif;
331
332    std::string name;
333};
334
335/** Lista las empresas que tengan nombre parecido al dado.
336 *
337 * @param[in] company Nombre de la empresa.
338 * @param[out] list Lista de pares (rif, nombre) de cada empresa coincidente.
339 */
340void listCompaniesLike(AutoConnection & conn, const std::string & company,
341                       List <CompanyRifName> & list);
342
343struct ProductIdName {
344    long id;
345
346    std::string name;
347
348    std::string technicalSpecifications;
349};
350
351/** Lista todos los productos producidos por una empresa.
352 *
353 * @param[in] rif R.I.F. de la empresa.
354 * @param[out] list Lista de pares (id, nombre) de cada cada producto.
355 */
356void listProductsByCompany(AutoConnection & conn, const std::string & rif,
357                           List <ProductIdName> & list);
358
359void setArcMeasurementUnit(AutoConnection & conn, ArcInfo & info);
360
361# endif // QUERIES_H
362
Note: See TracBrowser for help on using the repository browser.