diff --git a/config/tpcc_config_monetdb.xml b/config/tpcc_config_monetdb.xml
new file mode 100644
index 000000000..c377398ac
--- /dev/null
+++ b/config/tpcc_config_monetdb.xml
@@ -0,0 +1,43 @@
+
+
+
+
+ MONETDB
+ nl.cwi.monetdb.jdbc.MonetDriver
+ jdbc:monetdb://localhost:50000/tpcc
+
+
+ TRANSACTION_READ_COMMITTED
+
+
+ 1
+
+
+ 1
+
+
+
+ unlimited
+ 45,43,4,4,4
+
+
+
+
+
+
+ NewOrder
+
+
+ Payment
+
+
+ OrderStatus
+
+
+ Delivery
+
+
+ StockLevel
+
+
+
diff --git a/config/tpch_config_monetdb.xml b/config/tpch_config_monetdb.xml
new file mode 100644
index 000000000..835627817
--- /dev/null
+++ b/config/tpch_config_monetdb.xml
@@ -0,0 +1,143 @@
+
+
+
+
+ monetdb
+ nl.cwi.monetdb.jdbc.MonetDriver
+ jdbc:monetdb://localhost:50000/tpch
+
+
+ TRANSACTION_READ_COMMITTED
+
+
+ data
+
+
+
+ tbl
+
+
+ 1
+
+
+ 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/wikipedia_config_monetdb.xml b/config/wikipedia_config_monetdb.xml
new file mode 100644
index 000000000..1ab961c77
--- /dev/null
+++ b/config/wikipedia_config_monetdb.xml
@@ -0,0 +1,48 @@
+
+
+
+ monetdb
+ nl.cwi.monetdb.jdbc.MonetDriver
+ jdbc:monetdb://localhost:50000/wiki
+
+
+
+ TRANSACTION_SERIALIZABLE
+
+
+ 1
+
+
+ config/traces/wikipedia-100k.trace
+ 10
+ 10.1.
+
+
+ 1
+
+
+
+ unlimited
+ 0.07,7.7425,91.2656,0.9219
+
+
+
+
+
+
+ AddWatchList
+
+
+
+ RemoveWatchList
+
+
+
+ GetPageAnonymous
+
+
+
+ GetPageAuthenticated
+
+
+
\ No newline at end of file
diff --git a/src/com/oltpbenchmark/benchmarks/wikipedia/WikipediaLoader.java b/src/com/oltpbenchmark/benchmarks/wikipedia/WikipediaLoader.java
index 38f48f527..41c5d58c0 100644
--- a/src/com/oltpbenchmark/benchmarks/wikipedia/WikipediaLoader.java
+++ b/src/com/oltpbenchmark/benchmarks/wikipedia/WikipediaLoader.java
@@ -421,6 +421,7 @@ private void loadRevision() throws SQLException {
// Oracle handles quoted object identifiers differently, do not escape names
textSQL = SQLUtil.getInsertSQL(textTable, false);
}
+
PreparedStatement textInsert = this.conn.prepareStatement(textSQL);
// REVISION
@@ -452,66 +453,63 @@ private void loadRevision() throws SQLException {
int old_text_length = h_textLength.nextValue().intValue();
assert(old_text_length > 0);
char old_text[] = TextGenerator.randomChars(rng(), old_text_length);
-
- for (int i = 0; i < num_revised; i++) {
- // Generate the User who's doing the revision and the Page revised
- // Makes sure that we always update their counter
- int user_id = h_users.nextInt();
- assert(user_id > 0 && user_id <= this.num_users) : "Invalid UserId '" + user_id + "'";
- this.user_revision_ctr[user_id-1]++;
-
- // Generate what the new revision is going to be
- if (i > 0) {
- old_text = b.generateRevisionText(old_text);
- old_text_length = old_text.length;
- }
-
- int rev_comment_len = Math.min(rev_comment_max, h_commentLength.nextValue().intValue()+1); // HACK
- String rev_comment = TextGenerator.randomStr(rng(), rev_comment_len);
- assert(rev_comment.length() <= rev_comment_max) :
- String.format("[len=%d] ==> %s", rev_comment.length(), rev_comment);
-
- // The REV_USER_TEXT field is usually the username, but we'll just
- // put in gibberish for now
- String user_text = TextGenerator.randomStr(rng(), h_nameLength.nextValue().intValue()+1);
-
- // Insert the text
- int col = 1;
- textInsert.setInt(col++, rev_id); // old_id
- textInsert.setString(col++, new String(old_text)); // old_text
- textInsert.setString(col++, "utf-8"); // old_flags
- textInsert.setInt(col++, page_id); // old_page
- textInsert.addBatch();
-
- // Insert the revision
- col = 1;
- revisionInsert.setInt(col++, rev_id); // rev_id
- revisionInsert.setInt(col++, page_id); // rev_page
- revisionInsert.setInt(col++, rev_id); // rev_text_id
- revisionInsert.setString(col++, rev_comment); // rev_comment
- revisionInsert.setInt(col++, user_id); // rev_user
- revisionInsert.setString(col++, user_text); // rev_user_text
- revisionInsert.setString(col++, TimeUtil.getCurrentTimeString14()); // rev_timestamp
- revisionInsert.setInt(col++, h_minorEdit.nextValue().intValue()); // rev_minor_edit
- revisionInsert.setInt(col++, 0); // rev_deleted
- revisionInsert.setInt(col++, 0); // rev_len
- revisionInsert.setInt(col++, 0); // rev_parent_id
- revisionInsert.addBatch();
-
- // Update Last Revision Stuff
- this.page_last_rev_id[page_id-1] = rev_id;
- this.page_last_rev_length[page_id-1] = old_text_length;
- rev_id++;
- if (this.getDatabaseType() == DatabaseType.ORACLE) {
- PreparedStatement text_seq=this.conn.prepareStatement("select text_seq.nextval from dual");
- text_seq.execute();
- text_seq.close();
- PreparedStatement revision_seq=this.conn.prepareStatement("select revision_seq.nextval from dual");
- revision_seq.execute();
- revision_seq.close();
- }
- batchSize++;
- } // FOR (revision)
+
+ // Generate the User who's doing the revision and the Page revised
+ // Makes sure that we always update their counter
+ int user_id = h_users.nextInt();
+ assert(user_id > 0 && user_id <= this.num_users) : "Invalid UserId '" + user_id + "'";
+ this.user_revision_ctr[user_id-1]++;
+
+ // Generate what the new revision is going to be
+ old_text = b.generateRevisionText(old_text);
+ old_text_length = old_text.length;
+
+ int rev_comment_len = Math.min(rev_comment_max, h_commentLength.nextValue().intValue()+1); // HACK
+ String rev_comment = TextGenerator.randomStr(rng(), rev_comment_len);
+ assert(rev_comment.length() <= rev_comment_max) :
+ String.format("[len=%d] ==> %s", rev_comment.length(), rev_comment);
+
+ // The REV_USER_TEXT field is usually the username, but we'll just
+ // put in gibberish for now
+ String user_text = TextGenerator.randomStr(rng(), h_nameLength.nextValue().intValue()+1);
+
+ // Insert the text
+ int col = 1;
+ textInsert.setInt(col++, rev_id); // old_id
+ textInsert.setString(col++, new String(old_text)); // old_text
+ textInsert.setString(col++, "utf-8"); // old_flags
+ textInsert.setInt(col++, page_id); // old_page
+ textInsert.addBatch();
+
+ // Insert the revision
+ col = 1;
+ revisionInsert.setInt(col++, rev_id); // rev_id
+ revisionInsert.setInt(col++, page_id); // rev_page
+ revisionInsert.setInt(col++, rev_id); // rev_text_id
+ revisionInsert.setString(col++, rev_comment); // rev_comment
+ revisionInsert.setInt(col++, user_id); // rev_user
+ revisionInsert.setString(col++, user_text); // rev_user_text
+ revisionInsert.setString(col++, TimeUtil.getCurrentTimeString14()); // rev_timestamp
+ revisionInsert.setInt(col++, h_minorEdit.nextValue().intValue()); // rev_minor_edit
+ revisionInsert.setInt(col++, 0); // rev_deleted
+ revisionInsert.setInt(col++, 0); // rev_len
+ revisionInsert.setInt(col++, 0); // rev_parent_id
+ revisionInsert.addBatch();
+
+ // Update Last Revision Stuff
+ this.page_last_rev_id[page_id-1] = rev_id;
+ this.page_last_rev_length[page_id-1] = old_text_length;
+ rev_id++;
+ if (this.getDatabaseType() == DatabaseType.ORACLE) {
+ PreparedStatement text_seq=this.conn.prepareStatement("select text_seq.nextval from dual");
+ text_seq.execute();
+ text_seq.close();
+ PreparedStatement revision_seq=this.conn.prepareStatement("select revision_seq.nextval from dual");
+ revision_seq.execute();
+ revision_seq.close();
+ }
+ batchSize++;
+
if (batchSize > WikipediaConstants.BATCH_SIZE) {
textInsert.executeBatch();
revisionInsert.executeBatch();
diff --git a/src/com/oltpbenchmark/benchmarks/wikipedia/ddls/wikipedia-monetdb-ddl.sql b/src/com/oltpbenchmark/benchmarks/wikipedia/ddls/wikipedia-monetdb-ddl.sql
new file mode 100644
index 000000000..4c7a03b5f
--- /dev/null
+++ b/src/com/oltpbenchmark/benchmarks/wikipedia/ddls/wikipedia-monetdb-ddl.sql
@@ -0,0 +1,226 @@
+-- TODO: ipb_id auto_increment
+DROP TABLE IF EXISTS ipblocks;
+CREATE TABLE ipblocks (
+ ipb_id int NOT NULL,
+ ipb_address varchar(1024) NOT NULL,
+ ipb_user int NOT NULL,
+ ipb_by int NOT NULL,
+ ipb_by_text varchar(255) NOT NULL,
+ ipb_reason varchar(1024) NOT NULL,
+ ipb_timestamp char(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 varchar(14) NOT NULL,
+ ipb_range_start varchar(1024) NOT NULL,
+ ipb_range_end varchar(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 (ipb_address,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 NOT NULL,
+ 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_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 NOT NULL,
+ log_type varchar(32) NOT NULL,
+ log_action varchar(32) NOT NULL,
+ log_timestamp char(14) NOT NULL,
+ log_user int NOT NULL,
+ log_namespace int NOT NULL,
+ log_title varchar(255) NOT NULL,
+ log_comment varchar(255) NOT NULL,
+ log_params varchar(1024) NOT NULL,
+ log_deleted tinyint NOT NULL,
+ log_user_text varchar(255) NOT NULL,
+ log_page int DEFAULT NULL,
+ PRIMARY KEY (log_id)
+);
+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 NOT NULL,
+ 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 char(14) NOT NULL,
+ page_latest int NOT NULL,
+ page_len int NOT NULL,
+ PRIMARY KEY (page_id),
+ 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 NOT NULL,
+ 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 char(14) NOT NULL,
+ page_latest int NOT NULL,
+ page_len int NOT NULL,
+ PRIMARY KEY (page_id),
+ 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 varchar(60) NOT NULL,
+ pr_level varchar(60) NOT NULL,
+ pr_cascade tinyint NOT NULL,
+ pr_user int DEFAULT NULL,
+ pr_expiry varchar(14) DEFAULT NULL,
+ pr_id int NOT NULL,
+ PRIMARY KEY (pr_id),
+ 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 NOT NULL,
+ rc_timestamp varchar(14) NOT NULL,
+ rc_cur_time varchar(14) NOT NULL,
+ rc_user int NOT NULL,
+ rc_user_text varchar(255) NOT NULL,
+ rc_namespace int NOT NULL,
+ rc_title varchar(255) NOT NULL,
+ rc_comment varchar(255) NOT NULL,
+ rc_minor tinyint NOT NULL,
+ rc_bot tinyint NOT NULL,
+ rc_new tinyint NOT NULL,
+ 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 varchar(255) NOT NULL,
+ rc_patrolled tinyint NOT NULL,
+ rc_ip varchar(40) NOT NULL,
+ rc_old_len int DEFAULT NULL,
+ rc_new_len int DEFAULT NULL,
+ rc_deleted tinyint NOT NULL,
+ rc_logid int NOT NULL,
+ rc_log_type varchar(255) DEFAULT NULL,
+ rc_log_action varchar(255) DEFAULT NULL,
+ rc_params varchar(1024),
+ PRIMARY KEY (rc_id)
+);
+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 NOT NULL,
+ 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 char(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),
+ 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 NOT NULL,
+ old_text text NOT NULL,
+ old_flags varchar(1024) NOT NULL,
+ old_page int DEFAULT NULL,
+ PRIMARY KEY (old_id)
+);
+
+DROP TABLE IF EXISTS user_groups;
+CREATE TABLE user_groups (
+ ug_user int NOT NULL REFERENCES useracct (user_id),
+ ug_group varchar(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);
\ No newline at end of file