Skip to content

Add CH-BenCHmark dialect-sqlserver.xml #517

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -604,7 +604,7 @@ jobs:
fail-fast: false
matrix:
# TODO: add auctionmark and seats benchmark
benchmark: [ 'epinions', 'hyadapt', 'noop', 'otmetrics', 'resourcestresser', 'sibench', 'smallbank', 'tatp', 'templated', 'tpcc', 'tpcc-with-reconnects', 'tpch', 'twitter', 'voter', 'wikipedia', 'ycsb' ]
benchmark: [ 'chbenchmark', 'epinions', 'hyadapt', 'noop', 'otmetrics', 'resourcestresser', 'sibench', 'smallbank', 'tatp', 'templated', 'tpcc', 'tpcc-with-reconnects', 'tpch', 'twitter', 'voter', 'wikipedia', 'ycsb' ]
services:
sqlserver:
image: mcr.microsoft.com/mssql/server:latest
Expand Down
231 changes: 231 additions & 0 deletions src/main/resources/benchmarks/chbenchmark/dialect-sqlserver.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
<?xml version="1.0"?>
<dialects>
<dialect type="SQLSERVER">
<procedure name="Q1">
<statement name="query_stmt">
SELECT ol_number, sum(ol_quantity) AS sum_qty, sum(ol_amount) AS sum_amount, avg(ol_quantity) AS avg_qty,
avg(ol_amount) AS avg_amount, count(*) AS count_order
FROM order_line
WHERE ol_delivery_d > cast('2007-01-02 00:00:00.000' AS datetime)
GROUP BY ol_number
ORDER BY ol_number
</statement>
</procedure>
<procedure name="Q2">
<statement name="query_stmt">
SELECT su_suppkey, su_name, n_name, i_id, i_name, su_address, su_phone, su_comment
FROM item, supplier, stock, nation, region, (
SELECT s_i_id AS m_i_id, MIN(s_quantity) AS m_s_quantity
FROM stock, supplier, nation, region
WHERE ((s_w_id*s_i_id) % 10000) = su_suppkey AND su_nationkey=n_nationkey
AND n_regionkey=r_regionkey AND r_name LIKE 'Europ%'
GROUP BY s_i_id) m
WHERE i_id = s_i_id AND ((s_w_id * s_i_id) % 10000) = su_suppkey AND su_nationkey = n_nationkey
AND n_regionkey = r_regionkey AND i_data LIKE '%b' AND r_name LIKE 'Europ%' AND i_id=m_i_id
AND s_quantity = m_s_quantity
ORDER BY n_name, su_name, i_id
</statement>
</procedure>
<procedure name="Q3">
<statement name="query_stmt">
SELECT ol_o_id, ol_w_id, ol_d_id, sum(ol_amount) AS revenue, o_entry_d
FROM customer, new_order, oorder, order_line
WHERE c_state LIKE 'A%' AND c_id = o_c_id AND c_w_id = o_w_id AND c_d_id = o_d_id AND no_w_id = o_w_id
AND no_d_id = o_d_id AND no_o_id = o_id AND ol_w_id = o_w_id AND ol_d_id = o_d_id AND ol_o_id = o_id
AND o_entry_d > cast('2007-01-02 00:00:00.000' AS datetime)
GROUP BY ol_o_id, ol_w_id, ol_d_id, o_entry_d
ORDER BY revenue DESC , o_entry_d
</statement>
</procedure>
<procedure name="Q5">
<statement name="query_stmt">
SELECT n_name, sum(ol_amount) AS revenue
FROM customer, oorder, order_line, stock, supplier, nation, region
WHERE c_id = o_c_id AND c_w_id = o_w_id AND c_d_id = o_d_id AND ol_o_id = o_id AND ol_w_id = o_w_id
AND ol_d_id=o_d_id AND ol_w_id = s_w_id AND ol_i_id = s_i_id
AND ((s_w_id * s_i_id) % 10000) = su_suppkey
AND ascii(substring(c_state, 1, 1)) = su_nationkey AND su_nationkey = n_nationkey
AND n_regionkey = r_regionkey AND r_name = 'Europe'
AND o_entry_d >= cast('2007-01-02 00:00:00.000' AS datetime)
GROUP BY n_name
ORDER BY revenue DESC
</statement>
</procedure>
<procedure name="Q6">
<statement name="query_stmt">
SELECT sum(ol_amount) AS revenue
FROM order_line
WHERE ol_delivery_d >= cast('1999-01-01 00:00:00.000' AS datetime)
AND ol_delivery_d &lt; cast('2020-01-01 00:00:00.000' AS datetime)
AND ol_quantity BETWEEN 1 AND 100000
</statement>
</procedure>
<procedure name="Q7">
<statement name="query_stmt">
SELECT su_nationkey AS supp_nation, substring(c_state, 1, 1) AS cust_nation,
YEAR(o_entry_d) AS l_year, sum(ol_amount) AS revenue
FROM supplier, stock, order_line, oorder, customer, nation n1, nation n2
WHERE ol_supply_w_id = s_w_id AND ol_i_id = s_i_id AND ((s_w_id * s_i_id) % 10000) = su_suppkey
AND ol_w_id = o_w_id AND ol_d_id = o_d_id AND ol_o_id = o_id AND c_id = o_c_id
AND c_w_id = o_w_id AND c_d_id = o_d_id AND su_nationkey = n1.n_nationkey
AND ascii(substring(c_state, 1, 1)) = n2.n_nationkey AND (
(n1.n_name = 'Germany' AND n2.n_name = 'Cambodia')
OR
(n1.n_name = 'Cambodia' AND n2.n_name = 'Germany')
)
GROUP BY su_nationkey, substring(c_state, 1, 1), YEAR(o_entry_d)
ORDER BY su_nationkey, cust_nation, l_year
</statement>
</procedure>
<procedure name="Q8">
<statement name="query_stmt">
SELECT YEAR(o_entry_d) AS l_year, sum(
CASE WHEN n2.n_name = 'Germany' THEN ol_amount ELSE 0 END
) / sum(ol_amount) AS mkt_share
FROM item, supplier, stock, order_line, oorder, customer, nation n1, nation n2, region
WHERE i_id = s_i_id AND ol_i_id = s_i_id AND ol_supply_w_id = s_w_id
AND ((s_w_id * s_i_id) % 10000) = su_suppkey AND ol_w_id = o_w_id AND ol_d_id = o_d_id
AND ol_o_id = o_id AND c_id = o_c_id AND c_w_id = o_w_id AND c_d_id = o_d_id
AND n1.n_nationkey = ascii(substring(c_state, 1, 1)) AND n1.n_regionkey = r_regionkey
AND ol_i_id &lt; 1000 AND r_name = 'Europe' AND su_nationkey = n2.n_nationkey
AND i_data LIKE '%b' AND i_id = ol_i_id
GROUP BY YEAR(o_entry_d)
ORDER BY l_year
</statement>
</procedure>
<procedure name="Q9">
<statement name="query_stmt">
SELECT n_name, YEAR(o_entry_d) AS l_year, sum(ol_amount) AS sum_profit
FROM item, stock, supplier, order_line, oorder, nation
WHERE ol_i_id = s_i_id AND ol_supply_w_id = s_w_id AND ((s_w_id * s_i_id) % 10000) = su_suppkey
AND ol_w_id = o_w_id AND ol_d_id = o_d_id AND ol_o_id = o_id AND ol_i_id = i_id
AND su_nationkey = n_nationkey AND i_data LIKE '%bb'
GROUP BY n_name, YEAR(o_entry_d)
ORDER BY n_name, l_year DESC
</statement>
</procedure>
<procedure name="Q10">
<statement name="query_stmt">
SELECT c_id, c_last, sum(ol_amount) AS revenue, c_city, c_phone, n_name
FROM customer, oorder, order_line, nation
WHERE c_id = o_c_id AND c_w_id = o_w_id AND c_d_id = o_d_id AND ol_w_id = o_w_id AND ol_d_id = o_d_id
AND ol_o_id = o_id AND o_entry_d >= cast('2007-01-02 00:00:00.000' AS datetime)
AND o_entry_d &lt;= ol_delivery_d AND n_nationkey = ascii(substring(c_state, 1, 1))
GROUP BY c_id, c_last, c_city, c_phone, n_name
ORDER BY revenue DESC
</statement>
</procedure>
<procedure name="Q11">
<statement name="query_stmt">
SELECT s_i_id, sum(s_order_cnt) AS ordercount
FROM stock, supplier, nation
WHERE ((s_w_id * s_i_id) % 10000) = su_suppkey AND su_nationkey = n_nationkey AND n_name = 'Germany'
GROUP BY s_i_id
HAVING sum(s_order_cnt) > (
SELECT sum(s_order_cnt) * .005
FROM stock, supplier, nation
WHERE ((s_w_id * s_i_id) % 10000) = su_suppkey AND su_nationkey = n_nationkey AND n_name = 'Germany'
) ORDER BY ordercount DESC
</statement>
</procedure>
<procedure name="Q12">
<statement name="query_stmt">
SELECT o_ol_cnt, sum(
CASE WHEN o_carrier_id = 1 OR o_carrier_id = 2 THEN 1 ELSE 0 END
) AS high_line_count, sum(
CASE WHEN o_carrier_id &lt;> 1 AND o_carrier_id &lt;> 2 THEN 1 ELSE 0 END
) AS low_line_count
FROM oorder, order_line
WHERE ol_w_id = o_w_id AND ol_d_id = o_d_id AND ol_o_id = o_id AND o_entry_d &lt;= ol_delivery_d
AND ol_delivery_d &lt; cast('2020-01-01 00:00:00.000' AS datetime)
GROUP BY o_ol_cnt
ORDER BY o_ol_cnt
</statement>
</procedure>
<procedure name="Q13">
<statement name="query_stmt">
SELECT c_count, count(*) AS custdist
FROM (
SELECT c_id, count(o_id) AS c_count
FROM customer LEFT OUTER JOIN oorder
ON (c_w_id = o_w_id AND c_d_id = o_d_id AND c_id = o_c_id AND o_carrier_id > 8)
GROUP BY c_id
) AS c_orders
GROUP BY c_count
ORDER BY custdist DESC, c_count DESC
</statement>
</procedure>
<procedure name="Q14">
<statement name="query_stmt">
SELECT (100.00 * sum(
CASE WHEN i_data LIKE 'PR%' THEN ol_amount ELSE 0 END
) / (1 + sum(ol_amount))) AS promo_revenue
FROM order_line, item
WHERE ol_i_id = i_id AND ol_delivery_d >= cast('2007-01-02 00:00:00.000' AS datetime)
AND ol_delivery_d &lt; cast('2020-01-02 00:00:00.000' AS datetime)
</statement>
</procedure>
<procedure name="Q15">
<statement name="createview_stmt">
CREATE view revenue0 (supplier_no, total_revenue) AS
SELECT ((s_w_id * s_i_id) % 10000) AS supplier_no, sum(ol_amount) AS total_revenue
FROM order_line, stock
WHERE ol_i_id = s_i_id AND ol_supply_w_id = s_w_id
AND ol_delivery_d >= cast('2007-01-02 00:00:00.000' AS datetime)
GROUP BY ((s_w_id * s_i_id) % 10000)
</statement>
</procedure>
<procedure name="Q16">
<statement name="query_stmt">
SELECT i_name, substring(i_data, 1, 3) AS brand, i_price, count(DISTINCT ((s_w_id * s_i_id) % 10000)) AS supplier_cnt
FROM stock, item
WHERE i_id = s_i_id AND i_data NOT LIKE 'zz%' AND (((s_w_id * s_i_id)%10000) NOT IN (
SELECT su_suppkey FROM supplier WHERE su_comment LIKE '%bad%')
)
GROUP BY i_name, substring(i_data, 1, 3), i_price
ORDER BY supplier_cnt DESC
</statement>
</procedure>
<procedure name="Q20">
<statement name="query_stmt">
SELECT su_name, su_address
FROM supplier, nation
WHERE su_suppkey IN (
SELECT ((s_i_id * s_w_id) % 10000)
FROM stock INNER JOIN item ON i_id = s_i_id INNER JOIN order_line ON ol_i_id = s_i_id
WHERE ol_delivery_d > cast('2010-05-23 12:00:00' AS datetime) AND i_data LIKE 'co%'
GROUP BY s_i_id, s_w_id, s_quantity
HAVING 2*s_quantity > sum(ol_quantity)
) AND su_nationkey = n_nationkey AND n_name = 'Germany'
ORDER BY su_name
</statement>
</procedure>
<procedure name="Q21">
<statement name="query_stmt">
SELECT su_name, count(*) AS numwait
FROM supplier, order_line l1, oorder, stock, nation
WHERE ol_o_id = o_id AND ol_w_id = o_w_id AND ol_d_id = o_d_id AND ol_w_id = s_w_id AND ol_i_id = s_i_id
AND ((s_w_id * s_i_id) % 10000) = su_suppkey AND l1.ol_delivery_d > o_entry_d AND NOT EXISTS (
SELECT * FROM order_line l2
WHERE l2.ol_o_id = l1.ol_o_id AND l2.ol_w_id = l1.ol_w_id AND l2.ol_d_id = l1.ol_d_id
AND l2.ol_delivery_d > l1.ol_delivery_d
) AND su_nationkey = n_nationkey AND n_name = 'Germany'
GROUP BY su_name
ORDER BY numwait DESC, su_name
</statement>
</procedure>
<procedure name="Q22">
<statement name="query_stmt">
SELECT substring(c_state, 1, 1) AS country, count(*) AS numcust, sum(c_balance) AS totacctbal
FROM customer
WHERE substring(c_phone, 1, 1) IN ('1', '2', '3', '4', '5', '6', '7') AND c_balance > (
SELECT avg(c_balance) FROM customer
WHERE c_balance > 0.00 AND substring(c_phone, 1, 1) IN ('1', '2', '3', '4', '5', '6', '7')
) AND NOT EXISTS (
SELECT * FROM oorder WHERE o_c_id = c_id AND o_w_id = c_w_id AND o_d_id = c_d_id
) GROUP BY substring(c_state, 1, 1)
ORDER BY country
</statement>
</procedure>
</dialect>
</dialects>
Loading