|
From: <asf...@us...> - 2012-08-28 01:03:03
|
Revision: 57059
http://firebird.svn.sourceforge.net/firebird/?rev=57059&view=rev
Author: asfernandes
Date: 2012-08-28 01:02:56 +0000 (Tue, 28 Aug 2012)
Log Message:
-----------
Feature CORE-3291 - New pseudocolumn to get number of transaction that created this record version.
Modified Paths:
--------------
firebird/trunk/lang_helpers/gds_codes.ftn
firebird/trunk/lang_helpers/gds_codes.pas
firebird/trunk/src/dsql/ExprNodes.cpp
firebird/trunk/src/dsql/ExprNodes.h
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/jrd/blp.h
firebird/trunk/src/jrd/blr.h
firebird/trunk/src/jrd/constants.h
firebird/trunk/src/msgs/facilities2.sql
firebird/trunk/src/msgs/messages2.sql
firebird/trunk/src/msgs/system_errors2.sql
firebird/trunk/src/yvalve/keywords.cpp
Modified: firebird/trunk/lang_helpers/gds_codes.ftn
===================================================================
--- firebird/trunk/lang_helpers/gds_codes.ftn 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/lang_helpers/gds_codes.ftn 2012-08-28 01:02:56 UTC (rev 57059)
@@ -1616,6 +1616,8 @@
PARAMETER (GDS__dsql_incompatible_trigger_type = 336003102)
INTEGER*4 GDS__dsql_db_trigger_type_cant_change
PARAMETER (GDS__dsql_db_trigger_type_cant_change = 336003103)
+ INTEGER*4 GDS__dsql_record_version_table
+ PARAMETER (GDS__dsql_record_version_table = 336003104)
INTEGER*4 GDS__dyn_filter_not_found
PARAMETER (GDS__dyn_filter_not_found = 336068645)
INTEGER*4 GDS__dyn_func_not_found
Modified: firebird/trunk/lang_helpers/gds_codes.pas
===================================================================
--- firebird/trunk/lang_helpers/gds_codes.pas 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/lang_helpers/gds_codes.pas 2012-08-28 01:02:56 UTC (rev 57059)
@@ -815,6 +815,7 @@
gds_upd_ins_with_complex_view = 336003101;
gds_dsql_incompatible_trigger_type = 336003102;
gds_dsql_db_trigger_type_cant_change = 336003103;
+ gds_dsql_record_version_table = 336003104;
gds_dyn_filter_not_found = 336068645;
gds_dyn_func_not_found = 336068649;
gds_dyn_index_not_found = 336068656;
Modified: firebird/trunk/src/dsql/ExprNodes.cpp
===================================================================
--- firebird/trunk/src/dsql/ExprNodes.cpp 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/dsql/ExprNodes.cpp 2012-08-28 01:02:56 UTC (rev 57059)
@@ -5684,7 +5684,8 @@
RecordKeyNode* recNode;
if (!sub->is<FieldNode>() &&
- (!(recNode = sub->as<RecordKeyNode>()) || recNode->blrOp != blr_dbkey))
+ (!(recNode = sub->as<RecordKeyNode>()) ||
+ (recNode->blrOp != blr_dbkey && recNode->blrOp != blr_record_version2)))
{
ValueExprNodeStack stack;
CMP_expand_view_nodes(tdbb, csb, stream, stack, blr_dbkey, true);
@@ -6707,6 +6708,7 @@
const DsqlAliasNode* aliasNode;
const LiteralNode* literalNode;
const DerivedFieldNode* derivedField;
+ const RecordKeyNode* dbKeyNode;
if ((aggNode = ExprNode::as<AggNode>(nestNode)))
aggNode->setParameterName(parameter);
@@ -6718,8 +6720,8 @@
}
else if ((literalNode = ExprNode::as<LiteralNode>(nestNode)))
literalNode->setParameterName(parameter);
- else if (ExprNode::is<RecordKeyNode>(nestNode))
- nameAlias = DB_KEY_NAME;
+ else if ((dbKeyNode = ExprNode::as<RecordKeyNode>(nestNode)))
+ nameAlias = dbKeyNode->getAlias(false);
else if ((derivedField = ExprNode::as<DerivedFieldNode>(nestNode)))
{
parameter->par_alias = derivedField->name;
@@ -7836,6 +7838,7 @@
static RegisterNode<RecordKeyNode> regRecordKeyNodeDbKey(blr_dbkey);
static RegisterNode<RecordKeyNode> regRecordKeyNodeRecordVersion(blr_record_version);
+static RegisterNode<RecordKeyNode> regRecordKeyNodeRecordVersion2(blr_record_version2);
RecordKeyNode::RecordKeyNode(MemoryPool& pool, UCHAR aBlrOp, const MetaName& aDsqlQualifier)
: TypedNode<ValueExprNode, ExprNode::TYPE_RECORD_KEY>(pool),
@@ -7845,7 +7848,7 @@
recStream(0),
aggregate(false)
{
- fb_assert(blrOp == blr_dbkey || blrOp == blr_record_version);
+ fb_assert(blrOp == blr_dbkey || blrOp == blr_record_version || blrOp == blr_record_version2);
addDsqlChildNode(dsqlRelation);
}
@@ -7865,7 +7868,10 @@
void RecordKeyNode::print(string& text) const
{
- text.printf("RecordKeyNode (%s)", (blrOp == blr_dbkey ? "dbkey" : "record_version"));
+ text.printf("RecordKeyNode (%s)",
+ (blrOp == blr_dbkey ? "dbkey" :
+ blrOp == blr_record_version2 ? "record_version2" : "record_version"));
+
ExprNode::print(text);
}
@@ -7893,15 +7899,12 @@
dsql_ctx* context = contexts.object();
if (!context->ctx_relation)
- {
- ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-607) <<
- Arg::Gds(isc_dsql_dbkey_from_non_table));
- }
+ raiseError(context);
if (context->ctx_flags & CTX_null)
return FB_NEW(*tdbb->getDefaultPool()) NullNode(*tdbb->getDefaultPool());
- PASS1_ambiguity_check(dsqlScratch, "RDB$DB_KEY", contexts);
+ PASS1_ambiguity_check(dsqlScratch, getAlias(true), contexts);
RelationSourceNode* relNode = FB_NEW(getPool()) RelationSourceNode(getPool());
relNode->dsqlContext = context;
@@ -7933,10 +7936,7 @@
}
if (!context->ctx_relation)
- {
- ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-607) <<
- Arg::Gds(isc_dsql_dbkey_from_non_table));
- }
+ raiseError(context);
if (context->ctx_flags & CTX_null)
return FB_NEW(*tdbb->getDefaultPool()) NullNode(*tdbb->getDefaultPool());
@@ -7958,7 +7958,7 @@
}
// Field unresolved.
- PASS1_field_unknown((dsqlQualifier.hasData() ? dsqlQualifier.c_str() : NULL), DB_KEY_NAME, this);
+ PASS1_field_unknown(dsqlQualifier.nullStr(), getAlias(false), this);
return NULL;
}
@@ -8000,7 +8000,7 @@
void RecordKeyNode::setParameterName(dsql_par* parameter) const
{
- parameter->par_name = parameter->par_alias = DB_KEY_NAME;
+ parameter->par_name = parameter->par_alias = getAlias(false);
dsql_ctx* context = dsqlRelation->dsqlContext;
@@ -8030,28 +8030,35 @@
void RecordKeyNode::make(DsqlCompilerScratch* /*dsqlScratch*/, dsc* desc)
{
- fb_assert(blrOp == blr_dbkey);
+ fb_assert(blrOp == blr_dbkey || blrOp == blr_record_version2);
// Fix for bug 10072 check that the target is a relation
- dsql_rel* relation;
+ dsql_rel* relation = dsqlRelation->dsqlContext->ctx_relation;
- if (dsqlRelation && (relation = dsqlRelation->dsqlContext->ctx_relation))
+ if (relation)
{
- desc->dsc_dtype = dtype_text;
+ USHORT dbKeyLength = (relation->rel_flags & REL_creating ? 8 : relation->rel_dbkey_length);
- if (relation->rel_flags & REL_creating)
- desc->dsc_length = 8;
- else
- desc->dsc_length = relation->rel_dbkey_length;
-
- desc->dsc_flags = DSC_nullable;
- desc->dsc_ttype() = ttype_binary;
+ if (blrOp == blr_dbkey)
+ {
+ desc->dsc_dtype = dtype_text;
+ desc->dsc_length = dbKeyLength;
+ desc->dsc_flags = DSC_nullable;
+ desc->dsc_ttype() = ttype_binary;
+ }
+ else // blr_record_version2
+ {
+ if (dbKeyLength == 8)
+ {
+ desc->makeLong(0);
+ desc->setNullable(true);
+ }
+ else
+ raiseError(dsqlRelation->dsqlContext);
+ }
}
else
- {
- ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-607) <<
- Arg::Gds(isc_dsql_dbkey_from_non_table));
- }
+ raiseError(dsqlRelation->dsqlContext);
}
bool RecordKeyNode::jrdStreamFinder(StreamType findStream)
@@ -8108,6 +8115,8 @@
desc->dsc_scale = 0;
desc->dsc_flags = 0;
}
+ else if (blrOp == blr_record_version2)
+ desc->makeLong(0);
}
ValueExprNode* RecordKeyNode::copy(thread_db* tdbb, NodeCopier& copier) const
@@ -8340,7 +8349,7 @@
// If the current transaction has updated the record, the record version
// coming in from DSQL will have the original transaction # (or current
// transaction if the current transaction updated the record in a different
- // request.). In these cases, mark the request so that the boolean
+ // request). In these cases, mark the request so that the boolean
// to check equality of record version will be forced to evaluate to true.
if (request->req_transaction->tra_number == rpb->rpb_transaction_nr)
@@ -8365,7 +8374,21 @@
impure->vlu_desc.dsc_length = 4;
impure->vlu_desc.dsc_ttype() = ttype_binary;
}
+ else if (blrOp == blr_record_version2)
+ {
+ const jrd_rel* relation = rpb->rpb_relation;
+ // If it doesn't point to a valid record, return NULL.
+ if (!rpb->rpb_number.isValid() || !relation || relation->isVirtual() || relation->rel_file)
+ {
+ request->req_flags |= req_null;
+ return NULL;
+ }
+
+ impure->vlu_misc.vlu_long = rpb->rpb_transaction_nr;
+ impure->vlu_desc.makeLong(0, &impure->vlu_misc.vlu_long);
+ }
+
return &impure->vlu_desc;
}
@@ -8387,7 +8410,32 @@
return concatNode;
}
+void RecordKeyNode::raiseError(dsql_ctx* context) const
+{
+ if (blrOp != blr_record_version2)
+ {
+ status_exception::raise(
+ Arg::Gds(isc_sqlerr) << Arg::Num(-607) <<
+ Arg::Gds(isc_dsql_dbkey_from_non_table));
+ }
+ string name = context->getObjectName();
+ const string& alias = context->ctx_internal_alias;
+
+ if (alias.hasData() && name != alias)
+ {
+ if (name.hasData())
+ name += " (alias " + alias + ")";
+ else
+ name = alias;
+ }
+
+ status_exception::raise(
+ Arg::Gds(isc_sqlerr) << Arg::Num(-607) <<
+ Arg::Gds(isc_dsql_record_version_table) << name);
+}
+
+
//--------------------
Modified: firebird/trunk/src/dsql/ExprNodes.h
===================================================================
--- firebird/trunk/src/dsql/ExprNodes.h 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/dsql/ExprNodes.h 2012-08-28 01:02:56 UTC (rev 57059)
@@ -1110,9 +1110,23 @@
virtual ValueExprNode* pass2(thread_db* tdbb, CompilerScratch* csb);
virtual dsc* execute(thread_db* tdbb, jrd_req* request) const;
+ const char* getAlias(bool rdb) const
+ {
+ if (blrOp == blr_record_version2)
+ {
+ // ASF: It's on purpose that RDB$ prefix is always used here.
+ // Absense of it with DB_KEY seems more a bug than feature.
+ return RDB_RECORD_VERSION_NAME;
+ }
+ else
+ return (rdb ? RDB_DB_KEY_NAME : DB_KEY_NAME);
+ }
+
private:
static ValueExprNode* catenateNodes(thread_db* tdbb, ValueExprNodeStack& stack);
+ void raiseError(dsql_ctx* context) const;
+
public:
UCHAR blrOp;
Firebird::MetaName dsqlQualifier;
Modified: firebird/trunk/src/dsql/dsql.h
===================================================================
--- firebird/trunk/src/dsql/dsql.h 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/dsql/dsql.h 2012-08-28 01:02:56 UTC (rev 57059)
@@ -732,6 +732,16 @@
return *this;
}
+ Firebird::string getObjectName()
+ {
+ if (ctx_relation)
+ return ctx_relation->rel_name.c_str();
+ else if (ctx_procedure)
+ return ctx_procedure->prc_name.toString();
+ else
+ return "";
+ }
+
bool getImplicitJoinField(const Firebird::MetaName& name, NestConst<ValueExprNode>& node);
PartitionMap* getPartitionMap(DsqlCompilerScratch* dsqlScratch,
ValueListNode* partitionNode, ValueListNode* orderNode);
Modified: firebird/trunk/src/dsql/parse.y
===================================================================
--- firebird/trunk/src/dsql/parse.y 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/dsql/parse.y 2012-08-28 01:02:56 UTC (rev 57059)
@@ -573,11 +573,11 @@
%token <legacyStr> RANK
%token <legacyStr> ROW_NUMBER
%token <legacyStr> SQLSTATE
-
%token <legacyStr> KW_BOOLEAN
%token <legacyStr> KW_FALSE
%token <legacyStr> KW_TRUE
%token <legacyStr> UNKNOWN
+%token <legacyStr> RDB_RECORD_VERSION
// precedence declarations for expression evaluation
@@ -5707,10 +5707,10 @@
{ $$ = $1; }
| internal_info
{ $$ = $1; }
- | DB_KEY
- { $$ = newNode<RecordKeyNode>(blr_dbkey); }
- | symbol_table_alias_name '.' DB_KEY
- { $$ = newNode<RecordKeyNode>(blr_dbkey, toName($1)); }
+ | recordKeyType
+ { $$ = newNode<RecordKeyNode>($1); }
+ | symbol_table_alias_name '.' recordKeyType
+ { $$ = newNode<RecordKeyNode>($3, toName($1)); }
| KW_VALUE
{ $$ = newNode<DomainValidationNode>(); }
| datetime_value_expression
@@ -5719,6 +5719,12 @@
{ $$ = $1; }
;
+%type <blrOp> recordKeyType
+recordKeyType
+ : DB_KEY { $$ = blr_dbkey; }
+ | RDB_RECORD_VERSION { $$ = blr_record_version2; }
+ ;
+
%type <valueExprNode> datetime_value_expression
datetime_value_expression
: CURRENT_DATE
Modified: firebird/trunk/src/include/gen/codetext.h
===================================================================
--- firebird/trunk/src/include/gen/codetext.h 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/include/gen/codetext.h 2012-08-28 01:02:56 UTC (rev 57059)
@@ -804,6 +804,7 @@
{"upd_ins_with_complex_view", 336003101},
{"dsql_incompatible_trigger_type", 336003102},
{"dsql_db_trigger_type_cant_change", 336003103},
+ {"dsql_record_version_table", 336003104},
{"dyn_filter_not_found", 336068645},
{"dyn_func_not_found", 336068649},
{"dyn_index_not_found", 336068656},
Modified: firebird/trunk/src/include/gen/iberror.h
===================================================================
--- firebird/trunk/src/include/gen/iberror.h 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/include/gen/iberror.h 2012-08-28 01:02:56 UTC (rev 57059)
@@ -838,6 +838,7 @@
const ISC_STATUS isc_upd_ins_with_complex_view = 336003101L;
const ISC_STATUS isc_dsql_incompatible_trigger_type = 336003102L;
const ISC_STATUS isc_dsql_db_trigger_type_cant_change = 336003103L;
+const ISC_STATUS isc_dsql_record_version_table = 336003104L;
const ISC_STATUS isc_dyn_filter_not_found = 336068645L;
const ISC_STATUS isc_dyn_func_not_found = 336068649L;
const ISC_STATUS isc_dyn_index_not_found = 336068656L;
@@ -1224,7 +1225,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 = 1168;
+const ISC_STATUS isc_err_max = 1169;
#else /* c definitions */
@@ -2032,6 +2033,7 @@
#define isc_upd_ins_with_complex_view 336003101L
#define isc_dsql_incompatible_trigger_type 336003102L
#define isc_dsql_db_trigger_type_cant_change 336003103L
+#define isc_dsql_record_version_table 336003104L
#define isc_dyn_filter_not_found 336068645L
#define isc_dyn_func_not_found 336068649L
#define isc_dyn_index_not_found 336068656L
@@ -2418,7 +2420,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 1168
+#define isc_err_max 1169
#endif
Modified: firebird/trunk/src/include/gen/msgs.h
===================================================================
--- firebird/trunk/src/include/gen/msgs.h 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/include/gen/msgs.h 2012-08-28 01:02:56 UTC (rev 57059)
@@ -807,6 +807,7 @@
{336003101, "UPDATE OR INSERT without MATCHING could not be used with views based on more than one table"}, /* upd_ins_with_complex_view */
{336003102, "Incompatible trigger type"}, /* dsql_incompatible_trigger_type */
{336003103, "Database trigger type can't be changed"}, /* dsql_db_trigger_type_cant_change */
+ {336003104, "To be used with RDB$RECORD_VERSION, @1 must be a table or a view of single table"}, /* dsql_record_version_table */
{336068645, "BLOB Filter @1 not found"}, /* dyn_filter_not_found */
{336068649, "Function @1 not found"}, /* dyn_func_not_found */
{336068656, "Index not found"}, /* dyn_index_not_found */
Modified: firebird/trunk/src/include/gen/sql_code.h
===================================================================
--- firebird/trunk/src/include/gen/sql_code.h 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/include/gen/sql_code.h 2012-08-28 01:02:56 UTC (rev 57059)
@@ -803,6 +803,7 @@
{336003101, -817}, /* 29 upd_ins_with_complex_view */
{336003102, -817}, /* 30 dsql_incompatible_trigger_type */
{336003103, -817}, /* 31 dsql_db_trigger_type_cant_change */
+ {336003104, -607}, /* 32 dsql_record_version_table */
{336068645, -901}, /* 37 dyn_filter_not_found */
{336068649, -901}, /* 41 dyn_func_not_found */
{336068656, -901}, /* 48 dyn_index_not_found */
Modified: firebird/trunk/src/include/gen/sql_state.h
===================================================================
--- firebird/trunk/src/include/gen/sql_state.h 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/include/gen/sql_state.h 2012-08-28 01:02:56 UTC (rev 57059)
@@ -803,6 +803,7 @@
{336003101, "54001"}, // 29 upd_ins_with_complex_view
{336003102, "42000"}, // 30 dsql_incompatible_trigger_type
{336003103, "42000"}, // 31 dsql_db_trigger_type_cant_change
+ {336003104, "HY000"}, // 32 dsql_record_version_table
{336068645, "42000"}, // 37 dyn_filter_not_found
{336068649, "42000"}, // 41 dyn_func_not_found
{336068656, "42000"}, // 48 dyn_index_not_found
Modified: firebird/trunk/src/jrd/blp.h
===================================================================
--- firebird/trunk/src/jrd/blp.h 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/jrd/blp.h 2012-08-28 01:02:56 UTC (rev 57059)
@@ -244,5 +244,6 @@
{"subproc", procedure2},
{"subfunc_decl", subfunc_decl},
{"subfunc", function},
+ {"record_version2", byte_line},
{0, 0}
};
Modified: firebird/trunk/src/jrd/blr.h
===================================================================
--- firebird/trunk/src/jrd/blr.h 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/jrd/blr.h 2012-08-28 01:02:56 UTC (rev 57059)
@@ -403,5 +403,6 @@
#define blr_subproc (unsigned char) 206
#define blr_subfunc_decl (unsigned char) 207
#define blr_subfunc (unsigned char) 208
+#define blr_record_version2 (unsigned char) 209
#endif // JRD_BLR_H
Modified: firebird/trunk/src/jrd/constants.h
===================================================================
--- firebird/trunk/src/jrd/constants.h 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/jrd/constants.h 2012-08-28 01:02:56 UTC (rev 57059)
@@ -69,6 +69,8 @@
typedef TEXT SqlIdentifier[MAX_SQL_IDENTIFIER_SIZE];
const char* const DB_KEY_NAME = "DB_KEY";
+const char* const RDB_DB_KEY_NAME = "RDB$DB_KEY";
+const char* const RDB_RECORD_VERSION_NAME = "RDB$RECORD_VERSION";
const char* const NULL_STRING_MARK = "*** null ***";
const char* const UNKNOWN_STRING_MARK = "*** unknown ***";
Modified: firebird/trunk/src/msgs/facilities2.sql
===================================================================
--- firebird/trunk/src/msgs/facilities2.sql 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/msgs/facilities2.sql 2012-08-28 01:02:56 UTC (rev 57059)
@@ -5,7 +5,7 @@
('2012-01-23 20:10:30', 'QLI', 1, 532)
('2009-07-16 05:26:11', 'GFIX', 3, 121)
('1996-11-07 13:39:40', 'GPRE', 4, 1)
-('2005-11-05 13:09:00', 'DSQL', 7, 32)
+('2012-08-27 21:26:00', 'DSQL', 7, 33)
('2012-01-13 11:20:16', 'DYN', 8, 285)
('1996-11-07 13:39:40', 'INSTALL', 10, 1)
('1996-11-07 13:38:41', 'TEST', 11, 4)
Modified: firebird/trunk/src/msgs/messages2.sql
===================================================================
--- firebird/trunk/src/msgs/messages2.sql 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/msgs/messages2.sql 2012-08-28 01:02:56 UTC (rev 57059)
@@ -1596,6 +1596,7 @@
('upd_ins_with_complex_view', 'pass1_update_or_insert', 'pass1.cpp', NULL, 7, 29, NULL, 'UPDATE OR INSERT without MATCHING could not be used with views based on more than one table', NULL, NULL);
('dsql_incompatible_trigger_type', 'define_trigger', 'ddl.cpp', NULL, 7, 30, NULL, 'Incompatible trigger type', NULL, NULL);
('dsql_db_trigger_type_cant_change', 'define_trigger', 'ddl.cpp', NULL, 7, 31, NULL, 'Database trigger type can''t be changed', NULL, NULL);
+('dsql_record_version_table', 'MAKE_desc', 'ExprNodes.cpp', NULL, 7, 32, NULL, 'To be used with RDB$RECORD_VERSION, @1 must be a table or a view of single table', NULL, NULL);
-- Do not change the arguments of the previous DSQL messages.
-- Write the new DSQL messages here.
-- DYN
Modified: firebird/trunk/src/msgs/system_errors2.sql
===================================================================
--- firebird/trunk/src/msgs/system_errors2.sql 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/msgs/system_errors2.sql 2012-08-28 01:02:56 UTC (rev 57059)
@@ -791,6 +791,7 @@
(-817, '54', '001', 7, 29, 'upd_ins_with_complex_view', NULL, NULL)
(-817, '42', '000', 7, 30, 'dsql_incompatible_trigger_type', NULL, NULL)
(-817, '42', '000', 7, 31, 'dsql_db_trigger_type_cant_change', NULL, NULL)
+(-607, 'HY', '000', 7, 32, 'dsql_record_version_table', NULL, NULL)
-- DYN
(-901, '42', '000', 8, 37, 'dyn_filter_not_found', NULL, NULL)
(-901, '42', '000', 8, 41, 'dyn_func_not_found', NULL, NULL)
Modified: firebird/trunk/src/yvalve/keywords.cpp
===================================================================
--- firebird/trunk/src/yvalve/keywords.cpp 2012-08-25 03:42:56 UTC (rev 57058)
+++ firebird/trunk/src/yvalve/keywords.cpp 2012-08-28 01:02:56 UTC (rev 57059)
@@ -318,6 +318,7 @@
{RANK, "RANK", 2, false},
{DB_KEY, "RDB$DB_KEY", 1, false},
{RDB_GET_CONTEXT, "RDB$GET_CONTEXT", 2, true},
+ {RDB_RECORD_VERSION, "RDB$RECORD_VERSION", 2, false},
{RDB_SET_CONTEXT, "RDB$SET_CONTEXT", 2, true},
{READ, "READ", 1, false},
{REAL, "REAL", 1, false},
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|