From b30ff76118c46fe0fb2257564b338f831c1eee52 Mon Sep 17 00:00:00 2001 From: Dmitry Yemanov Date: Tue, 27 Oct 2020 15:15:35 +0300 Subject: [PATCH] Replaced ADD/DROP with INCLUDE/EXCLUDE in replication DDL --- doc/README.replication.md | 8 ++++---- doc/sql.extensions/README.ddl.txt | 8 ++++---- src/common/keywords.cpp | 1 + src/dsql/DdlNodes.epp | 10 +++++----- src/dsql/DdlNodes.h | 4 ++-- src/dsql/parse.y | 10 ++++++---- 6 files changed, 22 insertions(+), 19 deletions(-) diff --git a/doc/README.replication.md b/doc/README.replication.md index 610bf8f723..8666314e95 100644 --- a/doc/README.replication.md +++ b/doc/README.replication.md @@ -36,16 +36,16 @@ ALTER DATABASE ENABLE PUBLICATION Also, the replication set (aka publication) should be defined. It includes tables that should be replicated. This is also done via the DDL command: -- to replicate all tables (including the ones created later): -ALTER DATABASE ADD ALL TO PUBLICATION +ALTER DATABASE INCLUDE ALL TO PUBLICATION -- to replicate specific tables: -ALTER DATABASE ADD TABLE T1, T2, T3 TO PUBLICATION +ALTER DATABASE INCLUDE TABLE T1, T2, T3 TO PUBLICATION Tables may later be excluded from the replication set: -- to disable replication of all tables (including the ones created later): -ALTER DATABASE DROP ALL FROM PUBLICATION +ALTER DATABASE EXCLUDE ALL FROM PUBLICATION -- to disable replication of specific tables: -ALTER DATABASE DROP TABLE T1, T2, T3 FROM PUBLICATION +ALTER DATABASE EXCLUDE TABLE T1, T2, T3 FROM PUBLICATION Tables enabled for replicated can be additionally filtered using two settings in the configuration file: include\_filter and exclude\_filter. They are regular expressions that are applied to table names and define rules for inclusion table\(s\) into the replication set or excluding them from the replication set. diff --git a/doc/sql.extensions/README.ddl.txt b/doc/sql.extensions/README.ddl.txt index 0cf0f53246..48ded29b41 100644 --- a/doc/sql.extensions/README.ddl.txt +++ b/doc/sql.extensions/README.ddl.txt @@ -577,19 +577,19 @@ ALTER DATABASE {ENABLE | DISABLE} PUBLICATION Enables or disabled replication. The change is applied immediately after commit. -ALTER DATABASE ADD ALL TO PUBLICATION +ALTER DATABASE INCLUDE ALL TO PUBLICATION Enables replication for all tables inside the database, including the ones to be created in the future. -ALTER DATABASE ADD TABLE {, , ..., } TO PUBLICATION +ALTER DATABASE INCLUDE TABLE {, , ..., } TO PUBLICATION Enables replication for the specified set of tables. -ALTER DATABASE DROP ALL FROM PUBLICATION +ALTER DATABASE EXCLUDE ALL FROM PUBLICATION Disables replication for all tables inside the database, including the ones to be created in the future. -ALTER DATABASE DROP TABLE {, , ..., } FROM PUBLICATION +ALTER DATABASE EXCLUDE TABLE {, , ..., } FROM PUBLICATION Disables replication for the specified set of tables. diff --git a/src/common/keywords.cpp b/src/common/keywords.cpp index 324a4b25af..7f9e10f6f1 100644 --- a/src/common/keywords.cpp +++ b/src/common/keywords.cpp @@ -247,6 +247,7 @@ static const TOK tokens[] = {TOK_IIF, "IIF", true}, {TOK_IN, "IN", false}, {TOK_INACTIVE, "INACTIVE", true}, + {TOK_INCLUDE, "INCLUDE", true}, {TOK_INCREMENT, "INCREMENT", true}, {TOK_INDEX, "INDEX", false}, {TOK_INNER, "INNER", false}, diff --git a/src/dsql/DdlNodes.epp b/src/dsql/DdlNodes.epp index 11dd939f59..29dda94c9d 100644 --- a/src/dsql/DdlNodes.epp +++ b/src/dsql/DdlNodes.epp @@ -12508,8 +12508,8 @@ void AlterDatabaseNode::checkClauses(thread_db* tdbb) if ((clauses & CLAUSE_ENABLE_PUB) && (clauses & CLAUSE_DISABLE_PUB)) (Arg::PrivateDyn(298) << Arg::Str("ENABLE PUBLICATION") << Arg::Str("DISABLE PUBLICATION")).raise(); - if ((clauses & CLAUSE_PUB_ADD_TABLE) && (clauses & CLAUSE_PUB_DROP_TABLE)) - (Arg::PrivateDyn(298) << Arg::Str("ADD TABLE TO PUBLICATION") << Arg::Str("DROP TABLE FROM PUBLICATION")).raise(); + if ((clauses & CLAUSE_PUB_INCL_TABLE) && (clauses & CLAUSE_PUB_EXCL_TABLE)) + (Arg::PrivateDyn(298) << Arg::Str("INCLUDE TABLE TO PUBLICATION") << Arg::Str("EXCLUDE TABLE FROM PUBLICATION")).raise(); } void AlterDatabaseNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, @@ -12562,7 +12562,7 @@ void AlterDatabaseNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratc END_FOR } - if (clauses & (CLAUSE_PUB_ADD_TABLE | CLAUSE_PUB_DROP_TABLE)) + if (clauses & (CLAUSE_PUB_INCL_TABLE | CLAUSE_PUB_EXCL_TABLE)) { if (pubTables.isEmpty()) { @@ -12588,7 +12588,7 @@ void AlterDatabaseNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratc WITH PUB.RDB$PUBLICATION_NAME EQ DEFAULT_PUBLICATION { MODIFY PUB - PUB.RDB$AUTO_ENABLE = (clauses & CLAUSE_PUB_ADD_TABLE) ? 1 : 0; + PUB.RDB$AUTO_ENABLE = (clauses & CLAUSE_PUB_INCL_TABLE) ? 1 : 0; PUB.RDB$AUTO_ENABLE.NULL = FALSE; END_MODIFY } @@ -12626,7 +12626,7 @@ void AlterDatabaseNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlScratc { const MetaName& tableName = *iter; - if (clauses & CLAUSE_PUB_ADD_TABLE) + if (clauses & CLAUSE_PUB_INCL_TABLE) { try { diff --git a/src/dsql/DdlNodes.h b/src/dsql/DdlNodes.h index 17b974a1f6..83823f1e99 100644 --- a/src/dsql/DdlNodes.h +++ b/src/dsql/DdlNodes.h @@ -2390,8 +2390,8 @@ public: static const unsigned CLAUSE_CRYPT = 0x08; static const unsigned CLAUSE_ENABLE_PUB = 0x10; static const unsigned CLAUSE_DISABLE_PUB = 0x20; - static const unsigned CLAUSE_PUB_ADD_TABLE = 0x40; - static const unsigned CLAUSE_PUB_DROP_TABLE = 0x80; + static const unsigned CLAUSE_PUB_INCL_TABLE = 0x40; + static const unsigned CLAUSE_PUB_EXCL_TABLE = 0x80; static const unsigned RDB_DATABASE_MASK = CLAUSE_BEGIN_BACKUP | CLAUSE_END_BACKUP | CLAUSE_DROP_DIFFERENCE; diff --git a/src/dsql/parse.y b/src/dsql/parse.y index 6e3ef7b848..fb8da9c63d 100644 --- a/src/dsql/parse.y +++ b/src/dsql/parse.y @@ -615,6 +615,7 @@ using namespace Firebird; %token HEX_DECODE %token HEX_ENCODE %token IDLE +%token INCLUDE %token INT128 %token INVOKER %token IV @@ -4441,10 +4442,10 @@ db_alter_clause($alterDatabaseNode) { $alterDatabaseNode->clauses |= AlterDatabaseNode::CLAUSE_ENABLE_PUB; } | DISABLE PUBLICATION { $alterDatabaseNode->clauses |= AlterDatabaseNode::CLAUSE_DISABLE_PUB; } - | ADD pub_table_filter($alterDatabaseNode) TO PUBLICATION - { $alterDatabaseNode->clauses |= AlterDatabaseNode::CLAUSE_PUB_ADD_TABLE; } - | DROP pub_table_filter($alterDatabaseNode) FROM PUBLICATION - { $alterDatabaseNode->clauses |= AlterDatabaseNode::CLAUSE_PUB_DROP_TABLE; } + | INCLUDE pub_table_filter($alterDatabaseNode) TO PUBLICATION + { $alterDatabaseNode->clauses |= AlterDatabaseNode::CLAUSE_PUB_INCL_TABLE; } + | EXCLUDE pub_table_filter($alterDatabaseNode) FROM PUBLICATION + { $alterDatabaseNode->clauses |= AlterDatabaseNode::CLAUSE_PUB_EXCL_TABLE; } ; %type crypt_key_clause() @@ -8968,6 +8969,7 @@ non_reserved_word | HEX_DECODE | HEX_ENCODE | IDLE + | INCLUDE | INVOKER | IV | LAST_DAY