MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / act_drop

Function act_drop

src/gpre/sql.cpp:2824–2979  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2822//
2823
2824static 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();

Callers 1

SQL_actionFunction · 0.85

Calls 15

MSC_requestFunction · 0.85
PAR_get_tokenFunction · 0.85
isQuotedFunction · 0.85
CPR_s_errorFunction · 0.85
MSC_allocFunction · 0.85
MSC_copyFunction · 0.85
PAR_symbolFunction · 0.85
MSC_actionFunction · 0.85
SQL_resolve_identifierFunction · 0.85
MSC_matchFunction · 0.85
make_indexFunction · 0.85
EXP_USHORT_ordinalFunction · 0.85

Tested by

no test coverage detected