]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add test cases to cover TPC-H Q8.
authordrh <drh@noemail.net>
Wed, 11 Sep 2013 14:57:11 +0000 (14:57 +0000)
committerdrh <drh@noemail.net>
Wed, 11 Sep 2013 14:57:11 +0000 (14:57 +0000)
FossilOrigin-Name: eb5cef8351d12c0f8550dac96ee7a6e495975b5a

manifest
manifest.uuid
test/tpch01.test [new file with mode: 0644]

index 11dfa9b55bd997fd4ca1e5095a46ee90df913f06..cc548c623274aceb23731db465091ecf0b0a5b21 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Deterministically\sinitialize\sthe\sPRNG\sused\sas\sa\stie-breaker\sin\sthe\sANALYZE\ncommand,\sso\sthat\sthe\sanalysis\sis\salways\sthe\ssame\sgiven\sthe\ssame\sdatabase.\nThis\ssimplifies\stesting.
-D 2013-09-10T01:41:25.676
+C Add\stest\scases\sto\scover\sTPC-H\sQ8.
+D 2013-09-11T14:57:11.714
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -964,6 +964,7 @@ F test/tkt3992.test f3e7d548ac26f763b47bc0f750da3d03c81071da
 F test/tkt3997.test a335fa41ca3985660a139df7b734a26ef53284bd
 F test/tkt4018.test 7c2c9ba4df489c676a0a7a0e809a1fb9b2185bd1
 F test/tokenize.test ce430a7aed48fc98301611429595883fdfcab5d7
+F test/tpch01.test 8f4ac52f62f3e9f6bce0889105aecdf0275e331b
 F test/trace.test 4b36a41a3e9c7842151af6da5998f5080cdad9e5
 F test/trace2.test e7a988fdd982cdec62f1f1f34b0360e6476d01a0
 F test/trans.test 6e1b4c6a42dba31bd65f8fa5e61a2708e08ddde6
@@ -1111,7 +1112,7 @@ F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
 F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae
 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
-P d6e361d7fb8013d616af91ef2c10038c97d1be5f
-R f0dc49c77588220f9d25d9d712edfe4a
+P 48ed8b565b84c8fa7898c2f9817c01f7e9c9182e
+R b9522deba37561644e51654b6b510026
 U drh
