add 10 tpch style queries and test for them
This commit is contained in:
parent
42049b4d56
commit
36adab70c5
2
Makefile
2
Makefile
|
@ -10,7 +10,7 @@ LIBOBJ = $(LIBCPP:%.cpp=%.o)
|
||||||
TESTCPP = $(shell find test/ -name '*.cpp')
|
TESTCPP = $(shell find test/ -name '*.cpp')
|
||||||
|
|
||||||
ALLLIB = $(shell find $(SRC) -name '*.cpp' -not -path "$(SRCPARSER)/*") $(shell find $(SRC) -name '*.h' -not -path "$(SRCPARSER)/*")
|
ALLLIB = $(shell find $(SRC) -name '*.cpp' -not -path "$(SRCPARSER)/*") $(shell find $(SRC) -name '*.h' -not -path "$(SRCPARSER)/*")
|
||||||
ALLTEST = $(shell find test/lib/ -name '*.cpp') $(shell find test/lib/ -name '*.h')
|
ALLTEST = $(shell find test/ -name '*.cpp') $(shell find test/ -name '*.h')
|
||||||
|
|
||||||
# compile & link flages
|
# compile & link flages
|
||||||
CFLAGS = -std=c++11 -Wall -fPIC -g
|
CFLAGS = -std=c++11 -Wall -fPIC -g
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -138,7 +138,7 @@ namespace hsql {
|
||||||
placeholders.push_back((Expr*) e);
|
placeholders.push_back((Expr*) e);
|
||||||
}
|
}
|
||||||
// Sort by col-id
|
// Sort by col-id
|
||||||
std::sort(placeholders.begin(), placeholders.end(), [](Expr* i, Expr* j) -> bool { return (i->ival < j->ival); });
|
std::sort(placeholders.begin(), placeholders.end(), [](Expr * i, Expr * j) -> bool { return (i->ival < j->ival); });
|
||||||
|
|
||||||
// Set the placeholder id on the Expr. This replaces the previously stored column id
|
// Set the placeholder id on the Expr. This replaces the previously stored column id
|
||||||
for (uintmax_t i = 0; i < placeholders.size(); ++i) placeholders[i]->ival = i;
|
for (uintmax_t i = 0; i < placeholders.size(); ++i) placeholders[i]->ival = i;
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
-- http://www.sqlserver-dba.com/2011/09/this-is-a-followup-on-my-earlier-post-of-sql-server-test-data-generation-testing-tools-i-had-some-requests-for-my-set-up-pr.html
|
||||||
|
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(dd, -90, cast('1998-12-01' as datetime))
|
||||||
|
GROUP BY L_RETURNFLAG, L_LINESTATUS
|
||||||
|
ORDER BY L_RETURNFLAG,L_LINESTATUS
|
|
@ -0,0 +1,10 @@
|
||||||
|
-- http://www.sqlserver-dba.com/2011/09/this-is-a-followup-on-my-earlier-post-of-sql-server-test-data-generation-testing-tools-i-had-some-requests-for-my-set-up-pr.html
|
||||||
|
SELECT TOP 100 S_ACCTBAL, S_NAME, N_NAME, P_PARTKEY, P_MFGR, S_ADDRESS, S_PHONE, S_COMMENT
|
||||||
|
FROM PART, SUPPLIER, PARTSUPP, NATION, REGION
|
||||||
|
WHERE P_PARTKEY = PS_PARTKEY AND S_SUPPKEY = PS_SUPPKEY AND P_SIZE = 15 AND
|
||||||
|
P_TYPE LIKE '%%BRASS' AND S_NATIONKEY = N_NATIONKEY AND N_REGIONKEY = R_REGIONKEY AND
|
||||||
|
R_NAME = 'EUROPE' AND
|
||||||
|
PS_SUPPLYCOST = (SELECT MIN(PS_SUPPLYCOST) FROM PARTSUPP, SUPPLIER, NATION, REGION
|
||||||
|
WHERE P_PARTKEY = PS_PARTKEY AND S_SUPPKEY = PS_SUPPKEY
|
||||||
|
AND S_NATIONKEY = N_NATIONKEY AND N_REGIONKEY = R_REGIONKEY AND R_NAME = 'EUROPE')
|
||||||
|
ORDER BY S_ACCTBAL DESC, N_NAME, S_NAME, P_PARTKEY
|
|
@ -0,0 +1,7 @@
|
||||||
|
-- http://www.sqlserver-dba.com/2011/09/this-is-a-followup-on-my-earlier-post-of-sql-server-test-data-generation-testing-tools-i-had-some-requests-for-my-set-up-pr.html
|
||||||
|
SELECT TOP 10 L_ORDERKEY, SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)) AS REVENUE, O_ORDERDATE, O_SHIPPRIORITY
|
||||||
|
FROM CUSTOMER, ORDERS, LINEITEM
|
||||||
|
WHERE C_MKTSEGMENT = 'BUILDING' AND C_CUSTKEY = O_CUSTKEY AND L_ORDERKEY = O_ORDERKEY AND
|
||||||
|
O_ORDERDATE < '1995-03-15' AND L_SHIPDATE > '1995-03-15'
|
||||||
|
GROUP BY L_ORDERKEY, O_ORDERDATE, O_SHIPPRIORITY
|
||||||
|
ORDER BY REVENUE DESC, O_ORDERDATE;
|
|
@ -0,0 +1,6 @@
|
||||||
|
-- http://www.sqlserver-dba.com/2011/09/this-is-a-followup-on-my-earlier-post-of-sql-server-test-data-generation-testing-tools-i-had-some-requests-for-my-set-up-pr.html
|
||||||
|
SELECT O_ORDERPRIORITY, COUNT(*) AS ORDER_COUNT FROM ORDERS
|
||||||
|
WHERE O_ORDERDATE >= '1993-07-01' AND O_ORDERDATE < dateadd(mm,3, cast('1993-07-01' as datetime))
|
||||||
|
AND EXISTS (SELECT * FROM LINEITEM WHERE L_ORDERKEY = O_ORDERKEY AND L_COMMITDATE < L_RECEIPTDATE)
|
||||||
|
GROUP BY O_ORDERPRIORITY
|
||||||
|
ORDER BY O_ORDERPRIORITY
|
|
@ -0,0 +1,9 @@
|
||||||
|
-- http://www.sqlserver-dba.com/2011/09/this-is-a-followup-on-my-earlier-post-of-sql-server-test-data-generation-testing-tools-i-had-some-requests-for-my-set-up-pr.html
|
||||||
|
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 = 'ASIA' AND O_ORDERDATE >= '1994-01-01'
|
||||||
|
AND O_ORDERDATE < DATEADD(YY, 1, cast('1994-01-01' as datetime))
|
||||||
|
GROUP BY N_NAME
|
||||||
|
ORDER BY REVENUE DESC
|
|
@ -0,0 +1,5 @@
|
||||||
|
-- http://www.sqlserver-dba.com/2011/09/this-is-a-followup-on-my-earlier-post-of-sql-server-test-data-generation-testing-tools-i-had-some-requests-for-my-set-up-pr.html
|
||||||
|
SELECT SUM(L_EXTENDEDPRICE*L_DISCOUNT) AS REVENUE
|
||||||
|
FROM LINEITEM
|
||||||
|
WHERE L_SHIPDATE >= '1994-01-01' AND L_SHIPDATE < dateadd(yy, 1, cast('1994-01-01' as datetime))
|
||||||
|
AND L_DISCOUNT BETWEEN .06 - 0.01 AND .06 + 0.01 AND L_QUANTITY < 24
|
|
@ -0,0 +1,11 @@
|
||||||
|
-- http://www.sqlserver-dba.com/2011/09/this-is-a-followup-on-my-earlier-post-of-sql-server-test-data-generation-testing-tools-i-had-some-requests-for-my-set-up-pr.html
|
||||||
|
SELECT SUPP_NATION, CUST_NATION, L_YEAR, SUM(VOLUME) AS REVENUE
|
||||||
|
FROM ( SELECT N1.N_NAME AS SUPP_NATION, N2.N_NAME AS CUST_NATION, datepart(yy, L_SHIPDATE) AS L_YEAR,
|
||||||
|
L_EXTENDEDPRICE*(1-L_DISCOUNT) AS VOLUME
|
||||||
|
FROM SUPPLIER, LINEITEM, ORDERS, CUSTOMER, NATION N1, NATION N2
|
||||||
|
WHERE S_SUPPKEY = L_SUPPKEY AND O_ORDERKEY = L_ORDERKEY AND C_CUSTKEY = O_CUSTKEY
|
||||||
|
AND S_NATIONKEY = N1.N_NATIONKEY AND C_NATIONKEY = N2.N_NATIONKEY AND ((N1.N_NAME = 'FRANCE' AND N2.N_NAME = 'GERMANY') OR
|
||||||
|
(N1.N_NAME = 'GERMANY' AND N2.N_NAME = 'FRANCE')) AND
|
||||||
|
L_SHIPDATE BETWEEN '1995-01-01' AND '1996-12-31' ) AS SHIPPING
|
||||||
|
GROUP BY SUPP_NATION, CUST_NATION, L_YEAR
|
||||||
|
ORDER BY SUPP_NATION, CUST_NATION, L_YEAR
|
|
@ -0,0 +1,10 @@
|
||||||
|
-- http://www.sqlserver-dba.com/2011/09/this-is-a-followup-on-my-earlier-post-of-sql-server-test-data-generation-testing-tools-i-had-some-requests-for-my-set-up-pr.html
|
||||||
|
SELECT O_YEAR, SUM(CASE WHEN NATION = 'BRAZIL' THEN VOLUME ELSE 0 END)/SUM(VOLUME) AS MKT_SHARE
|
||||||
|
FROM (SELECT datepart(yy,O_ORDERDATE) AS O_YEAR, L_EXTENDEDPRICE*(1-L_DISCOUNT) AS VOLUME, N2.N_NAME AS NATION
|
||||||
|
FROM PART, SUPPLIER, LINEITEM, ORDERS, CUSTOMER, NATION N1, NATION N2, REGION
|
||||||
|
WHERE P_PARTKEY = L_PARTKEY AND S_SUPPKEY = L_SUPPKEY AND L_ORDERKEY = O_ORDERKEY
|
||||||
|
AND O_CUSTKEY = C_CUSTKEY AND C_NATIONKEY = N1.N_NATIONKEY AND
|
||||||
|
N1.N_REGIONKEY = R_REGIONKEY AND R_NAME = 'AMERICA' AND S_NATIONKEY = N2.N_NATIONKEY
|
||||||
|
AND O_ORDERDATE BETWEEN '1995-01-01' AND '1996-12-31' AND P_TYPE= 'ECONOMY ANODIZED STEEL') AS ALL_NATIONS
|
||||||
|
GROUP BY O_YEAR
|
||||||
|
ORDER BY O_YEAR
|
|
@ -0,0 +1,10 @@
|
||||||
|
-- http://www.sqlserver-dba.com/2011/09/this-is-a-followup-on-my-earlier-post-of-sql-server-test-data-generation-testing-tools-i-had-some-requests-for-my-set-up-pr.html
|
||||||
|
SELECT NATION, O_YEAR, SUM(AMOUNT) AS SUM_PROFIT
|
||||||
|
FROM (SELECT N_NAME AS NATION, datepart(yy, O_ORDERDATE) AS O_YEAR,
|
||||||
|
L_EXTENDEDPRICE*(1-L_DISCOUNT)-PS_SUPPLYCOST*L_QUANTITY AS AMOUNT
|
||||||
|
FROM PART, SUPPLIER, LINEITEM, PARTSUPP, ORDERS, NATION
|
||||||
|
WHERE S_SUPPKEY = L_SUPPKEY AND PS_SUPPKEY= L_SUPPKEY AND PS_PARTKEY = L_PARTKEY AND
|
||||||
|
P_PARTKEY= L_PARTKEY AND O_ORDERKEY = L_ORDERKEY AND S_NATIONKEY = N_NATIONKEY AND
|
||||||
|
P_NAME LIKE '%%green%%') AS PROFIT
|
||||||
|
GROUP BY NATION, O_YEAR
|
||||||
|
ORDER BY NATION, O_YEAR DESC
|
|
@ -0,0 +1,9 @@
|
||||||
|
-- http://www.sqlserver-dba.com/2011/09/this-is-a-followup-on-my-earlier-post-of-sql-server-test-data-generation-testing-tools-i-had-some-requests-for-my-set-up-pr.html
|
||||||
|
SELECT TOP 20 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>= '1993-10-01' AND
|
||||||
|
O_ORDERDATE < dateadd(mm, 3, cast('1993-10-01' as datetime)) 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
|
|
@ -82,7 +82,7 @@ TEST(AutoGrammarTest) {
|
||||||
SQLParserResult* result = SQLParser::parseSQLString(sql.c_str());
|
SQLParserResult* result = SQLParser::parseSQLString(sql.c_str());
|
||||||
|
|
||||||
end = std::chrono::system_clock::now();
|
end = std::chrono::system_clock::now();
|
||||||
std::chrono::duration<double> elapsed_seconds = end-start;
|
std::chrono::duration<double> elapsed_seconds = end - start;
|
||||||
double us = elapsed_seconds.count() * 1000 * 1000;
|
double us = elapsed_seconds.count() * 1000 * 1000;
|
||||||
|
|
||||||
if (expectFalse == result->isValid()) {
|
if (expectFalse == result->isValid()) {
|
||||||
|
|
|
@ -73,7 +73,8 @@ TEST(UpdateStatementTest) {
|
||||||
ASSERT(stmt->where->isType(kExprOperator));
|
ASSERT(stmt->where->isType(kExprOperator));
|
||||||
ASSERT(stmt->where->isSimpleOp('='));
|
ASSERT(stmt->where->isSimpleOp('='));
|
||||||
ASSERT_STREQ(stmt->where->expr->name, "name");
|
ASSERT_STREQ(stmt->where->expr->name, "name");
|
||||||
ASSERT_STREQ(stmt->where->expr2->name, "Max Mustermann");\
|
ASSERT_STREQ(stmt->where->expr2->name, "Max Mustermann");
|
||||||
|
\
|
||||||
|
|
||||||
delete result;
|
delete result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
#include "thirdparty/microtest/microtest.h"
|
||||||
|
#include "sql_asserts.h"
|
||||||
|
#include "SQLParser.h"
|
||||||
|
#include "sqlhelper.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <fstream>
|
||||||
|
#include <streambuf>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace hsql;
|
||||||
|
|
||||||
|
TEST(TPCHQueryTests) {
|
||||||
|
std::vector<std::string> files = {
|
||||||
|
"test/queries/tpc-h-01.sql",
|
||||||
|
"test/queries/tpc-h-02.sql",
|
||||||
|
"test/queries/tpc-h-03.sql",
|
||||||
|
"test/queries/tpc-h-04.sql",
|
||||||
|
"test/queries/tpc-h-05.sql",
|
||||||
|
"test/queries/tpc-h-06.sql",
|
||||||
|
"test/queries/tpc-h-07.sql",
|
||||||
|
"test/queries/tpc-h-08.sql",
|
||||||
|
"test/queries/tpc-h-09.sql",
|
||||||
|
"test/queries/tpc-h-10.sql"
|
||||||
|
};
|
||||||
|
|
||||||
|
int testsFailed = 0;
|
||||||
|
for (const std::string& file_path : files) {
|
||||||
|
std::ifstream t(file_path.c_str());
|
||||||
|
std::string query((std::istreambuf_iterator<char>(t)),
|
||||||
|
std::istreambuf_iterator<char>());
|
||||||
|
|
||||||
|
SQLParserResult* result = SQLParser::parseSQLString(query.c_str());
|
||||||
|
if (!result->isValid()) {
|
||||||
|
mt::printFailed(file_path.c_str());
|
||||||
|
printf("%s %s (L%d:%d)%s\n", mt::red(), result->errorMsg(), result->errorLine(), result->errorColumn(), mt::def());
|
||||||
|
++testsFailed;
|
||||||
|
} else {
|
||||||
|
mt::printOk(file_path.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ASSERT_EQ(testsFailed, 0);
|
||||||
|
}
|
Loading…
Reference in New Issue