diff --git a/config/mysql.xml b/config/mysql.xml
index 93ef1639..a24c0040 100755
--- a/config/mysql.xml
+++ b/config/mysql.xml
@@ -12,6 +12,7 @@
client-cert.pem
client-key.pem
server
+ 2881
@@ -46,10 +47,13 @@
1
root
+ tpch
mysql
tpch
1
- innodb
+ false
+ 1
+ innodb
1
diff --git a/scripts/tcl/oceanbase/tproch/ob_tproch.sh b/scripts/tcl/oceanbase/tproch/ob_tproch.sh
new file mode 100755
index 00000000..d3d294bf
--- /dev/null
+++ b/scripts/tcl/oceanbase/tproch/ob_tproch.sh
@@ -0,0 +1,16 @@
+export TMP=`pwd`/TMP
+mkdir -p $TMP
+
+echo "BUILD HAMMERDB SCHEMA"
+echo "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"
+./hammerdbcli auto ./scripts/tcl/oceanbase/tproch/ob_tproch_buildschema.tcl
+echo "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"
+echo "RUN HAMMERDB TEST"
+echo "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"
+./hammerdbcli auto ./scripts/tcl/oceanbase/tproch/ob_tproch_run.tcl
+echo "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"
+echo "DROP HAMMERDB SCHEMA"
+./hammerdbcli auto ./scripts/tcl/oceanbase/tproch/ob_tproch_deleteschema.tcl
+echo "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"
+echo "HAMMERDB RESULT"
+./hammerdbcli auto ./scripts/tcl/oceanbase/tproch/ob_tproch_result.tcl
diff --git a/scripts/tcl/oceanbase/tproch/ob_tproch_buildschema.tcl b/scripts/tcl/oceanbase/tproch/ob_tproch_buildschema.tcl
new file mode 100644
index 00000000..356138dd
--- /dev/null
+++ b/scripts/tcl/oceanbase/tproch/ob_tproch_buildschema.tcl
@@ -0,0 +1,22 @@
+#!/bin/tclsh
+
+puts "SETTING CONFIGURATION"
+dbset db mysql
+dbset bm TPC-H
+
+diset connection mysql_host 127.0.0.1
+diset connection mysql_port 2881
+diset connection mysql_socket /tmp/mysql.sock
+
+diset tpch mysql_scale_fact 1
+diset tpch mysql_num_tpch_threads [ numberOfCPUs ]
+diset tpch mysql_tpch_user root
+diset tpch mysql_tpch_pass 123
+diset tpch mysql_tpch_dbase tpch
+diset tpch mysql_tpch_obcompat true
+diset tpch ob_partition_num 1
+diset tpch ob_tenant_name hmdb
+diset tpch mysql_tpch_storage_engine innodb
+puts "SCHEMA BUILD STARTED"
+buildschema
+puts "SCHEMA BUILD COMPLETED"
diff --git a/scripts/tcl/oceanbase/tproch/ob_tproch_deleteschema.tcl b/scripts/tcl/oceanbase/tproch/ob_tproch_deleteschema.tcl
new file mode 100644
index 00000000..fe4f0135
--- /dev/null
+++ b/scripts/tcl/oceanbase/tproch/ob_tproch_deleteschema.tcl
@@ -0,0 +1,19 @@
+#!/bin/tclsh
+
+puts "SETTING CONFIGURATION"
+dbset db mysql
+dbset bm TPC-H
+
+diset connection mysql_host 127.0.0.1
+diset connection mysql_port 2881
+diset connection mysql_socket /tmp/mysql.sock
+
+diset tpch mysql_tpch_user root
+diset tpch mysql_tpch_pass 123
+diset tpch mysql_tpch_dbase tpch
+diset tpch mysql_tpch_obcompat true
+diset tpch ob_partition_num 1
+diset ob_tenant_name hmdb
+puts " DROP SCHEMA STARTED"
+deleteschema
+puts "DROP SCHEMA COMPLETED"
diff --git a/scripts/tcl/oceanbase/tproch/ob_tproch_result.tcl b/scripts/tcl/oceanbase/tproch/ob_tproch_result.tcl
new file mode 100644
index 00000000..f1a7e97a
--- /dev/null
+++ b/scripts/tcl/oceanbase/tproch/ob_tproch_result.tcl
@@ -0,0 +1,3 @@
+set tmpdir $::env(TMP)
+set ::outputfile $tmpdir/mysql_tproch
+source ./scripts/tcl/generic/generic_tproch_result.tcl
diff --git a/scripts/tcl/oceanbase/tproch/ob_tproch_run.tcl b/scripts/tcl/oceanbase/tproch/ob_tproch_run.tcl
new file mode 100644
index 00000000..31fdd13c
--- /dev/null
+++ b/scripts/tcl/oceanbase/tproch/ob_tproch_run.tcl
@@ -0,0 +1,30 @@
+#!/bin/tclsh
+
+set tmpdir $::env(TMP)
+puts "SETTING CONFIGURATION"
+dbset db mysql
+dbset bm TPC-H
+
+diset mysql_host 127.0.0.1
+diset connection mysql_port 2881
+diset connection mysql_socket /tmp/mysql.sock
+
+diset tpch mysql_scale_fact 1
+diset tpch mysql_tpch_user root
+diset tpch mysql_tpch_pass 123
+diset tpch mysql_tpch_dbase tpch
+diset tpch mysql_tpch_obcompat true
+diset tpch ob_partition_num 1
+diset tpch ob_tenant_name hmdb
+diset tpch mysql_tpch_storage_engine innodb
+
+loadscript
+puts "TEST STARTED"
+vuset vu 1
+vucreate
+set jobid [ vurun ]
+vudestroy
+puts "TEST COMPLETE"
+set of [ open $tmpdir/mysql_tproch w ]
+puts $of $jobid
+close $of
diff --git a/src/mysql/mysqlolap.tcl b/src/mysql/mysqlolap.tcl
index b845c2d2..1979680f 100755
--- a/src/mysql/mysqlolap.tcl
+++ b/src/mysql/mysqlolap.tcl
@@ -34,10 +34,28 @@ set library $library
if [catch {::tcl::tm::path add modules} ] { error "Failed to find modules directory" }
if [catch {package require tpchcommon} ] { error "Failed to load tpch common functions" } else { namespace import tpchcommon::* }
-proc GatherStatistics { mysql_handler } {
+proc GatherStatistics { mysql_handler is_oceanbase partition_num} {
puts "GATHERING SCHEMA STATISTICS"
- set sql(1) "analyze table ORDERS, PARTSUPP, CUSTOMER, PART, SUPPLIER, NATION, REGION, LINEITEM"
- mysqlexec $mysql_handler $sql(1)
+ if { $is_oceanbase == "true" } {
+ set sql(1) "set _force_parallel_query_dop = $partition_num;"
+ set sql(2) "set GLOBAL ob_query_timeout = 20000000000;"
+ set sql(3) "analyze table LINEITEM partition(LINEITEM) compute statistics for all columns size auto;"
+ set sql(4) "analyze table orders partition(orders) compute statistics for all columns size auto;"
+ set sql(5) "analyze table partsupp partition(partsupp) compute statistics for all columns size auto;"
+ set sql(6) "analyze table part partition(part) compute statistics for all columns size auto;"
+ set sql(7) "analyze table customer partition(customer) compute statistics for all columns size auto;"
+ set sql(8) "analyze table supplier partition(supplier) compute statistics for all columns size auto;"
+ set sql(9) "analyze table nation compute statistics for all columns size auto;"
+ set sql(10) "analyze table region compute statistics for all columns size auto;"
+
+ for { set i 1 } { $i <= 8 } { incr i } {
+ puts "$sql($i).."
+ mysqlexec $mysql_handler $sql($i)
+ }
+ } else {
+ set sql(1) "analyze table ORDERS, PARTSUPP, CUSTOMER, PART, SUPPLIER, NATION, REGION, LINEITEM"
+ mysqlexec $mysql_handler $sql(1)
+ }
return
}
@@ -49,21 +67,74 @@ proc chk_socket { host socket } {
}
}
-proc ConnectToMySQL { host port socket ssl_options user password } {
+proc PrepareOceanbase { host port socket ssl_options user password ob_tenant_name} {
+ puts "Prepare Oceanbase"
+ global mysqlstatus
+ #ssl_options is variable length so build a connectstring
+ set use_socket "false"
+ append connectstring " -host $host -port $port"
+
+ foreach key [ dict keys $ssl_options ] {
+ append connectstring " $key [ dict get $ssl_options $key ] "
+ }
+
+ append connectstring " -user $user@sys -password $password"
+ set login_command "mysqlconnect [ dict get $connectstring ]"
+
+ puts "login_command: $login_command"
+ #eval the login command
+ if [catch {set ob_handler [eval $login_command]}] {
+ if $use_socket {
+ puts "the local socket connection to $socket could not be established"
+ } else {
+ puts "the tcp connection to $host:$port could not be established"
+ }
+ set connected "false"
+ } else {
+ set connected "true"
+ }
+ if {$connected} {
+ mysql::autocommit $ob_handler 0
+ catch {set ssl_status [ mysql::sel $ob_handler "show session status like 'ssl_cipher'" -list ]}
+ if { [ info exists ssl_status ] } {
+ puts [ join $ssl_status ]
+ }
+ set sql(1) "alter system set enable_sql_extension=True tenant=$ob_tenant_name;"
+ set sql(2) "alter system set enable_perf_event=True;"
+ for { set i 1 } { $i <= 2 } { incr i } {
+ puts "$sql($i)"
+ mysqlexec $ob_handler $sql($i)
+ }
+ puts "Oceanbase system parameters is ready"
+ return $ob_handler
+ } else {
+ error $mysqlstatus(message)
+ return
+ }
+}
+
+proc ConnectToMySQL { host port socket ssl_options user password is_oceanbase ob_tenant_name} {
global mysqlstatus
#ssl_options is variable length so build a connectstring
- if { [ chk_socket $host $socket ] eq "TRUE" } {
+ if { ($is_oceanbase == "false" ) && ([ chk_socket $host $socket ] eq "TRUE")} {
set use_socket "true"
append connectstring " -socket $socket"
} else {
set use_socket "false"
append connectstring " -host $host -port $port"
+ #if is_oceanbase is false and chk_socket is false we don't want to change the username
+ if { $is_oceanbase == "true" } {
+ set user "$user@$ob_tenant_name"
+ }
}
+
foreach key [ dict keys $ssl_options ] {
append connectstring " $key [ dict get $ssl_options $key ] "
- }
+ }
+
append connectstring " -user $user -password $password"
set login_command "mysqlconnect [ dict get $connectstring ]"
+
#eval the login command
if [catch {set mysql_handler [eval $login_command]}] {
if $use_socket {
@@ -213,7 +284,122 @@ ENGINE = $mysql_tpch_storage_engine"
return
}
+proc CreateOBTables { mysql_handler partitions_num } {
+ puts "CREATING OceanBase TPCH TABLES"
+ set sql(1) "CREATE TABLE IF NOT EXISTS `ORDERS` (
+`O_ORDERDATE` DATE NULL,
+`O_ORDERKEY` INT NOT NULL,
+`O_CUSTKEY` INT NOT NULL,
+`O_ORDERPRIORITY` CHAR(15) BINARY NULL,
+`O_SHIPPRIORITY` INT NULL,
+`O_CLERK` CHAR(15) BINARY NULL,
+`O_ORDERSTATUS` CHAR(1) BINARY NULL,
+`O_TOTALPRICE` DECIMAL(10,2) NULL,
+`O_COMMENT` VARCHAR(79) BINARY NULL,
+PRIMARY KEY (`O_ORDERKEY`))
+partition by key(O_ORDERKEY) partitions $partitions_num;
+create index I_O_ORDERDATE on orders(O_ORDERDATE) local;"
+
+ set sql(2) "CREATE TABLE IF NOT EXISTS `CUSTOMER` (
+C_CUSTKEY INT NOT NULL,
+C_MKTSEGMENT CHAR(10) BINARY NULL,
+C_NATIONKEY INT NULL,
+C_NAME VARCHAR(25) BINARY NULL,
+C_ADDRESS VARCHAR(40) BINARY NULL,
+C_PHONE CHAR(15) BINARY NULL,
+C_ACCTBAL DECIMAL(10,2) NULL,
+C_COMMENT VARCHAR(118) BINARY NULL,
+PRIMARY KEY (`C_CUSTKEY`))
+partition by key(C_CUSTKEY) partitions $partitions_num;"
+
+ set sql(3) "CREATE TABLE IF NOT EXISTS `PART` (
+P_PARTKEY INT NOT NULL,
+P_TYPE VARCHAR(25) BINARY NULL,
+P_SIZE INT NULL,
+P_BRAND CHAR(10) BINARY NULL,
+P_NAME VARCHAR(55) BINARY NULL,
+P_CONTAINER CHAR(10) BINARY NULL,
+P_MFGR CHAR(25) BINARY NULL,
+P_RETAILPRICE DECIMAL(10,2) NULL,
+P_COMMENT VARCHAR(23) BINARY NULL,
+PRIMARY KEY (`P_PARTKEY`))
+partition by key(P_PARTKEY) partitions $partitions_num;"
+
+ set sql(4) "CREATE TABLE IF NOT EXISTS `SUPPLIER` (
+S_SUPPKEY INT NOT NULL,
+S_NATIONKEY INT NULL,
+S_COMMENT VARCHAR(102) BINARY NULL,
+S_NAME CHAR(25) BINARY NULL,
+S_ADDRESS VARCHAR(40) BINARY NULL,
+S_PHONE CHAR(15) BINARY NULL,
+S_ACCTBAL DECIMAL(10,2) NULL,
+PRIMARY KEY (`S_SUPPKEY`))
+partition by key(S_SUPPKEY) partitions $partitions_num;"
+
+ set sql(5) "CREATE TABLE IF NOT EXISTS `PARTSUPP` (
+PS_PARTKEY INT NOT NULL,
+PS_SUPPKEY INT NOT NULL,
+PS_SUPPLYCOST INT NOT NULL,
+PS_AVAILQTY INT NULL,
+PS_COMMENT VARCHAR(199) BINARY NULL,
+PRIMARY KEY (`PS_PARTKEY`,`PS_SUPPKEY`),
+INDEX PARTSUPP_PART_FKIDX (`PS_PARTKEY`),
+INDEX PARTSUPP_SUPPLIER_FKIDX (`PS_SUPPKEY`),
+FOREIGN KEY (PS_PARTKEY) REFERENCES PART(`P_PARTKEY`),
+FOREIGN KEY (PS_SUPPKEY) REFERENCES SUPPLIER(`S_SUPPKEY`))
+partition by key(PS_PARTKEY) partitions $partitions_num;"
+
+ set sql(6) "CREATE TABLE IF NOT EXISTS `NATION` (
+N_NATIONKEY INT NOT NULL,
+N_NAME CHAR(25) BINARY NULL,
+N_REGIONKEY INT NULL,
+N_COMMENT VARCHAR(152) BINARY NULL,
+PRIMARY KEY (`N_NATIONKEY`));"
+
+ set sql(7) "CREATE TABLE IF NOT EXISTS `REGION` (
+R_REGIONKEY INT NOT NULL,
+R_NAME CHAR(25) BINARY NULL,
+R_COMMENT VARCHAR(152) BINARY NULL,
+PRIMARY KEY (`R_REGIONKEY`));"
+
+ set sql(8) "CREATE TABLE IF NOT EXISTS `LINEITEM` (
+L_SHIPDATE DATE NULL,
+L_ORDERKEY BIGINT NOT NULL,
+L_DISCOUNT DECIMAL(10,2) NOT NULL,
+L_EXTENDEDPRICE DECIMAL(10,2) NOT NULL,
+L_SUPPKEY INT NOT NULL,
+L_QUANTITY INT NOT NULL,
+L_RETURNFLAG CHAR(1) BINARY NULL,
+L_PARTKEY INT NOT NULL,
+L_LINESTATUS CHAR(1) BINARY NULL,
+L_TAX DECIMAL(10,2) NOT NULL,
+L_COMMITDATE DATE NULL,
+L_RECEIPTDATE DATE NULL,
+L_SHIPMODE CHAR(10) BINARY NULL,
+L_LINENUMBER INT NOT NULL,
+L_SHIPINSTRUCT CHAR(25) BINARY NULL,
+L_COMMENT VARCHAR(44) BINARY NULL,
+PRIMARY KEY (`L_ORDERKEY`, `L_LINENUMBER`))
+partition by key (L_ORDERKEY) partitions $partitions_num;
+create index I_L_ORDERKEY on LINEITEM(L_ORDERKEY) local;
+create index I_L_SHIPDATE on LINEITEM(L_SHIPDATE) local;"
+
+ for { set i 1 } { $i <= 8 } { incr i } {
+ set regex_pattern {^CREATE TABLE IF NOT EXISTS `([^`]*)`}
+
+ if {[regexp $regex_pattern $sql($i) match submatch]} {
+ puts "CREATE TABLE $submatch"
+ } else {
+ puts "can not find table for $sql($i)"
+ }
+ mysqlexec $mysql_handler $sql($i)
+ puts "TABLE $submatch is created"
+ }
+ return
+}
+
proc UpdateHeatwaveSchema { mysql_handler } {
+ puts "MySQL UpdateHeatwaveSchema"
# https://github.com/oracle/heatwave-tpch/blob/0e4ad91b3f17b5a8fd9f099c94b223d861c09846/HeatWave/secondary_load.sql
# With updated varchar values to be compatible with HammerDB schema
set sql(1) "
@@ -442,7 +628,7 @@ proc mk_part { mysql_handler start_rows end_rows scale_factor } {
return
}
-proc mk_order { mysql_handler start_rows end_rows upd_num scale_factor } {
+proc mk_order { mysql_handler start_rows end_rows upd_num scale_factor oceanbase_db} {
set refresh 100
set delta 1
set L_PKEY_MAX [ expr {200000 * $scale_factor} ]
@@ -510,7 +696,22 @@ proc mk_order { mysql_handler start_rows end_rows upd_num scale_factor } {
incr ocnt
set lstatus "F"
} else { set lstatus "O" }
- append lineit_val_list (str_to_date('$lsdate','%Y-%M-%d'),'$lokey', '$ldiscount', '$leprice', '$lsuppkey', '$lquantity', '$lrflag', '$lpartkey', '$lstatus', '$ltax', str_to_date('$lcdate','%Y-%M-%d'), str_to_date('$lrdate','%Y-%M-%d'), '$lsmode', '$llcnt', '$linstruct', '$lcomment')
+
+ if { $oceanbase_db eq "true" } {
+ set scanned [clock scan $lsdate -format "%Y-%b-%d"]
+ set lsdate [clock format $scanned -format "%Y-%m-%d"]
+
+ set scanned [clock scan $lrdate -format "%Y-%b-%d"]
+ set lrdate [clock format $scanned -format "%Y-%m-%d"]
+
+ set scanned [clock scan $lcdate -format "%Y-%b-%d"]
+ set lcdate [clock format $scanned -format "%Y-%m-%d"]
+
+ append lineit_val_list ('$lsdate','$lokey', '$ldiscount', '$leprice', '$lsuppkey', '$lquantity', '$lrflag', '$lpartkey', '$lstatus', '$ltax', '$lcdate', '$lrdate', '$lsmode', '$llcnt', '$linstruct', '$lcomment')
+ } else {
+ append lineit_val_list (str_to_date('$lsdate','%Y-%M-%d'),'$lokey', '$ldiscount', '$leprice', '$lsuppkey', '$lquantity', '$lrflag', '$lpartkey', '$lstatus', '$ltax', str_to_date('$lcdate','%Y-%M-%d'), str_to_date('$lrdate','%Y-%M-%d'), '$lsmode', '$llcnt', '$linstruct', '$lcomment')
+ }
+
if { $l < [ expr $lcnt - 1 ] } {
append lineit_val_list ,
}
@@ -518,7 +719,15 @@ proc mk_order { mysql_handler start_rows end_rows upd_num scale_factor } {
set totalprice [ expr double($totalprice) / 100 ]
if { $ocnt > 0} { set orderstatus "P" }
if { $ocnt == $lcnt } { set orderstatus "F" }
- append order_val_list (str_to_date('$date','%Y-%M-%d'), '$okey', '$custkey', '$opriority', '$spriority', '$clerk', '$orderstatus', '$totalprice', '$comment')
+
+ if { $oceanbase_db eq "true" } {
+ set scanned [clock scan $date -format "%Y-%b-%d"]
+ set date [clock format $scanned -format "%Y-%m-%d"]
+ append order_val_list ('$date', '$okey', '$custkey', '$opriority', '$spriority', '$clerk', '$orderstatus', '$totalprice', '$comment')
+ } else {
+ append order_val_list (str_to_date('$date','%Y-%M-%d'), '$okey', '$custkey', '$opriority', '$spriority', '$clerk', '$orderstatus', '$totalprice', '$comment')
+ }
+
if { ![ expr {$i % 1000} ] || $i eq $end_rows } {
mysql::exec $mysql_handler "INSERT INTO LINEITEM (`L_SHIPDATE`, `L_ORDERKEY`, `L_DISCOUNT`, `L_EXTENDEDPRICE`, `L_SUPPKEY`, `L_QUANTITY`, `L_RETURNFLAG`, `L_PARTKEY`, `L_LINESTATUS`, `L_TAX`, `L_COMMITDATE`, `L_RECEIPTDATE`, `L_SHIPMODE`, `L_LINENUMBER`, `L_SHIPINSTRUCT`, `L_COMMENT`) VALUES $lineit_val_list"
mysql::exec $mysql_handler "INSERT INTO ORDERS (`O_ORDERDATE`, `O_ORDERKEY`, `O_CUSTKEY`, `O_ORDERPRIORITY`, `O_SHIPPRIORITY`, `O_CLERK`, `O_ORDERSTATUS`, `O_TOTALPRICE`, `O_COMMENT`) VALUES $order_val_list"
@@ -538,7 +747,7 @@ proc mk_order { mysql_handler start_rows end_rows upd_num scale_factor } {
return
}
-proc do_tpch { host port socket ssl_options scale_fact user password db mysql_tpch_storage_engine num_vu } {
+proc do_tpch { host port socket ssl_options scale_fact user password db mysql_tpch_storage_engine num_vu oceanbase_db ob_partition_num ob_tenant_name} {
global mysqlstatus
global dist_names dist_weights weights dists weights
###############################################
@@ -590,16 +799,25 @@ proc do_tpch { host port socket ssl_options scale_fact user password db mysql_tp
}
if { $threaded eq "SINGLE-THREADED" || $threaded eq "MULTI-THREADED" && $myposition eq 1 } {
puts "CREATING [ string toupper $user ] SCHEMA"
- set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password ]
+ if { $oceanbase_db == "true" } {
+ PrepareOceanbase $host $port $socket $ssl_options $user $password $ob_tenant_name
+ }
+ set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password $oceanbase_db $ob_tenant_name]
+
CreateDatabase $mysql_handler $db
mysqluse $mysql_handler $db
mysql::autocommit $mysql_handler 0
# If storage_engine is set to heatwave, first, create the db schema using InnoDB and migrate it after data generation.
- if { [string equal -nocase $mysql_tpch_storage_engine "Heatwave" ] } {
- CreateTables $mysql_handler "InnoDB"
+ if {$oceanbase_db == "true" } {
+ CreateOBTables $mysql_handler $ob_partition_num
} else {
- CreateTables $mysql_handler $mysql_tpch_storage_engine
+ if { [string equal -nocase $mysql_tpch_storage_engine "Heatwave" ] } {
+ CreateTables $mysql_handler "InnoDB"
+ } else {
+ CreateTables $mysql_handler $mysql_tpch_storage_engine
+ }
}
+
if { $threaded eq "MULTI-THREADED" } {
tsv::set application load "READY"
puts "Loading REGION..."
@@ -632,8 +850,7 @@ proc do_tpch { host port socket ssl_options scale_fact user password db mysql_tp
puts "Loading REGION COMPLETE"
puts "Loading NATION..."
mk_nation $mysql_handler
- puts "Loading NATION COMPLETE"
- }}
+ puts "Loading NATION COMPLETE"}}
if { $threaded eq "SINGLE-THREADED" || $threaded eq "MULTI-THREADED" && $myposition != 1 } {
if { $threaded eq "MULTI-THREADED" } {
puts "Waiting for Monitor Thread..."
@@ -650,7 +867,7 @@ proc do_tpch { host port socket ssl_options scale_fact user password db mysql_tp
}
after 5000
}
- set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password ]
+ set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password $oceanbase_db $ob_tenant_name]
mysqluse $mysql_handler $db
mysqlexec $mysql_handler "SET FOREIGN_KEY_CHECKS = 0"
if { [ expr $myposition - 1 ] > $max_threads } { puts "No Data to Create"; return }
@@ -674,7 +891,7 @@ proc do_tpch { host port socket ssl_options scale_fact user password db mysql_tp
puts "Loading PART and PARTSUPP..."
mk_part $mysql_handler [ lindex $part_chunk 0 ] [ lindex $part_chunk 1 ] $scale_fact
puts "Loading ORDERS and LINEITEM..."
- mk_order $mysql_handler [ lindex $ord_chunk 0 ] [ lindex $ord_chunk 1 ] [ expr {$upd_num % 10000} ] $scale_fact
+ mk_order $mysql_handler [ lindex $ord_chunk 0 ] [ lindex $ord_chunk 1 ] [ expr {$upd_num % 10000} ] $scale_fact $oceanbase_db
puts "Loading TPCH TABLES COMPLETE"
puts "End:[ clock format [ clock seconds ] ]"
if { $threaded eq "MULTI-THREADED" } {
@@ -688,13 +905,13 @@ proc do_tpch { host port socket ssl_options scale_fact user password db mysql_tp
puts "Migrating data to Heatwave COMPLETE"
}
if { $threaded eq "SINGLE-THREADED" || $threaded eq "MULTI-THREADED" && $myposition eq 1 } {
- GatherStatistics $mysql_handler
+ GatherStatistics $mysql_handler $oceanbase_db $ob_partition_num
puts "[ string toupper $db ] SCHEMA COMPLETE"
return
}
}
}
- .ed_mainFrame.mainwin.textFrame.left.text fastinsert end "do_tpch $mysql_host $mysql_port $mysql_socket {$mysql_ssl_options} $mysql_scale_fact $mysql_tpch_user [ quotemeta $mysql_tpch_pass ] $mysql_tpch_dbase $mysql_tpch_storage_engine $mysql_num_tpch_threads"
+ .ed_mainFrame.mainwin.textFrame.left.text fastinsert end "do_tpch $mysql_host $mysql_port $mysql_socket {$mysql_ssl_options} $mysql_scale_fact $mysql_tpch_user [ quotemeta $mysql_tpch_pass ] $mysql_tpch_dbase $mysql_tpch_storage_engine $mysql_num_tpch_threads $mysql_tpch_obcompat $mysql_ob_partition_num $mysql_ob_tenant_name"
} else { return }
}
@@ -732,6 +949,8 @@ set refresh_on \"$mysql_refresh_on\" ;#First User does refresh function
set update_sets $mysql_update_sets ;#Number of sets of refresh function to complete
set trickle_refresh $mysql_trickle_refresh ;#time delay (ms) to trickle refresh function
set REFRESH_VERBOSE \"$mysql_refresh_verbose\" ;#report refresh function activity
+set tpch_obcompat \"$mysql_tpch_obcompat\" ;# Oceanbase compatible
+set ob_tenant_name \"$mysql_ob_tenant_name\" ;# Oceanbase tenant name
#EDITABLE OPTIONS##################################################
"
.ed_mainFrame.mainwin.textFrame.left.text fastinsert end {#LOAD LIBRARIES AND MODULES
@@ -760,21 +979,26 @@ proc chk_socket { host socket } {
}
}
-proc ConnectToMySQL { host port socket ssl_options user password db } {
+proc ConnectToMySQL { host port socket ssl_options user password db is_oceanbase ob_tenant_name} {
global mysqlstatus
#ssl_options is variable length so build a connectstring
- if { [ chk_socket $host $socket ] eq "TRUE" } {
+ if { ($is_oceanbase == "false" ) && ([ chk_socket $host $socket ] eq "TRUE") } {
set use_socket "true"
append connectstring " -socket $socket"
} else {
set use_socket "false"
append connectstring " -host $host -port $port"
+ #if is_oceanbase is false and chk_socket is false we don't want to change the username
+ if { $is_oceanbase == "true" } {
+ set user "$user@$ob_tenant_name"
+ }
}
foreach key [ dict keys $ssl_options ] {
append connectstring " $key [ dict get $ssl_options $key ] "
}
append connectstring " -user $user -password $password"
set login_command "mysqlconnect [ dict get $connectstring ]"
+ puts "login_command $login_command"
#eval the login command
if [catch {set mysql_handler [eval $login_command]}] {
if $use_socket {
@@ -927,8 +1151,8 @@ proc del_order_ref { mysql_handler upd_num scale_factor trickle_refresh REFRESH_
mysql::commit $mysql_handler
}
-proc do_refresh { host port socket ssl_options user password db scale_factor update_sets trickle_refresh REFRESH_VERBOSE RF_SET } {
- set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password $db ]
+proc do_refresh { host port socket ssl_options user password db scale_factor update_sets trickle_refresh REFRESH_VERBOSE RF_SET oceanbase_db ob_tenant_name} {
+ set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password $db $oceanbase_db $ob_tenant_name]
set upd_num 1
for { set set_counter 1 } {$set_counter <= $update_sets } {incr set_counter} {
if { [ tsv::get application abort ] } { break }
@@ -1211,10 +1435,10 @@ proc sub_query { query_no scale_factor myposition engine } {
}
#########################
#TPCH QUERY SETS PROCEDURE
-proc do_tpch { host port socket ssl_options user password db scale_factor RAISEERROR VERBOSE total_querysets myposition } {
+proc do_tpch { host port socket ssl_options user password db scale_factor RAISEERROR VERBOSE total_querysets myposition mysql_tpch_obcompat ob_tenant_name} {
global mysqlstatus
- set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password $db ]
-
+ set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password $db $mysql_tpch_obcompat $ob_tenant_name]
+
puts "Verifying the scale factor of the existing schema..."
set countsql "SELECT count(*) FROM SUPPLIER"
set count [ standsql $mysql_handler $countsql $RAISEERROR ]
@@ -1332,21 +1556,21 @@ if { $refresh_on } {
set trickle_refresh 0
set update_sets 1
set REFRESH_VERBOSE "false"
- do_refresh $host $port $socket $ssl_options $user $password $db $scale_factor $update_sets $trickle_refresh $REFRESH_VERBOSE RF1
- do_tpch $host $port $socket $ssl_options $user $password $db $scale_factor $RAISEERROR $VERBOSE $total_querysets 0
- do_refresh $host $port $socket $ssl_options $user $password $db $scale_factor $update_sets $trickle_refresh $REFRESH_VERBOSE RF2
+ do_refresh $host $port $socket $ssl_options $user $password $db $scale_factor $update_sets $trickle_refresh $REFRESH_VERBOSE RF1 $tpch_obcompat $ob_tenant_name
+ do_tpch $host $port $socket $ssl_options $user $password $db $scale_factor $RAISEERROR $VERBOSE $total_querysets 0 $tpch_obcompat $ob_tenant_name
+ do_refresh $host $port $socket $ssl_options $user $password $db $scale_factor $update_sets $trickle_refresh $REFRESH_VERBOSE RF2 $tpch_obcompat $ob_tenant_name
} else {
switch $myposition {
1 {
- do_refresh $host $port $socket $ssl_options $user $password $db $scale_factor $update_sets $trickle_refresh $REFRESH_VERBOSE BOTH
+ do_refresh $host $port $socket $ssl_options $user $password $db $scale_factor $update_sets $trickle_refresh $REFRESH_VERBOSE BOTH $tpch_obcompat $ob_tenant_name
}
default {
- do_tpch $host $port $socket $ssl_options $user $password $db $scale_factor $RAISEERROR $VERBOSE $total_querysets [ expr $myposition - 1 ]
+ do_tpch $host $port $socket $ssl_options $user $password $db $scale_factor $RAISEERROR $VERBOSE $total_querysets [ expr $myposition - 1 ] $tpch_obcompat $ob_tenant_name
}
}
}
} else {
- do_tpch $host $port $socket $ssl_options $user $password $db $scale_factor $RAISEERROR $VERBOSE $total_querysets $myposition
+ do_tpch $host $port $socket $ssl_options $user $password $db $scale_factor $RAISEERROR $VERBOSE $total_querysets $myposition $tpch_obcompat $ob_tenant_name
}}
}
@@ -1378,6 +1602,8 @@ set ssl_options {$mysql_ssl_options} ;# MySQL SSL/TLS options
set user \"$mysql_tpch_user\" ;# MySQL user
set password \"[ quotemeta $mysql_tpch_pass ]\" ;# Password for the MySQL user
set db \"$mysql_tpch_dbase\" ;# Database containing the TPC Schema
+set tpch_obcompat \"$mysql_tpch_obcompat\" ;# Oceanbase compatible
+set ob_tenant_name \"$mysql_ob_tenant_name\" ;# Oceanbase tenant name
#EDITABLE OPTIONS##################################################
"
.ed_mainFrame.mainwin.textFrame.left.text fastinsert end {#LOAD LIBRARIES AND MODULES
@@ -1407,15 +1633,19 @@ proc chk_socket { host socket } {
}
}
-proc ConnectToMySQL { host port socket ssl_options user password db } {
+proc ConnectToMySQL { host port socket ssl_options user password db is_oceanbase ob_tenant_name} {
global mysqlstatus
#ssl_options is variable length so build a connectstring
- if { [ chk_socket $host $socket ] eq "TRUE" } {
+ if { ($is_oceanbase == "false" ) && ([ chk_socket $host $socket ] eq "TRUE") } {
set use_socket "true"
append connectstring " -socket $socket"
} else {
set use_socket "false"
append connectstring " -host $host -port $port"
+ #if is_oceanbase is false and chk_socket is false we don't want to change the username
+ if { $is_oceanbase == "true" } {
+ set user "$user@$ob_tenant_name"
+ }
}
foreach key [ dict keys $ssl_options ] {
append connectstring " $key [ dict get $ssl_options $key ] "
@@ -1475,9 +1705,9 @@ proc get_query { query_no } {
}
#########################
#CLOUD ANALYTIC TPCH QUERY SETS PROCEDURE
-proc do_cloud { host port socket ssl_options user password db RAISEERROR VERBOSE } {
+proc do_cloud { host port socket ssl_options user password db RAISEERROR VERBOSE is_oceanbase ob_tenant_name} {
global mysqlstatus
- set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password $db ]
+ set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password $db $is_oceanbase $ob_tenant_name]
mysqlexec $mysql_handler "set session group_concat_max_len = 18446744073709551615"
unset -nocomplain qlist
set start [ clock seconds ]
@@ -1504,7 +1734,7 @@ proc do_cloud { host port socket ssl_options user password db RAISEERROR VERBOSE
}
#########################
#RUN CLOUD ANALYTIC TPC-H
-do_cloud $host $port $socket $ssl_options $user $password $db $RAISEERROR $VERBOSE}
+do_cloud $host $port $socket $ssl_options $user $password $db $RAISEERROR $VERBOSE $tpch_obcompat $ob_tenant_name}
}
proc delete_mysqltpch {} {
@@ -1547,15 +1777,19 @@ proc chk_socket { host socket } {
}
}
-proc ConnectToMySQL { host port socket ssl_options user password } {
+proc ConnectToMySQL { host port socket ssl_options user password is_oceanbase ob_tenant_name} {
global mysqlstatus
#ssl_options is variable length so build a connectstring
- if { [ chk_socket $host $socket ] eq "TRUE" } {
+ if { ($is_oceanbase == "false" ) && ([ chk_socket $host $socket ] eq "TRUE") } {
set use_socket "true"
append connectstring " -socket $socket"
} else {
set use_socket "false"
append connectstring " -host $host -port $port"
+ #if is_oceanbase is false and chk_socket is false we don't want to change the username
+ if { $is_oceanbase == "true" } {
+ set user "$user@$ob_tenant_name"
+ }
}
foreach key [ dict keys $ssl_options ] {
append connectstring " $key [ dict get $ssl_options $key ] "
@@ -1586,10 +1820,10 @@ proc ConnectToMySQL { host port socket ssl_options user password } {
}
}
-proc drop_schema { host port socket ssl_options user password dbase } {
+proc drop_schema { host port socket ssl_options user password dbase is_oceanbase ob_tenant_name} {
global mysqlstatus
- set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password ]
+ set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password $is_oceanbase $ob_tenant_name]
if {[ catch {mysqlexec $mysql_handler "drop database $dbase"} message ] } {
puts "$message"
} else {
@@ -1601,7 +1835,7 @@ proc drop_schema { host port socket ssl_options user password dbase } {
}
}
- .ed_mainFrame.mainwin.textFrame.left.text fastinsert end "drop_schema $mysql_host $mysql_port $mysql_socket {$mysql_ssl_options} $mysql_tpch_user [ quotemeta $mysql_tpch_pass ] $mysql_tpch_dbase"
+ .ed_mainFrame.mainwin.textFrame.left.text fastinsert end "drop_schema $mysql_host $mysql_port $mysql_socket {$mysql_ssl_options} $mysql_tpch_user [ quotemeta $mysql_tpch_pass ] $mysql_tpch_dbase $mysql_tpch_obcompat $mysql_ob_tenant_name"
} else { return }
}
@@ -1653,15 +1887,19 @@ proc chk_socket { host socket } {
}
}
-proc ConnectToMySQL { host port socket ssl_options user password } {
+proc ConnectToMySQL { host port socket ssl_options user password is_oceanbase ob_tenant_name } {
global mysqlstatus
#ssl_options is variable length so build a connectstring
- if { [ chk_socket $host $socket ] eq "TRUE" } {
+ if { ($is_oceanbase == "false" ) && ([ chk_socket $host $socket ] eq "TRUE") } {
set use_socket "true"
append connectstring " -socket $socket"
} else {
set use_socket "false"
append connectstring " -host $host -port $port"
+ #if is_oceanbase is false and chk_socket is false we don't want to change the username
+ if { $is_oceanbase == "true" } {
+ set user "$user@$ob_tenant_name"
+ }
}
foreach key [ dict keys $ssl_options ] {
append connectstring " $key [ dict get $ssl_options $key ] "
@@ -1692,11 +1930,11 @@ proc ConnectToMySQL { host port socket ssl_options user password } {
}
}
-proc check_tpch { host port socket ssl_options user password dbase scale_factor } {
+proc check_tpch { host port socket ssl_options user password dbase scale_factor is_oceanbase ob_tenant_name } {
global mysqlstatus
puts "Checking $dbase TPROC-H schema"
set tables [ dict create SUPPLIER [ expr {$scale_factor * 10000} ] CUSTOMER [ expr {$scale_factor * 150000} ] LINEITEM [ expr {$scale_factor * 6000000 * 0.99} ] NATION 25 ORDERS [ expr {$scale_factor * 1500000} ] PART [ expr {$scale_factor * 200000} ] PARTSUPP [ expr {$scale_factor * 800000} ] REGION 5 ]
- set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password ]
+ set mysql_handler [ ConnectToMySQL $host $port $socket $ssl_options $user $password $is_oceanbase $ob_tenant_name ]
#Check 1 Database Exists
puts "Check database"
set db_exists [ mysql::sel $mysql_handler "select schema_name from information_schema.schemata where schema_name = '$dbase'" -flatlist ]
@@ -1752,6 +1990,6 @@ proc check_tpch { host port socket ssl_options user password dbase scale_factor
return
}
}
- .ed_mainFrame.mainwin.textFrame.left.text fastinsert end "check_tpch $mysql_host $mysql_port $mysql_socket {$mysql_ssl_options} $mysql_tpch_user [ quotemeta $mysql_tpch_pass ] $mysql_tpch_dbase $mysql_scale_fact"
+ .ed_mainFrame.mainwin.textFrame.left.text fastinsert end "check_tpch $mysql_host $mysql_port $mysql_socket {$mysql_ssl_options} $mysql_tpch_user [ quotemeta $mysql_tpch_pass ] $mysql_tpch_dbase $mysql_scale_fact $mysql_tpch_obcompat $mysql_ob_tenant_name"
} else { return }
}
diff --git a/src/mysql/mysqlopt.tcl b/src/mysql/mysqlopt.tcl
index aba1a077..7b36c932 100755
--- a/src/mysql/mysqlopt.tcl
+++ b/src/mysql/mysqlopt.tcl
@@ -81,29 +81,31 @@ proc countmysqlopts { bm } {
set tcstamp $tc_log_timestamps
}}
setlocaltcountvars $configmysql 1
+ global default_mysql_port
+ set default_mysql_port $mysql_port
+ if { $mysql_port eq $mysql_oceanbase_port } { set default_mysql_port 3306 }
variable myoptsfields
if { $bm eq "TPC-C" } {
if {![string match windows $::tcl_platform(platform)]} {
set platform "lin"
- set mysqloptsfields [ dict create connection {mysql_host {.countopt.f1.e1 get} mysql_port {.countopt.f1.e2 get} mysql_socket {.countopt.f1.e2a get} mysql_ssl_ca {.countopt.f1.e2d get} mysql_ssl_cert {.countopt.f1.e2e get} mysql_ssl_key {.countopt.f1.e2f get} mysql_ssl_cipher {.countopt.f1.e2g get} mysql_ssl $mysql_ssl mysql_ssl_two_way $mysql_ssl_two_way mysql_ssl_linux_capath $mysql_ssl_linux_capath} tpcc {mysql_user {.countopt.f1.e3 get} mysql_pass {.countopt.f1.e4 get}} ]
+ set myoptsfields [ dict create connection {mysql_host {.countopt.f1.e1 get} mysql_port {.countopt.f1.e2 get} mysql_socket {.countopt.f1.e2a get} mysql_ssl_ca {.countopt.f1.e2d get} mysql_ssl_cert {.countopt.f1.e2e get} mysql_ssl_key {.countopt.f1.e2f get} mysql_ssl_cipher {.countopt.f1.e2g get} mysql_ssl $mysql_ssl mysql_ssl_two_way $mysql_ssl_two_way mysql_ssl_linux_capath $mysql_ssl_linux_capath} tpcc {mysql_user {.countopt.f1.e3 get} mysql_pass {.countopt.f1.e4 get}} ]
} else {
set platform "win"
- set mysqloptsfields [ dict create connection {mysql_host {.countopt.f1.e1 get} mysql_port {.countopt.f1.e2 get} mysql_socket {.countopt.f1.e2a get} mysql_ssl_ca {.countopt.f1.e2d get} mysql_ssl_cert {.countopt.f1.e2e get} mysql_ssl_key {.countopt.f1.e2f get} mysql_ssl_cipher {.countopt.f1.e2g get} mysql_ssl $mysql_ssl mysql_ssl_two_way $mysql_ssl_two_way mysql_ssl_windows_capath {$mysql_ssl_windows_capath}} tpcc {mysql_user {.countopt.f1.e3 get} mysql_pass {.countopt.f1.e4 get}} ]
+ set myoptsfields [ dict create connection {mysql_host {.countopt.f1.e1 get} mysql_port {.countopt.f1.e2 get} mysql_socket {.countopt.f1.e2a get} mysql_ssl_ca {.countopt.f1.e2d get} mysql_ssl_cert {.countopt.f1.e2e get} mysql_ssl_key {.countopt.f1.e2f get} mysql_ssl_cipher {.countopt.f1.e2g get} mysql_ssl $mysql_ssl mysql_ssl_two_way $mysql_ssl_two_way mysql_ssl_windows_capath {$mysql_ssl_windows_capath}} tpcc {mysql_user {.countopt.f1.e3 get} mysql_pass {.countopt.f1.e4 get}} ]
}
} else {
if {![string match windows $::tcl_platform(platform)]} {
set platform "lin"
- set mysqloptsfields [ dict create connection {mysql_host {.countopt.f1.e1 get} mysql_port {.countopt.f1.e2 get} mysql_socket {.countopt.f1.e2a get} mysql_ssl_ca {.countopt.f1.e2d get} mysql_ssl_cert {.countopt.f1.e2e get} mysql_ssl_key {.countopt.f1.e2f get} mysql_ssl_cipher {.countopt.f1.e2g get} mysql_ssl $mysql_ssl mysql_ssl_two_way $mysql_ssl_two_way mysql_ssl_linux_capath $mysql_ssl_linux_capath} tpch {mysql_tpch_user {.countopt.f1.e3 get} mysql_tpch_pass {.countopt.f1.e4 get}} ]
+ set myoptsfields [ dict create connection {mysql_host {.countopt.f1.e1 get} mysql_port {.countopt.f1.e2 get} mysql_socket {.countopt.f1.e2a get} mysql_ssl_ca {.countopt.f1.e2d get} mysql_ssl_cert {.countopt.f1.e2e get} mysql_ssl_key {.countopt.f1.e2f get} mysql_ssl_cipher {.countopt.f1.e2g get} mysql_ssl $mysql_ssl mysql_ssl_two_way $mysql_ssl_two_way mysql_ssl_linux_capath $mysql_ssl_linux_capath mysql_oceanbase_port $mysql_oceanbase_port} tpch {mysql_tpch_user {.countopt.f1.e3 get} mysql_tpch_pass {.countopt.f1.e4 get} mysql_tpch_obcompat $mysql_tpch_obcompat mysql_ob_tenant_name $mysql_ob_tenant_name} ]
} else {
set platform "win"
- set mysqloptsfields [ dict create connection {mysql_host {.countopt.f1.e1 get} mysql_port {.countopt.f1.e2 get} mysql_socket {.countopt.f1.e2a get} mysql_ssl_ca {.countopt.f1.e2d get} mysql_ssl_cert {.countopt.f1.e2e get} mysql_ssl_key {.countopt.f1.e2f get} mysql_ssl_cipher {.countopt.f1.e2g get} mysql_ssl $mysql_ssl mysql_ssl_two_way $mysql_ssl_two_way mysql_ssl_windows_capath {$mysql_ssl_windows_capath}} tpch {mysql_tpch_user {.countopt.f1.e3 get} mysql_tpch_pass {.countopt.f1.e4 get}} ]
+ set myoptsfields [ dict create connection {mysql_host {.countopt.f1.e1 get} mysql_port {.countopt.f1.e2 get} mysql_socket {.countopt.f1.e2a get} mysql_ssl_ca {.countopt.f1.e2d get} mysql_ssl_cert {.countopt.f1.e2e get} mysql_ssl_key {.countopt.f1.e2f get} mysql_ssl_cipher {.countopt.f1.e2g get} mysql_ssl $mysql_ssl mysql_ssl_two_way $mysql_ssl_two_way mysql_ssl_windows_capath {$mysql_ssl_windows_capath} mysql_oceanbase_port $mysql_oceanbase_port} tpch {mysql_tpch_user {.countopt.f1.e3 get} mysql_tpch_pass {.countopt.f1.e4 get} mysql_tpch_obcompat $mysql_tpch_obcompat mysql_ob_tenant_name $mysql_ob_tenant_name} ]
}
}
if { [ info exists afval ] } {
after cancel $afval
unset afval
}
-
catch "destroy .countopt"
ttk::toplevel .countopt
wm transient .countopt .ed_mainFrame
@@ -266,18 +268,53 @@ proc countmysqlopts { bm } {
} else {
ttk::entry $Name -show * -width 30 -textvariable mysql_tpch_pass
}
+
+set Name $Parent.f1.e5a
+ set Prompt $Parent.f1.p5a
+ ttk::label $Prompt -text "Oceanbase Database Compatible :"
+ ttk::checkbutton $Name -text "" -variable mysql_tpch_obcompat -onvalue "true" -offvalue "false"
grid $Prompt -column 0 -row 13 -sticky e
- grid $Name -column 1 -row 13 -sticky ew
+ grid $Name -column 1 -row 13 -sticky w
+ bind $Parent.f1.e5a