From: Dmitry Y. <di...@us...> - 2004-12-13 19:43:54
|
Build Version : T2.0.0.9891 Firebird 2.0 UNSTABLE (writeBuildNum.sh,v 1.9895 2004/12/13 19:43:43 dimitr Exp $ ) Update of /cvsroot/firebird/firebird2/src/jrd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5648 Modified Files: dyn_del.epp Log Message: Let's remove security class & privileges when a column is dropped. Index: dyn_del.epp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/dyn_del.epp,v retrieving revision 1.39 retrieving revision 1.40 diff -b -U3 -r1.39 -r1.40 --- dyn_del.epp 7 Nov 2004 14:26:20 -0000 1.39 +++ dyn_del.epp 13 Dec 2004 19:43:26 -0000 1.40 @@ -752,6 +752,11 @@ DYN_REQUEST(drq_e_lfield) = request; ERASE RFR; + + if (!RFR.RDB$SECURITY_CLASS.NULL + && !strncmp(RFR.RDB$SECURITY_CLASS, SQL_SECCLASS_PREFIX, SQL_SECCLASS_PREFIX_LEN)) + delete_security_class2(gbl, RFR.RDB$SECURITY_CLASS); + found = true; delete_gfield_for_lfield(gbl, RFR.RDB$FIELD_SOURCE); while (*(*ptr)++ != isc_dyn_end) { @@ -763,19 +768,41 @@ if (!DYN_REQUEST(drq_e_lfield)) { DYN_REQUEST(drq_e_lfield) = request; } + + request = CMP_find_request(tdbb, drq_e_usr_prvs, DYN_REQUESTS); + id = drq_e_usr_prvs; + + FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction) + PRIV IN RDB$USER_PRIVILEGES WITH + PRIV.RDB$RELATION_NAME EQ tbl_nm AND + PRIV.RDB$FIELD_NAME EQ col_nm AND + PRIV.RDB$OBJECT_TYPE = obj_relation + + if (!DYN_REQUEST(drq_e_usr_prvs)) + DYN_REQUEST(drq_e_usr_prvs) = request; + + ERASE PRIV; + END_FOR; + + if (!DYN_REQUEST(drq_e_usr_prvs)) { + DYN_REQUEST(drq_e_usr_prvs) = request; + } + } // try catch (const std::exception& ex) { Firebird::stuff_exception(tdbb->tdbb_status_vector, ex); DYN_rundown_request(request, -1); - if (id == drq_l_dep_flds) - { + + switch (id) { + case drq_l_dep_flds: DYN_error_punt(true, 53, NULL, NULL, NULL, NULL, NULL); - /* msg 53: "ERASE RDB$RELATION_FIELDS failed" */ - } - else - { + // msg 53: "ERASE RDB$RELATION_FIELDS failed" + case drq_e_usr_prvs: + DYN_error_punt(true, 62, NULL, NULL, NULL, NULL, NULL); + // msg 62: "ERASE RDB$USER_PRIVILEGES failed" + default: DYN_error_punt(true, 54, NULL, NULL, NULL, NULL, NULL); - /* msg 54: "ERASE RDB$RELATION_FIELDS failed" */ + // msg 54: "ERASE RDB$RELATION_FIELDS failed" } } @@ -1219,8 +1246,8 @@ id = drq_e_usr_prvs; FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction) - PRIV IN RDB$USER_PRIVILEGES WITH PRIV. - RDB$RELATION_NAME EQ relation_name AND + PRIV IN RDB$USER_PRIVILEGES WITH + PRIV.RDB$RELATION_NAME EQ relation_name AND PRIV.RDB$OBJECT_TYPE = obj_relation if (!DYN_REQUEST(drq_e_usr_prvs)) |