85 lines
3.9 KiB
C++
85 lines
3.9 KiB
C++
/**
|
|
* Copyright (c) 2024 OceanBase
|
|
* OceanBase CE is licensed under Mulan PubL v2.
|
|
* You can use this software according to the terms and conditions of the Mulan PubL v2.
|
|
* You may obtain a copy of Mulan PubL v2 at:
|
|
* http://license.coscl.org.cn/MulanPubL-2.0
|
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
* See the Mulan PubL v2 for more details.
|
|
*/
|
|
|
|
#include "share/ob_dml_sql_splicer.h"
|
|
#include <gtest/gtest.h>
|
|
#define USING_LOG_PREFIX STORAGE
|
|
#define protected public
|
|
#define private public
|
|
|
|
namespace oceanbase
|
|
{
|
|
namespace unittest
|
|
{
|
|
|
|
TEST(ObPTSqlSplicer, batch) {
|
|
int ret = OB_SUCCESS;
|
|
share::ObDMLSqlSplicer splicer;
|
|
ObSqlString sql;
|
|
ObString result("INSERT INTO tname (gmt_modified, gmt_create, tenant_id, tablet_id, svr_ip, svr_port, ls_id, compaction_scn, row_count, data_checksum, column_checksums, b_column_checksums) VALUES "
|
|
"(now(6),now(6),1004,200001,'127.0.0.1',1001,1001,1234567890,100,1234567,'column_checksums-01','b_column_checksums-01'), "
|
|
"(now(6),now(6),1004,200001,'127.0.0.2',1002,1001,1234567890,100,1234567,'column_checksums-02','b_column_checksums-02'), "
|
|
"(now(6),now(6),1004,200001,'127.0.0.3',1003,1001,1234567890,100,1234567,'column_checksums-03','b_column_checksums-03') "
|
|
"ON DUPLICATE KEY UPDATE "
|
|
"gmt_modified=VALUES(gmt_modified),"
|
|
"gmt_create=VALUES(gmt_create),"
|
|
"tenant_id=VALUES(tenant_id),"
|
|
"tablet_id=VALUES(tablet_id),"
|
|
"svr_ip=VALUES(svr_ip),"
|
|
"svr_port=VALUES(svr_port),"
|
|
"ls_id=VALUES(ls_id),"
|
|
"compaction_scn=VALUES(compaction_scn),"
|
|
"row_count=VALUES(row_count),"
|
|
"data_checksum=VALUES(data_checksum),"
|
|
"column_checksums=VALUES(column_checksums),"
|
|
"b_column_checksums=VALUES(b_column_checksums)");
|
|
|
|
ObAddr ips[3];
|
|
ObString column_checksums[3] = {"column_checksums-01", "column_checksums-02", "column_checksums-03"};
|
|
ObString b_column_checksums[3] = {"b_column_checksums-01", "b_column_checksums-02", "b_column_checksums-03"};
|
|
ASSERT_TRUE(ips[0].set_ip_addr("127.0.0.1", 1001));
|
|
ASSERT_TRUE(ips[1].set_ip_addr("127.0.0.2", 1002));
|
|
ASSERT_TRUE(ips[2].set_ip_addr("127.0.0.3", 1003));
|
|
char ip[OB_MAX_SERVER_ADDR_SIZE] = "";
|
|
|
|
for (int64_t i = 0; i < 3; i++) {
|
|
ASSERT_TRUE(ips[i].ip_to_string(ip, sizeof(ip)));
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_gmt_modified());
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_gmt_create());
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_pk_column("tenant_id", 1004));
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_pk_column("tablet_id", 200001));
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_pk_column("svr_ip", ip));
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_pk_column("svr_port", ips[i].get_port()));
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_pk_column("ls_id", 1001));
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_column("compaction_scn", 1234567890));
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_column("row_count", 100));
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_column("data_checksum", 1234567));
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_column("column_checksums", column_checksums[i]));
|
|
ASSERT_EQ(OB_SUCCESS, splicer.add_column("b_column_checksums", b_column_checksums[i]));
|
|
ASSERT_EQ(OB_SUCCESS, splicer.finish_row());
|
|
}
|
|
ASSERT_EQ(OB_SUCCESS, splicer.splice_batch_insert_update_sql("tname", sql));
|
|
LOG_INFO("finish splice batch insert update sql", K(ret), K(sql), K(result));
|
|
ASSERT_EQ(0, result.compare(sql.string()));
|
|
}
|
|
|
|
} // end unittest
|
|
} // end namespace oceanbase
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
oceanbase::common::ObLogger::get_logger().set_log_level("INFO");
|
|
OB_LOGGER.set_log_level("INFO");
|
|
testing::InitGoogleTest(&argc, argv);
|
|
return RUN_ALL_TESTS();
|
|
}
|