|
From: <asf...@us...> - 2011-11-13 21:32:21
|
Revision: 53627
http://firebird.svn.sourceforge.net/firebird/?rev=53627&view=rev
Author: asfernandes
Date: 2011-11-13 21:32:12 +0000 (Sun, 13 Nov 2011)
Log Message:
-----------
Refactor DDL commands: DROP INDEX, DROP FILTER, DROP SHADOW, CREATE/DROP ROLE and DROP USER.
Modified Paths:
--------------
firebird/trunk/builds/win32/msvc10/engine.vcxproj
firebird/trunk/builds/win32/msvc10/engine.vcxproj.filters
firebird/trunk/builds/win32/msvc9/engine.vcproj
firebird/trunk/builds/win32/preprocess.bat
firebird/trunk/lang_helpers/gds_codes.ftn
firebird/trunk/lang_helpers/gds_codes.pas
firebird/trunk/src/dsql/DdlNodes.epp
firebird/trunk/src/dsql/DdlNodes.h
firebird/trunk/src/dsql/ddl.cpp
firebird/trunk/src/dsql/node.h
firebird/trunk/src/dsql/parse.y
firebird/trunk/src/dsql/pass1.cpp
firebird/trunk/src/include/gen/codetext.h
firebird/trunk/src/include/gen/iberror.h
firebird/trunk/src/include/gen/msgs.h
firebird/trunk/src/include/gen/sql_code.h
firebird/trunk/src/include/gen/sql_state.h
firebird/trunk/src/jrd/dyn.epp
firebird/trunk/src/jrd/dyn.h
firebird/trunk/src/jrd/dyn_def.epp
firebird/trunk/src/jrd/dyn_df_proto.h
firebird/trunk/src/msgs/facilities2.sql
firebird/trunk/src/msgs/messages2.sql
firebird/trunk/src/msgs/system_errors2.sql
Removed Paths:
-------------
firebird/trunk/src/jrd/dyn_del.epp
firebird/trunk/src/jrd/dyn_dl_proto.h
Modified: firebird/trunk/builds/win32/msvc10/engine.vcxproj
===================================================================
--- firebird/trunk/builds/win32/msvc10/engine.vcxproj 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/builds/win32/msvc10/engine.vcxproj 2011-11-13 21:32:12 UTC (rev 53627)
@@ -26,7 +26,6 @@
<ClCompile Include="..\..\..\gen\jrd\dpm.cpp" />
<ClCompile Include="..\..\..\gen\jrd\dyn.cpp" />
<ClCompile Include="..\..\..\gen\jrd\dyn_def.cpp" />
- <ClCompile Include="..\..\..\gen\jrd\dyn_del.cpp" />
<ClCompile Include="..\..\..\gen\jrd\dyn_mod.cpp" />
<ClCompile Include="..\..\..\gen\jrd\dyn_util.cpp" />
<ClCompile Include="..\..\..\gen\jrd\fun.cpp" />
@@ -220,7 +219,6 @@
<ClInclude Include="..\..\..\src\jrd\drq.h" />
<ClInclude Include="..\..\..\src\jrd\dyn.h" />
<ClInclude Include="..\..\..\src\jrd\dyn_df_proto.h" />
- <ClInclude Include="..\..\..\src\jrd\dyn_dl_proto.h" />
<ClInclude Include="..\..\..\src\jrd\dyn_md_proto.h" />
<ClInclude Include="..\..\..\src\jrd\dyn_proto.h" />
<ClInclude Include="..\..\..\src\jrd\dyn_ut_proto.h" />
@@ -353,7 +351,6 @@
<None Include="..\..\..\src\jrd\dpm.epp" />
<None Include="..\..\..\src\jrd\dyn.epp" />
<None Include="..\..\..\src\jrd\dyn_def.epp" />
- <None Include="..\..\..\src\jrd\dyn_del.epp" />
<None Include="..\..\..\src\jrd\dyn_mod.epp" />
<None Include="..\..\..\src\jrd\dyn_util.epp" />
<None Include="..\..\..\src\jrd\fun.epp" />
Modified: firebird/trunk/builds/win32/msvc10/engine.vcxproj.filters
===================================================================
--- firebird/trunk/builds/win32/msvc10/engine.vcxproj.filters 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/builds/win32/msvc10/engine.vcxproj.filters 2011-11-13 21:32:12 UTC (rev 53627)
@@ -417,9 +417,6 @@
<ClCompile Include="..\..\..\gen\jrd\dyn_def.cpp">
<Filter>JRD files\GPRE cpp</Filter>
</ClCompile>
- <ClCompile Include="..\..\..\gen\jrd\dyn_del.cpp">
- <Filter>JRD files\GPRE cpp</Filter>
- </ClCompile>
<ClCompile Include="..\..\..\gen\jrd\dyn_mod.cpp">
<Filter>JRD files\GPRE cpp</Filter>
</ClCompile>
@@ -686,9 +683,6 @@
<ClInclude Include="..\..\..\src\jrd\dyn_df_proto.h">
<Filter>Header files</Filter>
</ClInclude>
- <ClInclude Include="..\..\..\src\jrd\dyn_dl_proto.h">
- <Filter>Header files</Filter>
- </ClInclude>
<ClInclude Include="..\..\..\src\jrd\dyn_md_proto.h">
<Filter>Header files</Filter>
</ClInclude>
@@ -1027,9 +1021,6 @@
<None Include="..\..\..\src\jrd\dyn_def.epp">
<Filter>JRD files\GPRE files</Filter>
</None>
- <None Include="..\..\..\src\jrd\dyn_del.epp">
- <Filter>JRD files\GPRE files</Filter>
- </None>
<None Include="..\..\..\src\jrd\dyn_mod.epp">
<Filter>JRD files\GPRE files</Filter>
</None>
Modified: firebird/trunk/builds/win32/msvc9/engine.vcproj
===================================================================
--- firebird/trunk/builds/win32/msvc9/engine.vcproj 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/builds/win32/msvc9/engine.vcproj 2011-11-13 21:32:12 UTC (rev 53627)
@@ -731,10 +731,6 @@
>
</File>
<File
- RelativePath="..\..\..\gen\jrd\dyn_del.cpp"
- >
- </File>
- <File
RelativePath="..\..\..\gen\jrd\dyn_mod.cpp"
>
</File>
@@ -791,10 +787,6 @@
>
</File>
<File
- RelativePath="..\..\..\src\jrd\dyn_del.epp"
- >
- </File>
- <File
RelativePath="..\..\..\src\jrd\dyn_mod.epp"
>
</File>
@@ -1044,10 +1036,6 @@
>
</File>
<File
- RelativePath="..\..\..\src\jrd\dyn_dl_proto.h"
- >
- </File>
- <File
RelativePath="..\..\..\src\jrd\dyn_md_proto.h"
>
</File>
Modified: firebird/trunk/builds/win32/preprocess.bat
===================================================================
--- firebird/trunk/builds/win32/preprocess.bat 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/builds/win32/preprocess.bat 2011-11-13 21:32:12 UTC (rev 53627)
@@ -67,7 +67,7 @@
@for %%i in (array, blob) do @call :PREPROCESS yvalve %%i
@for %%i in (metd, DdlNodes, PackageNodes) do @call :PREPROCESS dsql %%i -gds_cxx
@for %%i in (gpre_meta) do @call :PREPROCESS gpre/std %%i
-@for %%i in (dfw, dpm, dyn, dyn_def, dyn_del, dyn_mod, dyn_util, fun, grant, ini, met, pcmet, scl, Function) do @call :PREPROCESS jrd %%i -gds_cxx
+@for %%i in (dfw, dpm, dyn, dyn_def, dyn_mod, dyn_util, fun, grant, ini, met, pcmet, scl, Function) do @call :PREPROCESS jrd %%i -gds_cxx
@for %%i in (stats) do @call :PREPROCESS utilities %%i
@goto :EOF
@@ -81,7 +81,7 @@
@for %%i in (metd) do @call :PREPROCESS dsql %%i -gds_cxx
@for %%i in (DdlNodes, PackageNodes) do @call :PREPROCESS dsql %%i -gds_cxx
@for %%i in (gpre_meta) do @call :PREPROCESS gpre/std %%i
-@for %%i in (dfw, dpm, dyn, dyn_def, dyn_del, dyn_mod, dyn_util, fun, grant, ini, met, pcmet, scl, Function) do @call :PREPROCESS jrd %%i -gds_cxx
+@for %%i in (dfw, dpm, dyn, dyn_def, dyn_mod, dyn_util, fun, grant, ini, met, pcmet, scl, Function) do @call :PREPROCESS jrd %%i -gds_cxx
@for %%i in (codes) do @call :PREPROCESS misc %%i
@for %%i in (build_file) do @call :PREPROCESS msgs %%i
@for %%i in (help, meta, proc, show) do @call :PREPROCESS qli %%i
Modified: firebird/trunk/lang_helpers/gds_codes.ftn
===================================================================
--- firebird/trunk/lang_helpers/gds_codes.ftn 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/lang_helpers/gds_codes.ftn 2011-11-13 21:32:12 UTC (rev 53627)
@@ -2118,6 +2118,18 @@
PARAMETER (GDS__dsql_drop_sequence_failed = 336397303)
INTEGER*4 GDS__dsql_recreate_sequence_failed
PARAMETER (GDS__dsql_recreate_sequence_failed = 336397304)
+ INTEGER*4 GDS__dsql_drop_index_failed
+ PARAMETER (GDS__dsql_drop_index_failed = 336397305)
+ INTEGER*4 GDS__dsql_drop_filter_failed
+ PARAMETER (GDS__dsql_drop_filter_failed = 336397306)
+ INTEGER*4 GDS__dsql_drop_shadow_failed
+ PARAMETER (GDS__dsql_drop_shadow_failed = 336397307)
+ INTEGER*4 GDS__dsql_drop_role_failed
+ PARAMETER (GDS__dsql_drop_role_failed = 336397308)
+ INTEGER*4 GDS__dsql_drop_user_failed
+ PARAMETER (GDS__dsql_drop_user_failed = 336397309)
+ INTEGER*4 GDS__dsql_create_role_failed
+ PARAMETER (GDS__dsql_create_role_failed = 336397310)
INTEGER*4 GDS__gsec_cant_open_db
PARAMETER (GDS__gsec_cant_open_db = 336723983)
INTEGER*4 GDS__gsec_switches_error
Modified: firebird/trunk/lang_helpers/gds_codes.pas
===================================================================
--- firebird/trunk/lang_helpers/gds_codes.pas 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/lang_helpers/gds_codes.pas 2011-11-13 21:32:12 UTC (rev 53627)
@@ -1066,6 +1066,12 @@
gds_dsql_drop_view_failed = 336397302;
gds_dsql_drop_sequence_failed = 336397303;
gds_dsql_recreate_sequence_failed = 336397304;
+ gds_dsql_drop_index_failed = 336397305;
+ gds_dsql_drop_filter_failed = 336397306;
+ gds_dsql_drop_shadow_failed = 336397307;
+ gds_dsql_drop_role_failed = 336397308;
+ gds_dsql_drop_user_failed = 336397309;
+ gds_dsql_create_role_failed = 336397310;
gds_gsec_cant_open_db = 336723983;
gds_gsec_switches_error = 336723984;
gds_gsec_no_op_spec = 336723985;
Modified: firebird/trunk/src/dsql/DdlNodes.epp
===================================================================
--- firebird/trunk/src/dsql/DdlNodes.epp 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/dsql/DdlNodes.epp 2011-11-13 21:32:12 UTC (rev 53627)
@@ -39,9 +39,10 @@
#include "../jrd/IntlManager.h"
#include "../jrd/PreparedStatement.h"
#include "../jrd/ResultSet.h"
+#include "../jrd/UserManagement.h"
#include "../jrd/blb_proto.h"
#include "../jrd/cmp_proto.h"
-#include "../common/dsc_proto.h"
+#include "../jrd/dfw_proto.h"
#include "../jrd/dyn_dl_proto.h"
#include "../jrd/dyn_ut_proto.h"
#include "../jrd/exe_proto.h"
@@ -56,8 +57,30 @@
#include "../dsql/make_proto.h"
#include "../dsql/metd_proto.h"
#include "../dsql/pass1_proto.h"
+#include "../utilities/gsec/gsec.h"
+#include "../common/dsc_proto.h"
#include "../common/StatusArg.h"
+namespace
+{
+ class DynamicUserData : public Firebird::VersionedIface<Auth::UserData, FB_AUTH_USER_VERSION>
+ {
+ public:
+
+#ifdef DEBUG_GDS_ALLOC
+ void* operator new(size_t size, Firebird::MemoryPool& pool, const char* fileName, int line)
+ {
+ return pool.allocate(size, fileName, line);
+ }
+#else // DEBUG_GDS_ALLOC
+ void* operator new(size_t size, Firebird::MemoryPool& pool)
+ {
+ return pool.allocate(size);
+ }
+#endif // DEBUG_GDS_ALLOC
+ };
+} // namespace
+
namespace Jrd {
using namespace Firebird;
@@ -8734,5 +8757,336 @@
return found;
}
+void DropIndexNode::print(string& text, Array<dsql_nod*>& /*nodes*/) const
+{
+ text.printf(
+ "DropIndexNode\n"
+ " name: '%s'\n",
+ name.c_str());
+}
+void DropIndexNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction)
+{
+ // run all statements under savepoint control
+ AutoSavePoint savePoint(tdbb, transaction);
+
+ AutoCacheRequest request(tdbb, drq_e_indices, DYN_REQUESTS);
+ bool found = false;
+
+ FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction)
+ IDX IN RDB$INDICES
+ WITH IDX.RDB$INDEX_NAME EQ name.c_str()
+ {
+ executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_BEFORE,
+ DDL_TRIGGER_DROP_INDEX, name);
+
+ ERASE IDX;
+
+ if (IDX.RDB$EXPRESSION_BLR.NULL && !deleteSegmentRecords(tdbb, transaction, name))
+ {
+ // msg 50: "No segments found for index"
+ status_exception::raise(Arg::Gds(ENCODE_ISC_MSG(50, DYN_MSG_FAC)));
+ }
+
+ found = true;
+ }
+ END_FOR
+
+ if (found)
+ executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_AFTER, DDL_TRIGGER_DROP_INDEX, name);
+ else
+ {
+ // msg 48: "Index not found"
+ status_exception::raise(Arg::Gds(ENCODE_ISC_MSG(48, DYN_MSG_FAC)));
+ }
+
+ savePoint.release(); // everything is ok
+}
+
+
+//----------------------
+
+
+void DropFilterNode::print(string& text, Array<dsql_nod*>& /*nodes*/) const
+{
+ text.printf(
+ "DropFilterNode\n"
+ " name: '%s'\n",
+ name.c_str());
+}
+
+void DropFilterNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction)
+{
+ // run all statements under savepoint control
+ AutoSavePoint savePoint(tdbb, transaction);
+
+ AutoCacheRequest request(tdbb, drq_e_filters, DYN_REQUESTS);
+ bool found = false;
+
+ FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction)
+ X IN RDB$FILTERS
+ WITH X.RDB$FUNCTION_NAME EQ name.c_str()
+ {
+ ERASE X;
+ found = true;
+ }
+ END_FOR
+
+ if (!found)
+ {
+ // msg 37: "Blob Filter %s not found"
+ status_exception::raise(Arg::Gds(ENCODE_ISC_MSG(37, DYN_MSG_FAC)) << name);
+ }
+
+ savePoint.release(); // everything is ok
+}
+
+
+//----------------------
+
+
+void DropShadowNode::print(string& text, Array<dsql_nod*>& /*nodes*/) const
+{
+ text.printf(
+ "DropShadowNode\n"
+ " number: '%d'\n",
+ number);
+}
+
+void DropShadowNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction)
+{
+ if (!tdbb->getAttachment()->locksmith())
+ status_exception::raise(Arg::Gds(isc_adm_task_denied));
+
+ // run all statements under savepoint control
+ AutoSavePoint savePoint(tdbb, transaction);
+
+ AutoCacheRequest request(tdbb, drq_e_shadow, DYN_REQUESTS);
+
+ FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction)
+ FIL IN RDB$FILES
+ WITH FIL.RDB$SHADOW_NUMBER EQ number
+ {
+ ERASE FIL;
+ }
+ END_FOR
+
+ // ASF: No error is raised if the shadow is not found.
+
+ savePoint.release(); // everything is ok
+}
+
+
+//----------------------
+
+
+void CreateRoleNode::print(string& text, Array<dsql_nod*>& /*nodes*/) const
+{
+ text.printf(
+ "CreateRoleNode\n"
+ " name: '%s'\n",
+ name.c_str());
+}
+
+void CreateRoleNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction)
+{
+ MetaName ownerName(tdbb->getAttachment()->att_user->usr_user_name);
+ ownerName.upper7();
+
+ // run all statements under savepoint control
+ AutoSavePoint savePoint(tdbb, transaction);
+
+ executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_BEFORE,
+ DDL_TRIGGER_CREATE_ROLE, name);
+
+ if (name == ownerName)
+ {
+ // msg 193: "user name could not be used for SQL role"
+ status_exception::raise(Arg::Gds(ENCODE_ISC_MSG(193, DYN_MSG_FAC)) << ownerName);
+ }
+
+ if (name == NULL_ROLE)
+ {
+ // msg 195: "keyword NONE could not be used as SQL role name"
+ status_exception::raise(Arg::Gds(ENCODE_ISC_MSG(195, DYN_MSG_FAC)) << name);
+ }
+
+ if (isItUserName(tdbb, transaction))
+ {
+ // msg 193: "user name could not be used for SQL role"
+ status_exception::raise(Arg::Gds(ENCODE_ISC_MSG(193, DYN_MSG_FAC)) << name);
+ }
+
+ MetaName dummyName;
+ if (DYN_is_it_sql_role(transaction, name, dummyName, tdbb))
+ {
+ // msg 194: "SQL role @1 already exists"
+ status_exception::raise(Arg::Gds(ENCODE_ISC_MSG(194, DYN_MSG_FAC)) << name);
+ }
+
+ AutoCacheRequest request(tdbb, drq_role_gens, DYN_REQUESTS);
+
+ STORE(REQUEST_HANDLE request TRANSACTION_HANDLE transaction)
+ X IN RDB$ROLES
+ {
+ strcpy(X.RDB$ROLE_NAME, name.c_str());
+ strcpy(X.RDB$OWNER_NAME, ownerName.c_str());
+ X.RDB$SYSTEM_FLAG = 0;
+ }
+ END_STORE
+
+ executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_AFTER,
+ DDL_TRIGGER_CREATE_ROLE, name);
+
+ savePoint.release(); // everything is ok
+}
+
+// If role name is user name returns true. Otherwise returns false.
+bool CreateRoleNode::isItUserName(thread_db* tdbb, jrd_tra* transaction)
+{
+ bool found = false;
+
+ // If there is a user with privilege or a grantor on a relation we
+ // can infer there is a user with this name
+
+ AutoCacheRequest request(tdbb, drq_get_user_priv, DYN_REQUESTS);
+
+ FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction)
+ PRIV IN RDB$USER_PRIVILEGES
+ WITH (PRIV.RDB$USER EQ name.c_str() AND PRIV.RDB$USER_TYPE = obj_user) OR
+ (PRIV.RDB$GRANTOR EQ name.c_str() AND PRIV.RDB$OBJECT_TYPE = obj_relation)
+ {
+ found = true;
+ }
+ END_FOR
+
+ if (found)
+ return found;
+
+ // We can infer that 'role name' is a user name if it owns any relations
+ // Note we can only get here if a user creates a table and revokes all
+ // his privileges on the table
+
+ request.reset(tdbb, drq_get_rel_owner, DYN_REQUESTS);
+
+ FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction)
+ REL IN RDB$RELATIONS
+ WITH REL.RDB$OWNER_NAME EQ name.c_str()
+ {
+ found = true;
+ }
+ END_FOR
+
+ return found;
+}
+
+
+//----------------------
+
+
+void DropRoleNode::print(string& text, Array<dsql_nod*>& /*nodes*/) const
+{
+ text.printf(
+ "DropRoleNode\n"
+ " name: '%s'\n",
+ name.c_str());
+}
+
+void DropRoleNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction)
+{
+ MetaName user(tdbb->getAttachment()->att_user->usr_user_name);
+ user.upper7();
+
+ // run all statements under savepoint control
+ AutoSavePoint savePoint(tdbb, transaction);
+
+ AutoCacheRequest request(tdbb, drq_drop_role, DYN_REQUESTS);
+ bool found = false;
+
+ FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction)
+ ROL IN RDB$ROLES
+ WITH ROL.RDB$ROLE_NAME EQ name.c_str()
+ {
+ executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_BEFORE,
+ DDL_TRIGGER_DROP_ROLE, name);
+
+ const MetaName roleOwner(ROL.RDB$OWNER_NAME);
+
+ if (tdbb->getAttachment()->locksmith() || roleOwner == user)
+ {
+ AutoCacheRequest request2(tdbb, drq_del_role_1, DYN_REQUESTS);
+
+ // The first OR clause finds all members of the role.
+ // The 2nd OR clause finds all privileges granted to the role
+ FOR(REQUEST_HANDLE request2 TRANSACTION_HANDLE transaction)
+ PRIV IN RDB$USER_PRIVILEGES
+ WITH (PRIV.RDB$RELATION_NAME EQ name.c_str() AND PRIV.RDB$OBJECT_TYPE = obj_sql_role) OR
+ (PRIV.RDB$USER EQ name.c_str() AND PRIV.RDB$USER_TYPE = obj_sql_role)
+ {
+ ERASE PRIV;
+ }
+ END_FOR
+
+ ERASE ROL;
+ }
+ else
+ {
+ // msg 191: "only owner of SQL role or USR_locksmith could drop SQL role"
+ status_exception::raise(Arg::Gds(ENCODE_ISC_MSG(191, DYN_MSG_FAC)));
+ }
+
+ found = true;
+ }
+ END_FOR
+
+ if (found)
+ executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_AFTER, DDL_TRIGGER_DROP_ROLE, name);
+ else
+ {
+ // msg 155: "Role %s not found"
+ status_exception::raise(Arg::Gds(ENCODE_ISC_MSG(155, DYN_MSG_FAC)) << name);
+ }
+
+ savePoint.release(); // everything is ok
+}
+
+
+//----------------------
+
+
+void DropUserNode::print(string& text, Array<dsql_nod*>& /*nodes*/) const
+{
+ text.printf(
+ "DropUserNode\n"
+ " name: '%s'\n",
+ name.c_str());
+}
+
+void DropUserNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction)
+{
+ // run all statements under savepoint control
+ AutoSavePoint savePoint(tdbb, transaction);
+
+ DynamicUserData* userData = FB_NEW(*transaction->tra_pool) DynamicUserData;
+
+ string text = name.c_str();
+ text.upper();
+
+ userData->op = DEL_OPER;
+ userData->user.set(text.c_str());
+ userData->user.setEntered(1);
+
+ executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_BEFORE, DDL_TRIGGER_DROP_USER,
+ userData->user.get());
+
+ USHORT id = transaction->getUserManagement()->put(userData);
+ DFW_post_work(transaction, dfw_user_management, NULL, id);
+
+ executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_AFTER, DDL_TRIGGER_DROP_USER,
+ userData->user.get());
+
+ savePoint.release(); // everything is ok
+}
+
+
} // namespace Jrd
Modified: firebird/trunk/src/dsql/DdlNodes.h
===================================================================
--- firebird/trunk/src/dsql/DdlNodes.h 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/dsql/DdlNodes.h 2011-11-13 21:32:12 UTC (rev 53627)
@@ -1245,14 +1245,156 @@
};
-class DropIndexNode
+class DropIndexNode : public DdlNode
{
public:
+ DropIndexNode(MemoryPool& p, const Firebird::MetaName& aName)
+ : DdlNode(p),
+ name(p, aName)
+ {
+ }
+
static bool deleteSegmentRecords(thread_db* tdbb, jrd_tra* transaction,
const Firebird::MetaName& name);
+
+public:
+ virtual void print(Firebird::string& text, Firebird::Array<dsql_nod*>& nodes) const;
+ virtual void execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction);
+
+protected:
+ virtual void putErrorPrefix(Firebird::Arg::StatusVector& statusVector)
+ {
+ statusVector << Firebird::Arg::Gds(isc_dsql_drop_index_failed) << name;
+ }
+
+public:
+ Firebird::MetaName name;
};
+class DropFilterNode : public DdlNode
+{
+public:
+ DropFilterNode(MemoryPool& p, const Firebird::MetaName& aName)
+ : DdlNode(p),
+ name(p, aName)
+ {
+ }
+
+public:
+ virtual void print(Firebird::string& text, Firebird::Array<dsql_nod*>& nodes) const;
+ virtual void execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction);
+
+protected:
+ virtual void putErrorPrefix(Firebird::Arg::StatusVector& statusVector)
+ {
+ statusVector << Firebird::Arg::Gds(isc_dsql_drop_filter_failed) << name;
+ }
+
+public:
+ Firebird::MetaName name;
+};
+
+
+class DropShadowNode : public DdlNode
+{
+public:
+ DropShadowNode(MemoryPool& p, const SSHORT aNumber)
+ : DdlNode(p),
+ number(aNumber)
+ {
+ }
+
+public:
+ virtual void print(Firebird::string& text, Firebird::Array<dsql_nod*>& nodes) const;
+ virtual void execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction);
+
+protected:
+ virtual void putErrorPrefix(Firebird::Arg::StatusVector& statusVector)
+ {
+ statusVector << Firebird::Arg::Gds(isc_dsql_drop_shadow_failed) << Firebird::Arg::Num(number);
+ }
+
+public:
+ SSHORT number;
+};
+
+
+class CreateRoleNode : public DdlNode
+{
+public:
+ CreateRoleNode(MemoryPool& p, const Firebird::MetaName& aName)
+ : DdlNode(p),
+ name(p, aName)
+ {
+ }
+
+public:
+ virtual void print(Firebird::string& text, Firebird::Array<dsql_nod*>& nodes) const;
+ virtual void execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction);
+
+protected:
+ virtual void putErrorPrefix(Firebird::Arg::StatusVector& statusVector)
+ {
+ statusVector << Firebird::Arg::Gds(isc_dsql_create_role_failed) << name;
+ }
+
+private:
+ bool isItUserName(thread_db* tdbb, jrd_tra* transaction);
+
+public:
+ Firebird::MetaName name;
+};
+
+
+class DropRoleNode : public DdlNode
+{
+public:
+ DropRoleNode(MemoryPool& p, const Firebird::MetaName& aName)
+ : DdlNode(p),
+ name(p, aName)
+ {
+ }
+
+public:
+ virtual void print(Firebird::string& text, Firebird::Array<dsql_nod*>& nodes) const;
+ virtual void execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction);
+
+protected:
+ virtual void putErrorPrefix(Firebird::Arg::StatusVector& statusVector)
+ {
+ statusVector << Firebird::Arg::Gds(isc_dsql_drop_role_failed) << name;
+ }
+
+public:
+ Firebird::MetaName name;
+};
+
+
+class DropUserNode : public DdlNode
+{
+public:
+ DropUserNode(MemoryPool& p, const Firebird::MetaName& aName)
+ : DdlNode(p),
+ name(p, aName)
+ {
+ }
+
+public:
+ virtual void print(Firebird::string& text, Firebird::Array<dsql_nod*>& nodes) const;
+ virtual void execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction);
+
+protected:
+ virtual void putErrorPrefix(Firebird::Arg::StatusVector& statusVector)
+ {
+ statusVector << Firebird::Arg::Gds(isc_dsql_drop_user_failed) << name;
+ }
+
+public:
+ Firebird::MetaName name;
+};
+
+
} // namespace
#endif // DSQL_DDL_NODES_H
Modified: firebird/trunk/src/dsql/ddl.cpp
===================================================================
--- firebird/trunk/src/dsql/ddl.cpp 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/dsql/ddl.cpp 2011-11-13 21:32:12 UTC (rev 53627)
@@ -119,7 +119,6 @@
static void define_database(DsqlCompilerScratch*);
static void define_filter(DsqlCompilerScratch*);
static SSHORT getBlobFilterSubType(DsqlCompilerScratch* dsqlScratch, const dsql_nod* node);
-static void define_role(DsqlCompilerScratch*);
static void define_index(DsqlCompilerScratch*);
static void define_shadow(DsqlCompilerScratch*);
static void generate_dyn(DsqlCompilerScratch*, dsql_nod*);
@@ -925,22 +924,7 @@
}
-// ******************************
-// d e f i n e _ r o l e
-// ******************************
-// Create a SQL role.
//
-static void define_role(DsqlCompilerScratch* dsqlScratch)
-{
- DsqlCompiledStatement* statement = dsqlScratch->getStatement();
- const dsql_str* role_name = (dsql_str*) statement->getDdlNode()->nod_arg[0];
-
- dsqlScratch->appendNullString(isc_dyn_def_sql_role, role_name->str_data);
- dsqlScratch->appendUChar(isc_dyn_end);
-}
-
-
-//
// create a shadow for the database
//
static void define_shadow(DsqlCompilerScratch* dsqlScratch)
@@ -1016,37 +1000,15 @@
define_index(dsqlScratch);
break;
- case nod_del_index:
- string = (dsql_str*) node->nod_arg[0];
- dsqlScratch->appendNullString(isc_dyn_delete_idx, string->str_data);
- dsqlScratch->appendUChar(isc_dyn_end);
- break;
-
- case nod_del_role:
- string = (dsql_str*) node->nod_arg[0];
- dsqlScratch->appendNullString(isc_dyn_del_sql_role, string->str_data);
- dsqlScratch->appendUChar(isc_dyn_end);
- break;
-
case nod_grant:
case nod_revoke:
grant_revoke(dsqlScratch);
break;
- case nod_def_role:
- define_role(dsqlScratch);
- break;
-
case nod_def_filter:
define_filter(dsqlScratch);
break;
- case nod_del_filter:
- string = (dsql_str*) node->nod_arg[0];
- dsqlScratch->appendNullString(isc_dyn_delete_filter, string->str_data);
- dsqlScratch->appendUChar(isc_dyn_end);
- break;
-
case nod_del_udf:
string = (dsql_str*) node->nod_arg[0];
dsqlScratch->appendNullString(isc_dyn_delete_function, string->str_data);
@@ -1057,11 +1019,6 @@
define_shadow(dsqlScratch);
break;
- case nod_del_shadow:
- dsqlScratch->appendNumber(isc_dyn_delete_shadow, (SSHORT) (IPTR) node->nod_arg[0]);
- dsqlScratch->appendUChar(isc_dyn_end);
- break;
-
case nod_mod_database:
modify_database(dsqlScratch);
break;
@@ -1094,10 +1051,6 @@
define_user(dsqlScratch, isc_dyn_user_mod);
break;
- case nod_del_user:
- define_user(dsqlScratch, isc_dyn_user_del);
- break;
-
default: // CVC: Shouldn't we complain here?
break;
}
@@ -1640,7 +1593,7 @@
}
}
- if (argCount < 2 && op != isc_dyn_user_del)
+ if (argCount < 2)
{
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-104) <<
// Unexpected end of command
Modified: firebird/trunk/src/dsql/node.h
===================================================================
--- firebird/trunk/src/dsql/node.h 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/dsql/node.h 2011-11-13 21:32:12 UTC (rev 53627)
@@ -67,12 +67,9 @@
nod_mod_field,
nod_del_field,
nod_def_index,
- nod_del_index,
nod_def_constraint,
nod_def_filter,
- nod_del_filter,
nod_def_shadow,
- nod_del_shadow,
nod_del_udf,
nod_grant,
nod_revoke,
@@ -134,10 +131,8 @@
nod_set_statistics, // set statistics
nod_ref_upd_del, // referential integrity actions
nod_ref_trig_action,
- nod_def_role, // SQL role support
nod_role_name,
nod_grant_admin,
- nod_del_role,
nod_mod_field_name,
nod_mod_field_type,
nod_mod_field_pos,
@@ -156,7 +151,6 @@
nod_mod_role,
nod_add_user,
nod_mod_user,
- nod_del_user,
nod_dfl_collate,
nod_trg_act,
nod_trg_ext,
Modified: firebird/trunk/src/dsql/parse.y
===================================================================
--- firebird/trunk/src/dsql/parse.y 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/dsql/parse.y 2011-11-13 21:32:12 UTC (rev 53627)
@@ -714,8 +714,8 @@
%type <legacyNode> delete_rule delimiter_opt derived_column_list derived_table
%type <legacyNode> deterministic_opt distinct_clause
%type <legacyNode> domain_default domain_default_opt domain_or_non_array_type
-%type <legacyNode> domain_or_non_array_type_name domain_type drop drop_behaviour
-%type <legacyNode> drop_clause drop_user_clause
+%type <legacyNode> domain_or_non_array_type_name domain_type drop_behaviour
+%type <ddlNode> drop drop_clause
%type <legacyStr> db_name ddl_desc
%type <legacyNode> event_argument_opt exception_clause
@@ -972,6 +972,7 @@
| delete
{ $$ = makeClassNode($1); }
| drop
+ { $$ = makeClassNode($1); }
| grant
| insert
{ $$ = makeClassNode($1); }
@@ -1532,7 +1533,7 @@
// CREATE ROLE
role_clause
- : symbol_role_name { $$ = make_node (nod_def_role, (int) 1, $1); }
+ : symbol_role_name { $$ = makeClassNode(newNode<CreateRoleNode>(toName($1))); }
;
@@ -3509,47 +3510,48 @@
// DROP metadata operations
-drop : DROP drop_clause
- { $$ = $2; }
- ;
+drop
+ : DROP drop_clause
+ { $$ = $2; }
+ ;
drop_clause
: EXCEPTION symbol_exception_name
- { $$ = makeClassNode(newNode<DropExceptionNode>(toName($2))); }
+ { $$ = newNode<DropExceptionNode>(toName($2)); }
| INDEX symbol_index_name
- { $$ = make_node (nod_del_index, (int) 1, $2); }
+ { $$ = newNode<DropIndexNode>(toName($2)); }
| PROCEDURE symbol_procedure_name
- { $$ = makeClassNode(newNode<DropProcedureNode>(toName($2))); }
+ { $$ = newNode<DropProcedureNode>(toName($2)); }
| TABLE symbol_table_name
- { $$ = makeClassNode(newNode<DropRelationNode>(toName($2), false)); }
+ { $$ = newNode<DropRelationNode>(toName($2), false); }
| TRIGGER symbol_trigger_name
- { $$ = makeClassNode(newNode<DropTriggerNode>(toName($2))); }
+ { $$ = newNode<DropTriggerNode>(toName($2)); }
| VIEW symbol_view_name
- { $$ = makeClassNode(newNode<DropRelationNode>(toName($2), true)); }
+ { $$ = newNode<DropRelationNode>(toName($2), true); }
| FILTER symbol_filter_name
- { $$ = make_node (nod_del_filter, (int) 1, $2); }
+ { $$ = newNode<DropFilterNode>(toName($2)); }
| DOMAIN symbol_domain_name
- { $$ = makeClassNode(newNode<DropDomainNode>(toName($2))); }
+ { $$ = newNode<DropDomainNode>(toName($2)); }
| EXTERNAL FUNCTION symbol_UDF_name
- { $$ = makeClassNode(newNode<DropFunctionNode>(toName($3))); }
+ { $$ = newNode<DropFunctionNode>(toName($3)); }
| FUNCTION symbol_UDF_name
- { $$ = makeClassNode(newNode<DropFunctionNode>(toName($2))); }
+ { $$ = newNode<DropFunctionNode>(toName($2)); }
| SHADOW pos_short_integer
- { $$ = make_node (nod_del_shadow, (int) 1, (dsql_nod*)(IPTR) $2); }
+ { $$ = newNode<DropShadowNode>($2); }
| ROLE symbol_role_name
- { $$ = make_node (nod_del_role, (int) 1, $2); }
+ { $$ = newNode<DropRoleNode>(toName($2)); }
| GENERATOR symbol_generator_name
- { $$ = makeClassNode(FB_NEW(getPool()) DropSequenceNode(getPool(), toName($2))); }
+ { $$ = newNode<DropSequenceNode>(toName($2)); }
| SEQUENCE symbol_generator_name
- { $$ = makeClassNode(FB_NEW(getPool()) DropSequenceNode(getPool(), toName($2))); }
+ { $$ = newNode<DropSequenceNode>(toName($2)); }
| COLLATION symbol_collation_name
- { $$ = makeClassNode(newNode<DropCollationNode>(toName($2))); }
- | USER drop_user_clause
- { $$ = $2; }
+ { $$ = newNode<DropCollationNode>(toName($2)); }
+ | USER symbol_user_name
+ { $$ = newNode<DropUserNode>(toName($2)); }
| PACKAGE symbol_package_name
- { $$ = makeClassNode(newNode<DropPackageNode>(toName($2))); }
+ { $$ = newNode<DropPackageNode>(toName($2)); }
| PACKAGE BODY symbol_package_name
- { $$ = makeClassNode(newNode<DropPackageBodyNode>(toName($3))); }
+ { $$ = newNode<DropPackageBodyNode>(toName($3)); }
;
@@ -5329,10 +5331,6 @@
{ $$ = make_node(nod_mod_user, (int) e_user_count, $1, $3, $4, $5, $6, $7); }
;
-drop_user_clause
- : symbol_user_name { $$ = make_node(nod_del_user, (int) e_del_user_count, $1); }
- ;
-
passwd_clause
: PASSWORD sql_string { $$ = $2; }
;
Modified: firebird/trunk/src/dsql/pass1.cpp
===================================================================
--- firebird/trunk/src/dsql/pass1.cpp 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/dsql/pass1.cpp 2011-11-13 21:32:12 UTC (rev 53627)
@@ -897,25 +897,19 @@
case nod_def_index:
case nod_mod_index:
- case nod_del_index:
case nod_def_constraint:
case nod_grant:
case nod_revoke:
case nod_mod_database:
- case nod_def_role:
- case nod_del_role:
case nod_def_filter:
- case nod_del_filter:
case nod_def_domain:
case nod_del_udf:
case nod_def_shadow:
- case nod_del_shadow:
case nod_set_statistics:
case nod_mod_udf:
case nod_mod_role:
case nod_add_user:
case nod_mod_user:
- case nod_del_user:
dsqlScratch->getStatement()->setType(DsqlCompiledStatement::TYPE_DDL);
return input;
@@ -4773,12 +4767,6 @@
case nod_del_field:
verb = "delete field";
break;
- case nod_del_filter:
- verb = "delete filter";
- break;
- case nod_del_index:
- verb = "delete index";
- break;
case nod_execute:
verb = "execute";
break;
@@ -4884,9 +4872,6 @@
case nod_def_shadow:
verb = "def_shadow";
break;
- case nod_del_shadow:
- verb = "del_shadow";
- break;
case nod_del_udf:
verb = "del_udf";
break;
@@ -4986,18 +4971,12 @@
case nod_ref_trig_action:
verb = "ref_trig_action";
break;
- case nod_def_role:
- verb = "def_role";
- break;
case nod_role_name:
verb = "role_name";
break;
case nod_grant_admin:
verb = "grant_admin";
break;
- case nod_del_role:
- verb = "del_role";
- break;
case nod_mod_field_name:
verb = "mod_field_name";
break;
@@ -5081,10 +5060,6 @@
verb = "mod_user";
break;
- case nod_del_user:
- verb = "del_user";
- break;
-
case nod_class_exprnode:
case nod_class_stmtnode:
reinterpret_cast<Node*>(node->nod_arg[0])->print(verb, subNodes);
Modified: firebird/trunk/src/include/gen/codetext.h
===================================================================
--- firebird/trunk/src/include/gen/codetext.h 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/include/gen/codetext.h 2011-11-13 21:32:12 UTC (rev 53627)
@@ -1055,6 +1055,12 @@
{"dsql_drop_view_failed", 336397302},
{"dsql_drop_sequence_failed", 336397303},
{"dsql_recreate_sequence_failed", 336397304},
+ {"dsql_drop_index_failed", 336397305},
+ {"dsql_drop_filter_failed", 336397306},
+ {"dsql_drop_shadow_failed", 336397307},
+ {"dsql_drop_role_failed", 336397308},
+ {"dsql_drop_user_failed", 336397309},
+ {"dsql_create_role_failed", 336397310},
{"gsec_cant_open_db", 336723983},
{"gsec_switches_error", 336723984},
{"gsec_no_op_spec", 336723985},
Modified: firebird/trunk/src/include/gen/iberror.h
===================================================================
--- firebird/trunk/src/include/gen/iberror.h 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/include/gen/iberror.h 2011-11-13 21:32:12 UTC (rev 53627)
@@ -1089,6 +1089,12 @@
const ISC_STATUS isc_dsql_drop_view_failed = 336397302L;
const ISC_STATUS isc_dsql_drop_sequence_failed = 336397303L;
const ISC_STATUS isc_dsql_recreate_sequence_failed = 336397304L;
+const ISC_STATUS isc_dsql_drop_index_failed = 336397305L;
+const ISC_STATUS isc_dsql_drop_filter_failed = 336397306L;
+const ISC_STATUS isc_dsql_drop_shadow_failed = 336397307L;
+const ISC_STATUS isc_dsql_drop_role_failed = 336397308L;
+const ISC_STATUS isc_dsql_drop_user_failed = 336397309L;
+const ISC_STATUS isc_dsql_create_role_failed = 336397310L;
const ISC_STATUS isc_gsec_cant_open_db = 336723983L;
const ISC_STATUS isc_gsec_switches_error = 336723984L;
const ISC_STATUS isc_gsec_no_op_spec = 336723985L;
@@ -1190,7 +1196,7 @@
const ISC_STATUS isc_trace_switch_param_miss = 337182758L;
const ISC_STATUS isc_trace_param_act_notcompat = 337182759L;
const ISC_STATUS isc_trace_mandatory_switch_miss = 337182760L;
-const ISC_STATUS isc_err_max = 1134;
+const ISC_STATUS isc_err_max = 1140;
#else /* c definitions */
@@ -2249,6 +2255,12 @@
#define isc_dsql_drop_view_failed 336397302L
#define isc_dsql_drop_sequence_failed 336397303L
#define isc_dsql_recreate_sequence_failed 336397304L
+#define isc_dsql_drop_index_failed 336397305L
+#define isc_dsql_drop_filter_failed 336397306L
+#define isc_dsql_drop_shadow_failed 336397307L
+#define isc_dsql_drop_role_failed 336397308L
+#define isc_dsql_drop_user_failed 336397309L
+#define isc_dsql_create_role_failed 336397310L
#define isc_gsec_cant_open_db 336723983L
#define isc_gsec_switches_error 336723984L
#define isc_gsec_no_op_spec 336723985L
@@ -2350,7 +2362,7 @@
#define isc_trace_switch_param_miss 337182758L
#define isc_trace_param_act_notcompat 337182759L
#define isc_trace_mandatory_switch_miss 337182760L
-#define isc_err_max 1134
+#define isc_err_max 1140
#endif
Modified: firebird/trunk/src/include/gen/msgs.h
===================================================================
--- firebird/trunk/src/include/gen/msgs.h 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/include/gen/msgs.h 2011-11-13 21:32:12 UTC (rev 53627)
@@ -1058,6 +1058,12 @@
{336397302, "DROP VIEW @1 failed"}, /* dsql_drop_view_failed */
{336397303, "DROP SEQUENCE @1 failed"}, /* dsql_drop_sequence_failed */
{336397304, "RECREATE SEQUENCE @1 failed"}, /* dsql_recreate_sequence_failed */
+ {336397305, "DROP INDEX @1 failed"}, /* dsql_drop_index_failed */
+ {336397306, "DROP FILTER @1 failed"}, /* dsql_drop_filter_failed */
+ {336397307, "DROP SHADOW @1 failed"}, /* dsql_drop_shadow_failed */
+ {336397308, "DROP ROLE @1 failed"}, /* dsql_drop_role_failed */
+ {336397309, "DROP USER @1 failed"}, /* dsql_drop_user_failed */
+ {336397310, "CREATE ROLE @1 failed"}, /* dsql_create_role_failed */
{336723983, "unable to open database"}, /* gsec_cant_open_db */
{336723984, "error in switch specifications"}, /* gsec_switches_error */
{336723985, "no operation specified"}, /* gsec_no_op_spec */
Modified: firebird/trunk/src/include/gen/sql_code.h
===================================================================
--- firebird/trunk/src/include/gen/sql_code.h 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/include/gen/sql_code.h 2011-11-13 21:32:12 UTC (rev 53627)
@@ -1054,6 +1054,12 @@
{336397302, -901}, /* 1014 dsql_drop_view_failed */
{336397303, -901}, /* 1015 dsql_drop_sequence_failed */
{336397304, -901}, /* 1016 dsql_recreate_sequence_failed */
+ {336397305, -901}, /* 1017 dsql_drop_index_failed */
+ {336397306, -901}, /* 1018 dsql_drop_filter_failed */
+ {336397307, -901}, /* 1019 dsql_drop_shadow_failed */
+ {336397308, -901}, /* 1020 dsql_drop_role_failed */
+ {336397309, -901}, /* 1021 dsql_drop_user_failed */
+ {336397310, -901}, /* 1022 dsql_create_role_failed */
{336723983, -901}, /* 15 gsec_cant_open_db */
{336723984, -901}, /* 16 gsec_switches_error */
{336723985, -901}, /* 17 gsec_no_op_spec */
Modified: firebird/trunk/src/include/gen/sql_state.h
===================================================================
--- firebird/trunk/src/include/gen/sql_state.h 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/include/gen/sql_state.h 2011-11-13 21:32:12 UTC (rev 53627)
@@ -1054,6 +1054,12 @@
{336397302, "42000"}, // 1014 dsql_drop_view_failed
{336397303, "42000"}, // 1015 dsql_drop_sequence_failed
{336397304, "42000"}, // 1016 dsql_recreate_sequence_failed
+ {336397305, "42000"}, // 1017 dsql_drop_index_failed
+ {336397306, "42000"}, // 1018 dsql_drop_filter_failed
+ {336397307, "42000"}, // 1019 dsql_drop_shadow_failed
+ {336397308, "42000"}, // 1020 dsql_drop_role_failed
+ {336397309, "42000"}, // 1021 dsql_drop_user_failed
+ {336397310, "42000"}, // 1022 dsql_create_role_failed
{336723983, "00000"}, // 15 gsec_cant_open_db
{336723984, "00000"}, // 16 gsec_switches_error
{336723985, "00000"}, // 17 gsec_no_op_spec
Modified: firebird/trunk/src/jrd/dyn.epp
===================================================================
--- firebird/trunk/src/jrd/dyn.epp 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/jrd/dyn.epp 2011-11-13 21:32:12 UTC (rev 53627)
@@ -270,7 +270,7 @@
}
-bool DYN_is_it_sql_role(Global* gbl,
+bool DYN_is_it_sql_role(jrd_tra* transaction,
const MetaName& input_name,
MetaName& output_name,
thread_db* tdbb)
@@ -293,7 +293,7 @@
AutoCacheRequest request(tdbb, drq_get_role_nm, DYN_REQUESTS);
- FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
+ FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction)
X IN RDB$ROLES WITH
X.RDB$ROLE_NAME EQ input_name.c_str()
{
@@ -384,30 +384,14 @@
DYN_define_filter(gbl, ptr);
break;
- case isc_dyn_delete_filter:
- DYN_delete_filter(gbl, ptr);
- break;
-
case isc_dyn_mod_function:
DYN_modify_function(gbl, ptr);
break;
- case isc_dyn_def_sql_role:
- DYN_define_role(gbl, ptr);
- break;
-
- case isc_dyn_del_sql_role:
- DYN_delete_role(gbl, ptr);
- break;
-
case isc_dyn_def_shadow:
DYN_define_shadow(gbl, ptr);
break;
- case isc_dyn_delete_shadow:
- DYN_delete_shadow(gbl, ptr);
- break;
-
case isc_dyn_def_idx:
DYN_define_index(gbl, ptr, relation_name);
break;
@@ -416,10 +400,6 @@
DYN_modify_index(gbl, ptr);
break;
- case isc_dyn_delete_idx:
- DYN_delete_index(gbl, ptr);
- break;
-
case isc_dyn_mapping:
DYN_modify_mapping(gbl, ptr);
break;
@@ -720,28 +700,6 @@
}
-USHORT DYN_skip_attribute(const UCHAR** ptr)
-{
-/**************************************
- *
- * D Y N _ s k i p _ a t t r i b u t e
- *
- **************************************
- *
- * Functional description
- * Skip over attribute returning length (excluding
- * size of count bytes).
- *
- **************************************/
- const UCHAR* p = *ptr;
- USHORT length = *p++;
- length |= (*p++) << 8;
- *ptr = p + length;
-
- return length;
-}
-
-
static void grant( Global* gbl, const UCHAR** ptr)
{
/**************************************
@@ -813,7 +771,7 @@
case isc_dyn_grant_user:
GET_STRING(ptr, user);
// This test may become obsolete as we now allow explicit ROLE keyword.
- if (DYN_is_it_sql_role(gbl, user, dummy_name, tdbb))
+ if (DYN_is_it_sql_role(gbl->gbl_transaction, user, dummy_name, tdbb))
{
user_type = obj_sql_role;
if (user == NULL_ROLE)
@@ -838,7 +796,7 @@
case isc_dyn_grant_role:
user_type = obj_sql_role;
GET_STRING(ptr, user);
- if (!DYN_is_it_sql_role(gbl, user, dummy_name, tdbb))
+ if (!DYN_is_it_sql_role(gbl->gbl_transaction, user, dummy_name, tdbb))
{
DYN_error_punt(false, 188, user.c_str());
// msg 188: Role doesn't exist.
@@ -1351,7 +1309,7 @@
// Fetch the name of the owner of the ROLE
MetaName owner;
- if (DYN_is_it_sql_role(gbl, role_name, owner, tdbb))
+ if (DYN_is_it_sql_role(gbl->gbl_transaction, role_name, owner, tdbb))
{
// Both SYSDBA and the owner of this ROLE can grant membership
if (tdbb->getAttachment()->locksmith() || owner == grantor)
@@ -1502,7 +1460,7 @@
case isc_dyn_grant_user:
GET_STRING(ptr, user);
// This test may become obsolete as we now allow explicit ROLE keyword.
- if (DYN_is_it_sql_role(gbl, user, dummy_name, tdbb))
+ if (DYN_is_it_sql_role(gbl->gbl_transaction, user, dummy_name, tdbb))
{
user_type = obj_sql_role;
if (user == NULL_ROLE)
@@ -1527,7 +1485,7 @@
case isc_dyn_grant_role:
user_type = obj_sql_role;
GET_STRING(ptr, user);
- if (!DYN_is_it_sql_role(gbl, user, dummy_name, tdbb))
+ if (!DYN_is_it_sql_role(gbl->gbl_transaction, user, dummy_name, tdbb))
{
DYN_error_punt(false, 188, user.c_str());
// msg 188: Role doesn't exist.
@@ -1741,7 +1699,7 @@
case isc_dyn_grant_user:
GET_STRING(ptr, user);
// This test may become obsolete as we now allow explicit ROLE keyword.
- if (DYN_is_it_sql_role(gbl, user, dummy_name, tdbb))
+ if (DYN_is_it_sql_role(gbl->gbl_transaction, user, dummy_name, tdbb))
{
user_type = obj_sql_role;
if (user == NULL_ROLE)
@@ -1766,7 +1724,7 @@
case isc_dyn_grant_role:
GET_STRING(ptr, user);
user_type = obj_sql_role;
- if (!DYN_is_it_sql_role(gbl, user, dummy_name, tdbb)) {
+ if (!DYN_is_it_sql_role(gbl->gbl_transaction, user, dummy_name, tdbb)) {
DYN_error_punt(false, 188, user.c_str()); // msg 188: Role doesn't exist.
}
if (user == NULL_ROLE)
@@ -1948,7 +1906,7 @@
**************************************
*
* Functional description
- * Implements CREATE/ALTER/DROP USER
+ * Implements CREATE/ALTER USER
*
**************************************/
thread_db* tdbb = JRD_get_thread_data();
@@ -1997,13 +1955,6 @@
userData->user.setEntered(1);
break;
- case isc_dyn_user_del:
- text.upper();
- userData->op = DEL_OPER;
- userData->user.set(text.c_str());
- userData->user.setEntered(1);
- break;
-
case isc_dyn_user_passwd:
if (text.isEmpty())
{
@@ -2072,10 +2023,6 @@
case MOD_OPER:
ddlAction = DDL_TRIGGER_ALTER_USER;
break;
-
- case DEL_OPER:
- ddlAction = DDL_TRIGGER_DROP_USER;
- break;
}
if (ddlAction != 0)
Modified: firebird/trunk/src/jrd/dyn.h
===================================================================
--- firebird/trunk/src/jrd/dyn.h 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/jrd/dyn.h 2011-11-13 21:32:12 UTC (rev 53627)
@@ -113,12 +113,10 @@
USHORT DYN_get_string(const UCHAR**, Firebird::UCharBuffer&, size_t);
USHORT DYN_get_string(const UCHAR**, TEXT*, size_t);
-bool DYN_is_it_sql_role(Jrd::Global*, const Firebird::MetaName&, Firebird::MetaName&, Jrd::thread_db*);
+bool DYN_is_it_sql_role(Jrd::jrd_tra*, const Firebird::MetaName&, Firebird::MetaName&, Jrd::thread_db*);
USHORT DYN_put_blr_blob(Jrd::Global*, const UCHAR**, Jrd::bid*);
USHORT DYN_put_text_blob(Jrd::Global*, const UCHAR**, Jrd::bid*);
-USHORT DYN_skip_attribute(const UCHAR**);
-
void DYN_unsupported_verb();
#endif // JRD_DYN_H
Modified: firebird/trunk/src/jrd/dyn_def.epp
===================================================================
--- firebird/trunk/src/jrd/dyn_def.epp 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/jrd/dyn_def.epp 2011-11-13 21:32:12 UTC (rev 53627)
@@ -100,9 +100,7 @@
DATABASE DB = STATIC "ODS.RDB";
-static bool is_it_user_name(Global*, const Firebird::MetaName&, thread_db*);
-
void DYN_define_file(Global* gbl,
const UCHAR** ptr,
SLONG shadow_number,
@@ -463,99 +461,6 @@
}
-void DYN_define_role( Global* gbl, const UCHAR** ptr)
-{
-/**************************************
- *
- * D Y N _ d e f i n e _ r o l e
- *
- **************************************
- *
- * Functional description
- *
- * Define a SQL role.
- * ROLES cannot be named the same as any existing user name
- *
- **************************************/
- thread_db* tdbb = JRD_get_thread_data();
-
- Firebird::MetaName owner_name(tdbb->getAttachment()->att_user->usr_user_name);
- owner_name.upper7();
-
- Firebird::MetaName role_name;
- GET_STRING(ptr, role_name);
-
- DdlNode::executeDdlTrigger(tdbb, gbl->gbl_transaction, DdlNode::DTW_BEFORE,
- DDL_TRIGGER_CREATE_ROLE, role_name, gbl->sqlText);
-
- if (role_name == owner_name)
- {
- // user name could not be used for SQL role
- DYN_error(false, 193, SafeArg() << owner_name.c_str());
- ERR_punt();
- }
-
- if (role_name == NULL_ROLE)
- {
- // keyword NONE could not be used as SQL role name
- DYN_error(false, 195, SafeArg() << role_name.c_str());
- ERR_punt();
- }
-
- try {
-
- if (is_it_user_name(gbl, role_name, tdbb))
- {
- // user name could not be used for SQL role
- DYN_error(false, 193, SafeArg() << role_name.c_str());
- goto do_err_punt;
- }
-
- Firebird::MetaName dummy_name;
- if (DYN_is_it_sql_role(gbl, role_name, dummy_name, tdbb))
- {
- // SQL role @1 already exists
- DYN_error(false, 194, SafeArg() << role_name.c_str());
- goto do_err_punt;
- }
-
- AutoCacheRequest request(tdbb, drq_role_gens, DYN_REQUESTS);
-
- STORE(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
- X IN RDB$ROLES
- {
- strcpy(X.RDB$ROLE_NAME, role_name.c_str());
- strcpy(X.RDB$OWNER_NAME, owner_name.c_str());
- X.RDB$SYSTEM_FLAG = 0;
- X.RDB$SYSTEM_FLAG.NULL = FALSE;
- }
- END_STORE
-
- if (*(*ptr)++ != isc_dyn_end)
- goto do_error_punt_9;
- }
- catch (const Firebird::Exception& ex)
- {
- Firebird::stuff_exception(tdbb->tdbb_status_vector, ex);
- DYN_error_punt(true, 8);
- // msg 8: "DEFINE ROLE failed"
- }
-
- DdlNode::executeDdlTrigger(tdbb, gbl->gbl_transaction, DdlNode::DTW_AFTER,
- DDL_TRIGGER_CREATE_ROLE, role_name, gbl->sqlText);
-
- return;
-
-do_err_punt:
- ERR_punt();
- return;
-
-do_error_punt_9:
- DYN_error_punt(true, 9);
- // msg 9: "DEFINE ROLE unexpected dyn verb"
-}
-
-
void DYN_define_shadow( Global* gbl, const UCHAR** ptr)
{
/**************************************
@@ -616,69 +521,3 @@
}
}
}
-
-
-bool is_it_user_name(Global* gbl, const Firebird::MetaName& role_name, thread_db* tdbb)
-{
-/**************************************
- *
- * i s _ i t _ u s e r _ n a m e
- *
- **************************************
- *
- * Functional description
- *
- * if role_name is user name returns true. Otherwise returns false.
- *
- **************************************/
-
- USHORT request_id;
-
- SET_TDBB(tdbb);
- bool found = false;
-
- try {
-
- // If there is a user with privilege or a grantor on a relation we
- // can infer there is a user with this name
-
- request_id = drq_get_user_priv;
- AutoCacheRequest request(tdbb, request_id, DYN_REQUESTS);
-
- FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
- PRIV IN RDB$USER_PRIVILEGES WITH
- (PRIV.RDB$USER EQ role_name.c_str() AND
- PRIV.RDB$USER_TYPE = obj_user) OR
- (PRIV.RDB$GRANTOR EQ role_name.c_str() AND
- PRIV.RDB$OBJECT_TYPE = obj_relation)
- {
- found = true;
- }
- END_FOR
-
- if (found)
- return found;
-
- // We can infer that 'role_name' is a user name if it owns any relations
- // Note we can only get here if a user creates a table and revokes all
- // his privileges on the table
-
- request_id = drq_get_rel_owner;
- request.reset(tdbb, request_id, DYN_REQUESTS);
-
- FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
- REL IN RDB$RELATIONS WITH
- REL.RDB$OWNER_NAME EQ role_name.c_str()
- {
- found = true;
- }
- END_FOR
- }
- catch (const Firebird::Exception& ex)
- {
- Firebird::stuff_exception(tdbb->tdbb_status_vector, ex);
- ERR_punt();
- }
-
- return found;
-}
Deleted: firebird/trunk/src/jrd/dyn_del.epp
===================================================================
--- firebird/trunk/src/jrd/dyn_del.epp 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/jrd/dyn_del.epp 2011-11-13 21:32:12 UTC (rev 53627)
@@ -1,346 +0,0 @@
-/*
- * PROGRAM: JRD Data Definition Utility
- * MODULE: dyn_delete.epp
- * DESCRIPTION: Dynamic data definition - DYN_delete_<x>
- *
- * The contents of this file are subject to the Interbase Public
- * License Version 1.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy
- * of the License at http://www.Inprise.com/IPL.html
- *
- * Software distributed under the License is distributed on an
- * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
- * or implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Code was created by Inprise Corporation
- * and its predecessors. Portions created by Inprise Corporation are
- * Copyright (C) Inprise Corporation.
- *
- * All Rights Reserved.
- * Contributor(s): ______________________________________.
- *
- * 24-May-2001 Claudio Valderrama - Forbid zero length identifiers,
- * they are not ANSI SQL compliant.
- * 23-May-2001 Claudio Valderrama - Move here DYN_delete_role.
- * 20-Jun-2001 Claudio Valderrama - Make available DYN_delete_generator.
- */
-
-#include "firebird.h"
-#include "dyn_consts.h"
-#include <stdio.h>
-#include <string.h>
-
-#include "../common/common.h"
-#include "../dsql/DdlNodes.h"
-#include "../jrd/jrd.h"
-#include "../jrd/ods.h"
-#include "../jrd/tra.h"
-#include "../jrd/scl.h"
-#include "../jrd/drq.h"
-#include "../jrd/flags.h"
-#include "../jrd/ibase.h"
-#include "../jrd/lls.h"
-#include "../jrd/met.h"
-#include "../jrd/btr.h"
-#include "../jrd/intl.h"
-#include "../jrd/dyn.h"
-#include "../jrd/blb_proto.h"
-#include "../jrd/cmp_proto.h"
-#include "../jrd/dyn_proto.h"
-#include "../jrd/dyn_proto.h"
-#include "../jrd/dyn_dl_proto.h"
-#include "../jrd/err_proto.h"
-#include "../jrd/exe_proto.h"
-#include "../yvalve/gds_proto.h"
-#include "../jrd/inf_proto.h"
-#include "../jrd/intl_proto.h"
-#include "../common/isc_f_proto.h"
-#include "../jrd/met_proto.h"
-#include "../jrd/vio_proto.h"
-#include "../common/utils_proto.h"
-
-using MsgFormat::SafeArg;
-
-using namespace Jrd;
-using namespace Firebird;
-
-
-DATABASE DB = STATIC "ODS.RDB";
-
-
-void DYN_delete_filter( Global* gbl, const UCHAR** ptr)
-{
-/**************************************
- *
- * D Y N _ d e l e t e _ f i l t e r
- *
- **************************************
- *
- * Functional description
- * Execute a dynamic ddl statement that
- * deletes a blob filter.
- *
- **************************************/
- thread_db* tdbb = JRD_get_thread_data();
-
- AutoCacheRequest request(tdbb, drq_e_filters, DYN_REQUESTS);
-
- bool found = false;
-
- Firebird::MetaName f;
- GET_STRING(ptr, f);
-
- try
- {
- found = false;
- FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
- X IN RDB$FILTERS WITH X.RDB$FUNCTION_NAME = f.c_str()
- {
- ERASE X;
- found = true;
- }
- END_FOR
- }
- catch (const Firebird::Exception& ex)
- {
- Firebird::stuff_exception(tdbb->tdbb_status_vector, ex);
- DYN_error_punt(true, 36);
- // msg 36: "ERASE BLOB FILTER failed"
- }
-
- if (!found)
- {
- DYN_error_punt(false, 37, f.c_str());
- // msg 37: "Blob Filter %s not found"
- }
-
- if (*(*ptr)++ != isc_dyn_end) {
- DYN_unsupported_verb();
- }
-}
-
-
-void DYN_delete_index( Global* gbl, const UCHAR** ptr)
-{
-/**************************************
- *
- * D Y N _ d e l e t e _ i n d e x
- *
- **************************************
- *
- * Functional description
- * Execute a dynamic ddl statement that
- * deletes an index.
- *
- **************************************/
- Firebird::MetaName idx_name, rel_name;
-
- thread_db* tdbb = JRD_get_thread_data();
-
- AutoCacheRequest request(tdbb, drq_e_indices, DYN_REQUESTS);
-
- bool found = false;
- bool is_expression = false;
-
- try
- {
- GET_STRING(ptr, idx_name);
-
- found = false;
- FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
- IDX IN RDB$INDICES WITH IDX.RDB$INDEX_NAME EQ idx_name.c_str()
- {
- rel_name = IDX.RDB$RELATION_NAME;
- found = true;
-
- DdlNode::executeDdlTrigger(tdbb, gbl->gbl_transaction, DdlNode::DTW_BEFORE,
- DDL_TRIGGER_DROP_INDEX, idx_name, gbl->sqlText);
-
- is_expression = !IDX.RDB$EXPRESSION_BLR.NULL;
- ERASE IDX;
- }
- END_FOR
- } //try
- catch (const Firebird::Exception& ex)
- {
- Firebird::stuff_exception(tdbb->tdbb_status_vector, ex);
- DYN_error_punt(true, 47);
- // msg 47: "ERASE RDB$INDICES failed"
- }
-
- if (found)
- {
- DdlNode::executeDdlTrigger(tdbb, gbl->gbl_transaction, DdlNode::DTW_AFTER,
- DDL_TRIGGER_DROP_INDEX, idx_name, gbl->sqlText);
- }
- else
- {
- DYN_error_punt(false, 48);
- // msg 48: "Index not found"
- }
-
- if (!is_expression)
- if (!DropIndexNode::deleteSegmentRecords(tdbb, gbl->gbl_transaction, idx_name))
- {
- DYN_error_punt(false, 50);
- // msg 50: "No segments found for index"
- }
-
- while (*(*ptr)++ != isc_dyn_end)
- {
- --(*ptr);
- DYN_execute(gbl, ptr, &rel_name, NULL, NULL, NULL, NULL);
- }
-}
-
-
-void DYN_delete_role( Global* gbl, const UCHAR** ptr)
-{
-/**************************************
- *
- * D Y N _ d e l e t e _ r o l e
- *
- **************************************
- *
- * Functional description
- *
- * Execute a dynamic ddl statement that deletes a role with all its
- * members of the role.
- *
- **************************************/
- int id = -1;
- Firebird::MetaName role_name;
-
- thread_db* tdbb = JRD_get_thread_data();
-
- bool found = false;
-
- try
- {
- Firebird::MetaName user(tdbb->getAttachment()->att_user->usr_user_name);
- user.upper7();
-
- GET_STRING(ptr, role_name);
-
- AutoCacheRequest request(tdbb, drq_drop_role, DYN_REQUESTS);
- id = drq_drop_role;
-
- bool del_role_ok = true;
-
- FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
- XX IN RDB$ROLES WITH
- XX.RDB$ROLE_NAME EQ role_name.c_str()
- {
- found = true;
-
- DdlNode::executeDdlTrigger(tdbb, gbl->gbl_transaction, DdlNode::DTW_BEFORE,
- DDL_TRIGGER_DROP_ROLE, role_name, gbl->sqlText);
-
- const Firebird::MetaName role_owner(XX.RDB$OWNER_NAME);
-
- if (tdbb->getAttachment()->locksmith() || role_owner == user)
- {
- ERASE XX;
- }
- else
- {
- del_role_ok = false;
- }
- }
- END_FOR
-
- if (del_role_ok)
- {
- request.reset(tdbb, drq_del_role_1, DYN_REQUESTS);
- id = drq_del_role_1;
-
- // The first OR clause finds all members of the role.
- // The 2nd OR clause finds all privileges granted to the role
- FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
- PRIV IN RDB$USER_PRIVILEGES WITH
- (PRIV.RDB$RELATION_NAME EQ role_name.c_str() AND
- PRIV.RDB$OBJECT_TYPE = obj_sql_role)
- OR (PRIV.RDB$USER EQ role_name.c_str() AND
- PRIV.RDB$USER_TYPE = obj_sql_role)
- {
- ERASE PRIV;
- }
- END_FOR
- }
- else
- {
- DYN_error(false, 191, SafeArg() << user.c_str() << role_name.c_str());
- // only owner of SQL role or USR_locksmith could drop SQL role
- goto do_punt;
- }
- } // try
- catch (const Firebird::Exception& ex)
- {
- Firebird::stuff_exception(tdbb->tdbb_status_vector, ex);
- const USHORT number = (id == drq_drop_role ? 191 : 62);
- // msg 191: "ERASE RDB$ROLES failed"
- // msg 62: "ERASE RDB$USER_PRIVILEGES failed"
- DYN_error_punt(true, number);
- }
-
- if (found)
- {
- DdlNode::executeDdlTrigger(tdbb, gbl->gbl_transaction, DdlNode::DTW_AFTER,
- DDL_TRIGGER_DROP_ROLE, role_name, gbl->sqlText);
- }
- else
- {
- DYN_error_punt(false, 155, role_name.c_str());
- // msg 155: "Role %s not found"
- }
-
- return;
-
-do_punt: // ugly, rethink logic of this function
- ERR_punt();
-}
-
-
-void DYN_delete_shadow( Global* gbl, const UCHAR** ptr)
-{
-/**************************************
- *
- * D Y N _ d e l e t e _ s h a d o w
- *
- **************************************
- *
- * Functional description
- * Delete a shadow.
- *
- **************************************/
- thread_db* tdbb = JRD_get_thread_data();
-
- if (!tdbb->getAttachment()->locksmith())
- {
- ERR_post(Arg::Gds(isc_adm_task_denied));
- }
-
- AutoCacheRequest request(tdbb, drq_e_shadow, DYN_REQUESTS);
-
- try
- {
- const int shadow_number = DYN_get_number(ptr);
- FOR(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
- FIL IN RDB$FILES WITH FIL.RDB$SHADOW_NUMBER EQ shadow_number
- {
- ERASE FIL;
- }
- END_FOR
- }
- catch (const Firebird::Exception& ex)
- {
- Firebird::stuff_exception(tdbb->tdbb_status_vector, ex);
- DYN_error_punt(true, 63);
- // msg 63: "ERASE RDB$FILES failed"
- }
-
- if (*(*ptr)++ != isc_dyn_end) {
- DYN_unsupported_verb();
- }
-}
Modified: firebird/trunk/src/jrd/dyn_df_proto.h
===================================================================
--- firebird/trunk/src/jrd/dyn_df_proto.h 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/jrd/dyn_df_proto.h 2011-11-13 21:32:12 UTC (rev 53627)
@@ -27,7 +27,6 @@
void DYN_define_file(Jrd::Global*, const UCHAR**, SLONG, SLONG*, USHORT);
void DYN_define_filter(Jrd::Global*, const UCHAR**);
void DYN_define_index(Jrd::Global*, const UCHAR**, const Firebird::MetaName*);
-void DYN_define_role(Jrd::Global*, const UCHAR**);
void DYN_define_shadow(Jrd::Global*, const UCHAR**);
void DYN_define_difference(Jrd::Global*, const UCHAR**);
Deleted: firebird/trunk/src/jrd/dyn_dl_proto.h
===================================================================
--- firebird/trunk/src/jrd/dyn_dl_proto.h 2011-11-11 11:05:49 UTC (rev 53626)
+++ firebird/trunk/src/jrd/dyn_dl_proto.h 2011-11-13 21:32:12 UTC (rev 53627)
@@ -1,32 +0,0 @@
-/*
- * PROGRAM: JRD Access method
- * MODULE: dyn_dl_proto.h
- * DESCRIPTION: Prototype Header file for dyn_del.epp
- *
- * The contents of this file are subject to the Interbase Public
- * License Version 1.0 (the "License"); you may not use this file
- *...
[truncated message content] |