diff --git a/config/tpcc_config_firebird.xml b/config/tpcc_config_firebird.xml new file mode 100644 index 000000000..0fd76664f --- /dev/null +++ b/config/tpcc_config_firebird.xml @@ -0,0 +1,43 @@ + + + + + firebird + org.firebirdsql.jdbc.FBDriver + jdbc:firebirdsql:localhost/3050:/home/ubuntu/tpcc.fdb?sql_dialect=3 + SYSDBA + masterkey + TRANSACTION_READ_COMMITTED + + + 16 + + + 15 + + + + unlimited + 45,43,4,4,4 + + + + + + + NewOrder + + + Payment + + + OrderStatus + + + Delivery + + + StockLevel + + + diff --git a/config/tpch_config_firdbird.xml b/config/tpch_config_firdbird.xml new file mode 100644 index 000000000..d097751ad --- /dev/null +++ b/config/tpch_config_firdbird.xml @@ -0,0 +1,142 @@ + + + + + firebird + org.firebirdsql.jdbc.FBDriver + jdbc:firebirdsql:localhost/3050:/home/ubuntu/test.fdb?sql_dialect=3 + SYSDBA + masterkey + TRANSACTION_SERIALIZABLE + + + tpch/dbgen + + + + tbl + + + 1 + + + 1 + + + true + unlimited + all + + + true + unlimited + even + + + true + unlimited + odd + + + + + + + odd + 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0 + + + even + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1 + + + + Q1 + 1 + + + Q2 + 2 + + + Q3 + 3 + + + Q4 + 4 + + + Q5 + 5 + + + Q6 + 6 + + + Q7 + 7 + + + Q8 + 8 + + + Q9 + 9 + + + Q10 + 10 + + + Q11 + 11 + + + Q12 + 12 + + + Q13 + 13 + + + Q14 + 14 + + + Q15 + 15 + + + Q16 + 16 + + + Q17 + 17 + + + Q18 + 18 + + + Q19 + 19 + + + Q20 + 20 + + + Q21 + 21 + + + Q22 + 22 + + + diff --git a/lib/jaybird-full-3.0.2.jar b/lib/jaybird-full-3.0.2.jar new file mode 100644 index 000000000..5a5ed636e Binary files /dev/null and b/lib/jaybird-full-3.0.2.jar differ diff --git a/src/com/oltpbenchmark/benchmarks/tpcc/ddls/tpcc-firebird-ddl.sql b/src/com/oltpbenchmark/benchmarks/tpcc/ddls/tpcc-firebird-ddl.sql new file mode 100644 index 000000000..72fea326d --- /dev/null +++ b/src/com/oltpbenchmark/benchmarks/tpcc/ddls/tpcc-firebird-ddl.sql @@ -0,0 +1,140 @@ +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) +); + +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, +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); + +-- TODO: O_ENTRY_D ON UPDATE CURRENT_TIMESTAMP +CREATE TABLE OORDER ( + O_W_ID INT NOT NULL, + O_D_ID INT NOT NULL, + O_ID INT NOT NULL, + O_C_ID INT NOT NULL, + O_CARRIER_ID INT DEFAULT NULL, + O_OL_CNT DECIMAL(2,0) NOT NULL, + O_ALL_LOCAL DECIMAL(1,0) NOT NULL, + O_ENTRY_D TIMESTAMP NOT NULL, + 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) +); + +CREATE INDEX IDX_ORDER ON OORDER (O_W_ID,O_D_ID,O_C_ID,O_ID); + +CREATE TABLE NEW_ORDER ( + NO_W_ID INT NOT NULL, + NO_D_ID INT NOT NULL, + NO_O_ID INT NOT NULL, + PRIMARY KEY (NO_W_ID,NO_D_ID,NO_O_ID), + 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 +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) +); + +CREATE TABLE ITEM ( + I_ID INT NOT NULL, + I_NAME VARCHAR(24) NOT NULL, + I_PRICE DECIMAL(5,2) NOT NULL, + I_DATA VARCHAR(50) NOT NULL, + I_IM_ID INT NOT NULL, + PRIMARY KEY (I_ID) +); + +CREATE TABLE STOCK ( + S_W_ID INT NOT NULL REFERENCES WAREHOUSE (W_ID), + S_I_ID INT NOT NULL REFERENCES ITEM (I_ID), + S_QUANTITY DECIMAL(4,0) NOT NULL, + S_YTD DECIMAL(8,2) NOT NULL, + S_ORDER_CNT INT NOT NULL, + S_REMOTE_CNT INT NOT NULL, + S_DATA VARCHAR(50) NOT NULL, + S_DIST_01 CHAR(24) NOT NULL, + S_DIST_02 CHAR(24) NOT NULL, + S_DIST_03 CHAR(24) NOT NULL, + S_DIST_04 CHAR(24) NOT NULL, + S_DIST_05 CHAR(24) NOT NULL, + S_DIST_06 CHAR(24) NOT NULL, + S_DIST_07 CHAR(24) NOT NULL, + S_DIST_08 CHAR(24) NOT NULL, + S_DIST_09 CHAR(24) NOT NULL, + S_DIST_10 CHAR(24) NOT NULL, + PRIMARY KEY (S_W_ID, S_I_ID) +); + +CREATE TABLE 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(2,0) 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), + CONSTRAINT OL_FKEY_S FOREIGN KEY (OL_SUPPLY_W_ID, OL_I_ID) REFERENCES STOCK (S_W_ID, S_I_ID) +); diff --git a/src/com/oltpbenchmark/benchmarks/tpcc/dialects/firebird-dialects.xml b/src/com/oltpbenchmark/benchmarks/tpcc/dialects/firebird-dialects.xml new file mode 100644 index 000000000..ce8a57a17 --- /dev/null +++ b/src/com/oltpbenchmark/benchmarks/tpcc/dialects/firebird-dialects.xml @@ -0,0 +1,19 @@ + + + + + + SELECT FIRST 1 SKIP 0 NO_O_ID + FROM NEW_ORDER + WHERE NO_D_ID = ? AND NO_W_ID = ? ORDER BY NO_O_ID ASC + + + + + SELECT FIRST 1 SKIP 0 O_ID, O_CARRIER_ID, O_ENTRY_D + FROM OORDER + WHERE O_W_ID = ? AND O_D_ID = ? AND O_C_ID = ? ORDER BY O_ID DESC + + + + diff --git a/src/com/oltpbenchmark/benchmarks/tpch/ddls/tpch-firebird-ddl.sql b/src/com/oltpbenchmark/benchmarks/tpch/ddls/tpch-firebird-ddl.sql new file mode 100644 index 000000000..72166ab12 --- /dev/null +++ b/src/com/oltpbenchmark/benchmarks/tpch/ddls/tpch-firebird-ddl.sql @@ -0,0 +1,113 @@ + +RECREATE TABLE CUSTOMER +( + C_CUSTKEY INTEGER NOT NULL, + C_NAME VARCHAR( 25) NOT NULL , + C_ADDRESS VARCHAR( 40) NOT NULL , + C_NATIONKEY INTEGER NOT NULL, + C_PHONE CHAR( 15) NOT NULL , + C_ACCTBAL DECIMAL( 15, 2) NOT NULL, + C_MKTSEGMENT CHAR( 10) NOT NULL , + C_COMMENT VARCHAR( 117) NOT NULL , + CONSTRAINT PK_CUSTOMER PRIMARY KEY (C_CUSTKEY) +); +RECREATE TABLE LINEITEM +( + L_ORDERKEY INTEGER NOT NULL, + L_PARTKEY INTEGER NOT NULL, + L_SUPPKEY INTEGER NOT NULL, + L_LINENUMBER INTEGER NOT NULL, + L_QUANTITY DECIMAL( 15, 2) NOT NULL, + L_EXTENDEDPRICE DECIMAL( 15, 2) NOT NULL, + L_DISCOUNT DECIMAL( 15, 2) NOT NULL, + L_TAX DECIMAL( 15, 2) NOT NULL, + L_RETURNFLAG CHAR( 1) NOT NULL , + L_LINESTATUS CHAR( 1) NOT NULL , + L_SHIPDATE DATE NOT NULL, + L_COMMITDATE DATE NOT NULL, + L_RECEIPTDATE DATE NOT NULL, + L_SHIPINSTRUCT CHAR( 25) NOT NULL , + L_SHIPMODE CHAR( 10) NOT NULL , + L_COMMENT VARCHAR( 44) NOT NULL , + CONSTRAINT PK_LINEITEM PRIMARY KEY (L_ORDERKEY, L_LINENUMBER) +); +RECREATE TABLE NATION +( + N_NATIONKEY INTEGER NOT NULL, + N_NAME CHAR( 25) NOT NULL , + N_REGIONKEY INTEGER NOT NULL, + N_COMMENT VARCHAR( 152) , + CONSTRAINT PK_NATION PRIMARY KEY (N_NATIONKEY) +); +RECREATE TABLE ORDERS +( + O_ORDERKEY INTEGER NOT NULL, + O_CUSTKEY INTEGER NOT NULL, + O_ORDERSTATUS CHAR( 1) NOT NULL , + O_TOTALPRICE DECIMAL( 15, 2) NOT NULL, + O_ORDERDATE DATE NOT NULL, + O_ORDERPRIORITY CHAR( 15) NOT NULL , + O_CLERK CHAR( 15) NOT NULL , + O_SHIPPRIORITY INTEGER NOT NULL, + O_COMMENT VARCHAR( 79) NOT NULL , + CONSTRAINT PK_ORDERS PRIMARY KEY (O_ORDERKEY) +); +RECREATE TABLE PART +( + P_PARTKEY INTEGER NOT NULL, + P_NAME VARCHAR( 55) NOT NULL , + P_MFGR CHAR( 25) NOT NULL , + P_BRAND CHAR( 10) NOT NULL , + P_TYPE VARCHAR( 25) NOT NULL , + P_SIZE INTEGER NOT NULL, + P_CONTAINER CHAR( 10) NOT NULL , + P_RETAILPRICE DECIMAL( 15, 2) NOT NULL, + P_COMMENT VARCHAR( 23) NOT NULL , + CONSTRAINT PK_PART PRIMARY KEY (P_PARTKEY) +); +RECREATE TABLE PARTSUPP +( + PS_PARTKEY INTEGER NOT NULL, + PS_SUPPKEY INTEGER NOT NULL, + PS_AVAILQTY INTEGER NOT NULL, + PS_SUPPLYCOST DECIMAL( 15, 2) NOT NULL, + PS_COMMENT VARCHAR( 199) NOT NULL , + CONSTRAINT PK_PARTSUPP PRIMARY KEY (PS_PARTKEY, PS_SUPPKEY) +); +RECREATE TABLE REGION +( + R_REGIONKEY INTEGER NOT NULL, + R_NAME CHAR( 25) NOT NULL , + R_COMMENT VARCHAR( 152) , + CONSTRAINT PK_REGION PRIMARY KEY (R_REGIONKEY) +); +RECREATE TABLE SUPPLIER +( + S_SUPPKEY INTEGER NOT NULL, + S_NAME CHAR( 25) NOT NULL , + S_ADDRESS VARCHAR( 40) NOT NULL , + S_NATIONKEY INTEGER NOT NULL, + S_PHONE CHAR( 15) NOT NULL , + S_ACCTBAL DECIMAL( 15, 2) NOT NULL, + S_COMMENT VARCHAR( 101) NOT NULL , + CONSTRAINT PK_SUPPLIER PRIMARY KEY (S_SUPPKEY) +); +CREATE ASC INDEX I_C_C_ACCTBAL ON CUSTOMER (C_ACCTBAL); +CREATE ASC INDEX I_C_C_MKTSEGMENT ON CUSTOMER (C_MKTSEGMENT); +CREATE ASC INDEX I_C_C_PHONE_SUBSTR_1_2 ON CUSTOMER COMPUTED BY (substring (c_phone from 1 for 2)); +CREATE ASC INDEX I_L_L_COMMITDATE ON LINEITEM (L_COMMITDATE); +CREATE ASC INDEX I_L_L_DISCOUNT ON LINEITEM (L_DISCOUNT); +CREATE ASC INDEX I_L_L_QUANTITY ON LINEITEM (L_QUANTITY); +CREATE ASC INDEX I_L_L_RECEIPTDATE ON LINEITEM (L_RECEIPTDATE); +CREATE ASC INDEX I_L_L_RETURNFLAG_LINESTATUS ON LINEITEM (L_RETURNFLAG, L_LINESTATUS); +CREATE ASC INDEX I_L_L_SHIPDATE ON LINEITEM (L_SHIPDATE); +CREATE ASC INDEX I_L_L_SHIPINSTRUCT ON LINEITEM (L_SHIPINSTRUCT); +CREATE ASC INDEX I_L_L_SHIPMODE ON LINEITEM (L_SHIPMODE); +CREATE ASC INDEX I_N_N_NAME ON NATION (N_NAME); +CREATE ASC INDEX I_O_O_ORDERDATE ON ORDERS (O_ORDERDATE); +CREATE ASC INDEX I_O_O_ORDERPRIORITY ON ORDERS (O_ORDERPRIORITY); +CREATE ASC INDEX I_O_O_SHIPPRIORITY ON ORDERS (O_SHIPPRIORITY); +CREATE ASC INDEX I_PS_PS_SUPPLYCOST ON PARTSUPP (PS_SUPPLYCOST); +CREATE ASC INDEX I_P_P_BRAND_CONTAINER_SIZE ON PART (P_BRAND, P_CONTAINER, P_SIZE); +CREATE ASC INDEX I_P_P_SIZE ON PART (P_SIZE); +CREATE ASC INDEX I_R_R_NAME ON REGION (R_NAME); diff --git a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q1.java b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q1.java index 27841c192..aec667dd3 100644 --- a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q1.java +++ b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q1.java @@ -17,10 +17,11 @@ package com.oltpbenchmark.benchmarks.tpch.queries; import com.oltpbenchmark.api.SQLStmt; +import com.oltpbenchmark.types.DatabaseType; public class Q1 extends GenericQuery { - public final SQLStmt query_stmt = new SQLStmt( + private final SQLStmt query_stmt = new SQLStmt( "select " + "l_returnflag, " + "l_linestatus, " @@ -44,7 +45,34 @@ public class Q1 extends GenericQuery { + "l_linestatus" ); + public final SQLStmt fb_query_stmt = new SQLStmt( + "select " + + "l_returnflag, " + + "l_linestatus, " + + "sum(l_quantity) as sum_qty, " + + "sum(l_extendedprice) as sum_base_price, " + + "sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, " + + "sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, " + + "avg(l_quantity) as avg_qty, " + + "avg(l_extendedprice) as avg_price, " + + "avg(l_discount) as avg_disc, " + + "count(*) as count_order " + + "from " + + "lineitem " + + "where " + + "l_shipdate <= dateadd(day, -95, date '1998-12-01')" + + "group by " + + "l_returnflag, " + + "l_linestatus " + + "order by " + + "l_returnflag, " + + "l_linestatus" + ); + protected SQLStmt get_query() { + if (getDatabaseType() == DatabaseType.FIREBIRD) { + return fb_query_stmt; + } return query_stmt; } } diff --git a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q10.java b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q10.java index 9c1bba626..65a272650 100644 --- a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q10.java +++ b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q10.java @@ -17,6 +17,7 @@ package com.oltpbenchmark.benchmarks.tpch.queries; import com.oltpbenchmark.api.SQLStmt; +import com.oltpbenchmark.types.DatabaseType; public class Q10 extends GenericQuery { @@ -54,7 +55,44 @@ public class Q10 extends GenericQuery { + "revenue desc" ); + public final SQLStmt fb_query_stmt = new SQLStmt( + "select " + + "c_custkey, " + + "c_name, " + + "sum(l_extendedprice * (1 - l_discount)) as revenue, " + + "c_acctbal, " + + "n_name, " + + "c_address, " + + "c_phone, " + + "c_comment " + + "from " + + "customer, " + + "orders, " + + "lineitem, " + + "nation " + + "where " + + "c_custkey = o_custkey " + + "and l_orderkey = o_orderkey " + + "and o_orderdate >= date '1994-12-01' " + + "and o_orderdate < dateadd(month,3, date '1994-12-01') " + + "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" + ); + protected SQLStmt get_query() { + if (getDatabaseType() == DatabaseType.FIREBIRD) { + return fb_query_stmt; + } return query_stmt; } } diff --git a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q12.java b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q12.java index 1f86796b7..df9e02a95 100644 --- a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q12.java +++ b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q12.java @@ -17,6 +17,7 @@ package com.oltpbenchmark.benchmarks.tpch.queries; import com.oltpbenchmark.api.SQLStmt; +import com.oltpbenchmark.types.DatabaseType; public class Q12 extends GenericQuery { @@ -51,7 +52,41 @@ public class Q12 extends GenericQuery { + "l_shipmode" ); + public final SQLStmt fb_query_stmt = new SQLStmt( + "select " + + "l_shipmode, " + + "sum(case " + + "when o_orderpriority = '1-URGENT' " + + "or o_orderpriority = '2-HIGH' " + + "then 1 " + + "else 0 " + + "end) as high_line_count, " + + "sum(case " + + "when o_orderpriority <> '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 ('AIR', 'REG AIR') " + + "and l_commitdate < l_receiptdate " + + "and l_shipdate < l_commitdate " + + "and l_receiptdate >= date '1997-01-01' " + + "and l_receiptdate < dateadd(year,1,date '1997-01-01') " + + "group by " + + "l_shipmode " + + "order by " + + "l_shipmode" + ); + protected SQLStmt get_query() { + if (getDatabaseType() == DatabaseType.FIREBIRD) { + return fb_query_stmt; + } return query_stmt; } } diff --git a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q14.java b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q14.java index b78058e39..3d722d465 100644 --- a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q14.java +++ b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q14.java @@ -17,6 +17,7 @@ package com.oltpbenchmark.benchmarks.tpch.queries; import com.oltpbenchmark.api.SQLStmt; +import com.oltpbenchmark.types.DatabaseType; public class Q14 extends GenericQuery { @@ -36,7 +37,26 @@ public class Q14 extends GenericQuery { + "and l_shipdate < date '1997-04-01' + interval '1' month" ); + public final SQLStmt fb_query_stmt = new SQLStmt( + "select " + + "100.00 * sum(case " + + "when p_type like 'PROMO%' " + + "then l_extendedprice * (1 - l_discount) " + + "else 0 " + + "end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue " + + "from " + + "lineitem, " + + "part " + + "where " + + "l_partkey = p_partkey " + + "and l_shipdate >= date '1997-04-01' " + + "and l_shipdate < dateadd(month, 1, date '1997-04-01') " + ); + protected SQLStmt get_query() { + if (getDatabaseType() == DatabaseType.FIREBIRD) { + return fb_query_stmt; + } return query_stmt; } } diff --git a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q15.java b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q15.java index 3228aa068..e7ab5ce2c 100644 --- a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q15.java +++ b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q15.java @@ -17,6 +17,8 @@ package com.oltpbenchmark.benchmarks.tpch.queries; import com.oltpbenchmark.api.SQLStmt; +import com.oltpbenchmark.types.DatabaseType; + import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; @@ -38,6 +40,20 @@ public class Q15 extends GenericQuery { + "l_suppkey" ); + public final SQLStmt fb_createview_stmt = new SQLStmt( + "create view revenue0 (supplier_no, total_revenue) as " + + "select " + + "l_suppkey, " + + "sum(l_extendedprice * (1 - l_discount)) " + + "from " + + "lineitem " + + "where " + + "l_shipdate >= date '1997-03-01' " + + "and l_shipdate < dateadd(month, 3, date '1997-03-01') " + + "group by " + + "l_suppkey" + ); + public final SQLStmt query_stmt = new SQLStmt ( "select " + "s_suppkey, " @@ -74,7 +90,11 @@ public ResultSet run(Connection conn) throws SQLException { Statement stmt = conn.createStatement(); ResultSet ret = null; try { - stmt.executeUpdate(createview_stmt.getSQL()); + if (getDatabaseType() == DatabaseType.FIREBIRD) { + stmt.executeUpdate(fb_createview_stmt.getSQL()); + } else { + stmt.executeUpdate(createview_stmt.getSQL()); + } ret = super.run(conn); } finally { stmt.executeUpdate(dropview_stmt.getSQL()); diff --git a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q20.java b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q20.java index dbb9b18d2..cdb8e3b72 100644 --- a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q20.java +++ b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q20.java @@ -17,6 +17,7 @@ package com.oltpbenchmark.benchmarks.tpch.queries; import com.oltpbenchmark.api.SQLStmt; +import com.oltpbenchmark.types.DatabaseType; public class Q20 extends GenericQuery { @@ -60,7 +61,50 @@ public class Q20 extends GenericQuery { + "s_name" ); + public final SQLStmt fb_query_stmt = new SQLStmt( + "select " + + "s_name, " + + "s_address " + + "from " + + "supplier, " + + "nation " + + "where " + + "s_suppkey in ( " + + "select " + + "ps_suppkey " + + "from " + + "partsupp " + + "where " + + "ps_partkey in ( " + + "select " + + "p_partkey " + + "from " + + "part " + + "where " + + "p_name like 'orange%' " + + ") " + + "and ps_availqty > ( " + + "select " + + "0.5 * sum(l_quantity) " + + "from " + + "lineitem " + + "where " + + "l_partkey = ps_partkey " + + "and l_suppkey = ps_suppkey " + + "and l_shipdate >= date '1997-01-01' " + + "and l_shipdate < dateadd(year, 1, date '1997-01-01') " + + ") " + + ") " + + "and s_nationkey = n_nationkey " + + "and n_name = 'ALGERIA' " + + "order by " + + "s_name" + ); + protected SQLStmt get_query() { + if (getDatabaseType() == DatabaseType.FIREBIRD) { + return fb_query_stmt; + } return query_stmt; } } diff --git a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q4.java b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q4.java index d23440522..4a13c4bcb 100644 --- a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q4.java +++ b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q4.java @@ -17,6 +17,7 @@ package com.oltpbenchmark.benchmarks.tpch.queries; import com.oltpbenchmark.api.SQLStmt; +import com.oltpbenchmark.types.DatabaseType; public class Q4 extends GenericQuery { @@ -44,7 +45,34 @@ public class Q4 extends GenericQuery { + "o_orderpriority" ); + public final SQLStmt fb_query_stmt = new SQLStmt( + "select " + + "o_orderpriority, " + + "count(*) as order_count " + + "from " + + "orders " + + "where " + + "o_orderdate >= date '1994-08-01' " + + "and o_orderdate < dateadd(month, 3, date '1994-08-01') " + + "and exists ( " + + "select " + + "* " + + "from " + + "lineitem " + + "where " + + "l_orderkey = o_orderkey " + + "and l_commitdate < l_receiptdate " + + ") " + + "group by " + + "o_orderpriority " + + "order by " + + "o_orderpriority" + ); + protected SQLStmt get_query() { + if (getDatabaseType() == DatabaseType.FIREBIRD) { + return fb_query_stmt; + } return query_stmt; } } diff --git a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q5.java b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q5.java index 9629699c4..b50fb28b9 100644 --- a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q5.java +++ b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q5.java @@ -17,6 +17,7 @@ package com.oltpbenchmark.benchmarks.tpch.queries; import com.oltpbenchmark.api.SQLStmt; +import com.oltpbenchmark.types.DatabaseType; public class Q5 extends GenericQuery { @@ -47,7 +48,37 @@ public class Q5 extends GenericQuery { + "revenue desc" ); + public final SQLStmt fb_query_stmt = new SQLStmt( + "select " + + "n_name, " + + "sum(l_extendedprice * (1 - l_discount)) as revenue " + + "from " + + "customer, " + + "orders, " + + "lineitem, " + + "supplier, " + + "nation, " + + "region " + + "where " + + "c_custkey = o_custkey " + + "and l_orderkey = o_orderkey " + + "and l_suppkey = s_suppkey " + + "and c_nationkey = s_nationkey " + + "and s_nationkey = n_nationkey " + + "and n_regionkey = r_regionkey " + + "and r_name = 'AFRICA' " + + "and o_orderdate >= date '1997-01-01' " + + "and o_orderdate < dateadd(year, 1, date '1997-01-01') " + + "group by " + + "n_name " + + "order by " + + "revenue desc" + ); + protected SQLStmt get_query() { + if (getDatabaseType() == DatabaseType.FIREBIRD) { + return fb_query_stmt; + } return query_stmt; } } diff --git a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q6.java b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q6.java index 308d634ec..066eaaa23 100644 --- a/src/com/oltpbenchmark/benchmarks/tpch/queries/Q6.java +++ b/src/com/oltpbenchmark/benchmarks/tpch/queries/Q6.java @@ -17,6 +17,7 @@ package com.oltpbenchmark.benchmarks.tpch.queries; import com.oltpbenchmark.api.SQLStmt; +import com.oltpbenchmark.types.DatabaseType; public class Q6 extends GenericQuery { @@ -32,7 +33,22 @@ public class Q6 extends GenericQuery { + "and l_quantity < 24" ); + public final SQLStmt fb_query_stmt = new SQLStmt( + "select " + + "sum(l_extendedprice * l_discount) as revenue " + + "from " + + "lineitem " + + "where " + + "l_shipdate >= date '1997-01-01' " + + "and l_shipdate < dateadd(year,1,date '1997-01-01') " + + "and l_discount between 0.07 - 0.01 and 0.07 + 0.01 " + + "and l_quantity < 24" + ); + protected SQLStmt get_query() { + if (getDatabaseType() == DatabaseType.FIREBIRD) { + return fb_query_stmt; + } return query_stmt; } } diff --git a/src/com/oltpbenchmark/types/DatabaseType.java b/src/com/oltpbenchmark/types/DatabaseType.java index c1395b48c..940baf14e 100644 --- a/src/com/oltpbenchmark/types/DatabaseType.java +++ b/src/com/oltpbenchmark/types/DatabaseType.java @@ -48,7 +48,8 @@ public enum DatabaseType { MONETDB("nl.cwi.monetdb.jdbc.MonetDriver", false, false), NUODB("com.nuodb.jdbc.Driver", true, false), TIMESTEN("com.timesten.jdbc.TimesTenDriver", true, false), - PELOTON("org.postgresql.Driver", false, false) + PELOTON("org.postgresql.Driver", false, false), + FIREBIRD("org.firebirdsql.jdbc.FBDriver", true, false) ; private DatabaseType(String driver, boolean escapeNames, boolean includeColNames) {