|
From: <di...@us...> - 2011-07-15 11:52:23
|
Revision: 53313
http://firebird.svn.sourceforge.net/firebird/?rev=53313&view=rev
Author: dimitr
Date: 2011-07-15 11:52:16 +0000 (Fri, 15 Jul 2011)
Log Message:
-----------
Completed some missing parts of the PSQL functions implementation. Adriano, please review.
Modified Paths:
--------------
firebird/trunk/lang_helpers/gds_codes.ftn
firebird/trunk/lang_helpers/gds_codes.pas
firebird/trunk/src/dsql/DdlNodes.epp
firebird/trunk/src/dsql/PackageNodes.epp
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/drq.h
firebird/trunk/src/msgs/facilities2.sql
firebird/trunk/src/msgs/messages2.sql
firebird/trunk/src/msgs/system_errors2.sql
Modified: firebird/trunk/lang_helpers/gds_codes.ftn
===================================================================
--- firebird/trunk/lang_helpers/gds_codes.ftn 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/lang_helpers/gds_codes.ftn 2011-07-15 11:52:16 UTC (rev 53313)
@@ -1716,6 +1716,10 @@
PARAMETER (GDS__dyn_routine_param_not_found = 336068887)
INTEGER*4 GDS__dyn_routine_param_ambiguous
PARAMETER (GDS__dyn_routine_param_ambiguous = 336068888)
+ INTEGER*4 GDS__dyn_coll_used_function
+ PARAMETER (GDS__dyn_coll_used_function = 336068889)
+ INTEGER*4 GDS__dyn_domain_used_function
+ PARAMETER (GDS__dyn_domain_used_function = 336068890)
INTEGER*4 GDS__gbak_unknown_switch
PARAMETER (GDS__gbak_unknown_switch = 336330753)
INTEGER*4 GDS__gbak_page_size_missing
Modified: firebird/trunk/lang_helpers/gds_codes.pas
===================================================================
--- firebird/trunk/lang_helpers/gds_codes.pas 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/lang_helpers/gds_codes.pas 2011-07-15 11:52:16 UTC (rev 53313)
@@ -865,6 +865,8 @@
gds_dyn_func_param_not_found = 336068886;
gds_dyn_routine_param_not_found = 336068887;
gds_dyn_routine_param_ambiguous = 336068888;
+ gds_dyn_coll_used_function = 336068889;
+ gds_dyn_domain_used_function = 336068890;
gds_gbak_unknown_switch = 336330753;
gds_gbak_page_size_missing = 336330754;
gds_gbak_page_size_toobig = 336330755;
Modified: firebird/trunk/src/dsql/DdlNodes.epp
===================================================================
--- firebird/trunk/src/dsql/DdlNodes.epp 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/src/dsql/DdlNodes.epp 2011-07-15 11:52:16 UTC (rev 53313)
@@ -3433,6 +3433,25 @@
}
END_FOR
+ request2.reset(tdbb, drq_l_arg_coll, DYN_REQUESTS);
+
+ FOR (REQUEST_HANDLE request2 TRANSACTION_HANDLE transaction)
+ ARG IN RDB$FUNCTION_ARGUMENTS CROSS F IN RDB$FIELDS
+ WITH ARG.RDB$FIELD_SOURCE EQ F.RDB$FIELD_NAME AND
+ F.RDB$CHARACTER_SET_ID EQ COLL.RDB$CHARACTER_SET_ID AND
+ ARG.RDB$COLLATION_ID EQ COLL.RDB$COLLATION_ID
+ {
+ fb_utils::exact_name_limit(ARG.RDB$ARGUMENT_NAME, sizeof(ARG.RDB$ARGUMENT_NAME));
+
+ status_exception::raise(
+ Arg::Gds(isc_dyn_coll_used_function) <<
+ COLL.RDB$COLLATION_NAME <<
+ QualifiedName(ARG.RDB$FUNCTION_NAME,
+ (ARG.RDB$PACKAGE_NAME.NULL ? NULL : ARG.RDB$PACKAGE_NAME)).toString().c_str() <<
+ ARG.RDB$ARGUMENT_NAME);
+ }
+ END_FOR
+
request2.reset(tdbb, drq_l_fld_coll, DYN_REQUESTS);
FOR (REQUEST_HANDLE request2 TRANSACTION_HANDLE transaction)
@@ -4408,7 +4427,24 @@
}
END_FOR
- //// FIXME: Check domain usage in functions.
+ request.reset(tdbb, drq_l_arg_src, DYN_REQUESTS);
+
+ FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction)
+ X IN RDB$FUNCTION_ARGUMENTS
+ WITH X.RDB$FIELD_SOURCE EQ name.c_str()
+ {
+ fb_utils::exact_name_limit(X.RDB$FIELD_SOURCE, sizeof(X.RDB$FIELD_SOURCE));
+ fb_utils::exact_name_limit(X.RDB$FUNCTION_NAME, sizeof(X.RDB$FUNCTION_NAME));
+ fb_utils::exact_name_limit(X.RDB$ARGUMENT_NAME, sizeof(X.RDB$ARGUMENT_NAME));
+
+ // msg 239: "Domain %s is used in function %s (parameter name %s) and cannot be dropped"
+ status_exception::raise(
+ Arg::Gds(isc_dyn_domain_used_function) << X.RDB$FIELD_SOURCE <<
+ QualifiedName(X.RDB$FUNCTION_NAME,
+ (X.RDB$PACKAGE_NAME.NULL ? NULL : X.RDB$PACKAGE_NAME)).toString().c_str() <<
+ X.RDB$ARGUMENT_NAME);
+ }
+ END_FOR
}
@@ -6970,7 +7006,19 @@
}
END_FOR
- //// FIXME: Check usage in functions.
+ request2.reset();
+
+ FOR(REQUEST_HANDLE request2 TRANSACTION_HANDLE transaction)
+ ARG IN RDB$FUNCTION_ARGUMENTS
+ WITH ARG.RDB$RELATION_NAME = name.c_str() AND
+ ARG.RDB$FIELD_NAME = field->fld_name.c_str()
+ {
+ MODIFY ARG USING
+ strcpy(ARG.RDB$FIELD_SOURCE, RFR.RDB$FIELD_SOURCE);
+ END_MODIFY
+ }
+ END_FOR
+
}
END_FOR
@@ -7013,8 +7061,10 @@
FLD.RDB$FIELD_NAME STARTING WITH IMPLICIT_DOMAIN_PREFIX AND
(NOT ANY RFR IN RDB$RELATION_FIELDS WITH
RFR.RDB$FIELD_SOURCE EQ FLD.RDB$FIELD_NAME) AND
- (NOT ANY PRC IN RDB$PROCEDURE_PARAMETERS WITH
- PRC.RDB$FIELD_SOURCE EQ FLD.RDB$FIELD_NAME)
+ (NOT ANY PRM IN RDB$PROCEDURE_PARAMETERS WITH
+ PRM.RDB$FIELD_SOURCE EQ FLD.RDB$FIELD_NAME) AND
+ (NOT ANY ARG IN RDB$FUNCTION_ARGUMENTS WITH
+ ARG.RDB$FIELD_SOURCE EQ FLD.RDB$FIELD_NAME)
{
DropDomainNode::deleteDimensionRecords(tdbb, transaction, globalName);
ERASE FLD;
Modified: firebird/trunk/src/dsql/PackageNodes.epp
===================================================================
--- firebird/trunk/src/dsql/PackageNodes.epp 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/src/dsql/PackageNodes.epp 2011-07-15 11:52:16 UTC (rev 53313)
@@ -960,7 +960,7 @@
}
}
- // Lets recreate default of public procedure parameters
+ // Lets recreate default of public procedure/function parameters
requestHandle.reset(tdbb, drq_m_pkg_prm_defs, DYN_REQUESTS);
@@ -993,6 +993,36 @@
}
END_FOR
+ requestHandle.reset(tdbb, drq_m_pkg_arg_defs, DYN_REQUESTS);
+
+ FOR (REQUEST_HANDLE requestHandle TRANSACTION_HANDLE transaction)
+ ARG IN RDB$FUNCTION_ARGUMENTS
+ WITH ARG.RDB$PACKAGE_NAME EQ name.c_str()
+ {
+ size_t pos;
+ if (existingFuncs.find(Signature(getPool(), MetaName(ARG.RDB$FUNCTION_NAME)), pos))
+ {
+ const Signature& func = existingFuncs[pos];
+
+ ParameterInfo paramKey(getPool());
+ paramKey.number = ARG.RDB$ARGUMENT_POSITION;
+
+ if (func.parameters.find(paramKey, pos))
+ {
+ const ParameterInfo& param = func.parameters[pos];
+
+ MODIFY ARG
+ ARG.RDB$DEFAULT_SOURCE = param.defaultSource;
+ ARG.RDB$DEFAULT_SOURCE.NULL = param.defaultSource.isEmpty();
+
+ ARG.RDB$DEFAULT_VALUE = param.defaultValue;
+ ARG.RDB$DEFAULT_VALUE.NULL = param.defaultValue.isEmpty();
+ END_MODIFY
+ }
+ }
+ }
+ END_FOR
+
executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_AFTER,
DDL_TRIGGER_CREATE_PACKAGE_BODY, name);
Modified: firebird/trunk/src/include/gen/codetext.h
===================================================================
--- firebird/trunk/src/include/gen/codetext.h 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/src/include/gen/codetext.h 2011-07-15 11:52:16 UTC (rev 53313)
@@ -854,6 +854,8 @@
{"dyn_func_param_not_found", 336068886},
{"dyn_routine_param_not_found", 336068887},
{"dyn_routine_param_ambiguous", 336068888},
+ {"dyn_coll_used_function", 336068889},
+ {"dyn_domain_used_function", 336068890},
{"gbak_unknown_switch", 336330753},
{"gbak_page_size_missing", 336330754},
{"gbak_page_size_toobig", 336330755},
Modified: firebird/trunk/src/include/gen/iberror.h
===================================================================
--- firebird/trunk/src/include/gen/iberror.h 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/src/include/gen/iberror.h 2011-07-15 11:52:16 UTC (rev 53313)
@@ -888,6 +888,8 @@
const ISC_STATUS isc_dyn_func_param_not_found = 336068886L;
const ISC_STATUS isc_dyn_routine_param_not_found = 336068887L;
const ISC_STATUS isc_dyn_routine_param_ambiguous = 336068888L;
+const ISC_STATUS isc_dyn_coll_used_function = 336068889L;
+const ISC_STATUS isc_dyn_domain_used_function = 336068890L;
const ISC_STATUS isc_gbak_unknown_switch = 336330753L;
const ISC_STATUS isc_gbak_page_size_missing = 336330754L;
const ISC_STATUS isc_gbak_page_size_toobig = 336330755L;
@@ -1185,7 +1187,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 = 1129;
+const ISC_STATUS isc_err_max = 1131;
#else /* c definitions */
@@ -2043,6 +2045,8 @@
#define isc_dyn_func_param_not_found 336068886L
#define isc_dyn_routine_param_not_found 336068887L
#define isc_dyn_routine_param_ambiguous 336068888L
+#define isc_dyn_coll_used_function 336068889L
+#define isc_dyn_domain_used_function 336068890L
#define isc_gbak_unknown_switch 336330753L
#define isc_gbak_page_size_missing 336330754L
#define isc_gbak_page_size_toobig 336330755L
@@ -2340,7 +2344,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 1129
+#define isc_err_max 1131
#endif
Modified: firebird/trunk/src/include/gen/msgs.h
===================================================================
--- firebird/trunk/src/include/gen/msgs.h 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/src/include/gen/msgs.h 2011-07-15 11:52:16 UTC (rev 53313)
@@ -854,9 +854,11 @@
{336068877, "Package body @1 already exists"}, /* dyn_package_body_exists */
{336068878, "Invalid DDL statement for function @1"}, /* dyn_invalid_ddl_func */
{336068879, "Cannot alter new style function @1 with ALTER EXTERNAL FUNCTION. Use ALTER FUNCTION instead."}, /* dyn_newfc_oldsyntax */
- {336068886, "Parameter @1 in function @2 is not found"}, /* dyn_func_param_not_found */
- {336068887, "Parameter @1 of routine @2 is not found"}, /* dyn_routine_param_not_found */
+ {336068886, "Parameter @1 in function @2 not found"}, /* dyn_func_param_not_found */
+ {336068887, "Parameter @1 of routine @2 not found"}, /* dyn_routine_param_not_found */
{336068888, "Parameter @1 of routine @2 is ambiguous (found in both procedures and functions). Use a specifier keyword."}, /* dyn_routine_param_ambiguous */
+ {336068889, "Collation @1 is used in function @2 (parameter name @3) and cannot be dropped"}, /* dyn_coll_used_function */
+ {336068890, "Domain @1 is used in function @2 (parameter name @3) and cannot be dropped"}, /* dyn_domain_used_function */
{336330753, "found unknown switch"}, /* gbak_unknown_switch */
{336330754, "page size parameter missing"}, /* gbak_page_size_missing */
{336330755, "Page size specified (@1) greater than limit (16384 bytes)"}, /* gbak_page_size_toobig */
Modified: firebird/trunk/src/include/gen/sql_code.h
===================================================================
--- firebird/trunk/src/include/gen/sql_code.h 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/src/include/gen/sql_code.h 2011-07-15 11:52:16 UTC (rev 53313)
@@ -853,6 +853,8 @@
{336068886, -901}, /* 278 dyn_func_param_not_found */
{336068887, -901}, /* 279 dyn_routine_param_not_found */
{336068888, -901}, /* 280 dyn_routine_param_ambiguous */
+ {336068889, -901}, /* 281 dyn_coll_used_function */
+ {336068890, -901}, /* 282 dyn_domain_used_function */
{336330753, -901}, /* 1 gbak_unknown_switch */
{336330754, -901}, /* 2 gbak_page_size_missing */
{336330755, -901}, /* 3 gbak_page_size_toobig */
Modified: firebird/trunk/src/include/gen/sql_state.h
===================================================================
--- firebird/trunk/src/include/gen/sql_state.h 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/src/include/gen/sql_state.h 2011-07-15 11:52:16 UTC (rev 53313)
@@ -853,6 +853,8 @@
{336068886, "42000"}, // 278 dyn_func_param_not_found
{336068887, "42000"}, // 279 dyn_routine_param_not_found
{336068888, "42000"}, // 280 dyn_routine_param_ambiguous
+ {336068889, "HY000"}, // 281 dyn_coll_used_function
+ {336068890, "HY000"}, // 282 dyn_domain_used_function
{336330753, "00000"}, // 1 gbak_unknown_switch
{336330754, "00000"}, // 2 gbak_page_size_missing
{336330755, "00000"}, // 3 gbak_page_size_toobig
Modified: firebird/trunk/src/jrd/drq.h
===================================================================
--- firebird/trunk/src/jrd/drq.h 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/src/jrd/drq.h 2011-07-15 11:52:16 UTC (rev 53313)
@@ -162,7 +162,9 @@
drq_l_rfld_coll, // lookup relation field collation
drq_l_fld_coll, // lookup field collation
drq_l_prp_src, // lookup a procedure parameter source
+ drq_l_arg_src, // lookup a function argument source
drq_l_prm_coll, // lookup procedure parameter collation
+ drq_l_arg_coll, // lookup function argument collation
drq_m_map, // modify os=>db names mapping
drq_l_idx_name, // lookup index name
drq_l_collation, // DSQL/DdlNodes: lookup collation
@@ -206,6 +208,7 @@
drq_s_pkg_usr_prvs, // store package privileges
drq_e_pkg_prv, // erase package privileges
drq_m_pkg_prm_defs, // modify packaged procedure parameters defaults
+ drq_m_pkg_arg_defs, // modify packaged function arguments defaults
drq_s2_difference, // Store backup difference file, DYN_mod's change_backup_mode
drq_l_relation, // lookup relation before erase
drq_l_fun_name, // lookup function name
Modified: firebird/trunk/src/msgs/facilities2.sql
===================================================================
--- firebird/trunk/src/msgs/facilities2.sql 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/src/msgs/facilities2.sql 2011-07-15 11:52:16 UTC (rev 53313)
@@ -13,7 +13,7 @@
--('1996-11-07 13:39:40', 'GRST', 6, 1)
--
('2005-11-05 13:09:00', 'DSQL', 7, 32)
-('2011-07-15 12:08:00', 'DYN', 8, 281)
+('2011-07-15 12:08:00', 'DYN', 8, 283)
--
--('1996-11-07 13:39:40', 'FRED', 9, 1)
--
Modified: firebird/trunk/src/msgs/messages2.sql
===================================================================
--- firebird/trunk/src/msgs/messages2.sql 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/src/msgs/messages2.sql 2011-07-15 11:52:16 UTC (rev 53313)
@@ -1854,6 +1854,8 @@
('dyn_func_param_not_found', 'OnCommentNode::execute', 'DdlNodes.epp', NULL, 8, 278, NULL, 'Parameter @1 in function @2 not found', NULL, NULL);
('dyn_routine_param_not_found', 'OnCommentNode::execute', 'DdlNodes.epp', NULL, 8, 279, NULL, 'Parameter @1 of routine @2 not found', NULL, NULL);
('dyn_routine_param_ambiguous', 'OnCommentNode::execute', 'DdlNodes.epp', NULL, 8, 280, NULL, 'Parameter @1 of routine @2 is ambiguous (found in both procedures and functions). Use a specifier keyword.', NULL, NULL);
+('dyn_coll_used_function', 'DropCollationNode::execute', 'DdlNodes.epp', NULL, 8, 281, NULL, 'Collation @1 is used in function @2 (parameter name @3) and cannot be dropped', NULL, NULL);
+('dyn_domain_used_function', 'DropDomainNode', 'DdlNodes.epp', NULL, 8, 282, NULL, 'Domain @1 is used in function @2 (parameter name @3) and cannot be dropped', NULL, NULL);
COMMIT WORK;
-- TEST
(NULL, 'main', 'test.c', NULL, 11, 0, NULL, 'This is a modified text message', NULL, NULL);
Modified: firebird/trunk/src/msgs/system_errors2.sql
===================================================================
--- firebird/trunk/src/msgs/system_errors2.sql 2011-07-15 11:24:00 UTC (rev 53312)
+++ firebird/trunk/src/msgs/system_errors2.sql 2011-07-15 11:52:16 UTC (rev 53313)
@@ -841,6 +841,8 @@
(-901, '42', '000', 8, 278, 'dyn_func_param_not_found', NULL, NULL)
(-901, '42', '000', 8, 279, 'dyn_routine_param_not_found', NULL, NULL)
(-901, '42', '000', 8, 280, 'dyn_routine_param_ambiguous', NULL, NULL)
+(-901, 'HY', '000', 8, 281, 'dyn_coll_used_function', NULL, NULL)
+(-901, 'HY', '000', 8, 282, 'dyn_domain_used_function', NULL, NULL)
-- GBAK
(-901, '00', '000', 12, 1, 'gbak_unknown_switch', NULL, NULL)
(-901, '00', '000', 12, 2, 'gbak_page_size_missing', NULL, NULL)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|