From: <fir...@us...> - 2014-04-01 01:11:07
|
Revision: 59343 http://sourceforge.net/p/firebird/code/59343 Author: firebirds Date: 2014-04-01 01:11:00 +0000 (Tue, 01 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-03-31 16:20:12 UTC (rev 59342) +++ firebird/trunk/ChangeLog 2014-04-01 01:11:00 UTC (rev 59343) @@ -1,3 +1,15 @@ + 2014-03-31 16:17 asfernandes + M src/isql/isql.epp +Fixed CORE-4380 - ISQL truncates blob when reading an empty segment. + + 2014-03-31 02:04 asfernandes + M src/dsql/BoolNodes.cpp + M src/dsql/BoolNodes.h + M src/dsql/ExprNodes.cpp + M src/dsql/ExprNodes.h + M src/remote/server/os/win32/property.cpp +Misc. + 2014-03-30 12:59 dimitr M src/dsql/StmtNodes.cpp M src/jrd/exe.h Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-03-31 16:20:12 UTC (rev 59342) +++ firebird/trunk/src/jrd/build_no.h 2014-04-01 01:11:00 UTC (rev 59343) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31003 + FORMAL BUILD NUMBER:31005 */ -#define PRODUCT_VER_STRING "3.0.0.31003" -#define FILE_VER_STRING "WI-T3.0.0.31003" -#define LICENSE_VER_STRING "WI-T3.0.0.31003" -#define FILE_VER_NUMBER 3, 0, 0, 31003 +#define PRODUCT_VER_STRING "3.0.0.31005" +#define FILE_VER_STRING "WI-T3.0.0.31005" +#define LICENSE_VER_STRING "WI-T3.0.0.31005" +#define FILE_VER_NUMBER 3, 0, 0, 31005 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31003" +#define FB_BUILD_NO "31005" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-03-31 16:20:12 UTC (rev 59342) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-01 01:11:00 UTC (rev 59343) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31003 +BuildNum=31005 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-03 00:44:11
|
Revision: 59349 http://sourceforge.net/p/firebird/code/59349 Author: firebirds Date: 2014-04-03 00:44:07 +0000 (Thu, 03 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-02 11:53:23 UTC (rev 59348) +++ firebird/trunk/ChangeLog 2014-04-03 00:44:07 UTC (rev 59349) @@ -1,3 +1,30 @@ + 2014-04-02 11:53 alexpeshkoff + M src/jrd/constants.h +Fixed DDL triggers with code > 31 + + 2014-04-02 11:23 alexpeshkoff + M src/jrd/req.h +fixed the build + + 2014-04-02 02:32 robocop + M src/jrd/DatabaseSnapshot.cpp + M src/jrd/opt.cpp + M src/jrd/req.h +Fix constness. + + 2014-04-02 02:22 robocop + M src/burp/restore.epp + M src/dsql/DdlNodes.epp + M src/jrd/dfw.epp + M src/jrd/grant.epp + M src/jrd/met.epp + M src/jrd/rlck.cpp +Misc. + + 2014-04-02 02:20 robocop + M src/dsql/pass1.cpp +Shortcut. + 2014-03-31 16:17 asfernandes M src/isql/isql.epp Fixed CORE-4380 - ISQL truncates blob when reading an empty segment. Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-02 11:53:23 UTC (rev 59348) +++ firebird/trunk/src/jrd/build_no.h 2014-04-03 00:44:07 UTC (rev 59349) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31005 + FORMAL BUILD NUMBER:31010 */ -#define PRODUCT_VER_STRING "3.0.0.31005" -#define FILE_VER_STRING "WI-T3.0.0.31005" -#define LICENSE_VER_STRING "WI-T3.0.0.31005" -#define FILE_VER_NUMBER 3, 0, 0, 31005 +#define PRODUCT_VER_STRING "3.0.0.31010" +#define FILE_VER_STRING "WI-T3.0.0.31010" +#define LICENSE_VER_STRING "WI-T3.0.0.31010" +#define FILE_VER_NUMBER 3, 0, 0, 31010 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31005" +#define FB_BUILD_NO "31010" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-02 11:53:23 UTC (rev 59348) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-03 00:44:07 UTC (rev 59349) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31005 +BuildNum=31010 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2014-04-04 06:39:13
|
Revision: 59351 http://sourceforge.net/p/firebird/code/59351 Author: robocop Date: 2014-04-04 06:39:09 +0000 (Fri, 04 Apr 2014) Log Message: ----------- The 0th generator becomes unnamed. Only internal requests can access it (zero length names are not allowed from outside). RDB$GENERATORS is no longer a reserved name.System generators cannot be changed by user requests, but can be queried with gen_id(g, 0) if the permissions (ACL) allow that. We don't track dependencies on sys generators, it's not necessary. 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/ExprNodes.cpp firebird/trunk/src/dsql/ExprNodes.h firebird/trunk/src/dsql/StmtNodes.cpp firebird/trunk/src/dsql/StmtNodes.h 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/Attachment.h firebird/trunk/src/jrd/constants.h firebird/trunk/src/jrd/dfw.epp firebird/trunk/src/jrd/ini.epp firebird/trunk/src/jrd/jrd.cpp firebird/trunk/src/jrd/met.epp firebird/trunk/src/jrd/met_proto.h firebird/trunk/src/jrd/vio.cpp 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 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2014-04-04 06:39:09 UTC (rev 59351) @@ -1562,6 +1562,8 @@ PARAMETER (GDS__forupdate_systbl = 335545074) INTEGER*4 GDS__forupdate_temptbl PARAMETER (GDS__forupdate_temptbl = 335545075) + INTEGER*4 GDS__cant_modify_sysobj + PARAMETER (GDS__cant_modify_sysobj = 335545076) INTEGER*4 GDS__gfix_db_name PARAMETER (GDS__gfix_db_name = 335740929) INTEGER*4 GDS__gfix_invalid_sw @@ -1822,6 +1824,8 @@ PARAMETER (GDS__dyn_alter_user_no_clause = 336068891) INTEGER*4 GDS__dyn_duplicate_package_item PARAMETER (GDS__dyn_duplicate_package_item = 336068894) + INTEGER*4 GDS__dyn_cant_modify_sysobj + PARAMETER (GDS__dyn_cant_modify_sysobj = 336068895) 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 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/lang_helpers/gds_codes.pas 2014-04-04 06:39:09 UTC (rev 59351) @@ -788,6 +788,7 @@ gds_forupdate_virtualtbl = 335545073; gds_forupdate_systbl = 335545074; gds_forupdate_temptbl = 335545075; + gds_cant_modify_sysobj = 335545076; gds_gfix_db_name = 335740929; gds_gfix_invalid_sw = 335740930; gds_gfix_incmp_sw = 335740932; @@ -918,6 +919,7 @@ gds_dyn_domain_used_function = 336068890; gds_dyn_alter_user_no_clause = 336068891; gds_dyn_duplicate_package_item = 336068894; + gds_dyn_cant_modify_sysobj = 336068895; 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 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/dsql/DdlNodes.epp 2014-04-04 06:39:09 UTC (rev 59351) @@ -4881,6 +4881,8 @@ bool CreateAlterSequenceNode::executeAlter(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction) { + bool forbidden = false; + if (legacy) { // The only need for this code is that for the sake of backward compatibility @@ -4889,10 +4891,13 @@ // that the generator created in another transaction can be found here. This is done // using MET_lookup_generator() which works in the system transaction. - const SLONG id = MET_lookup_generator(tdbb, name); + const SLONG id = MET_lookup_generator(tdbb, name, &forbidden); if (id < 0) return false; + if (forbidden) + status_exception::raise(Arg::Gds(isc_dyn_cant_modify_sysobj) << "generator" << Arg::Str(name)); + executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_BEFORE, DDL_TRIGGER_ALTER_SEQUENCE, name); fb_assert(value.specified); @@ -4918,6 +4923,12 @@ { executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_BEFORE, DDL_TRIGGER_ALTER_SEQUENCE, name); + if (!X.RDB$SYSTEM_FLAG.NULL && X.RDB$SYSTEM_FLAG == 1) + { + forbidden = true; + break; + } + const SLONG id = X.RDB$GENERATOR_ID; const SINT64 val = value.specified ? value.value : (!X.RDB$INITIAL_VALUE.NULL ? X.RDB$INITIAL_VALUE : 0); @@ -4933,6 +4944,9 @@ } END_FOR + if (forbidden) + status_exception::raise(Arg::Gds(isc_dyn_cant_modify_sysobj) << "generator" << Arg::Str(name)); + return found; } @@ -4952,7 +4966,7 @@ { try { - SINT64 id = DYN_UTIL_gen_unique_id(tdbb, drq_g_nxt_gen_id, "RDB$GENERATORS"); + SINT64 id = DYN_UTIL_gen_unique_id(tdbb, drq_g_nxt_gen_id, MASTER_GENERATOR); id %= MAX_SSHORT + 1; if (id == 0) Modified: firebird/trunk/src/dsql/ExprNodes.cpp =================================================================== --- firebird/trunk/src/dsql/ExprNodes.cpp 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/dsql/ExprNodes.cpp 2014-04-04 06:39:09 UTC (rev 59351) @@ -5615,7 +5615,8 @@ : TypedNode<ValueExprNode, ExprNode::TYPE_GEN_ID>(pool), dialect1(aDialect1), generator(pool, name), - arg(aArg) + arg(aArg), + sysGen(false) { addChildNode(arg, arg); } @@ -5628,7 +5629,16 @@ GenIdNode* const node = FB_NEW(pool) GenIdNode(pool, (csb->blrVersion == 4), name, PAR_parse_value(tdbb, csb)); - if (!MET_load_generator(tdbb, node->generator)) + // This check seems faster than ==, but assumes the special generator is named "" + if (name.length() == 0) //(name == MASTER_GENERATOR) + { + fb_assert(!MASTER_GENERATOR[0]); + if (!(csb->csb_g_flags & csb_internal)) + PAR_error(csb, Arg::Gds(isc_gennotdef) << Arg::Str(name)); + + node->generator.id = 0; + } + else if (!MET_load_generator(tdbb, node->generator, &node->sysGen)) PAR_error(csb, Arg::Gds(isc_gennotdef) << Arg::Str(name)); if (csb->csb_g_flags & csb_get_dependencies) @@ -5652,6 +5662,7 @@ GenIdNode* const node = FB_NEW(getPool()) GenIdNode(getPool(), dialect1, generator.name, doDsqlPass(dsqlScratch, arg)); node->generator = generator; + node->sysGen = sysGen; return node; } @@ -5699,6 +5710,7 @@ GenIdNode* const node = FB_NEW(*tdbb->getDefaultPool()) GenIdNode( *tdbb->getDefaultPool(), dialect1, generator.name, copier.copy(tdbb, arg)); node->generator = generator; + node->sysGen = sysGen; return node; } @@ -5755,8 +5767,19 @@ if (request->req_flags & req_null) return NULL; - const SINT64 new_val = DPM_gen_id(tdbb, generator.id, false, MOV_get_int64(value, 0)); + const SINT64 change = MOV_get_int64(value, 0); + if (sysGen && change != 0) + { + const ULONG aflags = ATT_gbak_attachment | ATT_creator; + if (!request->hasInternalStatement() && + (tdbb->getAttachment()->att_flags & aflags) != aflags) + { + status_exception::raise(Arg::Gds(isc_cant_modify_sysobj) << "generator" << generator.name); + } + } + const SINT64 new_val = DPM_gen_id(tdbb, generator.id, false, change); + if (dialect1) impure->make_long((SLONG) new_val); else Modified: firebird/trunk/src/dsql/ExprNodes.h =================================================================== --- firebird/trunk/src/dsql/ExprNodes.h 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/dsql/ExprNodes.h 2014-04-04 06:39:09 UTC (rev 59351) @@ -679,6 +679,8 @@ bool dialect1; GeneratorItem generator; NestConst<ValueExprNode> arg; +private: + bool sysGen; }; Modified: firebird/trunk/src/dsql/StmtNodes.cpp =================================================================== --- firebird/trunk/src/dsql/StmtNodes.cpp 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/dsql/StmtNodes.cpp 2014-04-04 06:39:09 UTC (rev 59351) @@ -6513,9 +6513,13 @@ GenIdNode* const genNode = FB_NEW(csb->csb_pool) GenIdNode(csb->csb_pool, (csb->blrVersion == 4), generatorName, literal); - if (!MET_load_generator(tdbb, genNode->generator)) + bool sysGen = false; + if (!MET_load_generator(tdbb, genNode->generator, &sysGen)) PAR_error(csb, Arg::Gds(isc_gennotdef) << Arg::Str(generatorName)); + if (sysGen) + PAR_error(csb, Arg::Gds(isc_cant_modify_sysobj) << "generator" << generatorName); + assign->asgnFrom = genNode; } else //if (value) @@ -7139,9 +7143,13 @@ SetGeneratorNode* const node = FB_NEW(pool) SetGeneratorNode(pool, name); - if (!MET_load_generator(tdbb, node->generator)) + bool sysGen = false; + if (!MET_load_generator(tdbb, node->generator, &sysGen)) PAR_error(csb, Arg::Gds(isc_gennotdef) << Arg::Str(name)); + if (sysGen) + PAR_error(csb, Arg::Gds(isc_cant_modify_sysobj) << "generator" << name); + node->value = PAR_parse_value(tdbb, csb); return node; Modified: firebird/trunk/src/dsql/StmtNodes.h =================================================================== --- firebird/trunk/src/dsql/StmtNodes.h 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/dsql/StmtNodes.h 2014-04-04 06:39:09 UTC (rev 59351) @@ -1321,7 +1321,7 @@ public: SetGeneratorNode(MemoryPool& pool, const Firebird::MetaName& name, ValueExprNode* aValue = NULL) : TypedNode<StmtNode, StmtNode::TYPE_SET_GENERATOR>(pool), - generator(pool, name), value(aValue) + generator(pool, name), value(aValue), sysGen(false) { } @@ -1343,6 +1343,9 @@ public: GeneratorItem generator; NestConst<ValueExprNode> value; + +private: + bool sysGen; }; Modified: firebird/trunk/src/include/gen/codetext.h =================================================================== --- firebird/trunk/src/include/gen/codetext.h 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/include/gen/codetext.h 2014-04-04 06:39:09 UTC (rev 59351) @@ -777,6 +777,7 @@ {"forupdate_virtualtbl", 335545073}, {"forupdate_systbl", 335545074}, {"forupdate_temptbl", 335545075}, + {"cant_modify_sysobj", 335545076}, {"gfix_db_name", 335740929}, {"gfix_invalid_sw", 335740930}, {"gfix_incmp_sw", 335740932}, @@ -907,6 +908,7 @@ {"dyn_domain_used_function", 336068890}, {"dyn_alter_user_no_clause", 336068891}, {"dyn_duplicate_package_item", 336068894}, + {"dyn_cant_modify_sysobj", 336068895}, {"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 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/include/gen/iberror.h 2014-04-04 06:39:09 UTC (rev 59351) @@ -811,6 +811,7 @@ const ISC_STATUS isc_forupdate_virtualtbl = 335545073L; const ISC_STATUS isc_forupdate_systbl = 335545074L; const ISC_STATUS isc_forupdate_temptbl = 335545075L; +const ISC_STATUS isc_cant_modify_sysobj = 335545076L; const ISC_STATUS isc_gfix_db_name = 335740929L; const ISC_STATUS isc_gfix_invalid_sw = 335740930L; const ISC_STATUS isc_gfix_incmp_sw = 335740932L; @@ -941,6 +942,7 @@ const ISC_STATUS isc_dyn_domain_used_function = 336068890L; const ISC_STATUS isc_dyn_alter_user_no_clause = 336068891L; const ISC_STATUS isc_dyn_duplicate_package_item = 336068894L; +const ISC_STATUS isc_dyn_cant_modify_sysobj = 336068895L; 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; @@ -1257,7 +1259,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 = 1201; +const ISC_STATUS isc_err_max = 1203; #else /* c definitions */ @@ -2038,6 +2040,7 @@ #define isc_forupdate_virtualtbl 335545073L #define isc_forupdate_systbl 335545074L #define isc_forupdate_temptbl 335545075L +#define isc_cant_modify_sysobj 335545076L #define isc_gfix_db_name 335740929L #define isc_gfix_invalid_sw 335740930L #define isc_gfix_incmp_sw 335740932L @@ -2168,6 +2171,7 @@ #define isc_dyn_domain_used_function 336068890L #define isc_dyn_alter_user_no_clause 336068891L #define isc_dyn_duplicate_package_item 336068894L +#define isc_dyn_cant_modify_sysobj 336068895L #define isc_gbak_unknown_switch 336330753L #define isc_gbak_page_size_missing 336330754L #define isc_gbak_page_size_toobig 336330755L @@ -2484,7 +2488,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 1201 +#define isc_err_max 1203 #endif Modified: firebird/trunk/src/include/gen/msgs.h =================================================================== --- firebird/trunk/src/include/gen/msgs.h 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/include/gen/msgs.h 2014-04-04 06:39:09 UTC (rev 59351) @@ -780,6 +780,7 @@ {335545073, "Cannot select virtual table @1 for update WITH LOCK"}, /* forupdate_virtualtbl */ {335545074, "Cannot select system table @1 for update WITH LOCK"}, /* forupdate_systbl */ {335545075, "Cannot select temporary table @1 for update WITH LOCK"}, /* forupdate_temptbl */ + {335545076, "System @1 @2 cannot be modified"}, /* cant_modify_sysobj */ {335740929, "data base file name (@1) already given"}, /* gfix_db_name */ {335740930, "invalid switch @1"}, /* gfix_invalid_sw */ {335740932, "incompatible switch combination"}, /* gfix_incmp_sw */ @@ -910,6 +911,7 @@ {336068890, "Domain @1 is used in function @2 (parameter name @3) and cannot be dropped"}, /* dyn_domain_used_function */ {336068891, "ALTER USER requires at least one clause to be specified"}, /* dyn_alter_user_no_clause */ {336068894, "Duplicate @1 @2"}, /* dyn_duplicate_package_item */ + {336068895, "System @1 @2 cannot be modified"}, /* dyn_cant_modify_sysobj */ {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 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/include/gen/sql_code.h 2014-04-04 06:39:09 UTC (rev 59351) @@ -776,6 +776,7 @@ {335545073, -901}, /* 753 forupdate_virtualtbl */ {335545074, -901}, /* 754 forupdate_systbl */ {335545075, -901}, /* 755 forupdate_temptbl */ + {335545076, -901}, /* 756 cant_modify_sysobj */ {335740929, -901}, /* 1 gfix_db_name */ {335740930, -901}, /* 2 gfix_invalid_sw */ {335740932, -901}, /* 4 gfix_incmp_sw */ @@ -906,6 +907,7 @@ {336068890, -901}, /* 282 dyn_domain_used_function */ {336068891, -901}, /* 283 dyn_alter_user_no_clause */ {336068894, -901}, /* 286 dyn_duplicate_package_item */ + {336068895, -901}, /* 287 dyn_cant_modify_sysobj */ {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 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/include/gen/sql_state.h 2014-04-04 06:39:09 UTC (rev 59351) @@ -776,6 +776,7 @@ {335545073, "HY000"}, // 753 forupdate_virtualtbl {335545074, "HY000"}, // 754 forupdate_systbl {335545075, "HY000"}, // 755 forupdate_temptbl + {335545076, "42000"}, // 756 cant_modify_sysobj {335740929, "00000"}, // 1 gfix_db_name {335740930, "00000"}, // 2 gfix_invalid_sw {335740932, "00000"}, // 4 gfix_incmp_sw @@ -906,6 +907,7 @@ {336068890, "HY000"}, // 282 dyn_domain_used_function {336068891, "42000"}, // 283 dyn_alter_user_no_clause {336068894, "42000"}, // 286 dyn_duplicate_package_item + {336068895, "42000"}, // 287 dyn_cant_modify_sysobj {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/Attachment.h =================================================================== --- firebird/trunk/src/jrd/Attachment.h 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/jrd/Attachment.h 2014-04-04 06:39:09 UTC (rev 59351) @@ -391,6 +391,7 @@ const ULONG ATT_async_manual_lock = 0x08000L; // Async mutex was locked manually const ULONG ATT_purge_started = 0x10000L; // Purge already started - avoid 2 purges at once const ULONG ATT_system = 0x20000L; // Special system attachment +const ULONG ATT_creator = 0x40000L; // This attachment created the DB. const ULONG ATT_NO_CLEANUP = (ATT_no_cleanup | ATT_notify_gc); Modified: firebird/trunk/src/jrd/constants.h =================================================================== --- firebird/trunk/src/jrd/constants.h 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/jrd/constants.h 2014-04-04 06:39:09 UTC (rev 59351) @@ -123,6 +123,10 @@ const char* const IMPLICIT_PK_PREFIX = "RDB$PRIMARY"; const int IMPLICIT_PK_PREFIX_LEN = 11; +// The invisible "id zero" generator. +const char* const MASTER_GENERATOR = ""; //Was "RDB$GENERATORS"; + + // Automatically created security classes for SQL objects. // Keep in sync with trig.h const char* const DEFAULT_CLASS = "SQL$DEFAULT"; Modified: firebird/trunk/src/jrd/dfw.epp =================================================================== --- firebird/trunk/src/jrd/dfw.epp 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/jrd/dfw.epp 2014-04-04 06:39:09 UTC (rev 59351) @@ -3573,6 +3573,10 @@ DPM_gen_id(tdbb, id, true, value); } } +#ifdef DEV_BUILD + else // This is a test only + status_exception::raise(Arg::Gds(isc_cant_modify_sysobj) << "generator" << work->dfw_name); +#endif } break; } Modified: firebird/trunk/src/jrd/ini.epp =================================================================== --- firebird/trunk/src/jrd/ini.epp 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/jrd/ini.epp 2014-04-04 06:39:09 UTC (rev 59351) @@ -398,8 +398,9 @@ for (const gen* generator = generators; generator->gen_name; generator++) store_generator(tdbb, generator, handle1, ownerName); + // Redundant, VIO_store does the job. // Adjust the value of the hidden generator RDB$GENERATORS - DPM_gen_id(tdbb, 0, true, FB_NELEM(generators) - 1); + //DPM_gen_id(tdbb, 0, true, FB_NELEM(generators) - 1); // store system-defined triggers Modified: firebird/trunk/src/jrd/jrd.cpp =================================================================== --- firebird/trunk/src/jrd/jrd.cpp 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/jrd/jrd.cpp 2014-04-04 06:39:09 UTC (rev 59351) @@ -950,7 +950,7 @@ Jrd::Attachment* attachment, Database* dbb); static JAttachment* init(thread_db*, const PathName&, const PathName&, RefPtr<Config>, bool, const DatabaseOptions&, RefMutexUnlock&, IPluginConfig*); -static JAttachment* create_attachment(const PathName&, Database*, const DatabaseOptions&); +static JAttachment* create_attachment(const PathName&, Database*, const DatabaseOptions&, bool newDb); static void prepare_tra(thread_db*, jrd_tra*, USHORT, const UCHAR*); static void start_transaction(thread_db* tdbb, bool transliterate, jrd_tra** tra_handle, Jrd::Attachment* attachment, unsigned int tpb_length, const UCHAR* tpb); @@ -5906,7 +5906,7 @@ fb_assert(!(dbb->dbb_flags & DBB_new)); tdbb->setDatabase(dbb); - jAtt = create_attachment(alias_name, dbb, options); + jAtt = create_attachment(alias_name, dbb, options, !attach_flag); if (dbb->dbb_linger_timer) dbb->dbb_linger_timer->reset(); @@ -5960,9 +5960,9 @@ dbbGuard.lock(SYNC_EXCLUSIVE); tdbb->setDatabase(dbb); - jAtt = create_attachment(alias_name, dbb, options); + jAtt = create_attachment(alias_name, dbb, options, !attach_flag); tdbb->setAttachment(jAtt->getHandle()); - } + } // end scope // provide context pool for the rest stuff Jrd::ContextPoolHolder context(tdbb, dbb->dbb_permanent); @@ -6003,7 +6003,8 @@ static JAttachment* create_attachment(const PathName& alias_name, Database* dbb, - const DatabaseOptions& options) + const DatabaseOptions& options, + bool newDb) { /************************************** * @@ -6045,6 +6046,8 @@ jAtt->addRef(); // See also REF_NO_INCR RefPtr in unwindAttach() attachment->att_interface = jAtt; jAtt->manualLock(attachment->att_flags); + if (newDb) + attachment->att_flags |= ATT_creator; return jAtt; } Modified: firebird/trunk/src/jrd/met.epp =================================================================== --- firebird/trunk/src/jrd/met.epp 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/jrd/met.epp 2014-04-04 06:39:09 UTC (rev 59351) @@ -2271,7 +2271,7 @@ } -bool MET_load_generator(thread_db* tdbb, GeneratorItem& item) +bool MET_load_generator(thread_db* tdbb, GeneratorItem& item, bool* sysGen) { /************************************** * @@ -2286,9 +2286,11 @@ SET_TDBB(tdbb); Attachment* attachment = tdbb->getAttachment(); - if (item.name == "RDB$GENERATORS") + if (item.name == MASTER_GENERATOR) { item.id = 0; + if (sysGen) + *sysGen = true; return true; } @@ -2299,6 +2301,8 @@ { item.id = X.RDB$GENERATOR_ID; item.secName = X.RDB$SECURITY_CLASS; + if (sysGen) + *sysGen = (!X.RDB$SYSTEM_FLAG.NULL && X.RDB$SYSTEM_FLAG == 1); return true; } END_FOR @@ -2306,7 +2310,7 @@ return false; } -SLONG MET_lookup_generator(thread_db* tdbb, const MetaName& name) +SLONG MET_lookup_generator(thread_db* tdbb, const MetaName& name, bool* sysGen) { /************************************** * @@ -2321,14 +2325,21 @@ SET_TDBB(tdbb); Attachment* attachment = tdbb->getAttachment(); - if (name == "RDB$GENERATORS") + if (name == MASTER_GENERATOR) + { + if (sysGen) + *sysGen = true; return 0; + } AutoCacheRequest request(tdbb, irq_l_gen_id, IRQ_REQUESTS); FOR(REQUEST_HANDLE request) X IN RDB$GENERATORS WITH X.RDB$GENERATOR_NAME EQ name.c_str() { + if (sysGen) + *sysGen = (!X.RDB$SYSTEM_FLAG.NULL && X.RDB$SYSTEM_FLAG == 1); + return X.RDB$GENERATOR_ID; } END_FOR @@ -2336,7 +2347,7 @@ return -1; } -void MET_lookup_generator_id(thread_db* tdbb, SLONG gen_id, MetaName& name) +bool MET_lookup_generator_id(thread_db* tdbb, SLONG gen_id, MetaName& name, bool* sysGen) { /************************************** * @@ -2352,11 +2363,7 @@ SET_TDBB (tdbb); Attachment* attachment = tdbb->getAttachment(); - if (!gen_id) - { - name = "RDB$GENERATORS"; - return; - } + fb_assert(gen_id != 0); name = ""; @@ -2365,9 +2372,14 @@ FOR (REQUEST_HANDLE request) X IN RDB$GENERATORS WITH X.RDB$GENERATOR_ID EQ gen_id { + if (sysGen) + *sysGen = (!X.RDB$SYSTEM_FLAG.NULL && X.RDB$SYSTEM_FLAG == 1); + name = X.RDB$GENERATOR_NAME; } END_FOR + + return name.length() != 0; } void MET_lookup_index(thread_db* tdbb, @@ -5012,11 +5024,14 @@ case obj_field: dpdo_name = dependency.name; break; - // CVC: Here I'm going to track those pesky things named generators and UDFs. case obj_generator: { + // CVC: Here I'm going to track those pesky things named generators and UDFs. + // But don't track sys gens. + bool sysGen = false; const SLONG number = dependency.number; - MET_lookup_generator_id (tdbb, number, name); + if (number == 0 || !MET_lookup_generator_id(tdbb, number, name, &sysGen) || sysGen) + continue; dpdo_name = &name; } break; Modified: firebird/trunk/src/jrd/met_proto.h =================================================================== --- firebird/trunk/src/jrd/met_proto.h 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/jrd/met_proto.h 2014-04-04 06:39:09 UTC (rev 59351) @@ -91,9 +91,9 @@ void MET_lookup_exception(Jrd::thread_db*, SLONG, /* OUT */ Firebird::MetaName&, /* OUT */ Firebird::string*); int MET_lookup_field(Jrd::thread_db*, Jrd::jrd_rel*, const Firebird::MetaName&); Jrd::BlobFilter* MET_lookup_filter(Jrd::thread_db*, SSHORT, SSHORT); -bool MET_load_generator(Jrd::thread_db*, Jrd::GeneratorItem&); -SLONG MET_lookup_generator(Jrd::thread_db*, const Firebird::MetaName&); -void MET_lookup_generator_id(Jrd::thread_db*, SLONG, Firebird::MetaName&); +bool MET_load_generator(Jrd::thread_db*, Jrd::GeneratorItem&, bool* sysGen = 0); +SLONG MET_lookup_generator(Jrd::thread_db*, const Firebird::MetaName&, bool* sysGen = 0); +bool MET_lookup_generator_id(Jrd::thread_db*, SLONG, Firebird::MetaName&, bool* sysGen = 0); void MET_lookup_index(Jrd::thread_db*, Firebird::MetaName&, const Firebird::MetaName&, USHORT); SLONG MET_lookup_index_name(Jrd::thread_db*, const Firebird::MetaName&, SLONG*, SSHORT*); bool MET_lookup_partner(Jrd::thread_db*, Jrd::jrd_rel*, struct Jrd::index_desc*, const TEXT*); Modified: firebird/trunk/src/jrd/vio.cpp =================================================================== --- firebird/trunk/src/jrd/vio.cpp 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/jrd/vio.cpp 2014-04-04 06:39:09 UTC (rev 59351) @@ -3145,7 +3145,7 @@ EVL_field(0, rpb->rpb_record, f_gen_name, &desc); EVL_field(0, rpb->rpb_record, f_gen_id, &desc2); object_id = set_metadata_id(tdbb, rpb->rpb_record, - f_gen_id, drq_g_nxt_gen_id, "RDB$GENERATORS"); + f_gen_id, drq_g_nxt_gen_id, MASTER_GENERATOR); transaction->getGenIdCache()->put(object_id, 0); DFW_post_work(transaction, dfw_set_generator, &desc, object_id); set_system_flag(tdbb, rpb->rpb_record, f_gen_sys_flag); @@ -5323,7 +5323,7 @@ if (force_flag || (!(attachment->att_flags & ATT_gbak_attachment) && - !(request->getStatement()->flags & JrdStatement::FLAG_INTERNAL))) + !request->hasInternalStatement())) { fb_assert(relation->rel_flags & REL_scanned); Modified: firebird/trunk/src/msgs/facilities2.sql =================================================================== --- firebird/trunk/src/msgs/facilities2.sql 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/msgs/facilities2.sql 2014-04-04 06:39:09 UTC (rev 59351) @@ -1,12 +1,12 @@ /* MAX_NUMBER is the next number to be used, always one more than the highest message number. */ set bulk_insert INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES (?, ?, ?, ?); -- -('2014-03-26 22:42:01', 'JRD', 0, 756) +('2014-03-31 20:48:34', 'JRD', 0, 757) ('2012-01-23 20:10:30', 'QLI', 1, 532) ('2013-11-13 15:59:10', 'GFIX', 3, 122) ('1996-11-07 13:39:40', 'GPRE', 4, 1) ('2012-08-27 21:26:00', 'DSQL', 7, 33) -('2014-03-26 12:27:00', 'DYN', 8, 287) +('2014-03-31 18:46:42', 'DYN', 8, 288) ('1996-11-07 13:39:40', 'INSTALL', 10, 1) ('1996-11-07 13:38:41', 'TEST', 11, 4) ('2014-03-03 19:17:14', 'GBAK', 12, 353) Modified: firebird/trunk/src/msgs/messages2.sql =================================================================== --- firebird/trunk/src/msgs/messages2.sql 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/msgs/messages2.sql 2014-04-04 06:39:09 UTC (rev 59351) @@ -863,6 +863,7 @@ ('forupdate_virtualtbl', 'PAR_rse', 'par.cpp', NULL, 0, 753, NULL, 'Cannot select virtual table @1 for update WITH LOCK', NULL, NULL) ('forupdate_systbl', 'PAR_rse', 'par.cpp', NULL, 0, 754, NULL, 'Cannot select system table @1 for update WITH LOCK', NULL, NULL) ('forupdate_temptbl', 'PAR_rse', 'par.cpp', NULL, 0, 755, NULL, 'Cannot select temporary table @1 for update WITH LOCK', NULL, NULL) +('cant_modify_sysobj', NULL, 'ExprNodes.cpp', NULL, 0, 756, NULL, 'System @1 @2 cannot be modified', NULL, 'Ex: System generator rdb$... cannot be modified') -- QLI (NULL, NULL, NULL, NULL, 1, 0, NULL, 'expected type', NULL, NULL); (NULL, NULL, NULL, NULL, 1, 1, NULL, 'bad block type', NULL, NULL); @@ -1911,6 +1912,7 @@ (NULL, 'DYN_delete_role', 'dyn_del.epp', NULL, 8, 284, NULL, 'Cannot delete system SQL role @1', NULL, NULL); (NULL, 'DdlNodes.epp', 'AlterRelationNode::modifyField', NULL, 8, 285, NULL, 'Column @1 is not an identity column', NULL, NULL); ('dyn_duplicate_package_item', NULL, 'PackageNodes.epp', NULL, 8, 286, NULL, 'Duplicate @1 @2', NULL, NULL); +('dyn_cant_modify_sysobj', NULL, 'DdlNodes.epp', NULL, 8, 287, NULL, 'System @1 @2 cannot be modified', NULL, 'Ex: System generator rdb$... cannot be modified'); 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 2014-04-03 12:33:08 UTC (rev 59350) +++ firebird/trunk/src/msgs/system_errors2.sql 2014-04-04 06:39:09 UTC (rev 59351) @@ -762,6 +762,7 @@ (-901, 'HY', '000', 0, 753, 'forupdate_virtualtbl', NULL, NULL) (-901, 'HY', '000', 0, 754, 'forupdate_systbl', NULL, NULL) (-901, 'HY', '000', 0, 755, 'forupdate_temptbl', NULL, NULL) +(-901, '42', '000', 0, 756, 'cant_modify_sysobj', NULL, NULL) -- GFIX (-901, '00', '000', 3, 1, 'gfix_db_name', NULL, NULL) (-901, '00', '000', 3, 2, 'gfix_invalid_sw', NULL, NULL) @@ -895,6 +896,7 @@ (-901, 'HY', '000', 8, 282, 'dyn_domain_used_function', NULL, NULL) (-901, '42', '000', 8, 283, 'dyn_alter_user_no_clause', NULL, NULL) (-901, '42', '000', 8, 286, 'dyn_duplicate_package_item', NULL, NULL) +(-901, '42', '000', 8, 287, 'dyn_cant_modify_sysobj', 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. |
From: <ale...@us...> - 2014-04-04 15:57:23
|
Revision: 59358 http://sourceforge.net/p/firebird/code/59358 Author: alexpeshkoff Date: 2014-04-04 15:57:18 +0000 (Fri, 04 Apr 2014) Log Message: ----------- Implemented CORE-3370: Resolve additional aspects of multiple security databases from services and cross-database requests POV (mapping names) Modified Paths: -------------- firebird/trunk/builds/install/misc/databases.conf.in firebird/trunk/lang_helpers/gds_codes.ftn firebird/trunk/lang_helpers/gds_codes.pas firebird/trunk/src/alice/alice.cpp firebird/trunk/src/alice/aliceswi.h firebird/trunk/src/auth/AuthDbg.cpp firebird/trunk/src/auth/AuthDbg.h firebird/trunk/src/auth/SecureRemotePassword/Message.h firebird/trunk/src/auth/SecureRemotePassword/manage/SrpManagement.cpp firebird/trunk/src/auth/SecureRemotePassword/server/SrpServer.cpp firebird/trunk/src/auth/SecurityDatabase/LegacyManagement.epp firebird/trunk/src/auth/SecurityDatabase/LegacyServer.cpp firebird/trunk/src/auth/trusted/AuthSspi.cpp firebird/trunk/src/auth/trusted/AuthSspi.h firebird/trunk/src/burp/backup.epp firebird/trunk/src/burp/burp.cpp firebird/trunk/src/burp/burp.h firebird/trunk/src/burp/burpswi.h firebird/trunk/src/burp/restore.epp firebird/trunk/src/common/Auth.cpp firebird/trunk/src/common/Auth.h firebird/trunk/src/common/MsgMetadata.cpp firebird/trunk/src/common/MsgMetadata.h firebird/trunk/src/common/StatusArg.cpp firebird/trunk/src/common/StatusArg.h firebird/trunk/src/common/classes/ClumpletReader.cpp firebird/trunk/src/common/classes/ClumpletReader.h firebird/trunk/src/common/classes/Hash.h firebird/trunk/src/common/db_alias.cpp firebird/trunk/src/common/db_alias.h firebird/trunk/src/common/isc_s_proto.h firebird/trunk/src/common/security.cpp firebird/trunk/src/common/security.h firebird/trunk/src/dsql/DdlNodes.epp firebird/trunk/src/dsql/DdlNodes.h firebird/trunk/src/dsql/parse.y firebird/trunk/src/include/firebird/Auth.h firebird/trunk/src/include/firebird/Provider.h firebird/trunk/src/include/gen/codetext.h firebird/trunk/src/include/gen/iberror.h firebird/trunk/src/include/gen/ids.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/isql/extract.epp firebird/trunk/src/isql/isql.h firebird/trunk/src/isql/show.epp firebird/trunk/src/isql/show_proto.h firebird/trunk/src/jrd/UserManagement.cpp firebird/trunk/src/jrd/constants.h firebird/trunk/src/jrd/dfw.epp firebird/trunk/src/jrd/drq.h firebird/trunk/src/jrd/extds/ExtDS.cpp firebird/trunk/src/jrd/fields.h firebird/trunk/src/jrd/idx.h firebird/trunk/src/jrd/jrd.cpp firebird/trunk/src/jrd/names.h firebird/trunk/src/jrd/opt.cpp firebird/trunk/src/jrd/relations.h firebird/trunk/src/jrd/scl.epp firebird/trunk/src/jrd/scl.h firebird/trunk/src/jrd/svc.cpp firebird/trunk/src/jrd/svc.h firebird/trunk/src/jrd/tra.cpp firebird/trunk/src/jrd/tra.h firebird/trunk/src/jrd/trace/TraceCmdLine.cpp firebird/trunk/src/jrd/trace/traceswi.h firebird/trunk/src/msgs/facilities2.sql firebird/trunk/src/msgs/messages2.sql firebird/trunk/src/msgs/system_errors2.sql firebird/trunk/src/remote/server/server.cpp firebird/trunk/src/utilities/gsec/gsec.cpp firebird/trunk/src/utilities/gsec/gsecswi.h firebird/trunk/src/utilities/gstat/dba.epp firebird/trunk/src/utilities/gstat/dbaswi.h firebird/trunk/src/utilities/nbackup/nbackup.cpp firebird/trunk/src/utilities/nbackup/nbkswi.h firebird/trunk/src/yvalve/MasterImplementation.cpp firebird/trunk/src/yvalve/keywords.cpp Added Paths: ----------- firebird/trunk/doc/sql.extensions/README.mapping.html firebird/trunk/src/jrd/Mapping.cpp firebird/trunk/src/jrd/Mapping.h Modified: firebird/trunk/builds/install/misc/databases.conf.in =================================================================== --- firebird/trunk/builds/install/misc/databases.conf.in 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/builds/install/misc/databases.conf.in 2014-04-04 15:57:18 UTC (rev 59358) @@ -27,6 +27,7 @@ security.db = $(dir_secDb)/security3.fdb { RemoteAccess = false + DefaultDbCachePages = 50 } # Added: firebird/trunk/doc/sql.extensions/README.mapping.html =================================================================== --- firebird/trunk/doc/sql.extensions/README.mapping.html (rev 0) +++ firebird/trunk/doc/sql.extensions/README.mapping.html 2014-04-04 15:57:18 UTC (rev 59358) @@ -0,0 +1,240 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1"> + <TITLE></TITLE> + <META NAME="GENERATOR" CONTENT="OpenOffice 4.0.1 (Unix)"> + <META NAME="AUTHOR" CONTENT="irina "> + <META NAME="CREATED" CONTENT="20140325;10305100"> + <META NAME="CHANGEDBY" CONTENT="Alex Peshkoff"> + <META NAME="CHANGED" CONTENT="20140404;19502000"> + <STYLE TYPE="text/css"> + <!-- + @page { margin: 0.79in } + P { margin-bottom: 0.08in } + A:link { so-language: zxx } + --> + </STYLE> +</HEAD> +<BODY LANG="ru-RU" DIR="LTR"> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>SQL Language +Extension: CREATE/ALTER/CREATE_OR_ALTER/DROP MAPPING</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"> <FONT SIZE=4>Implements +capability to control mapping of security objects to and between +databases.</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Author:</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"> <FONT SIZE=4>Alex +Peshkoff <<A HREF="mailto:pes...@ma...">pes...@ma...</A>></FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Preamble:</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Firebird 3 +supports multiple security databases. This is great feature, but it +raises some problems, missing in systems with single security +database. Clusters of databases, using same security database, are +efficiently separated and this is what we typically want to achieve +using different security databases. But in some cases we need +controlled limited interaction between such clusters. As an examples +can be provided EXECUTE STATEMENT ON EXTERNAL DATA SOURCE when some +data exchange between clusters is required and letting server-wide +SYSDBA access databases from other clusters using services. More or +less similar problems were already known in windows version of +firebird since v. 2.1 due to presence of trusted windows +authentication – we had 2 separate lists of users (in security +database and OS) and sometimes it was needed to make them be related. +For example it appears to be good idea to automatically assign to +windows users from some group appropriate firebird role.</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Single +solution for all this problems is MAPPING login information, assigned +to user when it connected to firebird server, to internal security +objects in database – current_user and current_role. Mapping +rule contains 4 parts of information: </FONT> +</P> +<UL> + <LI><P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>mapping + scope (is mapping local for current database or affects all + databases in cluster, including security database),</FONT></P> + <LI><P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>mapping + name (mappings are named like all the other objects in database), </FONT> + </P> + <LI><P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>from + what we map </FONT> + </P> + <LI><P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>to what + we map.</FONT></P> +</UL> +<P STYLE="margin-bottom: 0in"><FONT SIZE=4>Here it's necessary to +mention that all versions of firebird had one hardcoded global +default rule – users authenticated in security database are +always mapped into any database one-to-one. This rule is safe - if we +have some security database it makes no use not to trust itself. +Therefore (and due to backward compatibility) this rule is kept as is +in firebird 3. What about mapping windows users to current_user +(which was enabled by default in 2.1 & 2.5 when trusted +authentication enabled) in firebird 3 it must be done explicitly. +This is required for systems with multiple security databases - not +all of them need/use windows trusted authentication.</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>'From' part +of mapping has 4 items:</FONT></P> +<UL> + <LI><P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>authentication + source (plugin name or result of mapping in other database or use of + serverwide authentication or any method),</FONT></P> + <LI><P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>name of + database where authentication succeeded, </FONT> + </P> + <LI><P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>name + from which mapping is performed,</FONT></P> + <LI><P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>type of + that name (username, role, OS group – this depends upon plugin + which added that name during authentication).</FONT></P> +</UL> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Each item may +be ignored (any item is accepted) except type – it's definitely +bad idea to mix different types of security objects.</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>'To' part has +2 items:</FONT></P> +<UL> + <LI><P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>name to + which mapping is performed,</FONT></P> + <LI><P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>type of + that name (only USER/ROLE are accepted here).</FONT></P> +</UL> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Mappings are +defined using SQL (DDL) commands.</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Syntax:</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-left: 0.46in; margin-bottom: 0in; page-break-before: auto"> +<FONT SIZE=4>{CREATE | ALTER | CREATE OR ALTER} [GLOBAL] MAPPING name +USING {PLUGIN name [IN database] | ANY PLUGIN [IN database | +SERVERWIDE] | MAPPING [IN database] | '*' [IN database]} FROM {ANY +type | type name} TO {USER | ROLE} [name]</FONT></P> +<P LANG="en-US" STYLE="margin-left: 0.46in; margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-left: 0.46in; margin-bottom: 0in"><FONT SIZE=4>DROP +[GLOBAL] MAPPING</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Description:</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Each mapping +may be tagged as GLOBAL. Pay attention that global and local maps +with same name may exist and they are different objects!</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Create, alter +and create or alter commands use same set of options. Name of mapping +is used to identify it in former DDL commands. USING clause has a +most complicated set of options. One can provide explicit plugin +name, making it work only for given plugin, or make it use any plugin +(but not a result of previous mappings), or make it work only with +server-wide plugins, or make it work only with previous mapping +results, or let it use any method using asterisk. In almost all cases +(except server-wide authentication which is not related with +databases) one can also provide name of database in which name from +which mapping is performed was “born”. FROM clause must +set required parameter – type of name from which mapping is +done. When mapping names from plugins type is defined by plugin, +when previous mapping results - type can be only user or role. One +can provide explicit name which will be taken into an account by this +mapping or use ANY keyword to work with any name of given type. In TO +clause USER or ROLE (to what mapping is done) must be specified, name +is optional - when it is not provided original name (from what +mapping is done) is used.</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Samples:</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>All sample +are provided for CREATE command, use of ALTER is exactly the same, +use of DROP is obvious.</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Enable use of +windows trusted authentication in all databases, using current +security database:</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>CREATE GLOBAL +MAPPING TRUSTED_AUTH USING PLUGIN WIN_SSPI FROM ANY USER TO USER;</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Enable +SYSDBA-like access for windows admins:</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>CREATE +MAPPING WIN_ADMINS USING PLUGIN WIN_SSPI FROM Predefined_Group +DOMAIN_ANY_RID_ADMINS TO ROLE RDB$ADMIN;</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>(there is no +group DOMAIN_ANY_RID_ADMINS in windows, but such name is added by +win_sspi plugin to provide exact backwards compatibility)</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Enable +particular user from other database access current database with +other name:</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>CREATE +MAPPING FROM_RT USING PLUGIN SRP IN "rt" FROM USER U1 TO +USER U2;</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>(providing +database names/aliases in double quotes is important for file name +case-sensitive operating systems)</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Enable +server's SYDBA (from main security database) access current database +assuming I has non-default security database:</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>CREATE +MAPPING DEF_SYSDBA USING PLUGIN SRP IN "security.db" FROM +USER SYSDBA TO USER;</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Force people +who logged in using legacy authentication plugin have not too much +rights:</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>CREATE +MAPPING LEGACY_2_GUEST USING PLUGIN legacy_auth FROM ANY USER TO USER +GUEST;</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Notice:</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><FONT SIZE=4>Global +mapping works best if firebird 3 or higher version database is used +as security database. If you plan to use other database as security +one (using for example your own provider) please create in it table +RDB$MAP with structure repeating one in firebird 3 database and +SYSDBA-only write access.</FONT></P> +<P LANG="en-US" STYLE="margin-bottom: 0in"><BR> +</P> +</BODY> +</HTML> \ No newline at end of file Property changes on: firebird/trunk/doc/sql.extensions/README.mapping.html ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/html \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Modified: firebird/trunk/lang_helpers/gds_codes.ftn =================================================================== --- firebird/trunk/lang_helpers/gds_codes.ftn 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2014-04-04 15:57:18 UTC (rev 59358) @@ -1564,6 +1564,28 @@ PARAMETER (GDS__forupdate_temptbl = 335545075) INTEGER*4 GDS__cant_modify_sysobj PARAMETER (GDS__cant_modify_sysobj = 335545076) + INTEGER*4 GDS__server_misconfigured + PARAMETER (GDS__server_misconfigured = 335545077) + INTEGER*4 GDS__alter_role + PARAMETER (GDS__alter_role = 335545078) + INTEGER*4 GDS__map_already_exists + PARAMETER (GDS__map_already_exists = 335545079) + INTEGER*4 GDS__map_not_exists + PARAMETER (GDS__map_not_exists = 335545080) + INTEGER*4 GDS__map_load + PARAMETER (GDS__map_load = 335545081) + INTEGER*4 GDS__map_aster + PARAMETER (GDS__map_aster = 335545082) + INTEGER*4 GDS__map_multi + PARAMETER (GDS__map_multi = 335545083) + INTEGER*4 GDS__map_undefined + PARAMETER (GDS__map_undefined = 335545084) + INTEGER*4 GDS__baddpb_damaged_mode + PARAMETER (GDS__baddpb_damaged_mode = 335545085) + INTEGER*4 GDS__baddpb_buffers_range + PARAMETER (GDS__baddpb_buffers_range = 335545086) + INTEGER*4 GDS__baddpb_temp_buffers + PARAMETER (GDS__baddpb_temp_buffers = 335545087) INTEGER*4 GDS__gfix_db_name PARAMETER (GDS__gfix_db_name = 335740929) INTEGER*4 GDS__gfix_invalid_sw @@ -2256,6 +2278,8 @@ PARAMETER (GDS__dsql_revoke_failed = 336397320) INTEGER*4 GDS__dsql_cte_recursive_aggregate PARAMETER (GDS__dsql_cte_recursive_aggregate = 336397321) + INTEGER*4 GDS__dsql_mapping_failed + PARAMETER (GDS__dsql_mapping_failed = 336397322) 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 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/lang_helpers/gds_codes.pas 2014-04-04 15:57:18 UTC (rev 59358) @@ -789,6 +789,17 @@ gds_forupdate_systbl = 335545074; gds_forupdate_temptbl = 335545075; gds_cant_modify_sysobj = 335545076; + gds_server_misconfigured = 335545077; + gds_alter_role = 335545078; + gds_map_already_exists = 335545079; + gds_map_not_exists = 335545080; + gds_map_load = 335545081; + gds_map_aster = 335545082; + gds_map_multi = 335545083; + gds_map_undefined = 335545084; + gds_baddpb_damaged_mode = 335545085; + gds_baddpb_buffers_range = 335545086; + gds_baddpb_temp_buffers = 335545087; gds_gfix_db_name = 335740929; gds_gfix_invalid_sw = 335740930; gds_gfix_incmp_sw = 335740932; @@ -1135,6 +1146,7 @@ gds_dsql_grant_failed = 336397319; gds_dsql_revoke_failed = 336397320; gds_dsql_cte_recursive_aggregate = 336397321; + gds_dsql_mapping_failed = 336397322; gds_gsec_cant_open_db = 336723983; gds_gsec_switches_error = 336723984; gds_gsec_no_op_spec = 336723985; Modified: firebird/trunk/src/alice/alice.cpp =================================================================== --- firebird/trunk/src/alice/alice.cpp 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/alice/alice.cpp 2014-04-04 15:57:18 UTC (rev 59358) @@ -200,7 +200,7 @@ version = true; } - if (table->in_sw_value & sw_trusted_svc) +/* if (table->in_sw_value & sw_trusted_svc) { uSvc->checkService(); if (--argc <= 0) { @@ -214,7 +214,7 @@ uSvc->checkService(); tdgbl->ALICE_data.ua_tr_role = true; continue; - } + } */ #ifdef TRUSTED_AUTH if (table->in_sw_value & sw_trusted_auth) { @@ -472,7 +472,7 @@ } if (!flags || !(flags & ~(sw_user | sw_password | sw_fetch_password | - sw_trusted_auth | sw_trusted_svc | sw_trusted_role))) + sw_trusted_auth/* | sw_trusted_svc | sw_trusted_role*/))) { if (!help && !uSvc->isService()) { Modified: firebird/trunk/src/alice/aliceswi.h =================================================================== --- firebird/trunk/src/alice/aliceswi.h 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/alice/aliceswi.h 2014-04-04 15:57:18 UTC (rev 59358) @@ -60,8 +60,8 @@ const SINT64 sw_mode = 0x0000000040000000L; const SINT64 sw_set_db_dialect = 0x0000000080000000L; const SINT64 sw_trusted_auth = QUADCONST(0x0000000100000000); // Byte 4, Bit 0 -const SINT64 sw_trusted_svc = QUADCONST(0x0000000200000000); -const SINT64 sw_trusted_role = QUADCONST(0x0000000400000000); +//const SINT64 sw_trusted_svc = QUADCONST(0x0000000200000000); +//const SINT64 sw_trusted_role = QUADCONST(0x0000000400000000); const SINT64 sw_fetch_password = QUADCONST(0x0000000800000000); const SINT64 sw_nolinger = QUADCONST(0x0000001000000000); @@ -115,8 +115,8 @@ #ifdef TRUSTED_AUTH IN_SW_ALICE_TRUSTED_AUTH = 44, #endif - IN_SW_ALICE_TRUSTED_USER = 45, - IN_SW_ALICE_TRUSTED_ROLE = 46, +// IN_SW_ALICE_TRUSTED_USER = 45, +// IN_SW_ALICE_TRUSTED_ROLE = 46, IN_SW_ALICE_HIDDEN_ONLINE = 47, IN_SW_ALICE_FETCH_PASSWORD = 48, IN_SW_ALICE_NOLINGER = 49 @@ -199,7 +199,7 @@ sw_list, 0, false, 41, 2, NULL}, // msg 41: \t-prompt\t\tprompt for commit/rollback (-l) {IN_SW_ALICE_PASSWORD, 0, "PASSWORD", sw_password, - 0, (sw_trusted_auth | sw_trusted_svc | sw_trusted_role | sw_fetch_password), + 0, (sw_trusted_auth /*| sw_trusted_svc | sw_trusted_role */| sw_fetch_password), false, 42, 2, NULL}, // msg 42: \t-password\tdefault password #ifdef DEV_BUILD @@ -233,15 +233,15 @@ 0, (sw_user | sw_password), false, 115, 3, NULL}, // msg 115: -trusted use trusted authentication #endif - {IN_SW_ALICE_TRUSTED_USER, 0, TRUSTED_USER_SWITCH, sw_trusted_svc, +/* {IN_SW_ALICE_TRUSTED_USER, 0, TRUSTED_USER_SWITCH, sw_trusted_svc, 0, (sw_trusted_svc | sw_user | sw_password), false, 0, TRUSTED_USER_SWITCH_LEN, NULL}, {IN_SW_ALICE_TRUSTED_ROLE, 0, TRUSTED_ROLE_SWITCH, sw_trusted_role, - sw_trusted_svc, (sw_user | sw_password), false, 0, TRUSTED_ROLE_SWITCH_LEN, NULL}, + sw_trusted_svc, (sw_user | sw_password), false, 0, TRUSTED_ROLE_SWITCH_LEN, NULL}, */ {IN_SW_ALICE_NO_RESERVE, 0, "USE", sw_no_reserve, 0, ~(sw_no_reserve | sw_user | sw_password | sw_nolinger), false, 49, 1, NULL}, // msg 49: \t-use\t\tuse full or reserve space for versions {IN_SW_ALICE_USER, 0, "USER", sw_user, - 0, (sw_trusted_auth | sw_trusted_svc | sw_trusted_role), false, 50, 4, NULL}, + 0, (sw_trusted_auth /*| sw_trusted_svc | sw_trusted_role*/), false, 50, 4, NULL}, // msg 50: \t-user\t\tdefault user name {IN_SW_ALICE_VALIDATE, isc_spb_rpr_validate_db, "VALIDATE", sw_validate, 0, ~(sw_validate | sw_user | sw_password | sw_nolinger), false, 51, 1, NULL}, Modified: firebird/trunk/src/auth/AuthDbg.cpp =================================================================== --- firebird/trunk/src/auth/AuthDbg.cpp 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/auth/AuthDbg.cpp 2014-04-04 15:57:18 UTC (rev 59358) @@ -1,8 +1,8 @@ /* * PROGRAM: Firebird authentication - * MODULE: Auth.cpp - * DESCRIPTION: Implementation of interfaces, passed to plugins - * Plugins loader + * MODULE: AuthDbg.cpp + * DESCRIPTION: Test module for various auth types + * NOT FOR PRODUCTION USE ! * * The contents of this file are subject to the Initial * Developer's Public License Version 1.0 (the "License"); @@ -54,8 +54,9 @@ namespace Auth { -DebugServer::DebugServer(Firebird::IPluginConfig*) - : str(getPool()) +DebugServer::DebugServer(Firebird::IPluginConfig* pConf) + : str(getPool()), + config(Firebird::REF_NO_INCR, pConf->getDefaultConfig()) { } int FB_CARG DebugServer::authenticate(Firebird::IStatus* status, IServerBlock* sb, @@ -96,6 +97,13 @@ writerInterface->add(str.c_str()); str.erase(); + Firebird::RefPtr<Firebird::IConfigEntry> group(Firebird::REF_NO_INCR, config->find("GROUP")); + if (group) + { + writerInterface->add(group->getValue()); + writerInterface->setType("GROUP"); + } + return AUTH_SUCCESS; } catch (const Firebird::Exception& ex) Modified: firebird/trunk/src/auth/AuthDbg.h =================================================================== --- firebird/trunk/src/auth/AuthDbg.h 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/auth/AuthDbg.h 2014-04-04 15:57:18 UTC (rev 59358) @@ -35,6 +35,7 @@ #ifdef AUTH_DEBUG #include "firebird/Auth.h" +#include "firebird/Plugin.h" #include "../common/classes/ImplementHelper.h" #include "../common/classes/ClumpletWriter.h" #include "../common/classes/init.h" @@ -57,6 +58,7 @@ private: Firebird::string str; + Firebird::RefPtr<Firebird::IConfig> config; }; class DebugClient FB_FINAL : public Firebird::StdPlugin<IClient, FB_AUTH_CLIENT_VERSION> Modified: firebird/trunk/src/auth/SecureRemotePassword/Message.h =================================================================== --- firebird/trunk/src/auth/SecureRemotePassword/Message.h 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/auth/SecureRemotePassword/Message.h 2014-04-04 15:57:18 UTC (rev 59358) @@ -1,42 +1,110 @@ +#ifdef INCLUDE_Firebird_H // Internal build +#define INTERNAL_FIREBIRD +#endif + +#include "firebird/Provider.h" + +#ifdef INTERNAL_FIREBIRD + #include "../common/classes/alloc.h" -#include "../common/classes/auto.h" #include "../common/StatusHolder.h" -#include "../common/MsgMetadata.h" +#include "../common/classes/ImplementHelper.h" +#else // INTERNAL_FIREBIRD +#include <assert.h> +#define fb_assert(x) assert(x) +#include <string.h> + +#endif // INTERNAL_FIREBIRD + +#ifdef INTERNAL_FIREBIRD // This class helps to work with metadata iface class Meta : public Firebird::RefPtr<Firebird::IMessageMetadata> { public: - explicit Meta(Firebird::IStatement* stmt, bool out) + Meta(Firebird::IStatement* stmt, bool out) { - Firebird::LocalStatus s; - Firebird::IMessageMetadata* m = out ? stmt->getOutputMetadata(&s) : stmt->getInputMetadata(&s); - if (!s.isSuccess()) + Firebird::LocalStatus st; + Firebird::IMessageMetadata* m = out ? stmt->getOutputMetadata(&st) : stmt->getInputMetadata(&st); + if (!st.isSuccess()) { - Firebird::status_exception::raise(s.get()); + Firebird::status_exception::raise(st.get()); } assignRefNoIncr(m); } }; +#endif // INTERNAL_FIREBIRD -// This class helps to fill message with correct values -class Message : public Firebird::GlobalStorage +// Linked list of various fields +class FieldLink { public: - Message(Firebird::IMessageMetadata* aMeta) - : dataBuf(getPool()), fieldCount(0) + virtual ~FieldLink() { } + virtual void linkWithMessage(const unsigned char* buf) = 0; + + FieldLink* next; +}; + + +// This class helps to exchange values with a message +class Message +// : public AutoStorage +{ +public: + Message(Firebird::IMessageMetadata* aMeta = NULL) + : metadata(NULL), buffer(NULL), builder(NULL), + fieldCount(0), fieldList(NULL) { - Firebird::LocalStatus st; - buffer = dataBuf.getBuffer(aMeta->getMessageLength(&st)); - check(&st); - metadata = aMeta; +#ifdef INTERNAL_FIREBIRD + s = &st; +#else + s = fb_get_master_interface()->getStatus(); +#endif + + try + { + if (aMeta) + { + createBuffer(aMeta); + metadata = aMeta; + metadata->addRef(); + } + else + { + Firebird::IMetadataBuilder* bld = +#ifdef INTERNAL_FIREBIRD + Firebird::MasterInterfacePtr()-> +#else + fb_get_master_interface()-> +#endif + getMetadataBuilder(s, 0); + check(s); + builder = bld; + builder->addRef(); + } + } + catch(...) + { + s->dispose(); + throw; + } } ~Message() - { } + { + delete buffer; +#ifndef INTERNAL_FIREBIRD + s->dispose(); +#endif + if (builder) + builder->release(); + if (metadata) + metadata->release(); + } +public: template <typename T> static bool checkType(unsigned t, unsigned /*sz*/) { @@ -44,25 +112,58 @@ } template <typename T> - unsigned add(unsigned& t, unsigned& sz) + static unsigned getType(unsigned& sz) { - Firebird::LocalStatus st; + return T::SQL_UnknownDataType; + } - unsigned l = metadata->getCount(&st); - check(&st); - if (fieldCount >= metadata->getMessageLength(&st)) + template <typename T> + unsigned add(unsigned& t, unsigned& sz, FieldLink* lnk) + { + if (metadata) { - (Firebird::Arg::Gds(isc_random) << - "Attempt to add to the message more variables than possible").raise(); + unsigned l = metadata->getCount(s); + check(s); + if (fieldCount >= l) + { +#ifdef INTERNAL_FIREBIRD + (Firebird::Arg::Gds(isc_random) << + "Attempt to add to the message more variables than possible").raise(); +#else + fatalErrorHandler("Attempt to add to the message more variables than possible"); +#endif + } + + t = metadata->getType(s, fieldCount); + check(s); + sz = metadata->getLength(s, fieldCount); + check(s); + if (!checkType<T>(t, sz)) + { +#ifdef INTERNAL_FIREBIRD + (Firebird::Arg::Gds(isc_random) << "Incompatible data type").raise(); +#else + fatalErrorHandler("Incompatible data type"); +#endif + } } + else + { + fb_assert(builder); - t = metadata->getType(&st, fieldCount); - check(&st); - sz = metadata->getLength(&st, fieldCount); - check(&st); - if (!checkType<T>(t, sz)) - { - (Firebird::Arg::Gds(isc_random) << "Incompatible data type").raise(); + unsigned f = builder->addField(s); + check(s); + + fb_assert(f == fieldCount); + + t = getType<T>(sz); + builder->setType(s, f, t); + check(s); + builder->setLength(s, f, sz); + check(s); + + lnk->next = fieldList; + fieldList = lnk; } return fieldCount++; @@ -72,61 +173,91 @@ { if (!status->isSuccess()) { +#ifdef INTERNAL_FIREBIRD Firebird::status_exception::raise(status->get()); +#else + char s[100]; + const ISC_STATUS *st = status->get(); + fb_interpret(s, sizeof(s), &st); + fatalErrorHandler(s); +#endif } } - // makes it possible to use metadata in ?: operator + // Attention! + // No addRef/release interface here! + // Lifetime is equal at least to Message lifetime Firebird::IMessageMetadata* getMetadata() { + if (!metadata) + { + fb_assert(builder); + Firebird::IMessageMetadata* aMeta = builder->getMetadata(s); + check(s); + metadata = aMeta; + metadata->addRef(); + builder->release(); + builder = NULL; + } + return metadata; } -public: - Firebird::RefPtr<Firebird::IMessageMetadata> metadata; - UCHAR* buffer; + bool hasMetadata() + { + return metadata ? true : false; + } -private: - Firebird::UCharBuffer dataBuf; - unsigned fieldCount; -}; + // access to message's data buffer + unsigned char* getBuffer() + { + if (!buffer) + { + getMetadata(); + createBuffer(metadata); + while(fieldList) + { + fieldList->linkWithMessage(buffer); + fieldList = fieldList->next; + } + } -// With template magic, we make the fields strongly-typed. -template <> -bool Message::checkType<SLONG>(unsigned t, unsigned sz) -{ - return t == SQL_LONG && sz == sizeof(SLONG); -} + return buffer; + } -template <> -bool Message::checkType<ISC_QUAD>(unsigned t, unsigned sz) -{ - return (t == SQL_BLOB || t == SQL_QUAD) && sz == sizeof(ISC_QUAD); -} +private: + void createBuffer(Firebird::IMessageMetadata* aMeta) + { + unsigned l = aMeta->getMessageLength(s); + check(s); + buffer = new unsigned char[l]; + } -template <> -bool Message::checkType<ISC_INT64>(unsigned t, unsigned sz) -{ - return t == SQL_INT64 && sz == sizeof(ISC_INT64); -} +public: + Firebird::IStatus* s; -template <> -bool Message::checkType<FB_BOOLEAN>(unsigned t, unsigned sz) -{ - return t == SQL_BOOLEAN && sz == sizeof(FB_BOOLEAN); -} +private: +#ifdef INTERNAL_FIREBIRD + Firebird::LocalStatus st; +#endif + Firebird::IMessageMetadata* metadata; + unsigned char* buffer; + Firebird::IMetadataBuilder* builder; + unsigned fieldCount; + FieldLink* fieldList; +}; template <typename T> -class Field +class Field : public FieldLink { public: class Null { public: - Null() - : ptr(NULL) + Null(Message* m) + : msg(m), ptr(NULL) { } void linkMessage(short* p) @@ -137,46 +268,57 @@ operator FB_BOOLEAN() const { + msg->getBuffer(); return (*ptr) ? FB_TRUE : FB_FALSE; } FB_BOOLEAN operator=(FB_BOOLEAN val) { + msg->getBuffer(); *ptr = val ? -1 : 0; return val; } private: + Message* msg; short* ptr; }; - explicit Field(Message& m) - : ptr(NULL), type(0), size(0) + explicit Field(Message& m, unsigned sz = 0) + : ptr(NULL), charBuffer(NULL), msg(&m), null(msg), ind(~0), type(0), size(sz) { - unsigned ind = m.add<T>(type, size); + ind = msg->add<T>(type, size, this); - Firebird::LocalStatus st; - unsigned tmp = m.metadata->getOffset(&st, ind); - Message::check(&st); - ptr = (T*) (m.buffer + tmp); + if (msg->hasMetadata()) + setPointers(msg->getBuffer()); + } - tmp = m.metadata->getNullOffset(&st, ind); - Message::check(&st); - null.linkMessage((short*) (m.buffer + tmp)); + ~Field() + { + delete charBuffer; } operator T() { + msg->getBuffer(); return *ptr; } T* operator&() { + msg->getBuffer(); return ptr; } + T* operator->() + { + msg->getBuffer(); + return ptr; + } + T operator= (T newVal) { + msg->getBuffer(); *ptr = newVal; null = FB_FALSE; return newVal; @@ -184,49 +326,71 @@ operator const char*() { + msg->getBuffer(); + if (!charBuffer) { - charBuffer.reset(FB_NEW(*getDefaultMemoryPool()) char[size + 1]); + charBuffer = new char[size + 1]; } - getStrValue(charBuffer); return charBuffer; } const char* operator= (const char* newVal) { - setStrValue(newVal, strlen(newVal)); + msg->getBuffer(); + setStrValue(newVal, strnlen(newVal, size)); null = FB_FALSE; return newVal; } void set(unsigned length, const void* newVal) { + msg->getBuffer(); setStrValue(newVal, length); null = FB_FALSE; } private: + void linkWithMessage(const unsigned char* buf) + { + setPointers(buf); + } + + void setPointers(const unsigned char* buf) + { + unsigned tmp = msg->getMetadata()->getOffset(msg->s, ind); + Message::check(msg->s); + ptr = (T*) (buf + tmp); + + tmp = msg->getMetadata()->getNullOffset(msg->s, ind); + Message::check(msg->s); + null.linkMessage((short*) (buf + tmp)); + } + void getStrValue(char* to) { T::incompatibleDataType(); - //(Firebird::Arg::Gds(isc_random) << "Incompatible data type").raise(); } void setStrValue(const void* from, unsigned len) { T::incompatibleDataType(); - //(Firebird::Arg::Gds(isc_random) << "Incompatible data type").raise(); } T* ptr; - Firebird::AutoPtr<char, Firebird::ArrayDelete<char> > charBuffer; + char* charBuffer; + Message* msg; public: Null null; - unsigned type, size; + +private: + unsigned ind, type, size; }; + +// --------------------------------------------- struct Varying { short len; @@ -234,13 +398,22 @@ }; template <> -bool Message::checkType<Varying>(unsigned t, unsigned /*sz*/) +inline bool Message::checkType<Varying>(unsigned t, unsigned /*sz*/) { return t == SQL_VARYING; } +template <> +inline unsigned Message::getType<Varying>(unsigned& sz) +{ + if (!sz) + sz = 1; + sz += sizeof(short); + return SQL_VARYING; +} + template<> -void Field<Varying>::getStrValue(char* to) +inline void Field<Varying>::getStrValue(char* to) { unsigned len = ptr->len; if (len > size) @@ -250,7 +423,7 @@ } template<> -void Field<Varying>::setStrValue(const void* from, unsigned len) +inline void Field<Varying>::setStrValue(const void* from, unsigned len) { if (len > size) len = size; @@ -264,13 +437,21 @@ }; template <> -bool Message::checkType<Text>(unsigned t, unsigned /*sz*/) +inline bool Message::checkType<Text>(unsigned t, unsigned /*sz*/) { return t == SQL_TEXT; } +template <> +inline unsigned Message::getType<Text>(unsigned& sz) +{ + if (!sz) + sz = 1; + return SQL_TEXT; +} + template<> -void Field<Text>::getStrValue(char* to) +inline void Field<Text>::getStrValue(char* to) { memcpy(to, ptr->data, size); to[size] = 0; @@ -285,7 +466,7 @@ } template<> -void Field<Text>::setStrValue(const void* from, unsigned len) +inline void Field<Text>::setStrValue(const void* from, unsigned len) { if (len > size) len = size; @@ -293,3 +474,68 @@ if (len < size) memset(&ptr->data[len], ' ', size - len); } + +template <> +inline bool Message::checkType<ISC_SHORT>(unsigned t, unsigned sz) +{ + return t == SQL_SHORT && sz == sizeof(ISC_SHORT); +} + +template <> +inline bool Message::checkType<ISC_LONG>(unsigned t, unsigned sz) +{ + return t == SQL_LONG && sz == sizeof(ISC_LONG); +} + +template <> +inline bool Message::checkType<ISC_QUAD>(unsigned t, unsigned sz) +{ + return (t == SQL_BLOB || t == SQL_QUAD) && sz == sizeof(ISC_QUAD); +} + +template <> +inline bool Message::checkType<ISC_INT64>(unsigned t, unsigned sz) +{ + return t == SQL_INT64 && sz == sizeof(ISC_INT64); +} + +template <> +inline bool Message::checkType<FB_BOOLEAN>(unsigned t, unsigned sz) +{ + return t == SQL_BOOLEAN && sz == sizeof(FB_BOOLEAN); +} + +template <> +inline unsigned Message::getType<ISC_SHORT>(unsigned& sz) +{ + sz = sizeof(ISC_SHORT); + return SQL_SHORT; +} + +template <> +inline unsigned Message::getType<ISC_LONG>(unsigned& sz) +{ + sz = sizeof(ISC_LONG); + return SQL_LONG; +} + +template <> +inline unsigned Message::getType<ISC_QUAD>(unsigned& sz) +{ + sz = sizeof(ISC_QUAD); + return SQL_BLOB; +} + +template <> +inline unsigned Message::getType<ISC_INT64>(unsigned& sz) +{ + sz = sizeof(ISC_INT64); + return SQL_INT64; +} + +template <> +inline unsigned Message::getType<FB_BOOLEAN>(unsigned& sz) +{ + sz = sizeof(FB_BOOLEAN); + return SQL_BOOLEAN; +} Modified: firebird/trunk/src/auth/SecureRemotePassword/manage/SrpManagement.cpp =================================================================== --- firebird/trunk/src/auth/SecureRemotePassword/manage/SrpManagement.cpp 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/auth/SecureRemotePassword/manage/SrpManagement.cpp 2014-04-04 15:57:18 UTC (rev 59358) @@ -75,7 +75,7 @@ "SELECT PLG$USER_NAME, PLG$VERIFIER, PLG$SALT, PLG$COMMENT, " " PLG$FIRST, PLG$MIDDLE, PLG$LAST, PLG$ATTRIBUTES, PLG$ACTIVE " "FROM PLG$SRP WHERE CURRENT_USER = 'SYSDBA' " - " OR CURRENT_ROLE = 'RDB$ADMIN' OR CURRENT_USER = PLG$SRP.PLG$USER_NAME" + " OR CURRENT_ROLE = '" ADMIN_ROLE "' OR CURRENT_USER = PLG$SRP.PLG$USER_NAME" , "GRANT ALL ON PLG$SRP to VIEW PLG$SRP_VIEW" , @@ -94,7 +94,7 @@ { for (const char** sql = script; *sql; ++sql) { - att->execute(&s, ddlTran, 0, *sql, 3, NULL, NULL, NULL, NULL); + att->execute(&s, ddlTran, 0, *sql, SQL_DIALECT_V6, NULL, NULL, NULL, NULL); check(&s); } @@ -143,19 +143,24 @@ unsigned int authBlockSize = logonInfo->authBlock(&authBlock); if (authBlockSize) + { +#if SRP_DEBUG > 0 + fprintf(stderr, "SrpManagement: Using authBlock size %d\n", authBlockSize); +#endif dpb.insertBytes(isc_dpb_auth_block, authBlock, authBlockSize); + } else { const char* str = logonInfo->name(); +#if SRP_DEBUG > 0 + fprintf(stderr, "SrpManagement: Using name '%s'\n", str); +#endif if (str && str[0]) dpb.insertString(isc_dpb_trusted_auth, str, strlen(str)); str = logonInfo->role(); - if (str && str[0]) dpb.insertString(isc_dpb_sql_role_name, str, strlen(str)); - else if (logonInfo->forceAdmin()) - dpb.insertString(isc_dpb_trusted_role, ADMIN_ROLE, strlen(ADMIN_ROLE)); } Firebird::DispatcherPtr p; @@ -200,9 +205,9 @@ case MAP_SET_OPER: { Firebird::string sql; - sql.printf("ALTER ROLE RDB$ADMIN %s AUTO ADMIN MAPPING", + sql.printf("ALTER ROLE " ADMIN_ROLE " %s AUTO ADMIN MAPPING", user->operation() == MAP_SET_OPER ? "SET" : "DROP"); - att->execute(status, tra, sql.length(), sql.c_str(), 3, NULL, NULL, NULL, NULL); + att->execute(status, tra, sql.length(), sql.c_str(), SQL_DIALECT_V6, NULL, NULL, NULL, NULL); check(status); } break; @@ -218,7 +223,7 @@ { for (unsigned repeat = 0; ; ++repeat) { - stmt = att->prepare(status, tra, 0, insert, 3, Firebird::IStatement::PREPARE_PREFETCH_METADATA); + stmt = att->prepare(status, tra, 0, insert, SQL_DIALECT_V6, Firebird::IStatement::PREPARE_PREFETCH_METADATA); if (status->isSuccess()) { break; @@ -286,7 +291,7 @@ dumpIt("verifier", s); verifier.set(s.getCount(), s.begin()); - stmt->execute(status, tra, add.metadata, add.buffer, NULL, NULL); + stmt->execute(status, tra, add.getMetadata(), add.getBuffer(), NULL, NULL); check(status); stmt->free(status); @@ -333,7 +338,7 @@ Firebird::IStatement* stmt = NULL; try { - stmt = att->prepare(status, tra, 0, update.c_str(), 3, Firebird::IStatement::PREPARE_PREFETCH_METADATA); + stmt = att->prepare(status, tra, 0, update.c_str(), SQL_DIALECT_V6, Firebird::IStatement::PREPARE_PREFETCH_METADATA); check(status); Meta im(stmt, false); @@ -381,7 +386,7 @@ assignField(active, user->active()); setField(login, user->userName()); - stmt->execute(status, tra, up.metadata, up.buffer, NULL, NULL); + stmt->execute(status, tra, up.getMetadata(), up.getBuffer(), NULL, NULL); check(status); if (!checkCount(status, &upCount, isc_info_update_count)) @@ -410,7 +415,7 @@ Firebird::IStatement* stmt = NULL; try { - stmt = att->prepare(status, tra, 0, del, 3, Firebird::IStatement::PREPARE_PREFETCH_METADATA); + stmt = att->prepare(status, tra, 0, del, SQL_DIALECT_V6, Firebird::IStatement::PREPARE_PREFETCH_METADATA); check(status); Meta im(stmt, false); @@ -418,7 +423,7 @@ Name login(dl); setField(login, user->userName()); - stmt->execute(status, tra, dl.metadata, dl.buffer, NULL, NULL); + stmt->execute(status, tra, dl.getMetadata(), dl.getBuffer(), NULL, NULL); check(status); if (!checkCount(status, &delCount, isc_info_delete_count)) @@ -448,7 +453,7 @@ " CASE WHEN RDB$RELATION_NAME IS NULL THEN 0 ELSE 1 END, PLG$ACTIVE " "FROM PLG$SRP_VIEW LEFT JOIN RDB$USER_PRIVILEGES " " ON PLG$SRP_VIEW.PLG$USER_NAME = RDB$USER_PRIVILEGES.RDB$USER " - " AND RDB$RELATION_NAME = 'RDB$ADMIN' " + " AND RDB$RELATION_NAME = '" ADMIN_ROLE "' " " AND RDB$PRIVILEGE = 'M' "; if (user->userName()->entered()) { @@ -459,7 +464,7 @@ Firebird::IResultSet* rs = NULL; try { - stmt = att->prepare(status, tra, 0, disp.c_str(), 3, + stmt = att->prepare(status, tra, 0, disp.c_str(), SQL_DIALECT_V6, Firebird::IStatement::PREPARE_PREFETCH_METADATA); check(status); @@ -481,10 +486,10 @@ } rs = stmt->openCursor(status, tra, (par ? par->getMetadata() : NULL), - (par ? par->buffer : NULL), om); + (par ? par->getBuffer() : NULL), om); check(status); - while (rs->fetchNext(status, di.buffer)) + while (rs->fetchNext(status, di.getBuffer())) { check(status); Modified: firebird/trunk/src/auth/SecureRemotePassword/server/SrpServer.cpp =================================================================== --- firebird/trunk/src/auth/SecureRemotePassword/server/SrpServer.cpp 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/auth/SecureRemotePassword/server/SrpServer.cpp 2014-04-04 15:57:18 UTC (rev 59358) @@ -174,7 +174,8 @@ Field<Varying> slt(dat); HANDSHAKE_DEBUG(fprintf(stderr, "Srv: SRP1: Ready to run statement with login '%s'\n", account.c_str())); - stmt->execute(status, tra, par.metadata, par.buffer, dat.metadata, dat.buffer); + stmt->execute(status, tra, par.getMetadata(), par.getBuffer(), + dat.getMetadata(), dat.getBuffer()); if (!status->isSuccess()) { status_exception::raise(status->get()); @@ -266,7 +267,7 @@ { MasterInterfacePtr()->upgradeInterface(writerInterface, FB_AUTH_WRITER_VERSION, upInfo); writerInterface->add(account.c_str()); - writerInterface->setAttribute(AuthReader::AUTH_SECURE_DB, secDbName); + writerInterface->setDb(secDbName); return AUTH_SUCCESS; } } Modified: firebird/trunk/src/auth/SecurityDatabase/LegacyManagement.epp =================================================================== --- firebird/trunk/src/auth/SecurityDatabase/LegacyManagement.epp 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/auth/SecurityDatabase/LegacyManagement.epp 2014-04-04 15:57:18 UTC (rev 59358) @@ -68,7 +68,7 @@ Firebird::string sql; sql.printf((user->admin()->get() ? "GRANT %s TO \"%s\"" : "REVOKE %s FROM \"%s\""), - "RDB$ADMIN", userName.c_str()); + ADMIN_ROLE, userName.c_str()); isc_dsql_execute_immediate(isc_status, &database, &trans, sql.length(), sql.c_str(), SQL_DIALECT_V6, NULL); if (isc_status[1] && user->admin()->get() == 0) @@ -79,7 +79,7 @@ WITH R.RDB$USER EQ user->userName()->get() AND R.RDB$RELATION_NAME EQ 'RDB$ADMIN' AND R.RDB$PRIVILEGE EQ 'M' - sql.printf("REVOKE RDB$ADMIN FROM \"%s\" GRANTED BY \"%s\"", + sql.printf("REVOKE " ADMIN_ROLE " FROM \"%s\" GRANTED BY \"%s\"", userName.c_str(), R.RDB$GRANTOR); END_FOR @@ -162,11 +162,8 @@ dpb.insertString(isc_dpb_trusted_auth, str, strlen(str)); str = logonInfo->role(); - if (str && str[0]) dpb.insertString(isc_dpb_sql_role_name, str, strlen(str)); - else if (logonInfo->forceAdmin()) - dpb.insertString(isc_dpb_trusted_role, ADMIN_ROLE, strlen(ADMIN_ROLE)); } ISC_STATUS_ARRAY status; @@ -350,7 +347,7 @@ case MAP_SET_OPER: { Firebird::string sql; - sql.printf("ALTER ROLE RDB$ADMIN %s AUTO ADMIN MAPPING", + sql.printf("ALTER ROLE " ADMIN_ROLE " %s AUTO ADMIN MAPPING", user->operation() == MAP_SET_OPER ? "SET" : "DROP"); isc_dsql_execute_immediate(isc_status, &database, &transaction, sql.length(), sql.c_str(), 1, NULL); if (isc_status[1] != 0) Modified: firebird/trunk/src/auth/SecurityDatabase/LegacyServer.cpp =================================================================== --- firebird/trunk/src/auth/SecurityDatabase/LegacyServer.cpp 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/auth/SecurityDatabase/LegacyServer.cpp 2014-04-04 15:57:18 UTC (rev 59358) @@ -351,7 +351,7 @@ MasterInterfacePtr()->upgradeInterface(authBlock, FB_AUTH_WRITER_VERSION, upInfo); authBlock->add(login.c_str()); - authBlock->setAttribute(AuthReader::AUTH_SECURE_DB, secureDbName); + authBlock->setDb(secureDbName); return AUTH_SUCCESS; } Modified: firebird/trunk/src/auth/trusted/AuthSspi.cpp =================================================================== --- firebird/trunk/src/auth/trusted/AuthSspi.cpp 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/auth/trusted/AuthSspi.cpp 2014-04-04 15:57:18 UTC (rev 59358) @@ -369,8 +369,13 @@ writerInterface->add(login.c_str()); if (wheel) - writerInterface->add("RDB$ADMIN"); + { + writerInterface->add(FB_DOMAIN_ANY_RID_ADMINS); + writerInterface->setType(FB_PREDEFINED_GROUP); + } + // ToDo: walk groups to which login belongs and list them using writerInterface + return AUTH_SUCCESS; } Modified: firebird/trunk/src/auth/trusted/AuthSspi.h =================================================================== --- firebird/trunk/src/auth/trusted/AuthSspi.h 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/auth/trusted/AuthSspi.h 2014-04-04 15:57:18 UTC (rev 59358) @@ -30,6 +30,10 @@ #include <firebird.h> +// This is old versions backward compatibility +#define FB_PREDEFINED_GROUP "Predefined_Group" +#define FB_DOMAIN_ANY_RID_ADMINS "DOMAIN_ANY_RID_ADMINS" + #ifdef TRUSTED_AUTH #include <../common/classes/fb_string.h> Modified: firebird/trunk/src/burp/backup.epp =================================================================== --- firebird/trunk/src/burp/backup.epp 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/burp/backup.epp 2014-04-04 15:57:18 UTC (rev 59358) @@ -4073,16 +4073,45 @@ * **************************************/ isc_req_handle req_handle = 0; + TEXT temp[GDS_NAME_LEN]; BurpGlobals* tdgbl = BurpGlobals::getSpecific(); - if (tdgbl->runtimeODS >= DB_VERSION_DDL11_2) + if (tdgbl->runtimeODS >= DB_VERSION_DDL12) { FOR (REQUEST_HANDLE req_handle) + M IN RDB$MAP + WITH (M.RDB$SYSTEM_FLAG EQ 0 OR M.RDB$SYSTEM_FLAG MISSING) + + put(tdgbl, rec_mapping); + const SSHORT l = PUT_TEXT(att_map_name, M.RDB$MAP_NAME); + PUT_TEXT(att_map_using, M.RDB$MAP_USING); + if (!M.RDB$MAP_PLUGIN.NULL) PUT_TEXT(att_map_plugin, M.RDB$MAP_PLUGIN); + if (!M.RDB$MAP_DB.NULL) PUT_TEXT(att_map_db, M.RDB$MAP_DB); + PUT_TEXT(att_map_from_type, M.RDB$MAP_FROM_TYPE); + if (!M.RDB$MAP_FROM.NULL) PUT_TEXT(att_map_from, M.RDB$MAP_FROM); + put_int32(att_map_to_type, M.RDB$MAP_TO_TYPE); + if (!M.RDB$MAP_TO.NULL) PUT_TEXT(att_map_to, M.RDB$MAP_TO); + if (!M.RDB$DESCRIPTION.NULL) + put_source_blob(att_map_description, att_map_description, M.RDB$DESCRIPTION); + put(tdgbl, att_end); + + MISC_terminate (M.RDB$MAP_NAME, temp, l, sizeof(temp)); + BURP_verbose (297, temp); + // msg 297 writing mapping for %s + + END_FOR; + ON_ERROR + general_on_error(); + END_ERROR; + } + else if (tdgbl->runtimeODS >= DB_VERSION_DDL11_2) + { + FOR (REQUEST_HANDLE req_handle) X IN RDB$ROLES WITH X.RDB$ROLE_NAME EQ ADMIN_ROLE - if (X.RDB$SYSTEM_FLAG == (ROLE_FLAG_MAY_TRUST | ROLE_FLAG_DBO)) + if (X.RDB$SYSTEM_FLAG == ROLE_FLAG_DBO) { put(tdgbl, rec_mapping); //put_text(att_map_os, DOMAIN-ADMINS, strlen(DOMAIN-ADMINS) + 1); Modified: firebird/trunk/src/burp/burp.cpp =================================================================== --- firebird/trunk/src/burp/burp.cpp 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/burp/burp.cpp 2014-04-04 15:57:18 UTC (rev 59358) @@ -683,7 +683,7 @@ } tdgbl->gbl_sw_user = argv[itr]; break; - case IN_SW_BURP_TRUSTED_USER: +/* case IN_SW_BURP_TRUSTED_USER: uSvc->checkService(); if (++itr >= argc) { @@ -692,7 +692,7 @@ } tdgbl->gbl_sw_tr_user = argv[itr]; break; - case IN_SW_BURP_ROLE: + */ case IN_SW_BURP_ROLE: if (++itr >= argc) { BURP_error(253, true); @@ -1029,7 +1029,7 @@ } break; - case IN_SW_BURP_TRUSTED_USER: +/* case IN_SW_BURP_TRUSTED_USER: uSvc->checkService(); if (!authBlock) { @@ -1046,7 +1046,7 @@ dpb.insertString(isc_dpb_trusted_role, ADMIN_ROLE, strlen(ADMIN_ROLE)); } break; - + */ #ifdef TRUSTED_AUTH case IN_SW_BURP_TRUSTED_AUTH: if (!dpb.find(isc_dpb_trusted_auth)) Modified: firebird/trunk/src/burp/burp.h =================================================================== --- firebird/trunk/src/burp/burp.h 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/burp/burp.h 2014-04-04 15:57:18 UTC (rev 59358) @@ -596,10 +596,16 @@ att_coll_owner_name, // Names mapping - att_map_os = SERIES, - att_map_user, - att_map_role, - att_auto_map_role, + att_map_name = SERIES, + att_map_using, + att_map_plugin, + att_auto_map_role, // Keep it at pos.4 - ODS11.2 compatibility issue + att_map_db, + att_map_from_type, + att_map_from, + att_map_to_type, + att_map_to, + att_map_description, // Package attributes att_package_name = SERIES, Modified: firebird/trunk/src/burp/burpswi.h =================================================================== --- firebird/trunk/src/burp/burpswi.h 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/burp/burpswi.h 2014-04-04 15:57:18 UTC (rev 59358) @@ -171,8 +171,8 @@ {IN_SW_BURP_TRUSTED_AUTH, 0, "TRUSTED", 0, 0, 0, false, 295, 3, NULL, boGeneral}, // msg 295: @1TRU(STED) use trusted authentication #endif - {IN_SW_BURP_TRUSTED_USER, 0, TRUSTED_USER_SWITCH, 0, 0, 0, false, 0, TRUSTED_USER_SWITCH_LEN, NULL, boGeneral}, - {IN_SW_BURP_TRUSTED_ROLE, 0, TRUSTED_ROLE_SWITCH, 0, 0, 0, false, 0, TRUSTED_ROLE_SWITCH_LEN, NULL, boGeneral}, +// {IN_SW_BURP_TRUSTED_USER, 0, TRUSTED_USER_SWITCH, 0, 0, 0, false, 0, TRUSTED_USER_SWITCH_LEN, NULL, boGeneral}, +// {IN_SW_BURP_TRUSTED_ROLE, 0, TRUSTED_ROLE_SWITCH, 0, 0, 0, false, 0, TRUSTED_ROLE_SWITCH_LEN, NULL, boGeneral}, /* {IN_SW_BURP_U, 0, "UNPROTECTED", 0, 0, 0, false, 0, 5, NULL, boGeneral}, */ Modified: firebird/trunk/src/burp/restore.epp =================================================================== --- firebird/trunk/src/burp/restore.epp 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/burp/restore.epp 2014-04-04 15:57:18 UTC (rev 59358) @@ -54,6 +54,7 @@ #include "../common/utils_proto.h" #include "memory_routines.h" #include "../burp/OdsDetection.h" +#include "../auth/trusted/AuthSspi.h" using MsgFormat::SafeArg; @@ -7971,38 +7972,156 @@ * * Functional description * Restore mapping to users and roles - * Restricted version - only single - * mapping is accepted * **************************************/ att_type attribute; scan_attr_t scan_next_attr; TEXT temp[GDS_NAME_LEN]; SSHORT l; - Firebird::string role, os; + Firebird::string role; - if (tdgbl->runtimeODS >= DB_VERSION_DDL11_1) + if (tdgbl->runtimeODS >= DB_VERSION_DDL12) { + STORE (REQUEST_HANDLE tdgbl->handles_get_mapping_req_handle1) + M IN RDB$MAP + + M.RDB$MAP_TO_TYPE.NULL = TRUE; + M.RDB$MAP_NAME.NULL = TRUE; + M.RDB$MAP_USING.NULL = TRUE; + M.RDB$MAP_PLUGIN.NULL = TRUE; + M.RDB$MAP_DB.NULL = TRUE; + M.RDB$MAP_FROM_TYPE.NULL = TRUE; + M.RDB$MAP_FROM.NULL = TRUE; + M.RDB$MAP_TO.NULL = TRUE; + M.RDB$DESCRIPTION.NULL = TRUE; + + skip_init(&scan_next_attr); + while (skip_scan(&scan_next_attr), get_attribute(&attribute, tdgbl) != att_end) + { + switch (attribute) + { + case att_auto_map_role: + GET_TEXT(temp); + M.RDB$MAP_NAME.NULL = FALSE; + strcpy(M.RDB$MAP_NAME, "AutoAdminImplementationMapping"); + M.RDB$MAP_FROM.NULL = FALSE; + strcpy(M.RDB$MAP_FROM, FB_DOMAIN_ANY_RID_ADMINS); + M.RDB$MAP_FROM_TYPE.NULL = FALSE; + strcpy(M.RDB$MAP_FROM_TYPE, FB_PREDEFINED_GROUP); + M.RDB$MAP_USING.NULL = FALSE; + strcpy(M.RDB$MAP_USING, "P"); + M.RDB$MAP_PLUGIN.NULL = FALSE; + strcpy(M.RDB$MAP_PLUGIN, "Win_Sspi"); + M.RDB$MAP_TO_TYPE.NULL = FALSE; + M.RDB$MAP_TO_TYPE = 1; + M.RDB$MAP_TO.NULL = FALSE; + strcpy(M.RDB$MAP_TO, ADMIN_ROLE); + + BURP_verbose(301); + // msg 301, restoring names mapping + BURP_verbose (298, M.RDB$MAP_NAME); + break; + + case att_map_name: + M.RDB$MAP_NAME.NULL = FALSE; + GET_TEXT(M.RDB$MAP_NAME); + if (tdgbl->firstMap) + { + tdgbl->firstMap = false; + BURP_verbose(301); + // msg 301, restoring names mapping + } + BURP_verbose (298, M.RDB$MAP_NAME); + break; + + case att_map_using: + M.RDB$MAP_USING.NULL = FALSE; + GET_TEXT(M.RDB$MAP_USING); + break; + + case att_map_plugin: + M.RDB$MAP_PLUGIN.NULL = FALSE; + GET_TEXT(M.RDB$MAP_PLUGIN); + break; + + case att_map_db: + M.RDB$MAP_DB.NULL = FALSE; + GET_TEXT(M.RDB$MAP_DB); + break; + + case att_map_from_type: + M.RDB$MAP_FROM_TYPE.NULL = FALSE; + GET_TEXT(M.RDB$MAP_FROM_TYPE); + break; + + case att_map_from: + M.RDB$MAP_FROM.NULL = FALSE; + GET_TEXT(M.RDB$MAP_FROM); + break; + + case att_map_to_type: + M.RDB$MAP_TO_TYPE.NULL = FALSE; + M.RDB$MAP_TO_TYPE = (USHORT) get_int32(tdgbl); + break; + + case att_map_to: + M.RDB$MAP_TO.NULL = FALSE; + GET_TEXT(M.RDB$MAP_TO); + break; + + case att_map_description: + M.RDB$DESCRIPTION.NULL = FALSE; + get_source_blob (tdgbl, M.RDB$DESCRIPTION, false); + break; + + default: + // msg 299 name mapping + bad_attribute(scan_next_attr, attribute, 299); + break; + } + } + + if (M.RDB$MAP_NAME.NULL || M.RDB$MAP_USING.NULL || + M.RDB$MAP_FROM_TYPE.NULL || M.RDB$MAP_TO_TYPE.NULL) + { + // msg 353 required mapping attributes are missing in backup file + BURP_error(353, true); + } + + END_STORE; + ON_ERROR + general_on_error (); + END_ERROR; + } + else if (tdgbl->runtimeODS >= DB_VERSION_DDL11_1) + { skip_init(&scan_next_attr); while (skip_scan(&scan_next_attr), get_attribute(&attribute, tdgbl) != att_end) { switch (attribute) { -/* case att_map_role: + case att_auto_map_role: l = GET_TEXT(temp); role.assign(temp, l); break; - case att_map_os: - l = GET_TEXT(temp); - os.assign(temp, l); + case att_map_to_type: + get_int32(tdgbl); break; - */ - case att_auto_map_role: - l = GET_TEXT(temp); - role.assign(temp, l); + + case att_map_name: + case att_map_using: + case att_map_plugin: + case att_map_db: + case att_map_from_type: + case att_map_from: + case att_map_to: + GET_TEXT(temp); break; + case att_map_description: + eat_blob(tdgbl); + default: // msg 299 name mapping bad_attribute(scan_next_attr, attribute, 299); @@ -8015,24 +8134,25 @@ return true; // silently skip attributes on old server } + if (tdgbl->firstMap) + { + tdgbl->firstMap = false; + BURP_verbose(301); + // msg 301, restoring names mapping + } + if (role != ADMIN_ROLE) { BURP_error(300, false); return true; } - if (tdgbl->firstMap) - { - tdgbl->firstMap = false; - BURP_verbose(301); - // msg 301, restoring names mapping - } BURP_verbose(298, ADMIN_ROLE); // msg 298, restoring map @1 Firebird::string sql; sql.printf("%s ('%s', %d) %s", "UPDATE OR INSERT INTO RDB$ROLES(RDB$ROLE_NAME, RDB$SYSTEM_FLAG) VALUES", - ADMIN_ROLE, ROLE_FLAG_MAY_TRUST | ROLE_FLAG_DBO, + ADMIN_ROLE, ROLE_FLAG_DBO, "MATCHING (RDB$ROLE_NAME)"); isc_dsql_execute_immediate(tdgbl->status_vector, &tdgbl->db_handle, &tdgbl->tr_handle, sql.length(), sql.c_str(), 1, NULL); Modified: firebird/trunk/src/common/Auth.cpp =================================================================== --- firebird/trunk/src/common/Auth.cpp 2014-04-04 08:53:05 UTC (rev 59357) +++ firebird/trunk/src/common/Auth.cpp 2014-04-04 15:57:18 UTC (rev 59358) @@ -30,6 +30,7 @@ #include "../jrd/ibase.h" #include "../common/classes/ImplementHelper.h" #include "../common/utils_proto.h" +#include "../common/db_alias.h" using namespace Firebird; @@ -38,7 +39,7 @@ WriterImplementation::WriterIm... [truncated message content] |
From: <ro...@us...> - 2014-04-04 20:30:08
|
Revision: 59363 http://sourceforge.net/p/firebird/code/59363 Author: robocop Date: 2014-04-04 20:30:03 +0000 (Fri, 04 Apr 2014) Log Message: ----------- When I tried to modify a system domain, I got the confusing message "create domain failed", so I tried to improve the feedback to the user. 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/DdlNodes.h 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 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2014-04-04 20:30:03 UTC (rev 59363) @@ -2280,6 +2280,12 @@ PARAMETER (GDS__dsql_cte_recursive_aggregate = 336397321) INTEGER*4 GDS__dsql_mapping_failed PARAMETER (GDS__dsql_mapping_failed = 336397322) + INTEGER*4 GDS__dsql_alter_sequence_failed + PARAMETER (GDS__dsql_alter_sequence_failed = 336397323) + INTEGER*4 GDS__dsql_create_generator_failed + PARAMETER (GDS__dsql_create_generator_failed = 336397324) + INTEGER*4 GDS__dsql_set_generator_failed + PARAMETER (GDS__dsql_set_generator_failed = 336397325) 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 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/lang_helpers/gds_codes.pas 2014-04-04 20:30:03 UTC (rev 59363) @@ -1147,6 +1147,9 @@ gds_dsql_revoke_failed = 336397320; gds_dsql_cte_recursive_aggregate = 336397321; gds_dsql_mapping_failed = 336397322; + gds_dsql_alter_sequence_failed = 336397323; + gds_dsql_create_generator_failed = 336397324; + gds_dsql_set_generator_failed = 336397325; 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 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/src/dsql/DdlNodes.epp 2014-04-04 20:30:03 UTC (rev 59363) @@ -4868,6 +4868,31 @@ } +void CreateAlterSequenceNode::putErrorPrefix(Firebird::Arg::StatusVector& statusVector) +{ + // Possibilities I see in parse.y + //CREATE SEQ -> !legacy, create, !alter + //REPL SEQ (create or alter) -> !legacy, create, alter + //ALTER SEQ -> !legacy, !create, alter + //SET GENERATOR -> legacy, !create, alter + ISC_STATUS rc = 0; + if (legacy) + { + if (alter) + rc = isc_dsql_set_generator_failed; + else + rc = isc_dsql_create_sequence_failed; // no way to distinguish + } + else + { + if (alter) + rc = isc_dsql_alter_sequence_failed; + else + rc = isc_dsql_create_sequence_failed; + } + statusVector << Firebird::Arg::Gds(rc) << name; +} + void CreateAlterSequenceNode::executeCreate(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction) { Modified: firebird/trunk/src/dsql/DdlNodes.h =================================================================== --- firebird/trunk/src/dsql/DdlNodes.h 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/src/dsql/DdlNodes.h 2014-04-04 20:30:03 UTC (rev 59363) @@ -935,10 +935,7 @@ } protected: - virtual void putErrorPrefix(Firebird::Arg::StatusVector& statusVector) - { - statusVector << Firebird::Arg::Gds(isc_dsql_create_sequence_failed) << name; - } + virtual void putErrorPrefix(Firebird::Arg::StatusVector& statusVector); private: void executeCreate(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction); Modified: firebird/trunk/src/include/gen/codetext.h =================================================================== --- firebird/trunk/src/include/gen/codetext.h 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/src/include/gen/codetext.h 2014-04-04 20:30:03 UTC (rev 59363) @@ -1136,6 +1136,9 @@ {"dsql_revoke_failed", 336397320}, {"dsql_cte_recursive_aggregate", 336397321}, {"dsql_mapping_failed", 336397322}, + {"dsql_alter_sequence_failed", 336397323}, + {"dsql_create_generator_failed", 336397324}, + {"dsql_set_generator_failed", 336397325}, {"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 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/src/include/gen/iberror.h 2014-04-04 20:30:03 UTC (rev 59363) @@ -1170,6 +1170,9 @@ const ISC_STATUS isc_dsql_revoke_failed = 336397320L; const ISC_STATUS isc_dsql_cte_recursive_aggregate = 336397321L; const ISC_STATUS isc_dsql_mapping_failed = 336397322L; +const ISC_STATUS isc_dsql_alter_sequence_failed = 336397323L; +const ISC_STATUS isc_dsql_create_generator_failed = 336397324L; +const ISC_STATUS isc_dsql_set_generator_failed = 336397325L; 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; @@ -1271,7 +1274,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 = 1215; +const ISC_STATUS isc_err_max = 1218; #else /* c definitions */ @@ -2411,6 +2414,9 @@ #define isc_dsql_revoke_failed 336397320L #define isc_dsql_cte_recursive_aggregate 336397321L #define isc_dsql_mapping_failed 336397322L +#define isc_dsql_alter_sequence_failed 336397323L +#define isc_dsql_create_generator_failed 336397324L +#define isc_dsql_set_generator_failed 336397325L #define isc_gsec_cant_open_db 336723983L #define isc_gsec_switches_error 336723984L #define isc_gsec_no_op_spec 336723985L @@ -2512,7 +2518,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 1215 +#define isc_err_max 1218 #endif Modified: firebird/trunk/src/include/gen/msgs.h =================================================================== --- firebird/trunk/src/include/gen/msgs.h 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/src/include/gen/msgs.h 2014-04-04 20:30:03 UTC (rev 59363) @@ -1139,6 +1139,9 @@ {336397320, "REVOKE failed"}, /* dsql_revoke_failed */ {336397321, "Recursive member of CTE cannot use aggregate or window function"}, /* dsql_cte_recursive_aggregate */ {336397322, "@2 MAPPING @1 failed"}, /* dsql_mapping_failed */ + {336397323, "ALTER SEQUENCE @1 failed"}, /* dsql_alter_sequence_failed */ + {336397324, "CREATE GENERATOR @1 failed"}, /* dsql_create_generator_failed */ + {336397325, "SET GENERATOR @1 failed"}, /* dsql_set_generator_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 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/src/include/gen/sql_code.h 2014-04-04 20:30:03 UTC (rev 59363) @@ -1135,6 +1135,9 @@ {336397320, -901}, /* 1032 dsql_revoke_failed */ {336397321, -104}, /* 1033 dsql_cte_recursive_aggregate */ {336397322, -901}, /* 1034 dsql_mapping_failed */ + {336397323, -901}, /* 1035 dsql_alter_sequence_failed */ + {336397324, -901}, /* 1036 dsql_create_generator_failed */ + {336397325, -901}, /* 1037 dsql_set_generator_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 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/src/include/gen/sql_state.h 2014-04-04 20:30:03 UTC (rev 59363) @@ -1135,6 +1135,9 @@ {336397320, "42000"}, // 1032 dsql_revoke_failed {336397321, "42000"}, // 1033 dsql_cte_recursive_aggregate {336397322, "42000"}, // 1034 dsql_mapping_failed + {336397323, "42000"}, // 1035 dsql_alter_sequence_failed + {336397324, "42000"}, // 1036 dsql_create_generator_failed + {336397325, "42000"}, // 1037 dsql_set_generator_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/msgs/facilities2.sql =================================================================== --- firebird/trunk/src/msgs/facilities2.sql 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/src/msgs/facilities2.sql 2014-04-04 20:30:03 UTC (rev 59363) @@ -10,7 +10,7 @@ ('1996-11-07 13:39:40', 'INSTALL', 10, 1) ('1996-11-07 13:38:41', 'TEST', 11, 4) ('2014-04-04 16:08:08', 'GBAK', 12, 354) -('2014-04-04 16:36:53', 'SQLERR', 13, 1035) +('2014-04-04 16:36:53', 'SQLERR', 13, 1038) ('1996-11-07 13:38:42', 'SQLWARN', 14, 613) ('2006-09-10 03:04:31', 'JRD_BUGCHK', 15, 307) ('2014-01-13 15:41:16', 'ISQL', 17, 184) Modified: firebird/trunk/src/msgs/messages2.sql =================================================================== --- firebird/trunk/src/msgs/messages2.sql 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/src/msgs/messages2.sql 2014-04-04 20:30:03 UTC (rev 59363) @@ -2572,6 +2572,9 @@ ('dsql_revoke_failed', 'getMainErrorCode', 'DdlNodes.h', NULL, 13, 1032, NULL, 'REVOKE failed', NULL, NULL); ('dsql_cte_recursive_aggregate', 'pass1_rse_impl', 'dsql.cpp', NULL, 13, 1033, NULL, 'Recursive member of CTE cannot use aggregate or window function', NULL, NULL); ('dsql_mapping_failed', 'MappingNode::putErrorPrefix', 'DdlNodes.h', NULL, 13, 1034, NULL, '@2 MAPPING @1 failed', NULL, NULL); +('dsql_alter_sequence_failed', 'putErrorPrefix', 'DdlNodes.h', NULL, 13, 1035, NULL, 'ALTER SEQUENCE @1 failed', NULL, NULL); +('dsql_create_generator_failed', 'putErrorPrefix', 'DdlNodes.h', NULL, 13, 1036, NULL, 'CREATE GENERATOR @1 failed', NULL, NULL); +('dsql_set_generator_failed', 'putErrorPrefix', 'DdlNodes.h', NULL, 13, 1037, NULL, 'SET GENERATOR @1 failed', NULL, NULL); -- SQLWARN (NULL, NULL, NULL, NULL, 14, 100, NULL, 'Row not found for fetch, update or delete, or the result of a query is an empty table.', NULL, NULL); (NULL, NULL, NULL, NULL, 14, 101, NULL, 'segment buffer length shorter than expected', NULL, NULL); Modified: firebird/trunk/src/msgs/system_errors2.sql =================================================================== --- firebird/trunk/src/msgs/system_errors2.sql 2014-04-04 18:39:55 UTC (rev 59362) +++ firebird/trunk/src/msgs/system_errors2.sql 2014-04-04 20:30:03 UTC (rev 59363) @@ -1128,7 +1128,10 @@ (-901, '42', '000', 13, 1031, 'dsql_grant_failed', NULL, NULL); (-901, '42', '000', 13, 1032, 'dsql_revoke_failed', NULL, NULL); (-104, '42', '000', 13, 1033, 'dsql_cte_recursive_aggregate', NULL, NULL) -(-901, '42', '000', 13, 1034, 'dsql_mapping_failed', NULL, NULL); +(-901, '42', '000', 13, 1034, 'dsql_mapping_failed', NULL, NULL) +(-901, '42', '000', 13, 1035, 'dsql_alter_sequence_failed', NULL, NULL) +(-901, '42', '000', 13, 1036, 'dsql_create_generator_failed', NULL, NULL) +(-901, '42', '000', 13, 1037, 'dsql_set_generator_failed', NULL, NULL) -- GSEC (-901, '00', '000', 18, 15, 'gsec_cant_open_db', NULL, NULL) (-901, '00', '000', 18, 16, 'gsec_switches_error', NULL, NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-05 01:17:50
|
Revision: 59364 http://sourceforge.net/p/firebird/code/59364 Author: firebirds Date: 2014-04-05 01:17:47 +0000 (Sat, 05 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-04 20:30:03 UTC (rev 59363) +++ firebird/trunk/ChangeLog 2014-04-05 01:17:47 UTC (rev 59364) @@ -1,3 +1,170 @@ + 2014-04-04 20:30 robocop + M lang_helpers/gds_codes.ftn + M lang_helpers/gds_codes.pas + M src/dsql/DdlNodes.epp + M src/dsql/DdlNodes.h + M src/include/gen/codetext.h + M src/include/gen/iberror.h + M src/include/gen/msgs.h + M src/include/gen/sql_code.h + M src/include/gen/sql_state.h + M src/msgs/facilities2.sql + M src/msgs/messages2.sql + M src/msgs/system_errors2.sql +When I tried to modify a system domain, I got the confusing message "create domain failed", so I tried to improve the feedback to the user. + + 2014-04-04 18:39 robocop + M src/jrd/met.epp + M src/jrd/met.h + M src/jrd/met_proto.h + M src/jrd/par.cpp +Use enumerations where possible (2). + + 2014-04-04 18:36 robocop + M src/jrd/dpm.epp + M src/jrd/dpm_proto.h + M src/jrd/req.h +Use enumerations where possible (1). + + 2014-04-04 16:10 asfernandes + M src/dsql/Parser.cpp +Misc. + + 2014-04-04 16:05 asfernandes + M src/dsql/Parser.cpp + M src/dsql/Parser.h +Fixed CORE-4381 - Incorrect line/column information in runtime errors. + + 2014-04-04 15:57 alexpeshkoff + M builds/install/misc/databases.conf.in + A doc/sql.extensions/README.mapping.html + M lang_helpers/gds_codes.ftn + M lang_helpers/gds_codes.pas + M src/alice/alice.cpp + M src/alice/aliceswi.h + M src/auth/AuthDbg.cpp + M src/auth/AuthDbg.h + M src/auth/SecureRemotePassword/Message.h + M src/auth/SecureRemotePassword/manage/SrpManagement.cpp + M src/auth/SecureRemotePassword/server/SrpServer.cpp + M src/auth/SecurityDatabase/LegacyManagement.epp + M src/auth/SecurityDatabase/LegacyServer.cpp + M src/auth/trusted/AuthSspi.cpp + M src/auth/trusted/AuthSspi.h + M src/burp/backup.epp + M src/burp/burp.cpp + M src/burp/burp.h + M src/burp/burpswi.h + M src/burp/restore.epp + M src/common/Auth.cpp + M src/common/Auth.h + M src/common/MsgMetadata.cpp + M src/common/MsgMetadata.h + M src/common/StatusArg.cpp + M src/common/StatusArg.h + M src/common/classes/ClumpletReader.cpp + M src/common/classes/ClumpletReader.h + M src/common/classes/Hash.h + M src/common/db_alias.cpp + M src/common/db_alias.h + M src/common/isc_s_proto.h + M src/common/security.cpp + M src/common/security.h + M src/dsql/DdlNodes.epp + M src/dsql/DdlNodes.h + M src/dsql/parse.y + M src/include/firebird/Auth.h + M src/include/firebird/Provider.h + M src/include/gen/codetext.h + M src/include/gen/iberror.h + M src/include/gen/ids.h + M src/include/gen/msgs.h + M src/include/gen/sql_code.h + M src/include/gen/sql_state.h + M src/isql/extract.epp + M src/isql/isql.h + M src/isql/show.epp + M src/isql/show_proto.h + A src/jrd/Mapping.cpp + A src/jrd/Mapping.h + M src/jrd/UserManagement.cpp + M src/jrd/constants.h + M src/jrd/dfw.epp + M src/jrd/drq.h + M src/jrd/extds/ExtDS.cpp + M src/jrd/fields.h + M src/jrd/idx.h + M src/jrd/jrd.cpp + M src/jrd/names.h + M src/jrd/opt.cpp + M src/jrd/relations.h + M src/jrd/scl.epp + M src/jrd/scl.h + M src/jrd/svc.cpp + M src/jrd/svc.h + M src/jrd/tra.cpp + M src/jrd/tra.h + M src/jrd/trace/TraceCmdLine.cpp + M src/jrd/trace/traceswi.h + M src/msgs/facilities2.sql + M src/msgs/messages2.sql + M src/msgs/system_errors2.sql + M src/remote/server/server.cpp + M src/utilities/gsec/gsec.cpp + M src/utilities/gsec/gsecswi.h + M src/utilities/gstat/dba.epp + M src/utilities/gstat/dbaswi.h + M src/utilities/nbackup/nbackup.cpp + M src/utilities/nbackup/nbkswi.h + M src/yvalve/MasterImplementation.cpp + M src/yvalve/keywords.cpp +Implemented CORE-3370: Resolve additional aspects of multiple security databases from services and cross-database requests POV (mapping names) + + 2014-04-04 08:53 hvlad + M src/dsql/StmtNodes.cpp +Improvement CORE-4252 : Add table name to text of validation contraint error message, to help identify error context + + 2014-04-04 07:52 robocop + M src/jrd/cch.cpp +Misc. + + 2014-04-04 07:51 robocop + M src/dsql/ExprNodes.cpp + M src/jrd/Attachment.h + M src/jrd/jrd.cpp + M src/jrd/trace/TraceJrdHelpers.h +A bit less repetitive code. + + 2014-04-04 06:45 robocop + M src/jrd/req.h +The 0th generator becomes unnamed. Only internal requests can access it (zero length names are not allowed from outside). RDB$GENERATORS is no longer a reserved name.System generators cannot be changed by user requests, but can be queried with gen_id(g, 0) if the permissions (ACL) allow that. We don't track dependencies on sys generators, it's not necessary. + + 2014-04-04 06:39 robocop + M lang_helpers/gds_codes.ftn + M lang_helpers/gds_codes.pas + M src/dsql/DdlNodes.epp + M src/dsql/ExprNodes.cpp + M src/dsql/ExprNodes.h + M src/dsql/StmtNodes.cpp + M src/dsql/StmtNodes.h + M src/include/gen/codetext.h + M src/include/gen/iberror.h + M src/include/gen/msgs.h + M src/include/gen/sql_code.h + M src/include/gen/sql_state.h + M src/jrd/Attachment.h + M src/jrd/constants.h + M src/jrd/dfw.epp + M src/jrd/ini.epp + M src/jrd/jrd.cpp + M src/jrd/met.epp + M src/jrd/met_proto.h + M src/jrd/vio.cpp + M src/msgs/facilities2.sql + M src/msgs/messages2.sql + M src/msgs/system_errors2.sql +The 0th generator becomes unnamed. Only internal requests can access it (zero length names are not allowed from outside). RDB$GENERATORS is no longer a reserved name.System generators cannot be changed by user requests, but can be queried with gen_id(g, 0) if the permissions (ACL) allow that. We don't track dependencies on sys generators, it's not necessary. + 2014-04-02 11:53 alexpeshkoff M src/jrd/constants.h Fixed DDL triggers with code > 31 Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-04 20:30:03 UTC (rev 59363) +++ firebird/trunk/src/jrd/build_no.h 2014-04-05 01:17:47 UTC (rev 59364) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31010 + FORMAL BUILD NUMBER:31021 */ -#define PRODUCT_VER_STRING "3.0.0.31010" -#define FILE_VER_STRING "WI-T3.0.0.31010" -#define LICENSE_VER_STRING "WI-T3.0.0.31010" -#define FILE_VER_NUMBER 3, 0, 0, 31010 +#define PRODUCT_VER_STRING "3.0.0.31021" +#define FILE_VER_STRING "WI-T3.0.0.31021" +#define LICENSE_VER_STRING "WI-T3.0.0.31021" +#define FILE_VER_NUMBER 3, 0, 0, 31021 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31010" +#define FB_BUILD_NO "31021" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-04 20:30:03 UTC (rev 59363) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-05 01:17:47 UTC (rev 59364) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31010 +BuildNum=31021 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2014-04-05 02:15:43
|
Revision: 59367 http://sourceforge.net/p/firebird/code/59367 Author: robocop Date: 2014-04-05 02:15:40 +0000 (Sat, 05 Apr 2014) Log Message: ----------- Never underestimate the brute force approach to make a build succeed after changes in other platforms. Modified Paths: -------------- firebird/trunk/builds/win32/msvc10/engine.vcxproj firebird/trunk/builds/win32/msvc10/engine.vcxproj.filters firebird/trunk/src/jrd/Mapping.cpp Modified: firebird/trunk/builds/win32/msvc10/engine.vcxproj =================================================================== --- firebird/trunk/builds/win32/msvc10/engine.vcxproj 2014-04-05 01:44:32 UTC (rev 59366) +++ firebird/trunk/builds/win32/msvc10/engine.vcxproj 2014-04-05 02:15:40 UTC (rev 59367) @@ -88,6 +88,7 @@ <ClCompile Include="..\..\..\src\jrd\jrd.cpp" /> <ClCompile Include="..\..\..\src\jrd\JrdStatement.cpp" /> <ClCompile Include="..\..\..\src\jrd\lck.cpp" /> + <ClCompile Include="..\..\..\src\jrd\Mapping.cpp" /> <ClCompile Include="..\..\..\src\jrd\mov.cpp" /> <ClCompile Include="..\..\..\src\jrd\nbak.cpp" /> <ClCompile Include="..\..\..\src\jrd\nodebug.cpp" /> @@ -262,6 +263,7 @@ <ClInclude Include="..\..\..\src\jrd\lck_proto.h" /> <ClInclude Include="..\..\..\src\jrd\license.h" /> <ClInclude Include="..\..\..\src\jrd\lls.h" /> + <ClInclude Include="..\..\..\src\jrd\Mapping.h" /> <ClInclude Include="..\..\..\src\jrd\met.h" /> <ClInclude Include="..\..\..\src\jrd\met_proto.h" /> <ClInclude Include="..\..\..\src\jrd\mov_proto.h" /> Modified: firebird/trunk/builds/win32/msvc10/engine.vcxproj.filters =================================================================== --- firebird/trunk/builds/win32/msvc10/engine.vcxproj.filters 2014-04-05 01:44:32 UTC (rev 59366) +++ firebird/trunk/builds/win32/msvc10/engine.vcxproj.filters 2014-04-05 02:15:40 UTC (rev 59367) @@ -453,6 +453,9 @@ <ClCompile Include="..\..\..\src\jrd\Routine.cpp"> <Filter>JRD files</Filter> </ClCompile> + <ClCompile Include="..\..\..\src\jrd\Mapping.cpp"> + <Filter>JRD files</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\..\src\jrd\recsrc\RecordSource.h"> @@ -977,6 +980,9 @@ <ClInclude Include="..\..\..\src\dsql\BlrDebugWriter.h"> <Filter>Header files</Filter> </ClInclude> + <ClInclude Include="..\..\..\src\jrd\Mapping.h"> + <Filter>Header files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="..\..\..\src\dsql\DdlNodes.epp"> Modified: firebird/trunk/src/jrd/Mapping.cpp =================================================================== --- firebird/trunk/src/jrd/Mapping.cpp 2014-04-05 01:44:32 UTC (rev 59366) +++ firebird/trunk/src/jrd/Mapping.cpp 2014-04-05 02:15:40 UTC (rev 59367) @@ -49,6 +49,11 @@ #include "../jrd/ini.h" #include "gen/ids.h" +#ifdef WIN_NT +#include <process.h> +#define getpid _getpid +#endif + #define MAP_DEBUG(A) A using namespace Firebird; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-08 00:32:22
|
Revision: 59383 http://sourceforge.net/p/firebird/code/59383 Author: firebirds Date: 2014-04-08 00:32:16 +0000 (Tue, 08 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-07 15:23:23 UTC (rev 59382) +++ firebird/trunk/ChangeLog 2014-04-08 00:32:16 UTC (rev 59383) @@ -1,3 +1,55 @@ + 2014-04-07 15:23 asfernandes + M src/dsql/StmtNodes.h +Warning. + + 2014-04-07 09:28 alexpeshkoff + M src/jrd/jrd.cpp +Resolved first problem, reported by Vlad privately - it was bad idea to try to load cache from database which is not created yet + + 2014-04-07 07:17 alexpeshkoff + M src/dsql/DdlNodes.epp + M src/jrd/Mapping.cpp + M src/jrd/Mapping.h + M src/jrd/dfw.epp + M src/jrd/tra.cpp + M src/jrd/tra.h +Names cleanup - thanks to Claudio + + 2014-04-06 01:20 robocop + M src/jrd/Mapping.cpp +Misc. + + 2014-04-06 01:16 robocop + M src/dsql/DdlNodes.epp +Protect system domains. + + 2014-04-06 01:15 robocop + M src/jrd/fields.h +Misc (formatting). + + 2014-04-05 18:27 dimitr + M src/jrd/tra.cpp +Fixed one more possible case of LM error kept in the status vector after successful execution. + + 2014-04-05 02:15 robocop + M builds/win32/msvc10/engine.vcxproj + M builds/win32/msvc10/engine.vcxproj.filters + M src/jrd/Mapping.cpp +Never underestimate the brute force approach to make a build succeed after changes in other platforms. + + 2014-04-05 01:44 robocop + M src/auth/AuthDbg.h + M src/auth/SecureRemotePassword/Message.h + M src/common/MsgMetadata.h + M src/common/classes/ClumpletReader.h + M src/dsql/DdlNodes.epp + M src/isql/show.epp + M src/jrd/Mapping.cpp + M src/jrd/Mapping.h + M src/jrd/jrd.cpp + M src/jrd/tra.cpp +Misc. + 2014-04-04 20:30 robocop M lang_helpers/gds_codes.ftn M lang_helpers/gds_codes.pas Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-07 15:23:23 UTC (rev 59382) +++ firebird/trunk/src/jrd/build_no.h 2014-04-08 00:32:16 UTC (rev 59383) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31021 + FORMAL BUILD NUMBER:31030 */ -#define PRODUCT_VER_STRING "3.0.0.31021" -#define FILE_VER_STRING "WI-T3.0.0.31021" -#define LICENSE_VER_STRING "WI-T3.0.0.31021" -#define FILE_VER_NUMBER 3, 0, 0, 31021 +#define PRODUCT_VER_STRING "3.0.0.31030" +#define FILE_VER_STRING "WI-T3.0.0.31030" +#define LICENSE_VER_STRING "WI-T3.0.0.31030" +#define FILE_VER_NUMBER 3, 0, 0, 31030 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31021" +#define FB_BUILD_NO "31030" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-07 15:23:23 UTC (rev 59382) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-08 00:32:16 UTC (rev 59383) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31021 +BuildNum=31030 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-09 00:37:56
|
Revision: 59399 http://sourceforge.net/p/firebird/code/59399 Author: firebirds Date: 2014-04-09 00:37:52 +0000 (Wed, 09 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-08 16:13:12 UTC (rev 59398) +++ firebird/trunk/ChangeLog 2014-04-09 00:37:52 UTC (rev 59399) @@ -1,3 +1,43 @@ + 2014-04-08 16:13 alexpeshkoff + M src/common/classes/InternalMessageBuffer.cpp + M src/common/classes/InternalMessageBuffer.h + M src/yvalve/YObjects.h + M src/yvalve/why.cpp +Patch from Dmitry Sibiryakov - convert SQLDA directly to IMessageMetadata w/o intermediate BLR + + 2014-04-08 13:45 alexpeshkoff + M src/jrd/EngineInterface.h + M src/jrd/jrd.cpp + M src/remote/client/interface.cpp + M src/yvalve/why.cpp +Implemented improvement CORE-4387: IStatement::execute() and IAttachment::execute() functions should return on error pointer to old transaction interface + + 2014-04-08 10:46 alexpeshkoff + M doc/sql.extensions/README.mapping.html +misc + + 2014-04-08 10:33 alexpeshkoff + M src/msgs/facilities2.sql + M src/msgs/messages2.sql +Added isql error messages + + 2014-04-08 10:32 alexpeshkoff + M src/jrd/Mapping.cpp +Turned off debugging + + 2014-04-08 07:15 hvlad + M src/jrd/jrd.cpp +Patch by Alex (re.CORE-3370 and deadlock in user mapping code) + + 2014-04-08 03:37 asfernandes + M src/alice/alice.cpp + M src/auth/SecureRemotePassword/Message.h + M src/burp/backup.epp + M src/burp/burp.cpp + M src/dsql/StmtNodes.cpp + M src/jrd/dfw.epp +Misc. + 2014-04-07 15:23 asfernandes M src/dsql/StmtNodes.h Warning. Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-08 16:13:12 UTC (rev 59398) +++ firebird/trunk/src/jrd/build_no.h 2014-04-09 00:37:52 UTC (rev 59399) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31030 + FORMAL BUILD NUMBER:31037 */ -#define PRODUCT_VER_STRING "3.0.0.31030" -#define FILE_VER_STRING "WI-T3.0.0.31030" -#define LICENSE_VER_STRING "WI-T3.0.0.31030" -#define FILE_VER_NUMBER 3, 0, 0, 31030 +#define PRODUCT_VER_STRING "3.0.0.31037" +#define FILE_VER_STRING "WI-T3.0.0.31037" +#define LICENSE_VER_STRING "WI-T3.0.0.31037" +#define FILE_VER_NUMBER 3, 0, 0, 31037 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31030" +#define FB_BUILD_NO "31037" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-08 16:13:12 UTC (rev 59398) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-09 00:37:52 UTC (rev 59399) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31030 +BuildNum=31037 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2014-04-09 02:28:42
|
Revision: 59401 http://sourceforge.net/p/firebird/code/59401 Author: robocop Date: 2014-04-09 02:28:38 +0000 (Wed, 09 Apr 2014) Log Message: ----------- Implemented STEP for generators/sequences and took the opportunity to make the blrOp param const. Please rebuild the databases. Modified Paths: -------------- firebird/trunk/lang_helpers/gds_codes.ftn firebird/trunk/lang_helpers/gds_codes.pas firebird/trunk/src/burp/backup.epp firebird/trunk/src/burp/burp.h firebird/trunk/src/burp/restore.epp firebird/trunk/src/dsql/AggNodes.cpp firebird/trunk/src/dsql/AggNodes.h firebird/trunk/src/dsql/BoolNodes.cpp firebird/trunk/src/dsql/BoolNodes.h firebird/trunk/src/dsql/DdlNodes.epp firebird/trunk/src/dsql/DdlNodes.h firebird/trunk/src/dsql/ExprNodes.cpp firebird/trunk/src/dsql/ExprNodes.h firebird/trunk/src/dsql/Nodes.h firebird/trunk/src/dsql/StmtNodes.cpp firebird/trunk/src/dsql/StmtNodes.h firebird/trunk/src/dsql/WinNodes.cpp 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/ids.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/isql/extract.epp firebird/trunk/src/isql/show.epp firebird/trunk/src/jrd/RecordSourceNodes.cpp firebird/trunk/src/jrd/RecordSourceNodes.h firebird/trunk/src/jrd/blp.h firebird/trunk/src/jrd/blr.h firebird/trunk/src/jrd/fields.h firebird/trunk/src/jrd/ini.epp firebird/trunk/src/jrd/irq.h firebird/trunk/src/jrd/met.epp firebird/trunk/src/jrd/met_proto.h firebird/trunk/src/jrd/names.h firebird/trunk/src/jrd/par_proto.h firebird/trunk/src/jrd/relations.h firebird/trunk/src/msgs/facilities2.sql firebird/trunk/src/msgs/messages2.sql firebird/trunk/src/msgs/system_errors2.sql firebird/trunk/src/yvalve/gds.cpp firebird/trunk/src/yvalve/keywords.cpp Modified: firebird/trunk/lang_helpers/gds_codes.ftn =================================================================== --- firebird/trunk/lang_helpers/gds_codes.ftn 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2014-04-09 02:28:38 UTC (rev 59401) @@ -1848,6 +1848,8 @@ PARAMETER (GDS__dyn_duplicate_package_item = 336068894) INTEGER*4 GDS__dyn_cant_modify_sysobj PARAMETER (GDS__dyn_cant_modify_sysobj = 336068895) + INTEGER*4 GDS__dyn_cant_use_zero_step + PARAMETER (GDS__dyn_cant_use_zero_step = 336068896) 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 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/lang_helpers/gds_codes.pas 2014-04-09 02:28:38 UTC (rev 59401) @@ -931,6 +931,7 @@ gds_dyn_alter_user_no_clause = 336068891; gds_dyn_duplicate_package_item = 336068894; gds_dyn_cant_modify_sysobj = 336068895; + gds_dyn_cant_use_zero_step = 336068896; gds_gbak_unknown_switch = 336330753; gds_gbak_page_size_missing = 336330754; gds_gbak_page_size_toobig = 336330755; Modified: firebird/trunk/src/burp/backup.epp =================================================================== --- firebird/trunk/src/burp/backup.epp 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/burp/backup.epp 2014-04-09 02:28:38 UTC (rev 59401) @@ -3171,6 +3171,8 @@ if (!X.RDB$INITIAL_VALUE.NULL) put_int64(att_gen_init_val, X.RDB$INITIAL_VALUE); + put_int32(att_gen_id_step, X.RDB$GENERATOR_STEP); + put(tdgbl, att_end); MISC_terminate (X.RDB$GENERATOR_NAME, temp, l, sizeof(temp)); BURP_verbose (165, SafeArg() << temp << value); Modified: firebird/trunk/src/burp/burp.h =================================================================== --- firebird/trunk/src/burp/burp.h 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/burp/burp.h 2014-04-09 02:28:38 UTC (rev 59401) @@ -496,6 +496,7 @@ att_gen_owner_name, att_gen_sysflag, att_gen_init_val, + att_gen_id_step, // Stored procedure attributes Modified: firebird/trunk/src/burp/restore.epp =================================================================== --- firebird/trunk/src/burp/restore.epp 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/burp/restore.epp 2014-04-09 02:28:38 UTC (rev 59401) @@ -155,7 +155,8 @@ void restore_security_class(BurpGlobals* tdgbl, const TEXT*, const TEXT*); USHORT get_view_base_relation_count(BurpGlobals* tdgbl, const TEXT*, USHORT, bool* error); void store_blr_gen_id(BurpGlobals* tdgbl, const TEXT* gen_name, SINT64 value, SINT64 initial_value, - const ISC_QUAD* gen_desc, const char* secclass, const char* ownername, fb_sysflag sysFlag); + const ISC_QUAD* gen_desc, const char* secclass, const char* ownername, fb_sysflag sysFlag, + SLONG step); void update_global_field(BurpGlobals* tdgbl); void update_view_dbkey_lengths(BurpGlobals* tdgbl); void fix_missing_privileges(BurpGlobals* tdgbl); @@ -5172,6 +5173,7 @@ **************************************/ SINT64 value = 0; SINT64 initial_value = 0; + SLONG step = 1; BASED_ON RDB$GENERATORS.RDB$GENERATOR_NAME name = ""; BASED_ON RDB$GENERATORS.RDB$SECURITY_CLASS secclass = ""; @@ -5247,6 +5249,13 @@ bad_attribute(scan_next_attr, attribute, 289); break; + case att_gen_id_step: + if (tdgbl->RESTORE_format >= 10) + step = get_int32(tdgbl); + else + bad_attribute(scan_next_attr, attribute, 289); + break; + default: bad_attribute(scan_next_attr, attribute, 289); // msg 289 generator @@ -5259,7 +5268,7 @@ value = 0; } - store_blr_gen_id(tdgbl, name, value, initial_value, descPtr, secPtr, ownerPtr, sysFlag); + store_blr_gen_id(tdgbl, name, value, initial_value, descPtr, secPtr, ownerPtr, sysFlag, step); return true; } @@ -7791,7 +7800,7 @@ case rec_gen_id: gen_id = get_int32(tdgbl); - store_blr_gen_id(tdgbl, name, gen_id, 0, NULL, NULL, NULL, fb_sysflag_user); + store_blr_gen_id(tdgbl, name, gen_id, 0, NULL, NULL, NULL, fb_sysflag_user, 1); get_record(&record, tdgbl); break; @@ -10288,7 +10297,8 @@ void store_blr_gen_id(BurpGlobals* tdgbl, const TEXT* gen_name, SINT64 value, SINT64 initial_value, - const ISC_QUAD* gen_desc, const char* secclass, const char* ownername, fb_sysflag sysFlag) + const ISC_QUAD* gen_desc, const char* secclass, const char* ownername, fb_sysflag sysFlag, + SLONG step) { /************************************** * @@ -10327,6 +10337,7 @@ } X.RDB$INITIAL_VALUE.NULL = FALSE; X.RDB$INITIAL_VALUE = initial_value; + X.RDB$GENERATOR_STEP = step; END_STORE; ON_ERROR general_on_error (); Modified: firebird/trunk/src/dsql/AggNodes.cpp =================================================================== --- firebird/trunk/src/dsql/AggNodes.cpp 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/dsql/AggNodes.cpp 2014-04-09 02:28:38 UTC (rev 59401) @@ -435,7 +435,7 @@ dsqlCompatDialectVerb = "avg"; } -DmlNode* AvgAggNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* AvgAggNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { AvgAggNode* node = FB_NEW(pool) AvgAggNode(pool, (blrOp == blr_agg_average_distinct), @@ -651,7 +651,7 @@ addChildNode(delimiter, delimiter); } -DmlNode* ListAggNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* ListAggNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { ListAggNode* node = FB_NEW(pool) ListAggNode(pool, (blrOp == blr_agg_list_distinct)); @@ -777,7 +777,7 @@ { } -DmlNode* CountAggNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* CountAggNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { CountAggNode* node = FB_NEW(pool) CountAggNode(pool, (blrOp == blr_agg_count_distinct), @@ -868,7 +868,7 @@ dsqlCompatDialectVerb = "sum"; } -DmlNode* SumAggNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* SumAggNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { SumAggNode* node = FB_NEW(pool) SumAggNode(pool, (blrOp == blr_agg_total_distinct), (csb->blrVersion == 4)); @@ -1100,7 +1100,7 @@ { } -DmlNode* MaxMinAggNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* MaxMinAggNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { MaxMinAggNode* node = FB_NEW(pool) MaxMinAggNode(pool, (blrOp == blr_agg_max ? TYPE_MAX : TYPE_MIN)); Modified: firebird/trunk/src/dsql/AggNodes.h =================================================================== --- firebird/trunk/src/dsql/AggNodes.h 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/dsql/AggNodes.h 2014-04-09 02:28:38 UTC (rev 59401) @@ -34,7 +34,7 @@ public: explicit AvgAggNode(MemoryPool& pool, bool aDistinct, bool aDialect1, ValueExprNode* aArg = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void make(DsqlCompilerScratch* dsqlScratch, dsc* desc); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); @@ -59,7 +59,7 @@ explicit ListAggNode(MemoryPool& pool, bool aDistinct, ValueExprNode* aArg = NULL, ValueExprNode* aDelimiter = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void make(DsqlCompilerScratch* dsqlScratch, dsc* desc); virtual bool setParameterType(DsqlCompilerScratch* dsqlScratch, @@ -91,7 +91,7 @@ public: explicit CountAggNode(MemoryPool& pool, bool aDistinct, bool aDialect1, ValueExprNode* aArg = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void make(DsqlCompilerScratch* dsqlScratch, dsc* desc); virtual void genBlr(DsqlCompilerScratch* dsqlScratch); @@ -111,7 +111,7 @@ public: explicit SumAggNode(MemoryPool& pool, bool aDistinct, bool aDialect1, ValueExprNode* aArg = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void make(DsqlCompilerScratch* dsqlScratch, dsc* desc); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); @@ -136,7 +136,7 @@ explicit MaxMinAggNode(MemoryPool& pool, MaxMinType aType, ValueExprNode* aArg = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void make(DsqlCompilerScratch* dsqlScratch, dsc* desc); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); Modified: firebird/trunk/src/dsql/BoolNodes.cpp =================================================================== --- firebird/trunk/src/dsql/BoolNodes.cpp 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/dsql/BoolNodes.cpp 2014-04-09 02:28:38 UTC (rev 59401) @@ -145,7 +145,7 @@ addChildNode(arg2, arg2); } -DmlNode* BinaryBoolNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* BinaryBoolNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { BinaryBoolNode* node = FB_NEW(pool) BinaryBoolNode(pool, blrOp); node->arg1 = PAR_parse_boolean(tdbb, csb); @@ -354,7 +354,7 @@ addChildNode(arg3, arg3); } -DmlNode* ComparativeBoolNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* ComparativeBoolNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { ComparativeBoolNode* node = FB_NEW(pool) ComparativeBoolNode(pool, blrOp); @@ -1363,7 +1363,7 @@ addChildNode(arg, arg); } -DmlNode* MissingBoolNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* MissingBoolNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { MissingBoolNode* node = FB_NEW(pool) MissingBoolNode(pool); node->arg = PAR_parse_value(tdbb, csb); @@ -1453,7 +1453,7 @@ addChildNode(arg, arg); } -DmlNode* NotBoolNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* NotBoolNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { NotBoolNode* node = FB_NEW(pool) NotBoolNode(pool); node->arg = PAR_parse_boolean(tdbb, csb); @@ -1644,7 +1644,7 @@ addChildNode(dsqlRse, rse); } -DmlNode* RseBoolNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* RseBoolNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { RseBoolNode* node = FB_NEW(pool) RseBoolNode(pool, blrOp); node->rse = PAR_rse(tdbb, csb); Modified: firebird/trunk/src/dsql/BoolNodes.h =================================================================== --- firebird/trunk/src/dsql/BoolNodes.h 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/dsql/BoolNodes.h 2014-04-09 02:28:38 UTC (rev 59401) @@ -37,7 +37,7 @@ BinaryBoolNode(MemoryPool& pool, UCHAR aBlrOp, BoolExprNode* aArg1 = NULL, BoolExprNode* aArg2 = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual BoolExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -72,7 +72,7 @@ ComparativeBoolNode(MemoryPool& pool, UCHAR aBlrOp, ValueExprNode* aArg1 = NULL, ValueExprNode* aArg2 = NULL, ValueExprNode* aArg3 = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual BoolExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -116,7 +116,7 @@ public: explicit MissingBoolNode(MemoryPool& pool, ValueExprNode* aArg = NULL, bool aDsqlUnknown = false); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual BoolExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -143,7 +143,7 @@ public: explicit NotBoolNode(MemoryPool& pool, BoolExprNode* aArg = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual BoolExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -171,7 +171,7 @@ public: RseBoolNode(MemoryPool& pool, UCHAR aBlrOp, RecordSourceNode* aDsqlRse = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual BoolExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); Modified: firebird/trunk/src/dsql/DdlNodes.epp =================================================================== --- firebird/trunk/src/dsql/DdlNodes.epp 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/dsql/DdlNodes.epp 2014-04-09 02:28:38 UTC (rev 59401) @@ -4906,7 +4906,14 @@ executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_BEFORE, DDL_TRIGGER_CREATE_SEQUENCE, name); const SINT64 val = value.specified ? value.value : 0; - store(tdbb, transaction, name, fb_sysflag_user, val); + SLONG initialStep = 1; + if (step.specified) + { + initialStep = step.value; + if (initialStep == 0) + status_exception::raise(Arg::Gds(isc_dyn_cant_use_zero_step) << Arg::Str(name)); + } + store(tdbb, transaction, name, fb_sysflag_user, val, initialStep); executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_AFTER, DDL_TRIGGER_CREATE_SEQUENCE, name); } @@ -4924,7 +4931,8 @@ // that the generator created in another transaction can be found here. This is done // using MET_lookup_generator() which works in the system transaction. - const SLONG id = MET_lookup_generator(tdbb, name, &forbidden); + SLONG oldStep = 0; + const SLONG id = MET_lookup_generator(tdbb, name, &forbidden, &oldStep); if (id < 0) return false; @@ -4935,7 +4943,17 @@ fb_assert(value.specified); const SINT64 val = value.specified ? value.value : 0; + if (step.specified) + { + const SLONG newStep = step.value; + if (newStep == 0) + status_exception::raise(Arg::Gds(isc_dyn_cant_use_zero_step) << Arg::Str(name)); + // Perhaps it's better to move this to DFW? + if (newStep != oldStep) + MET_update_generator_step(tdbb, id, newStep); + } + transaction->getGenIdCache()->put(id, val); dsc desc; desc.makeText((USHORT) name.length(), ttype_metadata, (UCHAR*) name.c_str()); @@ -4965,7 +4983,20 @@ const SLONG id = X.RDB$GENERATOR_ID; const SINT64 val = value.specified ? value.value : (!X.RDB$INITIAL_VALUE.NULL ? X.RDB$INITIAL_VALUE : 0); + if (step.specified) + { + const SLONG newStep = step.value; + if (newStep == 0) + status_exception::raise(Arg::Gds(isc_dyn_cant_use_zero_step) << Arg::Str(name)); + if (newStep != X.RDB$GENERATOR_STEP) + { + MODIFY X + X.RDB$GENERATOR_STEP = newStep; + END_MODIFY + } + } + transaction->getGenIdCache()->put(id, val); dsc desc; desc.makeText((USHORT) name.length(), ttype_metadata, (UCHAR*) name.c_str()); @@ -4984,7 +5015,7 @@ } SSHORT CreateAlterSequenceNode::store(thread_db* tdbb, jrd_tra* transaction, const MetaName& name, - fb_sysflag sysFlag, SINT64 val) + fb_sysflag sysFlag, SINT64 val, SLONG step) { Attachment* const attachment = transaction->tra_attachment; const string& userName = attachment->att_user->usr_user_name; @@ -5017,6 +5048,8 @@ X.RDB$INITIAL_VALUE.NULL = FALSE; X.RDB$INITIAL_VALUE = val; + + X.RDB$GENERATOR_STEP = step; } END_STORE @@ -5575,7 +5608,7 @@ DYN_UTIL_generate_generator_name(tdbb, fieldDefinition.identitySequence); CreateAlterSequenceNode::store(tdbb, transaction, fieldDefinition.identitySequence, - fb_sysflag_identity_generator, clause->identityStart); + fb_sysflag_identity_generator, clause->identityStart, 1); } BlrDebugWriter::BlrData defaultValue; Modified: firebird/trunk/src/dsql/DdlNodes.h =================================================================== --- firebird/trunk/src/dsql/DdlNodes.h 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/dsql/DdlNodes.h 2014-04-09 02:28:38 UTC (rev 59401) @@ -911,17 +911,18 @@ { public: CreateAlterSequenceNode(MemoryPool& pool, const Firebird::MetaName& aName, - BaseNullable<SINT64> aValue) + BaseNullable<SINT64> aValue, BaseNullable<SLONG> aStep) : DdlNode(pool), create(true), alter(false), legacy(false), name(pool, aName), - value(aValue) + value(aValue), + step(aStep) {} static SSHORT store(thread_db* tdbb, jrd_tra* transaction, const Firebird::MetaName& name, - fb_sysflag sysFlag, SINT64 value); + fb_sysflag sysFlag, SINT64 value, SLONG step); public: virtual void print(Firebird::string& text) const; @@ -946,7 +947,8 @@ bool alter; bool legacy; const Firebird::MetaName name; - BaseNullable<SINT64> value; + const BaseNullable<SINT64> value; + const BaseNullable<SLONG> step; }; Modified: firebird/trunk/src/dsql/ExprNodes.cpp =================================================================== --- firebird/trunk/src/dsql/ExprNodes.cpp 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/dsql/ExprNodes.cpp 2014-04-09 02:28:38 UTC (rev 59401) @@ -250,7 +250,7 @@ addChildNode(arg2, arg2); } -DmlNode* ArithmeticNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* ArithmeticNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { ArithmeticNode* node = FB_NEW(pool) ArithmeticNode( pool, blrOp, (csb->blrVersion == 4)); @@ -1457,7 +1457,7 @@ // Add (or subtract) the contents of a descriptor to value block, with dialect-1 semantics. // This function can be removed when dialect-3 becomes the lowest supported dialect. (Version 7.0?) -dsc* ArithmeticNode::add(const dsc* desc, impure_value* value, const ValueExprNode* node, UCHAR blrOp) +dsc* ArithmeticNode::add(const dsc* desc, impure_value* value, const ValueExprNode* node, const UCHAR blrOp) { const ArithmeticNode* arithmeticNode = node->as<ArithmeticNode>(); @@ -1520,7 +1520,7 @@ // Add (or subtract) the contents of a descriptor to value block, with dialect-3 semantics, as in // the blr_add, blr_subtract, and blr_agg_total verbs following a blr_version5. -dsc* ArithmeticNode::add2(const dsc* desc, impure_value* value, const ValueExprNode* node, UCHAR blrOp) +dsc* ArithmeticNode::add2(const dsc* desc, impure_value* value, const ValueExprNode* node, const UCHAR blrOp) { const ArithmeticNode* arithmeticNode = node->as<ArithmeticNode>(); @@ -2359,7 +2359,7 @@ addChildNode(boolean, boolean); } -DmlNode* BoolAsValueNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* BoolAsValueNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { BoolAsValueNode* node = FB_NEW(pool) BoolAsValueNode(pool); node->boolean = PAR_parse_boolean(tdbb, csb); @@ -2450,7 +2450,7 @@ } // Parse a datatype cast. -DmlNode* CastNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* CastNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { CastNode* node = FB_NEW(pool) CastNode(pool); @@ -2745,7 +2745,7 @@ static RegisterNode<CoalesceNode> regCoalesceNode(blr_coalesce); -DmlNode* CoalesceNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* CoalesceNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { CoalesceNode* node = FB_NEW(pool) CoalesceNode(pool); node->args = PAR_args(tdbb, csb); @@ -2951,7 +2951,7 @@ addChildNode(arg2, arg2); } -DmlNode* ConcatenateNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* ConcatenateNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { ConcatenateNode* node = FB_NEW(pool) ConcatenateNode(pool); node->arg1 = PAR_parse_value(tdbb, csb); @@ -3212,7 +3212,7 @@ static RegisterNode<CurrentDateNode> regCurrentDateNode(blr_current_date); DmlNode* CurrentDateNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* /*csb*/, - UCHAR /*blrOp*/) + const UCHAR /*blrOp*/) { return FB_NEW(pool) CurrentDateNode(pool); } @@ -3293,7 +3293,7 @@ static RegisterNode<CurrentTimeNode> regCurrentTimeNode(blr_current_time); static RegisterNode<CurrentTimeNode> regCurrentTimeNode2(blr_current_time2); -DmlNode* CurrentTimeNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* CurrentTimeNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { unsigned precision = DEFAULT_TIME_PRECISION; @@ -3403,7 +3403,7 @@ static RegisterNode<CurrentTimeStampNode> regCurrentTimeStampNode2(blr_current_timestamp2); DmlNode* CurrentTimeStampNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, - UCHAR blrOp) + const UCHAR blrOp) { unsigned precision = DEFAULT_TIMESTAMP_PRECISION; @@ -3512,7 +3512,7 @@ static RegisterNode<CurrentRoleNode> regCurrentRoleNode(blr_current_role); DmlNode* CurrentRoleNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* /*csb*/, - UCHAR /*blrOp*/) + const UCHAR /*blrOp*/) { return FB_NEW(pool) CurrentRoleNode(pool); } @@ -3607,7 +3607,7 @@ static RegisterNode<CurrentUserNode> regCurrentUserNode(blr_user_name); DmlNode* CurrentUserNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* /*csb*/, - UCHAR /*blrOp*/) + const UCHAR /*blrOp*/) { return FB_NEW(pool) CurrentUserNode(pool); } @@ -3700,7 +3700,7 @@ static RegisterNode<DecodeNode> regDecodeNode(blr_decode); -DmlNode* DecodeNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* DecodeNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { DecodeNode* node = FB_NEW(pool) DecodeNode(pool); node->test = PAR_parse_value(tdbb, csb); @@ -3893,7 +3893,7 @@ static RegisterNode<DerivedExprNode> regDerivedExprNode(blr_derived_expr); -DmlNode* DerivedExprNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* DerivedExprNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { DerivedExprNode* node = FB_NEW(pool) DerivedExprNode(pool); @@ -4140,7 +4140,7 @@ addChildNode(arg, arg); } -DmlNode* ExtractNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* ExtractNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { UCHAR blrSubOp = csb->csb_blr_reader.getByte(); @@ -4511,7 +4511,7 @@ } // Parse a field. -DmlNode* FieldNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* FieldNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { const USHORT context = csb->csb_blr_reader.getByte(); @@ -5608,26 +5608,31 @@ static RegisterNode<GenIdNode> regGenIdNode(blr_gen_id); +static RegisterNode<GenIdNode> regGenIdNode2(blr_gen_id2); GenIdNode::GenIdNode(MemoryPool& pool, bool aDialect1, const Firebird::MetaName& name, - ValueExprNode* aArg) + ValueExprNode* aArg, bool aImplicit) : TypedNode<ValueExprNode, ExprNode::TYPE_GEN_ID>(pool), dialect1(aDialect1), generator(pool, name), arg(aArg), - sysGen(false) + step(0), + sysGen(false), + implicit(aImplicit) { addChildNode(arg, arg); } -DmlNode* GenIdNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* GenIdNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { MetaName name; PAR_name(csb, name); + ValueExprNode* explicitStep = (blrOp == blr_gen_id2) ? NULL : PAR_parse_value(tdbb, csb); GenIdNode* const node = - FB_NEW(pool) GenIdNode(pool, (csb->blrVersion == 4), name, PAR_parse_value(tdbb, csb)); + FB_NEW(pool) GenIdNode(pool, (csb->blrVersion == 4), name, explicitStep, + (blrOp == blr_gen_id2)); // This check seems faster than ==, but assumes the special generator is named "" if (name.length() == 0) //(name == MASTER_GENERATOR) @@ -5638,7 +5643,7 @@ node->generator.id = 0; } - else if (!MET_load_generator(tdbb, node->generator, &node->sysGen)) + else if (!MET_load_generator(tdbb, node->generator, &node->sysGen, &node->step)) PAR_error(csb, Arg::Gds(isc_gennotdef) << Arg::Str(name)); if (csb->csb_g_flags & csb_get_dependencies) @@ -5660,15 +5665,16 @@ ValueExprNode* GenIdNode::dsqlPass(DsqlCompilerScratch* dsqlScratch) { GenIdNode* const node = FB_NEW(getPool()) - GenIdNode(getPool(), dialect1, generator.name, doDsqlPass(dsqlScratch, arg)); + GenIdNode(getPool(), dialect1, generator.name, doDsqlPass(dsqlScratch, arg), implicit); node->generator = generator; + node->step = step; node->sysGen = sysGen; return node; } void GenIdNode::setParameterName(dsql_par* parameter) const { - parameter->par_name = parameter->par_alias = "GEN_ID"; + parameter->par_name = parameter->par_alias = (implicit ? "GEN_ID2" : "GEN_ID"); } bool GenIdNode::setParameterType(DsqlCompilerScratch* dsqlScratch, @@ -5679,22 +5685,33 @@ void GenIdNode::genBlr(DsqlCompilerScratch* dsqlScratch) { - dsqlScratch->appendUChar(blr_gen_id); - dsqlScratch->appendNullString(generator.name.c_str()); - GEN_expr(dsqlScratch, arg); + if (implicit) + { + dsqlScratch->appendUChar(blr_gen_id2); + dsqlScratch->appendNullString(generator.name.c_str()); + } + else + { + dsqlScratch->appendUChar(blr_gen_id); + dsqlScratch->appendNullString(generator.name.c_str()); + GEN_expr(dsqlScratch, arg); + } } void GenIdNode::make(DsqlCompilerScratch* dsqlScratch, dsc* desc) { - dsc desc1; - MAKE_desc(dsqlScratch, &desc1, arg); + if (!implicit) + { + dsc desc1; + MAKE_desc(dsqlScratch, &desc1, arg); + } if (dialect1) desc->makeLong(0); else desc->makeInt64(0); - desc->setNullable(true); + desc->setNullable(!implicit); // blr_gen_id2 cannot return NULL } void GenIdNode::getDesc(thread_db* /*tdbb*/, CompilerScratch* /*csb*/, dsc* desc) @@ -5708,8 +5725,9 @@ ValueExprNode* GenIdNode::copy(thread_db* tdbb, NodeCopier& copier) const { GenIdNode* const node = FB_NEW(*tdbb->getDefaultPool()) GenIdNode( - *tdbb->getDefaultPool(), dialect1, generator.name, copier.copy(tdbb, arg)); + *tdbb->getDefaultPool(), dialect1, generator.name, copier.copy(tdbb, arg), implicit); node->generator = generator; + node->step = step; node->sysGen = sysGen; return node; } @@ -5722,7 +5740,10 @@ const GenIdNode* o = other->as<GenIdNode>(); fb_assert(o); - return dialect1 == o->dialect1 && generator.name == o->generator.name; + // I'm not sure if I should include "implicit" in the comparison, but it means different BLR code + // and nullable v/s not nullable. + return dialect1 == o->dialect1 && generator.name == o->generator.name && + implicit == o->implicit; } bool GenIdNode::sameAs(const ExprNode* other, bool ignoreStreams) const @@ -5733,7 +5754,10 @@ const GenIdNode* const otherNode = other->as<GenIdNode>(); fb_assert(otherNode); - return dialect1 == otherNode->dialect1 && generator.id == otherNode->generator.id; + // I'm not sure if I should include "implicit" in the comparison, but it means different BLR code + // and nullable v/s not nullable. + return dialect1 == otherNode->dialect1 && generator.id == otherNode->generator.id && + implicit == otherNode->implicit; } ValueExprNode* GenIdNode::pass1(thread_db* tdbb, CompilerScratch* csb) @@ -5762,13 +5786,17 @@ request->req_flags &= ~req_null; impure_value* const impure = request->getImpure<impure_value>(impureOffset); - const dsc* const value = EVL_expr(tdbb, request, arg); + SINT64 change = step; + if (!implicit) + { + const dsc* const value = EVL_expr(tdbb, request, arg); - if (request->req_flags & req_null) - return NULL; + if (request->req_flags & req_null) + return NULL; - const SINT64 change = MOV_get_int64(value, 0); - if (sysGen && change != 0) + change = MOV_get_int64(value, 0); + } + if (sysGen && change != 0 && generator.id != 9) { if (!request->hasInternalStatement() && !tdbb->getAttachment()->isRWGbak()) { @@ -5812,7 +5840,7 @@ addChildNode(arg, arg); } -DmlNode* InternalInfoNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* InternalInfoNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { InternalInfoNode* node = FB_NEW(pool) InternalInfoNode(pool); @@ -5984,7 +6012,7 @@ } // Parse a literal value. -DmlNode* LiteralNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* LiteralNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { LiteralNode* node = FB_NEW(pool) LiteralNode(pool); @@ -6807,7 +6835,7 @@ addChildNode(arg, arg); } -DmlNode* NegateNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* NegateNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { NegateNode* node = FB_NEW(pool) NegateNode(pool); node->arg = PAR_parse_value(tdbb, csb); @@ -7001,7 +7029,7 @@ static RegisterNode<NullNode> regNullNode(blr_null); DmlNode* NullNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* /*csb*/, - UCHAR /*blrOp*/) + const UCHAR /*blrOp*/) { return FB_NEW(pool) NullNode(pool); } @@ -7339,7 +7367,7 @@ addChildNode(argIndicator); } -DmlNode* ParameterNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* ParameterNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { MessageNode* message = NULL; USHORT n = csb->csb_blr_reader.getByte(); @@ -7672,7 +7700,7 @@ addDsqlChildNode(dsqlRelation); } -DmlNode* RecordKeyNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* RecordKeyNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { RecordKeyNode* node = FB_NEW(pool) RecordKeyNode(pool, blrOp); @@ -8230,7 +8258,7 @@ static RegisterNode<ScalarNode> regScalarNode1(blr_index); -DmlNode* ScalarNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* ScalarNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { ScalarNode* node = FB_NEW(pool) ScalarNode(pool); node->field = PAR_parse_value(tdbb, csb); @@ -8319,7 +8347,7 @@ static RegisterNode<StmtExprNode> regStmtExprNode(blr_stmt_expr); -DmlNode* StmtExprNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* StmtExprNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { StmtExprNode* node = FB_NEW(pool) StmtExprNode(pool); @@ -8388,7 +8416,7 @@ addChildNode(arg, arg); } -DmlNode* StrCaseNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* StrCaseNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { StrCaseNode* node = FB_NEW(pool) StrCaseNode(pool, blrOp); node->arg = PAR_parse_value(tdbb, csb); @@ -8579,7 +8607,7 @@ addChildNode(arg, arg); } -DmlNode* StrLenNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* StrLenNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { UCHAR blrSubOp = csb->csb_blr_reader.getByte(); @@ -8831,7 +8859,7 @@ addChildNode(value2, value2); } -DmlNode* SubQueryNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* SubQueryNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { // We treat blr_from as blr_via after parse. SubQueryNode* node = FB_NEW(pool) SubQueryNode(pool, (blrOp == blr_from ? blr_via : blrOp)); @@ -9296,7 +9324,7 @@ } DmlNode* SubstringNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, - UCHAR /*blrOp*/) + const UCHAR /*blrOp*/) { SubstringNode* node = FB_NEW(pool) SubstringNode(pool); node->expr = PAR_parse_value(tdbb, csb); @@ -9635,7 +9663,7 @@ } DmlNode* SubstringSimilarNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, - UCHAR /*blrOp*/) + const UCHAR /*blrOp*/) { SubstringSimilarNode* node = FB_NEW(pool) SubstringSimilarNode(pool); node->expr = PAR_parse_value(tdbb, csb); @@ -9867,7 +9895,7 @@ } DmlNode* SysFuncCallNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, - UCHAR /*blrOp*/) + const UCHAR /*blrOp*/) { MetaName name; const USHORT count = PAR_name(csb, name); @@ -10059,7 +10087,7 @@ addChildNode(trimChars, trimChars); } -DmlNode* TrimNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* TrimNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { UCHAR where = csb->csb_blr_reader.getByte(); UCHAR what = csb->csb_blr_reader.getByte(); @@ -10397,7 +10425,7 @@ } DmlNode* UdfCallNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, - UCHAR blrOp) + const UCHAR blrOp) { const UCHAR* savePos = csb->csb_blr_reader.getPos(); @@ -10885,7 +10913,7 @@ addChildNode(falseValue, falseValue); } -DmlNode* ValueIfNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* ValueIfNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { ValueIfNode* node = FB_NEW(pool) ValueIfNode(pool); node->condition = PAR_parse_boolean(tdbb, csb); @@ -11099,7 +11127,7 @@ { } -DmlNode* VariableNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* VariableNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { const USHORT n = csb->csb_blr_reader.getWord(); vec<DeclareVariableNode*>* vector = csb->csb_variables; Modified: firebird/trunk/src/dsql/ExprNodes.h =================================================================== --- firebird/trunk/src/dsql/ExprNodes.h 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/dsql/ExprNodes.h 2014-04-09 02:28:38 UTC (rev 59401) @@ -44,7 +44,7 @@ ArithmeticNode(MemoryPool& pool, UCHAR aBlrOp, bool aDialect1, ValueExprNode* aArg1 = NULL, ValueExprNode* aArg2 = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -62,8 +62,8 @@ virtual dsc* execute(thread_db* tdbb, jrd_req* request) const; // add and add2 are used in somewhat obscure way in aggregation. - static dsc* add(const dsc* desc, impure_value* value, const ValueExprNode* node, UCHAR blrOp); - static dsc* add2(const dsc* desc, impure_value* value, const ValueExprNode* node, UCHAR blrOp); + static dsc* add(const dsc* desc, impure_value* value, const ValueExprNode* node, const UCHAR blrOp); + static dsc* add2(const dsc* desc, impure_value* value, const ValueExprNode* node, const UCHAR blrOp); private: dsc* multiply(const dsc* desc, impure_value* value) const; @@ -82,7 +82,7 @@ void getDescDialect3(thread_db* tdbb, dsc* desc, dsc& desc1, dsc& desc2); public: - UCHAR blrOp; + const UCHAR blrOp; bool dialect1; Firebird::string label; NestConst<ValueExprNode> arg1; @@ -142,7 +142,7 @@ public: explicit BoolAsValueNode(MemoryPool& pool, BoolExprNode* aBoolean = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -169,7 +169,7 @@ public: explicit CastNode(MemoryPool& pool, ValueExprNode* aSource = NULL, dsql_fld* aDsqlField = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -206,7 +206,7 @@ addChildNode(args, args); } - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -285,7 +285,7 @@ public: explicit ConcatenateNode(MemoryPool& pool, ValueExprNode* aArg1 = NULL, ValueExprNode* aArg2 = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -314,7 +314,7 @@ { } - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual void setParameterName(dsql_par* parameter) const; @@ -337,7 +337,7 @@ { } - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -364,7 +364,7 @@ { } - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -390,7 +390,7 @@ { } - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -413,7 +413,7 @@ { } - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -446,7 +446,7 @@ label = "DECODE"; } - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -480,7 +480,7 @@ addChildNode(arg); } - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); // This is a non-DSQL node. @@ -556,7 +556,7 @@ public: ExtractNode(MemoryPool& pool, UCHAR aBlrSubOp, ValueExprNode* aArg = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -585,7 +585,7 @@ FieldNode(MemoryPool& pool, dsql_ctx* context = NULL, dsql_fld* field = NULL, ValueListNode* indices = NULL); FieldNode(MemoryPool& pool, StreamType stream, USHORT id, bool aById); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -655,9 +655,9 @@ public: GenIdNode(MemoryPool& pool, bool aDialect1, const Firebird::MetaName& name, - ValueExprNode* aArg = NULL); + ValueExprNode* aArg, bool aImplicit); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -676,11 +676,13 @@ virtual dsc* execute(thread_db* tdbb, jrd_req* request) const; public: - bool dialect1; + const bool dialect1; GeneratorItem generator; NestConst<ValueExprNode> arg; private: + SLONG step; bool sysGen; + const bool implicit; }; @@ -697,7 +699,7 @@ explicit InternalInfoNode(MemoryPool& pool, ValueExprNode* aArg = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -720,7 +722,7 @@ public: explicit LiteralNode(MemoryPool& pool); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); static void genConstant(DsqlCompilerScratch* dsqlScratch, const dsc* desc, bool negateValue); virtual void print(Firebird::string& text) const; @@ -886,7 +888,7 @@ public: explicit NegateNode(MemoryPool& pool, ValueExprNode* aArg = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -914,7 +916,7 @@ { } - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual void setParameterName(dsql_par* parameter) const; @@ -1025,7 +1027,7 @@ public: explicit ParameterNode(MemoryPool& pool); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -1061,7 +1063,7 @@ public: RecordKeyNode(MemoryPool& pool, UCHAR aBlrOp, const Firebird::MetaName& aDsqlQualifier = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -1118,7 +1120,7 @@ void raiseError(dsql_ctx* context) const; public: - UCHAR blrOp; + const UCHAR blrOp; Firebird::MetaName dsqlQualifier; NestConst<RecordSourceNode> dsqlRelation; StreamType recStream; @@ -1138,7 +1140,7 @@ addChildNode(subscripts); } - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); // This is a non-DSQL node. @@ -1185,7 +1187,7 @@ addChildNode(expr); } - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); // This is a non-DSQL node. @@ -1226,7 +1228,7 @@ public: StrCaseNode(MemoryPool& pool, UCHAR aBlrOp, ValueExprNode* aArg = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -1244,7 +1246,7 @@ virtual dsc* execute(thread_db* tdbb, jrd_req* request) const; public: - UCHAR blrOp; + const UCHAR blrOp; NestConst<ValueExprNode> arg; }; @@ -1254,7 +1256,7 @@ public: StrLenNode(MemoryPool& pool, UCHAR aBlrSubOp, ValueExprNode* aArg = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -1284,7 +1286,7 @@ explicit SubQueryNode(MemoryPool& pool, UCHAR aBlrOp, RecordSourceNode* aDsqlRse = NULL, ValueExprNode* aValue1 = NULL, ValueExprNode* aValue2 = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -1324,7 +1326,7 @@ virtual dsc* execute(thread_db* tdbb, jrd_req* request) const; public: - UCHAR blrOp; + const UCHAR blrOp; bool ownSavepoint; NestConst<RecordSourceNode> dsqlRse; NestConst<RseNode> rse; @@ -1340,7 +1342,7 @@ explicit SubstringNode(MemoryPool& pool, ValueExprNode* aExpr = NULL, ValueExprNode* aStart = NULL, ValueExprNode* aLength = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -1371,7 +1373,7 @@ explicit SubstringSimilarNode(MemoryPool& pool, ValueExprNode* aExpr = NULL, ValueExprNode* aPattern = NULL, ValueExprNode* aEscape = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -1400,7 +1402,7 @@ explicit SysFuncCallNode(MemoryPool& pool, const Firebird::MetaName& aName, ValueListNode* aArgs = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -1429,7 +1431,7 @@ explicit TrimNode(MemoryPool& pool, UCHAR aWhere, ValueExprNode* aValue = NULL, ValueExprNode* aTrimChars = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -1459,7 +1461,7 @@ explicit UdfCallNode(MemoryPool& pool, const Firebird::QualifiedName& aName, ValueListNode* aArgs = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -1491,7 +1493,7 @@ explicit ValueIfNode(MemoryPool& pool, BoolExprNode* aCondition = NULL, ValueExprNode* aTrueValue = NULL, ValueExprNode* aFalseValue = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); @@ -1523,7 +1525,7 @@ public: explicit VariableNode(MemoryPool& pool); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); virtual void print(Firebird::string& text) const; virtual ValueExprNode* dsqlPass(DsqlCompilerScratch* dsqlScratch); Modified: firebird/trunk/src/dsql/Nodes.h =================================================================== --- firebird/trunk/src/dsql/Nodes.h 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/dsql/Nodes.h 2014-04-09 02:28:38 UTC (rev 59401) @@ -948,7 +948,7 @@ explicit WinFuncNode(MemoryPool& pool, const AggInfo& aAggInfo, ValueExprNode* aArg = NULL); - static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp); + static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); protected: virtual void parseArgs(thread_db* /*tdbb*/, CompilerScratch* /*csb*/, unsigned count) Modified: firebird/trunk/src/dsql/StmtNodes.cpp =================================================================== --- firebird/trunk/src/dsql/StmtNodes.cpp 2014-04-09 00:52:26 UTC (rev 59400) +++ firebird/trunk/src/dsql/StmtNodes.cpp 2014-04-09 02:28:38 UTC (rev 59401) @@ -262,7 +262,7 @@ static RegisterNode<AssignmentNode> regAssignmentNode(blr_assignment); -DmlNode* AssignmentNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* AssignmentNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { AssignmentNode* node = FB_NEW(pool) AssignmentNode(pool); node->asgnFrom = PAR_parse_value(tdbb, csb); @@ -394,7 +394,7 @@ static RegisterNode<BlockNode> regBlockNode(blr_block); -DmlNode* BlockNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* BlockNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { BlockNode* node = FB_NEW(pool) BlockNode(pool); node->action = PAR_parse_stmt(tdbb, csb); @@ -712,7 +712,7 @@ static RegisterNode<CompoundStmtNode> regCompoundStmtNode(blr_begin); -DmlNode* CompoundStmtNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* CompoundStmtNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { CompoundStmtNode* node = FB_NEW(pool) CompoundStmtNode(pool); @@ -852,7 +852,7 @@ static RegisterNode<ContinueLeaveNode> regContinueLeaveNodeContinue(blr_continue_loop); static RegisterNode<ContinueLeaveNode> regContinueLeaveNodeLeave(blr_leave); -DmlNode* ContinueLeaveNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* ContinueLeaveNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { ContinueLeaveNode* node = FB_NEW(pool) ContinueLeaveNode(pool, blrOp); node->labelNumber = csb->csb_blr_reader.getByte(); @@ -904,7 +904,7 @@ static RegisterNode<CursorStmtNode> regCursorStmtNode(blr_cursor_stmt); -DmlNode* CursorStmtNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* CursorStmtNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { CursorStmtNode* node = FB_NEW(pool) CursorStmtNode(pool, csb->csb_blr_reader.getByte()); node->cursorNumber = csb->csb_blr_reader.getWord(); @@ -1156,7 +1156,7 @@ static RegisterNode<DeclareCursorNode> regDeclareCursorNode(blr_dcl_cursor); -DmlNode* DeclareCursorNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* DeclareCursorNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { DeclareCursorNode* node = FB_NEW(pool) DeclareCursorNode(pool); @@ -1270,7 +1270,7 @@ static RegisterNode<DeclareSubFuncNode> regDeclareSubFuncNode(blr_subfunc_decl); DmlNode* DeclareSubFuncNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, - UCHAR /*blrOp*/) + const UCHAR /*blrOp*/) { MetaName name; PAR_name(csb, name); @@ -1532,7 +1532,7 @@ static RegisterNode<DeclareSubProcNode> regDeclareSubProcNode(blr_subproc_decl); -DmlNode* DeclareSubProcNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* DeclareSubProcNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { MetaName name; PAR_name(csb, name); @@ -1804,7 +1804,7 @@ static RegisterNode<DeclareVariableNode> regDeclareVariableNode(blr_dcl_variable); -DmlNode* DeclareVariableNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* DeclareVariableNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { DeclareVariableNode* node = FB_NEW(pool) DeclareVariableNode(pool); @@ -1908,7 +1908,7 @@ static RegisterNode<EraseNode> regEraseNode(blr_erase); -DmlNode* EraseNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* EraseNode::parse(thread_db* /*tdbb*/, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { const USHORT n = csb->csb_blr_reader.getByte(); @@ -2318,7 +2318,7 @@ static RegisterNode<ErrorHandlerNode> regErrorHandlerNode(blr_error_handler); -DmlNode* ErrorHandlerNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* ErrorHandlerNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { ErrorHandlerNode* node = FB_NEW(pool) ErrorHandlerNode(pool); @@ -2466,7 +2466,7 @@ static RegisterNode<ExecProcedureNode> regExecProcedureNodeSubProc(blr_exec_subproc); // Parse an execute procedure reference. -DmlNode* ExecProcedureNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* ExecProcedureNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { SET_TDBB(tdbb); @@ -2853,7 +2853,7 @@ static RegisterNode<ExecStatementNode> regExecStatementInto(blr_exec_into); static RegisterNode<ExecStatementNode> regExecStatementStmt(blr_exec_stmt); -DmlNode* ExecStatementNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR blrOp) +DmlNode* ExecStatementNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp) { ExecStatementNode* node = FB_NEW(pool) ExecStatementNode(pool); node->traScope = EDS::traCommon; @@ -3304,7 +3304,7 @@ static RegisterNode<IfNode> regIfNode(blr_if); -DmlNode* IfNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, UCHAR /*blrOp*/) +DmlNode* IfNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR /*blrOp*/) { IfNode* node = FB_NEW(pool) IfNode(pool); @@ -3391,7 +3391,7 @@ static RegisterNode<InAutonomousTransactionNode> regInAutonomousTransactionNode(blr_auto_trans); DmlNode* InAutonomousTransactionNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, - UCHAR /*blrOp*/) + const UCHAR /*blrOp*/) { InAutonomousTransactionNode* node = FB_NEW(pool) InAutonomousTransactionNode(pool); @@ -3602,7 +... [truncated message content] |
From: <ro...@us...> - 2014-04-09 07:17:38
|
Revision: 59404 http://sourceforge.net/p/firebird/code/59404 Author: robocop Date: 2014-04-09 07:17:34 +0000 (Wed, 09 Apr 2014) Log Message: ----------- Fixing several issues with my previous commit: Use increment [by], no step. Enable again code in ini.epp because it's needed when restoring (but not when creating gens directly in a new db). Gbak has code to fix system generators and we should allow it. Nbackup cannot update the history generator when doing a backup. Field name renamed to rdb$generator_increment. Modified Paths: -------------- firebird/trunk/lang_helpers/gds_codes.ftn firebird/trunk/lang_helpers/gds_codes.pas firebird/trunk/src/burp/backup.epp firebird/trunk/src/burp/restore.epp firebird/trunk/src/dsql/DdlNodes.epp firebird/trunk/src/dsql/ExprNodes.cpp 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/ids.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/isql/extract.epp firebird/trunk/src/isql/show.epp firebird/trunk/src/jrd/drq.h firebird/trunk/src/jrd/fields.h firebird/trunk/src/jrd/ini.epp firebird/trunk/src/jrd/met.epp firebird/trunk/src/jrd/met_proto.h firebird/trunk/src/jrd/names.h firebird/trunk/src/jrd/relations.h firebird/trunk/src/jrd/vio.cpp firebird/trunk/src/msgs/messages2.sql firebird/trunk/src/msgs/system_errors2.sql firebird/trunk/src/utilities/nbackup/nbackup.cpp firebird/trunk/src/yvalve/keywords.cpp Modified: firebird/trunk/lang_helpers/gds_codes.ftn =================================================================== --- firebird/trunk/lang_helpers/gds_codes.ftn 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2014-04-09 07:17:34 UTC (rev 59404) @@ -1848,8 +1848,8 @@ PARAMETER (GDS__dyn_duplicate_package_item = 336068894) INTEGER*4 GDS__dyn_cant_modify_sysobj PARAMETER (GDS__dyn_cant_modify_sysobj = 336068895) - INTEGER*4 GDS__dyn_cant_use_zero_step - PARAMETER (GDS__dyn_cant_use_zero_step = 336068896) + INTEGER*4 GDS__dyn_cant_use_zero_increment + PARAMETER (GDS__dyn_cant_use_zero_increment = 336068896) 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 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/lang_helpers/gds_codes.pas 2014-04-09 07:17:34 UTC (rev 59404) @@ -931,7 +931,7 @@ gds_dyn_alter_user_no_clause = 336068891; gds_dyn_duplicate_package_item = 336068894; gds_dyn_cant_modify_sysobj = 336068895; - gds_dyn_cant_use_zero_step = 336068896; + gds_dyn_cant_use_zero_increment = 336068896; gds_gbak_unknown_switch = 336330753; gds_gbak_page_size_missing = 336330754; gds_gbak_page_size_toobig = 336330755; Modified: firebird/trunk/src/burp/backup.epp =================================================================== --- firebird/trunk/src/burp/backup.epp 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/burp/backup.epp 2014-04-09 07:17:34 UTC (rev 59404) @@ -3171,7 +3171,7 @@ if (!X.RDB$INITIAL_VALUE.NULL) put_int64(att_gen_init_val, X.RDB$INITIAL_VALUE); - put_int32(att_gen_id_step, X.RDB$GENERATOR_STEP); + put_int32(att_gen_id_step, X.RDB$GENERATOR_INCREMENT); put(tdgbl, att_end); MISC_terminate (X.RDB$GENERATOR_NAME, temp, l, sizeof(temp)); Modified: firebird/trunk/src/burp/restore.epp =================================================================== --- firebird/trunk/src/burp/restore.epp 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/burp/restore.epp 2014-04-09 07:17:34 UTC (rev 59404) @@ -10337,7 +10337,7 @@ } X.RDB$INITIAL_VALUE.NULL = FALSE; X.RDB$INITIAL_VALUE = initial_value; - X.RDB$GENERATOR_STEP = step; + X.RDB$GENERATOR_INCREMENT = step; END_STORE; ON_ERROR general_on_error (); Modified: firebird/trunk/src/dsql/DdlNodes.epp =================================================================== --- firebird/trunk/src/dsql/DdlNodes.epp 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/dsql/DdlNodes.epp 2014-04-09 07:17:34 UTC (rev 59404) @@ -4911,7 +4911,7 @@ { initialStep = step.value; if (initialStep == 0) - status_exception::raise(Arg::Gds(isc_dyn_cant_use_zero_step) << Arg::Str(name)); + status_exception::raise(Arg::Gds(isc_dyn_cant_use_zero_increment) << Arg::Str(name)); } store(tdbb, transaction, name, fb_sysflag_user, val, initialStep); @@ -4936,7 +4936,7 @@ if (id < 0) return false; - if (forbidden) + if (forbidden && !tdbb->getAttachment()->isRWGbak()) status_exception::raise(Arg::Gds(isc_dyn_cant_modify_sysobj) << "generator" << Arg::Str(name)); executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_BEFORE, DDL_TRIGGER_ALTER_SEQUENCE, name); @@ -4947,11 +4947,11 @@ { const SLONG newStep = step.value; if (newStep == 0) - status_exception::raise(Arg::Gds(isc_dyn_cant_use_zero_step) << Arg::Str(name)); + status_exception::raise(Arg::Gds(isc_dyn_cant_use_zero_increment) << Arg::Str(name)); // Perhaps it's better to move this to DFW? if (newStep != oldStep) - MET_update_generator_step(tdbb, id, newStep); + MET_update_generator_increment(tdbb, id, newStep); } transaction->getGenIdCache()->put(id, val); @@ -4987,12 +4987,12 @@ { const SLONG newStep = step.value; if (newStep == 0) - status_exception::raise(Arg::Gds(isc_dyn_cant_use_zero_step) << Arg::Str(name)); + status_exception::raise(Arg::Gds(isc_dyn_cant_use_zero_increment) << Arg::Str(name)); - if (newStep != X.RDB$GENERATOR_STEP) + if (newStep != X.RDB$GENERATOR_INCREMENT) { MODIFY X - X.RDB$GENERATOR_STEP = newStep; + X.RDB$GENERATOR_INCREMENT = newStep; END_MODIFY } } @@ -5049,7 +5049,7 @@ X.RDB$INITIAL_VALUE.NULL = FALSE; X.RDB$INITIAL_VALUE = val; - X.RDB$GENERATOR_STEP = step; + X.RDB$GENERATOR_INCREMENT = step; } END_STORE Modified: firebird/trunk/src/dsql/ExprNodes.cpp =================================================================== --- firebird/trunk/src/dsql/ExprNodes.cpp 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/dsql/ExprNodes.cpp 2014-04-09 07:17:34 UTC (rev 59404) @@ -5674,7 +5674,7 @@ void GenIdNode::setParameterName(dsql_par* parameter) const { - parameter->par_name = parameter->par_alias = (implicit ? "GEN_ID2" : "GEN_ID"); + parameter->par_name = parameter->par_alias = (implicit ? "NEXT_VALUE" : "GEN_ID"); } bool GenIdNode::setParameterType(DsqlCompilerScratch* dsqlScratch, @@ -5796,7 +5796,7 @@ change = MOV_get_int64(value, 0); } - if (sysGen && change != 0 && generator.id != 9) + if (sysGen && change != 0) { if (!request->hasInternalStatement() && !tdbb->getAttachment()->isRWGbak()) { Modified: firebird/trunk/src/dsql/parse.y =================================================================== --- firebird/trunk/src/dsql/parse.y 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/dsql/parse.y 2014-04-09 07:17:34 UTC (rev 59404) @@ -568,7 +568,7 @@ %token <metaNamePtr> TAGS %token <metaNamePtr> PLUGIN %token <metaNamePtr> SERVERWIDE -%token <metaNamePtr> STEP +%token <metaNamePtr> INCREMENT // precedence declarations for expression evaluation @@ -1496,8 +1496,12 @@ %type <nullableInt32Val> step_option step_option : /* nothing */ { $$ = Nullable<SLONG>::empty(); } - | STEP signed_long_integer { $$ = Nullable<SLONG>::val($2); } + | INCREMENT by_noise signed_long_integer { $$ = Nullable<SLONG>::val($3); } +by_noise + : // nothing + | BY + %type <createAlterSequenceNode> replace_sequence_clause replace_sequence_clause : symbol_generator_name replace_sequence_options step_option @@ -7362,7 +7366,7 @@ | TAGS | PLUGIN | SERVERWIDE - | STEP + | INCREMENT ; %% Modified: firebird/trunk/src/include/gen/codetext.h =================================================================== --- firebird/trunk/src/include/gen/codetext.h 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/include/gen/codetext.h 2014-04-09 07:17:34 UTC (rev 59404) @@ -920,7 +920,7 @@ {"dyn_alter_user_no_clause", 336068891}, {"dyn_duplicate_package_item", 336068894}, {"dyn_cant_modify_sysobj", 336068895}, - {"dyn_cant_use_zero_step", 336068896}, + {"dyn_cant_use_zero_increment", 336068896}, {"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 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/include/gen/iberror.h 2014-04-09 07:17:34 UTC (rev 59404) @@ -954,7 +954,7 @@ const ISC_STATUS isc_dyn_alter_user_no_clause = 336068891L; const ISC_STATUS isc_dyn_duplicate_package_item = 336068894L; const ISC_STATUS isc_dyn_cant_modify_sysobj = 336068895L; -const ISC_STATUS isc_dyn_cant_use_zero_step = 336068896L; +const ISC_STATUS isc_dyn_cant_use_zero_increment = 336068896L; 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; @@ -2199,7 +2199,7 @@ #define isc_dyn_alter_user_no_clause 336068891L #define isc_dyn_duplicate_package_item 336068894L #define isc_dyn_cant_modify_sysobj 336068895L -#define isc_dyn_cant_use_zero_step 336068896L +#define isc_dyn_cant_use_zero_increment 336068896L #define isc_gbak_unknown_switch 336330753L #define isc_gbak_page_size_missing 336330754L #define isc_gbak_page_size_toobig 336330755L Modified: firebird/trunk/src/include/gen/ids.h =================================================================== --- firebird/trunk/src/include/gen/ids.h 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/include/gen/ids.h 2014-04-09 07:17:34 UTC (rev 59404) @@ -315,7 +315,7 @@ const USHORT f_gen_class = 4; const USHORT f_gen_owner = 5; const USHORT f_gen_init_val = 6; - const USHORT f_gen_step = 7; + const USHORT f_gen_increment = 7; // Relation 21 (RDB$FIELD_DIMENSIONS) Modified: firebird/trunk/src/include/gen/msgs.h =================================================================== --- firebird/trunk/src/include/gen/msgs.h 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/include/gen/msgs.h 2014-04-09 07:17:34 UTC (rev 59404) @@ -923,7 +923,7 @@ {336068891, "ALTER USER requires at least one clause to be specified"}, /* dyn_alter_user_no_clause */ {336068894, "Duplicate @1 @2"}, /* dyn_duplicate_package_item */ {336068895, "System @1 @2 cannot be modified"}, /* dyn_cant_modify_sysobj */ - {336068896, "STEP 0 is an illegal option for sequence @1"}, /* dyn_cant_use_zero_step */ + {336068896, "INCREMENT BY 0 is an illegal option for sequence @1"}, /* dyn_cant_use_zero_increment */ {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 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/include/gen/sql_code.h 2014-04-09 07:17:34 UTC (rev 59404) @@ -919,7 +919,7 @@ {336068891, -901}, /* 283 dyn_alter_user_no_clause */ {336068894, -901}, /* 286 dyn_duplicate_package_item */ {336068895, -901}, /* 287 dyn_cant_modify_sysobj */ - {336068896, -901}, /* 288 dyn_cant_use_zero_step */ + {336068896, -901}, /* 288 dyn_cant_use_zero_increment */ {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 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/include/gen/sql_state.h 2014-04-09 07:17:34 UTC (rev 59404) @@ -919,7 +919,7 @@ {336068891, "42000"}, // 283 dyn_alter_user_no_clause {336068894, "42000"}, // 286 dyn_duplicate_package_item {336068895, "42000"}, // 287 dyn_cant_modify_sysobj - {336068896, "42000"}, // 288 dyn_cant_use_zero_step + {336068896, "42000"}, // 288 dyn_cant_use_zero_increment {336330753, "00000"}, // 1 gbak_unknown_switch {336330754, "00000"}, // 2 gbak_page_size_missing {336330755, "00000"}, // 3 gbak_page_size_toobig Modified: firebird/trunk/src/isql/extract.epp =================================================================== --- firebird/trunk/src/isql/extract.epp 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/isql/extract.epp 2014-04-09 07:17:34 UTC (rev 59404) @@ -2823,8 +2823,8 @@ if (!G2.RDB$INITIAL_VALUE.NULL && G2.RDB$INITIAL_VALUE != 0) isqlGlob.printf(" START WITH %" SQUADFORMAT, G2.RDB$INITIAL_VALUE); - if (G2.RDB$GENERATOR_STEP != 1) - isqlGlob.printf(" STEP %ld", G2.RDB$GENERATOR_STEP); + if (G2.RDB$GENERATOR_INCREMENT != 1) + isqlGlob.printf(" INCREMENT %ld", G2.RDB$GENERATOR_INCREMENT); END_FOR ON_ERROR Modified: firebird/trunk/src/isql/show.epp =================================================================== --- firebird/trunk/src/isql/show.epp 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/isql/show.epp 2014-04-09 07:17:34 UTC (rev 59404) @@ -4076,8 +4076,8 @@ WITH G2.RDB$GENERATOR_NAME = GEN.RDB$GENERATOR_NAME ISC_INT64 initval = !G2.RDB$INITIAL_VALUE.NULL ? G2.RDB$INITIAL_VALUE : 0; - isqlGlob.printf(", initial value: %" QUADFORMAT "d%, step: %ld", - initval, G2.RDB$GENERATOR_STEP); + isqlGlob.printf(", initial value: %" QUADFORMAT "d%, increment: %ld", + initval, G2.RDB$GENERATOR_INCREMENT); END_FOR ON_ERROR Modified: firebird/trunk/src/jrd/drq.h =================================================================== --- firebird/trunk/src/jrd/drq.h 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/jrd/drq.h 2014-04-09 07:17:34 UTC (rev 59404) @@ -231,6 +231,7 @@ drq_e_xcp_prvs, // erase exception privileges drq_e_gen_prvs, // erase generator privileges drq_e_gfld_prvs, // erase domain privileges + drq_g_nxt_nbakhist_id, // generate next history ID for nbackup drq_MAX }; Modified: firebird/trunk/src/jrd/fields.h =================================================================== --- firebird/trunk/src/jrd/fields.h 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/jrd/fields.h 2014-04-09 07:17:34 UTC (rev 59404) @@ -189,5 +189,5 @@ FIELD(fld_map_from , nam_map_from , dtype_text , 255 , dsc_text_type_metadata , NULL , true) FIELD(fld_map_to , nam_map_to , dtype_text , MAX_SQL_IDENTIFIER_LEN , dsc_text_type_metadata , NULL , true) - FIELD(fld_gen_step , nam_gen_step , dtype_long , sizeof(SLONG) , 0 , NULL , false) + FIELD(fld_gen_step , nam_gen_increment , dtype_long , sizeof(SLONG) , 0 , NULL , false) Modified: firebird/trunk/src/jrd/ini.epp =================================================================== --- firebird/trunk/src/jrd/ini.epp 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/jrd/ini.epp 2014-04-09 07:17:34 UTC (rev 59404) @@ -398,9 +398,8 @@ for (const gen* generator = generators; generator->gen_name; generator++) store_generator(tdbb, generator, handle1, ownerName); - // Redundant, VIO_store does the job. // Adjust the value of the hidden generator RDB$GENERATORS - //DPM_gen_id(tdbb, 0, true, FB_NELEM(generators) - 1); + DPM_gen_id(tdbb, 0, true, FB_NELEM(generators) - 1); // store system-defined triggers @@ -1192,7 +1191,7 @@ else X.RDB$DESCRIPTION.NULL = TRUE; - X.RDB$GENERATOR_STEP = 0; // only sys gens have zero default increment + X.RDB$GENERATOR_INCREMENT = 0; // only sys gens have zero default increment } END_STORE } Modified: firebird/trunk/src/jrd/met.epp =================================================================== --- firebird/trunk/src/jrd/met.epp 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/jrd/met.epp 2014-04-09 07:17:34 UTC (rev 59404) @@ -2306,7 +2306,7 @@ if (sysGen) *sysGen = (X.RDB$SYSTEM_FLAG == fb_sysflag_system); if (step) - *step = X.RDB$GENERATOR_STEP; + *step = X.RDB$GENERATOR_INCREMENT; return true; } @@ -2347,7 +2347,7 @@ if (sysGen) *sysGen = (X.RDB$SYSTEM_FLAG == fb_sysflag_system); if (step) - *step = X.RDB$GENERATOR_STEP; + *step = X.RDB$GENERATOR_INCREMENT; return X.RDB$GENERATOR_ID; } @@ -2391,11 +2391,11 @@ return name.length() != 0; } -void MET_update_generator_step(thread_db* tdbb, SLONG gen_id, SLONG step) +void MET_update_generator_increment(thread_db* tdbb, SLONG gen_id, SLONG step) { /************************************** * - * M E T _ u p d a t e _ g e n e r a t o r _ s t e p + * M E T _ u p d a t e _ g e n e r a t o r _ i n c r e m e n t * ************************************** * @@ -2417,7 +2417,7 @@ return; MODIFY X - X.RDB$GENERATOR_STEP = step; + X.RDB$GENERATOR_INCREMENT = step; END_MODIFY END_FOR } Modified: firebird/trunk/src/jrd/met_proto.h =================================================================== --- firebird/trunk/src/jrd/met_proto.h 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/jrd/met_proto.h 2014-04-09 07:17:34 UTC (rev 59404) @@ -104,7 +104,7 @@ bool MET_load_generator(Jrd::thread_db*, Jrd::GeneratorItem&, bool* sysGen = 0, SLONG* step = 0); SLONG MET_lookup_generator(Jrd::thread_db*, const Firebird::MetaName&, bool* sysGen = 0, SLONG* step = 0); bool MET_lookup_generator_id(Jrd::thread_db*, SLONG, Firebird::MetaName&, bool* sysGen = 0); -void MET_update_generator_step(Jrd::thread_db* tdbb, SLONG gen_id, SLONG step); +void MET_update_generator_increment(Jrd::thread_db* tdbb, SLONG gen_id, SLONG step); void MET_lookup_index(Jrd::thread_db*, Firebird::MetaName&, const Firebird::MetaName&, USHORT); SLONG MET_lookup_index_name(Jrd::thread_db*, const Firebird::MetaName&, SLONG*, Jrd::IndexStatus* status); bool MET_lookup_partner(Jrd::thread_db*, Jrd::jrd_rel*, struct Jrd::index_desc*, const TEXT*); Modified: firebird/trunk/src/jrd/names.h =================================================================== --- firebird/trunk/src/jrd/names.h 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/jrd/names.h 2014-04-09 07:17:34 UTC (rev 59404) @@ -115,7 +115,7 @@ NAME("RDB$GENERATOR_ID", nam_gen_id) NAME("RDB$GENERATOR_NAME", nam_gen_name) NAME("RDB$GENERATOR_VALUE", nam_gen_val) -NAME("RDB$GENERATOR_STEP", nam_gen_step) +NAME("RDB$GENERATOR_INCREMENT", nam_gen_increment) NAME("RDB$GENERIC_NAME", nam_gnr_name) NAME("RDB$GENERIC_TYPE", nam_gnr_type) NAME("RDB$GRANTOR", nam_grantor) Modified: firebird/trunk/src/jrd/relations.h =================================================================== --- firebird/trunk/src/jrd/relations.h 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/jrd/relations.h 2014-04-09 07:17:34 UTC (rev 59404) @@ -314,7 +314,7 @@ FIELD(f_gen_class, nam_class, fld_class, 1, ODS_12_0) FIELD(f_gen_owner, nam_owner, fld_user, 1, ODS_12_0) FIELD(f_gen_init_val, nam_init_val, fld_gen_val, 1, ODS_12_0) - FIELD(f_gen_step, nam_gen_step, fld_gen_step, 1, ODS_12_0) + FIELD(f_gen_increment, nam_gen_increment, fld_gen_step, 1, ODS_12_0) END_RELATION // Relation 21 (RDB$FIELD_DIMENSIONS) Modified: firebird/trunk/src/jrd/vio.cpp =================================================================== --- firebird/trunk/src/jrd/vio.cpp 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/jrd/vio.cpp 2014-04-09 07:17:34 UTC (rev 59404) @@ -3180,6 +3180,11 @@ DFW_post_work(transaction, dfw_grant, &desc, obj_exception); break; + case rel_backup_history: + set_metadata_id(tdbb, rpb->rpb_record, + f_backup_id, drq_g_nxt_nbakhist_id, "RDB$BACKUP_HISTORY"); + break; + default: // Shut up compiler warnings break; } Modified: firebird/trunk/src/msgs/messages2.sql =================================================================== --- firebird/trunk/src/msgs/messages2.sql 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/msgs/messages2.sql 2014-04-09 07:17:34 UTC (rev 59404) @@ -1924,7 +1924,7 @@ (NULL, 'DdlNodes.epp', 'AlterRelationNode::modifyField', NULL, 8, 285, NULL, 'Column @1 is not an identity column', NULL, NULL); ('dyn_duplicate_package_item', NULL, 'PackageNodes.epp', NULL, 8, 286, NULL, 'Duplicate @1 @2', NULL, NULL); ('dyn_cant_modify_sysobj', NULL, 'DdlNodes.epp', NULL, 8, 287, NULL, 'System @1 @2 cannot be modified', NULL, 'Ex: System generator rdb$... cannot be modified'); -('dyn_cant_use_zero_step', NULL, 'DdlNodes.epp', NULL, 8, 288, NULL, 'STEP 0 is an illegal option for sequence @1', NULL, NULL); +('dyn_cant_use_zero_increment', NULL, 'DdlNodes.epp', NULL, 8, 288, NULL, 'INCREMENT BY 0 is an illegal option for sequence @1', 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 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/msgs/system_errors2.sql 2014-04-09 07:17:34 UTC (rev 59404) @@ -908,7 +908,7 @@ (-901, '42', '000', 8, 283, 'dyn_alter_user_no_clause', NULL, NULL) (-901, '42', '000', 8, 286, 'dyn_duplicate_package_item', NULL, NULL) (-901, '42', '000', 8, 287, 'dyn_cant_modify_sysobj', NULL, NULL) -(-901, '42', '000', 8, 288, 'dyn_cant_use_zero_step', NULL, NULL) +(-901, '42', '000', 8, 288, 'dyn_cant_use_zero_increment', NULL, NULL) -- GBAK (-901, '00', '000', 12, 1, 'gbak_unknown_switch', NULL, NULL) (-901, '00', '000', 12, 2, 'gbak_page_size_missing', NULL, NULL) Modified: firebird/trunk/src/utilities/nbackup/nbackup.cpp =================================================================== --- firebird/trunk/src/utilities/nbackup/nbackup.cpp 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/utilities/nbackup/nbackup.cpp 2014-04-09 07:17:34 UTC (rev 59404) @@ -270,7 +270,7 @@ : uSvc(_uSvc), newdb(0), trans(0), database(_database), username(_username), password(_password), /*trustedUser(_trustedUser),*/ run_db_triggers(_run_db_triggers), /*trustedRole(_trustedRole), */direct_io(_direct_io), - dbase(0), backup(0), db_size_pages(0), m_silent(false), m_printed(false) + dbase(0), backup(0), db_size_pages(0), m_odsNumber(0), m_silent(false), m_printed(false) { // Recognition of local prefix allows to work with // database using TCP/IP loopback while reading file locally. @@ -305,7 +305,7 @@ void backup_database(int level, const PathName& fname); void restore_database(const BackupFiles& files); - bool printed() + bool printed() const { return m_printed; } @@ -326,6 +326,7 @@ FILE_HANDLE dbase; FILE_HANDLE backup; ULONG db_size_pages; // In pages + USHORT m_odsNumber; bool m_silent; // are we already handling an exception? bool m_printed; // pr_error() was called to print status vector @@ -338,6 +339,7 @@ void internal_lock_database(); void get_database_size(); + void get_ods(); void internal_unlock_database(); void attach_database(); void detach_database(); @@ -716,6 +718,22 @@ } } +void NBackup::get_ods() +{ + m_odsNumber = 0; + const char db_version_info[] = { isc_info_ods_version }; + char res[128]; + if (isc_database_info(status, &newdb, sizeof(db_version_info), db_version_info, sizeof(res), res)) + { + pr_error(status, "ods info"); + } + else if (res[0] == isc_info_ods_version) + { + USHORT len = isc_vax_integer (&res[1], 2); + m_odsNumber = isc_vax_integer (&res[3], len); + } +} + void NBackup::internal_unlock_database() { if (m_silent) @@ -821,10 +839,10 @@ if (isc_dsql_allocate_statement(status, &newdb, &stmt)) pr_error(status, "allocate statement"); char str[200]; - sprintf(str, "select rdb$guid, rdb$scn from rdb$backup_history " - "where rdb$backup_id = " - "(select max(rdb$backup_id) from rdb$backup_history " - "where rdb$backup_level = %d)", level - 1); + sprintf(str, "SELECT RDB$GUID, RDB$SCN FROM RDB$BACKUP_HISTORY " + "WHERE RDB$BACKUP_ID = " + "(SELECT MAX(RDB$BACKUP_ID) FROM RDB$BACKUP_HISTORY " + "WHERE RDB$BACKUP_LEVEL = %d)", level - 1); if (isc_dsql_prepare(status, &trans, &stmt, 0, str, 1, NULL)) pr_error(status, "prepare history query"); if (isc_dsql_describe(status, &stmt, 1, out_sqlda)) @@ -1098,6 +1116,7 @@ // Write about successful backup to backup history table if (isc_start_transaction(status, &trans, 1, &newdb, 0, NULL)) pr_error(status, "start transaction"); + char in_sqlda_data[XSQLDA_LENGTH(4)]; XSQLDA *in_sqlda = (XSQLDA *)in_sqlda_data; in_sqlda->version = SQLDA_VERSION1; @@ -1105,12 +1124,26 @@ isc_stmt_handle stmt = 0; if (isc_dsql_allocate_statement(status, &newdb, &stmt)) pr_error(status, "allocate statement"); - if (isc_dsql_prepare(status, &trans, &stmt, 0, - "insert into rdb$backup_history(rdb$backup_id, rdb$timestamp, " - "rdb$backup_level, rdb$guid, rdb$scn, rdb$file_name) " - "values(gen_id(rdb$backup_history, 1), 'now', ?, ?, ?, ?)", - 1, NULL)) + + const char* insHistory; + get_ods(); + if (m_odsNumber >= ODS_VERSION12) { + insHistory = + "INSERT INTO RDB$BACKUP_HISTORY(RDB$BACKUP_ID, RDB$TIMESTAMP, " + "RDB$BACKUP_LEVEL, RDB$GUID, RDB$SCN, RDB$FILE_NAME) " + "VALUES(NULL, 'NOW', ?, ?, ?, ?)"; + } + else + { + insHistory = + "INSERT INTO RDB$BACKUP_HISTORY(RDB$BACKUP_ID, RDB$TIMESTAMP, " + "RDB$BACKUP_LEVEL, RDB$GUID, RDB$SCN, RDB$FILE_NAME) " + "VALUES(GEN_ID(RDB$BACKUP_HISTORY, 1), 'NOW', ?, ?, ?, ?)"; + } + + if (isc_dsql_prepare(status, &trans, &stmt, 0, insHistory, 1, NULL)) + { pr_error(status, "prepare history insert"); } if (isc_dsql_describe_bind(status, &stmt, 1, in_sqlda)) Modified: firebird/trunk/src/yvalve/keywords.cpp =================================================================== --- firebird/trunk/src/yvalve/keywords.cpp 2014-04-09 02:35:34 UTC (rev 59403) +++ firebird/trunk/src/yvalve/keywords.cpp 2014-04-09 07:17:34 UTC (rev 59404) @@ -218,6 +218,7 @@ {IIF, "IIF", 2, true}, {KW_IN, "IN", 1, false}, {INACTIVE, "INACTIVE", 1, false}, + {INCREMENT, "INCREMENT", 2, false}, {INDEX, "INDEX", 1, false}, {INNER, "INNER", 1, false}, {INPUT_TYPE, "INPUT_TYPE", 1, false}, @@ -386,7 +387,6 @@ {STARTING, "STARTS", 1, false}, // Alias of STARTING {STATEMENT, "STATEMENT", 2, true}, {STATISTICS, "STATISTICS", 1, false}, - {STEP, "STEP", 2, false}, {SUBSTRING, "SUBSTRING", 2, true}, {SUB_TYPE, "SUB_TYPE", 1, false}, {SUM, "SUM", 1, false}, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-10 01:13:33
|
Revision: 59413 http://sourceforge.net/p/firebird/code/59413 Author: firebirds Date: 2014-04-10 01:13:30 +0000 (Thu, 10 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-09 14:51:21 UTC (rev 59412) +++ firebird/trunk/ChangeLog 2014-04-10 01:13:30 UTC (rev 59413) @@ -1,3 +1,107 @@ + 2014-04-09 13:29 alexpeshkoff + M src/jrd/Mapping.cpp +Restored original error code when database file not found + + 2014-04-09 12:32 alexpeshkoff + M src/common/classes/InternalMessageBuffer.cpp + M src/common/classes/InternalMessageBuffer.h + M src/yvalve/why.cpp +Bad name "Buffer" and misc cleanup around + + 2014-04-09 07:38 robocop + M doc/sql.extensions/README.ddl.txt +Documentation for the generator increment. + + 2014-04-09 07:17 robocop + M lang_helpers/gds_codes.ftn + M lang_helpers/gds_codes.pas + M src/burp/backup.epp + M src/burp/restore.epp + M src/dsql/DdlNodes.epp + M src/dsql/ExprNodes.cpp + M src/dsql/parse.y + M src/include/gen/codetext.h + M src/include/gen/iberror.h + M src/include/gen/ids.h + M src/include/gen/msgs.h + M src/include/gen/sql_code.h + M src/include/gen/sql_state.h + M src/isql/extract.epp + M src/isql/show.epp + M src/jrd/drq.h + M src/jrd/fields.h + M src/jrd/ini.epp + M src/jrd/met.epp + M src/jrd/met_proto.h + M src/jrd/names.h + M src/jrd/relations.h + M src/jrd/vio.cpp + M src/msgs/messages2.sql + M src/msgs/system_errors2.sql + M src/utilities/nbackup/nbackup.cpp + M src/yvalve/keywords.cpp +Fixing several issues with my previous commit: +Use increment [by], no step. +Enable again code in ini.epp because it's needed when restoring (but not when creating gens directly in a new db). +Gbak has code to fix system generators and we should allow it. +Nbackup cannot update the history generator when doing a backup. +Field name renamed to rdb$generator_increment. + + 2014-04-09 02:35 robocop + M src/dsql/StmtNodes.cpp + M src/dsql/StmtNodes.h +Misc. + + 2014-04-09 02:29 robocop + M src/yvalve/why.cpp +Misc. + + 2014-04-09 02:28 robocop + M lang_helpers/gds_codes.ftn + M lang_helpers/gds_codes.pas + M src/burp/backup.epp + M src/burp/burp.h + M src/burp/restore.epp + M src/dsql/AggNodes.cpp + M src/dsql/AggNodes.h + M src/dsql/BoolNodes.cpp + M src/dsql/BoolNodes.h + M src/dsql/DdlNodes.epp + M src/dsql/DdlNodes.h + M src/dsql/ExprNodes.cpp + M src/dsql/ExprNodes.h + M src/dsql/Nodes.h + M src/dsql/StmtNodes.cpp + M src/dsql/StmtNodes.h + M src/dsql/WinNodes.cpp + M src/dsql/parse.y + M src/include/gen/codetext.h + M src/include/gen/iberror.h + M src/include/gen/ids.h + M src/include/gen/msgs.h + M src/include/gen/sql_code.h + M src/include/gen/sql_state.h + M src/isql/extract.epp + M src/isql/show.epp + M src/jrd/RecordSourceNodes.cpp + M src/jrd/RecordSourceNodes.h + M src/jrd/blp.h + M src/jrd/blr.h + M src/jrd/fields.h + M src/jrd/ini.epp + M src/jrd/irq.h + M src/jrd/met.epp + M src/jrd/met_proto.h + M src/jrd/names.h + M src/jrd/par_proto.h + M src/jrd/relations.h + M src/msgs/facilities2.sql + M src/msgs/messages2.sql + M src/msgs/system_errors2.sql + M src/yvalve/gds.cpp + M src/yvalve/keywords.cpp +Implemented STEP for generators/sequences and took the opportunity to make the blrOp param const. Please rebuild the databases. + 2014-04-08 16:13 alexpeshkoff M src/common/classes/InternalMessageBuffer.cpp M src/common/classes/InternalMessageBuffer.h Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-09 14:51:21 UTC (rev 59412) +++ firebird/trunk/src/jrd/build_no.h 2014-04-10 01:13:30 UTC (rev 59413) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31037 + FORMAL BUILD NUMBER:31044 */ -#define PRODUCT_VER_STRING "3.0.0.31037" -#define FILE_VER_STRING "WI-T3.0.0.31037" -#define LICENSE_VER_STRING "WI-T3.0.0.31037" -#define FILE_VER_NUMBER 3, 0, 0, 31037 +#define PRODUCT_VER_STRING "3.0.0.31044" +#define FILE_VER_STRING "WI-T3.0.0.31044" +#define LICENSE_VER_STRING "WI-T3.0.0.31044" +#define FILE_VER_NUMBER 3, 0, 0, 31044 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31037" +#define FB_BUILD_NO "31044" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-09 14:51:21 UTC (rev 59412) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-10 01:13:30 UTC (rev 59413) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31037 +BuildNum=31044 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-11 00:47:05
|
Revision: 59423 http://sourceforge.net/p/firebird/code/59423 Author: firebirds Date: 2014-04-11 00:46:58 +0000 (Fri, 11 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-10 19:52:50 UTC (rev 59422) +++ firebird/trunk/ChangeLog 2014-04-11 00:46:58 UTC (rev 59423) @@ -1,3 +1,19 @@ + 2014-04-10 16:43 alexpeshkoff + M src/isql/show.epp + M src/jrd/Mapping.cpp + M src/jrd/Mapping.h + M src/jrd/jrd.cpp + M src/jrd/svc.cpp +Fixed mapping errors reported by Claudio & Treeve + + 2014-04-10 01:39 robocop + M src/jrd/vio.cpp +Experimental way of stopping gbak impersonation in sys tables. Gbak only needs to write to sys tables when it's restoring and only in the first attachment. Second and third attachment are for bringing the DB online and setting the R/O flag. Please test. + + 2014-04-10 01:36 robocop + M src/isql/show.epp +Let's see if this time I got the formatting well done. + 2014-04-09 13:29 alexpeshkoff M src/jrd/Mapping.cpp Restored original error code when database file not found Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-10 19:52:50 UTC (rev 59422) +++ firebird/trunk/src/jrd/build_no.h 2014-04-11 00:46:58 UTC (rev 59423) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31044 + FORMAL BUILD NUMBER:31047 */ -#define PRODUCT_VER_STRING "3.0.0.31044" -#define FILE_VER_STRING "WI-T3.0.0.31044" -#define LICENSE_VER_STRING "WI-T3.0.0.31044" -#define FILE_VER_NUMBER 3, 0, 0, 31044 +#define PRODUCT_VER_STRING "3.0.0.31047" +#define FILE_VER_STRING "WI-T3.0.0.31047" +#define LICENSE_VER_STRING "WI-T3.0.0.31047" +#define FILE_VER_NUMBER 3, 0, 0, 31047 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31044" +#define FB_BUILD_NO "31047" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-10 19:52:50 UTC (rev 59422) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-11 00:46:58 UTC (rev 59423) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31044 +BuildNum=31047 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-12 00:34:51
|
Revision: 59426 http://sourceforge.net/p/firebird/code/59426 Author: firebirds Date: 2014-04-12 00:34:47 +0000 (Sat, 12 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-11 16:59:42 UTC (rev 59425) +++ firebird/trunk/ChangeLog 2014-04-12 00:34:47 UTC (rev 59426) @@ -1,3 +1,14 @@ + 2014-04-11 16:59 alexpeshkoff + M src/dsql/parse.y +Fixed alter global mapping - thanks to Adriano + + 2014-04-11 02:06 asfernandes + M src/dsql/DdlNodes.epp + M src/dsql/ExprNodes.cpp + M src/dsql/ExprNodes.h + M src/dsql/parse.y +Misc. + 2014-04-10 16:43 alexpeshkoff M src/isql/show.epp M src/jrd/Mapping.cpp Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-11 16:59:42 UTC (rev 59425) +++ firebird/trunk/src/jrd/build_no.h 2014-04-12 00:34:47 UTC (rev 59426) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31047 + FORMAL BUILD NUMBER:31049 */ -#define PRODUCT_VER_STRING "3.0.0.31047" -#define FILE_VER_STRING "WI-T3.0.0.31047" -#define LICENSE_VER_STRING "WI-T3.0.0.31047" -#define FILE_VER_NUMBER 3, 0, 0, 31047 +#define PRODUCT_VER_STRING "3.0.0.31049" +#define FILE_VER_STRING "WI-T3.0.0.31049" +#define LICENSE_VER_STRING "WI-T3.0.0.31049" +#define FILE_VER_NUMBER 3, 0, 0, 31049 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31047" +#define FB_BUILD_NO "31049" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-11 16:59:42 UTC (rev 59425) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-12 00:34:47 UTC (rev 59426) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31047 +BuildNum=31049 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-13 00:38:40
|
Revision: 59431 http://sourceforge.net/p/firebird/code/59431 Author: firebirds Date: 2014-04-13 00:38:36 +0000 (Sun, 13 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-12 16:14:24 UTC (rev 59430) +++ firebird/trunk/ChangeLog 2014-04-13 00:38:36 UTC (rev 59431) @@ -1,3 +1,19 @@ + 2014-04-12 06:35 robocop + M src/dsql/DdlNodes.h + M src/dsql/Parser.cpp + M src/dsql/Parser.h + M src/dsql/parse.y +I hope I fixed the issues noted by Adriano about my generators commit. + + 2014-04-12 06:31 robocop + M src/common/common.h +Simplify QUADCONST definition for Windows. + + 2014-04-12 06:30 robocop + M src/jrd/ini.h + M src/jrd/types.h +Use symbolic constants. + 2014-04-11 16:59 alexpeshkoff M src/dsql/parse.y Fixed alter global mapping - thanks to Adriano Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-12 16:14:24 UTC (rev 59430) +++ firebird/trunk/src/jrd/build_no.h 2014-04-13 00:38:36 UTC (rev 59431) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31049 + FORMAL BUILD NUMBER:31052 */ -#define PRODUCT_VER_STRING "3.0.0.31049" -#define FILE_VER_STRING "WI-T3.0.0.31049" -#define LICENSE_VER_STRING "WI-T3.0.0.31049" -#define FILE_VER_NUMBER 3, 0, 0, 31049 +#define PRODUCT_VER_STRING "3.0.0.31052" +#define FILE_VER_STRING "WI-T3.0.0.31052" +#define LICENSE_VER_STRING "WI-T3.0.0.31052" +#define FILE_VER_NUMBER 3, 0, 0, 31052 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31049" +#define FB_BUILD_NO "31052" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-12 16:14:24 UTC (rev 59430) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-13 00:38:36 UTC (rev 59431) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31049 +BuildNum=31052 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-14 00:37:13
|
Revision: 59439 http://sourceforge.net/p/firebird/code/59439 Author: firebirds Date: 2014-04-14 00:37:10 +0000 (Mon, 14 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-13 11:31:09 UTC (rev 59438) +++ firebird/trunk/ChangeLog 2014-04-14 00:37:10 UTC (rev 59439) @@ -1,3 +1,34 @@ + 2014-04-13 10:58 dimitr + M src/jrd/extds/InternalDS.cpp +Misc. + + 2014-04-13 08:27 dimitr + M src/jrd/recsrc/LockedStream.cpp + M src/jrd/vio.cpp +Attempted to fix CORE-4388: SELECT WITH LOCK may enter an infinite loop for a single record. To be field tested. + + 2014-04-13 01:46 asfernandes + M src/yvalve/why.cpp +Correction. + + 2014-04-13 01:42 asfernandes + M src/isql/show.epp + M src/jrd/Mapping.cpp + M src/jrd/constants.h + M src/jrd/dpm_proto.h + M src/jrd/fields.h + M src/jrd/jrd.cpp + M src/jrd/met.epp + M src/jrd/met_proto.h + M src/jrd/relations.h + M src/jrd/svc.cpp + M src/jrd/trace/TraceCmdLine.cpp + M src/utilities/gstat/dba.epp + M src/utilities/nbackup/nbackup.cpp + M src/yvalve/MasterImplementation.cpp + M src/yvalve/why.cpp +Misc. + 2014-04-12 06:35 robocop M src/dsql/DdlNodes.h M src/dsql/Parser.cpp Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-13 11:31:09 UTC (rev 59438) +++ firebird/trunk/src/jrd/build_no.h 2014-04-14 00:37:10 UTC (rev 59439) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31052 + FORMAL BUILD NUMBER:31056 */ -#define PRODUCT_VER_STRING "3.0.0.31052" -#define FILE_VER_STRING "WI-T3.0.0.31052" -#define LICENSE_VER_STRING "WI-T3.0.0.31052" -#define FILE_VER_NUMBER 3, 0, 0, 31052 +#define PRODUCT_VER_STRING "3.0.0.31056" +#define FILE_VER_STRING "WI-T3.0.0.31056" +#define LICENSE_VER_STRING "WI-T3.0.0.31056" +#define FILE_VER_NUMBER 3, 0, 0, 31056 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31052" +#define FB_BUILD_NO "31056" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-13 11:31:09 UTC (rev 59438) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-14 00:37:10 UTC (rev 59439) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31052 +BuildNum=31056 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-15 00:35:52
|
Revision: 59442 http://sourceforge.net/p/firebird/code/59442 Author: firebirds Date: 2014-04-15 00:35:50 +0000 (Tue, 15 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-14 15:46:18 UTC (rev 59441) +++ firebird/trunk/ChangeLog 2014-04-15 00:35:50 UTC (rev 59442) @@ -1,3 +1,14 @@ + 2014-04-14 15:46 asfernandes + M src/isql/show.epp +Correction. + + 2014-04-14 15:27 dimitr + M src/jrd/EngineInterface.h + M src/jrd/jrd.cpp + M src/jrd/pag.cpp +1) Prevent shutdown/cancellation for system attachments. +2) Fixed incorrect generation of attachment IDs causing a hangup during gfix -mode read_only. + 2014-04-13 10:58 dimitr M src/jrd/extds/InternalDS.cpp Misc. Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-14 15:46:18 UTC (rev 59441) +++ firebird/trunk/src/jrd/build_no.h 2014-04-15 00:35:50 UTC (rev 59442) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31056 + FORMAL BUILD NUMBER:31058 */ -#define PRODUCT_VER_STRING "3.0.0.31056" -#define FILE_VER_STRING "WI-T3.0.0.31056" -#define LICENSE_VER_STRING "WI-T3.0.0.31056" -#define FILE_VER_NUMBER 3, 0, 0, 31056 +#define PRODUCT_VER_STRING "3.0.0.31058" +#define FILE_VER_STRING "WI-T3.0.0.31058" +#define LICENSE_VER_STRING "WI-T3.0.0.31058" +#define FILE_VER_NUMBER 3, 0, 0, 31058 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31056" +#define FB_BUILD_NO "31058" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-14 15:46:18 UTC (rev 59441) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-15 00:35:50 UTC (rev 59442) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31056 +BuildNum=31058 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-16 00:44:33
|
Revision: 59444 http://sourceforge.net/p/firebird/code/59444 Author: firebirds Date: 2014-04-16 00:44:30 +0000 (Wed, 16 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-15 12:18:28 UTC (rev 59443) +++ firebird/trunk/ChangeLog 2014-04-16 00:44:30 UTC (rev 59444) @@ -1,3 +1,13 @@ + 2014-04-15 12:18 alexpeshkoff + M src/gpre/obj_cxx.cpp + M src/include/gen/msgs.h + M src/isql/isql.epp + M src/jrd/Mapping.cpp + M src/jrd/jrd.cpp + M src/jrd/svc.cpp + M src/msgs/messages2.sql +Fixed some errors in mapping code, reported by Vlad privately, when using serverwide auth plugin + 2014-04-14 15:46 asfernandes M src/isql/show.epp Correction. Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-15 12:18:28 UTC (rev 59443) +++ firebird/trunk/src/jrd/build_no.h 2014-04-16 00:44:30 UTC (rev 59444) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31058 + FORMAL BUILD NUMBER:31059 */ -#define PRODUCT_VER_STRING "3.0.0.31058" -#define FILE_VER_STRING "WI-T3.0.0.31058" -#define LICENSE_VER_STRING "WI-T3.0.0.31058" -#define FILE_VER_NUMBER 3, 0, 0, 31058 +#define PRODUCT_VER_STRING "3.0.0.31059" +#define FILE_VER_STRING "WI-T3.0.0.31059" +#define LICENSE_VER_STRING "WI-T3.0.0.31059" +#define FILE_VER_NUMBER 3, 0, 0, 31059 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31058" +#define FB_BUILD_NO "31059" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-15 12:18:28 UTC (rev 59443) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-16 00:44:30 UTC (rev 59444) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31058 +BuildNum=31059 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2014-04-18 15:33:16
|
Revision: 59452 http://sourceforge.net/p/firebird/code/59452 Author: alexpeshkoff Date: 2014-04-18 15:33:11 +0000 (Fri, 18 Apr 2014) Log Message: ----------- Enhanced diagnostics in authentication mapping Modified Paths: -------------- firebird/trunk/lang_helpers/gds_codes.ftn firebird/trunk/lang_helpers/gds_codes.pas firebird/trunk/src/auth/SecureRemotePassword/manage/SrpManagement.cpp firebird/trunk/src/common/utils.cpp firebird/trunk/src/common/utils_proto.h 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/isql/show.epp firebird/trunk/src/jrd/Mapping.cpp firebird/trunk/src/jrd/Mapping.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 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2014-04-18 15:33:11 UTC (rev 59452) @@ -1586,6 +1586,10 @@ PARAMETER (GDS__baddpb_buffers_range = 335545086) INTEGER*4 GDS__baddpb_temp_buffers PARAMETER (GDS__baddpb_temp_buffers = 335545087) + INTEGER*4 GDS__map_nodb + PARAMETER (GDS__map_nodb = 335545088) + INTEGER*4 GDS__map_notable + PARAMETER (GDS__map_notable = 335545089) INTEGER*4 GDS__gfix_db_name PARAMETER (GDS__gfix_db_name = 335740929) INTEGER*4 GDS__gfix_invalid_sw Modified: firebird/trunk/lang_helpers/gds_codes.pas =================================================================== --- firebird/trunk/lang_helpers/gds_codes.pas 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/lang_helpers/gds_codes.pas 2014-04-18 15:33:11 UTC (rev 59452) @@ -800,6 +800,8 @@ gds_baddpb_damaged_mode = 335545085; gds_baddpb_buffers_range = 335545086; gds_baddpb_temp_buffers = 335545087; + gds_map_nodb = 335545088; + gds_map_notable = 335545089; gds_gfix_db_name = 335740929; gds_gfix_invalid_sw = 335740930; gds_gfix_incmp_sw = 335740932; Modified: firebird/trunk/src/auth/SecureRemotePassword/manage/SrpManagement.cpp =================================================================== --- firebird/trunk/src/auth/SecureRemotePassword/manage/SrpManagement.cpp 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/auth/SecureRemotePassword/manage/SrpManagement.cpp 2014-04-18 15:33:11 UTC (rev 59452) @@ -233,23 +233,13 @@ Firebird::status_exception::raise(status->get()); } - const ISC_STATUS* v = status->get(); - while (v[0] == isc_arg_gds) + if (fb_utils::containsErrorCode(status->get(), isc_dsql_relation_err)) { - if (v[1] == isc_dsql_relation_err) - { - prepareDataStructures(); - tra->commit(status); - check(status); - tra = att->startTransaction(status, 0, NULL); - check(status); - break; - } - - do - { - v += 2; - } while (v[0] != isc_arg_warning && v[0] != isc_arg_gds && v[0] != isc_arg_end); + prepareDataStructures(); + tra->commit(status); + check(status); + tra = att->startTransaction(status, 0, NULL); + check(status); } } Modified: firebird/trunk/src/common/utils.cpp =================================================================== --- firebird/trunk/src/common/utils.cpp 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/common/utils.cpp 2014-04-18 15:33:11 UTC (rev 59452) @@ -1381,4 +1381,20 @@ return runOffset + sizeof(SSHORT); } +bool containsErrorCode(const ISC_STATUS* v, ISC_STATUS code) +{ + while (v[0] == isc_arg_gds) + { + if (v[1] == code) + return true; + + do + { + v += (v[0] == isc_arg_cstring ? 3 : 2); + } while (v[0] != isc_arg_warning && v[0] != isc_arg_gds && v[0] != isc_arg_end); + } + + return false; +} + } // namespace fb_utils Modified: firebird/trunk/src/common/utils_proto.h =================================================================== --- firebird/trunk/src/common/utils_proto.h 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/common/utils_proto.h 2014-04-18 15:33:11 UTC (rev 59452) @@ -167,6 +167,9 @@ // Returns next offset value unsigned sqlTypeToDsc(unsigned prevOffset, unsigned sqlType, unsigned sqlLength, unsigned* dtype, unsigned* len, unsigned* offset, unsigned* nullOffset); + + // Check does vector contain particular code or not + bool containsErrorCode(const ISC_STATUS* v, ISC_STATUS code); } // namespace fb_utils #endif // INCLUDE_UTILS_PROTO_H Modified: firebird/trunk/src/include/gen/codetext.h =================================================================== --- firebird/trunk/src/include/gen/codetext.h 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/include/gen/codetext.h 2014-04-18 15:33:11 UTC (rev 59452) @@ -789,6 +789,8 @@ {"baddpb_damaged_mode", 335545085}, {"baddpb_buffers_range", 335545086}, {"baddpb_temp_buffers", 335545087}, + {"map_nodb", 335545088}, + {"map_notable", 335545089}, {"gfix_db_name", 335740929}, {"gfix_invalid_sw", 335740930}, {"gfix_incmp_sw", 335740932}, Modified: firebird/trunk/src/include/gen/iberror.h =================================================================== --- firebird/trunk/src/include/gen/iberror.h 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/include/gen/iberror.h 2014-04-18 15:33:11 UTC (rev 59452) @@ -823,6 +823,8 @@ const ISC_STATUS isc_baddpb_damaged_mode = 335545085L; const ISC_STATUS isc_baddpb_buffers_range = 335545086L; const ISC_STATUS isc_baddpb_temp_buffers = 335545087L; +const ISC_STATUS isc_map_nodb = 335545088L; +const ISC_STATUS isc_map_notable = 335545089L; const ISC_STATUS isc_gfix_db_name = 335740929L; const ISC_STATUS isc_gfix_invalid_sw = 335740930L; const ISC_STATUS isc_gfix_incmp_sw = 335740932L; @@ -1275,7 +1277,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 = 1219; +const ISC_STATUS isc_err_max = 1221; #else /* c definitions */ @@ -2068,6 +2070,8 @@ #define isc_baddpb_damaged_mode 335545085L #define isc_baddpb_buffers_range 335545086L #define isc_baddpb_temp_buffers 335545087L +#define isc_map_nodb 335545088L +#define isc_map_notable 335545089L #define isc_gfix_db_name 335740929L #define isc_gfix_invalid_sw 335740930L #define isc_gfix_incmp_sw 335740932L @@ -2520,7 +2524,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 1219 +#define isc_err_max 1221 #endif Modified: firebird/trunk/src/include/gen/msgs.h =================================================================== --- firebird/trunk/src/include/gen/msgs.h 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/include/gen/msgs.h 2014-04-18 15:33:11 UTC (rev 59452) @@ -792,6 +792,8 @@ {335545085, "Incompatible mode of attachment to damaged database"}, /* baddpb_damaged_mode */ {335545086, "Attempt to set in database number of buffers which is out of acceptable range [@1:@2]"}, /* baddpb_buffers_range */ {335545087, "Attempt to temporarily set number of buffers less than @1"}, /* baddpb_temp_buffers */ + {335545088, "Global mapping is not available when database @1 is not present"}, /* map_nodb */ + {335545089, "Global mapping is not available when table RDB$MAP is not present in database @1"}, /* map_notable */ {335740929, "data base file name (@1) already given"}, /* gfix_db_name */ {335740930, "invalid switch @1"}, /* gfix_invalid_sw */ {335740932, "incompatible switch combination"}, /* gfix_incmp_sw */ Modified: firebird/trunk/src/include/gen/sql_code.h =================================================================== --- firebird/trunk/src/include/gen/sql_code.h 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/include/gen/sql_code.h 2014-04-18 15:33:11 UTC (rev 59452) @@ -788,6 +788,8 @@ {335545085, -924}, /* 765 baddpb_damaged_mode */ {335545086, -924}, /* 766 baddpb_buffers_range */ {335545087, -924}, /* 767 baddpb_temp_buffers */ + {335545088, -901}, /* 768 map_nodb */ + {335545089, -901}, /* 769 map_notable */ {335740929, -901}, /* 1 gfix_db_name */ {335740930, -901}, /* 2 gfix_invalid_sw */ {335740932, -901}, /* 4 gfix_incmp_sw */ Modified: firebird/trunk/src/include/gen/sql_state.h =================================================================== --- firebird/trunk/src/include/gen/sql_state.h 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/include/gen/sql_state.h 2014-04-18 15:33:11 UTC (rev 59452) @@ -788,6 +788,8 @@ {335545085, "HY000"}, // 765 baddpb_damaged_mode {335545086, "HY000"}, // 766 baddpb_buffers_range {335545087, "HY000"}, // 767 baddpb_temp_buffers + {335545088, "0A000"}, // 768 map_nodb + {335545089, "0A000"}, // 769 map_notable {335740929, "00000"}, // 1 gfix_db_name {335740930, "00000"}, // 2 gfix_invalid_sw {335740932, "00000"}, // 4 gfix_incmp_sw Modified: firebird/trunk/src/isql/show.epp =================================================================== --- firebird/trunk/src/isql/show.epp 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/isql/show.epp 2014-04-18 15:33:11 UTC (rev 59452) @@ -4441,7 +4441,8 @@ } END_FOR ON_ERROR - ISQL_errmsg(fbStatus); // report error but not return error on it + if (!extract) + ISQL_errmsg(fbStatus); // report error but not return error on it END_ERROR; return first ? OBJECT_NOT_FOUND : SKIP; Modified: firebird/trunk/src/jrd/Mapping.cpp =================================================================== --- firebird/trunk/src/jrd/Mapping.cpp 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/jrd/Mapping.cpp 2014-04-18 15:33:11 UTC (rev 59452) @@ -279,15 +279,18 @@ " RDB$MAP_FROM, RDB$MAP_TO_TYPE, RDB$MAP_TO " "FROM RDB$MAP", 3, NULL, NULL, mMap.getMetadata()); - // check("IAttachment::openCursor", &st); if (!st.isSuccess()) { - // errors when opening cursor - sooner of all table RDB$MAP is missing - // in non-FB3 security DB - tra->release(); - att->detach(&st); - dataFlag = true; - return; + if (fb_utils::containsErrorCode(st.get(), isc_dsql_relation_err)) + { + // isc_dsql_relation_err when opening cursor - sooner of all table RDB$MAP + // is missing due to non-FB3 security DB + tra->release(); + att->detach(&st); + dataFlag = true; + return; + } + check("IAttachment::openCursor", &st); } while (curs->fetchNext(&st, mMap.getBuffer())) @@ -880,8 +883,10 @@ embeddedSysdba.getBufferLength(), embeddedSysdba.getBuffer()); if (!st.isSuccess()) { + if (!fb_utils::containsErrorCode(st.get(), isc_io_error)) + check("IProvider::attachDatabase", &st); + // missing security DB is not a reason to fail mapping - // do not check error code here - it may be something else for non-native provider iSec = NULL; } } @@ -896,9 +901,10 @@ embeddedSysdba.getBufferLength(), embeddedSysdba.getBuffer()); if (!st.isSuccess()) { + if (!fb_utils::containsErrorCode(st.get(), isc_io_error)) + check("IProvider::attachDatabase", &st); + // missing DB is not a reason to fail mapping - if (st.get()[1] != isc_io_error) - check("IProvider::attachDatabase", &st); iDb = NULL; } } @@ -1006,7 +1012,6 @@ Found::What recordWeight = (db && info.secDb == db) ? Found::FND_DB : (info.secDb == securityDb) ? Found::FND_SEC : - //(info.plugin.hasData() && info.secDb.isEmpty()) ? Found::FND_SWIDE : Found::FND_NOTHING; if (recordWeight != Found::FND_NOTHING) @@ -1057,6 +1062,12 @@ : DataDump(*tra->tra_pool) { } +RecordBuffer* MappingList::makeBuffer(thread_db* tdbb) +{ + MemoryPool* const pool = tdbb->getTransaction()->tra_pool; + allocBuffer(tdbb, *pool, rel_sec_global_map); + return getData(rel_sec_global_map); +} RecordBuffer* MappingList::getList(thread_db* tdbb, jrd_rel* relation) { @@ -1081,10 +1092,21 @@ MAX_DPB_SIZE, isc_dpb_version1); embeddedSysdba.insertString(isc_dpb_user_name, SYSDBA_USER_NAME, strlen(SYSDBA_USER_NAME)); - att = prov->attachDatabase(&st, tdbb->getDatabase()->dbb_config->getSecurityDatabase(), + const char* dbName = tdbb->getDatabase()->dbb_config->getSecurityDatabase(); + att = prov->attachDatabase(&st, dbName, embeddedSysdba.getBufferLength(), embeddedSysdba.getBuffer()); - check("IProvider::attachDatabase", &st); + if (!st.isSuccess()) + { + if (!fb_utils::containsErrorCode(st.get(), isc_io_error)) + check("IProvider::attachDatabase", &st); + // In embedded mode we are not raising any errors - silent return + if (MasterInterfacePtr()->serverMode(-1) < 0) + return makeBuffer(tdbb); + + (Arg::Gds(isc_map_nodb) << dbName).raise(); + } + ClumpletWriter readOnly(ClumpletWriter::Tpb, MAX_DPB_SIZE, isc_tpb_version1); readOnly.insertTag(isc_tpb_read); readOnly.insertTag(isc_tpb_wait); @@ -1106,11 +1128,24 @@ " RDB$MAP_FROM_TYPE, RDB$MAP_FROM, RDB$MAP_TO_TYPE, RDB$MAP_TO " "FROM RDB$MAP", 3, NULL, NULL, mMap.getMetadata()); - check("IAttachment::openCursor", &st); + if (!st.isSuccess()) + { + if (!fb_utils::containsErrorCode(st.get(), isc_dsql_relation_err)) + check("IAttachment::openCursor", &st); - MemoryPool* const pool = tdbb->getTransaction()->tra_pool; - allocBuffer(tdbb, *pool, rel_sec_global_map); - buffer = getData(rel_sec_global_map); + // isc_dsql_relation_err when opening cursor - sooner of all table RDB$MAP + // is missing due to non-FB3 security DB + tra->release(); + att->detach(&st); + + // In embedded mode we are not raising any errors - silent return + if (MasterInterfacePtr()->serverMode(-1) < 0) + return makeBuffer(tdbb); + + (Arg::Gds(isc_map_notable) << dbName).raise(); + } + + buffer = makeBuffer(tdbb); Record* record = buffer->getTempRecord(); while (curs->fetchNext(&st, mMap.getBuffer())) Modified: firebird/trunk/src/jrd/Mapping.h =================================================================== --- firebird/trunk/src/jrd/Mapping.h 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/jrd/Mapping.h 2014-04-18 15:33:11 UTC (rev 59452) @@ -60,6 +60,9 @@ explicit MappingList(jrd_tra* tra); RecordBuffer* getList(thread_db* tdbb, jrd_rel* relation); + +private: + RecordBuffer* makeBuffer(thread_db* tdbb); }; } // namespace Jrd Modified: firebird/trunk/src/msgs/facilities2.sql =================================================================== --- firebird/trunk/src/msgs/facilities2.sql 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/msgs/facilities2.sql 2014-04-18 15:33:11 UTC (rev 59452) @@ -1,7 +1,7 @@ /* MAX_NUMBER is the next number to be used, always one more than the highest message number. */ set bulk_insert INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES (?, ?, ?, ?); -- -('2014-04-04 16:13:24', 'JRD', 0, 768) +('2014-04-18 19:01:37', 'JRD', 0, 770) ('2012-01-23 20:10:30', 'QLI', 1, 532) ('2013-11-13 15:59:10', 'GFIX', 3, 122) ('1996-11-07 13:39:40', 'GPRE', 4, 1) Modified: firebird/trunk/src/msgs/messages2.sql =================================================================== --- firebird/trunk/src/msgs/messages2.sql 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/msgs/messages2.sql 2014-04-18 15:33:11 UTC (rev 59452) @@ -875,6 +875,8 @@ ('baddpb_damaged_mode', 'attachDatabase', 'jrd.cpp', NULL, 0, 765, NULL, 'Incompatible mode of attachment to damaged database', NULL, NULL); ('baddpb_buffers_range', 'DatabaseOptions::get', 'jrd.cpp', NULL, 0, 766, NULL, 'Attempt to set in database number of buffers which is out of acceptable range [@1:@2]', NULL, NULL); ('baddpb_temp_buffers', 'DatabaseOptions::get', 'jrd.cpp', NULL, 0, 767, NULL, 'Attempt to temporarily set number of buffers less than @1', NULL, NULL); +('map_nodb', 'MappingList::getList', 'Mapping.cpp', NULL, 0, 768, NULL, 'Global mapping is not available when database @1 is not present', NULL, NULL); +('map_notable', 'MappingList::getList', 'Mapping.cpp', NULL, 0, 769, NULL, 'Global mapping is not available when table RDB$MAP is not present in database @1', NULL, NULL); -- QLI (NULL, NULL, NULL, NULL, 1, 0, NULL, 'expected type', NULL, NULL); (NULL, NULL, NULL, NULL, 1, 1, NULL, 'bad block type', NULL, NULL); Modified: firebird/trunk/src/msgs/system_errors2.sql =================================================================== --- firebird/trunk/src/msgs/system_errors2.sql 2014-04-18 14:43:06 UTC (rev 59451) +++ firebird/trunk/src/msgs/system_errors2.sql 2014-04-18 15:33:11 UTC (rev 59452) @@ -774,6 +774,8 @@ (-924, 'HY', '000', 0, 765, 'baddpb_damaged_mode', NULL, NULL); (-924, 'HY', '000', 0, 766, 'baddpb_buffers_range', NULL, NULL); (-924, 'HY', '000', 0, 767, 'baddpb_temp_buffers', NULL, NULL); +(-901, '0A', '000', 0, 768, 'map_nodb', NULL, NULL); +(-901, '0A', '000', 0, 769, 'map_notable', NULL, NULL); -- GFIX (-901, '00', '000', 3, 1, 'gfix_db_name', NULL, NULL) (-901, '00', '000', 3, 2, 'gfix_invalid_sw', NULL, NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-19 00:28:20
|
Revision: 59456 http://sourceforge.net/p/firebird/code/59456 Author: firebirds Date: 2014-04-19 00:28:15 +0000 (Sat, 19 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-18 15:45:58 UTC (rev 59455) +++ firebird/trunk/ChangeLog 2014-04-19 00:28:15 UTC (rev 59456) @@ -1,3 +1,63 @@ + 2014-04-18 15:45 mapopa + M src/isql/show.epp +cleanup comments + + 2014-04-18 15:41 mapopa + M src/dsql/errd.cpp +cleanup comments + + 2014-04-18 15:40 mapopa + M src/isql/isql.h +cleanup comments + + 2014-04-18 15:33 alexpeshkoff + M lang_helpers/gds_codes.ftn + M lang_helpers/gds_codes.pas + M src/auth/SecureRemotePassword/manage/SrpManagement.cpp + M src/common/utils.cpp + M src/common/utils_proto.h + M src/include/gen/codetext.h + M src/include/gen/iberror.h + M src/include/gen/msgs.h + M src/include/gen/sql_code.h + M src/include/gen/sql_state.h + M src/isql/show.epp + M src/jrd/Mapping.cpp + M src/jrd/Mapping.h + M src/msgs/facilities2.sql + M src/msgs/messages2.sql + M src/msgs/system_errors2.sql +Enhanced diagnostics in authentication mapping + + 2014-04-18 14:43 mapopa + M src/isql/isql.h +remove unused constants + + 2014-04-18 14:32 mapopa + M src/isql/isql.h +cleanup WAL was removed + + 2014-04-18 12:08 dimitr + M src/jrd/dfw.epp +CORE-4386: Report more details for "object in use" errors. More changes to follow. + + 2014-04-18 12:08 alexpeshkoff + M src/dsql/dsql.cpp + M src/dsql/dsql.h + M src/include/firebird/Provider.h + M src/jrd/EngineInterface.h + M src/jrd/jrd.cpp + M src/remote/client/interface.cpp + M src/remote/remote.h + M src/remote/server/server.cpp + M src/yvalve/YObjects.h + M src/yvalve/why.cpp +Fixed CORE-4394: Cursor not found error when using legacy API + + 2014-04-18 11:44 mapopa + M src/isql/isql_proto.h +cleanup Not found, probably in some lost GUI-related file + 2014-04-15 12:18 alexpeshkoff M src/gpre/obj_cxx.cpp M src/include/gen/msgs.h Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-18 15:45:58 UTC (rev 59455) +++ firebird/trunk/src/jrd/build_no.h 2014-04-19 00:28:15 UTC (rev 59456) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31059 + FORMAL BUILD NUMBER:31068 */ -#define PRODUCT_VER_STRING "3.0.0.31059" -#define FILE_VER_STRING "WI-T3.0.0.31059" -#define LICENSE_VER_STRING "WI-T3.0.0.31059" -#define FILE_VER_NUMBER 3, 0, 0, 31059 +#define PRODUCT_VER_STRING "3.0.0.31068" +#define FILE_VER_STRING "WI-T3.0.0.31068" +#define LICENSE_VER_STRING "WI-T3.0.0.31068" +#define FILE_VER_NUMBER 3, 0, 0, 31068 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31059" +#define FB_BUILD_NO "31068" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-18 15:45:58 UTC (rev 59455) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-19 00:28:15 UTC (rev 59456) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31059 +BuildNum=31068 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-20 00:25:59
|
Revision: 59462 http://sourceforge.net/p/firebird/code/59462 Author: firebirds Date: 2014-04-20 00:25:55 +0000 (Sun, 20 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-19 22:17:59 UTC (rev 59461) +++ firebird/trunk/ChangeLog 2014-04-20 00:25:55 UTC (rev 59462) @@ -1,3 +1,21 @@ + 2014-04-19 22:17 asfernandes + M src/common/classes/Nullable.h + M src/dsql/DdlNodes.epp + M src/dsql/DdlNodes.h + M src/dsql/parse.y +Fixed problem with ALTER SEQUENCE. + + 2014-04-19 21:36 asfernandes + M src/isql/show.epp + M src/jrd/Mapping.cpp + M src/jrd/dfw.epp + M src/jrd/jrd.cpp + M src/remote/client/interface.cpp + M src/remote/remote.h + M src/remote/server/server.cpp + M src/yvalve/why.cpp +Misc. + 2014-04-18 15:45 mapopa M src/isql/show.epp cleanup comments Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-19 22:17:59 UTC (rev 59461) +++ firebird/trunk/src/jrd/build_no.h 2014-04-20 00:25:55 UTC (rev 59462) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31068 + FORMAL BUILD NUMBER:31070 */ -#define PRODUCT_VER_STRING "3.0.0.31068" -#define FILE_VER_STRING "WI-T3.0.0.31068" -#define LICENSE_VER_STRING "WI-T3.0.0.31068" -#define FILE_VER_NUMBER 3, 0, 0, 31068 +#define PRODUCT_VER_STRING "3.0.0.31070" +#define FILE_VER_STRING "WI-T3.0.0.31070" +#define LICENSE_VER_STRING "WI-T3.0.0.31070" +#define FILE_VER_NUMBER 3, 0, 0, 31070 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31068" +#define FB_BUILD_NO "31070" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-19 22:17:59 UTC (rev 59461) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-20 00:25:55 UTC (rev 59462) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31068 +BuildNum=31070 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-21 00:28:29
|
Revision: 59465 http://sourceforge.net/p/firebird/code/59465 Author: firebirds Date: 2014-04-21 00:28:26 +0000 (Mon, 21 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-20 10:09:05 UTC (rev 59464) +++ firebird/trunk/ChangeLog 2014-04-21 00:28:26 UTC (rev 59465) @@ -1,3 +1,7 @@ + 2014-04-20 10:09 dimitr + M src/jrd/jrd.cpp +Fixed ON DISCONNECT triggers I accidentally broke more than a year ago. + 2014-04-19 22:17 asfernandes M src/common/classes/Nullable.h M src/dsql/DdlNodes.epp Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-20 10:09:05 UTC (rev 59464) +++ firebird/trunk/src/jrd/build_no.h 2014-04-21 00:28:26 UTC (rev 59465) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31070 + FORMAL BUILD NUMBER:31071 */ -#define PRODUCT_VER_STRING "3.0.0.31070" -#define FILE_VER_STRING "WI-T3.0.0.31070" -#define LICENSE_VER_STRING "WI-T3.0.0.31070" -#define FILE_VER_NUMBER 3, 0, 0, 31070 +#define PRODUCT_VER_STRING "3.0.0.31071" +#define FILE_VER_STRING "WI-T3.0.0.31071" +#define LICENSE_VER_STRING "WI-T3.0.0.31071" +#define FILE_VER_NUMBER 3, 0, 0, 31071 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31070" +#define FB_BUILD_NO "31071" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-20 10:09:05 UTC (rev 59464) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-21 00:28:26 UTC (rev 59465) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31070 +BuildNum=31071 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2014-04-22 00:45:48
|
Revision: 59469 http://sourceforge.net/p/firebird/code/59469 Author: firebirds Date: 2014-04-22 00:45:43 +0000 (Tue, 22 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-21 17:05:19 UTC (rev 59468) +++ firebird/trunk/ChangeLog 2014-04-22 00:45:43 UTC (rev 59469) @@ -1,3 +1,15 @@ + 2014-04-21 17:05 alexpeshkoff + M src/jrd/scl.epp +Postfix for CORE-3242: enable same trick for functions too + + 2014-04-21 13:34 alexpeshkoff + M src/jrd/scl.epp +Fixed CORE-3242: Recursive stored procedure shouldnt require execute right to call itself + + 2014-04-21 01:01 asfernandes + M src/yvalve/why.cpp +Fixed CORE-4396 - Incorrect result query if it is execute through "execute statement". + 2014-04-20 10:09 dimitr M src/jrd/jrd.cpp Fixed ON DISCONNECT triggers I accidentally broke more than a year ago. Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-21 17:05:19 UTC (rev 59468) +++ firebird/trunk/src/jrd/build_no.h 2014-04-22 00:45:43 UTC (rev 59469) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31071 + FORMAL BUILD NUMBER:31074 */ -#define PRODUCT_VER_STRING "3.0.0.31071" -#define FILE_VER_STRING "WI-T3.0.0.31071" -#define LICENSE_VER_STRING "WI-T3.0.0.31071" -#define FILE_VER_NUMBER 3, 0, 0, 31071 +#define PRODUCT_VER_STRING "3.0.0.31074" +#define FILE_VER_STRING "WI-T3.0.0.31074" +#define LICENSE_VER_STRING "WI-T3.0.0.31074" +#define FILE_VER_NUMBER 3, 0, 0, 31074 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31071" +#define FB_BUILD_NO "31074" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-21 17:05:19 UTC (rev 59468) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-22 00:45:43 UTC (rev 59469) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31071 +BuildNum=31074 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2014-04-22 13:37:18
|
Revision: 59470 http://sourceforge.net/p/firebird/code/59470 Author: alexpeshkoff Date: 2014-04-22 13:37:14 +0000 (Tue, 22 Apr 2014) Log Message: ----------- Fixed CORE-2119: Use entries in restrict list of ExternalFileAccess parameter to mangle filenames with relative path, also fixed assertion and diagnostics related to EXTERNAL FILE tables Modified Paths: -------------- firebird/trunk/lang_helpers/gds_codes.ftn firebird/trunk/lang_helpers/gds_codes.pas firebird/trunk/src/common/os/path_utils.h firebird/trunk/src/common/os/posix/path_utils.cpp firebird/trunk/src/common/os/win32/path_utils.cpp firebird/trunk/src/dsql/DdlNodes.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/constants.h firebird/trunk/src/jrd/ext.cpp 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 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2014-04-22 13:37:14 UTC (rev 59470) @@ -1854,6 +1854,8 @@ PARAMETER (GDS__dyn_cant_modify_sysobj = 336068895) INTEGER*4 GDS__dyn_cant_use_zero_increment PARAMETER (GDS__dyn_cant_use_zero_increment = 336068896) + INTEGER*4 GDS__dyn_cant_use_in_foreignkey + PARAMETER (GDS__dyn_cant_use_in_foreignkey = 336068897) 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 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/lang_helpers/gds_codes.pas 2014-04-22 13:37:14 UTC (rev 59470) @@ -934,6 +934,7 @@ gds_dyn_duplicate_package_item = 336068894; gds_dyn_cant_modify_sysobj = 336068895; gds_dyn_cant_use_zero_increment = 336068896; + gds_dyn_cant_use_in_foreignkey = 336068897; gds_gbak_unknown_switch = 336330753; gds_gbak_page_size_missing = 336330754; gds_gbak_page_size_toobig = 336330755; Modified: firebird/trunk/src/common/os/path_utils.h =================================================================== --- firebird/trunk/src/common/os/path_utils.h 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/common/os/path_utils.h 2014-04-22 13:37:14 UTC (rev 59470) @@ -167,6 +167,11 @@ platform. **/ static void setDirIterator(char* path); + + /** makeDir creates directory passed as parameter. + return value is 0 on success or error code on error. + **/ + static int makeDir(const Firebird::PathName& path); }; #endif // JRD_OS_PATH_UTILS_H Modified: firebird/trunk/src/common/os/posix/path_utils.cpp =================================================================== --- firebird/trunk/src/common/os/posix/path_utils.cpp 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/common/os/posix/path_utils.cpp 2014-04-22 13:37:14 UTC (rev 59470) @@ -200,3 +200,13 @@ *path = '/'; } } + +int PathUtils::makeDir(const Firebird::PathName& path) +{ + int rc = mkdir(path.c_str(), 0770) ? errno : 0; + if (rc == 0) + { + // try to set exact access we need but ignore possible errors + chmod(path.c_str(), 0770); + } +} Modified: firebird/trunk/src/common/os/win32/path_utils.cpp =================================================================== --- firebird/trunk/src/common/os/win32/path_utils.cpp 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/common/os/win32/path_utils.cpp 2014-04-22 13:37:14 UTC (rev 59470) @@ -1,7 +1,8 @@ #include "firebird.h" #include "../common/os/path_utils.h" -#include <io.h> // _access +#include <io.h> // _access +#include <direct.h> // _mkdir /// The Win32 implementation of the path_utils abstraction. @@ -195,3 +196,7 @@ } } +int PathUtils::makeDir(const Firebird::PathName& path) +{ + return _mkdir(path.c_str()) ? errno : 0; +} Modified: firebird/trunk/src/dsql/DdlNodes.epp =================================================================== --- firebird/trunk/src/dsql/DdlNodes.epp 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/dsql/DdlNodes.epp 2014-04-22 13:37:14 UTC (rev 59470) @@ -83,7 +83,11 @@ const MetaName& fieldName); static bool isItSqlRole(thread_db* tdbb, jrd_tra* transaction, const MetaName& inputName, MetaName& outputName); -static void makeRelationScopeName(const MetaName& name, const rel_t type, string& message); +static const char* getRelationScopeName(const rel_t type); +static void makeRelationScopeName(string& to, const MetaName& name, const rel_t type); +static void checkRelationType(const rel_t type, const MetaName& name); +static void checkFkPairTypes(const rel_t masterType, const MetaName& masterName, + const rel_t childType, const MetaName& childName); static void modifyLocalFieldPosition(thread_db* tdbb, jrd_tra* transaction, const MetaName& relationName, const MetaName& fieldName, USHORT newPosition, USHORT existingPosition); @@ -116,8 +120,8 @@ const MetaName& childRelName, const MetaName& masterIndexName) { AutoCacheRequest request(tdbb, drq_l_rel_info, DYN_REQUESTS); - bool error = false; - string master, child; + MetaName masterRelName; + rel_t masterType, childType; FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction) RLC_M IN RDB$RELATION_CONSTRAINTS CROSS @@ -129,32 +133,20 @@ REL_C.RDB$RELATION_NAME EQ childRelName.c_str() AND REL_M.RDB$RELATION_NAME EQ RLC_M.RDB$RELATION_NAME { - const rel_t masterType = relationType(REL_M.RDB$RELATION_TYPE.NULL, REL_M.RDB$RELATION_TYPE); - fb_assert(masterType == rel_persistent || - masterType == rel_global_temp_preserve || - masterType == rel_global_temp_delete); + fb_assert(!masterRelName.hasData()); - const rel_t childType = relationType(REL_C.RDB$RELATION_TYPE.NULL, REL_C.RDB$RELATION_TYPE); - fb_assert(childType == rel_persistent || - childType == rel_global_temp_preserve || - childType == rel_global_temp_delete); + masterRelName = REL_M.RDB$RELATION_NAME; + masterType = relationType(REL_M.RDB$RELATION_TYPE.NULL, REL_M.RDB$RELATION_TYPE); + childType = relationType(REL_C.RDB$RELATION_TYPE.NULL, REL_C.RDB$RELATION_TYPE); - error = masterType != childType && - !(masterType == rel_global_temp_preserve && childType == rel_global_temp_delete); - - if (error) - { - makeRelationScopeName(masterIndexName, masterType, master); - makeRelationScopeName(childRelName, childType, child); - break; - } } END_FOR - if (error) + if (masterRelName.hasData()) { - // Msg 232 : "%s can't reference %s" - status_exception::raise(Arg::PrivateDyn(232) << child << master); + checkRelationType(masterType, masterRelName); + checkRelationType(childType, childRelName); + checkFkPairTypes(masterType, masterRelName, childType, childRelName); } } @@ -171,8 +163,8 @@ } AutoCacheRequest request(tdbb, drq_l_rel_info2, DYN_REQUESTS); - bool error = false; - string master, child; + MetaName masterRelName; + rel_t masterType; FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction) RLC_C IN RDB$RELATION_CONSTRAINTS CROSS @@ -185,27 +177,17 @@ IND_M.RDB$INDEX_NAME EQ IND_C.RDB$FOREIGN_KEY AND IND_M.RDB$RELATION_NAME EQ REL_M.RDB$RELATION_NAME { - const rel_t masterType = relationType(REL_M.RDB$RELATION_TYPE.NULL, REL_M.RDB$RELATION_TYPE); - fb_assert(masterType == rel_persistent || - masterType == rel_global_temp_preserve || - masterType == rel_global_temp_delete); + fb_assert(!masterRelName.hasData()); - error = masterType != childType && - !(masterType == rel_global_temp_preserve && childType == rel_global_temp_delete); - - if (error) - { - makeRelationScopeName(REL_M.RDB$RELATION_NAME, masterType, master); - makeRelationScopeName(childRelName, childType, child); - break; - } + masterType = relationType(REL_M.RDB$RELATION_TYPE.NULL, REL_M.RDB$RELATION_TYPE); + masterRelName = REL_M.RDB$RELATION_NAME; } END_FOR - if (error) + if (masterRelName.hasData()) { - // Msg 232 : "%s can't reference %s" - status_exception::raise(Arg::PrivateDyn(232) << child << master); + checkRelationType(masterType, masterRelName); + checkFkPairTypes(masterType, masterRelName, childType, childRelName); } } @@ -480,20 +462,63 @@ } // Make string with relation name and type of its temporary scope. -static void makeRelationScopeName(const MetaName& name, const rel_t type, string& message) +static void makeRelationScopeName(string& to, const MetaName& name, const rel_t type) { - const char* scope = NULL; + const char* scope = getRelationScopeName(type); + to.printf(scope, name.c_str()); +} - if (type == rel_global_temp_preserve) - scope = REL_SCOPE_GTT_PRESERVE; - else if (type == rel_global_temp_delete) - scope = REL_SCOPE_GTT_DELETE; - else - scope = REL_SCOPE_PERSISTENT; +// Get relation type name +static const char* getRelationScopeName(const rel_t type) +{ + switch(type) + { + case rel_global_temp_preserve: + return REL_SCOPE_GTT_PRESERVE; + case rel_global_temp_delete: + return REL_SCOPE_GTT_DELETE; + case rel_external: + return REL_SCOPE_EXTERNAL; + case rel_view: + return REL_SCOPE_VIEW; + case rel_virtual: + return REL_SCOPE_VIRTUAL; + } - message.printf(scope, name.c_str()); + return REL_SCOPE_PERSISTENT; } +// Check does relation of given type can be used in FK +static void checkRelationType(const rel_t type, const MetaName& name) +{ + if (type == rel_persistent || + type == rel_global_temp_preserve || + type == rel_global_temp_delete) + { + return; + } + + string scope; + makeRelationScopeName(scope, name, type); + (Arg::PrivateDyn(289) << scope).raise(); +} + +// Check does pair of relations can be used in FK +static void checkFkPairTypes(const rel_t masterType, const MetaName& masterName, + const rel_t childType, const MetaName& childName) +{ + if (masterType != childType && + !(masterType == rel_global_temp_preserve && childType == rel_global_temp_delete)) + { + string master, child; + makeRelationScopeName(master, masterName, masterType); + makeRelationScopeName(child, childName, childType); + // Msg 232 : "%s can't reference %s" + status_exception::raise(Arg::PrivateDyn(232) << child << master); + } +} + + // Alters the position of a field with respect to the // other fields in the relation. This will only affect // the order in which the fields will be returned when either @@ -6567,25 +6592,11 @@ if (externalFile->length() >= sizeof(REL.RDB$EXTERNAL_FILE)) status_exception::raise(Arg::Gds(isc_dyn_name_longer)); - REL.RDB$EXTERNAL_FILE.NULL = FALSE; - strcpy(REL.RDB$EXTERNAL_FILE, externalFile->c_str()); - if (ISC_check_if_remote(externalFile->c_str(), false)) status_exception::raise(Arg::PrivateDyn(163)); - // Check for any path, present in filename. - // If miss it, file will be searched in External Tables Dirs, - // that's why no expand_filename required. - - PathName path, file; - PathUtils::splitLastComponent(path, file, externalFile->c_str()); - - if (path.hasData()) // path component present in filename - { - ISC_expand_filename(REL.RDB$EXTERNAL_FILE, strlen(REL.RDB$EXTERNAL_FILE), - REL.RDB$EXTERNAL_FILE, sizeof(REL.RDB$EXTERNAL_FILE), false); - } - + REL.RDB$EXTERNAL_FILE.NULL = FALSE; + strcpy(REL.RDB$EXTERNAL_FILE, externalFile->c_str()); REL.RDB$RELATION_TYPE = rel_external; } } Modified: firebird/trunk/src/include/gen/codetext.h =================================================================== --- firebird/trunk/src/include/gen/codetext.h 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/include/gen/codetext.h 2014-04-22 13:37:14 UTC (rev 59470) @@ -923,6 +923,7 @@ {"dyn_duplicate_package_item", 336068894}, {"dyn_cant_modify_sysobj", 336068895}, {"dyn_cant_use_zero_increment", 336068896}, + {"dyn_cant_use_in_foreignkey", 336068897}, {"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 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/include/gen/iberror.h 2014-04-22 13:37:14 UTC (rev 59470) @@ -957,6 +957,7 @@ const ISC_STATUS isc_dyn_duplicate_package_item = 336068894L; const ISC_STATUS isc_dyn_cant_modify_sysobj = 336068895L; const ISC_STATUS isc_dyn_cant_use_zero_increment = 336068896L; +const ISC_STATUS isc_dyn_cant_use_in_foreignkey = 336068897L; 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; @@ -1277,7 +1278,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 = 1221; +const ISC_STATUS isc_err_max = 1222; #else /* c definitions */ @@ -2204,6 +2205,7 @@ #define isc_dyn_duplicate_package_item 336068894L #define isc_dyn_cant_modify_sysobj 336068895L #define isc_dyn_cant_use_zero_increment 336068896L +#define isc_dyn_cant_use_in_foreignkey 336068897L #define isc_gbak_unknown_switch 336330753L #define isc_gbak_page_size_missing 336330754L #define isc_gbak_page_size_toobig 336330755L @@ -2524,7 +2526,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 1221 +#define isc_err_max 1222 #endif Modified: firebird/trunk/src/include/gen/msgs.h =================================================================== --- firebird/trunk/src/include/gen/msgs.h 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/include/gen/msgs.h 2014-04-22 13:37:14 UTC (rev 59470) @@ -926,6 +926,7 @@ {336068894, "Duplicate @1 @2"}, /* dyn_duplicate_package_item */ {336068895, "System @1 @2 cannot be modified"}, /* dyn_cant_modify_sysobj */ {336068896, "INCREMENT BY 0 is an illegal option for sequence @1"}, /* dyn_cant_use_zero_increment */ + {336068897, "Can't use @1 in FOREIGN KEY constraint"}, /* dyn_cant_use_in_foreignkey */ {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 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/include/gen/sql_code.h 2014-04-22 13:37:14 UTC (rev 59470) @@ -922,6 +922,7 @@ {336068894, -901}, /* 286 dyn_duplicate_package_item */ {336068895, -901}, /* 287 dyn_cant_modify_sysobj */ {336068896, -901}, /* 288 dyn_cant_use_zero_increment */ + {336068897, -901}, /* 289 dyn_cant_use_in_foreignkey */ {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 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/include/gen/sql_state.h 2014-04-22 13:37:14 UTC (rev 59470) @@ -922,6 +922,7 @@ {336068894, "42000"}, // 286 dyn_duplicate_package_item {336068895, "42000"}, // 287 dyn_cant_modify_sysobj {336068896, "42000"}, // 288 dyn_cant_use_zero_increment + {336068897, "42000"}, // 289 dyn_cant_use_in_foreignkey {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/constants.h =================================================================== --- firebird/trunk/src/jrd/constants.h 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/jrd/constants.h 2014-04-22 13:37:14 UTC (rev 59470) @@ -102,6 +102,9 @@ const char* const REL_SCOPE_PERSISTENT = "persistent table \"%s\""; const char* const REL_SCOPE_GTT_PRESERVE = "global temporary table \"%s\" of type ON COMMIT PRESERVE ROWS"; const char* const REL_SCOPE_GTT_DELETE = "global temporary table \"%s\" of type ON COMMIT DELETE ROWS"; +const char* const REL_SCOPE_EXTERNAL = "external table \"%s\""; +const char* const REL_SCOPE_VIEW = "view \"%s\""; +const char* const REL_SCOPE_VIRTUAL = "virtual table \"%s\""; // literal strings in rdb$ref_constraints to be used to identify // the cascade actions for referential constraints. Used Modified: firebird/trunk/src/jrd/ext.cpp =================================================================== --- firebird/trunk/src/jrd/ext.cpp 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/jrd/ext.cpp 2014-04-22 13:37:14 UTC (rev 59470) @@ -58,6 +58,7 @@ #include "../common/config/dir_list.h" #include "../common/os/path_utils.h" #include "../common/classes/init.h" +#include "../common/isc_f_proto.h" #if defined _MSC_VER && _MSC_VER < 1400 // NS: in VS2003 these only work with static CRT @@ -258,20 +259,45 @@ _setmaxstdio(2048); #endif - // If file_name has no path part, expand it in ExternalFilesPath. - PathName path, name; - PathUtils::splitLastComponent(path, name, file_name); - if (path.isEmpty()) + // If file_name is relative expand it in ExternalFilesPath. + PathName newName, name(file_name); + if (PathUtils::isRelative(name)) { - // path component not present in file_name ExternalFileDirectoryList::create(dbb); - if (!(dbb->dbb_external_file_directory_list->expandFileName(path, name))) + if (!(dbb->dbb_external_file_directory_list->expandFileName(newName, name))) { - dbb->dbb_external_file_directory_list->defaultName(path, name); + if (!dbb->dbb_external_file_directory_list->defaultName(newName, name)) + { + ISC_expand_filename(newName, false); + } } - file_name = path.c_str(); + file_name = newName.c_str(); + name = newName; } + // Create missing path components + ObjectsArray<PathName> paths; + for(;;) + { + PathName path, file; + PathUtils::splitLastComponent(path, file, name); + if (path.isEmpty()) + break; + + int rc = PathUtils::makeDir(path.c_str()); + if (rc == 0 || rc == EEXIST) + break; + paths.push(path); + name = path; + } + while(paths.hasData()) + { + PathName path(paths.pop()); + if (PathUtils::makeDir(path.c_str()) != 0) + break; + } + paths.clear(); + ExternalFile* file = FB_NEW_RPT(*relation->rel_pool, (strlen(file_name) + 1)) ExternalFile(); relation->rel_file = file; strcpy(file->ext_filename, file_name); Modified: firebird/trunk/src/msgs/facilities2.sql =================================================================== --- firebird/trunk/src/msgs/facilities2.sql 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/msgs/facilities2.sql 2014-04-22 13:37:14 UTC (rev 59470) @@ -6,7 +6,7 @@ ('2013-11-13 15:59:10', 'GFIX', 3, 122) ('1996-11-07 13:39:40', 'GPRE', 4, 1) ('2012-08-27 21:26:00', 'DSQL', 7, 33) -('2014-04-07 23:01:14', 'DYN', 8, 289) +('2014-04-22 16:39:03', 'DYN', 8, 290) ('1996-11-07 13:39:40', 'INSTALL', 10, 1) ('1996-11-07 13:38:41', 'TEST', 11, 4) ('2014-04-04 16:08:08', 'GBAK', 12, 354) Modified: firebird/trunk/src/msgs/messages2.sql =================================================================== --- firebird/trunk/src/msgs/messages2.sql 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/msgs/messages2.sql 2014-04-22 13:37:14 UTC (rev 59470) @@ -1927,6 +1927,7 @@ ('dyn_duplicate_package_item', NULL, 'PackageNodes.epp', NULL, 8, 286, NULL, 'Duplicate @1 @2', NULL, NULL); ('dyn_cant_modify_sysobj', NULL, 'DdlNodes.epp', NULL, 8, 287, NULL, 'System @1 @2 cannot be modified', NULL, 'Ex: System generator rdb$... cannot be modified'); ('dyn_cant_use_zero_increment', NULL, 'DdlNodes.epp', NULL, 8, 288, NULL, 'INCREMENT BY 0 is an illegal option for sequence @1', NULL, NULL); +('dyn_cant_use_in_foreignkey', NULL, 'DdlNodes.epp', NULL, 8, 289, NULL, 'Can''t use @1 in FOREIGN KEY constraint', 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 2014-04-22 00:45:43 UTC (rev 59469) +++ firebird/trunk/src/msgs/system_errors2.sql 2014-04-22 13:37:14 UTC (rev 59470) @@ -911,6 +911,7 @@ (-901, '42', '000', 8, 286, 'dyn_duplicate_package_item', NULL, NULL) (-901, '42', '000', 8, 287, 'dyn_cant_modify_sysobj', NULL, NULL) (-901, '42', '000', 8, 288, 'dyn_cant_use_zero_increment', NULL, NULL) +(-901, '42', '000', 8, 289, 'dyn_cant_use_in_foreignkey', 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. |
From: <fir...@us...> - 2014-04-23 00:57:55
|
Revision: 59471 http://sourceforge.net/p/firebird/code/59471 Author: firebirds Date: 2014-04-23 00:57:51 +0000 (Wed, 23 Apr 2014) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2014-04-22 13:37:14 UTC (rev 59470) +++ firebird/trunk/ChangeLog 2014-04-23 00:57:51 UTC (rev 59471) @@ -1,3 +1,22 @@ + 2014-04-22 13:37 alexpeshkoff + M lang_helpers/gds_codes.ftn + M lang_helpers/gds_codes.pas + M src/common/os/path_utils.h + M src/common/os/posix/path_utils.cpp + M src/common/os/win32/path_utils.cpp + M src/dsql/DdlNodes.epp + M src/include/gen/codetext.h + M src/include/gen/iberror.h + M src/include/gen/msgs.h + M src/include/gen/sql_code.h + M src/include/gen/sql_state.h + M src/jrd/constants.h + M src/jrd/ext.cpp + M src/msgs/facilities2.sql + M src/msgs/messages2.sql + M src/msgs/system_errors2.sql +Fixed CORE-2119: Use entries in restrict list of ExternalFileAccess parameter to mangle filenames with relative path, also fixed assertion and diagnostics related to EXTERNAL FILE tables + 2014-04-21 17:05 alexpeshkoff M src/jrd/scl.epp Postfix for CORE-3242: enable same trick for functions too Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2014-04-22 13:37:14 UTC (rev 59470) +++ firebird/trunk/src/jrd/build_no.h 2014-04-23 00:57:51 UTC (rev 59471) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:31074 + FORMAL BUILD NUMBER:31075 */ -#define PRODUCT_VER_STRING "3.0.0.31074" -#define FILE_VER_STRING "WI-T3.0.0.31074" -#define LICENSE_VER_STRING "WI-T3.0.0.31074" -#define FILE_VER_NUMBER 3, 0, 0, 31074 +#define PRODUCT_VER_STRING "3.0.0.31075" +#define FILE_VER_STRING "WI-T3.0.0.31075" +#define LICENSE_VER_STRING "WI-T3.0.0.31075" +#define FILE_VER_NUMBER 3, 0, 0, 31075 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "31074" +#define FB_BUILD_NO "31075" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Alpha 2" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2014-04-22 13:37:14 UTC (rev 59470) +++ firebird/trunk/src/misc/writeBuildNum.sh 2014-04-23 00:57:51 UTC (rev 59471) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=31074 +BuildNum=31075 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |