Added quantiling UDAFs
[com/gs-lite.git] / src / ftacmp / schemaparser_impl.h
1 /* ------------------------------------------------\r
2 Copyright 2014 AT&T Intellectual Property\r
3    Licensed under the Apache License, Version 2.0 (the "License");\r
4    you may not use this file except in compliance with the License.\r
5    You may obtain a copy of the License at\r
6 \r
7      http://www.apache.org/licenses/LICENSE-2.0\r
8 \r
9    Unless required by applicable law or agreed to in writing, software\r
10    distributed under the License is distributed on an "AS IS" BASIS,\r
11    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
12    See the License for the specific language governing permissions and\r
13    limitations under the License.\r
14  ------------------------------------------- */\r
15 #ifndef __INTERFACE_IMPL_INCLUDED__\r
16 #define __INTERFACE_IMPL_INCLUDED__\r
17 \r
18 #include"schemaparser.h"\r
19 \r
20 \r
21  #include"type_indicators.h"\r
22  #include"type_objects.h"\r
23  #include"parse_fta.h"\r
24  #include "gstypes.h"\r
25 \r
26 \r
27 \r
28 \r
29 //      access_result (access_fcn)(char *tuple, int offset);\r
30 class tuple_access_info{\r
31 public:\r
32         std::string field_name;\r
33         int offset;\r
34         data_type *pdt;\r
35 \r
36 \r
37         tuple_access_info(){\r
38                 pdt = NULL;\r
39                 offset = 0;\r
40         };\r
41 \r
42         int init(field_entry *fe){\r
43                 field_name = fe->get_name();\r
44                 pdt = new data_type(fe->get_type());\r
45                 return(pdt->type_indicator());\r
46         };\r
47 };\r
48 \r
49 class param_block_info{\r
50 public:\r
51         std::string param_name;\r
52         access_result value;\r
53         data_type *pdt;\r
54         unsigned int offset;\r
55         bool value_set;\r
56 \r
57         param_block_info(){\r
58                 pdt = NULL;\r
59                 offset = 0;\r
60                 value_set = false;\r
61         };\r
62 \r
63         int init(var_pair_t *vp){\r
64                 value_set = false;\r
65                 param_name = vp->name;\r
66                 pdt = new data_type(vp->val);\r
67                 switch(pdt->get_type()){\r
68                         case int_t:\r
69                                 value.r.i=0; break;\r
70                         case u_int_t:\r
71                         case u_short_t:\r
72                         case bool_t:\r
73                                 value.r.ui=0; break;\r
74                         case floating_t:\r
75                                 value.r.f = 0.0; break;\r
76                         case u_llong_t:\r
77                                 value.r.ul = 0; break;\r
78                         case llong_t:\r
79                                 value.r.l=0; break;\r
80                         case timeval_t:\r
81                                 value.r.t.tv_sec=0; value.r.t.tv_usec=0; break;\r
82                         case v_str_t:\r
83                                 value.r.vs.length = 0; value.r.vs.offset = 0; value.r.vs.reserved=0; break;\r
84                         case fstring_t:\r
85                                 value.r.fs.data = NULL;\r
86                                 value.r.fs.size = 0;\r
87                                 break;\r
88                         default:\r
89                                 break;\r
90                 }\r
91                 return(pdt->type_indicator());\r
92         };\r
93 };\r
94 \r
95 \r
96 \r
97 class query_rep{\r
98 public:\r
99         std::string name;\r
100 \r
101         std::vector<tuple_access_info> field_info;\r
102         int min_tuple_size;\r
103 \r
104         std::vector<param_block_info> param_info;\r
105         int min_param_size;\r
106 \r
107         query_rep(std::string nm, int ntuples, int nparams) :\r
108                 name(nm), field_info(ntuples), param_info(nparams) {\r
109                         min_tuple_size = 0;\r
110                         min_param_size = 0;\r
111         };\r
112 \r
113         int set_field_info(int f, field_entry *fe){\r
114                 if(f<0 || f>=field_info.size()) return(-1);\r
115                 return(field_info[f].init(fe));\r
116         };\r
117 \r
118         int finalize_field_info(){\r
119                 int f;\r
120                 int curr_pos = 0;\r
121                 int fld_undefined = 0;\r
122                 for(f=0;f<field_info.size();++f){\r
123                         field_info[f].offset = curr_pos;\r
124                         int sz = field_info[f].pdt->type_size();\r
125                         if(sz==0) fld_undefined = 1;\r
126                         curr_pos += sz;\r
127                 }\r
128                 min_tuple_size = curr_pos;\r
129                 if(fld_undefined) return(-1);\r
130                 else return(0);\r
131         };\r
132 \r
133         int set_param_info(int p, var_pair_t *vp){\r
134                 if(p<0 || p>=param_info.size()) return(-1);\r
135                 return(param_info[p].init(vp));\r
136         };\r
137 \r
138         int finalize_param_info(){\r
139                 int p;\r
140                 int curr_pos = 0;\r
141                 int fld_undefined = 0;\r
142                 for(p=0;p<param_info.size();++p){\r
143                         param_info[p].offset = curr_pos;\r
144                         int sz = param_info[p].pdt->type_size();\r
145                         if(sz==0) fld_undefined = 1;\r
146                         curr_pos += sz;\r
147                 }\r
148                 min_param_size = curr_pos;\r
149                 if(fld_undefined) return(-1);\r
150                 else return(0);\r
151         };\r
152 \r
153 \r
154 };\r
155 \r
156 //                      Diagnostic tool.\r
157 void ftaschema_debugdump(int sch_handle);\r
158 \r
159 #endif\r
160 \r