|
From: <di...@us...> - 2011-07-15 08:54:07
|
Revision: 53307
http://firebird.svn.sourceforge.net/firebird/?rev=53307&view=rev
Author: dimitr
Date: 2011-07-15 08:54:00 +0000 (Fri, 15 Jul 2011)
Log Message:
-----------
Implemented COMMENT for function arguments.
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/dsql.h
firebird/trunk/src/dsql/parse.y
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/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 03:50:12 UTC (rev 53306)
+++ firebird/trunk/lang_helpers/gds_codes.ftn 2011-07-15 08:54:00 UTC (rev 53307)
@@ -1710,6 +1710,12 @@
PARAMETER (GDS__dyn_invalid_ddl_func = 336068878)
INTEGER*4 GDS__dyn_newfc_oldsyntax
PARAMETER (GDS__dyn_newfc_oldsyntax = 336068879)
+ INTEGER*4 GDS__dyn_func_param_not_found
+ PARAMETER (GDS__dyn_func_param_not_found = 336068886)
+ INTEGER*4 GDS__dyn_routine_param_not_found
+ 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__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 03:50:12 UTC (rev 53306)
+++ firebird/trunk/lang_helpers/gds_codes.pas 2011-07-15 08:54:00 UTC (rev 53307)
@@ -862,6 +862,9 @@
gds_dyn_package_body_exists = 336068877;
gds_dyn_invalid_ddl_func = 336068878;
gds_dyn_newfc_oldsyntax = 336068879;
+ gds_dyn_func_param_not_found = 336068886;
+ gds_dyn_routine_param_not_found = 336068887;
+ gds_dyn_routine_param_ambiguous = 336068888;
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 03:50:12 UTC (rev 53306)
+++ firebird/trunk/src/dsql/DdlNodes.epp 2011-07-15 08:54:00 UTC (rev 53307)
@@ -38,6 +38,7 @@
#include "../common/os/path_utils.h"
#include "../jrd/IntlManager.h"
#include "../jrd/PreparedStatement.h"
+#include "../jrd/ResultSet.h"
#include "../jrd/blb_proto.h"
#include "../jrd/cmp_proto.h"
#include "../common/dsc_proto.h"
@@ -881,6 +882,54 @@
const char* addWhereClause = NULL;
Arg::StatusVector status;
+ if (objType == ddl_unknown)
+ {
+ fb_assert(subName.hasData());
+
+ PreparedStatement::Builder sql;
+ sql << "select 1 from rdb$procedures p join rdb$procedure_parameters pp using (rdb$procedure_name)" <<
+ "where p.rdb$procedure_name =" << objName <<
+ "and pp.rdb$parameter_name =" << subName <<
+ "union all" <<
+ "select 2 from rdb$functions f join rdb$function_arguments fa using (rdb$function_name)" <<
+ "where f.rdb$function_name =" << objName <<
+ "and fa.rdb$argument_name =" << subName;
+
+ AutoPreparedStatement ps(attachment->prepareStatement(tdbb, transaction, sql));
+ AutoResultSet rs(ps->executeQuery(tdbb, transaction));
+
+ if (!rs->fetch(tdbb))
+ {
+ status_exception::raise(Arg::Gds(isc_dyn_routine_param_not_found) <<
+ Arg::Str(subName) << Arg::Str(objName));
+ }
+
+ fb_assert(!rs->isNull(1));
+ dsc& desc = rs->getDesc(1);
+ fb_assert(desc.dsc_dtype == dtype_long);
+ const SLONG result = *reinterpret_cast<SLONG*>(desc.dsc_address);
+
+ switch (result)
+ {
+ case 1:
+ objType = ddl_procedure;
+ break;
+
+ case 2:
+ objType = ddl_udf;
+ break;
+
+ default:
+ fb_assert(false);
+ }
+
+ if (rs->fetch(tdbb))
+ {
+ status_exception::raise(Arg::Gds(isc_dyn_routine_param_ambiguous) <<
+ Arg::Str(subName) << Arg::Str(objName));
+ }
+ }
+
switch (objType)
{
case ddl_database:
@@ -942,10 +991,21 @@
break;
case ddl_udf:
- tableClause = "rdb$functions";
+ if (subName.hasData())
+ {
+ tableClause = "rdb$function_arguments";
+ subColumnClause = "rdb$argument_name";
+ status << Arg::Gds(isc_dyn_func_param_not_found) <<
+ Arg::Str(subName) << Arg::Str(objName);
+ }
+ else
+ {
+ tableClause = "rdb$functions";
+ status << Arg::Gds(isc_dyn_func_not_found) << Arg::Str(objName);
+ }
+
+ addWhereClause = "rdb$package_name is null";
columnClause = "rdb$function_name";
- addWhereClause = "rdb$package_name is null";
- status << Arg::Gds(isc_dyn_func_not_found) << Arg::Str(objName);
break;
case ddl_blob_filter:
Modified: firebird/trunk/src/dsql/dsql.h
===================================================================
--- firebird/trunk/src/dsql/dsql.h 2011-07-15 03:50:12 UTC (rev 53306)
+++ firebird/trunk/src/dsql/dsql.h 2011-07-15 08:54:00 UTC (rev 53307)
@@ -787,6 +787,7 @@
// CVC: Enumeration used for the COMMENT command.
enum
{
+ ddl_unknown,
ddl_database, ddl_domain, ddl_relation, ddl_view, ddl_procedure, ddl_trigger,
ddl_udf, ddl_blob_filter, ddl_exception, ddl_generator, ddl_index, ddl_role,
ddl_charset, ddl_collation, ddl_package, ddl_schema,
Modified: firebird/trunk/src/dsql/parse.y
===================================================================
--- firebird/trunk/src/dsql/parse.y 2011-07-15 03:50:12 UTC (rev 53306)
+++ firebird/trunk/src/dsql/parse.y 2011-07-15 08:54:00 UTC (rev 53307)
@@ -867,7 +867,7 @@
// New nodes
-%type <intVal> ddl_type0 ddl_type1 ddl_type2
+%type <intVal> ddl_type0 ddl_type1 ddl_type2 ddl_param_opt
%type <boolVal> release_only_opt
@@ -4220,9 +4220,15 @@
ddl_type2
: COLUMN { $$ = ddl_relation; }
- | PARAMETER { $$ = ddl_procedure; }
+ | ddl_param_opt PARAMETER { $$ = $1; }
;
+ddl_param_opt
+ : { $$ = ddl_unknown; }
+ | PROCEDURE { $$ = ddl_procedure; }
+ | FUNCTION { $$ = ddl_udf; }
+ ;
+
ddl_subname
: '.' symbol_ddl_name { $$ = $2; }
;
Modified: firebird/trunk/src/include/gen/codetext.h
===================================================================
--- firebird/trunk/src/include/gen/codetext.h 2011-07-15 03:50:12 UTC (rev 53306)
+++ firebird/trunk/src/include/gen/codetext.h 2011-07-15 08:54:00 UTC (rev 53307)
@@ -851,6 +851,9 @@
{"dyn_package_body_exists", 336068877},
{"dyn_invalid_ddl_func", 336068878},
{"dyn_newfc_oldsyntax", 336068879},
+ {"dyn_func_param_not_found", 336068886},
+ {"dyn_routine_param_not_found", 336068887},
+ {"dyn_routine_param_ambiguous", 336068888},
{"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 03:50:12 UTC (rev 53306)
+++ firebird/trunk/src/include/gen/iberror.h 2011-07-15 08:54:00 UTC (rev 53307)
@@ -885,6 +885,9 @@
const ISC_STATUS isc_dyn_package_body_exists = 336068877L;
const ISC_STATUS isc_dyn_invalid_ddl_func = 336068878L;
const ISC_STATUS isc_dyn_newfc_oldsyntax = 336068879L;
+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_gbak_unknown_switch = 336330753L;
const ISC_STATUS isc_gbak_page_size_missing = 336330754L;
const ISC_STATUS isc_gbak_page_size_toobig = 336330755L;
@@ -1182,7 +1185,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 = 1126;
+const ISC_STATUS isc_err_max = 1129;
#else /* c definitions */
@@ -2037,6 +2040,9 @@
#define isc_dyn_package_body_exists 336068877L
#define isc_dyn_invalid_ddl_func 336068878L
#define isc_dyn_newfc_oldsyntax 336068879L
+#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_gbak_unknown_switch 336330753L
#define isc_gbak_page_size_missing 336330754L
#define isc_gbak_page_size_toobig 336330755L
@@ -2334,7 +2340,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 1126
+#define isc_err_max 1129
#endif
Modified: firebird/trunk/src/include/gen/msgs.h
===================================================================
--- firebird/trunk/src/include/gen/msgs.h 2011-07-15 03:50:12 UTC (rev 53306)
+++ firebird/trunk/src/include/gen/msgs.h 2011-07-15 08:54:00 UTC (rev 53307)
@@ -854,6 +854,9 @@
{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 */
+ {336068888, "Parameter @1 of routine @2 is ambiguous (found in both procedures and functions). Use a specifier keyword."}, /* dyn_routine_param_ambiguous */
{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 03:50:12 UTC (rev 53306)
+++ firebird/trunk/src/include/gen/sql_code.h 2011-07-15 08:54:00 UTC (rev 53307)
@@ -850,6 +850,9 @@
{336068877, -901}, /* 269 dyn_package_body_exists */
{336068878, -607}, /* 270 dyn_invalid_ddl_func */
{336068879, -901}, /* 271 dyn_newfc_oldsyntax */
+ {336068886, -901}, /* 278 dyn_func_param_not_found */
+ {336068887, -901}, /* 279 dyn_routine_param_not_found */
+ {336068888, -901}, /* 280 dyn_routine_param_ambiguous */
{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 03:50:12 UTC (rev 53306)
+++ firebird/trunk/src/include/gen/sql_state.h 2011-07-15 08:54:00 UTC (rev 53307)
@@ -850,6 +850,9 @@
{336068877, "42000"}, // 269 dyn_package_body_exists
{336068878, "HY000"}, // 270 dyn_invalid_ddl_func
{336068879, "42000"}, // 271 dyn_newfc_oldsyntax
+ {336068886, "42000"}, // 278 dyn_func_param_not_found
+ {336068887, "42000"}, // 279 dyn_routine_param_not_found
+ {336068888, "42000"}, // 280 dyn_routine_param_ambiguous
{336330753, "00000"}, // 1 gbak_unknown_switch
{336330754, "00000"}, // 2 gbak_page_size_missing
{336330755, "00000"}, // 3 gbak_page_size_toobig
Modified: firebird/trunk/src/msgs/facilities2.sql
===================================================================
--- firebird/trunk/src/msgs/facilities2.sql 2011-07-15 03:50:12 UTC (rev 53306)
+++ firebird/trunk/src/msgs/facilities2.sql 2011-07-15 08:54:00 UTC (rev 53307)
@@ -13,7 +13,7 @@
--('1996-11-07 13:39:40', 'GRST', 6, 1)
--
('2005-11-05 13:09:00', 'DSQL', 7, 32)
-('2010-06-26 01:52:06', 'DYN', 8, 278)
+('2011-07-15 12:08:00', 'DYN', 8, 281)
--
--('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 03:50:12 UTC (rev 53306)
+++ firebird/trunk/src/msgs/messages2.sql 2011-07-15 08:54:00 UTC (rev 53307)
@@ -1851,6 +1851,9 @@
(NULL, 'DYN_modify_sql_field', 'dyn_mod.epp', NULL, 8, 275, NULL, 'Identity column @1 of table @2 cannot have default value', NULL, NULL);
(NULL, 'DYN_modify_global_field', 'dyn_mod.epp', NULL, 8, 276, NULL, 'Domain @1 must be of exact number type with zero scale because it''s used in an identity column', NULL, NULL);
(NULL, 'DYN_UTIL_generate_generator_name', 'dyn_util.epp', NULL, 8, 277, NULL, 'Generation of generator name failed', NULL, NULL);
+('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);
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 03:50:12 UTC (rev 53306)
+++ firebird/trunk/src/msgs/system_errors2.sql 2011-07-15 08:54:00 UTC (rev 53307)
@@ -838,6 +838,9 @@
(-901, '42', '000', 8, 269, 'dyn_package_body_exists', NULL, NULL)
(-607, 'HY', '000', 8, 270, 'dyn_invalid_ddl_func' NULL, NULL)
(-901, '42', '000', 8, 271, 'dyn_newfc_oldsyntax', NULL, NULL)
+(-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)
-- 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.
|