diff --git a/src/main/java/com/oltpbenchmark/api/TransactionTypes.java b/src/main/java/com/oltpbenchmark/api/TransactionTypes.java index 46c100168..0059b08e7 100644 --- a/src/main/java/com/oltpbenchmark/api/TransactionTypes.java +++ b/src/main/java/com/oltpbenchmark/api/TransactionTypes.java @@ -20,7 +20,6 @@ import org.apache.commons.collections4.map.ListOrderedMap; import java.util.Collection; -import java.util.Comparator; import java.util.Iterator; import java.util.List; @@ -29,14 +28,8 @@ public class TransactionTypes implements Collection { private final ListOrderedMap types = new ListOrderedMap<>(); public TransactionTypes(List transactiontypes) { - transactiontypes.sort(new Comparator() { - @Override - public int compare(TransactionType o1, TransactionType o2) { - return o1.compareTo(o2); - } - }); + transactiontypes.sort(TransactionType::compareTo); for (TransactionType tt : transactiontypes) { - // System.err.println("Adding " + tt + " - " + this.types + " / " + transactiontypes); String key = tt.getName().toUpperCase(); this.types.put(key, tt); } @@ -68,7 +61,6 @@ public boolean add(TransactionType tt) { @Override public boolean addAll(Collection c) { - // TODO Auto-generated method stub return false; } @@ -79,7 +71,6 @@ public void clear() { @Override public boolean contains(Object o) { - // TODO Auto-generated method stub return false; } @@ -100,19 +91,16 @@ public Iterator iterator() { @Override public boolean remove(Object o) { - // TODO Auto-generated method stub return false; } @Override public boolean removeAll(Collection c) { - // TODO Auto-generated method stub return false; } @Override public boolean retainAll(Collection c) { - // TODO Auto-generated method stub return false; } diff --git a/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/ResourceStresserBenchmark.java b/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/ResourceStresserBenchmark.java index 6d2235dfe..fc3233234 100644 --- a/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/ResourceStresserBenchmark.java +++ b/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/ResourceStresserBenchmark.java @@ -48,8 +48,8 @@ protected List> makeWorkersImpl() { int keyRange = numKeys / workConf.getTerminals(); LOG.warn("numkeys={}, keyRange={}", numKeys, keyRange); // TODO: check ranges - for (int i = 0; i < workConf.getTerminals(); ++i) { - workers.add(new ResourceStresserWorker(this, i, numKeys, keyRange)); + for (int i = 0; i < workConf.getTerminals(); i++) { + workers.add(new ResourceStresserWorker(this, i + 1, numKeys, keyRange)); } return workers; diff --git a/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/procedures/Contention2.java b/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/procedures/Contention2.java index 0a78fc03d..070f833d3 100644 --- a/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/procedures/Contention2.java +++ b/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/procedures/Contention2.java @@ -42,7 +42,7 @@ public void run(Connection conn, int howManyKeys, int howManyUpdates, int sleepL for (int sel = 0; sel < howManyUpdates; ++sel) { - int leftKey = ResourceStresserWorker.gen.nextInt(numKeys - howManyKeys); + int leftKey = ResourceStresserWorker.gen.nextInt(Math.max(1, numKeys - howManyKeys)); int rightKey = leftKey + howManyKeys; int salary = ResourceStresserWorker.gen.nextInt(); diff --git a/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/procedures/IO1.java b/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/procedures/IO1.java index a3abd6d0c..cb35a8002 100644 --- a/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/procedures/IO1.java +++ b/src/main/java/com/oltpbenchmark/benchmarks/resourcestresser/procedures/IO1.java @@ -49,7 +49,7 @@ public void run(Connection conn, int myId, int howManyColsPerRow, int howManyUpd int startingKey = myId * keyRange; for (int up = 0; up < howManyUpdatesPerTransaction; ++up) { - int leftKey = ResourceStresserWorker.gen.nextInt(keyRange - howManyRowsPerUpdate) + startingKey; + int leftKey = ResourceStresserWorker.gen.nextInt(Math.max(1, keyRange - howManyRowsPerUpdate)) + startingKey; int rightKey = leftKey + howManyRowsPerUpdate; try (PreparedStatement stmt = this.getPreparedStatement(conn, ioUpdate)) { diff --git a/src/main/java/com/oltpbenchmark/benchmarks/seats/procedures/FindOpenSeats.java b/src/main/java/com/oltpbenchmark/benchmarks/seats/procedures/FindOpenSeats.java index 5a370e8d4..d7f31424d 100644 --- a/src/main/java/com/oltpbenchmark/benchmarks/seats/procedures/FindOpenSeats.java +++ b/src/main/java/com/oltpbenchmark/benchmarks/seats/procedures/FindOpenSeats.java @@ -83,23 +83,26 @@ public Object[][] run(Connection conn, String f_id) throws SQLException { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; - double base_price; - long seats_total; - long seats_left; - double seat_price; + double base_price = 0.0; + long seats_total = 0; + long seats_left = 0; + double seat_price = 0.0; // First calculate the seat price using the flight's base price // and the number of seats that remaining try (PreparedStatement f_stmt = this.getPreparedStatement(conn, GetFlight)) { f_stmt.setString(1, f_id); try (ResultSet f_results = f_stmt.executeQuery()) { - f_results.next(); - - // long status = results[0].getLong(0); - base_price = f_results.getDouble(2); - seats_total = f_results.getLong(3); - seats_left = f_results.getLong(4); - seat_price = f_results.getDouble(5); + if (f_results.next()) { + + // long status = results[0].getLong(0); + base_price = f_results.getDouble(2); + seats_total = f_results.getLong(3); + seats_left = f_results.getLong(4); + seat_price = f_results.getDouble(5); + } else { + LOG.warn("flight {} had no seats; this may be a data problem or a code problem. previously this threw an unhandled exception.", f_id); + } } } diff --git a/src/main/java/com/oltpbenchmark/benchmarks/twitter/TwitterLoader.java b/src/main/java/com/oltpbenchmark/benchmarks/twitter/TwitterLoader.java index d4225c40b..9c2d7a1a6 100644 --- a/src/main/java/com/oltpbenchmark/benchmarks/twitter/TwitterLoader.java +++ b/src/main/java/com/oltpbenchmark/benchmarks/twitter/TwitterLoader.java @@ -287,7 +287,7 @@ protected void loadFollowData(Connection conn, int lo, int hi) throws SQLExcepti total++; batchSize++; - f++; + if ((batchSize % workConf.getBatchSize()) == 0) { followsInsert.executeBatch(); @@ -300,6 +300,8 @@ protected void loadFollowData(Connection conn, int lo, int hi) throws SQLExcepti } } } + + f++; } } if (batchSize > 0) { diff --git a/src/main/java/com/oltpbenchmark/util/Histogram.java b/src/main/java/com/oltpbenchmark/util/Histogram.java index 13c030816..9abc35243 100644 --- a/src/main/java/com/oltpbenchmark/util/Histogram.java +++ b/src/main/java/com/oltpbenchmark/util/Histogram.java @@ -95,15 +95,6 @@ public Histogram(boolean keepZeroEntries) { this.keep_zero_entries = keepZeroEntries; } - @Override - public boolean equals(Object obj) { - if (obj instanceof Histogram) { - Histogram other = (Histogram) obj; - return (this.histogram.equals(other.histogram)); - } - return (false); - } - public boolean hasDebugLabels() { return (this.debug_names != null && !this.debug_names.isEmpty()); } @@ -204,7 +195,9 @@ private synchronized void calculateInternalValues() { // Is this value the new min/max values? if (this.min_value == null || this.min_value.compareTo(value) > 0) { this.min_value = value; - } else if (this.max_value == null || this.max_value.compareTo(value) < 0) { + } + + if (this.max_value == null || this.max_value.compareTo(value) < 0) { this.max_value = value; } @@ -215,6 +208,7 @@ private synchronized void calculateInternalValues() { this.min_count_values.add(value); this.min_count = cnt; } + if (cnt >= this.max_count) { if (cnt > this.max_count) { this.max_count_values.clear(); @@ -485,6 +479,23 @@ public boolean contains(X value) { return (this.histogram.containsKey(value)); } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Histogram histogram1 = (Histogram) o; + return Objects.equals(histogram, histogram1.histogram); + } + + @Override + public int hashCode() { + return Objects.hash(histogram); + } + // ---------------------------------------------------------------------------- // DEBUG METHODS // ---------------------------------------------------------------------------- diff --git a/src/main/resources/benchmarks/auctionmark/ddl-generic.sql b/src/main/resources/benchmarks/auctionmark/ddl-generic.sql index ed0447ad5..fff85ec3a 100644 --- a/src/main/resources/benchmarks/auctionmark/ddl-generic.sql +++ b/src/main/resources/benchmarks/auctionmark/ddl-generic.sql @@ -23,7 +23,7 @@ CREATE TABLE config_profile ( cfp_scale_factor FLOAT NOT NULL, cfp_loader_start TIMESTAMP NOT NULL, cfp_loader_stop TIMESTAMP NOT NULL, - cfp_user_item_histogram TEXT NOT NULL + cfp_user_item_histogram VARCHAR(1024) NOT NULL ); -- ================================================================ diff --git a/src/main/resources/benchmarks/chbenchmark/ddl-generic.sql b/src/main/resources/benchmarks/chbenchmark/ddl-generic.sql index 19660774f..79ff3bf40 100644 --- a/src/main/resources/benchmarks/chbenchmark/ddl-generic.sql +++ b/src/main/resources/benchmarks/chbenchmark/ddl-generic.sql @@ -1,16 +1,18 @@ -DROP TABLE IF EXISTS region; -DROP TABLE IF EXISTS nation; -DROP TABLE IF EXISTS supplier; +DROP TABLE IF EXISTS region CASCADE; +DROP TABLE IF EXISTS nation CASCADE; +DROP TABLE IF EXISTS supplier CASCADE; -create table region ( - r_regionkey int not null, - r_name char(55) not null, - r_comment char(152) not null, - PRIMARY KEY ( r_regionkey ) +create table region +( + r_regionkey int not null, + r_name char(55) not null, + r_comment char(152) not null, + PRIMARY KEY (r_regionkey) ); -create table nation ( - n_nationkey int not null, +create table nation +( + n_nationkey int not null, n_name char(25) not null, n_regionkey int not null references region(r_regionkey) ON DELETE CASCADE, n_comment char(152) not null, diff --git a/src/main/resources/benchmarks/epinions/ddl-generic.sql b/src/main/resources/benchmarks/epinions/ddl-generic.sql index deae3b550..5afcd469e 100644 --- a/src/main/resources/benchmarks/epinions/ddl-generic.sql +++ b/src/main/resources/benchmarks/epinions/ddl-generic.sql @@ -1,8 +1,8 @@ -DROP TABLE IF EXISTS trust; -DROP TABLE IF EXISTS review; -DROP TABLE IF EXISTS review_rating; -DROP TABLE IF EXISTS useracct; -DROP TABLE IF EXISTS item; +DROP TABLE IF EXISTS trust CASCADE; +DROP TABLE IF EXISTS review CASCADE; +DROP TABLE IF EXISTS review_rating CASCADE; +DROP TABLE IF EXISTS useracct CASCADE; +DROP TABLE IF EXISTS item CASCADE; CREATE TABLE useracct ( u_id int NOT NULL, diff --git a/src/main/resources/benchmarks/noop/dialect-hsqldb.xml b/src/main/resources/benchmarks/noop/dialect-hsqldb.xml new file mode 100644 index 000000000..bb82d0ca9 --- /dev/null +++ b/src/main/resources/benchmarks/noop/dialect-hsqldb.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/main/resources/benchmarks/resourcestresser/dialect-hsqldb.xml b/src/main/resources/benchmarks/resourcestresser/dialect-hsqldb.xml new file mode 100644 index 000000000..de9fdc7fe --- /dev/null +++ b/src/main/resources/benchmarks/resourcestresser/dialect-hsqldb.xml @@ -0,0 +1,25 @@ + + + + + + = 0 AND empid < 100) AS T1]]> + + + + + = 0 AND empid < 100) AS T2]]> + + + + + select 1 from locktable where empid = ? + + + + + select 1 from locktable where empid = ? + + + + diff --git a/src/main/resources/benchmarks/tatp/ddl-generic.sql b/src/main/resources/benchmarks/tatp/ddl-generic.sql index f5c3b5671..3b0052249 100644 --- a/src/main/resources/benchmarks/tatp/ddl-generic.sql +++ b/src/main/resources/benchmarks/tatp/ddl-generic.sql @@ -1,73 +1,77 @@ -DROP TABLE IF EXISTS SUBSCRIBER; -CREATE TABLE SUBSCRIBER ( - s_id INTEGER NOT NULL PRIMARY KEY, - sub_nbr VARCHAR(15) NOT NULL UNIQUE, - bit_1 TINYINT, - bit_2 TINYINT, - bit_3 TINYINT, - bit_4 TINYINT, - bit_5 TINYINT, - bit_6 TINYINT, - bit_7 TINYINT, - bit_8 TINYINT, - bit_9 TINYINT, - bit_10 TINYINT, - hex_1 TINYINT, - hex_2 TINYINT, - hex_3 TINYINT, - hex_4 TINYINT, - hex_5 TINYINT, - hex_6 TINYINT, - hex_7 TINYINT, - hex_8 TINYINT, - hex_9 TINYINT, - hex_10 TINYINT, - byte2_1 SMALLINT, - byte2_2 SMALLINT, - byte2_3 SMALLINT, - byte2_4 SMALLINT, - byte2_5 SMALLINT, - byte2_6 SMALLINT, - byte2_7 SMALLINT, - byte2_8 SMALLINT, - byte2_9 SMALLINT, - byte2_10 SMALLINT, - msc_location INTEGER, - vlr_location INTEGER +DROP TABLE IF EXISTS SUBSCRIBER CASCADE; +CREATE TABLE SUBSCRIBER +( + s_id INTEGER NOT NULL PRIMARY KEY, + sub_nbr VARCHAR(15) NOT NULL UNIQUE, + bit_1 TINYINT, + bit_2 TINYINT, + bit_3 TINYINT, + bit_4 TINYINT, + bit_5 TINYINT, + bit_6 TINYINT, + bit_7 TINYINT, + bit_8 TINYINT, + bit_9 TINYINT, + bit_10 TINYINT, + hex_1 TINYINT, + hex_2 TINYINT, + hex_3 TINYINT, + hex_4 TINYINT, + hex_5 TINYINT, + hex_6 TINYINT, + hex_7 TINYINT, + hex_8 TINYINT, + hex_9 TINYINT, + hex_10 TINYINT, + byte2_1 SMALLINT, + byte2_2 SMALLINT, + byte2_3 SMALLINT, + byte2_4 SMALLINT, + byte2_5 SMALLINT, + byte2_6 SMALLINT, + byte2_7 SMALLINT, + byte2_8 SMALLINT, + byte2_9 SMALLINT, + byte2_10 SMALLINT, + msc_location INTEGER, + vlr_location INTEGER ); -DROP TABLE IF EXISTS ACCESS_INFO; -CREATE TABLE ACCESS_INFO ( - s_id INTEGER NOT NULL, - ai_type TINYINT NOT NULL, - data1 SMALLINT, - data2 SMALLINT, - data3 VARCHAR(3), - data4 VARCHAR(5), - PRIMARY KEY(s_id, ai_type), - FOREIGN KEY (s_id) REFERENCES SUBSCRIBER (s_id) +DROP TABLE IF EXISTS ACCESS_INFO CASCADE; +CREATE TABLE ACCESS_INFO +( + s_id INTEGER NOT NULL, + ai_type TINYINT NOT NULL, + data1 SMALLINT, + data2 SMALLINT, + data3 VARCHAR(3), + data4 VARCHAR(5), + PRIMARY KEY (s_id, ai_type), + FOREIGN KEY (s_id) REFERENCES SUBSCRIBER (s_id) ); -DROP TABLE IF EXISTS SPECIAL_FACILITY; -CREATE TABLE SPECIAL_FACILITY ( - s_id INTEGER NOT NULL, - sf_type TINYINT NOT NULL, - is_active TINYINT NOT NULL, - error_cntrl SMALLINT, - data_a SMALLINT, - data_b VARCHAR(5), - PRIMARY KEY (s_id, sf_type), - FOREIGN KEY (s_id) REFERENCES SUBSCRIBER (s_id) +DROP TABLE IF EXISTS SPECIAL_FACILITY CASCADE; +CREATE TABLE SPECIAL_FACILITY +( + s_id INTEGER NOT NULL, + sf_type TINYINT NOT NULL, + is_active TINYINT NOT NULL, + error_cntrl SMALLINT, + data_a SMALLINT, + data_b VARCHAR(5), + PRIMARY KEY (s_id, sf_type), + FOREIGN KEY (s_id) REFERENCES SUBSCRIBER (s_id) ); -DROP TABLE IF EXISTS CALL_FORWARDING; -CREATE TABLE CALL_FORWARDING ( - s_id INTEGER NOT NULL, - sf_type TINYINT NOT NULL, - start_time TINYINT NOT NULL, - end_time TINYINT, - numberx VARCHAR(15), - PRIMARY KEY (s_id, sf_type, start_time), - FOREIGN KEY (s_id, sf_type) REFERENCES SPECIAL_FACILITY(s_id, sf_type) +DROP TABLE IF EXISTS CALL_FORWARDING CASCADE; +CREATE TABLE CALL_FORWARDING +( + s_id INTEGER NOT NULL, + sf_type TINYINT NOT NULL, + start_time TINYINT NOT NULL, + end_time TINYINT, + numberx VARCHAR(15), + PRIMARY KEY (s_id, sf_type, start_time), + FOREIGN KEY (s_id, sf_type) REFERENCES SPECIAL_FACILITY (s_id, sf_type) ); CREATE INDEX IDX_CF ON CALL_FORWARDING (S_ID); \ No newline at end of file diff --git a/src/main/resources/benchmarks/tpcc/ddl-generic.sql b/src/main/resources/benchmarks/tpcc/ddl-generic.sql index 0d919f65c..1b3273934 100644 --- a/src/main/resources/benchmarks/tpcc/ddl-generic.sql +++ b/src/main/resources/benchmarks/tpcc/ddl-generic.sql @@ -1,145 +1,154 @@ -DROP TABLE IF EXISTS WAREHOUSE; -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) +DROP TABLE IF EXISTS WAREHOUSE CASCADE; +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) ); -DROP TABLE IF EXISTS DISTRICT; -CREATE TABLE DISTRICT ( - D_W_ID INT NOT NULL REFERENCES WAREHOUSE (W_ID), - 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) +DROP TABLE IF EXISTS DISTRICT CASCADE; +CREATE TABLE DISTRICT +( + D_W_ID INT NOT NULL REFERENCES WAREHOUSE (W_ID), + 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: C_SINCE ON UPDATE CURRENT_TIMESTAMP, -DROP TABLE IF EXISTS CUSTOMER; -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, - C_MIDDLE CHAR(2) NOT NULL, - C_DATA VARCHAR(500) NOT NULL, - PRIMARY KEY (C_W_ID, C_D_ID, C_ID), - CONSTRAINT C_FKEY_D FOREIGN KEY (C_W_ID, C_D_ID) REFERENCES DISTRICT (D_W_ID, D_ID) +DROP TABLE IF EXISTS CUSTOMER CASCADE; +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, + C_MIDDLE CHAR(2) NOT NULL, + C_DATA VARCHAR(500) NOT NULL, + PRIMARY KEY (C_W_ID, C_D_ID, C_ID), + CONSTRAINT C_FKEY_D FOREIGN KEY (C_W_ID, C_D_ID) REFERENCES DISTRICT (D_W_ID, D_ID) ); -CREATE INDEX IDX_CUSTOMER_NAME ON CUSTOMER (C_W_ID,C_D_ID,C_LAST,C_FIRST); +CREATE INDEX IDX_CUSTOMER_NAME ON CUSTOMER (C_W_ID, C_D_ID, C_LAST, C_FIRST); -- TODO: O_ENTRY_D ON UPDATE CURRENT_TIMESTAMP -DROP TABLE IF EXISTS OORDER; -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 INT NOT NULL, - O_ALL_LOCAL INT NOT NULL, - O_ENTRY_D TIMESTAMP NOT NULL, - PRIMARY KEY (O_W_ID,O_D_ID,O_ID), - UNIQUE (O_W_ID,O_D_ID,O_C_ID,O_ID), - CONSTRAINT O_FKEY_C FOREIGN KEY (O_W_ID, O_D_ID, O_C_ID) REFERENCES CUSTOMER (C_W_ID, C_D_ID, C_ID) +DROP TABLE IF EXISTS OORDER CASCADE; +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 INT NOT NULL, + O_ALL_LOCAL INT NOT NULL, + O_ENTRY_D TIMESTAMP NOT NULL, + PRIMARY KEY (O_W_ID, O_D_ID, O_ID), + UNIQUE (O_W_ID, O_D_ID, O_C_ID, O_ID), + CONSTRAINT O_FKEY_C FOREIGN KEY (O_W_ID, O_D_ID, O_C_ID) REFERENCES CUSTOMER (C_W_ID, C_D_ID, C_ID) ); -DROP TABLE IF EXISTS NEW_ORDER; -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), - CONSTRAINT NO_FKEY_O FOREIGN KEY (NO_W_ID, NO_D_ID, NO_O_ID) REFERENCES OORDER (O_W_ID, O_D_ID, O_ID) +DROP TABLE IF EXISTS NEW_ORDER CASCADE; +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), + CONSTRAINT NO_FKEY_O FOREIGN KEY (NO_W_ID, NO_D_ID, NO_O_ID) REFERENCES OORDER (O_W_ID, O_D_ID, O_ID) ); -- TODO: H_DATE ON UPDATE CURRENT_TIMESTAMP -DROP TABLE IF EXISTS HISTORY; -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, - H_AMOUNT DECIMAL(6,2) NOT NULL, - H_DATA VARCHAR(24) NOT NULL, - CONSTRAINT H_FKEY_C FOREIGN KEY (H_C_W_ID, H_C_D_ID, H_C_ID) REFERENCES CUSTOMER (C_W_ID, C_D_ID, C_ID), - CONSTRAINT H_FKEY_D FOREIGN KEY (H_W_ID, H_D_ID) REFERENCES DISTRICT (D_W_ID, D_ID) +DROP TABLE IF EXISTS HISTORY CASCADE; +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, + H_AMOUNT DECIMAL(6, 2) NOT NULL, + H_DATA VARCHAR(24) NOT NULL, + CONSTRAINT H_FKEY_C FOREIGN KEY (H_C_W_ID, H_C_D_ID, H_C_ID) REFERENCES CUSTOMER (C_W_ID, C_D_ID, C_ID), + CONSTRAINT H_FKEY_D FOREIGN KEY (H_W_ID, H_D_ID) REFERENCES DISTRICT (D_W_ID, D_ID) ); -DROP TABLE IF EXISTS ITEM; -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) +DROP TABLE IF EXISTS ITEM CASCADE; +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) ); -DROP TABLE IF EXISTS STOCK; -CREATE TABLE STOCK ( - S_W_ID INT NOT NULL REFERENCES WAREHOUSE (W_ID), - S_I_ID INT NOT NULL REFERENCES ITEM (I_ID), - S_QUANTITY int 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) +DROP TABLE IF EXISTS STOCK CASCADE; +CREATE TABLE STOCK +( + S_W_ID INT NOT NULL REFERENCES WAREHOUSE (W_ID), + S_I_ID INT NOT NULL REFERENCES ITEM (I_ID), + S_QUANTITY int 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) ); -DROP TABLE IF EXISTS ORDER_LINE; -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, - OL_AMOUNT DECIMAL(6,2) NOT NULL, - OL_SUPPLY_W_ID INT NOT NULL, - OL_QUANTITY DECIMAL(6,2) NOT NULL, +DROP TABLE IF EXISTS ORDER_LINE CASCADE; +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, + OL_AMOUNT DECIMAL(6, 2) NOT NULL, + OL_SUPPLY_W_ID INT NOT NULL, + OL_QUANTITY DECIMAL(6, 2) NOT NULL, OL_DIST_INFO CHAR(24) NOT NULL, PRIMARY KEY (OL_W_ID,OL_D_ID,OL_O_ID,OL_NUMBER), CONSTRAINT OL_FKEY_O FOREIGN KEY (OL_W_ID, OL_D_ID, OL_O_ID) REFERENCES OORDER (O_W_ID, O_D_ID, O_ID), diff --git a/src/main/resources/benchmarks/tpch/ddl-generic.sql b/src/main/resources/benchmarks/tpch/ddl-generic.sql index 2001d19ee..afdbacbdc 100644 --- a/src/main/resources/benchmarks/tpch/ddl-generic.sql +++ b/src/main/resources/benchmarks/tpch/ddl-generic.sql @@ -1,21 +1,27 @@ -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; +DROP TABLE IF EXISTS nation CASCADE; +DROP TABLE IF EXISTS region CASCADE; +DROP TABLE IF EXISTS part CASCADE; +DROP TABLE IF EXISTS supplier CASCADE; +DROP TABLE IF EXISTS partsupp CASCADE; +DROP TABLE IF EXISTS orders CASCADE; +DROP TABLE IF EXISTS customer CASCADE; +DROP TABLE IF EXISTS lineitem CASCADE; -- 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)); +CREATE TABLE nation +( + n_nationkey INTEGER NOT NULL, + n_name CHAR(25) NOT NULL, + n_regionkey INTEGER NOT NULL, + n_comment VARCHAR(152) +); -CREATE TABLE region ( r_regionkey INTEGER NOT NULL, - r_name CHAR(25) NOT NULL, - r_comment VARCHAR(152)); +CREATE TABLE region +( + r_regionkey INTEGER NOT NULL, + r_name CHAR(25) NOT NULL, + r_comment VARCHAR(152) +); CREATE TABLE part ( p_partkey INTEGER NOT NULL, p_name VARCHAR(55) NOT NULL, diff --git a/src/main/resources/benchmarks/tpch/dialect-hsqldb.xml b/src/main/resources/benchmarks/tpch/dialect-hsqldb.xml new file mode 100644 index 000000000..ee0c9c9a5 --- /dev/null +++ b/src/main/resources/benchmarks/tpch/dialect-hsqldb.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + cast(? as date) group by l_orderkey, o_orderdate, o_shippriority order by revenue desc, o_orderdate limit 10 + ]]> + + + + + = cast(? as date) and o_orderdate < cast(? as date) + interval '3' month and exists ( select * from lineitem where l_orderkey = o_orderkey and l_commitdate < l_receiptdate ) group by o_orderpriority order by o_orderpriority + ]]> + + + + + = cast(? as date) and o_orderdate < cast(? as date) + interval '1' year group by n_name order by revenue desc + ]]> + + + + + = cast(? as date) and l_shipdate < cast(? as date) + interval '1' year and l_discount between ? - 0.01 and ? + 0.01 and l_quantity < ? + ]]> + + + + + = cast(? as date) and o_orderdate < cast(? as date) + interval '3' month and l_returnflag = 'R' and c_nationkey = n_nationkey group by c_custkey, c_name, c_acctbal, c_phone, n_name, c_address, c_comment order by revenue desc limit 20 + ]]> + + + + + '1-URGENT' and o_orderpriority <> '2-HIGH' then 1 else 0 end) as low_line_count from orders,lineitem where o_orderkey = l_orderkey and l_shipmode in (?, ?) and l_commitdate < l_receiptdate and l_shipdate < l_commitdate and l_receiptdate >= cast(? as date) and l_receiptdate < cast(? as date) + interval '1' year group by l_shipmode order by l_shipmode + ]]> + + + + + = cast(? as date) and l_shipdate < cast(? as date) + interval '1' month + ]]> + + + + + = cast(? as date) and l_shipdate < cast(? as date) + interval '3' month group by l_suppkey + ]]> + + + + + ( select 0.5 * sum(l_quantity) from lineitem where l_partkey = ps_partkey and l_suppkey = ps_suppkey and l_shipdate >= cast(? as date) and l_shipdate < cast(? as date) + interval '1' year ) ) and s_nationkey = n_nationkey and n_name = ? order by s_name + ]]> + + + + diff --git a/src/main/resources/benchmarks/twitter/ddl-generic.sql b/src/main/resources/benchmarks/twitter/ddl-generic.sql index fec4ec6a4..c944ad458 100644 --- a/src/main/resources/benchmarks/twitter/ddl-generic.sql +++ b/src/main/resources/benchmarks/twitter/ddl-generic.sql @@ -1,50 +1,55 @@ -- MySQL ddl from Twitter dump -DROP TABLE IF EXISTS user_profiles; -CREATE TABLE user_profiles ( - uid int NOT NULL, - name varchar(255) DEFAULT NULL, - email varchar(255) DEFAULT NULL, - partitionid int DEFAULT NULL, - partitionid2 tinyint DEFAULT NULL, - followers int DEFAULT NULL, - PRIMARY KEY (uid) +DROP TABLE IF EXISTS user_profiles CASCADE; +CREATE TABLE user_profiles +( + uid int NOT NULL, + name varchar(255) DEFAULT NULL, + email varchar(255) DEFAULT NULL, + partitionid int DEFAULT NULL, + partitionid2 tinyint DEFAULT NULL, + followers int DEFAULT NULL, + PRIMARY KEY (uid) ); CREATE INDEX IDX_USER_FOLLOWERS ON user_profiles (followers); CREATE INDEX IDX_USER_PARTITION ON user_profiles (partitionid); -DROP TABLE IF EXISTS followers; -CREATE TABLE followers ( - f1 int NOT NULL REFERENCES user_profiles (uid), - f2 int NOT NULL REFERENCES user_profiles (uid), - PRIMARY KEY (f1,f2) +DROP TABLE IF EXISTS followers CASCADE; +CREATE TABLE followers +( + f1 int NOT NULL REFERENCES user_profiles (uid), + f2 int NOT NULL REFERENCES user_profiles (uid), + PRIMARY KEY (f1, f2) ); -DROP TABLE IF EXISTS follows; -CREATE TABLE follows ( - f1 int NOT NULL REFERENCES user_profiles (uid), - f2 int NOT NULL REFERENCES user_profiles (uid), - PRIMARY KEY (f1,f2) +DROP TABLE IF EXISTS follows CASCADE; +CREATE TABLE follows +( + f1 int NOT NULL REFERENCES user_profiles (uid), + f2 int NOT NULL REFERENCES user_profiles (uid), + PRIMARY KEY (f1, f2) ); -- TODO: id AUTO_INCREMENT -DROP TABLE IF EXISTS tweets; -CREATE TABLE tweets ( - id bigint NOT NULL, - uid int NOT NULL REFERENCES user_profiles (uid), - text char(140) NOT NULL, - createdate datetime DEFAULT NULL, - PRIMARY KEY (id) +DROP TABLE IF EXISTS tweets CASCADE; +CREATE TABLE tweets +( + id bigint NOT NULL, + uid int NOT NULL REFERENCES user_profiles (uid), + text char(140) NOT NULL, + createdate datetime DEFAULT NULL, + PRIMARY KEY (id) ); CREATE INDEX IDX_TWEETS_UID ON tweets (uid); -- TODO: id auto_increment -DROP TABLE IF EXISTS added_tweets; -CREATE TABLE added_tweets ( - id bigint NOT NULL, - uid int NOT NULL REFERENCES user_profiles (uid), - text char(140) NOT NULL, - createdate datetime DEFAULT NULL, - PRIMARY KEY (id) +DROP TABLE IF EXISTS added_tweets CASCADE; +CREATE TABLE added_tweets +( + id bigint NOT NULL, + uid int NOT NULL REFERENCES user_profiles (uid), + text char(140) NOT NULL, + createdate datetime DEFAULT NULL, + PRIMARY KEY (id) ); CREATE INDEX IDX_ADDED_TWEETS_UID ON added_tweets (uid); \ No newline at end of file diff --git a/src/main/resources/benchmarks/voter/ddl-generic.sql b/src/main/resources/benchmarks/voter/ddl-generic.sql index 596dd6ac6..a18452093 100644 --- a/src/main/resources/benchmarks/voter/ddl-generic.sql +++ b/src/main/resources/benchmarks/voter/ddl-generic.sql @@ -1,12 +1,15 @@ +DROP VIEW IF EXISTS V_VOTES_BY_PHONE_NUMBER CASCADE; +DROP VIEW IF EXISTS V_VOTES_BY_CONTESTANT_NUMBER_STATE CASCADE; +DROP TABLE IF EXISTS VOTES CASCADE; +DROP TABLE IF EXISTS AREA_CODE_STATE CASCADE; +DROP TABLE IF EXISTS CONTESTANTS CASCADE; + -- contestants table holds the contestants numbers (for voting) and names CREATE TABLE CONTESTANTS ( - contestant_number integer NOT NULL -, contestant_name varchar(50) NOT NULL -, PRIMARY KEY - ( - contestant_number - ) + contestant_number integer NOT NULL, + contestant_name varchar(50) NOT NULL, + PRIMARY KEY (contestant_number) ); -- Map of Area Codes and States for geolocation classification of incoming calls diff --git a/src/main/resources/benchmarks/wikipedia/ddl-generic.sql b/src/main/resources/benchmarks/wikipedia/ddl-generic.sql index 8b758ce8a..e76be036b 100644 --- a/src/main/resources/benchmarks/wikipedia/ddl-generic.sql +++ b/src/main/resources/benchmarks/wikipedia/ddl-generic.sql @@ -1,147 +1,154 @@ -- TODO: ipb_id auto_increment -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 (ipb_address,ipb_user,ipb_auto,ipb_anon_only) +DROP TABLE IF EXISTS ipblocks CASCADE; +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 (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_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) +DROP TABLE IF EXISTS useracct CASCADE; +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 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, - log_user_text varbinary(255) NOT NULL, - log_page int DEFAULT NULL, - PRIMARY KEY (log_id) +DROP TABLE IF EXISTS logging CASCADE; +CREATE TABLE logging +( + log_id int NOT NULL, + 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, + log_user_text varbinary(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_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); +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 binary(14) NOT NULL, - page_latest int NOT NULL, - page_len int NOT NULL, - PRIMARY KEY (page_id), - UNIQUE (page_namespace,page_title) +DROP TABLE IF EXISTS page CASCADE; +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 binary(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 binary(14) NOT NULL, - page_latest int NOT NULL, - page_len int NOT NULL, - PRIMARY KEY (page_id), - UNIQUE (page_namespace,page_title) +DROP TABLE IF EXISTS page_backup CASCADE; +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 binary(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 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_page,pr_type) +DROP TABLE IF EXISTS page_restrictions CASCADE; +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_page, pr_type) ); -CREATE INDEX IDX_PR_TYPELEVEL ON page_restrictions (pr_type,pr_level); +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 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, +DROP TABLE IF EXISTS recentchanges CASCADE; +CREATE TABLE recentchanges +( + rc_id int NOT NULL, + 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, rc_cur_id int NOT NULL, @@ -162,65 +169,70 @@ CREATE TABLE recentchanges ( 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_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_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); +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 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), - UNIQUE (rev_page,rev_id) +DROP TABLE IF EXISTS revision CASCADE; +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 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), + 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); +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 text CASCADE; +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 varbinary(16) NOT NULL, - UNIQUE (ug_user,ug_group) +DROP TABLE IF EXISTS user_groups CASCADE; +CREATE TABLE user_groups +( + ug_user int NOT NULL REFERENCES useracct (user_id), + 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 value_backup CASCADE; +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) +DROP TABLE IF EXISTS watchlist CASCADE; +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 diff --git a/src/test/java/com/oltpbenchmark/api/AbstractTestBenchmarkModule.java b/src/test/java/com/oltpbenchmark/api/AbstractTestBenchmarkModule.java index ff4d5d019..247157ec0 100644 --- a/src/test/java/com/oltpbenchmark/api/AbstractTestBenchmarkModule.java +++ b/src/test/java/com/oltpbenchmark/api/AbstractTestBenchmarkModule.java @@ -26,12 +26,21 @@ import java.io.InputStream; import java.net.URL; import java.util.Collection; +import java.util.List; import java.util.Set; import java.util.stream.Collectors; public abstract class AbstractTestBenchmarkModule extends AbstractTestCase { - protected static final int NUM_TERMINALS = 10; + + public AbstractTestBenchmarkModule() { + super(false, false); + } + + @Override + public List ignorableTables() { + return null; + } /** * testGetDatabaseDDLPath @@ -59,41 +68,24 @@ public void testCreateDatabase() throws Exception { // Just make sure that there are no empty tables for (Table catalog_tbl : catalog.getTables()) { assert (catalog_tbl.getColumnCount() > 0) : "Missing columns for " + catalog_tbl; -// System.err.println(catalog_tbl); - } // FOR + } } /** * testGetTransactionType */ - public void testGetTransactionType() throws Exception { + public void testGetTransactionType() { int id = 1; - for (Class procClass : this.procClasses) { + for (Class procClass : procedures()) { assertNotNull(procClass); String procName = procClass.getSimpleName(); TransactionType txnType = this.benchmark.initTransactionType(procName, id++, 0, 0); assertNotNull(txnType); assertEquals(procClass, txnType.getProcedureClass()); -// System.err.println(procClass + " -> " + txnType); - } // FOR - } - - /** - * testGetTransactionTypeInvalidId - */ - public void testGetTransactionTypeInvalidId() throws Exception { - Class procClass = this.procClasses.get(0); - assertNotNull(procClass); - String procName = procClass.getSimpleName(); - TransactionType txnType = null; - try { - txnType = this.benchmark.initTransactionType(procName, TransactionType.INVALID_ID, 0, 0); - } catch (Throwable ex) { - // Ignore } - assertNull(txnType); } + /** * testGetSQLDialectPath */ @@ -125,12 +117,10 @@ public void testLoadSQLDialect() throws Exception { String sql = dialects.getSQL(procName, stmtName); assertNotNull(sql); assertFalse(sql.isEmpty()); - // System.err.printf("%s.%s:\n%s\n\n", procName, stmtName, sql); - } // FOR - } // FOR + } + } - // TODO: We should XSD to validate the SQL - } // FOR (dbtype) + } } } @@ -148,9 +138,9 @@ public void testDumpSQLDialect() throws Exception { assertNotNull(dump); assertFalse(dump.isEmpty()); Set benchmarkProcedureNames = this.benchmark.getProcedures().values() - .stream() - .map(Procedure::getProcedureName) - .collect(Collectors.toSet()); + .stream() + .map(Procedure::getProcedureName) + .collect(Collectors.toSet()); for (String procName : dialects.getProcedureNames()) { if (benchmarkProcedureNames.contains(procName)) { assertTrue(procName, dump.contains(procName)); @@ -178,19 +168,19 @@ public void testSetSQLDialect() throws Exception { if (dialects.getProcedureNames().contains(proc.getProcedureName())) { // Need a new proc because the dialect gets loaded in BenchmarkModule::getProcedureName Procedure testProc = ClassUtil.newInstance(proc.getClass().getName(), - new Object[0], new Class[0]); + new Object[0], new Class[0]); assertNotNull(testProc); testProc.initialize(dbType); testProc.loadSQLDialect(dialects); Collection dialectStatementNames = dialects.getStatementNames( - testProc.getProcedureName()); + testProc.getProcedureName()); for (String statementName : dialectStatementNames) { SQLStmt stmt = testProc.getStatements().get(statementName); assertNotNull(stmt); String dialectSQL = dialects.getSQL(testProc.getProcedureName(), - statementName); + statementName); assertEquals(dialectSQL, stmt.getOriginalSQL()); } } @@ -199,14 +189,4 @@ public void testSetSQLDialect() throws Exception { } } - /** - * testMakeWorkers - */ -// public void testMakeWorkers() throws Exception { -// this.workConf.setTerminals(NUM_TERMINALS); -// List workers = this.benchmark.makeWorkers(false); -// assertNotNull(workers); -// assertEquals(NUM_TERMINALS, workers.size()); -// assertNotNull(workers.get(0)); -// } } diff --git a/src/test/java/com/oltpbenchmark/api/AbstractTestCase.java b/src/test/java/com/oltpbenchmark/api/AbstractTestCase.java index f78948e4c..fbbc37802 100644 --- a/src/test/java/com/oltpbenchmark/api/AbstractTestCase.java +++ b/src/test/java/com/oltpbenchmark/api/AbstractTestCase.java @@ -21,18 +21,22 @@ import com.oltpbenchmark.types.DatabaseType; import com.oltpbenchmark.util.ClassUtil; import junit.framework.TestCase; +import org.hsqldb.Database; +import org.hsqldb.persist.HsqlProperties; +import org.hsqldb.server.Server; +import org.hsqldb.server.ServerConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; +import java.io.IOException; import java.sql.Connection; import java.util.ArrayList; import java.util.List; -import java.util.Random; +import java.util.concurrent.atomic.AtomicInteger; public abstract class AbstractTestCase extends TestCase { - private static final Logger LOG = LoggerFactory.getLogger(AbstractTestCase.class); + protected final Logger LOG = LoggerFactory.getLogger(getClass()); // ----------------------------------------------------------------- @@ -40,76 +44,156 @@ public abstract class AbstractTestCase extends TestCa * This is the database type that we will use in our unit tests. * This should always be one of the embedded java databases */ - public static final DatabaseType DB_TYPE = DatabaseType.HSQLDB; - public static final String DB_CONNECTION; - - static { - switch (DB_TYPE) { - case HSQLDB: { - DB_CONNECTION = "jdbc:hsqldb:mem:"; - break; - } - default: { - LOG.warn("Unexpected testing DatabaseType '" + DB_TYPE + "'"); - DB_CONNECTION = null; - } - } // SWITCH + private static final DatabaseType DB_TYPE = DatabaseType.HSQLDB; - } // ----------------------------------------------------------------- protected static final double DB_SCALE_FACTOR = 0.01; - protected String dbName; + private Server server = null; + protected WorkloadConfiguration workConf; protected T benchmark; protected AbstractCatalog catalog; protected Connection conn; - protected List> procClasses = new ArrayList>(); - @SuppressWarnings({"rawtypes", "unchecked"}) - protected void setUp(Class clazz, Class... procClasses) throws Exception { - super.setUp(); + protected final boolean createDatabase; + protected final boolean loadDatabase; + + private static final AtomicInteger portCounter = new AtomicInteger(9001); + + + public AbstractTestCase(boolean createDatabase, boolean loadDatabase) { + this.createDatabase = createDatabase; + this.loadDatabase = loadDatabase; + } + + public abstract List> procedures(); + + public abstract Class benchmarkClass(); + + public abstract List ignorableTables(); + + @Override + protected final void setUp() throws Exception { + HsqlProperties props = new HsqlProperties(); + //props.setProperty("server.remote_open", true); + + int port = portCounter.incrementAndGet(); + + LOG.info("starting HSQLDB server for test [{}] on port [{}]", this.getName(), port); + + server = new Server(); + server.setProperties(props); + server.setDatabasePath(0, "mem:benchbase;sql.syntax_mys=true"); + server.setDatabaseName(0, "benchbase"); + server.setAddress("localhost"); + server.setPort(port); + server.setSilent(true); + server.setLogWriter(null); + server.start(); this.workConf = new WorkloadConfiguration(); TransactionTypes txnTypes = new TransactionTypes(new ArrayList<>()); - for (int i = 0; i < procClasses.length; i++) { - assertFalse("Duplicate Procedure '" + procClasses[i] + "'", - this.procClasses.contains(procClasses[i])); - this.procClasses.add(procClasses[i]); - TransactionType tt = new TransactionType(procClasses[i], i, false, 0, 0); + + int id = 0; + for (Class procedureClass : procedures()) { + TransactionType tt = new TransactionType(procedureClass, id++, false, 0, 0); txnTypes.add(tt); - } // FOR + } + + String DB_CONNECTION = String.format("jdbc:hsqldb:hsql://localhost:%d/benchbase", server.getPort()); - this.dbName = String.format("%s-%d.db", clazz.getSimpleName(), new Random().nextInt()); this.workConf.setTransTypes(txnTypes); this.workConf.setDatabaseType(DB_TYPE); - this.workConf.setUrl(DB_CONNECTION + this.dbName + ";sql.syntax_mys=true"); + this.workConf.setUrl(DB_CONNECTION); this.workConf.setScaleFactor(DB_SCALE_FACTOR); - this.workConf.setBenchmarkName(BenchmarkModule.convertBenchmarkClassToBenchmarkName(clazz)); + this.workConf.setTerminals(1); + this.workConf.setBatchSize(128); + this.workConf.setBenchmarkName(BenchmarkModule.convertBenchmarkClassToBenchmarkName(benchmarkClass())); + + customWorkloadConfiguration(this.workConf); - this.benchmark = ClassUtil.newInstance(clazz, + this.benchmark = ClassUtil.newInstance(benchmarkClass(), new Object[]{this.workConf}, new Class[]{WorkloadConfiguration.class}); assertNotNull(this.benchmark); - LOG.debug(DB_TYPE + "::" + this.benchmark + " -> " + this.dbName); + + this.conn = this.benchmark.makeConnection(); + assertNotNull(this.conn); this.benchmark.refreshCatalog(); this.catalog = this.benchmark.getCatalog(); assertNotNull(this.catalog); - this.conn = this.benchmark.makeConnection(); - assertNotNull(this.conn); - assertFalse(this.conn.isReadOnly()); + + if (createDatabase) { + try { + this.benchmark.createDatabase(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + cleanupServer(); + fail("createDatabase() failed"); + } + } + + if (loadDatabase) { + try { + this.benchmark.loadDatabase(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + cleanupServer(); + fail("loadDatabase() failed"); + } + } + + try { + postCreateDatabaseSetup(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + cleanupServer(); + fail("postCreateDatabaseSetup() failed"); + } + } + + protected void customWorkloadConfiguration(WorkloadConfiguration workConf) { + + } + + protected void postCreateDatabaseSetup() throws IOException { + } + @Override - protected void tearDown() throws Exception { - super.tearDown(); - this.conn.close(); - File f = new File(this.dbName); - if (f.exists()) { - f.delete(); + protected final void tearDown() throws Exception { + + if (this.conn != null) { + this.conn.close(); + } + + cleanupServer(); + } + + private void cleanupServer() { + if (server != null) { + + LOG.trace("shutting down catalogs..."); + server.shutdownCatalogs(Database.CLOSEMODE_NORMAL); + + LOG.trace("stopping server..."); + server.stop(); + + while (server.getState() != ServerConstants.SERVER_STATE_SHUTDOWN) { + try { + Thread.sleep(100); + } catch (InterruptedException ignore) { + } + } + + LOG.trace("shutting down server..."); + server.shutdown(); + } } } diff --git a/src/test/java/com/oltpbenchmark/api/AbstractTestLoader.java b/src/test/java/com/oltpbenchmark/api/AbstractTestLoader.java index 320999aeb..8143e9893 100644 --- a/src/test/java/com/oltpbenchmark/api/AbstractTestLoader.java +++ b/src/test/java/com/oltpbenchmark/api/AbstractTestLoader.java @@ -24,116 +24,80 @@ import org.slf4j.LoggerFactory; import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Statement; -import java.util.HashSet; -import java.util.Set; +import java.util.List; public abstract class AbstractTestLoader extends AbstractTestCase { private static final Logger LOG = LoggerFactory.getLogger(AbstractTestLoader.class); + public AbstractTestLoader() { + super(true, false); + } - /** - * These are tables that are not pre-loaded by the benchmark loader - * So we want to ignore them if their count is zero - */ - private final Set ignoreTables = new HashSet(); - - @SuppressWarnings("rawtypes") - protected void setUp(Class clazz, String[] ignoreTables, Class... procClasses) throws Exception { - super.setUp(clazz, procClasses); - - if (ignoreTables != null) { - for (String t : ignoreTables) { - this.ignoreTables.add(t.toUpperCase()); - } // FOR - } - - this.workConf.setScaleFactor(.001); - this.workConf.setTerminals(1); - this.workConf.setBatchSize(128); - - this.benchmark.createDatabase(); - this.benchmark.getProcedures(); + @Override + public List ignorableTables() { + return null; } /** * testLoad */ public void testLoad() throws Exception { - Statement stmt = conn.createStatement(); - ResultSet result = null; - // All we really can do here is just invoke the loader - // and then check to make sure that our tables aren't empty this.benchmark.loadDatabase(); - assertFalse("Failed to get table names for " + benchmark.getBenchmarkName().toUpperCase(), - this.catalog.getTables().isEmpty()); - - LOG.debug("Computing the size of the tables"); - Histogram tableSizes = new Histogram(true); - for (Table table : this.catalog.getTables()) { - String tableName = table.getName(); - if (this.ignoreTables.contains(tableName.toUpperCase())) continue; - Table catalog_tbl = this.catalog.getTable(tableName); - String sql = SQLUtil.getCountSQL(this.workConf.getDatabaseType(), catalog_tbl); - result = stmt.executeQuery(sql); - assertNotNull(result); - boolean adv = result.next(); - assertTrue(sql, adv); - int count = result.getInt(1); - result.close(); - LOG.debug(sql + " => " + count); - tableSizes.put(tableName, count); - } // FOR - LOG.debug("=== TABLE SIZES ===\n" + tableSizes); - assertFalse("Unable to compute the tables size for " + benchmark.getBenchmarkName().toUpperCase(), - tableSizes.isEmpty()); - - for (String tableName : tableSizes.values()) { - long count = tableSizes.get(tableName); - assert (count > 0) : "No tuples were inserted for table " + tableName; - } // FOR + validateLoad(); } - public Loader testLoadWithReturn() throws Exception { - Loader loader; - Statement stmt = conn.createStatement(); - ResultSet result = null; + private void validateLoad() throws SQLException { + assertFalse("Failed to get table names for " + benchmark.getBenchmarkName().toUpperCase(), this.catalog.getTables().isEmpty()); - // All we really can do here is just invoke the loader - // and then check to make sure that our tables aren't empty - loader = this.benchmark.loadDatabase(); - assertFalse("Failed to get table names for " + benchmark.getBenchmarkName().toUpperCase(), - this.catalog.getTables().isEmpty()); LOG.debug("Computing the size of the tables"); Histogram tableSizes = new Histogram(true); + for (Table table : this.catalog.getTables()) { String tableName = table.getName(); - if (this.ignoreTables.contains(tableName.toUpperCase())) continue; Table catalog_tbl = this.catalog.getTable(tableName); String sql = SQLUtil.getCountSQL(this.workConf.getDatabaseType(), catalog_tbl); - result = stmt.executeQuery(sql); - assertNotNull(result); - boolean adv = result.next(); - assertTrue(sql, adv); - int count = result.getInt(1); - result.close(); - LOG.debug(sql + " => " + count); - tableSizes.put(tableName, count); - } // FOR + + try (Statement stmt = conn.createStatement(); + ResultSet result = stmt.executeQuery(sql);) { + + assertNotNull(result); + + boolean adv = result.next(); + assertTrue(sql, adv); + + int count = result.getInt(1); + LOG.debug(sql + " => " + count); + tableSizes.put(tableName, count); + } + } + LOG.debug("=== TABLE SIZES ===\n" + tableSizes); - assertFalse("Unable to compute the tables size for " + benchmark.getBenchmarkName().toUpperCase(), - tableSizes.isEmpty()); + assertFalse("Unable to compute the tables size for " + benchmark.getBenchmarkName().toUpperCase(), tableSizes.isEmpty()); for (String tableName : tableSizes.values()) { long count = tableSizes.get(tableName); + + if (ignorableTables() != null && ignorableTables().stream().anyMatch(tableName::equalsIgnoreCase)) { + continue; + } + assert (count > 0) : "No tuples were inserted for table " + tableName; - } // FOR + } + } + + public Loader testLoadWithReturn() throws Exception { + Loader loader = this.benchmark.loadDatabase(); + + validateLoad(); + return loader; } } diff --git a/src/test/java/com/oltpbenchmark/api/AbstractTestWorker.java b/src/test/java/com/oltpbenchmark/api/AbstractTestWorker.java index 4a939bbe9..1f07851e9 100644 --- a/src/test/java/com/oltpbenchmark/api/AbstractTestWorker.java +++ b/src/test/java/com/oltpbenchmark/api/AbstractTestWorker.java @@ -18,10 +18,11 @@ package com.oltpbenchmark.api; import com.oltpbenchmark.api.Procedure.UserAbortException; +import org.apache.commons.lang3.time.StopWatch; -import java.sql.Connection; -import java.util.ArrayList; +import java.io.IOException; import java.util.List; +import java.util.concurrent.TimeUnit; public abstract class AbstractTestWorker extends AbstractTestCase { @@ -29,24 +30,17 @@ public abstract class AbstractTestWorker extends Abst protected List> workers; - @SuppressWarnings("rawtypes") - protected void setUp(Class clazz, Class... procClasses) throws Exception { - super.setUp(clazz, procClasses); + public AbstractTestWorker() { + super(true, true); + } - List txnList = new ArrayList(); - int id = 1; - for (Class procClass : this.procClasses) { - assertNotNull(procClass); - String procName = procClass.getSimpleName(); - TransactionType txnType = this.benchmark.initTransactionType(procName, id++, 0, 0); - assertNotNull(txnType); - assertEquals(procClass, txnType.getProcedureClass()); - txnList.add(txnType); - } // FOR - TransactionTypes txnTypes = new TransactionTypes(txnList); - this.workConf.setTransTypes(txnTypes); - this.workConf.setBatchSize(128); - this.workConf.setTerminals(NUM_TERMINALS); + @Override + public List ignorableTables() { + return null; + } + + @Override + protected void postCreateDatabaseSetup() throws IOException { this.workers = this.benchmark.makeWorkers(); assertNotNull(this.workers); assertEquals(NUM_TERMINALS, this.workers.size()); @@ -55,42 +49,50 @@ protected void setUp(Class clazz, Class... procClasses) throws Exception { /** * testGetProcedure */ - public void testGetProcedure() throws Exception { + public void testGetProcedure() { // Make sure that we can get a Procedure handle for each TransactionType Worker w = workers.get(0); assertNotNull(w); - for (Class procClass : this.procClasses) { + for (Class procClass : this.procedures()) { assertNotNull(procClass); Procedure proc = w.getProcedure(procClass); assertNotNull("Failed to get procedure " + procClass.getSimpleName(), proc); assertEquals(procClass, proc.getClass()); - } // FOR + } } /** * testExecuteWork */ public void testExecuteWork() throws Exception { - this.benchmark.createDatabase(); - this.benchmark.loadDatabase(); - this.conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); Worker w = workers.get(0); assertNotNull(w); w.initialize(); assertFalse(this.conn.isReadOnly()); for (TransactionType txnType : this.workConf.getTransTypes()) { - if (txnType.isSupplemental()) { continue; } + if (txnType.isSupplemental()) { + continue; + } + + StopWatch sw = new StopWatch(txnType.toString()); + try { - // Bombs away! + LOG.info("starting execution of [{}]", txnType); + sw.start(); w.executeWork(this.conn, txnType); + sw.stop(); + + } catch (UserAbortException ex) { // These are expected, so they can be ignored // Anything else is a serious error } catch (Throwable ex) { throw new RuntimeException("Failed to execute " + txnType, ex); + } finally { + + LOG.info("completed execution of [{}] in {} ms", txnType.toString(), sw.getTime(TimeUnit.MILLISECONDS)); } - conn.commit(); - } // FOR + } } } diff --git a/src/test/java/com/oltpbenchmark/api/MockBenchmark.java b/src/test/java/com/oltpbenchmark/api/MockBenchmark.java index 1e8b4ad85..cfe7e3b46 100644 --- a/src/test/java/com/oltpbenchmark/api/MockBenchmark.java +++ b/src/test/java/com/oltpbenchmark/api/MockBenchmark.java @@ -17,11 +17,8 @@ package com.oltpbenchmark.api; import com.oltpbenchmark.WorkloadConfiguration; -import com.oltpbenchmark.types.DatabaseType; -import java.io.File; import java.io.IOException; -import java.net.URL; import java.util.List; public class MockBenchmark extends BenchmarkModule { @@ -32,19 +29,16 @@ public MockBenchmark() { @Override protected Package getProcedurePackageImpl() { - // TODO Auto-generated method stub return null; } @Override protected Loader makeLoaderImpl() { - // TODO Auto-generated method stub return null; } @Override protected List> makeWorkersImpl() throws IOException { - // TODO Auto-generated method stub return null; } -} // END CLASS \ No newline at end of file +} \ No newline at end of file diff --git a/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkBenchmark.java index 282ab75f4..dd6de91d8 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkBenchmark.java @@ -23,12 +23,13 @@ import com.oltpbenchmark.benchmarks.auctionmark.procedures.*; import com.oltpbenchmark.benchmarks.auctionmark.util.CategoryParser; +import java.io.IOException; +import java.util.List; import java.util.Map; public class TestAuctionMarkBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { - GetItem.class, + public static final List> PROCEDURE_CLASSES = List.of(GetItem.class, GetUserInfo.class, NewBid.class, NewComment.class, @@ -36,12 +37,21 @@ public class TestAuctionMarkBenchmark extends AbstractTestBenchmarkModule> procedures() { + return PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return AuctionMarkBenchmark.class; + } + + @Override + protected void postCreateDatabaseSetup() throws IOException { + super.postCreateDatabaseSetup(); AuctionMarkProfile.clearCachedProfile(); } @@ -62,5 +72,4 @@ public void testSupplementalClasses() throws Exception { Map procs = this.benchmark.getProcedures(); assertNotNull(procs); } - } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkLoader.java index 152ce301d..749e61091 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkLoader.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkLoader.java @@ -17,6 +17,7 @@ package com.oltpbenchmark.benchmarks.auctionmark; import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.api.Worker; import com.oltpbenchmark.benchmarks.auctionmark.util.ItemInfo; import com.oltpbenchmark.util.Histogram; @@ -29,14 +30,14 @@ public class TestAuctionMarkLoader extends AbstractTestLoader { - private static String IGNORE[] = { -// AuctionMarkConstants.TABLENAME_CONFIG_PROFILE, - }; + @Override + public List> procedures() { + return TestAuctionMarkBenchmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(AuctionMarkBenchmark.class, IGNORE, TestAuctionMarkBenchmark.PROC_CLASSES); - this.workConf.setScaleFactor(0.1); + public Class benchmarkClass() { + return AuctionMarkBenchmark.class; } /** diff --git a/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkWorker.java index d7566f1d7..f87272345 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkWorker.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/auctionmark/TestAuctionMarkWorker.java @@ -17,19 +17,31 @@ package com.oltpbenchmark.benchmarks.auctionmark; import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.api.Worker; import com.oltpbenchmark.benchmarks.auctionmark.util.UserId; +import java.io.IOException; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.TreeSet; public class TestAuctionMarkWorker extends AbstractTestWorker { @Override - protected void setUp() throws Exception { - super.setUp(AuctionMarkBenchmark.class, TestAuctionMarkBenchmark.PROC_CLASSES); - this.workConf.setScaleFactor(0.1); + public List> procedures() { + return TestAuctionMarkBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return AuctionMarkBenchmark.class; + } + + @Override + protected void postCreateDatabaseSetup() throws IOException { + super.postCreateDatabaseSetup(); AuctionMarkProfile.clearCachedProfile(); AuctionMarkConstants.CLOSE_AUCTIONS_ENABLE = false; } @@ -38,18 +50,6 @@ protected void setUp() throws Exception { * testUniqueSellers */ public void testUniqueSellers() throws Exception { - int num_workers = 2; - this.workConf.setScaleFactor(0.1); - this.workConf.setTerminals(num_workers); - this.benchmark.createDatabase(); - this.benchmark.loadDatabase(); - - // Make a bunch of workers and then loop through all of them to - // make sure that they don't generate a seller id that was - // generated from another worker - this.workers = this.benchmark.makeWorkers(); - assertNotNull(this.workers); - assertEquals(num_workers, this.workers.size()); Set all_users = new HashSet(); Set worker_users = new TreeSet(); diff --git a/src/test/java/com/oltpbenchmark/benchmarks/chbenchmark/TestCHBenCHmark.java b/src/test/java/com/oltpbenchmark/benchmarks/chbenchmark/TestCHBenCHmark.java index 65d6ab0e3..07f95a71f 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/chbenchmark/TestCHBenCHmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/chbenchmark/TestCHBenCHmark.java @@ -17,11 +17,16 @@ package com.oltpbenchmark.benchmarks.chbenchmark; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.chbenchmark.queries.*; +import org.junit.Ignore; +import java.util.List; + +@Ignore("the testcase is under development") public class TestCHBenCHmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { + public static final List> PROCEDURE_CLASSES = List.of( Q1.class, Q2.class, Q3.class, @@ -43,12 +48,16 @@ public class TestCHBenCHmark extends AbstractTestBenchmarkModule { Q19.class, Q20.class, Q21.class, - Q22.class, - }; + Q22.class); + + @Override + public List> procedures() { + return TestCHBenCHmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(CHBenCHmark.class, PROC_CLASSES); + public Class benchmarkClass() { + return CHBenCHmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/chbenchmark/TestCHBenCHmarkLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/chbenchmark/TestCHBenCHmarkLoader.java new file mode 100644 index 000000000..0f8b4292d --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/chbenchmark/TestCHBenCHmarkLoader.java @@ -0,0 +1,38 @@ +/****************************************************************************** + * Copyright 2015 by OLTPBenchmark Project * + * * + * Licensed 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. * + ******************************************************************************/ + +package com.oltpbenchmark.benchmarks.chbenchmark; + +import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; +import org.junit.Ignore; + +import java.util.List; + +@Ignore("the testcase is under development") +public class TestCHBenCHmarkLoader extends AbstractTestLoader { + + @Override + public List> procedures() { + return TestCHBenCHmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return CHBenCHmark.class; + } + +} diff --git a/src/test/java/com/oltpbenchmark/benchmarks/chbenchmark/TestCHBenCHmarkWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/chbenchmark/TestCHBenCHmarkWorker.java new file mode 100644 index 000000000..5f31db53b --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/chbenchmark/TestCHBenCHmarkWorker.java @@ -0,0 +1,38 @@ +/****************************************************************************** + * Copyright 2015 by OLTPBenchmark Project * + * * + * Licensed 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. * + ******************************************************************************/ + +package com.oltpbenchmark.benchmarks.chbenchmark; + +import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; +import org.junit.Ignore; + +import java.util.List; + +@Ignore("the testcase is under development") +public class TestCHBenCHmarkWorker extends AbstractTestWorker { + + @Override + public List> procedures() { + return TestCHBenCHmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return CHBenCHmark.class; + } + +} diff --git a/src/test/java/com/oltpbenchmark/benchmarks/epinions/TestEpinionsBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/epinions/TestEpinionsBenchmark.java index 9ffc2105c..97c9a15c7 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/epinions/TestEpinionsBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/epinions/TestEpinionsBenchmark.java @@ -18,11 +18,14 @@ package com.oltpbenchmark.benchmarks.epinions; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.epinions.procedures.*; +import java.util.List; + public class TestEpinionsBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { + public static final List> PROCEDURE_CLASSES = List.of( GetAverageRatingByTrustedUser.class, GetItemAverageRating.class, GetItemReviewsByTrustedUser.class, @@ -31,11 +34,16 @@ public class TestEpinionsBenchmark extends AbstractTestBenchmarkModule> procedures() { + return TestEpinionsBenchmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(EpinionsBenchmark.class, PROC_CLASSES); + public Class benchmarkClass() { + return EpinionsBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/epinions/TestEpinionsLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/epinions/TestEpinionsLoader.java new file mode 100644 index 000000000..bad459e6d --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/epinions/TestEpinionsLoader.java @@ -0,0 +1,41 @@ +/****************************************************************************** + * Copyright 2015 by OLTPBenchmark Project * + * * + * Licensed 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. * + ******************************************************************************/ + + +package com.oltpbenchmark.benchmarks.epinions; + +import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; + +public class TestEpinionsLoader extends AbstractTestLoader { + + @Override + public List> procedures() { + return TestEpinionsBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return EpinionsBenchmark.class; + } + + @Override + public List ignorableTables() { + return List.of("review_rating"); + } +} diff --git a/src/test/java/com/oltpbenchmark/benchmarks/epinions/TestEpinionsWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/epinions/TestEpinionsWorker.java new file mode 100644 index 000000000..874fa72a3 --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/epinions/TestEpinionsWorker.java @@ -0,0 +1,37 @@ +/****************************************************************************** + * Copyright 2015 by OLTPBenchmark Project * + * * + * Licensed 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. * + ******************************************************************************/ + + +package com.oltpbenchmark.benchmarks.epinions; + +import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; + +public class TestEpinionsWorker extends AbstractTestWorker { + + @Override + public List> procedures() { + return TestEpinionsBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return EpinionsBenchmark.class; + } + +} diff --git a/src/test/java/com/oltpbenchmark/benchmarks/noop/TestNoOpBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/noop/TestNoOpBenchmark.java index d3fcb0591..e29d5a01b 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/noop/TestNoOpBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/noop/TestNoOpBenchmark.java @@ -17,17 +17,25 @@ package com.oltpbenchmark.benchmarks.noop; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.noop.procedures.NoOp; +import java.util.List; + public class TestNoOpBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { - NoOp.class, - }; + public static final List> PROCEDURE_CLASSES = List.of( + NoOp.class + ); + + @Override + public List> procedures() { + return TestNoOpBenchmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(NoOpBenchmark.class, PROC_CLASSES); + public Class benchmarkClass() { + return NoOpBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/noop/TestNoOpLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/noop/TestNoOpLoader.java new file mode 100644 index 000000000..dbb7d7792 --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/noop/TestNoOpLoader.java @@ -0,0 +1,40 @@ +/****************************************************************************** + * Copyright 2016 by OLTPBenchmark Project * + * * + * Licensed 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. * + ******************************************************************************/ + +package com.oltpbenchmark.benchmarks.noop; + +import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; + +public class TestNoOpLoader extends AbstractTestLoader { + + @Override + public List> procedures() { + return TestNoOpBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return NoOpBenchmark.class; + } + + @Override + public List ignorableTables() { + return List.of("FAKE"); + } +} diff --git a/src/test/java/com/oltpbenchmark/benchmarks/noop/TestNoOpWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/noop/TestNoOpWorker.java new file mode 100644 index 000000000..a575b3315 --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/noop/TestNoOpWorker.java @@ -0,0 +1,36 @@ +/****************************************************************************** + * Copyright 2016 by OLTPBenchmark Project * + * * + * Licensed 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. * + ******************************************************************************/ + +package com.oltpbenchmark.benchmarks.noop; + +import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; + +public class TestNoOpWorker extends AbstractTestWorker { + + @Override + public List> procedures() { + return TestNoOpBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return NoOpBenchmark.class; + } + +} diff --git a/src/test/java/com/oltpbenchmark/benchmarks/resourcestresser/TestResourceStresserBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/resourcestresser/TestResourceStresserBenchmark.java index 2c2037f36..35569f88a 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/resourcestresser/TestResourceStresserBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/resourcestresser/TestResourceStresserBenchmark.java @@ -18,22 +18,30 @@ package com.oltpbenchmark.benchmarks.resourcestresser; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.resourcestresser.procedures.*; +import java.util.List; + public class TestResourceStresserBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { + public static final List> PROCEDURE_CLASSES = List.of( Contention1.class, Contention2.class, CPU1.class, CPU2.class, IO1.class, - IO2.class, - }; + IO2.class + ); + + @Override + public List> procedures() { + return TestResourceStresserBenchmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(ResourceStresserBenchmark.class, PROC_CLASSES); + public Class benchmarkClass() { + return ResourceStresserBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/resourcestresser/TestResourceStresserLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/resourcestresser/TestResourceStresserLoader.java new file mode 100644 index 000000000..1c23bebf3 --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/resourcestresser/TestResourceStresserLoader.java @@ -0,0 +1,19 @@ +package com.oltpbenchmark.benchmarks.resourcestresser; + +import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; + +public class TestResourceStresserLoader extends AbstractTestLoader { + + @Override + public List> procedures() { + return TestResourceStresserBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return ResourceStresserBenchmark.class; + } +} diff --git a/src/test/java/com/oltpbenchmark/benchmarks/resourcestresser/TestResourceStresserWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/resourcestresser/TestResourceStresserWorker.java new file mode 100644 index 000000000..fda5526e9 --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/resourcestresser/TestResourceStresserWorker.java @@ -0,0 +1,19 @@ +package com.oltpbenchmark.benchmarks.resourcestresser; + +import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; + +public class TestResourceStresserWorker extends AbstractTestWorker { + + @Override + public List> procedures() { + return TestResourceStresserBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return ResourceStresserBenchmark.class; + } +} diff --git a/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSBenchmark.java index 61da220ed..d38955175 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSBenchmark.java @@ -18,28 +18,35 @@ package com.oltpbenchmark.benchmarks.seats; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.seats.procedures.*; import com.oltpbenchmark.catalog.Table; import java.io.InputStream; +import java.util.List; public class TestSEATSBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { + public static final List> PROCEDURE_CLASSES = List.of( DeleteReservation.class, FindFlights.class, FindOpenSeats.class, NewReservation.class, UpdateCustomer.class, UpdateReservation.class - }; + ); @Override - protected void setUp() throws Exception { - super.setUp(SEATSBenchmark.class, PROC_CLASSES); - SEATSProfile.clearCachedProfile(); + public List> procedures() { + return TestSEATSBenchmark.PROCEDURE_CLASSES; } + @Override + public Class benchmarkClass() { + return SEATSBenchmark.class; + } + + /** * testGetDataDir */ diff --git a/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSLoader.java index 34fd2665a..13800e2c4 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSLoader.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSLoader.java @@ -17,16 +17,27 @@ package com.oltpbenchmark.benchmarks.seats; import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.api.Worker; -import com.oltpbenchmark.util.RandomGenerator; +import java.io.IOException; import java.util.List; public class TestSEATSLoader extends AbstractTestLoader { @Override - protected void setUp() throws Exception { - super.setUp(SEATSBenchmark.class, null, TestSEATSBenchmark.PROC_CLASSES); + public List> procedures() { + return TestSEATSBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return SEATSBenchmark.class; + } + + @Override + protected void postCreateDatabaseSetup() throws IOException { + super.postCreateDatabaseSetup(); SEATSProfile.clearCachedProfile(); } @@ -44,7 +55,7 @@ public void testSaveLoadProfile() throws Exception { // Make sure there is something in our profile after loading the database assertFalse("Empty Profile: airport_max_customer_id", orig.airport_max_customer_id.isEmpty()); - SEATSProfile copy = new SEATSProfile(this.benchmark, new RandomGenerator(0)); + SEATSProfile copy = new SEATSProfile(this.benchmark, benchmark.getRandomGenerator()); assert (copy.airport_histograms.isEmpty()); List> workers = this.benchmark.makeWorkers(); diff --git a/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSWorker.java index 18bbbee63..ce68f3efa 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSWorker.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/seats/TestSEATSWorker.java @@ -17,14 +17,20 @@ package com.oltpbenchmark.benchmarks.seats; import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; public class TestSEATSWorker extends AbstractTestWorker { @Override - protected void setUp() throws Exception { - super.setUp(SEATSBenchmark.class, TestSEATSBenchmark.PROC_CLASSES); - this.workConf.setScaleFactor(0.01); - SEATSProfile.clearCachedProfile(); + public List> procedures() { + return TestSEATSBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return SEATSBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankBenchmark.java index 76e51d768..77f975954 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankBenchmark.java @@ -18,22 +18,30 @@ package com.oltpbenchmark.benchmarks.smallbank; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.smallbank.procedures.*; +import java.util.List; + public class TestSmallBankBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { + public static final List> PROCEDURE_CLASSES = List.of( Amalgamate.class, Balance.class, DepositChecking.class, SendPayment.class, TransactSavings.class, - WriteCheck.class, - }; + WriteCheck.class + ); + + @Override + public List> procedures() { + return TestSmallBankBenchmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(SmallBankBenchmark.class, PROC_CLASSES); + public Class benchmarkClass() { + return SmallBankBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankLoader.java index 0462547c1..ce39ead57 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankLoader.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankLoader.java @@ -17,13 +17,20 @@ package com.oltpbenchmark.benchmarks.smallbank; import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; public class TestSmallBankLoader extends AbstractTestLoader { @Override - protected void setUp() throws Exception { - super.setUp(SmallBankBenchmark.class, null, TestSmallBankBenchmark.PROC_CLASSES); - this.workConf.setScaleFactor(0.0001); + public List> procedures() { + return TestSmallBankBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return SmallBankBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankWorker.java index 3735af4a0..f7cc14afb 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankWorker.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/smallbank/TestSmallBankWorker.java @@ -17,11 +17,19 @@ package com.oltpbenchmark.benchmarks.smallbank; import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; public class TestSmallBankWorker extends AbstractTestWorker { @Override - protected void setUp() throws Exception { - super.setUp(SmallBankBenchmark.class, TestSmallBankBenchmark.PROC_CLASSES); + public List> procedures() { + return TestSmallBankBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return SmallBankBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPBenchmark.java index 491c874e9..5f2560f00 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPBenchmark.java @@ -18,23 +18,31 @@ package com.oltpbenchmark.benchmarks.tatp; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.tatp.procedures.*; +import java.util.List; + public class TestTATPBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { + public static final List> PROCEDURE_CLASSES = List.of( DeleteCallForwarding.class, GetAccessData.class, GetNewDestination.class, GetSubscriberData.class, InsertCallForwarding.class, UpdateLocation.class, - UpdateSubscriberData.class, - }; + UpdateSubscriberData.class + ); + + @Override + public List> procedures() { + return TestTATPBenchmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(TATPBenchmark.class, PROC_CLASSES); + public Class benchmarkClass() { + return TATPBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPLoader.java index 59353d0ac..befc6f6e0 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPLoader.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPLoader.java @@ -17,13 +17,20 @@ package com.oltpbenchmark.benchmarks.tatp; import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; public class TestTATPLoader extends AbstractTestLoader { @Override - protected void setUp() throws Exception { - super.setUp(TATPBenchmark.class, null, TestTATPBenchmark.PROC_CLASSES); - this.workConf.setScaleFactor(0.0001); + public List> procedures() { + return TestTATPBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return TATPBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPWorker.java index f680a3a01..4a072e8b5 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPWorker.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/tatp/TestTATPWorker.java @@ -17,11 +17,19 @@ package com.oltpbenchmark.benchmarks.tatp; import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; public class TestTATPWorker extends AbstractTestWorker { @Override - protected void setUp() throws Exception { - super.setUp(TATPBenchmark.class, TestTATPBenchmark.PROC_CLASSES); + public List> procedures() { + return TestTATPBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return TATPBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/tpcc/TestTPCCBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/tpcc/TestTPCCBenchmark.java index cabeff57d..dd6330d89 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/tpcc/TestTPCCBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/tpcc/TestTPCCBenchmark.java @@ -18,21 +18,29 @@ package com.oltpbenchmark.benchmarks.tpcc; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.tpcc.procedures.*; +import java.util.List; + public class TestTPCCBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { + public static final List> PROCEDURE_CLASSES = List.of( Delivery.class, NewOrder.class, OrderStatus.class, Payment.class, - StockLevel.class, - }; + StockLevel.class + ); + + @Override + public List> procedures() { + return TestTPCCBenchmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(TPCCBenchmark.class, PROC_CLASSES); + public Class benchmarkClass() { + return TPCCBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/tpcc/TestTPCCLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/tpcc/TestTPCCLoader.java index ee2899be9..e63ea89ab 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/tpcc/TestTPCCLoader.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/tpcc/TestTPCCLoader.java @@ -17,13 +17,20 @@ package com.oltpbenchmark.benchmarks.tpcc; import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; public class TestTPCCLoader extends AbstractTestLoader { @Override - protected void setUp() throws Exception { - super.setUp(TPCCBenchmark.class, null, TestTPCCBenchmark.PROC_CLASSES); - this.workConf.setScaleFactor(0.1); + public List> procedures() { + return TestTPCCBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return TPCCBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/tpcc/TestTPCCWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/tpcc/TestTPCCWorker.java new file mode 100644 index 000000000..6fa9aa246 --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/tpcc/TestTPCCWorker.java @@ -0,0 +1,20 @@ +package com.oltpbenchmark.benchmarks.tpcc; + +import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; + +public class TestTPCCWorker extends AbstractTestWorker { + + @Override + public List> procedures() { + return TestTPCCBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return TPCCBenchmark.class; + } + +} diff --git a/src/test/java/com/oltpbenchmark/benchmarks/tpch/TestTPCHBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/tpch/TestTPCHBenchmark.java index f8be596c9..bf87248e2 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/tpch/TestTPCHBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/tpch/TestTPCHBenchmark.java @@ -18,38 +18,45 @@ package com.oltpbenchmark.benchmarks.tpch; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.tpch.procedures.*; +import java.util.List; + public class TestTPCHBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { - Q1.class, - Q2.class, - Q3.class, - Q4.class, - Q5.class, - Q6.class, - Q7.class, - Q8.class, - Q9.class, - Q10.class, - Q11.class, - Q12.class, - Q13.class, - Q14.class, - Q15.class, - Q16.class, - Q17.class, - Q18.class, - Q19.class, - Q20.class, - Q21.class, - Q22.class, - }; + public static final List> PROCEDURE_CLASSES = List.of( + Q1.class, + Q2.class, + Q3.class, + Q4.class, + Q5.class, + Q6.class, + Q7.class, + Q8.class, + Q9.class, + Q10.class, + Q11.class, + Q12.class, + Q13.class, + Q14.class, + Q15.class, + Q16.class, + Q17.class, + Q18.class, + Q19.class, + Q20.class, + Q21.class, + Q22.class); + + @Override + public List> procedures() { + return TestTPCHBenchmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(TPCHBenchmark.class, PROC_CLASSES); + public Class benchmarkClass() { + return TPCHBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/tpch/TestTPCHLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/tpch/TestTPCHLoader.java index 5dea2fbb8..d0db44b82 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/tpch/TestTPCHLoader.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/tpch/TestTPCHLoader.java @@ -17,13 +17,20 @@ package com.oltpbenchmark.benchmarks.tpch; import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; public class TestTPCHLoader extends AbstractTestLoader { @Override - protected void setUp() throws Exception { - super.setUp(TPCHBenchmark.class, null, TestTPCHBenchmark.PROC_CLASSES); - this.workConf.setScaleFactor(0.01); + public List> procedures() { + return TestTPCHBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return TPCHBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/tpch/TestTPCHWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/tpch/TestTPCHWorker.java new file mode 100644 index 000000000..f589b0b90 --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/tpch/TestTPCHWorker.java @@ -0,0 +1,28 @@ +package com.oltpbenchmark.benchmarks.tpch; + +import com.oltpbenchmark.WorkloadConfiguration; +import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; + +public class TestTPCHWorker extends AbstractTestWorker { + + private static final double SCALE_FACTOR = .001; + + @Override + public List> procedures() { + return TestTPCHBenchmark.PROCEDURE_CLASSES; + } + + @Override + protected void customWorkloadConfiguration(WorkloadConfiguration workConf) { + // let's set the SF even lower than .01 for actual worker tests + this.workConf.setScaleFactor(SCALE_FACTOR); + } + + @Override + public Class benchmarkClass() { + return TPCHBenchmark.class; + } +} \ No newline at end of file diff --git a/src/test/java/com/oltpbenchmark/benchmarks/twitter/TestTwitterBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/twitter/TestTwitterBenchmark.java index 86f262347..b6a657f8f 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/twitter/TestTwitterBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/twitter/TestTwitterBenchmark.java @@ -18,23 +18,30 @@ package com.oltpbenchmark.benchmarks.twitter; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.twitter.procedures.GetFollowers; import com.oltpbenchmark.benchmarks.twitter.procedures.GetTweet; import com.oltpbenchmark.benchmarks.twitter.procedures.GetTweetsFromFollowing; import com.oltpbenchmark.benchmarks.twitter.procedures.InsertTweet; +import java.util.List; + public class TestTwitterBenchmark extends AbstractTestBenchmarkModule { - protected static final Class[] PROC_CLASSES = { + public static final List> PROCEDURE_CLASSES = List.of( GetFollowers.class, GetTweet.class, GetTweetsFromFollowing.class, InsertTweet.class - }; + ); @Override - protected void setUp() throws Exception { - super.setUp(TwitterBenchmark.class, PROC_CLASSES); + public List> procedures() { + return TestTwitterBenchmark.PROCEDURE_CLASSES; } + @Override + public Class benchmarkClass() { + return TwitterBenchmark.class; + } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/twitter/TestTwitterLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/twitter/TestTwitterLoader.java index 5c61656dd..e4fec261b 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/twitter/TestTwitterLoader.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/twitter/TestTwitterLoader.java @@ -17,7 +17,12 @@ package com.oltpbenchmark.benchmarks.twitter; import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; +import org.junit.Ignore; +import java.util.List; + +@Ignore("the testcase is under development") public class TestTwitterLoader extends AbstractTestLoader { private final String[] IGNORED_TABLES = { @@ -25,9 +30,18 @@ public class TestTwitterLoader extends AbstractTestLoader { }; @Override - protected void setUp() throws Exception { - super.setUp(TwitterBenchmark.class, IGNORED_TABLES, TestTwitterBenchmark.PROC_CLASSES); - this.workConf.setScaleFactor(0.1); + public List> procedures() { + return TestTwitterBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return TwitterBenchmark.class; + } + + @Override + public List ignorableTables() { + return List.of(IGNORED_TABLES); } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/twitter/TestTwitterWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/twitter/TestTwitterWorker.java new file mode 100644 index 000000000..c72ba470d --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/twitter/TestTwitterWorker.java @@ -0,0 +1,21 @@ +package com.oltpbenchmark.benchmarks.twitter; + +import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; +import org.junit.Ignore; + +import java.util.List; + +@Ignore("the testcase is under development") +public class TestTwitterWorker extends AbstractTestWorker { + + @Override + public List> procedures() { + return TestTwitterBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return TwitterBenchmark.class; + } +} diff --git a/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterBenchmark.java index 25f0e806e..db6d214c3 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterBenchmark.java @@ -17,17 +17,25 @@ package com.oltpbenchmark.benchmarks.voter; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.voter.procedures.Vote; +import java.util.List; + public class TestVoterBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { - Vote.class, - }; + public static final List> PROCEDURE_CLASSES = List.of( + Vote.class + ); + + @Override + public List> procedures() { + return TestVoterBenchmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(VoterBenchmark.class, PROC_CLASSES); + public Class benchmarkClass() { + return VoterBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterLoader.java index 30fd7c5d3..47017d76e 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterLoader.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterLoader.java @@ -17,6 +17,9 @@ package com.oltpbenchmark.benchmarks.voter; import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; public class TestVoterLoader extends AbstractTestLoader { @@ -25,9 +28,18 @@ public class TestVoterLoader extends AbstractTestLoader { }; @Override - protected void setUp() throws Exception { - super.setUp(VoterBenchmark.class, IGNORE, TestVoterBenchmark.PROC_CLASSES); - this.workConf.setScaleFactor(0.0001); + public List> procedures() { + return TestVoterBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return VoterBenchmark.class; + } + + @Override + public List ignorableTables() { + return List.of(IGNORE); } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterWorker.java index fa0c1cd4b..64e2cc984 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterWorker.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/voter/TestVoterWorker.java @@ -17,11 +17,19 @@ package com.oltpbenchmark.benchmarks.voter; import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; public class TestVoterWorker extends AbstractTestWorker { @Override - protected void setUp() throws Exception { - super.setUp(VoterBenchmark.class, TestVoterBenchmark.PROC_CLASSES); + public List> procedures() { + return TestVoterBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return VoterBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/wikipedia/TestWikipediaBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/wikipedia/TestWikipediaBenchmark.java index 118b4a5b6..51bc8dbf4 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/wikipedia/TestWikipediaBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/wikipedia/TestWikipediaBenchmark.java @@ -18,21 +18,29 @@ package com.oltpbenchmark.benchmarks.wikipedia; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.wikipedia.procedures.*; +import java.util.List; + public class TestWikipediaBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { + public static final List> PROCEDURE_CLASSES = List.of( AddWatchList.class, GetPageAnonymous.class, GetPageAuthenticated.class, RemoveWatchList.class, - UpdatePage.class, - }; + UpdatePage.class + ); + + @Override + public List> procedures() { + return TestWikipediaBenchmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(WikipediaBenchmark.class, PROC_CLASSES); + public Class benchmarkClass() { + return WikipediaBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/wikipedia/TestWikipediaLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/wikipedia/TestWikipediaLoader.java index a948bfccd..a00f034f4 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/wikipedia/TestWikipediaLoader.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/wikipedia/TestWikipediaLoader.java @@ -17,6 +17,9 @@ package com.oltpbenchmark.benchmarks.wikipedia; import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; public class TestWikipediaLoader extends AbstractTestLoader { @@ -33,32 +36,17 @@ public class TestWikipediaLoader extends AbstractTestLoader }; @Override - protected void setUp() throws Exception { - super.setUp(WikipediaBenchmark.class, IGNORE, TestWikipediaBenchmark.PROC_CLASSES); - this.workConf.setScaleFactor(0.1); + public List> procedures() { + return TestWikipediaBenchmark.PROCEDURE_CLASSES; } -// public void testHistograms() throws Exception { -// Collection values = RevisionHistograms.REVISION_DELTA.values(); -// Histogram new_h = new Histogram(); -// for (Integer v : values) { -// Integer cnt = RevisionHistograms.REVISION_DELTA.get(v); -// if (Math.abs(v) >= 100000) { -// int new_v = (int)Math.round(v / 10000.0d) * 10000; -// new_h.put(new_v, cnt); -// } -// else if (Math.abs(v) >= 10000) { -// int new_v = (int)Math.round(v / 1000.0d) * 1000; -// new_h.put(new_v, cnt); -// } -// else { -// new_h.put(v, cnt); -// } -// } -// for (Integer v : new_h.values()) { -// Integer cnt = new_h.get(v); -// System.err.printf("this.put(%d, %d);\n", v, cnt); -// } -// } + @Override + public Class benchmarkClass() { + return WikipediaBenchmark.class; + } + @Override + public List ignorableTables() { + return List.of(IGNORE); + } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/wikipedia/TestWikipediaWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/wikipedia/TestWikipediaWorker.java new file mode 100644 index 000000000..311e88dd3 --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/wikipedia/TestWikipediaWorker.java @@ -0,0 +1,19 @@ +package com.oltpbenchmark.benchmarks.wikipedia; + +import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; + +public class TestWikipediaWorker extends AbstractTestWorker { + + @Override + public List> procedures() { + return TestWikipediaBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return WikipediaBenchmark.class; + } +} diff --git a/src/test/java/com/oltpbenchmark/benchmarks/ycsb/TestYCSBBenchmark.java b/src/test/java/com/oltpbenchmark/benchmarks/ycsb/TestYCSBBenchmark.java index cf7465c60..aff513491 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/ycsb/TestYCSBBenchmark.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/ycsb/TestYCSBBenchmark.java @@ -18,22 +18,30 @@ package com.oltpbenchmark.benchmarks.ycsb; import com.oltpbenchmark.api.AbstractTestBenchmarkModule; +import com.oltpbenchmark.api.Procedure; import com.oltpbenchmark.benchmarks.ycsb.procedures.*; +import java.util.List; + public class TestYCSBBenchmark extends AbstractTestBenchmarkModule { - public static final Class[] PROC_CLASSES = { + public static final List> PROCEDURE_CLASSES = List.of( DeleteRecord.class, InsertRecord.class, ReadModifyWriteRecord.class, ReadRecord.class, ScanRecord.class, - UpdateRecord.class, - }; + UpdateRecord.class + ); + + @Override + public List> procedures() { + return TestYCSBBenchmark.PROCEDURE_CLASSES; + } @Override - protected void setUp() throws Exception { - super.setUp(YCSBBenchmark.class, PROC_CLASSES); + public Class benchmarkClass() { + return YCSBBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/ycsb/TestYCSBLoader.java b/src/test/java/com/oltpbenchmark/benchmarks/ycsb/TestYCSBLoader.java index 722ba53d5..64f72469e 100644 --- a/src/test/java/com/oltpbenchmark/benchmarks/ycsb/TestYCSBLoader.java +++ b/src/test/java/com/oltpbenchmark/benchmarks/ycsb/TestYCSBLoader.java @@ -17,12 +17,20 @@ package com.oltpbenchmark.benchmarks.ycsb; import com.oltpbenchmark.api.AbstractTestLoader; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; public class TestYCSBLoader extends AbstractTestLoader { @Override - protected void setUp() throws Exception { - super.setUp(YCSBBenchmark.class, null, TestYCSBBenchmark.PROC_CLASSES); + public List> procedures() { + return TestYCSBBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return YCSBBenchmark.class; } } diff --git a/src/test/java/com/oltpbenchmark/benchmarks/ycsb/TestYCSBWorker.java b/src/test/java/com/oltpbenchmark/benchmarks/ycsb/TestYCSBWorker.java new file mode 100644 index 000000000..e8b948350 --- /dev/null +++ b/src/test/java/com/oltpbenchmark/benchmarks/ycsb/TestYCSBWorker.java @@ -0,0 +1,19 @@ +package com.oltpbenchmark.benchmarks.ycsb; + +import com.oltpbenchmark.api.AbstractTestWorker; +import com.oltpbenchmark.api.Procedure; + +import java.util.List; + +public class TestYCSBWorker extends AbstractTestWorker { + + @Override + public List> procedures() { + return TestYCSBBenchmark.PROCEDURE_CLASSES; + } + + @Override + public Class benchmarkClass() { + return YCSBBenchmark.class; + } +} diff --git a/src/test/java/com/oltpbenchmark/util/TestTableDataIterable.java b/src/test/java/com/oltpbenchmark/util/TestTableDataIterable.java deleted file mode 100644 index 16f7d1ca5..000000000 --- a/src/test/java/com/oltpbenchmark/util/TestTableDataIterable.java +++ /dev/null @@ -1,79 +0,0 @@ -/****************************************************************************** - * Copyright 2015 by OLTPBenchmark Project * - * * - * Licensed 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. * - ******************************************************************************/ - -package com.oltpbenchmark.util; - -import com.oltpbenchmark.api.AbstractTestCase; -import com.oltpbenchmark.benchmarks.seats.SEATSBenchmark; -import com.oltpbenchmark.catalog.AbstractCatalog; -import com.oltpbenchmark.catalog.HSQLDBCatalog; -import com.oltpbenchmark.catalog.Table; -import org.junit.Test; - -import java.util.Arrays; - -/** - * TestTableDataIterable - * - * @author pavlo - */ -public class TestTableDataIterable extends AbstractTestCase { - - Table catalog_tbl; - - @Override - protected void setUp() throws Exception { - super.setUp(SEATSBenchmark.class); - - AbstractCatalog catalog = new HSQLDBCatalog(this.benchmark); - assertNotNull(catalog); - this.catalog_tbl = catalog.getTable("AIRLINE"); - assertNotNull(catalog.toString(), this.catalog_tbl); - assertFalse(this.catalog_tbl.getColumnCount() == 0); - } - - /** - * testLoadFile - */ - @Test - public void testLoadFile() throws Exception { - String catalogTablePath = SEATSBenchmark.getTableDataFilePath(benchmark.getDataDir(), catalog_tbl); - - TableDataIterable iterable = new TableDataIterable(this.catalog_tbl, catalogTablePath, true, true); - int num_cols = -1; - int num_rows = 0; - for (Object[] row : iterable) { - if (num_cols != -1) { - assertEquals(num_cols, row.length); - } else { -// System.err.println("NUM OF COLS: " + row.length); - } - - assertEquals(this.catalog_tbl.getColumnCount(), row.length); - for (int i = 0; i < num_cols; i++) { - // The first two columns cannot be null - if (i < 2) - assertNotNull(String.format("Row:%d, Col:%d\n%s", num_rows, i, Arrays.toString(row)), row[i]); - } // FOR - - num_cols = row.length; - num_rows++; - } // FOR - assertTrue(num_rows > 0); - - } - -} diff --git a/src/test/resources/log4j.properties b/src/test/resources/log4j.properties index 9e7f04e06..b5d39e164 100644 --- a/src/test/resources/log4j.properties +++ b/src/test/resources/log4j.properties @@ -8,6 +8,8 @@ log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=[%-5p] %d [%t] %x %c %M - %m%n log4j.logger.com.oltpbenchmark=INFO +#log4j.logger.org.hsqldb=WARN +log4j.logger.com.oltpbenchmark.util.ThreadUtil=INFO ## to see UserAbortException messages set this logger to DEBUG log4j.logger.com.oltpbenchmark.api.ABORT_LOG=WARN