-Z e68c71d629e67be96bb05aa541d1ef71
+Z 8b5488a345e69fd6a7996d8b2149a33e
index b31980649d43c14b07282dfab1f970b645d563e5..d5a16fdb234b3557a0bec74d21df965f727ed26e 100644 (file)
@@ -1 +1 @@
-48ed8b565b84c8fa7898c2f9817c01f7e9c9182e
\ No newline at end of file
+eb5cef8351d12c0f8550dac96ee7a6e495975b5a
\ No newline at end of file
diff --git a/test/tpch01.test b/test/tpch01.test
new file mode 100644 (file)
index 0000000..2d099d6
--- /dev/null
@@ -0,0 +1,187 @@
+# 2013-09-05
+#
+# The author disclaims copyright to this source code.  In place of
+# a legal notice, here is a blessing:
+#
+#    May you do good and not evil.
+#    May you find forgiveness for yourself and forgive others.
+#    May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+# TPC-H test queries.
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set testprefix tpch01
+
+do_execsql_test tpch01-1.0 {
+  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 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 );
+  CREATE 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);
+  CREATE 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 );
+  CREATE 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);
+  CREATE 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);
+  CREATE 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);
+  CREATE INDEX npki on nation(N_NATIONKEY);
+  CREATE INDEX rpki on region(R_REGIONKEY);
+  CREATE INDEX ppki on part(P_PARTKEY);
+  CREATE INDEX spki on supplier(S_SUPPKEY);
+  CREATE INDEX pspki on partsupp(PS_PARTKEY, PS_SUPPKEY);
+  CREATE INDEX cpki on customer(C_CUSTKEY);
+  CREATE INDEX opki on orders(O_ORDERKEY);
+  CREATE INDEX lpki on lineitem(L_ORDERKEY, L_LINENUMBER);
+  CREATE INDEX nrki on nation(n_regionkey);
+  CREATE INDEX snki on supplier(s_nationkey);
+  CREATE INDEX cnki on customer(c_nationkey);
+  CREATE INDEX ocki on orders(O_CUSTKEY);
+  CREATE INDEX odi on orders(O_ORDERDATE);
+  CREATE INDEX lpki2 on lineitem(L_PARTKEY);
+  CREATE INDEX lski on lineitem(L_SUPPKEY);
+  CREATE INDEX lsdi on lineitem(L_SHIPDATE);
+  CREATE INDEX lcdi on lineitem(L_COMMITDATE);
+  CREATE INDEX lrdi on lineitem(L_RECEIPTDATE);
+  CREATE INDEX bootleg_nni on nation(N_NAME);
+  CREATE INDEX bootleg_psi on part(p_size);
+  CREATE INDEX bootleg_pti on part(p_type);
+  ANALYZE sqlite_master;
+  INSERT INTO sqlite_stat1 VALUES('LINEITEM','lrdi','600572 236');
+  INSERT INTO sqlite_stat1 VALUES('LINEITEM','lcdi','600572 244');
+  INSERT INTO sqlite_stat1 VALUES('LINEITEM','lsdi','600572 238');
+  INSERT INTO sqlite_stat1 VALUES('LINEITEM','lski','600572 601');
+  INSERT INTO sqlite_stat1 VALUES('LINEITEM','lpki2','600572 31');
+  INSERT INTO sqlite_stat1 VALUES('LINEITEM','lpki','600572 5 1');
+  INSERT INTO sqlite_stat1 VALUES('ORDERS','odi','150000 63');
+  INSERT INTO sqlite_stat1 VALUES('ORDERS','ocki','150000 15');
+  INSERT INTO sqlite_stat1 VALUES('ORDERS','opki','150000 1');
+  INSERT INTO sqlite_stat1 VALUES('CUSTOMER','cnki','15000 600');
+  INSERT INTO sqlite_stat1 VALUES('CUSTOMER','cpki','15000 1');
+  INSERT INTO sqlite_stat1 VALUES('PARTSUPP','pspki','80000 4 1');
+  INSERT INTO sqlite_stat1 VALUES('SUPPLIER','snki','1000 40');
+  INSERT INTO sqlite_stat1 VALUES('SUPPLIER','spki','1000 1');
+  INSERT INTO sqlite_stat1 VALUES('PART','bootleg_pti','20000 134');
+  INSERT INTO sqlite_stat1 VALUES('PART','bootleg_psi','20000 400');
+  INSERT INTO sqlite_stat1 VALUES('PART','ppki','20000 1');
+  INSERT INTO sqlite_stat1 VALUES('REGION','rpki','5 1');
+  INSERT INTO sqlite_stat1 VALUES('NATION','bootleg_nni','25 1');
+  INSERT INTO sqlite_stat1 VALUES('NATION','nrki','25 5');
+  INSERT INTO sqlite_stat1 VALUES('NATION','npki','25 1');
+  ANALYZE sqlite_master;
+} {}
+
+do_test tpch01-1.1 {
+  unset -nocomplain ::eqpres
+  set ::eqpres [db eval {EXPLAIN QUERY PLAN
+       select
+               o_year,
+               sum(case
+                       when nation = 'EGYPT' then volume
+                       else 0
+               end) / sum(volume) as mkt_share
+       from
+               (
+                       select
+                               strftime('%Y', 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 = 'MIDDLE EAST'
+                               and s_nationkey = n2.n_nationkey
+                               and o_orderdate between  '1995-01-01' and '1996-12-31'
+                               and p_type = 'LARGE PLATED STEEL'
+               ) as all_nations
+       group by
+               o_year
+       order by
+               o_year;}]
+  set ::eqpres
+} {/0 0 0 {SEARCH TABLE part USING INDEX bootleg_pti .P_TYPE=..} 0 1 2 {SEARCH TABLE lineitem USING INDEX lpki2 .L_PARTKEY=..}.*/}
+do_test tpch01-1.1b {
+  set ::eqpres
+} {/.* customer .* nation AS n1 .* nation AS n2 .*/}
+
+do_eqp_test tpch01-1.2 {
+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 >=  '1994-08-01'    and o_orderdate < date('1994-08-01', '+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;
+} {0 0 1 {SEARCH TABLE orders USING INDEX odi (O_ORDERDATE>? AND O_ORDERDATE<?)} 0 1 0 {SEARCH TABLE customer USING INDEX cpki (C_CUSTKEY=?)} 0 2 3 {SEARCH TABLE nation USING INDEX npki (N_NATIONKEY=?)} 0 3 2 {SEARCH TABLE lineitem USING INDEX lpki (L_ORDERKEY=?)} 0 0 0 {USE TEMP B-TREE FOR GROUP BY} 0 0 0 {USE TEMP B-TREE FOR ORDER BY}}