|
From: <asf...@us...> - 2011-06-18 18:50:04
|
Revision: 53192
http://firebird.svn.sourceforge.net/firebird/?rev=53192&view=rev
Author: asfernandes
Date: 2011-06-18 18:49:58 +0000 (Sat, 18 Jun 2011)
Log Message:
-----------
Backported fix for CORE-3140 - Preserve comments for parameters after altering procedures.
Modified Paths:
--------------
firebird/branches/B2_5_Release/doc/WhatsNew
firebird/branches/B2_5_Release/src/dsql/ddl.cpp
firebird/branches/B2_5_Release/src/dsql/metd.epp
firebird/branches/B2_5_Release/src/dsql/metd_proto.h
firebird/branches/B2_5_Release/src/jrd/irq.h
Modified: firebird/branches/B2_5_Release/doc/WhatsNew
===================================================================
--- firebird/branches/B2_5_Release/doc/WhatsNew 2011-06-17 15:34:37 UTC (rev 53191)
+++ firebird/branches/B2_5_Release/doc/WhatsNew 2011-06-18 18:49:58 UTC (rev 53192)
@@ -498,6 +498,11 @@
Contributor(s):
Adriano dos Santos Fernandes <adrianosf at uol.com.br>
+ * Bugfix CORE-3140
+ Preserve comments for parameters after altering procedures.
+ Contributor(s):
+ Adriano dos Santos Fernandes <adrianosf at uol.com.br>
+
* Bugfix CORE-3138
Internal error or crash occurs when accessing any MON$ table after altering its structure
Contributor(s):
Modified: firebird/branches/B2_5_Release/src/dsql/ddl.cpp
===================================================================
--- firebird/branches/B2_5_Release/src/dsql/ddl.cpp 2011-06-17 15:34:37 UTC (rev 53191)
+++ firebird/branches/B2_5_Release/src/dsql/ddl.cpp 2011-06-18 18:49:58 UTC (rev 53192)
@@ -2473,6 +2473,20 @@
statement->append_number(isc_dyn_prm_number, position);
statement->append_number(isc_dyn_prm_type, 0);
+ if (op == nod_mod_procedure && !modifyInputs.exist(field->fld_name))
+ {
+ UCharBuffer description;
+
+ METD_get_procedure_parameter(statement, procedure_name->str_data, field->fld_name,
+ description);
+
+ if (description.hasData())
+ {
+ statement->append_string(isc_dyn_description,
+ (const char*) description.begin(), description.getCount());
+ }
+ }
+
DDL_resolve_intl_type(statement, field,
reinterpret_cast<const dsql_str*>(parameter->nod_arg[e_dfl_collate]));
put_field(statement, field, false);
Modified: firebird/branches/B2_5_Release/src/dsql/metd.epp
===================================================================
--- firebird/branches/B2_5_Release/src/dsql/metd.epp 2011-06-17 15:34:37 UTC (rev 53191)
+++ firebird/branches/B2_5_Release/src/dsql/metd.epp 2011-06-18 18:49:58 UTC (rev 53192)
@@ -1367,6 +1367,46 @@
}
+// Get the description of a procedure parameter. The description is returned in the client charset.
+void METD_get_procedure_parameter(CompiledStatement* statement, const MetaName& procedure,
+ const MetaName& parameter, UCharBuffer& buffer)
+{
+ thread_db* tdbb = JRD_get_thread_data();
+
+ dsql_dbb* dbb = statement->req_dbb;
+
+ MutexHolder holder(statement);
+
+ validateTransaction(statement);
+
+ buffer.clear();
+
+ jrd_req* handle = CMP_find_request(tdbb, irq_parameters_description, IRQ_REQUESTS);
+
+ FOR(REQUEST_HANDLE handle TRANSACTION_HANDLE statement->req_transaction)
+ X IN RDB$PROCEDURE_PARAMETERS
+ WITH X.RDB$PROCEDURE_NAME EQ procedure.c_str() AND
+ X.RDB$PARAMETER_NAME EQ parameter.c_str() AND
+ X.RDB$DESCRIPTION NOT MISSING
+ {
+ if (!DSQL_REQUEST(irq_parameters_description))
+ DSQL_REQUEST(irq_parameters_description) = handle;
+
+ UCharBuffer bpb;
+ BLB_gen_bpb(isc_blob_text, isc_blob_text, CS_METADATA, CS_dynamic, bpb);
+
+ blb* blob = BLB_open2(tdbb, statement->req_transaction, &X.RDB$DESCRIPTION,
+ bpb.getCount(), bpb.begin());
+ buffer.resize(blob->blb_length);
+ BLB_get_data(tdbb, blob, buffer.begin(), buffer.getCount());
+ }
+ END_FOR
+
+ if (!DSQL_REQUEST(irq_parameters_description))
+ DSQL_REQUEST(irq_parameters_description) = handle;
+}
+
+
dsql_rel* METD_get_relation(CompiledStatement* statement, const char* name)
{
/**************************************
Modified: firebird/branches/B2_5_Release/src/dsql/metd_proto.h
===================================================================
--- firebird/branches/B2_5_Release/src/dsql/metd_proto.h 2011-06-17 15:34:37 UTC (rev 53191)
+++ firebird/branches/B2_5_Release/src/dsql/metd_proto.h 2011-06-18 18:49:58 UTC (rev 53192)
@@ -57,6 +57,9 @@
Jrd::dsql_udf* METD_get_function(Jrd::dsql_req*, const Jrd::dsql_str*);
Jrd::dsql_nod* METD_get_primary_key(Jrd::dsql_req*, const Jrd::dsql_str*);
Jrd::dsql_prc* METD_get_procedure(Jrd::CompiledStatement*, const Jrd::dsql_str*);
+void METD_get_procedure_parameter(Jrd::CompiledStatement* statement,
+ const Firebird::MetaName& procedure, const Firebird::MetaName& parameter,
+ Firebird::UCharBuffer& buffer);
Jrd::dsql_rel* METD_get_relation(Jrd::CompiledStatement*, const char*);
bool METD_get_trigger(Jrd::dsql_req*, const Jrd::dsql_str*, Jrd::dsql_str**, USHORT*);
bool METD_get_type(Jrd::dsql_req*, const Jrd::dsql_str*, const char*, SSHORT*);
Modified: firebird/branches/B2_5_Release/src/jrd/irq.h
===================================================================
--- firebird/branches/B2_5_Release/src/jrd/irq.h 2011-06-17 15:34:37 UTC (rev 53191)
+++ firebird/branches/B2_5_Release/src/jrd/irq.h 2011-06-18 18:49:58 UTC (rev 53192)
@@ -141,6 +141,7 @@
irq_procedure, // DSQL/METD: lookup a stored procedure
irq_parameters, // DSQL/METD: lookup a procedure's parameters
irq_parameters2, // DSQL/METD: lookup a procedure's parameters (ODS 11.1)
+ irq_parameters_description, // DSQL/METD: lookup a procedure's parameters description
irq_collation, // DSQL/METD: lookup a collation name
irq_charset, // DSQL/METD: lookup a character set
irq_trigger, // DSQL/METD: lookup a trigger
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|