| 2822 | // |
| 2823 | |
| 2824 | static act* act_drop() |
| 2825 | { |
| 2826 | act* action = NULL; |
| 2827 | gpre_dbb* db = NULL; |
| 2828 | gpre_req* request = NULL; |
| 2829 | gpre_rel* relation = NULL; |
| 2830 | TEXT* identifier_name; |
| 2831 | |
| 2832 | switch (gpreGlob.token_global.tok_keyword) |
| 2833 | { |
| 2834 | case KW_DATABASE: |
| 2835 | { |
| 2836 | PAR_error("DROP DATABASE not supported"); |
| 2837 | |
| 2838 | request = MSC_request(REQ_ddl); |
| 2839 | PAR_get_token(); |
| 2840 | if (!isQuoted(gpreGlob.token_global.tok_type)) |
| 2841 | CPR_s_error("<quoted database name>"); |
| 2842 | db = (gpre_dbb*) MSC_alloc(DBB_LEN); |
| 2843 | SCHAR* db_string = (TEXT*) MSC_alloc(gpreGlob.token_global.tok_length + 1); |
| 2844 | db->dbb_filename = db_string; |
| 2845 | MSC_copy(gpreGlob.token_global.tok_string, gpreGlob.token_global.tok_length, db_string); |
| 2846 | gpre_sym* symbol = PAR_symbol(SYM_dummy); |
| 2847 | db->dbb_name = symbol; |
| 2848 | symbol->sym_type = SYM_database; |
| 2849 | symbol->sym_object = (gpre_ctx*) db; |
| 2850 | action = MSC_action(request, ACT_drop_database); |
| 2851 | action->act_whenever = gen_whenever(); |
| 2852 | action->act_object = (ref*) db; |
| 2853 | PAR_get_token(); |
| 2854 | } |
| 2855 | return action; |
| 2856 | |
| 2857 | case KW_DOMAIN: |
| 2858 | request = MSC_request(REQ_ddl); |
| 2859 | if (gpreGlob.isc_databases && !gpreGlob.isc_databases->dbb_next) |
| 2860 | request->req_database = gpreGlob.isc_databases; |
| 2861 | else |
| 2862 | PAR_error("Can only DROP DOMAIN in context of single database"); |
| 2863 | PAR_get_token(); |
| 2864 | identifier_name = (TEXT*) MSC_alloc(NAME_SIZE + 1); |
| 2865 | SQL_resolve_identifier("<identifier>", identifier_name, NAME_SIZE + 1); |
| 2866 | if (gpreGlob.token_global.tok_length >= NAME_SIZE) |
| 2867 | PAR_error("Domain name too long"); |
| 2868 | |
| 2869 | action = MSC_action(request, ACT_drop_domain); |
| 2870 | action->act_whenever = gen_whenever(); |
| 2871 | action->act_object = (ref*) identifier_name; |
| 2872 | PAR_get_token(); |
| 2873 | return action; |
| 2874 | |
| 2875 | case KW_FILTER: |
| 2876 | request = MSC_request(REQ_ddl); |
| 2877 | if (gpreGlob.isc_databases && !gpreGlob.isc_databases->dbb_next) |
| 2878 | request->req_database = gpreGlob.isc_databases; |
| 2879 | else |
| 2880 | PAR_error("Can only DROP FILTER in context of single database"); |
| 2881 | PAR_get_token(); |
no test coverage detected