diff --git a/config/memsql_tpcc_config.xml b/config/memsql_tpcc_config.xml
new file mode 100644
index 000000000..15b9c1e33
--- /dev/null
+++ b/config/memsql_tpcc_config.xml
@@ -0,0 +1,43 @@
+
+
+
+
+ memsql
+ com.mysql.jdbc.Driver
+ jdbc:mysql://127.0.0.1:3306/tpcc
+ root
+
+ TRANSACTION_READ_COMMITTED
+
+
+ 16
+
+
+ 64
+
+
+
+ unlimited
+ 45,43,4,4,4
+
+
+
+
+
+
+ NewOrder
+
+
+ Payment
+
+
+ OrderStatus
+
+
+ Delivery
+
+
+ StockLevel
+
+
+
diff --git a/config/memsql_tpch_config.xml b/config/memsql_tpch_config.xml
new file mode 100644
index 000000000..91ab40ea4
--- /dev/null
+++ b/config/memsql_tpch_config.xml
@@ -0,0 +1,142 @@
+
+
+
+
+ memsql
+ com.mysql.jdbc.Driver
+ jdbc:mysql://127.0.0.1:3306/tpch
+ root
+
+ TRANSACTION_READ_COMMITTED
+
+
+ data/tpch1
+
+
+
+ tbl
+
+
+ 20
+
+
+ 1
+
+
+ true
+ unlimited
+ all
+
+
+ true
+ unlimited
+ even
+
+
+ true
+ unlimited
+ odd
+
+
+
+
+
+
+ odd
+ 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0
+
+
+ even
+ 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
+
+
+
+ Q1
+ 1
+
+
+ Q2
+ 2
+
+
+ Q3
+ 3
+
+
+ Q4
+ 4
+
+
+ Q5
+ 5
+
+
+ Q6
+ 6
+
+
+ Q7
+ 7
+
+
+ Q8
+ 8
+
+
+ Q9
+ 9
+
+
+ Q10
+ 10
+
+
+ Q11
+ 11
+
+
+ Q12
+ 12
+
+
+ Q13
+ 13
+
+
+ Q14
+ 14
+
+
+ Q15
+ 15
+
+
+ Q16
+ 16
+
+
+ Q17
+ 17
+
+
+ Q18
+ 18
+
+
+ Q19
+ 19
+
+
+ Q20
+ 20
+
+
+ Q21
+ 21
+
+
+ Q22
+ 22
+
+
+
diff --git a/config/memsql_wikipedia_config.xml b/config/memsql_wikipedia_config.xml
new file mode 100644
index 000000000..d0b6f7d3e
--- /dev/null
+++ b/config/memsql_wikipedia_config.xml
@@ -0,0 +1,45 @@
+
+
+
+
+ memsql
+ com.mysql.jdbc.Driver
+ jdbc:mysql://127.0.0.1:3306/wikipedia
+ root
+
+ TRANSACTION_READ_COMMITTED
+
+
+ 1
+
+
+ config/traces/wikipedia-100k.trace
+ 10
+ 10.1.
+
+
+ 100
+
+
+
+ 1000
+ 0.07,0.07,91.2656,0.9219
+
+
+
+
+
+
+ AddWatchList
+
+
+ RemoveWatchList
+
+
+ GetPageAnonymous
+
+
+ GetPageAuthenticated
+
+
+
diff --git a/src/com/oltpbenchmark/benchmarks/tpcc/ddls/tpcc-memsql-ddl.sql b/src/com/oltpbenchmark/benchmarks/tpcc/ddls/tpcc-memsql-ddl.sql
new file mode 100644
index 000000000..073045d53
--- /dev/null
+++ b/src/com/oltpbenchmark/benchmarks/tpcc/ddls/tpcc-memsql-ddl.sql
@@ -0,0 +1,183 @@
+-- TODO: C_SINCE ON UPDATE CURRENT_TIMESTAMP,
+
+-- woonhak, turn off foreign key check, reference tpcc-mysql and tpcc specification
+SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
+SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
+
+DROP TABLE IF EXISTS CUSTOMER;
+DROP TABLE IF EXISTS DISTRICT;
+DROP TABLE IF EXISTS HISTORY;
+DROP TABLE IF EXISTS ITEM;
+DROP TABLE IF EXISTS NEW_ORDER;
+DROP TABLE IF EXISTS OORDER;
+DROP TABLE IF EXISTS ORDER_LINE;
+DROP TABLE IF EXISTS STOCK;
+DROP TABLE IF EXISTS WAREHOUSE;
+
+CREATE TABLE CUSTOMER (
+ C_W_ID INT NOT NULL,
+ C_D_ID INT NOT NULL,
+ C_ID INT NOT NULL,
+ C_DISCOUNT DECIMAL(4,4) NOT NULL,
+ C_CREDIT CHAR(2) NOT NULL,
+ C_LAST VARCHAR(16) NOT NULL,
+ C_FIRST VARCHAR(16) NOT NULL,
+ C_CREDIT_LIM DECIMAL(12,2) NOT NULL,
+ C_BALANCE DECIMAL(12,2) NOT NULL,
+ C_YTD_PAYMENT FLOAT NOT NULL,
+ C_PAYMENT_CNT INT NOT NULL,
+ C_DELIVERY_CNT INT NOT NULL,
+ C_STREET_1 VARCHAR(20) NOT NULL,
+ C_STREET_2 VARCHAR(20) NOT NULL,
+ C_CITY VARCHAR(20) NOT NULL,
+ C_STATE CHAR(2) NOT NULL,
+ C_ZIP CHAR(9) NOT NULL,
+ C_PHONE CHAR(16) NOT NULL,
+ C_SINCE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ C_MIDDLE CHAR(2) NOT NULL,
+ C_DATA VARCHAR(500) NOT NULL,
+ PRIMARY KEY (C_W_ID,C_D_ID,C_ID)
+);
+
+
+CREATE TABLE DISTRICT (
+ D_W_ID INT NOT NULL,
+ D_ID INT NOT NULL,
+ D_YTD DECIMAL(12,2) NOT NULL,
+ D_TAX DECIMAL(4,4) NOT NULL,
+ D_NEXT_O_ID INT NOT NULL,
+ D_NAME VARCHAR(10) NOT NULL,
+ D_STREET_1 VARCHAR(20) NOT NULL,
+ D_STREET_2 VARCHAR(20) NOT NULL,
+ D_CITY VARCHAR(20) NOT NULL,
+ D_STATE CHAR(2) NOT NULL,
+ D_ZIP CHAR(9) NOT NULL,
+ PRIMARY KEY (D_W_ID,D_ID)
+);
+
+-- TODO: H_DATE ON UPDATE CURRENT_TIMESTAMP
+
+CREATE TABLE HISTORY (
+ H_C_ID INT NOT NULL,
+ H_C_D_ID INT NOT NULL,
+ H_C_W_ID INT NOT NULL,
+ H_D_ID INT NOT NULL,
+ H_W_ID INT NOT NULL,
+ H_DATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ H_AMOUNT DECIMAL(6,2) NOT NULL,
+ H_DATA VARCHAR(24) NOT NULL
+);
+
+
+CREATE TABLE ITEM (
+ I_ID INT NOT NULL,
+ I_NAME VARCHAR(24) NOT NULL,
+ I_PRICE DECIMAL(5,2) NOT NULL,
+ I_DATA VARCHAR(50) NOT NULL,
+ I_IM_ID INT NOT NULL,
+ PRIMARY KEY (I_ID)
+);
+
+
+CREATE TABLE NEW_ORDER (
+ NO_W_ID INT NOT NULL,
+ NO_D_ID INT NOT NULL,
+ NO_O_ID INT NOT NULL,
+ PRIMARY KEY (NO_W_ID,NO_D_ID,NO_O_ID)
+);
+
+-- TODO: O_ENTRY_D ON UPDATE CURRENT_TIMESTAMP
+
+CREATE TABLE OORDER (
+ O_W_ID INT NOT NULL,
+ O_D_ID INT NOT NULL,
+ O_ID INT NOT NULL,
+ O_C_ID INT NOT NULL,
+ O_CARRIER_ID INT DEFAULT NULL,
+ O_OL_CNT DECIMAL(2,0) NOT NULL,
+ O_ALL_LOCAL DECIMAL(1,0) NOT NULL,
+ O_ENTRY_D TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ PRIMARY KEY (O_W_ID,O_D_ID,O_ID),
+ UNIQUE (O_W_ID,O_D_ID,O_C_ID,O_ID)
+);
+
+
+CREATE TABLE ORDER_LINE (
+ OL_W_ID INT NOT NULL,
+ OL_D_ID INT NOT NULL,
+ OL_O_ID INT NOT NULL,
+ OL_NUMBER INT NOT NULL,
+ OL_I_ID INT NOT NULL,
+ OL_DELIVERY_D TIMESTAMP NULL DEFAULT NULL,
+ OL_AMOUNT DECIMAL(6,2) NOT NULL,
+ OL_SUPPLY_W_ID INT NOT NULL,
+ OL_QUANTITY DECIMAL(2,0) NOT NULL,
+ OL_DIST_INFO CHAR(24) NOT NULL,
+ PRIMARY KEY (OL_W_ID,OL_D_ID,OL_O_ID,OL_NUMBER)
+);
+
+CREATE TABLE STOCK (
+ S_W_ID INT NOT NULL,
+ S_I_ID INT NOT NULL,
+ S_QUANTITY DECIMAL(4,0) NOT NULL,
+ S_YTD DECIMAL(8,2) NOT NULL,
+ S_ORDER_CNT INT NOT NULL,
+ S_REMOTE_CNT INT NOT NULL,
+ S_DATA VARCHAR(50) NOT NULL,
+ S_DIST_01 CHAR(24) NOT NULL,
+ S_DIST_02 CHAR(24) NOT NULL,
+ S_DIST_03 CHAR(24) NOT NULL,
+ S_DIST_04 CHAR(24) NOT NULL,
+ S_DIST_05 CHAR(24) NOT NULL,
+ S_DIST_06 CHAR(24) NOT NULL,
+ S_DIST_07 CHAR(24) NOT NULL,
+ S_DIST_08 CHAR(24) NOT NULL,
+ S_DIST_09 CHAR(24) NOT NULL,
+ S_DIST_10 CHAR(24) NOT NULL,
+ PRIMARY KEY (S_W_ID,S_I_ID)
+);
+
+CREATE TABLE WAREHOUSE (
+ W_ID INT NOT NULL,
+ W_YTD DECIMAL(12,2) NOT NULL,
+ W_TAX DECIMAL(4,4) NOT NULL,
+ W_NAME VARCHAR(10) NOT NULL,
+ W_STREET_1 VARCHAR(20) NOT NULL,
+ W_STREET_2 VARCHAR(20) NOT NULL,
+ W_CITY VARCHAR(20) NOT NULL,
+ W_STATE CHAR(2) NOT NULL,
+ W_ZIP CHAR(9) NOT NULL,
+ PRIMARY KEY (W_ID)
+);
+
+-- INDEXES
+CREATE INDEX IDX_CUSTOMER_NAME ON CUSTOMER (C_W_ID,C_D_ID,C_LAST,C_FIRST);
+
+-- woohak, add constraints. MySQL/InnoDB storage engine is kind of IoT.
+-- and add constraints and make indexes later aretoo slow when running a single thread.
+-- so I just add create index and foreign key constraints before loading data.
+
+-- already created
+-- CREATE INDEX IDX_CUSTOMER ON CUSTOMER (C_W_ID,C_D_ID,C_LAST,C_FIRST);
+CREATE INDEX IDX_ORDER ON OORDER (O_W_ID,O_D_ID,O_C_ID,O_ID);
+-- tpcc-mysql create two indexes for the foreign key constraints, Is it really necessary?
+-- CREATE INDEX FKEY_STOCK_2 ON STOCK (S_I_ID);
+-- CREATE INDEX FKEY_ORDER_LINE_2 ON ORDER_LINE (OL_SUPPLY_W_ID,OL_I_ID);
+
+-- add 'ON DELETE CASCADE' to clear table work correctly
+
+-- ALTER TABLE DISTRICT ADD CONSTRAINT FKEY_DISTRICT_1 FOREIGN KEY(D_W_ID) REFERENCES WAREHOUSE(W_ID) ON DELETE CASCADE;
+-- ALTER TABLE CUSTOMER ADD CONSTRAINT FKEY_CUSTOMER_1 FOREIGN KEY(C_W_ID,C_D_ID) REFERENCES DISTRICT(D_W_ID,D_ID) ON DELETE CASCADE ;
+-- ALTER TABLE HISTORY ADD CONSTRAINT FKEY_HISTORY_1 FOREIGN KEY(H_C_W_ID,H_C_D_ID,H_C_ID) REFERENCES CUSTOMER(C_W_ID,C_D_ID,C_ID) ON DELETE CASCADE;
+-- ALTER TABLE HISTORY ADD CONSTRAINT FKEY_HISTORY_2 FOREIGN KEY(H_W_ID,H_D_ID) REFERENCES DISTRICT(D_W_ID,D_ID) ON DELETE CASCADE;
+-- ALTER TABLE NEW_ORDER ADD CONSTRAINT FKEY_NEW_ORDER_1 FOREIGN KEY(NO_W_ID,NO_D_ID,NO_O_ID) REFERENCES OORDER(O_W_ID,O_D_ID,O_ID) ON DELETE CASCADE;
+-- ALTER TABLE OORDER ADD CONSTRAINT FKEY_ORDER_1 FOREIGN KEY(O_W_ID,O_D_ID,O_C_ID) REFERENCES CUSTOMER(C_W_ID,C_D_ID,C_ID) ON DELETE CASCADE;
+-- ALTER TABLE ORDER_LINE ADD CONSTRAINT FKEY_ORDER_LINE_1 FOREIGN KEY(OL_W_ID,OL_D_ID,OL_O_ID) REFERENCES OORDER(O_W_ID,O_D_ID,O_ID) ON DELETE CASCADE;
+-- ALTER TABLE ORDER_LINE ADD CONSTRAINT FKEY_ORDER_LINE_2 FOREIGN KEY(OL_SUPPLY_W_ID,OL_I_ID) REFERENCES STOCK(S_W_ID,S_I_ID) ON DELETE CASCADE;
+-- ALTER TABLE STOCK ADD CONSTRAINT FKEY_STOCK_1 FOREIGN KEY(S_W_ID) REFERENCES WAREHOUSE(W_ID) ON DELETE CASCADE;
+-- ALTER TABLE STOCK ADD CONSTRAINT FKEY_STOCK_2 FOREIGN KEY(S_I_ID) REFERENCES ITEM(I_ID) ON DELETE CASCADE;
+
+
+SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
+SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
+
diff --git a/src/com/oltpbenchmark/benchmarks/tpcc/dialects/memsql-dialects.xml b/src/com/oltpbenchmark/benchmarks/tpcc/dialects/memsql-dialects.xml
new file mode 100644
index 000000000..58d807084
--- /dev/null
+++ b/src/com/oltpbenchmark/benchmarks/tpcc/dialects/memsql-dialects.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ SELECT D_NEXT_O_ID,D_TAX
+ FROM DISTRICT
+ WHERE D_W_ID = ? AND D_ID = ?
+
+
+ SELECT S_QUANTITY, S_DATA, S_DIST_01, S_DIST_02, S_DIST_03, S_DIST_04, S_DIST_05,
+ S_DIST_06, S_DIST_07, S_DIST_08, S_DIST_09, S_DIST_10
+ FROM STOCK
+ WHERE S_I_ID = ? AND S_W_ID = ?
+
+
+
+
diff --git a/src/com/oltpbenchmark/benchmarks/tpch/ddls/tpch-memsql-ddl.sql b/src/com/oltpbenchmark/benchmarks/tpch/ddls/tpch-memsql-ddl.sql
new file mode 100644
index 000000000..c5073a532
--- /dev/null
+++ b/src/com/oltpbenchmark/benchmarks/tpch/ddls/tpch-memsql-ddl.sql
@@ -0,0 +1,88 @@
+use tpch;
+DROP TABLE IF EXISTS nation;
+DROP TABLE IF EXISTS region;
+DROP TABLE IF EXISTS part;
+DROP TABLE IF EXISTS supplier;
+DROP TABLE IF EXISTS partsupp;
+DROP TABLE IF EXISTS orders;
+DROP TABLE IF EXISTS customer;
+DROP TABLE IF EXISTS lineitem;
+
+-- Sccsid: @(#)dss.ddl 2.1.8.1
+CREATE TABLE nation ( n_nationkey INTEGER NOT NULL,
+ n_name CHAR(25) NOT NULL,
+ n_regionkey INTEGER NOT NULL,
+ n_comment VARCHAR(152),
+ KEY(n_nationkey) using clustered columnstore);
+
+CREATE TABLE region ( r_regionkey INTEGER NOT NULL,
+ r_name CHAR(25) NOT NULL,
+ r_comment VARCHAR(152),
+ KEY(r_regionkey) using clustered columnstore);
+
+CREATE TABLE part ( p_partkey INTEGER NOT NULL,
+ p_name VARCHAR(55) NOT NULL,
+ p_mfgr CHAR(25) NOT NULL,
+ p_brand CHAR(10) NOT NULL,
+ p_type VARCHAR(25) NOT NULL,
+ p_size INTEGER NOT NULL,
+ p_container CHAR(10) NOT NULL,
+ p_retailprice DECIMAL(15,2) NOT NULL,
+ p_comment VARCHAR(23) NOT NULL,
+ KEY(p_partkey) using clustered columnstore);
+
+CREATE TABLE supplier ( s_suppkey INTEGER NOT NULL,
+ s_name CHAR(25) NOT NULL,
+ s_address VARCHAR(40) NOT NULL,
+ s_nationkey INTEGER NOT NULL,
+ s_phone CHAR(15) NOT NULL,
+ s_acctbal DECIMAL(15,2) NOT NULL,
+ s_comment VARCHAR(101) NOT NULL,
+ KEY(s_suppkey) using clustered columnstore);
+
+CREATE TABLE partsupp ( ps_partkey INTEGER NOT NULL,
+ ps_suppkey INTEGER NOT NULL,
+ ps_availqty INTEGER NOT NULL,
+ ps_supplycost DECIMAL(15,2) NOT NULL,
+ ps_comment VARCHAR(199) NOT NULL ,
+ KEY(ps_partkey) using clustered columnstore);
+
+CREATE TABLE customer ( c_custkey INTEGER NOT NULL,
+ c_name VARCHAR(25) NOT NULL,
+ c_address VARCHAR(40) NOT NULL,
+ c_nationkey INTEGER NOT NULL,
+ c_phone CHAR(15) NOT NULL,
+ c_acctbal DECIMAL(15,2) NOT NULL,
+ c_mktsegment CHAR(10) NOT NULL,
+ c_comment VARCHAR(117) NOT NULL,
+ KEY(c_custkey) using clustered columnstore);
+
+CREATE TABLE orders ( o_orderkey INTEGER NOT NULL,
+ o_custkey INTEGER NOT NULL,
+ o_orderstatus CHAR(1) NOT NULL,
+ o_totalprice DECIMAL(15,2) NOT NULL,
+ o_orderdate DATE NOT NULL,
+ o_orderpriority CHAR(15) NOT NULL,
+ o_clerk CHAR(15) NOT NULL,
+ o_shippriority INTEGER NOT NULL,
+ o_comment VARCHAR(79) NOT NULL,
+ KEY(o_orderkey) using clustered columnstore);
+
+CREATE TABLE lineitem ( l_orderkey INTEGER NOT NULL,
+ l_partkey INTEGER NOT NULL,
+ l_suppkey INTEGER NOT NULL,
+ l_linenumber INTEGER NOT NULL,
+ l_quantity DECIMAL(15,2) NOT NULL,
+ l_extendedprice DECIMAL(15,2) NOT NULL,
+ l_discount DECIMAL(15,2) NOT NULL,
+ l_tax DECIMAL(15,2) NOT NULL,
+ l_returnflag CHAR(1) NOT NULL,
+ l_linestatus CHAR(1) NOT NULL,
+ l_shipdate DATE NOT NULL,
+ l_commitdate DATE NOT NULL,
+ l_receiptdate DATE NOT NULL,
+ l_shipinstruct CHAR(25) NOT NULL,
+ l_shipmode CHAR(10) NOT NULL,
+ l_comment VARCHAR(44) NOT NULL,
+ KEY(l_orderkey) using clustered columnstore);
+
diff --git a/src/com/oltpbenchmark/benchmarks/wikipedia/ddls/wikipedia-memsql-ddl.sql b/src/com/oltpbenchmark/benchmarks/wikipedia/ddls/wikipedia-memsql-ddl.sql
new file mode 100644
index 000000000..5dc29dea9
--- /dev/null
+++ b/src/com/oltpbenchmark/benchmarks/wikipedia/ddls/wikipedia-memsql-ddl.sql
@@ -0,0 +1,232 @@
+DROP TABLE IF EXISTS ipblocks;
+CREATE TABLE ipblocks (
+ ipb_id int NOT NULL,
+ ipb_address varbinary(1024) NOT NULL,
+ ipb_user int NOT NULL,
+ ipb_by int NOT NULL,
+ ipb_by_text varbinary(255) NOT NULL,
+ ipb_reason varbinary(1024) NOT NULL,
+ ipb_timestamp binary(14) NOT NULL,
+ ipb_auto tinyint NOT NULL,
+ ipb_anon_only tinyint NOT NULL,
+ ipb_create_account tinyint NOT NULL ,
+ ipb_enable_autoblock tinyint NOT NULL ,
+ ipb_expiry varbinary(14) NOT NULL,
+ ipb_range_start varbinary(1024) NOT NULL,
+ ipb_range_end varbinary(1024) NOT NULL,
+ ipb_deleted tinyint NOT NULL ,
+ ipb_block_email tinyint NOT NULL ,
+ ipb_allow_usertalk tinyint NOT NULL ,
+ PRIMARY KEY (ipb_id),
+ UNIQUE KEY (ipb_id, ipb_address,ipb_user,ipb_auto,ipb_anon_only)
+);
+#UNIQUE (ipb_address(255),ipd_id, ipb_user,ipb_auto,ipb_anon_only)
+
+CREATE INDEX IDX_IPB_USER ON ipblocks (ipb_user);
+CREATE INDEX IDX_IPB_RANGE ON ipblocks (ipb_range_start,ipb_range_end);
+CREATE INDEX IDX_IPB_TIMESTAMP ON ipblocks (ipb_timestamp);
+CREATE INDEX IDX_IPB_EXPIRY ON ipblocks (ipb_expiry);
+
+-- TOOD: user_id auto_increment
+DROP TABLE IF EXISTS useracct;
+CREATE TABLE useracct (
+ user_id int unsigned NOT NULL auto_increment,
+ user_name varchar(255) NOT NULL,
+ user_real_name varchar(255) NOT NULL,
+ user_password varchar(1024) NOT NULL,
+ user_newpassword varchar(1024) NOT NULL,
+ user_newpass_time varchar(14) DEFAULT NULL,
+ user_email varchar(1024) NOT NULL,
+ user_options varchar(1024) NOT NULL,
+ user_touched varchar(14) NOT NULL,
+ user_token char(32) NOT NULL,
+ user_email_authenticated char(14) DEFAULT NULL,
+ user_email_token char(32) DEFAULT NULL,
+ user_email_token_expires char(14) DEFAULT NULL,
+ user_registration varchar(14) DEFAULT NULL,
+ user_editcount int DEFAULT NULL,
+ PRIMARY KEY (user_id),
+ UNIQUE (user_id, user_name)
+);
+--UNIQUE (user_name)
+CREATE INDEX IDX_USER_EMAIL_TOKEN ON useracct (user_email_token);
+
+-- TODO: log_id auto_increment
+DROP TABLE IF EXISTS logging;
+CREATE TABLE logging (
+ log_id int unsigned NOT NULL auto_increment,
+ log_type varbinary(32) NOT NULL,
+ log_action varbinary(32) NOT NULL,
+ log_timestamp binary(14) NOT NULL,
+ log_user int NOT NULL,
+ log_namespace int NOT NULL,
+ log_title varbinary(255) NOT NULL,
+ log_comment varbinary(255) NOT NULL,
+ log_params varbinary(1024) NOT NULL,
+ log_deleted tinyint NOT NULL DEFAULT 0,
+ log_user_text varbinary(255) NOT NULL,
+ log_page int DEFAULT NULL,
+ PRIMARY KEY (log_id, log_type)
+);
+CREATE INDEX IDX_LOG_TYPE_TIME ON logging (log_type,log_timestamp);
+CREATE INDEX IDX_LOG_USER_TIME ON logging (log_user,log_timestamp);
+CREATE INDEX IDX_LOG_PAGE_TIME ON logging (log_namespace,log_title,log_timestamp);
+CREATE INDEX IDX_LOG_TIMES ON logging (log_timestamp);
+CREATE INDEX IDX_LOG_USER_TYPE_TIME ON logging (log_user,log_type,log_timestamp);
+CREATE INDEX IDX_LOG_PAGE_ID_TIME ON logging (log_page,log_timestamp);
+
+-- TODO: page_id auto_increment
+DROP TABLE IF EXISTS page;
+CREATE TABLE page (
+ page_id int unsigned NOT NULL auto_increment,
+ page_namespace int NOT NULL,
+ page_title varchar(255) NOT NULL,
+ page_restrictions varchar(1024) NOT NULL,
+ page_counter bigint NOT NULL,
+ page_is_redirect tinyint NOT NULL,
+ page_is_new tinyint NOT NULL,
+ page_random double NOT NULL,
+ page_touched binary(14) NOT NULL,
+ page_latest int NOT NULL,
+ page_len int NOT NULL,
+ PRIMARY KEY (page_id),
+ UNIQUE (page_id, page_namespace,page_title)
+);
+--UNIQUE (page_namespace,page_title)
+CREATE INDEX IDX_PAGE_RANDOM ON page (page_random);
+CREATE INDEX IDX_PAGE_LEN ON page (page_len);
+
+-- TODO: page_id auto_increment
+DROP TABLE IF EXISTS page_backup;
+CREATE TABLE page_backup (
+ page_id int unsigned NOT NULL auto_increment,
+ page_namespace int NOT NULL,
+ page_title varchar(255) NOT NULL,
+ page_restrictions varchar(1024) NOT NULL,
+ page_counter bigint NOT NULL,
+ page_is_redirect tinyint NOT NULL,
+ page_is_new tinyint NOT NULL,
+ page_random double NOT NULL,
+ page_touched binary(14) NOT NULL,
+ page_latest int NOT NULL,
+ page_len int NOT NULL,
+ PRIMARY KEY (page_id),
+ UNIQUE (page_id, page_namespace,page_title)
+);
+--UNIQUE (page_namespace,page_title)
+CREATE INDEX IDX_PAGE_BACKUP_RANDOM ON page_backup (page_random);
+CREATE INDEX IDX_PAGE_BACKUP_LEN ON page_backup (page_len);
+
+DROP TABLE IF EXISTS page_restrictions;
+CREATE TABLE page_restrictions (
+ pr_page int NOT NULL,
+ pr_type varbinary(60) NOT NULL,
+ pr_level varbinary(60) NOT NULL,
+ pr_cascade tinyint NOT NULL,
+ pr_user int DEFAULT NULL,
+ pr_expiry varbinary(14) DEFAULT NULL,
+ pr_id int NOT NULL,
+ PRIMARY KEY (pr_id),
+ UNIQUE(pr_id, pr_page, pr_type)
+);
+--UNIQUE (pr_page,pr_type)
+CREATE INDEX IDX_PR_TYPELEVEL ON page_restrictions (pr_type,pr_level);
+CREATE INDEX IDX_PR_LEVEL ON page_restrictions (pr_level);
+CREATE INDEX IDX_PR_CASCADE ON page_restrictions (pr_cascade);
+
+-- TOOD: rc_id auto_increment
+DROP TABLE IF EXISTS recentchanges;
+CREATE TABLE recentchanges (
+ rc_id int unsigned NOT NULL auto_increment,
+ rc_timestamp varbinary(14) NOT NULL,
+ rc_cur_time varbinary(14) NOT NULL,
+ rc_user int NOT NULL,
+ rc_user_text varbinary(255) NOT NULL,
+ rc_namespace int NOT NULL,
+ rc_title varbinary(255) NOT NULL,
+ rc_comment varbinary(255) NOT NULL,
+ rc_minor tinyint NOT NULL,
+ rc_bot tinyint NOT NULL,
+ rc_new tinyint NOT NULL DEFAULT 0,
+ rc_cur_id int NOT NULL,
+ rc_this_oldid int NOT NULL,
+ rc_last_oldid int NOT NULL,
+ rc_type tinyint NOT NULL,
+ rc_moved_to_ns tinyint NOT NULL,
+ rc_moved_to_title varbinary(255) NOT NULL,
+ rc_patrolled tinyint NOT NULL DEFAULT 0,
+ rc_ip varbinary(40) NOT NULL,
+ rc_old_len int DEFAULT NULL,
+ rc_new_len int DEFAULT NULL,
+ rc_deleted tinyint NOT NULL DEFAULT 0,
+ rc_logid int NOT NULL DEFAULT 0,
+ rc_log_type varbinary(255) DEFAULT NULL,
+ rc_log_action varbinary(255) DEFAULT NULL,
+ rc_params varbinary(1024),
+ PRIMARY KEY (rc_id),
+ UNIQUE(rc_id, rc_timestamp)
+);
+CREATE INDEX IDX_RC_TIMESTAMP ON recentchanges (rc_timestamp);
+CREATE INDEX IDX_RC_NAMESPACE_TITLE ON recentchanges (rc_namespace,rc_title);
+CREATE INDEX IDX_RC_CUR_ID ON recentchanges (rc_cur_id);
+CREATE INDEX IDX_NEW_NAME_TIMESTAMP ON recentchanges (rc_new,rc_namespace,rc_timestamp);
+CREATE INDEX IDX_RC_IP ON recentchanges (rc_ip);
+CREATE INDEX IDX_RC_NS_USERTEXT ON recentchanges (rc_namespace,rc_user_text);
+CREATE INDEX IDX_RC_USER_TEXT ON recentchanges (rc_user_text,rc_timestamp);
+
+-- TODO: rev_id auto_increment
+DROP TABLE IF EXISTS revision;
+CREATE TABLE revision (
+ rev_id int unsigned NOT NULL auto_increment,
+ rev_page int NOT NULL,
+ rev_text_id int NOT NULL,
+ rev_comment varchar(1024) NOT NULL,
+ rev_user int NOT NULL,
+ rev_user_text varchar(255) NOT NULL,
+ rev_timestamp binary(14) NOT NULL,
+ rev_minor_edit tinyint NOT NULL,
+ rev_deleted tinyint NOT NULL,
+ rev_len int DEFAULT NULL,
+ rev_parent_id int DEFAULT NULL,
+ PRIMARY KEY (rev_id, rev_page, rev_parent_id),
+ UNIQUE (rev_id,rev_page, rev_parent_id)
+);
+--UNIQUE (rev_page,rev_id)
+CREATE INDEX IDX_REV_TIMESTAMP ON revision (rev_timestamp);
+CREATE INDEX IDX_PAGE_TIMESTAMP ON revision (rev_page,rev_timestamp);
+CREATE INDEX IDX_USER_TIMESTAMP ON revision (rev_user,rev_timestamp);
+CREATE INDEX IDX_USERTEXT_TIMESTAMP ON revision (rev_user_text,rev_timestamp);
+
+-- TODO old_id auto_increment
+DROP TABLE IF EXISTS text;
+CREATE TABLE text (
+ old_id int unsigned NOT NULL auto_increment,
+ old_text mediumblob NOT NULL,
+ old_flags tinyblob NOT NULL,
+ old_page int DEFAULT NULL,
+ PRIMARY KEY (old_id, old_text)
+);
+
+DROP TABLE IF EXISTS user_groups;
+CREATE TABLE user_groups (
+ ug_user int NOT NULL,
+ ug_group varbinary(16) NOT NULL
+);
+--UNIQUE (ug_user,ug_group)
+CREATE INDEX IDX_UG_GROUP ON user_groups (ug_group);
+
+DROP TABLE IF EXISTS value_backup;
+CREATE TABLE value_backup (
+ table_name varchar(255) DEFAULT NULL,
+ maxid int DEFAULT NULL
+);
+
+DROP TABLE IF EXISTS watchlist;
+CREATE TABLE watchlist (
+ wl_user int NOT NULL,
+ wl_namespace int NOT NULL,
+ wl_title varchar(255) NOT NULL,
+ wl_notificationtimestamp varchar(14) DEFAULT NULL
+);
+--UNIQUE (wl_user,wl_namespace,wl_title)
+CREATE INDEX IDX_WL_NAMESPACE_TITLE ON watchlist (wl_namespace, wl_title);
diff --git a/src/com/oltpbenchmark/types/DatabaseType.java b/src/com/oltpbenchmark/types/DatabaseType.java
index c1395b48c..5bbd9e254 100644
--- a/src/com/oltpbenchmark/types/DatabaseType.java
+++ b/src/com/oltpbenchmark/types/DatabaseType.java
@@ -48,7 +48,8 @@ public enum DatabaseType {
MONETDB("nl.cwi.monetdb.jdbc.MonetDriver", false, false),
NUODB("com.nuodb.jdbc.Driver", true, false),
TIMESTEN("com.timesten.jdbc.TimesTenDriver", true, false),
- PELOTON("org.postgresql.Driver", false, false)
+ PELOTON("org.postgresql.Driver", false, false),
+ MEMSQL("com.mysql.jdbc.Driver",true,false)
;
private DatabaseType(String driver, boolean escapeNames, boolean includeColNames) {