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) {