This is an automated email from the ASF dual-hosted git repository.

kxiao pushed a commit to branch branch-2.0-beta
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 166fc4f134ced589c58a0582eb8ed0e9991d834b
Author: lihangyu <15605149...@163.com>
AuthorDate: Thu Jun 8 10:55:22 2023 +0800

    [Bug](row-store) Fix row store with materialize index (#20356)
    
    If a query hits a materialized view that has row storage enabled, but the 
row storage column is not present in the materialized view, it will result in a 
query crash. Therefore, it is necessary to include the row storage column when 
creating the materialized view, and serialize the row storage column during the 
execution of SchemaChange.
---
 be/src/olap/compaction.cpp                         |   1 +
 be/src/olap/delta_writer.cpp                       |   2 +-
 be/src/olap/olap_define.h                          |   7 ++
 be/src/olap/rowset/beta_rowset_writer.cpp          |   4 +-
 be/src/olap/rowset/rowset_writer_context.h         |   5 +-
 be/src/olap/rowset/segment_v2/segment_writer.cpp   |  13 ++-
 be/src/olap/rowset/segment_v2/segment_writer.h     |   4 +-
 be/src/olap/schema_change.cpp                      |   2 +
 be/src/olap/txn_manager.cpp                        |   2 +-
 .../doris/alter/MaterializedViewHandler.java       |   5 +
 .../main/java/org/apache/doris/catalog/Column.java |   3 +-
 .../java/org/apache/doris/catalog/OlapTable.java   |   9 ++
 .../org/apache/doris/task/AlterReplicaTask.java    |   1 -
 regression-test/data/point_query_p0/load.out       |  25 +++++
 regression-test/suites/point_query_p0/load.groovy  | 101 +++++++++++++++++++++
 15 files changed, 168 insertions(+), 16 deletions(-)

diff --git a/be/src/olap/compaction.cpp b/be/src/olap/compaction.cpp
index 0b1a702654..8b1e0e98b1 100644
--- a/be/src/olap/compaction.cpp
+++ b/be/src/olap/compaction.cpp
@@ -457,6 +457,7 @@ Status 
Compaction::construct_output_rowset_writer(RowsetWriterContext& ctx, bool
     ctx.segments_overlap = NONOVERLAPPING;
     ctx.tablet_schema = _cur_tablet_schema;
     ctx.newest_write_timestamp = _newest_write_timestamp;
+    ctx.write_type = DataWriteType::TYPE_COMPACTION;
     if (config::inverted_index_compaction_enable &&
         ((_tablet->keys_type() == KeysType::UNIQUE_KEYS ||
           _tablet->keys_type() == KeysType::DUP_KEYS))) {
diff --git a/be/src/olap/delta_writer.cpp b/be/src/olap/delta_writer.cpp
index d60c88b807..4122e957e0 100644
--- a/be/src/olap/delta_writer.cpp
+++ b/be/src/olap/delta_writer.cpp
@@ -200,7 +200,7 @@ Status DeltaWriter::init() {
     context.newest_write_timestamp = UnixSeconds();
     context.tablet_id = _tablet->table_id();
     context.tablet = _tablet;
-    context.is_direct_write = true;
+    context.write_type = DataWriteType::TYPE_DIRECT;
     context.mow_context =
             std::make_shared<MowContext>(_cur_max_version, _rowset_ids, 
_delete_bitmap);
     RETURN_IF_ERROR(_tablet->create_rowset_writer(context, &_rowset_writer));
diff --git a/be/src/olap/olap_define.h b/be/src/olap/olap_define.h
index 42f8dfe83b..ff896e0ff8 100644
--- a/be/src/olap/olap_define.h
+++ b/be/src/olap/olap_define.h
@@ -131,6 +131,13 @@ enum ColumnFamilyIndex {
     META_COLUMN_FAMILY_INDEX,
 };
 
+enum class DataWriteType {
+    TYPE_DEFAULT = 0,
+    TYPE_DIRECT,
+    TYPE_SCHEMA_CHANGE,
+    TYPE_COMPACTION,
+};
+
 static const char* const HINIS_KEY_SEPARATOR = ";";
 static const char* const HINIS_KEY_PAIR_SEPARATOR = "|";
 static const char* const HINIS_KEY_GROUP_SEPARATOR = "&";
diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp 
b/be/src/olap/rowset/beta_rowset_writer.cpp
index c729a65077..4e462f1e4b 100644
--- a/be/src/olap/rowset/beta_rowset_writer.cpp
+++ b/be/src/olap/rowset/beta_rowset_writer.cpp
@@ -721,9 +721,9 @@ Status BetaRowsetWriter::_do_create_segment_writer(
     segment_v2::SegmentWriterOptions writer_options;
     writer_options.enable_unique_key_merge_on_write = 
_context.enable_unique_key_merge_on_write;
     writer_options.rowset_ctx = &_context;
-    writer_options.is_direct_write = _context.is_direct_write;
+    writer_options.write_type = _context.write_type;
     if (is_segcompaction) {
-        writer_options.is_direct_write = false;
+        writer_options.write_type = DataWriteType::TYPE_COMPACTION;
     }
 
     if (is_segcompaction) {
diff --git a/be/src/olap/rowset/rowset_writer_context.h 
b/be/src/olap/rowset/rowset_writer_context.h
index e526f80158..904966d8e3 100644
--- a/be/src/olap/rowset/rowset_writer_context.h
+++ b/be/src/olap/rowset/rowset_writer_context.h
@@ -20,6 +20,7 @@
 #include <gen_cpp/olap_file.pb.h>
 
 #include "io/fs/file_system.h"
+#include "olap/olap_define.h"
 #include "olap/tablet.h"
 #include "olap/tablet_schema.h"
 
@@ -82,9 +83,7 @@ struct RowsetWriterContext {
     int64_t newest_write_timestamp;
     bool enable_unique_key_merge_on_write = false;
     std::set<int32_t> skip_inverted_index;
-    // If it is directly write from load procedure, else
-    // it could be compaction or schema change etc..
-    bool is_direct_write = false;
+    DataWriteType write_type = DataWriteType::TYPE_DEFAULT;
     std::shared_ptr<Tablet> tablet = nullptr;
     // for tracing local schema change record
     std::shared_ptr<vectorized::schema_util::LocalSchemaChangeRecorder> 
schema_change_recorder =
diff --git a/be/src/olap/rowset/segment_v2/segment_writer.cpp 
b/be/src/olap/rowset/segment_v2/segment_writer.cpp
index 594e951d33..3eaaf325c4 100644
--- a/be/src/olap/rowset/segment_v2/segment_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/segment_writer.cpp
@@ -167,7 +167,8 @@ Status SegmentWriter::init(const std::vector<uint32_t>& 
col_ids, bool has_key,
                     
_opts.rowset_ctx->skip_inverted_index.count(column.unique_id()) > 0;
         }
         // skip write inverted index on load if skip_write_index_on_load is 
true
-        if (_opts.is_direct_write && 
_tablet_schema->skip_write_index_on_load()) {
+        if (_opts.write_type == DataWriteType::TYPE_DIRECT &&
+            _tablet_schema->skip_write_index_on_load()) {
             skip_inverted_index = true;
         }
         // indexes for this column
@@ -279,7 +280,7 @@ void SegmentWriter::_maybe_invalid_row_cache(const 
std::string& key) {
     // If we update/insert cache, if load failed rowset will not be visible 
but cached data
     // will be visible, and lead to inconsistency.
     if (!config::disable_storage_row_cache && 
_tablet_schema->store_row_column() &&
-        _opts.is_direct_write) {
+        _opts.write_type == DataWriteType::TYPE_DIRECT) {
         // invalidate cache
         RowCache::instance()->erase({_opts.rowset_ctx->tablet_id, key});
     }
@@ -502,14 +503,18 @@ Status 
SegmentWriter::fill_missing_columns(vectorized::MutableColumns& mutable_f
 
 Status SegmentWriter::append_block(const vectorized::Block* block, size_t 
row_pos,
                                    size_t num_rows) {
-    if (_tablet_schema->is_partial_update() && _opts.is_direct_write) {
+    if (_tablet_schema->is_partial_update() && _opts.write_type == 
DataWriteType::TYPE_DIRECT) {
         RETURN_IF_ERROR(append_block_with_partial_content(block, row_pos, 
num_rows));
         return Status::OK();
     }
     CHECK(block->columns() >= _column_writers.size())
             << ", block->columns()=" << block->columns()
             << ", _column_writers.size()=" << _column_writers.size();
-    if (_tablet_schema->store_row_column() && _opts.is_direct_write) {
+    // Row column should be filled here when it's a directly write from 
memtable
+    // or it's schema change write(since column data type maybe changed, so we 
should reubild)
+    if (_tablet_schema->store_row_column() &&
+        (_opts.write_type == DataWriteType::TYPE_DIRECT ||
+         _opts.write_type == DataWriteType::TYPE_SCHEMA_CHANGE)) {
         _serialize_block_to_row_column(*const_cast<vectorized::Block*>(block));
     }
 
diff --git a/be/src/olap/rowset/segment_v2/segment_writer.h 
b/be/src/olap/rowset/segment_v2/segment_writer.h
index 09a3576cf5..837827b70a 100644
--- a/be/src/olap/rowset/segment_v2/segment_writer.h
+++ b/be/src/olap/rowset/segment_v2/segment_writer.h
@@ -72,12 +72,10 @@ extern const uint32_t k_segment_magic_length;
 struct SegmentWriterOptions {
     uint32_t num_rows_per_block = 1024;
     bool enable_unique_key_merge_on_write = false;
-    bool is_direct_write = false;
     CompressionTypePB compression_type = UNKNOWN_COMPRESSION;
 
     RowsetWriterContext* rowset_ctx = nullptr;
-    // If it is directly write from load procedure, else
-    // it could be compaction or schema change etc..
+    DataWriteType write_type = DataWriteType::TYPE_DEFAULT;
 };
 
 using TabletSharedPtr = std::shared_ptr<Tablet>;
diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp
index 48fbe5bca1..75ce050f10 100644
--- a/be/src/olap/schema_change.cpp
+++ b/be/src/olap/schema_change.cpp
@@ -597,6 +597,7 @@ Status VSchemaChangeWithSorting::_internal_sorting(
     context.segments_overlap = segments_overlap;
     context.tablet_schema = new_tablet->tablet_schema();
     context.newest_write_timestamp = newest_write_timestamp;
+    context.write_type = DataWriteType::TYPE_SCHEMA_CHANGE;
     RETURN_IF_ERROR(new_tablet->create_rowset_writer(context, &rowset_writer));
 
     Defer defer {[&]() {
@@ -1103,6 +1104,7 @@ Status 
SchemaChangeHandler::_convert_historical_rowsets(const SchemaChangeParams
         context.tablet_schema = new_tablet->tablet_schema();
         context.newest_write_timestamp = rs_reader->newest_write_timestamp();
         context.fs = rs_reader->rowset()->rowset_meta()->fs();
+        context.write_type = DataWriteType::TYPE_SCHEMA_CHANGE;
         Status status = new_tablet->create_rowset_writer(context, 
&rowset_writer);
         if (!status.ok()) {
             res = Status::Error<ROWSET_BUILDER_INIT>();
diff --git a/be/src/olap/txn_manager.cpp b/be/src/olap/txn_manager.cpp
index 37fc94bd23..4119dced46 100644
--- a/be/src/olap/txn_manager.cpp
+++ b/be/src/olap/txn_manager.cpp
@@ -443,7 +443,7 @@ Status 
TxnManager::_create_transient_rowset_writer(std::shared_ptr<Tablet> table
     context.newest_write_timestamp = UnixSeconds();
     context.tablet_id = tablet->table_id();
     context.tablet = tablet;
-    context.is_direct_write = true;
+    context.write_type = DataWriteType::TYPE_DIRECT;
     RETURN_IF_ERROR(tablet->create_transient_rowset_writer(context, 
rowset_ptr->rowset_id(),
                                                            rowset_writer));
     (*rowset_writer)->set_segment_start_id(rowset_ptr->num_segments());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java 
b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java
index d9c2e5469e..e54c18a357 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java
@@ -572,6 +572,11 @@ public class MaterializedViewHandler extends AlterHandler {
             newColumn.setAggregationType(AggregateType.REPLACE, true);
             newMVColumns.add(newColumn);
         }
+        if (olapTable.storeRowColumn()) {
+            Column newColumn = new Column(olapTable.getRowStoreCol());
+            newColumn.setAggregationType(AggregateType.NONE, true);
+            newMVColumns.add(newColumn);
+        }
         // if the column is complex type, we forbid to create materialized view
         for (Column column : newMVColumns) {
             if (column.getDataType().isComplexType() || 
column.getDataType().isJsonbType()) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
index 936db90a35..ff54f27026 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
@@ -356,7 +356,8 @@ public class Column implements Writable, 
GsonPostProcessable {
 
     public boolean isRowStoreColumn() {
         return !visible && (aggregationType == AggregateType.REPLACE
-                || aggregationType == AggregateType.NONE) && 
nameEquals(ROW_STORE_COL, true);
+                || aggregationType == AggregateType.NONE || aggregationType == 
null)
+                && nameEquals(ROW_STORE_COL, true);
     }
 
     public boolean isVersionColumn() {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index 50e36866ba..91910331e8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -1019,6 +1019,15 @@ public class OlapTable extends Table {
         return null;
     }
 
+    public Column getRowStoreCol() {
+        for (Column column : getBaseSchema(true)) {
+            if (column.isRowStoreColumn()) {
+                return column;
+            }
+        }
+        return null;
+    }
+
     public Boolean hasSequenceCol() {
         return getSequenceCol() != null;
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java
index 9bdf4986fc..178550dd22 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java
@@ -42,7 +42,6 @@ import java.util.Map;
  * The new replica can be a rollup replica, or a shadow replica of schema 
change.
  */
 public class AlterReplicaTask extends AgentTask {
-
     private long baseTabletId;
     private long newReplicaId;
     private int baseSchemaHash;
diff --git a/regression-test/data/point_query_p0/load.out 
b/regression-test/data/point_query_p0/load.out
new file mode 100644
index 0000000000..ef2d9c2702
--- /dev/null
+++ b/regression-test/data/point_query_p0/load.out
@@ -0,0 +1,25 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !sql --
+-2147475406    true    45      23794   -11023  915989078       2115356192      
15927.068       1.392557423391501E9     45951348783208518.810   
8340516346665031.310    2022-01-26      2022-04-13T11:13:48     2022-01-31      
2022-02-16T06:07:21     130.50.6.0      denisematth...@yozio.mil        
Londonderry Alley 61
+-2147424303    false   -28     -5177   -1409   149417728       553396597       
-10123.558      -1.268722910924068E9    67354830622005524.848   
52407243294991364.348   2022-06-29      2022-05-06T09:30:02     2023-01-09      
2022-03-12T14:26        109.50.92.119   craighug...@talane.biz  Heath Drive 38
+-2147413967    true    -75     30533   -5435   -727385447      32929830        
9577.564        1.334766997510087E9     39973144022098028.800   
5886463393340733.108    2022-06-23      2022-05-10T19:13:50     2022-01-17      
2022-11-26T22:49:36     157.38.90.25    joshuale...@jayo.mil    Loeprich 
Crossing 43
+-2147380173    true    -79     -5785   9752    1851350218      1121852298      
25652.402       -1.618061059513558E9    95821873014545736.897   
38923569966532828.626   2022-10-30      2022-05-02T17:06:33     2022-08-11      
2022-02-08T10:19:47     217.198.98.239  joseb...@voonder.info   Lawn Lane 78
+-2147374459    false   -118    -30267  -14606  262497842       -1811881704     
8211.805        2.37851933046663E8      37354136531251060.755   
63024710145324035.720   2022-10-11      2022-01-17T10:20:18     2022-04-12      
2022-10-24T18:14:38     16.243.195.81   brendab...@talane.net   Annamark Pass 72
+-2147369329    false   -121    -22859  4733    -378861997      385323541       
-22969.846      1.483825622420542E9     50940877800950041.950   
87108729227937387.294   2022-06-05      2022-08-18T05:39:56     2022-08-21      
2022-12-12T08:43:59     16.27.107.167   phyllissm...@zoombox.org        Village 
Green Terrace 55
+-2147367329    true    84      21471   -29331  1823545950      1200800855      
-13832.219      8.01505090724918E8      45495296019797580.477   
45196001436348967.557   2022-02-17      2022-05-23T01:44:31     2022-08-01      
2022-08-16T10:32:36     84.110.209.128  vl...@dablist.edu       Packers Street 
34
+-2147339287    true    62      28989   -32018  650184880       -365849435      
-21644.414      -7.8648426469503E7      92593387160450273.870   
39588697152489527.185   2022-07-23      2023-01-03T11:54:35     2022-08-02      
2022-05-19T18:35:36     30.194.6.115    ven...@thoughtstorm.mil Basil Street 79
+-2147336695    false   42      -7202   27919   1898713395      1177326785      
-302.0104       -1.268944460183375E9    61604656210729534.717   
6683002058708470.832    2022-08-20      2022-08-14T01:41:12     2022-11-02      
2022-05-15T04:22:07     36.86.77.214    delectus_maiores_fu...@rhyzio.org       
Briar Crest Crossing 37
+-2147330925    false   -122    -21211  -2331   1906695924      -1342280417     
5545.3013       -1.286038914681617E9    31911132334645267.930   
84364209624711210.131   2022-02-16      2022-03-11T12:05:33     2022-11-24      
2022-12-17T19:56:16     6.87.14.74      rcampb...@riffpath.com  Forest Run 
Terrace 13
+
+-- !sql --
+-2145739104    true    10      -22603  6132    -984517723      138439036       
8683.904        1.681202635040786E9     49683339998558535.395   
38251259739648714.297   2022-04-26      2022-09-12T00:32:18     2022-11-20      
2023-01-09T16:19:06     180.215.212.86  kathyrobe...@talane.info        Darwin 
Center 26
+-2140012242    false   10      30893   -16192  -175522451      -1382546546     
21324.643       2.017216342012696E9     41477187479096470.647   
25445001389089818.791   2022-11-06      2022-09-02T12:04:05     2022-05-29      
2022-02-04T22:21:46     24.25.69.81     nam_qu...@photospace.mil        Jay Way 
9
+-2130269306    false   10      30342   -18732  1461226453      -1257020753     
-10751.815      3.44246067782915E8      2456538047280540.838    
37394928326629689.946   2022-11-28      2022-05-04T20:40:19     2022-08-25      
2022-03-18T10:17:35     179.198.200.96  eful...@skynoodle.com   Tennyson Street 
83
+-2122709724    true    10      -8985   -30620  -1375603501     631094037       
14711.055       -1.210030062083139E9    96220820029888063.156   
42161382030214480.728   2022-05-28      2023-01-03T20:44:27     2022-06-11      
2022-07-26T22:49:22     13.249.135.222  udi...@shufflebeat.name Riverside 
Parkway 72
+-2117749737    false   10      26335   30644   1841596444      283308539       
18848.148       3.5339747538014E8       11924963560520504.166   
28287350935413049.601   2022-08-01      2022-04-21T02:28:54     2022-02-27      
2022-09-02T17:11:17     183.108.102.1   phan...@cogibox.com     Maple Wood 
Street 40
+-2113239713    false   10      27624   31311   711781944       -1838033894     
-12299.482      -1.88263132184351E9     9480201396831049.605    
52114965946122870.302   2022-06-11      2022-08-31T08:54:30     2022-03-26      
2023-01-08T23:28:27     200.161.156.176 e...@buzzster.net       Westport Drive 
82
+-2107773486    false   10      27096   10368   1579374450      1370327646      
-15339.031      2.110010890135424E9     54514853031265543.378   
38546969634312019.180   2022-12-31      2022-10-07T10:18:27     2022-10-01      
2022-07-09T11:41:11     121.120.227.53  juliad...@plambee.com   Sugar Crossing 
43
+-2107242025    true    10      25215   26566   1292568651      -2126795906     
11912.074       -2.140044503516609E9    98695561934257164.368   
18845397264645075.775   2022-05-21      2022-09-24T23:00:21     2022-02-12      
2022-11-24T19:17:03     141.226.90.50   annagonza...@eimbee.mil Cody Street 78
+-2106969609    true    10      29572   16738   1736115820      -957295886      
-13319.206      -1.333603562816737E9    91224478600376111.942   
69457425159617037.453   2022-09-06      2022-05-08T19:52:36     2022-04-05      
2022-08-17T19:23:31     222.79.139.99   walter...@voomm.net     Oxford Alley 77
+-2102307005    true    10      -23674  24613   -1810828490     -47095409       
-14686.167      2.072108685694799E9     39847820962230526.125   
584354832299375.156     2022-03-27      2022-02-11T13:46:06     2022-12-25      
2022-11-28T09:37:49     213.146.33.250  juliasimm...@zazio.info Eagle Crest 
Terrace 84
+
diff --git a/regression-test/suites/point_query_p0/load.groovy 
b/regression-test/suites/point_query_p0/load.groovy
new file mode 100644
index 0000000000..7ac12d0c35
--- /dev/null
+++ b/regression-test/suites/point_query_p0/load.groovy
@@ -0,0 +1,101 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+import org.codehaus.groovy.runtime.IOGroovyMethods
+
+suite("test_point_query_load", "p0") {
+
+    def dataFile = 
"""${getS3Url()}/regression/datatypes/test_scalar_types_10w.csv"""
+
+    // define dup key table1
+    def testTable = "tbl_scalar_types_dup"
+    sql "DROP TABLE IF EXISTS ${testTable} FORCE"
+    sql """
+        CREATE TABLE IF NOT EXISTS ${testTable} (
+            `k1` bigint(11) NULL,
+            `c_bool` boolean NULL,
+            `c_tinyint` tinyint(4) NULL,
+            `c_smallint` smallint(6) NULL,
+            `c_int` int(11) NULL,
+            `c_bigint` bigint(20) NULL,
+            `c_largeint` largeint(40) NULL,
+            `c_float` float NULL,
+            `c_double` double NULL,
+            `c_decimal` decimal(20, 3) NULL,
+            `c_decimalv3` decimalv3(20, 3) NULL,
+            `c_date` date NULL,
+            `c_datetime` datetime NULL,
+            `c_datev2` datev2 NULL,
+            `c_datetimev2` datetimev2(0) NULL,
+            `c_char` char(15) NULL,
+            `c_varchar` varchar(100) NULL,
+            `c_string` text NULL
+        ) ENGINE=OLAP
+        DUPLICATE KEY(`k1`)
+        COMMENT 'OLAP'
+        DISTRIBUTED BY HASH(`k1`) BUCKETS 10
+        PROPERTIES("replication_num" = "1", "store_row_column" = "true");
+        """
+
+    // load data
+    streamLoad {
+        table testTable
+        file dataFile
+        time 60000
+
+        check { result, exception, startTime, endTime ->
+            if (exception != null) {
+                throw exception
+            }
+            log.info("Stream load result: ${result}".toString())
+            def json = parseJson(result)
+            assertEquals(100000, json.NumberTotalRows)
+            assertEquals(100000, json.NumberLoadedRows)
+        }
+    }
+    createMV ("""CREATE MATERIALIZED VIEW mv_${testTable} AS SELECT c_tinyint, 
c_bool, k1, c_smallint, c_int, c_bigint, c_largeint, c_float, c_double,  
c_decimal, c_decimalv3, c_date, c_datetime, c_datev2, c_datetimev2, c_char, 
c_varchar, c_string FROM ${testTable} ORDER BY c_tinyint, c_bool, k1""")
+
+    sql "set topn_opt_limit_threshold = 100"
+    explain {
+        sql("SELECT * from ${testTable} where c_tinyint = 10 order by 1, 2, 3 
limit 10")
+        contains "(mv_${testTable})"
+        contains "OPT TWO PHASE"
+    }
+    qt_sql "SELECT * from ${testTable} order by 1, 2, 3 limit 10"
+    qt_sql "SELECT * from ${testTable} where c_tinyint = 10 order by 1, 2, 3 
limit 10 "
+
+    sql """
+          ALTER table ${testTable} MODIFY COLUMN c_int BIGINT;
+          """
+    def getJobState = { tableName ->
+          def jobStateResult = sql """  SHOW ALTER TABLE COLUMN WHERE 
IndexName='${tableName}' ORDER BY createtime DESC LIMIT 1 """
+          return jobStateResult[0][9]
+     }
+    int max_try_time = 100
+     while (max_try_time--){
+          String result = getJobState(testTable)
+          if (result == "FINISHED") {
+               break
+          } else {
+               sleep(2000)
+               if (max_try_time < 1){
+                    assertEquals(1,2)
+               }
+          }
+     }
+    sql "INSERT INTO ${testTable} SELECT * from ${testTable}"
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to