You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudberry.apache.org by ma...@apache.org on 2025/01/07 09:42:36 UTC
(cloudberry) branch main updated: Optimize code of IVM and fix some typos (#833)
This is an automated email from the ASF dual-hosted git repository.
maxyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
The following commit(s) were added to refs/heads/main by this push:
new cdbc1f79d1 Optimize code of IVM and fix some typos (#833)
cdbc1f79d1 is described below
commit cdbc1f79d1c37822dcdb3869aca1185615f1efa6
Author: Yongtao Huang <99...@users.noreply.github.com>
AuthorDate: Tue Jan 7 17:42:31 2025 +0800
Optimize code of IVM and fix some typos (#833)
In pg_ivm, the variable count is required and is applied in the function make_delta_enr_name,
but in cbdb, we use gp_command_count instead of count in MakeDeltaName.
---
src/backend/commands/matview.c | 32 +++++++++++++-------------------
1 file changed, 13 insertions(+), 19 deletions(-)
diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c
index 8bd075e870..8448d2335f 100644
--- a/src/backend/commands/matview.c
+++ b/src/backend/commands/matview.c
@@ -663,7 +663,7 @@ ExecRefreshMatView(RefreshMatViewStmt *stmt, const char *queryString,
refreshClause = MakeRefreshClause(concurrent, stmt->skipData, stmt->relation);
/*
- * Only in dispather role, we should set intoPolicy, else it should remain NULL.
+ * Only in dispatcher role, we should set intoPolicy, else it should remain NULL.
*/
if (GP_ROLE_DISPATCH == Gp_role)
{
@@ -708,7 +708,7 @@ ExecRefreshMatView(RefreshMatViewStmt *stmt, const char *queryString,
* QD, so both the segments and coordinator will have pgstat for this
* relation. See pgstat_combine_from_qe(pgstat.c) for more details.
* Then comment out the below codes on the dispatcher side and leave
- * the current comment to avoid futher upstream merge issues.
+ * the current comment to avoid further upstream merge issues.
* The pgstat is updated in function transientrel_shutdown on QE side.
* This related to issue: https://github.com/greenplum-db/gpdb/issues/11375
*/
@@ -2014,7 +2014,7 @@ rewrite_query_for_preupdate_state(Query *query, List *tables,
RangeTblEntry *rte_pre = get_prestate_rte(r, table, pstate->p_queryEnv, matviewid);
/*
- * Set a row security poslicies of the modified table to the subquery RTE which
+ * Set a row security policies of the modified table to the subquery RTE which
* represents the pre-update state of the table.
*/
get_row_security_policies(query, table->original_rte, i,
@@ -2063,9 +2063,7 @@ register_delta_ENRs(ParseState *pstate, Query *query, List *tables)
{
MV_TriggerTable *table = (MV_TriggerTable *) lfirst(lc);
ListCell *lc2;
- int count;
- count = 0;
foreach(lc2, table->old_tuplestores)
{
Tuplestorestate *oldtable = (Tuplestorestate *) lfirst(lc2);
@@ -2090,7 +2088,6 @@ register_delta_ENRs(ParseState *pstate, Query *query, List *tables)
rte = nsitem->p_rte;
query->rtable = list_append_unique_ptr(query->rtable, rte);
- count++;
/* Note: already freezed case */
if (freezed)
{
@@ -2103,7 +2100,6 @@ register_delta_ENRs(ParseState *pstate, Query *query, List *tables)
tuplestore_freeze(oldtable);
}
- count = 0;
foreach(lc2, table->new_tuplestores)
{
Tuplestorestate *newtable = (Tuplestorestate *) lfirst(lc2);
@@ -2129,7 +2125,6 @@ register_delta_ENRs(ParseState *pstate, Query *query, List *tables)
query->rtable = list_append_unique_ptr(query->rtable, rte);
- count++;
/* Note: already freezed case */
if (freezed)
{
@@ -2327,7 +2322,7 @@ replace_rte_with_delta(RangeTblEntry *rte, MV_TriggerTable *table, bool is_new,
sub = transformStmt(pstate, raw->stmt);
/*
- * Update the subquery so that it represent the combined transition
+ * Update the subquery so that it represents the combined transition
* table. Note that we leave the security_barrier and securityQuals
* fields so that the subquery relation can be protected by the RLS
* policy as same as the modified table.
@@ -2922,7 +2917,6 @@ apply_old_delta_with_count(const char *matviewname, Oid matviewRelid, const char
const char * tempTableName;
StringInfoData querybuf;
- StringInfoData tselect;
char *match_cond;
bool agg_without_groupby = (list_length(keys) == 0);
@@ -2962,9 +2956,8 @@ apply_old_delta_with_count(const char *matviewname, Oid matviewRelid, const char
/* CBDB_IVM_FIXME: use tuplestore to replace temp table. */
tempTableName = MakeDeltaName("temp_old_delta", matviewRelid, gp_command_count);
- initStringInfo(&tselect);
initStringInfo(&querybuf);
- appendStringInfo(&tselect,
+ appendStringInfo(&querybuf,
"CREATE TEMP TABLE %s AS SELECT diff.%s, " /* count column */
"(diff.%s OPERATOR(pg_catalog.=) mv.%s AND %s) AS for_dlt, "
"mv.ctid AS tid, mv.gp_segment_id AS gid"
@@ -2979,11 +2972,12 @@ apply_old_delta_with_count(const char *matviewname, Oid matviewRelid, const char
match_cond);
/* Create the temporary table. */
- if (SPI_exec(tselect.data, 0) != SPI_OK_UTILITY)
- elog(ERROR, "SPI_exec failed: %s", tselect.data);
- elogif(Debug_print_ivm, INFO, "IVM apply_old_delta_with_count select: %s", tselect.data);
+ if (SPI_exec(querybuf.data, 0) != SPI_OK_UTILITY)
+ elog(ERROR, "SPI_exec failed: %s", querybuf.data);
+ elogif(Debug_print_ivm, INFO, "IVM apply_old_delta_with_count select: %s", querybuf.data);
/* Search for matching tuples from the view and update or delete if found. */
+ resetStringInfo(&querybuf);
appendStringInfo(&querybuf,
"UPDATE %s AS mv SET %s = mv.%s OPERATOR(pg_catalog.-) t.%s "
"%s" /* SET clauses for aggregates */
@@ -3117,7 +3111,7 @@ apply_new_delta_with_count(const char *matviewname, const char* deltaname_new,
"FROM %s AS diff "
"WHERE %s " /* tuple matching condition */
"RETURNING %s" /* returning keys of updated tuples */
- ") INSERT INTO %s (%s)" /* insert a new tuple if this doesn't existw */
+ ") INSERT INTO %s (%s)" /* insert a new tuple if this doesn't exist */
"SELECT %s FROM %s AS diff "
"WHERE NOT EXISTS (SELECT 1 FROM updt AS mv WHERE %s);",
matviewname, count_colname, count_colname, count_colname,
@@ -3144,7 +3138,7 @@ apply_new_delta_with_count(const char *matviewname, const char* deltaname_new,
resetStringInfo(&querybuf);
appendStringInfo(&querybuf,
- "INSERT INTO %s (%s)" /* insert a new tuple if this doesn't existw */
+ "INSERT INTO %s (%s)" /* insert a new tuple if this doesn't exist */
"SELECT %s FROM %s AS diff "
"WHERE NOT EXISTS (SELECT 1 FROM %s AS mv WHERE %s);",
matviewname, target_list->data,
@@ -3223,7 +3217,7 @@ get_matching_condition_string(List *keys)
}
/*
- * generate_equals
+ * generate_equal
*
* Generate an equality clause using given operands' default equality
* operator.
@@ -3857,7 +3851,7 @@ makeIvmIntoClause(const char *enrname, Relation matviewRel)
{
IntoClause *intoClause = makeNode(IntoClause);
intoClause->ivm = true;
- /* rel is NULL means put tuples into memory.*/
+ /* rel is NULL means putting tuples into memory.*/
intoClause->rel = NULL;
intoClause->enrname = (char*) enrname;
intoClause->distributedBy = (Node*) make_distributedby_for_rel(matviewRel);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org