From 9e3eb7ff396b8714fa220574516d534557744a46 Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 16 Apr 2026 16:24:48 +0800 Subject: [PATCH 1/2] fix rpc error Co-authored-by: footka <672528926@qq.com> --- .../installer/wix_launch_configurator.wxs | 34 ++++--------------- 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/tools/windows/installer/wix_launch_configurator.wxs b/tools/windows/installer/wix_launch_configurator.wxs index 93ff8f3ce..f8692ff47 100644 --- a/tools/windows/installer/wix_launch_configurator.wxs +++ b/tools/windows/installer/wix_launch_configurator.wxs @@ -12,17 +12,6 @@ failed to link for some reason. --> - - - - - + - @@ -60,7 +42,7 @@ Only runs on full uninstall (not upgrades). --> + Condition="(REMOVE="ALL") AND (NOT UPGRADINGPRODUCTCODE)" /> @@ -70,10 +52,6 @@ Permanent="no" Part="last" Action="set" System="yes" /> - - From 2971f5a02d75b37598a07b0827702f59aa1b0306 Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 16 Apr 2026 10:48:59 +0000 Subject: [PATCH 2/2] fix: crash caused by uninitialized discrete vector ptrs on Windows Co-authored-by: LINxiansheng --- src/share/stat/ob_dbms_stats_utils.cpp | 6 +++++- src/share/vector/ob_discrete_base.cpp | 4 ++-- src/sql/engine/basic/ob_chunk_datum_store.cpp | 4 +++- src/sql/engine/expr/ob_expr.cpp | 2 ++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/share/stat/ob_dbms_stats_utils.cpp b/src/share/stat/ob_dbms_stats_utils.cpp index ea4c9cd55..97298ca56 100644 --- a/src/share/stat/ob_dbms_stats_utils.cpp +++ b/src/share/stat/ob_dbms_stats_utils.cpp @@ -221,8 +221,12 @@ int ObDbmsStatsUtils::check_is_stat_table(share::schema::ObSchemaGetterGuard &sc if (OB_FAIL(check_is_sys_table(schema_guard, tenant_id, table_id, is_valid))) { LOG_WARN("failed to check is sys table", K(ret)); } - } else if (is_virtual_table(table_id)) {//check virtual table + } else if (is_virtual_table(table_id)) { +#ifdef _WIN32 + is_valid = false; +#else is_valid = !is_no_stat_virtual_table(table_id); +#endif } else if (OB_FAIL(schema_guard.get_table_schema(tenant_id, table_id, table_schema))) { LOG_WARN("failed to get table schema", K(ret), K(tenant_id), K(table_id)); } else if (OB_ISNULL(table_schema) || OB_UNLIKELY(!table_schema->is_normal_schema())) { diff --git a/src/share/vector/ob_discrete_base.cpp b/src/share/vector/ob_discrete_base.cpp index e70ee7797..8980c933e 100644 --- a/src/share/vector/ob_discrete_base.cpp +++ b/src/share/vector/ob_discrete_base.cpp @@ -32,7 +32,7 @@ int ObDiscreteBase::to_rows(const sql::RowMeta &row_meta, sql::ObCompactRow **st if (OB_LIKELY(!is_collection_expr())) { for (int64_t i = 0; i < size; i++) { int64_t row_idx = selector[i]; - if (nulls_->at(row_idx)) { + if (nulls_->at(row_idx) || OB_UNLIKELY(nullptr == ptrs_[row_idx])) { stored_rows[i]->set_null(row_meta, col_idx); } else { stored_rows[i]->set_cell_payload(row_meta, col_idx, ptrs_[row_idx], lens_[row_idx]); @@ -51,7 +51,7 @@ int ObDiscreteBase::to_rows(const sql::RowMeta &row_meta, sql::ObCompactRow **st int ret = OB_SUCCESS; if (OB_LIKELY(!is_collection_expr())) { for (int64_t row_idx = 0; row_idx < size; row_idx++) { - if (nulls_->at(row_idx)) { + if (nulls_->at(row_idx) || OB_UNLIKELY(nullptr == ptrs_[row_idx])) { stored_rows[row_idx]->set_null(row_meta, col_idx); } else { stored_rows[row_idx]->set_cell_payload(row_meta, col_idx, ptrs_[row_idx], lens_[row_idx]); diff --git a/src/sql/engine/basic/ob_chunk_datum_store.cpp b/src/sql/engine/basic/ob_chunk_datum_store.cpp index 8f51481e8..47acd3775 100644 --- a/src/sql/engine/basic/ob_chunk_datum_store.cpp +++ b/src/sql/engine/basic/ob_chunk_datum_store.cpp @@ -1371,8 +1371,10 @@ static void assign_datums(const ObDatum **datums, const uint16_t selector[], con ObDatum &dst = srow->cells()[col_idx]; dst.pack_ = src.pack_; dst.ptr_ = reinterpret_cast(srow) + srow->row_size_; - if (!src.is_null()) { + if (!src.is_null() && OB_LIKELY(nullptr != src.ptr_)) { T::assign_datum_value((void *)dst.ptr_, src.ptr_, src.len_); + } else if (OB_UNLIKELY(!src.is_null() && nullptr == src.ptr_)) { + dst.set_null(); } srow->row_size_ += src.len_; } diff --git a/src/sql/engine/expr/ob_expr.cpp b/src/sql/engine/expr/ob_expr.cpp index 838c1962b..f015b9b0e 100644 --- a/src/sql/engine/expr/ob_expr.cpp +++ b/src/sql/engine/expr/ob_expr.cpp @@ -1056,6 +1056,8 @@ int ObExpr::init_vector(ObEvalCtx &ctx, int32_t *lens = get_discrete_vector_lens(ctx); ObBitVector &nulls = get_nulls(ctx); nulls.reset(size); + MEMSET(ptrs, 0, sizeof(char *) * size); + MEMSET(lens, 0, sizeof(int32_t) * size); // for collection expr, we need reset ptr to frame, so that we can write collection cells if (use_reserve_buf || is_nested_expr()) { reset_discretes_ptr(ctx.frames_[frame_idx_], size, get_discrete_vector_ptrs(ctx));