| 4212 | // |
| 4213 | |
| 4214 | static act* act_set_generator() |
| 4215 | { |
| 4216 | gpre_req* request = MSC_request(REQ_set_generator); |
| 4217 | |
| 4218 | if (gpreGlob.isc_databases && !gpreGlob.isc_databases->dbb_next) |
| 4219 | request->req_database = gpreGlob.isc_databases; |
| 4220 | else |
| 4221 | PAR_error("Can SET GENERATOR in context of single database only"); |
| 4222 | |
| 4223 | set_gen* setgen = (set_gen*) MSC_alloc(SGEN_LEN); |
| 4224 | setgen->sgen_name = (TEXT*) MSC_alloc(NAME_SIZE + 1); |
| 4225 | SQL_resolve_identifier("<identifier>", setgen->sgen_name, NAME_SIZE + 1); |
| 4226 | if (gpreGlob.token_global.tok_length >= NAME_SIZE) |
| 4227 | PAR_error("Generator name too long"); |
| 4228 | |
| 4229 | if (!MET_generator(setgen->sgen_name, request->req_database)) |
| 4230 | { |
| 4231 | SCHAR s[ERROR_LENGTH]; |
| 4232 | fb_utils::snprintf(s, sizeof(s), |
| 4233 | "generator %s not found", gpreGlob.token_global.tok_string); |
| 4234 | PAR_error(s); |
| 4235 | } |
| 4236 | PAR_get_token(); |
| 4237 | MSC_match(KW_TO); |
| 4238 | if ((gpreGlob.sw_sql_dialect == SQL_DIALECT_V5) || (gpreGlob.sw_server_version < 6)) |
| 4239 | { |
| 4240 | setgen->sgen_value = EXP_SLONG_ordinal(true); |
| 4241 | setgen->sgen_dialect = SQL_DIALECT_V5; |
| 4242 | } |
| 4243 | else |
| 4244 | { |
| 4245 | // dialect is > 1. Server can handle int64 |
| 4246 | |
| 4247 | setgen->sgen_int64value = EXP_SINT64_ordinal(true); |
| 4248 | setgen->sgen_dialect = SQL_DIALECT_V5 + 1; |
| 4249 | } |
| 4250 | |
| 4251 | act* action = (act*) MSC_action(request, ACT_s_start); |
| 4252 | action->act_whenever = gen_whenever(); |
| 4253 | action->act_object = (ref*) setgen; |
| 4254 | return action; |
| 4255 | } |
| 4256 | |
| 4257 | |
| 4258 | //____________________________________________________________ |
no test coverage detected