| 2154 | // |
| 2155 | |
| 2156 | static act* act_d_section(act_t type) |
| 2157 | { |
| 2158 | if (!MSC_match(KW_DECLARE)) |
| 2159 | CPR_s_error("DECLARE SECTION"); |
| 2160 | |
| 2161 | if (!MSC_match(KW_SECTION)) |
| 2162 | CPR_s_error("SECTION"); |
| 2163 | |
| 2164 | MSC_match(KW_SEMI_COLON); |
| 2165 | |
| 2166 | act* action = (act*) MSC_alloc(ACT_LEN); |
| 2167 | action->act_type = type; |
| 2168 | |
| 2169 | if (type == ACT_b_declare) |
| 2170 | gpreGlob.cur_routine = action; // Hmm, global var. |
| 2171 | |
| 2172 | if (!gpreGlob.isc_databases) |
| 2173 | { |
| 2174 | // allocate database block and link to db chain |
| 2175 | |
| 2176 | gpreGlob.isc_databases = (gpre_dbb*) MSC_alloc_permanent(DBB_LEN); |
| 2177 | |
| 2178 | // allocate symbol block |
| 2179 | |
| 2180 | gpre_sym* symbol = (gpre_sym*) MSC_alloc_permanent(SYM_LEN); |
| 2181 | |
| 2182 | // make it a database, specifically this one |
| 2183 | |
| 2184 | symbol->sym_type = SYM_database; |
| 2185 | symbol->sym_object = (gpre_ctx*) gpreGlob.isc_databases; |
| 2186 | symbol->sym_string = gpreGlob.database_name; |
| 2187 | |
| 2188 | // database block points to the symbol block |
| 2189 | |
| 2190 | gpreGlob.isc_databases->dbb_name = symbol; |
| 2191 | gpreGlob.isc_databases->dbb_filename = NULL; |
| 2192 | gpreGlob.isc_databases->dbb_flags = DBB_sqlca; |
| 2193 | gpreGlob.isc_databases->dbb_c_lc_ctype = gpreGlob.module_lc_ctype; |
| 2194 | if (gpreGlob.sw_external) |
| 2195 | gpreGlob.isc_databases->dbb_scope = DBB_EXTERN; |
| 2196 | } |
| 2197 | else |
| 2198 | { |
| 2199 | // Load up the symbol (hash) table with relation names from this database |
| 2200 | |
| 2201 | MET_load_hash_table(gpreGlob.isc_databases); |
| 2202 | } |
| 2203 | |
| 2204 | HSH_insert(gpreGlob.isc_databases->dbb_name); |
| 2205 | |
| 2206 | if (MSC_match(KW_SQL)) |
| 2207 | { |
| 2208 | if (!MSC_match(KW_NAMES)) |
| 2209 | CPR_s_error("NAMES ARE"); |
| 2210 | if (!MSC_match(KW_ARE)) |
| 2211 | CPR_s_error("NAMES ARE"); |
| 2212 | gpre_sym* symbol = MSC_find_symbol(gpreGlob.token_global.tok_symbol, SYM_charset); |
| 2213 | if (!symbol) |
no test coverage detected